generate-plugin-definitions-source.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * the tool for genetion of plugin definitions source code
  3. *
  4. * @author Yuki Takei <yuki@weseek.co.jp>
  5. */
  6. import fs from 'graceful-fs';
  7. import normalize from 'normalize-path';
  8. import swig from 'swig-templates';
  9. import PluginUtils from '../src/server/plugins/plugin-utils';
  10. import loggerFactory from '../src/utils/logger';
  11. import { resolveFromRoot } from '../src/utils/project-dir-utils';
  12. const logger = loggerFactory('growi:bin:generate-plugin-definitions-source');
  13. const pluginUtils = new PluginUtils();
  14. const TEMPLATE = resolveFromRoot('bin/templates/plugin-definitions.js.swig');
  15. const OUT = resolveFromRoot('tmp/plugins/plugin-definitions.js');
  16. // list plugin names
  17. const pluginNames: string[] = pluginUtils.listPluginNames();
  18. logger.info('Detected plugins: ', pluginNames);
  19. // get definitions
  20. const definitions = pluginNames
  21. .map((name) => {
  22. return pluginUtils.generatePluginDefinition(name, true);
  23. })
  24. .map((definition) => {
  25. if (definition == null) {
  26. return null;
  27. }
  28. // convert backslash to slash
  29. definition.entries = definition.entries.map((entryPath) => {
  30. return normalize(entryPath);
  31. });
  32. return definition;
  33. })
  34. .filter(definition => definition != null);
  35. const compiledTemplate = swig.compileFile(TEMPLATE);
  36. const code = compiledTemplate({ definitions });
  37. // write
  38. fs.writeFileSync(OUT, code);