Skip to content

Commit 74ae79f

Browse files
Tsvetan StoychevTsvetan Stoychev
authored andcommitted
Make loader minification reproducible
1 parent f5cf527 commit 74ae79f

4 files changed

Lines changed: 66 additions & 5 deletions

File tree

‎package-lock.json‎

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
},
88
"scripts": {
99
"test": "npm run test:js",
10-
"test:js": "playwright test",
10+
"test:js": "sh tools/verify-loader-minification.sh && playwright test",
1111
"test:js:headed": "playwright test --headed",
12-
"test:e2e:woocommerce": "playwright test --config=playwright.woocommerce-e2e.config.js"
12+
"test:e2e:woocommerce": "playwright test --config=playwright.woocommerce-e2e.config.js",
13+
"minify:loaders": "uglifyjs plugins/basicrum/assets/js/loaders/boomerang-loader-v15.js --mangle -o plugins/basicrum/assets/js/loaders/boomerang-loader-v15.min.js && uglifyjs plugins/basicrum/assets/js/loaders/consent-boomerang-loader-v1-15.js --mangle --comments '/^!/' -o plugins/basicrum/assets/js/loaders/consent-boomerang-loader-v1-15.min.js"
1314
},
1415
"devDependencies": {
15-
"@playwright/test": "1.61.1"
16+
"@playwright/test": "1.61.1",
17+
"uglify-js": "3.19.3"
1618
}
1719
}

‎plugins/basicrum/assets/js/loaders/boomerang-loader-v15.min.js‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/sh
2+
# Verify that the shipped minified loaders are exactly the mangle-only
3+
# derivation of their readable sources, using the uglify-js version pinned in
4+
# package-lock.json. Mangle-only renames local identifiers but never window
5+
# properties, so the public OPT_IN_BASICRUM_LOADER_WRAPPER and
6+
# OPT_OUT_BASICRUM_LOADER_WRAPPER callbacks always survive verbatim, and the
7+
# minified twins cannot drift from the audited readable files.
8+
set -eu
9+
10+
LOADERS_DIR="plugins/basicrum/assets/js/loaders"
11+
UGLIFY="node_modules/.bin/uglifyjs"
12+
13+
if [ ! -x "$UGLIFY" ]; then
14+
printf '%s\n' 'uglify-js is not installed; run npm ci first.' >&2
15+
exit 1
16+
fi
17+
18+
TMP_DIR=$(mktemp -d)
19+
trap 'rm -rf "$TMP_DIR"' EXIT
20+
21+
"$UGLIFY" "$LOADERS_DIR/boomerang-loader-v15.js" \
22+
--mangle -o "$TMP_DIR/standard.min.js"
23+
"$UGLIFY" "$LOADERS_DIR/consent-boomerang-loader-v1-15.js" \
24+
--mangle --comments '/^!/' -o "$TMP_DIR/consent.min.js"
25+
26+
for pair in \
27+
"$TMP_DIR/standard.min.js:$LOADERS_DIR/boomerang-loader-v15.min.js" \
28+
"$TMP_DIR/consent.min.js:$LOADERS_DIR/consent-boomerang-loader-v1-15.min.js"; do
29+
expected=${pair%%:*}
30+
shipped=${pair#*:}
31+
32+
if ! cmp -s "$expected" "$shipped"; then
33+
printf '%s is not the mangle-only derivation of its readable source. Run: npm run minify:loaders\n' "$shipped" >&2
34+
exit 1
35+
fi
36+
done
37+
38+
for callback in OPT_IN_BASICRUM_LOADER_WRAPPER OPT_OUT_BASICRUM_LOADER_WRAPPER; do
39+
if ! grep -q "$callback" "$LOADERS_DIR/consent-boomerang-loader-v1-15.min.js"; then
40+
printf 'Public callback %s is missing from the minified consent loader.\n' "$callback" >&2
41+
exit 1
42+
fi
43+
done
44+
45+
printf '%s\n' 'Loader minification check passed.'

0 commit comments

Comments
 (0)