generate.cjs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env -S node
  2. const path = require('node:path');
  3. const process = require('node:process');
  4. const { rootNode } = require('@kinobi-so/nodes');
  5. const { rootNodeFromAnchor } = require('@kinobi-so/nodes-from-anchor');
  6. const { readJson } = require('@kinobi-so/renderers-core');
  7. const { visit } = require('@kinobi-so/visitors-core');
  8. const { renderVisitor } = require('../dist/index.node.cjs');
  9. async function main() {
  10. const project = process.argv.slice(2)[0] ?? undefined;
  11. if (project === undefined) {
  12. throw new Error('Project name is required.');
  13. }
  14. await generateProject(project);
  15. }
  16. async function generateProject(project) {
  17. const idl = readJson(path.join(__dirname, project, 'idl.json'));
  18. let node;
  19. if (idl?.metadata?.spec) {
  20. node = rootNodeFromAnchor(idl);
  21. } else {
  22. node = rootNode(idl.program, idl.additionalPrograms);
  23. }
  24. await visit(node, renderVisitor(path.join(__dirname, project, 'src', 'generated')));
  25. }
  26. main().catch(err => {
  27. console.error(err);
  28. process.exit(1);
  29. });