diff options
Diffstat (limited to 'config/webpack/plugins/create-rules-webpack-plugin.js')
| -rw-r--r-- | config/webpack/plugins/create-rules-webpack-plugin.js | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/config/webpack/plugins/create-rules-webpack-plugin.js b/config/webpack/plugins/create-rules-webpack-plugin.js new file mode 100644 index 0000000..4a02e2f --- /dev/null +++ b/config/webpack/plugins/create-rules-webpack-plugin.js @@ -0,0 +1,43 @@ +const path = require("path"); +const fs = require("fs"); +const { sources } = require("webpack"); + +class CreateRulesPlugin { + apply(compiler) { + compiler.hooks.compilation.tap("CreateRulesPlugin", compilation => { + compilation.hooks.processAssets.tap( + { + name: "CreateRulesPlugin", + stage: compiler.webpack.Compilation.PROCESS_ASSETS_ADDITIONAL, + additionalAssets: true + }, + assets => { + const ruleFileNames = fs.readdirSync(path.resolve(SOURCE_DIR, "rules")); + const rules = []; + let ruleId = 1; + + for (const ruleFileName of ruleFileNames) { + const rule = require(path.resolve(SOURCE_DIR, "rules", ruleFileName)); + + if (rule instanceof Array) { + for (const rule of rule) { + rule.id = ruleId++; + rules.push(rule); + } + } else { + rule.id = ruleId++; + rules.push(rule); + } + } + + compilation.emitAsset( + "rules.json", + new sources.RawSource(JSON.stringify(rules, undefined, process.env.NODE_ENV === "production" ? undefined : "\t")) + ); + } + ); + }); + } +} + +module.exports = CreateRulesPlugin; |
