run.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/env node
  2. const cp = require('child_process');
  3. const fs = require('fs');
  4. const path = require('path');
  5. const format = require('./format-lines');
  6. function getVersion(path) {
  7. try {
  8. return fs.readFileSync(path, 'utf8').match(/\/\/ OpenZeppelin Contracts \(last updated v[^)]+\)/)[0];
  9. } catch (err) {
  10. return null;
  11. }
  12. }
  13. for (const [file, template] of Object.entries({
  14. 'utils/math/SafeCast.sol': './templates/SafeCast.js',
  15. 'utils/structs/EnumerableSet.sol': './templates/EnumerableSet.js',
  16. 'utils/structs/EnumerableMap.sol': './templates/EnumerableMap.js',
  17. 'utils/Checkpoints.sol': './templates/Checkpoints.js',
  18. })) {
  19. const script = path.relative(path.join(__dirname, '../..'), __filename);
  20. const input = path.join(path.dirname(script), template);
  21. const output = `./contracts/${file}`;
  22. const version = getVersion(output);
  23. const content = format(
  24. '// SPDX-License-Identifier: MIT',
  25. ...(version ? [version + ` (${file})`] : []),
  26. `// This file was procedurally generated from ${input}.`,
  27. '',
  28. require(template),
  29. );
  30. fs.writeFileSync(output, content);
  31. cp.execFileSync('prettier', ['--write', output]);
  32. }