aboutsummaryrefslogtreecommitdiffstats
path: root/config/webpack/plugins/sanitize-scripts-import-webpack-plugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'config/webpack/plugins/sanitize-scripts-import-webpack-plugin.js')
-rw-r--r--config/webpack/plugins/sanitize-scripts-import-webpack-plugin.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/config/webpack/plugins/sanitize-scripts-import-webpack-plugin.js b/config/webpack/plugins/sanitize-scripts-import-webpack-plugin.js
new file mode 100644
index 0000000..61ce804
--- /dev/null
+++ b/config/webpack/plugins/sanitize-scripts-import-webpack-plugin.js
@@ -0,0 +1,56 @@
+const { sources } = require("webpack");
+
+const propectualIndexOf = (string, characterList, start) => {
+ if (start > 0) {
+ let i = 0;
+ let x = start;
+ while (i < characterList.length) {
+ x = string.indexOf(characterList[i], x + 1);
+ if (x < 0) {
+ return -1;
+ }
+ i++;
+ }
+ return x;
+ } else {
+ return -1;
+ }
+};
+
+class SanitizeScriptsImportPlugin {
+ apply(compiler) {
+ compiler.hooks.compilation.tap("SanitizeScriptsImportPlugin", compilation => {
+ compilation.hooks.processAssets.tap(
+ {
+ name: "SanitizeScriptsImportPlugin",
+ stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE,
+ additionalAssets: true
+ },
+ assets => {
+ for (const assetName in assets) {
+ if (assetName.endsWith(".js")) {
+ const currentAssetContent = compilation.getAsset(assetName).source.source();
+ let previouslyEnded = 0;
+ let code = "";
+ while (true) {
+ const start = propectualIndexOf(currentAssetContent, ["\n/***/", "\n/***/", "\n"], previouslyEnded + 1);
+ previouslyEnded = propectualIndexOf(currentAssetContent, ["\n/***/"], start + 1);
+ if (previouslyEnded < 0) {
+ break;
+ } else {
+ code += currentAssetContent.substring(start, previouslyEnded);
+ }
+ }
+ compilation.updateAsset(
+ assetName,
+ new sources.RawSource(code)
+ );
+ }
+ }
+ }
+ );
+ });
+ }
+}
+
+module.exports = SanitizeScriptsImportPlugin;