From ddebd8bfbe16896ec3560f0edbd440a4317a330d Mon Sep 17 00:00:00 2001 From: Anson Date: Tue, 1 Oct 2024 19:09:10 +0100 Subject: [PATCH 1/6] chore: remove preinstall script to prevent unnecessary local build during package installation --- packages/wasm/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 8eb1355289..371a7f410e 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -25,7 +25,6 @@ "universal" ], "scripts": { - "preinstall": "yarn rust:build", "rust:build": "wasm-pack build ./rust --target web --release --out-name wasm-internal && yarn rust:postbuild", "rust:postbuild": "node scripts/copyWasmBinary.mjs && rm -rf src/pkg && mkdir src/pkg && mv rust/pkg/wasm-internal.js src/pkg && mv rust/pkg/wasm-internal.d.ts src/pkg", "rust:build:debug": "wasm-pack build ./rust --target web --dev --out-name wasm-internal && yarn rust:postbuild" From 04f3622d57fdb749073c2509f5843a3177d8e8c0 Mon Sep 17 00:00:00 2001 From: Anson Date: Tue, 1 Oct 2024 19:27:57 +0100 Subject: [PATCH 2/6] feat: re-route `preinstall` from wasm package to root package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 292b632032..488b58a4c0 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.0.1", "license": "MIT", "scripts": { + "preinstall": "cd packages/wasm && yarn rust:build", "reset:hard": "yarn reset && sh ./tools/scripts/reset.sh", "reset:dev": "yarn tools --remove-local-dev", "reset": "rm -rf ./dist/packages && yarn reset:dev", From 821f0d3ade60999f7fc47af4e1373868ad355d74 Mon Sep 17 00:00:00 2001 From: Anson Date: Wed, 2 Oct 2024 15:28:29 +0100 Subject: [PATCH 3/6] fix: `REMOVE_LINES` was not being respected. It now comments out lines instead of removing them for better debugging purposes. --- packages/wasm/scripts/copyWasmBinary.mjs | 56 ++++++++++++++++-------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/packages/wasm/scripts/copyWasmBinary.mjs b/packages/wasm/scripts/copyWasmBinary.mjs index b0115c877a..3163079c69 100644 --- a/packages/wasm/scripts/copyWasmBinary.mjs +++ b/packages/wasm/scripts/copyWasmBinary.mjs @@ -4,17 +4,12 @@ import * as pako from 'pako'; const WASM_MODULE_PATH = 'rust/pkg/wasm-internal_bg.wasm'; const WASM_BINDING_PATH = 'rust/pkg/wasm-internal.js'; const CHUNK_SIZE = 100; -const REMOVE_LINES = [ - ` - if (typeof input === 'undefined') { - input = new URL('wasm-internal_bg.wasm', import.meta.url); - } -`, - ` - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } -`, +const COMMENT_OUT_LINES = [ + // This regex matches the block that checks if `module_or_path` is undefined and assigns a URL to it. + /if\s*\(\s*typeof\s+module_or_path\s*===\s*['"`]undefined['"`]\s*\)\s*{\s*module_or_path\s*=\s*new\s+URL\s*\(\s*['"`]wasm-internal_bg\.wasm['"`],\s*import\.meta\.url\s*\);\s*}/g, + + // This regex matches the block that checks if `module_or_path` is a string, `Request`, or `URL` and assigns it to the result of a `fetch`. + /if\s*\(\s*typeof\s+module_or_path\s*===\s*['"`]string['"`]\s*\|\|\s*\(typeof\s+Request\s*===\s*['"`]function['"`]\s*&&\s*module_or_path\s*instanceof\s+Request\)\s*\|\|\s*\(typeof\s+URL\s*===\s*['"`]function['"`]\s*&&\s*module_or_path\s*instanceof\s+URL\)\s*\)\s*{\s*module_or_path\s*=\s*fetch\s*\(module_or_path\);\s*}/g, ]; function main() { @@ -31,7 +26,7 @@ function main() { } let bindingModuleString = ` -// @ts-nocheck +// @ts-nocheck - autogenerated from copyWasmBinary.mjs import * as pako from 'pako'; `; bindingModuleString += '\n'; @@ -46,13 +41,38 @@ export function getModule() { bindingModuleString += wasmBindingModule; - for (const removeItem of REMOVE_LINES) { - const regex = new RegExp( - removeItem.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), - 'g' - ); // Escape special characters + let allReplacementsDone = true; // Track whether all replacements were successful + + for (const commentOutItem of COMMENT_OUT_LINES) { + const originalString = bindingModuleString; // Store the original string before replacement + + bindingModuleString = bindingModuleString.replace( + commentOutItem, + (match) => { + const headerComment = + '// NOTE: This line is commented out automatically by copyWasmBinary.mjs\n'; + const commentedBlock = match + .split('\n') // Split the matched block into lines + .map((line) => `// ${line}`) // Add "//" to each line + .join('\n'); // Re-join the lines into a single string + + return `${headerComment}${commentedBlock}`; // Prepend the header comment to the commented block + } + ); + + // If no replacement was done (i.e., original string remains the same), mark as failure + if (originalString === bindingModuleString) { + allReplacementsDone = false; + } + } - bindingModuleString = bindingModuleString.replace(regex, ''); + // throw an error if all replacements were NOT successful + if (!allReplacementsDone) { + throw new Error( + '❗️❗️ Failed to comment out all specified lines in the wasm binding module.' + ); + } else { + console.log('✅ All replacements were successful!'); } console.log('Writing wasm module'); From 3ab993119c74ee4e5c1cebe2affa680b0ac4b471 Mon Sep 17 00:00:00 2001 From: Anson Date: Wed, 2 Oct 2024 15:39:18 +0100 Subject: [PATCH 4/6] fix: `preinstall` script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 488b58a4c0..a9a04751dd 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "license": "MIT", "scripts": { - "preinstall": "cd packages/wasm && yarn rust:build", + "preinstall": "yarn && cd packages/wasm && yarn rust:build", "reset:hard": "yarn reset && sh ./tools/scripts/reset.sh", "reset:dev": "yarn tools --remove-local-dev", "reset": "rm -rf ./dist/packages && yarn reset:dev", From e4a26e11dfd19e46ee293c542e2fc4577e40b343 Mon Sep 17 00:00:00 2001 From: Anson Date: Wed, 2 Oct 2024 15:39:44 +0100 Subject: [PATCH 5/6] fix: `preinstall` script --- packages/wasm/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 371a7f410e..9603ecf156 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -1,6 +1,6 @@ { "name": "@lit-protocol/wasm", - "version": "6.4.0", + "version": "6.7.0", "type": "commonjs", "homepage": "https://github.com/Lit-Protocol/js-sdk", "repository": { From 71e12170a5eec3ed53b52aeb5c733a8e795d5282 Mon Sep 17 00:00:00 2001 From: Anson Date: Wed, 2 Oct 2024 15:43:12 +0100 Subject: [PATCH 6/6] fix: remove `preinstall` script --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index a9a04751dd..292b632032 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "0.0.1", "license": "MIT", "scripts": { - "preinstall": "yarn && cd packages/wasm && yarn rust:build", "reset:hard": "yarn reset && sh ./tools/scripts/reset.sh", "reset:dev": "yarn tools --remove-local-dev", "reset": "rm -rf ./dist/packages && yarn reset:dev",