generate-plugin-definitions-source.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 fs = require('graceful-fs');
  8. const normalize = require('normalize-path');
  9. const swig = require('swig-templates');
  10. const helpers = require('@commons/util/helpers');
  11. const PluginUtils = require('../src/server/plugins/plugin-utils');
  12. const pluginUtils = new PluginUtils();
  13. const TEMPLATE = helpers.root('bin/templates/plugin-definitions.js.swig');
  14. const OUT = helpers.root('tmp/plugins/plugin-definitions.js');
  15. // list plugin names
  16. let pluginNames = pluginUtils.listPluginNames(helpers.root());
  17. // add from PLUGIN_NAMES_TOBE_LOADED when development
  18. if (process.env.NODE_ENV === 'development'
  19. && process.env.PLUGIN_NAMES_TOBE_LOADED !== undefined
  20. && process.env.PLUGIN_NAMES_TOBE_LOADED.length > 0) {
  21. const pluginNamesDev = process.env.PLUGIN_NAMES_TOBE_LOADED.split(',');
  22. // merge and remove duplicates
  23. if (pluginNamesDev.length > 0) {
  24. pluginNames = pluginNames.concat(pluginNamesDev);
  25. pluginNames = Array.from(new Set(pluginNames));
  26. }
  27. }
  28. // get definitions
  29. const definitions = pluginNames
  30. .map((name) => {
  31. return pluginUtils.generatePluginDefinition(name, true);
  32. })
  33. .map((definition) => {
  34. // convert backslash to slash
  35. definition.entries = definition.entries.map((entryPath) => {
  36. return normalize(entryPath);
  37. });
  38. return definition;
  39. });
  40. const compiledTemplate = swig.compileFile(TEMPLATE);
  41. const code = compiledTemplate({definitions});
  42. // write
  43. fs.writeFileSync(OUT, code);