Skip to content

Commit 3d2757f

Browse files
committed
feat(verify): add script to bundle constants and contracts SDK to verify their sizes
1 parent 02b7719 commit 3d2757f

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

verify-contracts-bundle.sh

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6+
ROOT_DIR="$SCRIPT_DIR"
7+
BUNDLE_DIR="$ROOT_DIR/tmp/bundle-test"
8+
ESBUILD="$ROOT_DIR/node_modules/.bin/esbuild"
9+
10+
if [[ ! -x "$ESBUILD" ]]; then
11+
echo "esbuild not found at $ESBUILD; run yarn install first." >&2
12+
exit 1
13+
fi
14+
15+
mkdir -p "$BUNDLE_DIR"
16+
17+
# Ensure entry files exist so the script is self-contained.
18+
cat >"$BUNDLE_DIR/constants-entry.js" <<'JS'
19+
const { NETWORK_CONTEXT_BY_NETWORK } = require('@lit-protocol/constants');
20+
21+
if (!NETWORK_CONTEXT_BY_NETWORK?.datil) {
22+
throw new Error('datil context missing');
23+
}
24+
25+
console.log('datil contracts count:', NETWORK_CONTEXT_BY_NETWORK.datil.data.length);
26+
JS
27+
28+
cat >"$BUNDLE_DIR/contracts-sdk-entry.js" <<'JS'
29+
const { LitContracts } = require('@lit-protocol/contracts-sdk');
30+
31+
if (typeof LitContracts !== 'function') {
32+
throw new Error('LitContracts constructor not found');
33+
}
34+
35+
console.log('LitContracts ready');
36+
JS
37+
38+
echo "Bundling constants mapper (browser)..."
39+
"$ESBUILD" "$BUNDLE_DIR/constants-entry.js" \
40+
--bundle \
41+
--platform=browser \
42+
--format=esm \
43+
--outfile="$BUNDLE_DIR/constants-bundle.js" \
44+
--metafile="$BUNDLE_DIR/constants-meta.json" \
45+
--log-level=info >/dev/null
46+
47+
echo "Bundling contracts SDK (node target for CJS)..."
48+
"$ESBUILD" "$BUNDLE_DIR/contracts-sdk-entry.js" \
49+
--bundle \
50+
--platform=node \
51+
--format=cjs \
52+
--outfile="$BUNDLE_DIR/contracts-sdk-bundle.cjs" \
53+
--metafile="$BUNDLE_DIR/contracts-sdk-meta.json" \
54+
--log-level=info >/dev/null
55+
56+
summarise_meta () {
57+
local label="$1"
58+
local meta_path="$2"
59+
echo ""
60+
echo "$label"
61+
META_PATH="$meta_path" node - <<'NODE'
62+
const path = require('path');
63+
const metaPath = process.env.META_PATH;
64+
const meta = require(metaPath);
65+
const entries = Object.entries(meta.inputs)
66+
.filter(([p]) => p.includes(path.join('@lit-protocol', 'contracts')));
67+
68+
if (entries.length === 0) {
69+
console.log(' <no @lit-protocol/contracts files detected>');
70+
process.exit(0);
71+
}
72+
73+
let total = 0;
74+
for (const [file, info] of entries) {
75+
total += info.bytes;
76+
console.log(
77+
` ${file} -> ${(info.bytes / 1024).toFixed(2)} KiB`
78+
);
79+
}
80+
81+
console.log(
82+
` Total -> ${(total / 1024 / 1024).toFixed(3)} MiB`
83+
);
84+
NODE
85+
}
86+
87+
summarise_meta "Constants bundle includes:" "$BUNDLE_DIR/constants-meta.json"
88+
summarise_meta "Contracts SDK bundle includes:" "$BUNDLE_DIR/contracts-sdk-meta.json"
89+
90+
echo ""
91+
echo "Artifacts written to $BUNDLE_DIR"

0 commit comments

Comments
 (0)