generate-plugin-definitions-source.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * the tool for genetion of plugin definitions source code
  3. *
  4. * @author Yuki Takei <yuki@weseek.co.jp>
  5. */
  6. require('module-alias/register');
  7. const logger = require('@alias/logger')('growi:bin:generate-plugin-definitions-source');
  8. const fs = require('graceful-fs');
  9. const normalize = require('normalize-path');
  10. const swig = require('swig-templates');
  11. const helpers = require('@commons/util/helpers');
  12. const PluginUtils = require('@server/plugins/plugin-utils');
  13. const pluginUtils = new PluginUtils();
  14. const TEMPLATE = helpers.root('bin/templates/plugin-definitions.js.swig');
  15. const OUT = helpers.root('tmp/plugins/plugin-definitions.js');
  16. // list plugin names
  17. let pluginNames = pluginUtils.listPluginNames(helpers.root());
  18. logger.info('Detected plugins: ', pluginNames);
  19. // add from PLUGIN_NAMES_TOBE_LOADED when development
  20. if (process.env.NODE_ENV === 'development'
  21. && process.env.PLUGIN_NAMES_TOBE_LOADED !== undefined
  22. && process.env.PLUGIN_NAMES_TOBE_LOADED.length > 0) {
  23. const pluginNamesDev = process.env.PLUGIN_NAMES_TOBE_LOADED.split(',');
  24. logger.info('Detected plugins from PLUGIN_NAMES_TOBE_LOADED: ', pluginNamesDev);
  25. // merge and remove duplicates
  26. if (pluginNamesDev.length > 0) {
  27. pluginNames = pluginNames.concat(pluginNamesDev);
  28. pluginNames = Array.from(new Set(pluginNames));
  29. }
  30. }
  31. // get definitions
  32. const definitions = pluginNames
  33. .map((name) => {
  34. return pluginUtils.generatePluginDefinition(name, true);
  35. })
  36. .map((definition) => {
  37. // convert backslash to slash
  38. definition.entries = definition.entries.map((entryPath) => {
  39. return normalize(entryPath);
  40. });
  41. return definition;
  42. });
  43. const compiledTemplate = swig.compileFile(TEMPLATE);
  44. const code = compiledTemplate({ definitions });
  45. // write
  46. fs.writeFileSync(OUT, code);