Don't run auto-init, but set input (#319)

* Don't run auto-init, but set input

* Adjust
This commit is contained in:
Jaco
2022-03-26 16:39:57 +01:00
committed by GitHub
parent b4f7b0b177
commit 9795eaf31c
9 changed files with 33 additions and 30 deletions

View File

@@ -18,6 +18,8 @@
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs",
"./initNone.js",
"./initNone.cjs",
"./initOnlyAsm.js",
"./initOnlyAsm.cjs",
"./initOnlyWasm.js",

View File

@@ -15,6 +15,7 @@ type PopFirst<T extends unknown[]> =
interface Bridge {
cachegetInt32: Int32Array | null;
cachegetUint8: Uint8Array | null;
initFn: null | (() => Promise<void>);
type: 'wasm' | 'asm';
wasm: WasmCryptoInstance | null;
wasmPromise: Promise<void> | null;
@@ -23,6 +24,7 @@ interface Bridge {
export const __bridge: Bridge = {
cachegetInt32: null,
cachegetUint8: null,
initFn: null,
type: 'wasm',
wasm: null,
wasmPromise: null

View File

@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { __bridge, allocString, allocU8a, getWasm, resultString, resultU8a, withWasm } from './bridge';
import { setWasmOnlyPromise } from './initOnlyWasmBase';
import { initWasm } from './init';
export { packageInfo } from './packageInfo';
@@ -202,10 +202,17 @@ export function isReady (): boolean {
return !!getWasm();
}
export function waitReady (): Promise<boolean> {
return (
__bridge.wasmPromise || setWasmOnlyPromise()
)
export async function waitReady (): Promise<boolean> {
if (!__bridge.wasmPromise) {
if (!__bridge.initFn) {
__bridge.initFn = initWasm;
}
__bridge.wasmPromise = __bridge.initFn().catch(() => undefined);
}
return __bridge
.wasmPromise
.then(() => isReady())
.catch(() => false);
}

View File

@@ -4,6 +4,7 @@
import type { AsmCreator, WasmCryptoInstance } from './types';
import { assert } from '@polkadot/util';
import { wasmBytes } from '@polkadot/wasm-crypto-wasm';
import { __bridge } from './bridge';
import * as wbg from './imports';
@@ -28,10 +29,12 @@ async function createPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator |
}
}
export function setPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null, force = false): Promise<void> {
if (!__bridge.wasmPromise || force) {
__bridge.wasmPromise = createPromise(wasmBytes, asmFn);
}
export function setPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null): Promise<void> {
__bridge.wasmPromise = createPromise(wasmBytes, asmFn);
return __bridge.wasmPromise;
}
export function initWasm (): Promise<void> {
return setPromise(wasmBytes, null);
}

View File

@@ -20,4 +20,4 @@ export function initWasm (): Promise<void> {
return setWasmOnlyPromise();
}
initWasm().catch(() => undefined);
__bridge.initFn = initWasm;

View File

@@ -3,10 +3,11 @@
import { asmJsInit } from '@polkadot/wasm-crypto-asmjs';
import { __bridge } from './bridge';
import { setPromise } from './init';
export function initWasm (): Promise<void> {
return setPromise(null, asmJsInit, true);
return setPromise(null, asmJsInit);
}
initWasm().catch(() => undefined);
__bridge.initFn = initWasm;

View File

@@ -1,10 +1,7 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { setWasmOnlyPromise } from './initOnlyWasmBase';
import { __bridge } from './bridge';
import { initWasm } from './init';
export function initWasm (): Promise<void> {
return setWasmOnlyPromise();
}
initWasm().catch(() => undefined);
__bridge.initFn = initWasm;

View File

@@ -1,10 +0,0 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { wasmBytes } from '@polkadot/wasm-crypto-wasm';
import { setPromise } from './init';
export function setWasmOnlyPromise (force = false): Promise<void> {
return setPromise(wasmBytes, null, force);
}

View File

@@ -4,10 +4,11 @@
import { asmJsInit } from '@polkadot/wasm-crypto-asmjs';
import { wasmBytes } from '@polkadot/wasm-crypto-wasm';
import { __bridge } from './bridge';
import { setPromise } from './init';
export function initWasm (): Promise<void> {
return setPromise(wasmBytes, asmJsInit, true);
return setPromise(wasmBytes, asmJsInit);
}
initWasm().catch(() => undefined);
__bridge.initFn = initWasm;