@wasmedia/wenblend 0.1.1 → 0.2.1
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/loader.d.ts.map +1 -1
- package/dist/loader.js +73 -10
- package/dist/loader.js.map +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/wenblend.wasm +0 -0
- package/dist/wenfuse.wasm +0 -0
- package/package.json +3 -2
- package/src/loader.ts +80 -11
- package/src/types.ts +5 -1
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;AAEnE,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AACtF,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;AAEnE,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AACtF,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAyKrF,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAE1D;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GACvE,IAAI,CAEN;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAW7F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,aAAa,EACvB,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
|
package/dist/loader.js
CHANGED
|
@@ -20,10 +20,6 @@
|
|
|
20
20
|
* Without the hook, each factory call runs the glue's own createWasm,
|
|
21
21
|
* which fetches and compiles the .wasm from scratch every time.
|
|
22
22
|
*/
|
|
23
|
-
const MODULE_FILE = {
|
|
24
|
-
enblend: "wenblend.js",
|
|
25
|
-
enfuse: "wenfuse.js",
|
|
26
|
-
};
|
|
27
23
|
const WASM_FILE = {
|
|
28
24
|
enblend: "wenblend.wasm",
|
|
29
25
|
enfuse: "wenfuse.wasm",
|
|
@@ -34,9 +30,58 @@ const WASM_FILE = {
|
|
|
34
30
|
// to the same key.
|
|
35
31
|
const factories = new Map();
|
|
36
32
|
const compiled = new Map();
|
|
33
|
+
/*
|
|
34
|
+
* The default URLs are spelled out, one `new URL()` with a string literal
|
|
35
|
+
* per file, never built from a template: bundlers (Vite, webpack, Parcel)
|
|
36
|
+
* recognise the literal form and emit exactly that file, with a hashed name,
|
|
37
|
+
* while Vite turns a template literal into a glob over the whole directory
|
|
38
|
+
* — every glue, wasm, source map and .d.ts in dist/ — and under its dev
|
|
39
|
+
* server's dependency pre-bundling into a lookup that yields `undefined`
|
|
40
|
+
* (#24). `../dist/` resolves to dist/ both from the compiled dist/loader.js
|
|
41
|
+
* and from src/loader.ts under the test runner.
|
|
42
|
+
*
|
|
43
|
+
* The wasm gets its own literal for the same reason: a bundler that emits
|
|
44
|
+
* the glue as `wenblend-<hash>.js` does not put a `wenblend.wasm` beside it,
|
|
45
|
+
* so with no `wasmPath` the wasm is not looked up beside the glue.
|
|
46
|
+
*/
|
|
47
|
+
function defaultGlueUrl(tool) {
|
|
48
|
+
return tool === "enblend"
|
|
49
|
+
? new URL("../dist/wenblend.js", import.meta.url).href
|
|
50
|
+
: new URL("../dist/wenfuse.js", import.meta.url).href;
|
|
51
|
+
}
|
|
52
|
+
function defaultWasmUrl(tool) {
|
|
53
|
+
return tool === "enblend"
|
|
54
|
+
? new URL("../dist/wenblend.wasm", import.meta.url)
|
|
55
|
+
: new URL("../dist/wenfuse.wasm", import.meta.url);
|
|
56
|
+
}
|
|
37
57
|
function glueUrl(tool, options) {
|
|
38
|
-
|
|
39
|
-
|
|
58
|
+
const path = options?.wasmPath;
|
|
59
|
+
if (path === undefined)
|
|
60
|
+
return defaultGlueUrl(tool);
|
|
61
|
+
return isBareSpecifier(path) ? resolveBareSpecifier(path) : path;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* True for what `import()` would treat as a package name rather than a
|
|
65
|
+
* location: not an absolute URL, and not `/`, `./` or `../`. Such a path
|
|
66
|
+
* never loaded before bare specifiers were supported, so none that worked
|
|
67
|
+
* changes meaning.
|
|
68
|
+
*/
|
|
69
|
+
function isBareSpecifier(path) {
|
|
70
|
+
return !/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(path) && !/^\.{0,2}\//.test(path);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolve a bare specifier, e.g. `@wasmedia/wenblend/wasm/enblend`, the way
|
|
74
|
+
* `import()` from this module would: Node's package resolution, or the
|
|
75
|
+
* page's import map. The `.wasm` is then loaded from beside the resolved
|
|
76
|
+
* glue, as for any other `wasmPath`.
|
|
77
|
+
*/
|
|
78
|
+
function resolveBareSpecifier(specifier) {
|
|
79
|
+
const resolve = import.meta.resolve;
|
|
80
|
+
if (typeof resolve !== "function") {
|
|
81
|
+
throw new Error(`wasmPath "${specifier}" is a bare specifier, and import.meta.resolve is not available here to resolve it; ` +
|
|
82
|
+
"pass the glue's URL instead");
|
|
83
|
+
}
|
|
84
|
+
return resolve(specifier);
|
|
40
85
|
}
|
|
41
86
|
/**
|
|
42
87
|
* The glue's absolute URL. `new URL` needs an absolute base, but `wasmPath`
|
|
@@ -49,22 +94,40 @@ function resolvedGlueUrl(tool, options) {
|
|
|
49
94
|
function cacheKey(tool, options) {
|
|
50
95
|
return `${tool} ${resolvedGlueUrl(tool, options).href}`;
|
|
51
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Import a tool's glue. When the default URL fails, the usual cause is a
|
|
99
|
+
* bundler that moved this module away from dist/ without rewriting the URL
|
|
100
|
+
* — Vite's dev server pre-bundles dependencies into node_modules/.vite/deps/,
|
|
101
|
+
* from where no relative URL reaches dist/ — so the error says what to do.
|
|
102
|
+
*/
|
|
52
103
|
async function importFactory(tool, options) {
|
|
53
|
-
const
|
|
104
|
+
const url = glueUrl(tool, options);
|
|
105
|
+
let mod;
|
|
106
|
+
try {
|
|
107
|
+
mod = await import(/* webpackIgnore: true */ /* @vite-ignore */ url);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (options?.wasmPath !== undefined)
|
|
111
|
+
throw err;
|
|
112
|
+
throw new Error(`could not import the ${tool} glue from its default URL ${url}. If a bundler moved wenblend away from ` +
|
|
113
|
+
`its dist/ directory (Vite's dev server does when it pre-bundles dependencies), add "@wasmedia/wenblend" ` +
|
|
114
|
+
`to Vite's optimizeDeps.exclude, or pass wasmPath. Cause: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
115
|
+
}
|
|
54
116
|
return (mod.default ?? mod);
|
|
55
117
|
}
|
|
56
118
|
/**
|
|
57
119
|
* Fetch and compile a tool's .wasm.
|
|
58
120
|
*
|
|
59
|
-
*
|
|
60
|
-
* resolves the .wasm name against the glue's own
|
|
121
|
+
* With `wasmPath`, the URL is the one the glue itself would use: its
|
|
122
|
+
* `locateFile` default resolves the .wasm name against the glue's own
|
|
123
|
+
* directory. Without it, the default wasm URL (see `defaultWasmUrl`). `file:` URLs
|
|
61
124
|
* (Node) are read from disk, because Node's fetch does not do `file:`;
|
|
62
125
|
* everything else is fetched, streaming-compiled where the server's MIME
|
|
63
126
|
* type allows and compiled from bytes where it does not — the same
|
|
64
127
|
* fallback the glue performs.
|
|
65
128
|
*/
|
|
66
129
|
async function compileWasm(tool, options) {
|
|
67
|
-
const url = new URL(WASM_FILE[tool], resolvedGlueUrl(tool, options));
|
|
130
|
+
const url = options?.wasmPath === undefined ? defaultWasmUrl(tool) : new URL(WASM_FILE[tool], resolvedGlueUrl(tool, options));
|
|
68
131
|
if (url.protocol === "file:") {
|
|
69
132
|
// A variable specifier keeps bundlers from trying to resolve a Node
|
|
70
133
|
// builtin into browser code; this branch only runs under Node.
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAsBH,MAAM,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -87,7 +87,11 @@ export type FuseOptions = CommonOptions;
|
|
|
87
87
|
/** Progress phases reported by the loader. */
|
|
88
88
|
export type LoadPhase = "loading" | "initializing" | "ready";
|
|
89
89
|
export interface LoaderOptions {
|
|
90
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Override the URL of the tool's `.js` glue (for bundlers or custom hosting); the `.wasm` is loaded
|
|
92
|
+
* from beside it. An absolute URL, a path starting with `/`, `./` or `../`, or a bare specifier such as
|
|
93
|
+
* `@wasmedia/wenblend/wasm/enblend`, resolved with `import.meta.resolve` where that exists.
|
|
94
|
+
*/
|
|
91
95
|
wasmPath?: string;
|
|
92
96
|
/**
|
|
93
97
|
* Where file mode loads @wasmedia/wopfs from. The default imports
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2GH,kFAAkF;AAClF,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,QAAQ,CAAS;IACjB,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,QAAgB,EAAE,MAAc;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;;;;;OAKG;IACM,MAAM,CAAqB;IACpC,iEAAiE;IACxD,MAAM,CAAS;IAExB,YAAY,MAA0B,EAAE,MAAM,GAAG,EAAE;QACjD,KAAK,CACH,gBAAgB,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,eAAe,IAAI;YAChF,wEAAwE;YACxE,+CAA+C,CAClD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
package/dist/wenblend.wasm
CHANGED
|
Binary file
|
package/dist/wenfuse.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wasmedia/wenblend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Enblend and Enfuse compiled to WebAssembly for browsers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -59,9 +59,10 @@
|
|
|
59
59
|
"@playwright/test": "1.63.0",
|
|
60
60
|
"@types/node": "^22.20.4",
|
|
61
61
|
"typescript": "^5.7.0",
|
|
62
|
+
"vite": "7.3.6",
|
|
62
63
|
"vitest": "^3.0.0"
|
|
63
64
|
},
|
|
64
65
|
"dependencies": {
|
|
65
|
-
"@wasmedia/wopfs": "0.
|
|
66
|
+
"@wasmedia/wopfs": "0.3.0"
|
|
66
67
|
}
|
|
67
68
|
}
|
package/src/loader.ts
CHANGED
|
@@ -41,11 +41,6 @@ export type InstanceHooks = Pick<WasmModule, "print" | "printErr">;
|
|
|
41
41
|
export type ModuleFactory = (config?: Record<string, unknown>) => Promise<WasmModule>;
|
|
42
42
|
type FactoryLoader = (tool: Tool, options?: LoaderOptions) => Promise<ModuleFactory>;
|
|
43
43
|
|
|
44
|
-
const MODULE_FILE: Record<Tool, string> = {
|
|
45
|
-
enblend: "wenblend.js",
|
|
46
|
-
enfuse: "wenfuse.js",
|
|
47
|
-
};
|
|
48
|
-
|
|
49
44
|
const WASM_FILE: Record<Tool, string> = {
|
|
50
45
|
enblend: "wenblend.wasm",
|
|
51
46
|
enfuse: "wenfuse.wasm",
|
|
@@ -58,9 +53,63 @@ const WASM_FILE: Record<Tool, string> = {
|
|
|
58
53
|
const factories = new Map<string, Promise<ModuleFactory>>();
|
|
59
54
|
const compiled = new Map<string, Promise<WebAssembly.Module>>();
|
|
60
55
|
|
|
56
|
+
/*
|
|
57
|
+
* The default URLs are spelled out, one `new URL()` with a string literal
|
|
58
|
+
* per file, never built from a template: bundlers (Vite, webpack, Parcel)
|
|
59
|
+
* recognise the literal form and emit exactly that file, with a hashed name,
|
|
60
|
+
* while Vite turns a template literal into a glob over the whole directory
|
|
61
|
+
* — every glue, wasm, source map and .d.ts in dist/ — and under its dev
|
|
62
|
+
* server's dependency pre-bundling into a lookup that yields `undefined`
|
|
63
|
+
* (#24). `../dist/` resolves to dist/ both from the compiled dist/loader.js
|
|
64
|
+
* and from src/loader.ts under the test runner.
|
|
65
|
+
*
|
|
66
|
+
* The wasm gets its own literal for the same reason: a bundler that emits
|
|
67
|
+
* the glue as `wenblend-<hash>.js` does not put a `wenblend.wasm` beside it,
|
|
68
|
+
* so with no `wasmPath` the wasm is not looked up beside the glue.
|
|
69
|
+
*/
|
|
70
|
+
function defaultGlueUrl(tool: Tool): string {
|
|
71
|
+
return tool === "enblend"
|
|
72
|
+
? new URL("../dist/wenblend.js", import.meta.url).href
|
|
73
|
+
: new URL("../dist/wenfuse.js", import.meta.url).href;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function defaultWasmUrl(tool: Tool): URL {
|
|
77
|
+
return tool === "enblend"
|
|
78
|
+
? new URL("../dist/wenblend.wasm", import.meta.url)
|
|
79
|
+
: new URL("../dist/wenfuse.wasm", import.meta.url);
|
|
80
|
+
}
|
|
81
|
+
|
|
61
82
|
function glueUrl(tool: Tool, options?: LoaderOptions): string {
|
|
62
|
-
|
|
63
|
-
|
|
83
|
+
const path = options?.wasmPath;
|
|
84
|
+
if (path === undefined) return defaultGlueUrl(tool);
|
|
85
|
+
return isBareSpecifier(path) ? resolveBareSpecifier(path) : path;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* True for what `import()` would treat as a package name rather than a
|
|
90
|
+
* location: not an absolute URL, and not `/`, `./` or `../`. Such a path
|
|
91
|
+
* never loaded before bare specifiers were supported, so none that worked
|
|
92
|
+
* changes meaning.
|
|
93
|
+
*/
|
|
94
|
+
function isBareSpecifier(path: string): boolean {
|
|
95
|
+
return !/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(path) && !/^\.{0,2}\//.test(path);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a bare specifier, e.g. `@wasmedia/wenblend/wasm/enblend`, the way
|
|
100
|
+
* `import()` from this module would: Node's package resolution, or the
|
|
101
|
+
* page's import map. The `.wasm` is then loaded from beside the resolved
|
|
102
|
+
* glue, as for any other `wasmPath`.
|
|
103
|
+
*/
|
|
104
|
+
function resolveBareSpecifier(specifier: string): string {
|
|
105
|
+
const resolve = (import.meta as { resolve?: (s: string) => string }).resolve;
|
|
106
|
+
if (typeof resolve !== "function") {
|
|
107
|
+
throw new Error(
|
|
108
|
+
`wasmPath "${specifier}" is a bare specifier, and import.meta.resolve is not available here to resolve it; ` +
|
|
109
|
+
"pass the glue's URL instead",
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
return resolve(specifier);
|
|
64
113
|
}
|
|
65
114
|
|
|
66
115
|
/**
|
|
@@ -76,23 +125,43 @@ function cacheKey(tool: Tool, options?: LoaderOptions): string {
|
|
|
76
125
|
return `${tool} ${resolvedGlueUrl(tool, options).href}`;
|
|
77
126
|
}
|
|
78
127
|
|
|
128
|
+
/**
|
|
129
|
+
* Import a tool's glue. When the default URL fails, the usual cause is a
|
|
130
|
+
* bundler that moved this module away from dist/ without rewriting the URL
|
|
131
|
+
* — Vite's dev server pre-bundles dependencies into node_modules/.vite/deps/,
|
|
132
|
+
* from where no relative URL reaches dist/ — so the error says what to do.
|
|
133
|
+
*/
|
|
79
134
|
async function importFactory(tool: Tool, options?: LoaderOptions): Promise<ModuleFactory> {
|
|
80
|
-
const
|
|
135
|
+
const url = glueUrl(tool, options);
|
|
136
|
+
let mod;
|
|
137
|
+
try {
|
|
138
|
+
mod = await import(/* webpackIgnore: true */ /* @vite-ignore */ url);
|
|
139
|
+
} catch (err) {
|
|
140
|
+
if (options?.wasmPath !== undefined) throw err;
|
|
141
|
+
throw new Error(
|
|
142
|
+
`could not import the ${tool} glue from its default URL ${url}. If a bundler moved wenblend away from ` +
|
|
143
|
+
`its dist/ directory (Vite's dev server does when it pre-bundles dependencies), add "@wasmedia/wenblend" ` +
|
|
144
|
+
`to Vite's optimizeDeps.exclude, or pass wasmPath. Cause: ${err instanceof Error ? err.message : String(err)}`,
|
|
145
|
+
{ cause: err },
|
|
146
|
+
);
|
|
147
|
+
}
|
|
81
148
|
return (mod.default ?? mod) as ModuleFactory;
|
|
82
149
|
}
|
|
83
150
|
|
|
84
151
|
/**
|
|
85
152
|
* Fetch and compile a tool's .wasm.
|
|
86
153
|
*
|
|
87
|
-
*
|
|
88
|
-
* resolves the .wasm name against the glue's own
|
|
154
|
+
* With `wasmPath`, the URL is the one the glue itself would use: its
|
|
155
|
+
* `locateFile` default resolves the .wasm name against the glue's own
|
|
156
|
+
* directory. Without it, the default wasm URL (see `defaultWasmUrl`). `file:` URLs
|
|
89
157
|
* (Node) are read from disk, because Node's fetch does not do `file:`;
|
|
90
158
|
* everything else is fetched, streaming-compiled where the server's MIME
|
|
91
159
|
* type allows and compiled from bytes where it does not — the same
|
|
92
160
|
* fallback the glue performs.
|
|
93
161
|
*/
|
|
94
162
|
async function compileWasm(tool: Tool, options?: LoaderOptions): Promise<WebAssembly.Module> {
|
|
95
|
-
const url =
|
|
163
|
+
const url =
|
|
164
|
+
options?.wasmPath === undefined ? defaultWasmUrl(tool) : new URL(WASM_FILE[tool], resolvedGlueUrl(tool, options));
|
|
96
165
|
if (url.protocol === "file:") {
|
|
97
166
|
// A variable specifier keeps bundlers from trying to resolve a Node
|
|
98
167
|
// builtin into browser code; this branch only runs under Node.
|
package/src/types.ts
CHANGED
|
@@ -95,7 +95,11 @@ export type FuseOptions = CommonOptions;
|
|
|
95
95
|
export type LoadPhase = "loading" | "initializing" | "ready";
|
|
96
96
|
|
|
97
97
|
export interface LoaderOptions {
|
|
98
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* Override the URL of the tool's `.js` glue (for bundlers or custom hosting); the `.wasm` is loaded
|
|
100
|
+
* from beside it. An absolute URL, a path starting with `/`, `./` or `../`, or a bare specifier such as
|
|
101
|
+
* `@wasmedia/wenblend/wasm/enblend`, resolved with `import.meta.resolve` where that exists.
|
|
102
|
+
*/
|
|
99
103
|
wasmPath?: string;
|
|
100
104
|
/**
|
|
101
105
|
* Where file mode loads @wasmedia/wopfs from. The default imports
|