@mirascript/wasm 0.1.17 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/loader/node.d.ts +1 -2
- package/dist/loader/node.d.ts.map +1 -1
- package/dist/loader/node.js.map +1 -1
- package/dist/loader/web.d.ts +1 -2
- package/dist/loader/web.d.ts.map +1 -1
- package/dist/loader/web.js +20 -7
- package/dist/loader/web.js.map +1 -1
- package/lib/wasm.d.ts +57 -40
- package/lib/wasm.js +537 -553
- package/lib/wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/src/index.ts +11 -8
- package/src/loader/node.ts +1 -2
- package/src/loader/web.ts +23 -14
package/lib/wasm_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -4,14 +4,17 @@ import type { Config, InputMode, DiagnosticPositionEncoding, ScriptInput } from
|
|
|
4
4
|
export type { WasmCompileResult, WasmConfig };
|
|
5
5
|
|
|
6
6
|
export let wasm: typeof import('../lib/wasm.js');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
7
|
+
|
|
8
|
+
const module = import('@mirascript/wasm/loader').then(async ({ module }) => module);
|
|
9
|
+
|
|
10
|
+
// 避免 vite 打包时出错
|
|
11
|
+
void import('../lib/wasm.js').then(async (mod) => {
|
|
12
|
+
mod.initSync({ module: await module });
|
|
13
|
+
wasm = mod;
|
|
14
|
+
});
|
|
15
|
+
export const ready = module.then(async () => {
|
|
16
|
+
await new Promise<void>((resolve) => setTimeout(resolve, 1));
|
|
17
|
+
});
|
|
15
18
|
|
|
16
19
|
/** 创建可重用的配置 */
|
|
17
20
|
export function createConfig(config?: Config | WasmConfig): WasmConfig {
|
package/src/loader/node.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
|
-
import type { InitInput } from '../../lib/wasm.js';
|
|
3
2
|
|
|
4
3
|
const file = /* @__PURE__ */ new URL('../../lib/wasm_bg.wasm', import.meta.url);
|
|
5
|
-
export const module: Promise<
|
|
4
|
+
export const module: Promise<BufferSource> = /* @__PURE__ */ fs.readFile(file);
|
package/src/loader/web.ts
CHANGED
|
@@ -1,34 +1,43 @@
|
|
|
1
|
-
import type { InitInput } from '../../lib/wasm.js';
|
|
2
|
-
|
|
3
1
|
/** 回退加载 */
|
|
4
2
|
async function loadFallback() {
|
|
5
3
|
const fallbackUrl =
|
|
6
4
|
(document?.currentScript instanceof HTMLScriptElement
|
|
7
5
|
? document.currentScript.src
|
|
8
6
|
: (document.currentScript?.href?.baseVal ?? '')) || document.location.href;
|
|
9
|
-
return await fetch(new URL('../../lib/wasm_bg.wasm', fallbackUrl));
|
|
7
|
+
return await body(fetch(new URL('../../lib/wasm_bg.wasm', fallbackUrl)));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** 获取模块的响应体 */
|
|
11
|
+
async function body(response: Response | Promise<Response>): Promise<BufferSource> {
|
|
12
|
+
const resp = await response;
|
|
13
|
+
if (resp.ok) {
|
|
14
|
+
return await resp.arrayBuffer();
|
|
15
|
+
} else {
|
|
16
|
+
throw new Error(`Failed to fetch wasm module: ${resp.status} ${resp.statusText}`);
|
|
17
|
+
}
|
|
10
18
|
}
|
|
11
19
|
|
|
12
20
|
/** 加载模块 */
|
|
13
|
-
async function loadMod(mod: unknown): Promise<
|
|
21
|
+
async function loadMod(mod: unknown): Promise<BufferSource> {
|
|
14
22
|
if (mod && typeof mod == 'object' && 'default' in mod) {
|
|
15
23
|
return loadMod(mod.default);
|
|
16
24
|
}
|
|
17
25
|
if (typeof mod == 'string' && mod.startsWith('data:')) {
|
|
18
|
-
return fetch(mod);
|
|
26
|
+
return await body(fetch(mod));
|
|
27
|
+
}
|
|
28
|
+
if (mod instanceof Response) {
|
|
29
|
+
return await body(mod);
|
|
30
|
+
}
|
|
31
|
+
if (ArrayBuffer.isView(mod) || mod instanceof ArrayBuffer) {
|
|
32
|
+
return mod as ArrayBuffer;
|
|
19
33
|
}
|
|
20
|
-
if (
|
|
21
|
-
mod
|
|
22
|
-
ArrayBuffer.isView(mod) ||
|
|
23
|
-
mod instanceof ArrayBuffer ||
|
|
24
|
-
mod instanceof WebAssembly.Module
|
|
25
|
-
) {
|
|
26
|
-
return mod;
|
|
34
|
+
if (mod instanceof WebAssembly.Module) {
|
|
35
|
+
return mod as unknown as BufferSource;
|
|
27
36
|
}
|
|
28
37
|
throw new Error('Failed to load wasm module');
|
|
29
38
|
}
|
|
30
39
|
|
|
31
|
-
export const module: Promise<
|
|
40
|
+
export const module: Promise<BufferSource> = /* @__PURE__ */ (async () => {
|
|
32
41
|
try {
|
|
33
42
|
// use ?url to force vite to load as bytes
|
|
34
43
|
// https://github.com/vitejs/vite/issues/12366
|
|
@@ -37,7 +46,7 @@ export const module: Promise<InitInput> = /* @__PURE__ */ (async () => {
|
|
|
37
46
|
if (!import.meta.url) {
|
|
38
47
|
return await loadFallback();
|
|
39
48
|
} else {
|
|
40
|
-
return await fetch(new URL('../../lib/wasm_bg.wasm?url', import.meta.url));
|
|
49
|
+
return await body(fetch(new URL('../../lib/wasm_bg.wasm?url', import.meta.url)));
|
|
41
50
|
}
|
|
42
51
|
}
|
|
43
52
|
})();
|