aboutsummaryrefslogtreecommitdiffstats
path: root/config/webpack/utils/injected-code.js
blob: a4f88acba3b9204f3c8424391331f4f08c09e4c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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}}`];
};