@mirascript/wasm 0.1.0
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 +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/node.d.ts +3 -0
- package/dist/loader/node.d.ts.map +1 -0
- package/dist/loader/node.js +4 -0
- package/dist/loader/node.js.map +1 -0
- package/dist/loader/web.d.ts +3 -0
- package/dist/loader/web.d.ts.map +1 -0
- package/dist/loader/web.js +14 -0
- package/dist/loader/web.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/lib/wasm.d.ts +809 -0
- package/lib/wasm.js +1463 -0
- package/lib/wasm_bg.wasm +0 -0
- package/lib/wasm_bg.wasm.d.ts +48 -0
- package/package.json +28 -0
- package/src/index.ts +71 -0
- package/src/loader/node.ts +5 -0
- package/src/loader/web.ts +17 -0
- package/src/types.ts +16 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as wasm from '../lib/wasm.js';
|
|
2
|
+
import type { Config, ScriptInput } from './types.js';
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
export { wasm };
|
|
5
|
+
export declare const ready: Promise<wasm.InitOutput>;
|
|
6
|
+
/** 创建可重用的配置 */
|
|
7
|
+
export declare function createConfig(config?: Config | wasm.Config): wasm.Config;
|
|
8
|
+
/** 编译结果 */
|
|
9
|
+
export interface CompileResult {
|
|
10
|
+
/** 编译诊断 */
|
|
11
|
+
readonly diagnostics: Uint32Array;
|
|
12
|
+
/** 编译生成的字节码 */
|
|
13
|
+
readonly chunk?: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
/** 编译 MiraScript 代码 */
|
|
16
|
+
export declare function compileSync(script: ScriptInput, config: Config | wasm.Config): CompileResult;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAyC,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7F,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,eAAO,MAAM,KAAK,0BAIjB,CAAC;AAEF,eAAe;AACf,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAqBvE;AAED,WAAW;AACX,MAAM,WAAW,aAAa;IAC1B,WAAW;IACX,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,eAAe;IACf,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;CAC/B;AAuBD,uBAAuB;AACvB,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,CAI5F"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as wasm from '../lib/wasm.js';
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export { wasm };
|
|
4
|
+
export const ready = import('#loader').then(async ({ module }) => wasm.default({
|
|
5
|
+
module_or_path: await module,
|
|
6
|
+
}));
|
|
7
|
+
/** 创建可重用的配置 */
|
|
8
|
+
export function createConfig(config) {
|
|
9
|
+
if (!config)
|
|
10
|
+
return new wasm.Config();
|
|
11
|
+
if (config instanceof wasm.Config)
|
|
12
|
+
return config;
|
|
13
|
+
const cfg = new wasm.Config();
|
|
14
|
+
for (const key in config) {
|
|
15
|
+
if (key === 'free')
|
|
16
|
+
continue; // 忽略 free 方法
|
|
17
|
+
if (!Object.hasOwn(config, key))
|
|
18
|
+
continue;
|
|
19
|
+
let value = config[key];
|
|
20
|
+
if (key === 'input_mode') {
|
|
21
|
+
value = wasm.InputMode[value];
|
|
22
|
+
}
|
|
23
|
+
if (key === 'diagnostic_position_encoding') {
|
|
24
|
+
value = wasm.DiagnosticPositionEncoding[value];
|
|
25
|
+
}
|
|
26
|
+
if (value === undefined)
|
|
27
|
+
continue;
|
|
28
|
+
if (!(key in cfg))
|
|
29
|
+
continue;
|
|
30
|
+
cfg[key] = value;
|
|
31
|
+
}
|
|
32
|
+
return cfg;
|
|
33
|
+
}
|
|
34
|
+
/** 编译 */
|
|
35
|
+
function compileImpl(compiler, script, config) {
|
|
36
|
+
const cfg = createConfig(config);
|
|
37
|
+
const result = compiler(script, cfg);
|
|
38
|
+
try {
|
|
39
|
+
const diagnostics = result.diagnostics();
|
|
40
|
+
const chunk = result.chunk();
|
|
41
|
+
return { diagnostics, chunk };
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
result.free();
|
|
45
|
+
// 只在 cfg 是新创建的情况下释放
|
|
46
|
+
if (cfg !== config) {
|
|
47
|
+
cfg.free();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** 编译 MiraScript 代码 */
|
|
52
|
+
export function compileSync(script, config) {
|
|
53
|
+
return typeof script == 'string'
|
|
54
|
+
? compileImpl(wasm.compile, script, config)
|
|
55
|
+
: compileImpl(wasm.compile_buffer, script, config);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAGvC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7D,IAAI,CAAC,OAAO,CAAC;IACT,cAAc,EAAE,MAAM,MAAM;CAC/B,CAAC,CACL,CAAC;AAEF,eAAe;AACf,MAAM,UAAU,YAAY,CAAC,MAA6B;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,IAAI,MAAM,YAAY,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,MAAM;YAAE,SAAS,CAAC,aAAa;QAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,SAAS;QAC1C,IAAI,KAAK,GAAG,MAAM,CAAC,GAAmB,CAAU,CAAC;QACjD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACvB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAkB,CAAmC,CAAC;QACjF,CAAC;QACD,IAAI,GAAG,KAAK,8BAA8B,EAAE,CAAC;YACzC,KAAK,GAAG,IAAI,CAAC,0BAA0B,CACnC,KAAmC,CACa,CAAC;QACzD,CAAC;QACD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,SAAS;QAC5B,GAAG,CAAC,GAAmB,CAAC,GAAG,KAAK,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAUD,SAAS;AACT,SAAS,WAAW,CAChB,QAAgE,EAChE,MAAS,EACT,MAA4B;IAE5B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,oBAAoB;QACpB,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,CAAC;IACL,CAAC;AACL,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,WAAW,CAAC,MAAmB,EAAE,MAA4B;IACzE,OAAO,OAAO,MAAM,IAAI,QAAQ;QAC5B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;QAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/loader/node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,SAAS,CAAqC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/loader/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,MAAM,GAAuB,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/loader/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAWnD,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,SAAS,CAKlC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** 回退加载 */
|
|
2
|
+
async function loadFallback() {
|
|
3
|
+
const fallbackUrl = (document?.currentScript instanceof HTMLScriptElement
|
|
4
|
+
? document.currentScript.src
|
|
5
|
+
: (document.currentScript?.href?.baseVal ?? '')) || document.location.href;
|
|
6
|
+
return await fetch(new URL('../../lib/wasm_bg.wasm', fallbackUrl));
|
|
7
|
+
}
|
|
8
|
+
export const module = /* @__PURE__ */ (async () => {
|
|
9
|
+
if (!import.meta.url) {
|
|
10
|
+
return await loadFallback();
|
|
11
|
+
}
|
|
12
|
+
return await fetch(new URL('../../lib/wasm_bg.wasm?url', import.meta.url));
|
|
13
|
+
})();
|
|
14
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/loader/web.ts"],"names":[],"mappings":"AAEA,WAAW;AACX,KAAK,UAAU,YAAY;IACvB,MAAM,WAAW,GACb,CAAC,QAAQ,EAAE,aAAa,YAAY,iBAAiB;QACjD,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG;QAC5B,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnF,OAAO,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAuB,eAAe,CAAC,CAAC,KAAK,IAAI,EAAE;IAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACnB,OAAO,MAAM,YAAY,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC,EAAE,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type * as wasm from '../lib/wasm.js';
|
|
2
|
+
export { DiagnosticCode, OpCode } from '../lib/wasm.js';
|
|
3
|
+
/**
|
|
4
|
+
* 配置选项
|
|
5
|
+
*/
|
|
6
|
+
export type Config = Partial<Omit<wasm.Config, 'free' | 'input_mode' | 'diagnostic_position_encoding'>> & {
|
|
7
|
+
input_mode?: InputMode;
|
|
8
|
+
diagnostic_position_encoding?: DiagnosticPositionEncoding;
|
|
9
|
+
};
|
|
10
|
+
/** Encoding for counting positions in diagnostics. */
|
|
11
|
+
export type DiagnosticPositionEncoding = keyof typeof wasm.DiagnosticPositionEncoding;
|
|
12
|
+
/** 输入模式 */
|
|
13
|
+
export type InputMode = keyof typeof wasm.InputMode;
|
|
14
|
+
/** 编译输入,支持字符串和 UTF-8 字节数组 */
|
|
15
|
+
export type ScriptInput = string | Uint8Array;
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,8BAA8B,CAAC,CAAC,GAAG;IACtG,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4BAA4B,CAAC,EAAE,0BAA0B,CAAC;CAC7D,CAAC;AACF,sDAAsD;AACtD,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,IAAI,CAAC,0BAA0B,CAAC;AACtF,WAAW;AACX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC;AACpD,6BAA6B;AAC7B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
|