mirror of openzeppelin-contracts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
openzeppelin-contracts/scripts/generate/run.js

46 lines
1.5 KiB

#!/usr/bin/env node
const cp = require('child_process');
const fs = require('fs');
const path = require('path');
const format = require('./format-lines');
function getVersion (path) {
try {
return fs
.readFileSync(path, 'utf8')
.match(/\/\/ OpenZeppelin Contracts \(last updated v[^)]+\)/)[0];
} catch (err) {
return null;
}
}
for (const [ file, template ] of Object.entries({
// SafeCast
'utils/math/SafeCast.sol': './templates/SafeCast.js',
'mocks/SafeCastMock.sol': './templates/SafeCastMock.js',
// EnumerableSet
'utils/structs/EnumerableSet.sol': './templates/EnumerableSet.js',
'mocks/EnumerableSetMock.sol': './templates/EnumerableSetMock.js',
// EnumerableMap
'utils/structs/EnumerableMap.sol': './templates/EnumerableMap.js',
'mocks/EnumerableMapMock.sol': './templates/EnumerableMapMock.js',
// Checkpoints
'utils/Checkpoints.sol': './templates/Checkpoints.js',
'mocks/CheckpointsMock.sol': './templates/CheckpointsMock.js',
})) {
const script = path.relative(path.join(__dirname, '../..'), __filename);
const input = path.join(path.dirname(script), template);
const output = `./contracts/${file}`;
const version = getVersion(output);
const content = format(
'// SPDX-License-Identifier: MIT',
...(version ? [ version + ` (${file})` ] : []),
`// This file was procedurally generated from ${input}.`,
'',
require(template),
);
fs.writeFileSync(output, content);
cp.execFileSync('prettier', ['--write', output]);
}