run.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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
  9. .readFileSync(path, 'utf8')
  10. .match(/\/\/ OpenZeppelin Contracts \(last updated v[^)]+\)/)[0];
  11. } catch (err) {
  12. return null;
  13. }
  14. }
  15. for (const [ file, template ] of Object.entries({
  16. // SafeCast
  17. 'utils/math/SafeCast.sol': './templates/SafeCast.js',
  18. 'mocks/SafeCastMock.sol': './templates/SafeCastMock.js',
  19. // EnumerableSet
  20. 'utils/structs/EnumerableSet.sol': './templates/EnumerableSet.js',
  21. 'mocks/EnumerableSetMock.sol': './templates/EnumerableSetMock.js',
  22. // EnumerableMap
  23. 'utils/structs/EnumerableMap.sol': './templates/EnumerableMap.js',
  24. 'mocks/EnumerableMapMock.sol': './templates/EnumerableMapMock.js',
  25. // Checkpoints
  26. 'utils/Checkpoints.sol': './templates/Checkpoints.js',
  27. 'mocks/CheckpointsMock.sol': './templates/CheckpointsMock.js',
  28. })) {
  29. const script = path.relative(path.join(__dirname, '../..'), __filename);
  30. const input = path.join(path.dirname(script), template);
  31. const output = `./contracts/${file}`;
  32. const version = getVersion(output);
  33. const content = format(
  34. '// SPDX-License-Identifier: MIT',
  35. ...(version ? [ version + ` (${file})` ] : []),
  36. `// This file was procedurally generated from ${input}.`,
  37. '',
  38. require(template),
  39. );
  40. fs.writeFileSync(output, content);
  41. cp.execFileSync('prettier', ['--write', output]);
  42. }