Skip to content

Commit 7fcbc16

Browse files
committed
injected: replace rollup with esbuild
1 parent 809166f commit 7fcbc16

File tree

8 files changed

+167
-727
lines changed

8 files changed

+167
-727
lines changed

injected/entry-points/chrome.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
import { isTrackerOrigin } from '../src/trackers';
55
import { computeLimitedSiteObject } from '../src/utils';
6+
import contentScopeFeatures from 'ddg:contentScopeFeatures'
67

78
/**
89
* Inject all the overwrites into the page.
@@ -48,7 +49,7 @@ function init() {
4849
const reusableMethodName = '_rm' + randomString();
4950
const reusableSecret = '_r' + randomString();
5051
const siteObject = computeLimitedSiteObject();
51-
const initialScript = `
52+
const initialScript = contentScopeFeatures + `
5253
/* global contentScopeFeatures */
5354
contentScopeFeatures.load({
5455
platform: {

injected/package.json

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,10 @@
33
"scripts": {
44
"postinstall": "npm run copy-sjcl",
55
"copy-sjcl": "node scripts/generateSJCL.js",
6+
"build": "npm run build-types && npm run build-locales && npm run bundle-trackers && npm run bundle-entry-points",
67
"bundle-config": "node scripts/bundleConfig.mjs",
7-
"build": "npm run build-types && npm run build-locales && npm run bundle-trackers && npm run build-firefox && npm run build-chrome && npm run build-apple && npm run build-android && npm run build-windows && npm run build-integration && npm run build-chrome-mv3",
8+
"bundle-entry-points": "node scripts/entry-points.js",
89
"build-locales": "node scripts/buildLocales.js",
9-
"build-firefox": "node scripts/entry-points.js --platform firefox",
10-
"build-chrome": "node scripts/entry-points.js --platform chrome",
11-
"build-chrome-mv3": "node scripts/entry-points.js --platform chrome-mv3",
12-
"build-apple": "node scripts/entry-points.js --platform apple && node scripts/entry-points.js --platform apple-isolated",
13-
"build-android": "node scripts/entry-points.js --platform android && node scripts/entry-points.js --platform android-autofill-password-import && node scripts/entry-points.js --platform android-broker-protection",
14-
"build-windows": "node scripts/entry-points.js --platform windows",
15-
"build-integration": "node scripts/entry-points.js --platform integration",
1610
"build-types": "node scripts/types.mjs",
1711
"bundle-trackers": "node scripts/bundleTrackers.mjs --output ../build/tracker-lookup.json",
1812
"test-unit": "jasmine --config=unit-test/config.json",
@@ -39,18 +33,12 @@
3933
"@canvas/image-data": "^1.0.0",
4034
"@duckduckgo/privacy-configuration": "github:duckduckgo/privacy-configuration#main",
4135
"@fingerprintjs/fingerprintjs": "^4.5.1",
42-
"@rollup/plugin-commonjs": "^28.0.2",
43-
"@rollup/plugin-node-resolve": "^16.0.0",
44-
"@rollup/plugin-replace": "^6.0.2",
4536
"@types/chrome": "^0.0.306",
4637
"@types/jasmine": "^5.1.7",
4738
"@types/node": "^22.13.5",
4839
"@typescript-eslint/eslint-plugin": "^8.20.0",
4940
"fast-check": "^3.23.2",
5041
"jasmine": "^5.6.0",
51-
"minimist": "^1.2.8",
52-
"rollup": "^4.34.8",
53-
"rollup-plugin-import-css": "^3.5.8",
54-
"rollup-plugin-svg-import": "^3.0.0"
42+
"minimist": "^1.2.8"
5543
}
5644
}

injected/scripts/entry-points.js

Lines changed: 23 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { postProcess, rollupScript } from './utils/build.js';
1+
import { bundle } from './utils/build.js'
22
import { parseArgs, write } from '../../scripts/script-utils.js';
3-
import { camelcase } from '../src/utils.js';
4-
5-
const contentScopePath = 'src/content-scope-features.js';
6-
const contentScopeName = 'contentScopeFeatures';
73

84
/**
95
* @typedef Build
@@ -34,11 +30,11 @@ const builds = {
3430
output: ['../build/android/contentScope.js'],
3531
},
3632
'android-broker-protection': {
37-
input: 'entry-points/android',
33+
input: 'entry-points/android.js',
3834
output: ['../build/android/brokerProtection.js'],
3935
},
4036
'android-autofill-password-import': {
41-
input: 'entry-points/android',
37+
input: 'entry-points/android.js',
4238
output: ['../build/android/autofillPasswordImport.js'],
4339
},
4440
windows: {
@@ -63,59 +59,31 @@ const builds = {
6359
},
6460
};
6561

66-
async function initOther(injectScriptPath, platformName) {
67-
const identName = `inject${camelcase(platformName)}`;
68-
const injectScript = await rollupScript({
69-
scriptPath: injectScriptPath,
70-
name: identName,
71-
platform: platformName,
72-
});
73-
const outputScript = injectScript;
74-
return outputScript;
75-
}
62+
async function init () {
63+
// verify the input
64+
const requiredFields = []
65+
const args = parseArgs(process.argv.slice(2), requiredFields)
7666

77-
/**
78-
* @param {string} entry
79-
* @param {string} platformName
80-
*/
81-
async function initChrome(entry, platformName) {
82-
const replaceString = '/* global contentScopeFeatures */';
83-
const injectScript = await rollupScript({ scriptPath: entry, platform: platformName });
84-
const contentScope = await rollupScript({
85-
scriptPath: contentScopePath,
86-
name: contentScopeName,
87-
platform: platformName,
88-
});
89-
// Encode in URI format to prevent breakage (we could choose to just escape ` instead)
90-
// NB: .replace(/\r\n/g, "\n") is needed because in Windows rollup generates CRLF line endings
91-
const encodedString = encodeURI(contentScope.toString().replace(/\r\n/g, '\n'));
92-
const outputScript = injectScript.toString().replace(replaceString, '${decodeURI("' + encodedString + '")}');
93-
return outputScript;
94-
}
67+
// if a platform was given as an argument, just build that platform
68+
if (args.platform) {
69+
const build = builds[args.platform]
70+
if (!build) {
71+
throw new Error('unsupported platform: ' + args.platform)
72+
}
73+
const output = await bundle({ scriptPath: build.input, platform: args.platform })
9574

96-
async function init() {
97-
// verify the input
98-
const requiredFields = ['platform'];
99-
const args = parseArgs(process.argv.slice(2), requiredFields);
100-
const build = builds[args.platform];
75+
// bundle and write the output
76+
write([build.output], output)
10177

102-
if (!build) {
103-
throw new Error('unsupported platform: ' + args.platform);
78+
return
10479
}
10580

106-
let output;
107-
if (args.platform === 'chrome') {
108-
output = await initChrome(build.input, args.platform);
109-
} else {
110-
output = await initOther(build.input, args.platform);
111-
if (build.postProcess) {
112-
const processResult = await postProcess(output);
113-
output = processResult.code;
114-
}
81+
// otherwise, just build them all
82+
for (const [injectName, build] of Object.entries(builds)) {
83+
const output = await bundle({ scriptPath: build.input, platform: injectName })
84+
write(build.output, output)
85+
console.log('✅', injectName, build.output[0]);
11586
}
116-
117-
// bundle and write the output
118-
write([build.output], output);
11987
}
12088

121-
init();
89+
init()

0 commit comments

Comments
 (0)