]> git.codecow.com Git - libnemo.git/commitdiff
Build vault worker bundle from two-stage esbuild workflow instead of stringifying...
authorChris Duncan <chris@zoso.dev>
Fri, 27 Mar 2026 18:05:19 +0000 (11:05 -0700)
committerChris Duncan <chris@zoso.dev>
Fri, 27 Mar 2026 18:05:19 +0000 (11:05 -0700)
esbuild/config.mjs
esbuild/dev.mjs
esbuild/vault.mjs [new file with mode: 0644]
src/lib/vault/index.ts
src/lib/vault/vault-worker.ts

index 6f36af6acc5f061d49991785be0be26e43af617a..5466379175b642793c9bc38e69ffb2233255095c 100644 (file)
@@ -1,6 +1,8 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
+import { browserVaultWorker, nodeVaultWorker } from './vault.mjs'
+
 /**
 * @type {import('esbuild').BuildOptions}
 */
@@ -27,7 +29,10 @@ export const browserOptions = {
        format: 'esm',
        entryPoints: [
                { in: './src/main.ts', out: 'browser.min' }
-       ]
+       ],
+       define: {
+               'VAULT_WORKER': browserVaultWorker
+       }
 }
 
 /**
@@ -53,5 +58,8 @@ export const nodeOptions = {
        ],
        external: ['node:worker_threads'],
        dropLabels: ['BROWSER'],
-       inject: ['./esbuild/inject/fake-indexeddb.mjs']
+       inject: ['./esbuild/inject/fake-indexeddb.mjs'],
+       define: {
+               'VAULT_WORKER': nodeVaultWorker
+       }
 }
index 1091bc1fc6392a7c4d5b8645759b8f09e90e3d40..1011cedd49cabf050dcd7bf519ebae3e58e72a18 100644 (file)
@@ -5,5 +5,5 @@ import { build } from 'esbuild'
 import { browserOptions, iifeOptions, nodeOptions } from './config.mjs'
 
 await build(browserOptions)
-await build(iifeOptions)
+// await build(iifeOptions)
 await build(nodeOptions)
diff --git a/esbuild/vault.mjs b/esbuild/vault.mjs
new file mode 100644 (file)
index 0000000..51fc274
--- /dev/null
@@ -0,0 +1,28 @@
+//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
+//! SPDX-License-Identifier: GPL-3.0-or-later
+
+import { build } from 'esbuild'
+
+/**
+ * @type {import('esbuild').BuildOptions}
+ */
+const vaultWorkerOptions = {
+       entryPoints: ['./src/lib/vault/vault-worker.ts'],
+       format: 'esm',
+       target: 'es2024',
+       legalComments: 'inline',
+       bundle: true,
+       write: false,
+}
+
+export const browserVaultWorker = JSON.stringify((await build({
+       ...vaultWorkerOptions,
+       platform: 'browser',
+       dropLabels: ['NODE'],
+})).outputFiles?.[0].text)
+
+export const nodeVaultWorker = JSON.stringify((await build({
+       ...vaultWorkerOptions,
+       platform: 'node',
+       dropLabels: ['BROWSER'],
+})).outputFiles?.[0].text)
index 710deb0f1c561b7ae35fd3982400321117ec2dec..0273de5e716a000d1e19629aedbc39f9ca5bcc47 100644 (file)
@@ -2,12 +2,7 @@
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
 import { Worker as NodeWorker } from 'node:worker_threads'
-import { default as CONSTANTS } from '../constants'
-import { Bip39, Bip44, Blake2b, NanoNaCl, Secp256k1, WalletAesGcm } from '../crypto'
 import { Data } from '../database'
-import { Passkey } from './passkey'
-import { VaultTimer } from './vault-timer'
-import { VaultWorker } from './vault-worker'
 
 type Task = {
        id: number
@@ -36,12 +31,14 @@ export class Vault {
                this.#isLocked = true
                this.#isTerminated = false
                this.#queue = []
-               this.#url = URL.createObjectURL(new Blob([blob], { type: 'text/javascript' }))
+               //@ts-expect-error
+               this.#url = URL.createObjectURL(new Blob([VAULT_WORKER], { type: 'text/javascript' }))
                BROWSER: this.#worker = new Worker(this.#url, { type: 'module' })
                BROWSER: this.#worker.addEventListener('message', message => {
                        this.#report(message.data)
                })
-               NODE: this.#worker = new NodeWorker(blob, {
+               //@ts-expect-error
+               NODE: this.#worker = new NodeWorker(VAULT_WORKER, {
                        eval: true,
                        stderr: false,
                        stdout: false
@@ -121,26 +118,3 @@ export class Vault {
                }
        }
 }
-
-const blob = `
-       ${CONSTANTS}
-       const ${Secp256k1.name} = ${Secp256k1}
-       const ${Bip39.name} = ${Bip39}
-       const ${Bip44.name} = ${Bip44}
-       const ${Blake2b.name} = ${Blake2b}
-       const ${NanoNaCl.name} = ${NanoNaCl}
-       const ${WalletAesGcm.name} = ${WalletAesGcm}
-       const ${Passkey.name} = ${Passkey}
-       const ${VaultTimer.name} = ${VaultTimer}
-       const ${VaultWorker.name} = ${VaultWorker}
-       ${Secp256k1.name === 'Secp256k1' ? '' : `const Secp256k1 = ${Secp256k1.name}`}
-       ${Bip39.name === 'Bip39' ? '' : `const Bip39 = ${Bip39.name}`}
-       ${Bip44.name === 'Bip44' ? '' : `const Bip44 = ${Bip44.name}`}
-       ${Blake2b.name === 'Blake2b' ? '' : `const Blake2b = ${Blake2b.name}`}
-       ${NanoNaCl.name === 'NanoNaCl' ? '' : `const NanoNaCl = ${NanoNaCl.name}`}
-       ${WalletAesGcm.name === 'WalletAesGcm' ? '' : `const WalletAesGcm = ${WalletAesGcm.name}`}
-       ${Passkey.name === 'Passkey' ? '' : `const Passkey = ${Passkey.name}`}
-       ${VaultTimer.name === 'VaultTimer' ? '' : `const VaultTimer = ${VaultTimer.name}`}
-       ${VaultWorker.name === 'VaultWorker' ? '' : `const VaultWorker = ${VaultWorker.name}`}
-       const v = new VaultWorker()
-`
index 66436e0b345f5356fcd8e5c7c1083256aab94b1b..88a9b2582fcd4ea10d4306ab2dbe88e77794f209 100644 (file)
@@ -634,3 +634,5 @@ export class VaultWorker {
                return data.type
        }
 }
+
+const v = new VaultWorker()