diff options
Diffstat (limited to 'config/webpack/utils/injected-code.js')
| -rw-r--r-- | config/webpack/utils/injected-code.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/config/webpack/utils/injected-code.js b/config/webpack/utils/injected-code.js new file mode 100644 index 0000000..a4f88ac --- /dev/null +++ b/config/webpack/utils/injected-code.js @@ -0,0 +1,41 @@ +const crypto = require("crypto"); + +const getHash = url => + crypto + .createHash("md5") + .update(url) + .digest("hex") + .substring(16); + +module.exports.getInjectedCode = code => { + const extensionAssets = {}; + let i = 0; + + while (true) { + i = code.indexOf("\"$l{", i); + + if (i < 0) { + break; + } + + const start = i; + const end = code.indexOf("}l$\"", i); + + if (end <= 0) { + break; + } + + const url = code.substring(start + 4, end).trim(); + const urlHash = getHash(url); + code = code.substring(0, start) + `document.currentScript.getAttribute("data-${urlHash}")` + code.substring(end + 4); + extensionAssets[urlHash] = url; + + i = end + 4; + } + + const extensionAssetsCode = Object.entries(extensionAssets).map( + asset => `"${asset[0]}": chrome.runtime.getURL("${asset[1]}")` + ).join(","); + + return [code, `{${extensionAssetsCode}}`]; +}; |
