generate-plugin-definitions-source.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 { PluginDefinitionV4 } from '@growi/core';
  10. import PluginUtils from '../src/server/plugins/plugin-utils';
  11. import loggerFactory from '../src/utils/logger';
  12. import { resolveFromRoot } from '../src/utils/project-dir-utils';
  13. const logger = loggerFactory('growi:bin:generate-plugin-definitions-source');
  14. const pluginUtils = new PluginUtils();
  15. const TEMPLATE = resolveFromRoot('bin/templates/plugin-definitions.js.swig');
  16. const OUT = resolveFromRoot('tmp/plugins/plugin-definitions.js');
  17. // list plugin names
  18. const pluginNames: string[] = pluginUtils.listPluginNames();
  19. logger.info('Detected plugins: ', pluginNames);
  20. async function main(): Promise<void> {
  21. // get definitions
  22. const definitions: PluginDefinitionV4[] = [];
  23. for (const pluginName of pluginNames) {
  24. // eslint-disable-next-line no-await-in-loop
  25. const definition = await pluginUtils.generatePluginDefinition(pluginName, true);
  26. if (definition != null) {
  27. definitions.push(definition);
  28. }
  29. }
  30. definitions.map((definition) => {
  31. // convert backslash to slash
  32. definition.entries = definition.entries.map((entryPath) => {
  33. return normalize(entryPath);
  34. });
  35. return definition;
  36. });
  37. const compiledTemplate = swig.compileFile(TEMPLATE);
  38. const code = compiledTemplate({ definitions });
  39. // write
  40. fs.writeFileSync(OUT, code);
  41. }
  42. main();