@mirascript/mirascript 0.1.2 → 0.1.4
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/{chunk-3RUWGMBP.js → chunk-JB6LPPFJ.js} +190 -24
- package/dist/chunk-JB6LPPFJ.js.map +6 -0
- package/dist/{chunk-AOINGBRS.js → chunk-RYSPVMVZ.js} +189 -191
- package/dist/chunk-RYSPVMVZ.js.map +6 -0
- package/dist/cli/execute.d.ts +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/index.js +42 -21
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/print.d.ts.map +1 -1
- package/dist/compiler/diagnostic.d.ts +14 -3
- package/dist/compiler/diagnostic.d.ts.map +1 -1
- package/dist/compiler/emit.d.ts +2 -1
- package/dist/compiler/emit.d.ts.map +1 -1
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/worker.d.ts.map +1 -1
- package/dist/compiler/worker.js +6 -3
- package/dist/compiler/worker.js.map +1 -1
- package/dist/helpers/serialize.d.ts +10 -2
- package/dist/helpers/serialize.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/subtle.d.ts +1 -1
- package/dist/subtle.d.ts.map +1 -1
- package/dist/subtle.js +17 -7
- package/dist/vm/lib/_helpers.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/with.d.ts +2 -2
- package/dist/vm/lib/global/sequence/with.d.ts.map +1 -1
- package/dist/vm/operations.d.ts.map +1 -1
- package/dist/vm/types/boundary.d.ts.map +1 -1
- package/dist/vm/types/checker.d.ts +1 -1
- package/dist/vm/types/checker.d.ts.map +1 -1
- package/dist/vm/types/context.d.ts +14 -6
- package/dist/vm/types/context.d.ts.map +1 -1
- package/dist/vm/types/extern.d.ts +2 -0
- package/dist/vm/types/extern.d.ts.map +1 -1
- package/dist/vm/types/index.d.ts +6 -10
- package/dist/vm/types/index.d.ts.map +1 -1
- package/dist/vm/types/module.d.ts +2 -0
- package/dist/vm/types/module.d.ts.map +1 -1
- package/dist/vm/types/wrapper.d.ts +2 -0
- package/dist/vm/types/wrapper.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/cli/execute.ts +8 -3
- package/src/cli/index.ts +22 -5
- package/src/cli/print.ts +13 -9
- package/src/compiler/diagnostic.ts +32 -14
- package/src/compiler/emit.ts +45 -19
- package/src/compiler/index.ts +10 -2
- package/src/compiler/worker.ts +5 -1
- package/src/helpers/serialize.ts +6 -6
- package/src/subtle.ts +11 -1
- package/src/vm/lib/_helpers.ts +2 -10
- package/src/vm/lib/global/math-arr.ts +1 -1
- package/src/vm/lib/global/sequence/with.ts +111 -17
- package/src/vm/operations.ts +23 -24
- package/src/vm/types/boundary.ts +4 -4
- package/src/vm/types/checker.ts +8 -15
- package/src/vm/types/context.ts +28 -16
- package/src/vm/types/extern.ts +11 -2
- package/src/vm/types/index.ts +7 -26
- package/src/vm/types/module.ts +7 -0
- package/src/vm/types/wrapper.ts +10 -1
- package/dist/chunk-3RUWGMBP.js.map +0 -6
- package/dist/chunk-AOINGBRS.js.map +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../../src/vm/lib/_helpers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../../src/vm/lib/_helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type VmArray, type VmValue } from '../../../types/index.js';
|
|
2
2
|
import { VmLib } from '../../_helpers.js';
|
|
3
|
-
declare const _with: VmLib<(data:
|
|
3
|
+
declare const _with: VmLib<(data: VmValue | undefined, ...entries: (VmValue | undefined)[]) => import("../../../types/index.js").VmRecord | VmArray>;
|
|
4
4
|
export { _with as 'with' };
|
|
5
5
|
//# sourceMappingURL=with.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/with.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"with.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/with.ts"],"names":[],"mappings":"AAGA,OAAO,EAIH,KAAK,OAAO,EAEZ,KAAK,OAAO,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAgD,MAAM,mBAAmB,CAAC;AA8DxF,QAAA,MAAM,KAAK,iIA8DV,CAAC;AACF,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/vm/operations.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/vm/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/vm/types/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,
|
|
1
|
+
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/vm/types/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAc,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMjF,iCAAiC;AACjC,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,cAAc,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAqBhF;AAED,iCAAiC;AACjC,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,cAAc,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAO9F;AAED,+BAA+B;AAC/B,wBAAgB,aAAa,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,QAAQ,GAAG,IAAW,EAC/B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,GACtE,OAAO,CA0BT;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAiBvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/vm/types/checker.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/vm/types/checker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAW,OAAO,EAAE,WAAW,EAAY,OAAO,EAAE,MAAM,YAAY,CAAC;AAmE1F;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC;AAC1D;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC;AA8BhF;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC;AAClE;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAAC;AAOxF;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC;AAC1D;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC;AAShF;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAkB1E"}
|
|
@@ -17,6 +17,8 @@ export interface VmContext {
|
|
|
17
17
|
readonly [kVmContext]: true;
|
|
18
18
|
/** 枚举所有 key,仅在 LSP 中使用 */
|
|
19
19
|
keys(): Iterable<string>;
|
|
20
|
+
/** 描述值,返回 MarkDown 文本,仅在 LSP 中使用 */
|
|
21
|
+
describe?(key: string): string | undefined;
|
|
20
22
|
/** 获取指定 key 的值 `global[key]` */
|
|
21
23
|
get(key: string): VmValue;
|
|
22
24
|
/** 查找指定 key 是否存在 `key in global` */
|
|
@@ -29,14 +31,20 @@ export declare const VmSharedContext: VmSharedContext;
|
|
|
29
31
|
export declare function defineVmContextValue(name: string, value: VmImmutable | ((...args: VmAny[]) => VmAny), override?: boolean): void;
|
|
30
32
|
/** 无后备的实现 */
|
|
31
33
|
export declare const DefaultVmContext: VmContext;
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
+
/** 以值为后备的实现 */
|
|
35
|
+
type CreateVmContextWithValues = readonly [
|
|
34
36
|
vmValues?: VmContextRecord | null | undefined,
|
|
35
|
-
externValues?: Record<string, unknown> | null | undefined
|
|
36
|
-
|
|
37
|
+
externValues?: Record<string, unknown> | null | undefined,
|
|
38
|
+
describer?: ((key: string) => string | undefined) | null | undefined
|
|
39
|
+
];
|
|
40
|
+
/** 以工厂函数为后备的实现 */
|
|
41
|
+
type CreateVmContextWithFactory = readonly [
|
|
37
42
|
getter: (key: string) => VmValue | undefined,
|
|
38
|
-
enumerator?: (() => Iterable<string>) | null | undefined
|
|
39
|
-
|
|
43
|
+
enumerator?: (() => Iterable<string>) | null | undefined,
|
|
44
|
+
describer?: ((key: string) => string | undefined) | null | undefined
|
|
45
|
+
];
|
|
46
|
+
/** 创建用于执行脚本的执行上下文 */
|
|
47
|
+
export declare function createVmContext(...args: CreateVmContextWithValues | CreateVmContextWithFactory): VmContext;
|
|
40
48
|
/** 检查是否为执行上下文 */
|
|
41
49
|
export declare function isVmContext(context: unknown): context is VmContext;
|
|
42
50
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/vm/types/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,OAAO,EAGZ,KAAK,cAAc,EACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAEtD,eAAe;AACf,KAAK,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC;AACtC,gBAAgB;AAChB,KAAK,aAAa,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,cAAc,GAC9E,UAAU,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAC9B,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,eAAe;AACf,KAAK,aAAa,GAAG;KAChB,GAAG,IAAI,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC;CAC1C,CAAC;AACF,QAAA,MAAM,UAAU,eAAgC,CAAC;AACjD,iCAAiC;AACjC,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC1E,uBAAuB;AACvB,MAAM,WAAW,SAAS;IACtB,YAAY;IACZ,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IAC5B,0BAA0B;IAC1B,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,gCAAgC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AACD,uBAAuB;AACvB,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;AAClE,eAAO,MAAM,eAAe,EAAmB,eAAe,CAAC;AAE/D,qCAAqC;AACrC,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EAClD,QAAQ,UAAQ,GACjB,IAAI,CAYN;AAED,aAAa;AACb,eAAO,MAAM,gBAAgB,EAAE,SAc7B,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/vm/types/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,OAAO,EAGZ,KAAK,cAAc,EACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAEtD,eAAe;AACf,KAAK,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC;AACtC,gBAAgB;AAChB,KAAK,aAAa,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,cAAc,GAC9E,UAAU,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAC9B,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,eAAe;AACf,KAAK,aAAa,GAAG;KAChB,GAAG,IAAI,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC;CAC1C,CAAC;AACF,QAAA,MAAM,UAAU,eAAgC,CAAC;AACjD,iCAAiC;AACjC,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC1E,uBAAuB;AACvB,MAAM,WAAW,SAAS;IACtB,YAAY;IACZ,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IAC5B,0BAA0B;IAC1B,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,oCAAoC;IACpC,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3C,gCAAgC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AACD,uBAAuB;AACvB,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;AAClE,eAAO,MAAM,eAAe,EAAmB,eAAe,CAAC;AAE/D,qCAAqC;AACrC,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EAClD,QAAQ,UAAQ,GACjB,IAAI,CAYN;AAED,aAAa;AACb,eAAO,MAAM,gBAAgB,EAAE,SAc7B,CAAC;AAoDH,eAAe;AACf,KAAK,yBAAyB,GAAG,SAAS;IACtC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS;IACzD,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS;CACvE,CAAC;AACF,kBAAkB;AAClB,KAAK,0BAA0B,GAAG,SAAS;IACvC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS;IAC5C,UAAU,CAAC,EAAE,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS;IACxD,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS;CACvE,CAAC;AAEF,qBAAqB;AACrB,wBAAgB,eAAe,CAAC,GAAG,IAAI,EAAE,yBAAyB,GAAG,0BAA0B,GAAG,SAAS,CAwB1G;AAED,iBAAiB;AACjB,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,SAAS,CAGlE"}
|
|
@@ -27,4 +27,6 @@ export declare class VmExtern<const T extends object = object> extends VmWrapper
|
|
|
27
27
|
/** @inheritdoc */
|
|
28
28
|
get describe(): string;
|
|
29
29
|
}
|
|
30
|
+
/** 检查值是否为 Mirascript 外部值 */
|
|
31
|
+
export declare function isVmExtern<T extends object>(value: unknown): value is VmExtern<T>;
|
|
30
32
|
//# sourceMappingURL=extern.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extern.d.ts","sourceRoot":"","sources":["../../../src/vm/types/extern.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"extern.d.ts","sourceRoot":"","sources":["../../../src/vm/types/extern.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AASjF,mCAAmC;AACnC,qBAAa,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAGnE,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,SAAS,KAAK,EAAE,KAAK,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI;gBAD3F,KAAK,EAAE,CAAC,EACC,OAAO,GAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,SAAS,KAAK,EAAE,KAAK,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAW;IAKtG,yCAAyC;IACzC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO;IAiBrD,kBAAkB;IAClB,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;IAIxG,kBAAkB;IACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGlC,kBAAkB;IACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAKhC,mCAAmC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAMzC,wBAAwB;IACxB,IAAI,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,KAAK;IAerC,kBAAkB;IACT,IAAI,IAAI,MAAM,EAAE;IAOzB,kBAAkB;IACT,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAIpC,kBAAkB;IACT,QAAQ,IAAI,MAAM;IAY3B,kBAAkB;IAClB,IAAa,IAAI,IAAI,QAAQ,CAE5B;IACD,kBAAkB;IAClB,IAAa,QAAQ,IAAI,MAAM,CAuB9B;CACJ;AAID,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAEjF"}
|
package/dist/vm/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { VmExtern } from './extern.js';
|
|
2
|
-
import {
|
|
3
|
-
import { VmModule } from './module.js';
|
|
1
|
+
import { isVmExtern, VmExtern } from './extern.js';
|
|
2
|
+
import { isVmFunction, VmFunction } from './function.js';
|
|
3
|
+
import { VmModule, isVmModule } from './module.js';
|
|
4
|
+
import { isVmWrapper } from './wrapper.js';
|
|
4
5
|
/** Mirascript 原始值 */
|
|
5
6
|
export type VmPrimitive = null | string | number | boolean;
|
|
6
7
|
/**
|
|
@@ -61,16 +62,11 @@ export declare function isVmRecord(value: VmAny): value is VmRecord;
|
|
|
61
62
|
* 检查值是否为 Mirascript 原始值
|
|
62
63
|
*/
|
|
63
64
|
export declare function isVmPrimitive(value: unknown): value is VmPrimitive;
|
|
64
|
-
export { VmExtern
|
|
65
|
+
export { VmFunction, isVmFunction, VmExtern, isVmExtern, VmModule, isVmModule, isVmWrapper };
|
|
65
66
|
export { wrapToVmValue, unwrapFromVmValue, toVmFunctionProxy, fromVmFunctionProxy } from './boundary.js';
|
|
66
|
-
/** 检查值是否为 Mirascript 外部值 */
|
|
67
|
-
export declare function isVmExtern(value: unknown): value is VmExtern;
|
|
68
67
|
/** 检查值是否为 Mirascript 可调用值 */
|
|
69
68
|
export declare function isVmCallable(value: unknown): value is VmFunction | VmExtern<Function>;
|
|
70
|
-
export {
|
|
71
|
-
export { VmModule } from './module.js';
|
|
72
|
-
/** 检查值是否为 Mirascript 模块 */
|
|
73
|
-
export declare function isVmModule(value: unknown): value is VmModule;
|
|
69
|
+
export { getVmFunctionInfo, type VmFunctionInfo, type VmFunctionLike, type VmFunctionOption } from './function.js';
|
|
74
70
|
export { type VmContext, type VmSharedContext, isVmContext, defineVmContextValue, createVmContext } from './context.js';
|
|
75
71
|
export { type VmScript, isVmScript } from './script.js';
|
|
76
72
|
export { isVmAny, isVmConst, isVmImmutable, isVmValue } from './checker.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vm/types/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vm/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,4 +22,6 @@ export declare class VmModule<const T extends Record<string, VmValue> = Record<s
|
|
|
22
22
|
/** @inheritdoc */
|
|
23
23
|
get describe(): string;
|
|
24
24
|
}
|
|
25
|
+
/** 检查值是否为 Mirascript 模块 */
|
|
26
|
+
export declare function isVmModule<T extends Record<string, VmValue>>(value: unknown): value is VmModule<T>;
|
|
25
27
|
//# sourceMappingURL=module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/vm/types/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,oBAAoB;AACpB,qBAAa,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAErG,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM;;IADrB,WAAW;IACF,IAAI,EAAE,MAAM;IACrB,WAAW;IACX,KAAK,EAAE,CAAC;IAIZ,kBAAkB;IACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGlC,kBAAkB;IACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAIhC,kBAAkB;IACT,IAAI,IAAI,MAAM,EAAE;IAGzB,kBAAkB;IACT,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAGpC,kBAAkB;IAClB,IAAa,IAAI,IAAI,QAAQ,CAE5B;IACD,kBAAkB;IAClB,IAAa,QAAQ,IAAI,MAAM,CAE9B;CACJ"}
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/vm/types/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,oBAAoB;AACpB,qBAAa,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAErG,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM;;IADrB,WAAW;IACF,IAAI,EAAE,MAAM;IACrB,WAAW;IACX,KAAK,EAAE,CAAC;IAIZ,kBAAkB;IACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGlC,kBAAkB;IACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAIhC,kBAAkB;IACT,IAAI,IAAI,MAAM,EAAE;IAGzB,kBAAkB;IACT,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAGpC,kBAAkB;IAClB,IAAa,IAAI,IAAI,QAAQ,CAE5B;IACD,kBAAkB;IAClB,IAAa,QAAQ,IAAI,MAAM,CAE9B;CACJ;AAID,2BAA2B;AAC3B,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAElG"}
|
|
@@ -22,4 +22,6 @@ export declare abstract class VmWrapper<T extends object> {
|
|
|
22
22
|
/** 转为字符串 */
|
|
23
23
|
toString(): string;
|
|
24
24
|
}
|
|
25
|
+
/** 检查值是否为 MiraScript 包装器 */
|
|
26
|
+
export declare function isVmWrapper<T extends object>(value: unknown): value is VmWrapper<T>;
|
|
25
27
|
//# sourceMappingURL=wrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/vm/types/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,8BAAsB,SAAS,CAAC,CAAC,SAAS,MAAM;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;IAC7B,cAAc;IACd,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAClC,cAAc;IACd,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAChC,WAAW;IACX,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE;IACzB,aAAa;IACb,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IACpC,WAAW;IACX,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC;IAC9B,WAAW;IACX,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC;IAChC,iCAAiC;IACjC,MAAM,IAAI,SAAS;IAGnB,YAAY;IACZ,QAAQ,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/vm/types/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,8BAAsB,SAAS,CAAC,CAAC,SAAS,MAAM;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;IAC7B,cAAc;IACd,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAClC,cAAc;IACd,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAChC,WAAW;IACX,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE;IACzB,aAAa;IACb,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IACpC,WAAW;IACX,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC;IAC9B,WAAW;IACX,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC;IAChC,iCAAiC;IACjC,MAAM,IAAI,SAAS;IAGnB,YAAY;IACZ,QAAQ,IAAI,MAAM;CAKrB;AAID,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAEnF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirascript/mirascript",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "An expression based scripting language.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,22 +35,23 @@
|
|
|
35
35
|
"ansi-styles": "^6.2.3",
|
|
36
36
|
"commander": "^14.0.2",
|
|
37
37
|
"js-base64": "^3.7.8",
|
|
38
|
-
"
|
|
39
|
-
"@mirascript/wasm": "~0.1.
|
|
38
|
+
"source-map-js": "^1.2.1",
|
|
39
|
+
"@mirascript/wasm": "~0.1.4",
|
|
40
|
+
"@mirascript/napi": "~0.1.4"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
|
-
"@types/node": "^24.
|
|
43
|
+
"@types/node": "^24.10.0",
|
|
43
44
|
"@types/sinon": "^17.0.4",
|
|
44
45
|
"ava": "^6.4.1",
|
|
45
46
|
"c8": "^10.1.3",
|
|
46
47
|
"sinon": "^21.0.0",
|
|
47
|
-
"type-fest": "^5.
|
|
48
|
+
"type-fest": "^5.2.0"
|
|
48
49
|
},
|
|
49
50
|
"scripts": {
|
|
50
51
|
"watch": "pnpm build:ts --watch",
|
|
51
52
|
"build:ts": "pnpm clean && tsc",
|
|
52
53
|
"build": "pnpm build:ts --emitDeclarationOnly && node ./esbuild.config.js",
|
|
53
|
-
"mirascript": "node ./dist/cli/index.js",
|
|
54
|
+
"mirascript": "node --enable-source-maps ./dist/cli/index.js",
|
|
54
55
|
"clean": "rimraf dist",
|
|
55
56
|
"test": "c8 ava"
|
|
56
57
|
}
|
package/src/cli/execute.ts
CHANGED
|
@@ -6,9 +6,14 @@ import { debug_print } from '../vm/lib/global/debug.js';
|
|
|
6
6
|
import { print } from './print.js';
|
|
7
7
|
|
|
8
8
|
/** 执行脚本 */
|
|
9
|
-
export async function execute(
|
|
9
|
+
export async function execute(
|
|
10
|
+
script: string,
|
|
11
|
+
template: boolean,
|
|
12
|
+
variables: Record<string, VmValue>,
|
|
13
|
+
fileName: string,
|
|
14
|
+
): Promise<void> {
|
|
10
15
|
try {
|
|
11
|
-
const f = await compile(script, { input_mode: template ? 'Template' : 'Script' });
|
|
16
|
+
const f = await compile(script, { input_mode: template ? 'Template' : 'Script', sourceMap: true, fileName });
|
|
12
17
|
const r = f(
|
|
13
18
|
createVmContext({
|
|
14
19
|
debug_print: VmFunction((...values) => {
|
|
@@ -26,7 +31,7 @@ export async function execute(script: string, template: boolean, variables: Reco
|
|
|
26
31
|
console.log(print(r));
|
|
27
32
|
}
|
|
28
33
|
} catch (ex) {
|
|
29
|
-
console.error(styles.red.open + (ex as Error).
|
|
34
|
+
console.error(styles.red.open + (ex as Error).stack + styles.red.close);
|
|
30
35
|
process.exitCode = 2;
|
|
31
36
|
}
|
|
32
37
|
}
|
package/src/cli/index.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/* c8 ignore start */
|
|
2
2
|
/* eslint-disable no-console */
|
|
3
3
|
import { readFile, stat } from 'node:fs/promises';
|
|
4
|
-
import {
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
import { InvalidArgumentError, program } from '@commander-js/extra-typings';
|
|
5
6
|
import { execute } from './execute.js';
|
|
6
7
|
import pkg from '../../package.json' with { type: 'json' };
|
|
7
8
|
import { compileSync } from '../compiler/index.js';
|
|
8
|
-
import type
|
|
9
|
+
import { configCheckpoint, type VmValue } from '../vm/index.js';
|
|
10
|
+
|
|
11
|
+
const DEFAULT_TIMEOUT = 3000;
|
|
9
12
|
|
|
10
13
|
program.name(pkg.name.split('/').pop()!).version(pkg.version).description(pkg.description);
|
|
11
14
|
|
|
@@ -33,12 +36,26 @@ program
|
|
|
33
36
|
{} as Record<string, VmValue>,
|
|
34
37
|
)
|
|
35
38
|
.option('-t, --template', '使用模板模式')
|
|
39
|
+
.option(
|
|
40
|
+
'--timeout <ms>',
|
|
41
|
+
'脚本执行超时时间(毫秒,0 表示不超时)',
|
|
42
|
+
(v) => {
|
|
43
|
+
const ms = Number.parseFloat(v);
|
|
44
|
+
if (Number.isNaN(ms) || ms < 0) {
|
|
45
|
+
throw new InvalidArgumentError('超时时间必须是非负整数');
|
|
46
|
+
}
|
|
47
|
+
return ms;
|
|
48
|
+
},
|
|
49
|
+
DEFAULT_TIMEOUT,
|
|
50
|
+
)
|
|
36
51
|
.option('--no-template', '使用脚本模式')
|
|
37
52
|
.option('-e, --eval <script>', '要执行的脚本')
|
|
38
53
|
.argument('[script]', '要执行的脚本文件路径(如果提供了 -e 则忽略此参数)')
|
|
39
54
|
.action(async (script, opt) => {
|
|
55
|
+
configCheckpoint(opt.timeout || Number.POSITIVE_INFINITY);
|
|
40
56
|
if (opt.eval != null) {
|
|
41
|
-
|
|
57
|
+
const template = !!opt.template;
|
|
58
|
+
await execute(opt.eval, template, opt.variable, template ? 'eval.miratpl' : 'eval.mira');
|
|
42
59
|
return;
|
|
43
60
|
}
|
|
44
61
|
if (script) {
|
|
@@ -62,9 +79,9 @@ program
|
|
|
62
79
|
}
|
|
63
80
|
return;
|
|
64
81
|
}
|
|
65
|
-
const context = await readFile(script, '
|
|
82
|
+
const context = await readFile(script, 'utf-8');
|
|
66
83
|
const template = opt.template ?? script.endsWith('.miratpl');
|
|
67
|
-
await execute(context, template, opt.variable);
|
|
84
|
+
await execute(context, template, opt.variable, pathToFileURL(script).href);
|
|
68
85
|
return;
|
|
69
86
|
}
|
|
70
87
|
program.help({ error: true });
|
package/src/cli/print.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import styles from 'ansi-styles';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
serialize,
|
|
4
|
+
serializeNumber,
|
|
5
|
+
serializeBoolean,
|
|
6
|
+
serializeNil,
|
|
7
|
+
type SerializeOptions,
|
|
8
|
+
operations,
|
|
9
|
+
} from '../subtle.js';
|
|
3
10
|
import type { VmAny, VmRecord } from '../vm/index.js';
|
|
4
11
|
|
|
5
12
|
const options: Partial<SerializeOptions> = {
|
|
6
13
|
maxDepth: 3,
|
|
7
|
-
serializeNil: () => styles.gray.open +
|
|
8
|
-
serializeBoolean: (v) => styles.blue.open + (v
|
|
9
|
-
serializeNumber: (v) =>
|
|
10
|
-
styles.yellow.open +
|
|
11
|
-
(Number.isNaN(v) ? 'nan' : Number.isFinite(v) ? v.toString() : v > 0 ? 'inf' : '-inf') +
|
|
12
|
-
styles.yellow.close,
|
|
14
|
+
serializeNil: () => styles.gray.open + serializeNil() + styles.gray.close,
|
|
15
|
+
serializeBoolean: (v) => styles.blue.open + serializeBoolean(v) + styles.blue.close,
|
|
16
|
+
serializeNumber: (v) => styles.yellow.open + serializeNumber(v) + styles.yellow.close,
|
|
13
17
|
serializeStringQuote: (v, open) => {
|
|
14
18
|
const q = styles.dim.open + v + styles.dim.close;
|
|
15
19
|
if (open) {
|
|
@@ -19,12 +23,12 @@ const options: Partial<SerializeOptions> = {
|
|
|
19
23
|
}
|
|
20
24
|
},
|
|
21
25
|
serializeStringEscape: (v) => styles.bold.open + v + styles.bold.close,
|
|
22
|
-
serializeFunction: (v) => styles.cyan.open +
|
|
26
|
+
serializeFunction: (v) => styles.cyan.open + operations.$ToString(v) + styles.cyan.close,
|
|
23
27
|
serializePropName: (v) => styles.whiteBright.open + String(v) + styles.whiteBright.close,
|
|
24
28
|
serializeModule: (v, depth, options) => {
|
|
25
29
|
return (
|
|
26
30
|
styles.magenta.open +
|
|
27
|
-
|
|
31
|
+
operations.$ToString(v) +
|
|
28
32
|
styles.magenta.close +
|
|
29
33
|
' ' +
|
|
30
34
|
options.serializeRecord(v.value as VmRecord, depth, options)
|
|
@@ -60,30 +60,47 @@ export interface SourceReference<T extends DiagnosticCode = DiagnosticCode> exte
|
|
|
60
60
|
readonly diagnostic: SourceDiagnostic<T>;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
diagnostics: Uint32Array,
|
|
67
|
-
): {
|
|
63
|
+
/** 解析后的诊断信息 */
|
|
64
|
+
interface ParsedDiagnostics {
|
|
65
|
+
/** 错误诊断信息 */
|
|
68
66
|
errors: SourceDiagnostic[];
|
|
67
|
+
/** 警告诊断信息 */
|
|
69
68
|
warnings: SourceDiagnostic[];
|
|
69
|
+
/** 信息诊断信息 */
|
|
70
70
|
infos: SourceDiagnostic[];
|
|
71
|
+
/** 提示诊断信息 */
|
|
71
72
|
hints: SourceDiagnostic[];
|
|
73
|
+
/** 标签诊断信息 */
|
|
72
74
|
tags: SourceDiagnostic[];
|
|
73
75
|
|
|
76
|
+
/** 引用诊断信息 */
|
|
74
77
|
references: SourceReference[];
|
|
78
|
+
/** 标签引用诊断信息 */
|
|
75
79
|
tagsReferences: SourceReference[];
|
|
76
|
-
|
|
80
|
+
|
|
81
|
+
/** 代码映射信息 */
|
|
82
|
+
sourcemaps: IRange[];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** 分析诊断信息,{@link diagnostic_position_encoding} 不能设为 `None` */
|
|
86
|
+
export function parseDiagnostics(
|
|
87
|
+
source: ScriptInput,
|
|
88
|
+
diagnostics: Uint32Array,
|
|
89
|
+
filter?: (code: DiagnosticCode) => boolean,
|
|
90
|
+
): ParsedDiagnostics {
|
|
77
91
|
const parsed = [];
|
|
78
92
|
const bufLen = diagnostics.length;
|
|
79
93
|
for (let i = 0; i < bufLen; i += 5) {
|
|
94
|
+
const code = diagnostics[i + 4]! as DiagnosticCode;
|
|
95
|
+
if (filter && !filter(code)) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
80
98
|
const startLineNumber = diagnostics[i]!;
|
|
81
99
|
const startColumn = diagnostics[i + 1]!;
|
|
82
100
|
const endLineNumber = diagnostics[i + 2]!;
|
|
83
101
|
const endColumn = diagnostics[i + 3]!;
|
|
84
|
-
const error = diagnostics[i + 4]! as DiagnosticCode;
|
|
85
102
|
parsed.push({
|
|
86
|
-
code
|
|
103
|
+
code,
|
|
87
104
|
range: {
|
|
88
105
|
startLineNumber,
|
|
89
106
|
startColumn,
|
|
@@ -100,6 +117,7 @@ export function parseDiagnostics(
|
|
|
100
117
|
const _tags: SourceDiagnostic[] = [];
|
|
101
118
|
const _references: SourceReference[] = [];
|
|
102
119
|
const _tagsReferences: SourceReference[] = [];
|
|
120
|
+
const _sourcemaps: IRange[] = [];
|
|
103
121
|
for (let i = 0; i < parsed.length; i++) {
|
|
104
122
|
const diagnostic = parsed[i]!;
|
|
105
123
|
const { code } = diagnostic;
|
|
@@ -113,7 +131,11 @@ export function parseDiagnostics(
|
|
|
113
131
|
_hints.push(diagnostic);
|
|
114
132
|
} else if (code > DiagnosticCode.TagStart && code < DiagnosticCode.TagEnd) {
|
|
115
133
|
_tags.push(diagnostic);
|
|
134
|
+
} else if (code === DiagnosticCode.SourceMap) {
|
|
135
|
+
_sourcemaps.push(diagnostic.range);
|
|
136
|
+
continue;
|
|
116
137
|
} else {
|
|
138
|
+
// 非法诊断代码,跳过
|
|
117
139
|
continue;
|
|
118
140
|
}
|
|
119
141
|
diagnostic.references = [];
|
|
@@ -144,16 +166,12 @@ export function parseDiagnostics(
|
|
|
144
166
|
tags: _tags,
|
|
145
167
|
references: _references,
|
|
146
168
|
tagsReferences: _tagsReferences,
|
|
169
|
+
sourcemaps: _sourcemaps,
|
|
147
170
|
};
|
|
148
171
|
}
|
|
149
172
|
|
|
150
173
|
/** 生成诊断 range 的字符串 */
|
|
151
|
-
function formatRange(range: {
|
|
152
|
-
startLineNumber: number;
|
|
153
|
-
startColumn: number;
|
|
154
|
-
endLineNumber: number;
|
|
155
|
-
endColumn: number;
|
|
156
|
-
}): string {
|
|
174
|
+
function formatRange(range: IRange): string {
|
|
157
175
|
if (range.startLineNumber === range.endLineNumber) {
|
|
158
176
|
if (range.startColumn === range.endColumn) {
|
|
159
177
|
return `${range.startLineNumber}:${range.startColumn}`;
|
package/src/compiler/emit.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { OpCode } from '@mirascript/wasm/types';
|
|
2
|
-
import {
|
|
2
|
+
import { toBase64 } from 'js-base64';
|
|
3
3
|
import type { VmConst, VmPrimitive } from '../vm/index.js';
|
|
4
4
|
import type { ScriptInput, TranspileOptions } from './types.js';
|
|
5
|
+
import type { IRange } from './diagnostic.js';
|
|
6
|
+
import { SourceMapGenerator } from 'source-map-js';
|
|
5
7
|
|
|
6
8
|
/** 生成代码 */
|
|
7
|
-
export function emit(
|
|
8
|
-
|
|
9
|
+
export function emit(
|
|
10
|
+
source: ScriptInput,
|
|
11
|
+
chunk: Uint8Array,
|
|
12
|
+
sourcemaps: readonly IRange[],
|
|
13
|
+
options: TranspileOptions,
|
|
14
|
+
): string {
|
|
15
|
+
const gen = new Emitter(source, chunk, sourcemaps, options);
|
|
9
16
|
gen.read();
|
|
10
17
|
const code = gen.codeLines.join('\n');
|
|
11
18
|
return code;
|
|
@@ -57,7 +64,7 @@ function toJavascript(value: VmConst | undefined): string {
|
|
|
57
64
|
return String(value);
|
|
58
65
|
}
|
|
59
66
|
|
|
60
|
-
const ORIGIN = `mira://MiraScript
|
|
67
|
+
const ORIGIN = `mira://MiraScript/`;
|
|
61
68
|
let sourceId = 1;
|
|
62
69
|
|
|
63
70
|
/** 创建数组 */
|
|
@@ -75,6 +82,7 @@ class Emitter {
|
|
|
75
82
|
constructor(
|
|
76
83
|
readonly source: ScriptInput,
|
|
77
84
|
readonly chunk: Uint8Array,
|
|
85
|
+
readonly sourcemaps: readonly IRange[],
|
|
78
86
|
readonly options: TranspileOptions,
|
|
79
87
|
) {
|
|
80
88
|
this.pretty = options.pretty ?? false;
|
|
@@ -362,9 +370,9 @@ class Emitter {
|
|
|
362
370
|
);
|
|
363
371
|
if (script) {
|
|
364
372
|
args.unshift(`global = GlobalFallback()`);
|
|
365
|
-
code = `'use strict'; return (
|
|
373
|
+
code = `'use strict'; return ((${args.join(', ')}) => { try { CpEnter(); var ${regs};`;
|
|
366
374
|
} else {
|
|
367
|
-
code = `${this.wv(reg)} = Function(
|
|
375
|
+
code = `${this.wv(reg)} = Function((${args.join(', ')}) => { try { CpEnter(); var ${regs};`;
|
|
368
376
|
}
|
|
369
377
|
if (varg) {
|
|
370
378
|
code += ` var ${this.wv(argn, -1)} = Vargs(vargs);`;
|
|
@@ -688,6 +696,9 @@ class Emitter {
|
|
|
688
696
|
code = `continue;`;
|
|
689
697
|
break;
|
|
690
698
|
}
|
|
699
|
+
case OpCode.Noop: {
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
691
702
|
default: {
|
|
692
703
|
code = `; // ${OpCode[opcode] ?? opcode}`;
|
|
693
704
|
break;
|
|
@@ -742,27 +753,42 @@ class Emitter {
|
|
|
742
753
|
const hasSchema = /^\w+:/.test(fileName);
|
|
743
754
|
if (!hasSchema) {
|
|
744
755
|
if (fileName.startsWith('/')) {
|
|
745
|
-
fileName = fileName.replace(
|
|
756
|
+
fileName = fileName.replace(/^\/+\s*/, '');
|
|
746
757
|
}
|
|
747
758
|
if (!fileName) {
|
|
748
759
|
fileName = `${sourceId++}.${this.options.input_mode === 'Template' ? 'miratpl' : 'mira'}`;
|
|
749
760
|
}
|
|
750
761
|
}
|
|
751
|
-
const
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
762
|
+
const map = new SourceMapGenerator({
|
|
763
|
+
file: fileName + '.js',
|
|
764
|
+
});
|
|
765
|
+
if (typeof this.source === 'string') {
|
|
766
|
+
map.setSourceContent(fileName, this.source);
|
|
767
|
+
}
|
|
768
|
+
for (let i = 0; i < this.sourcemaps.length; i++) {
|
|
769
|
+
const range = this.sourcemaps[i];
|
|
770
|
+
if (!range) break;
|
|
771
|
+
map.addMapping({
|
|
772
|
+
generated: {
|
|
773
|
+
// 前两行固定为:
|
|
774
|
+
// (function anonymous($Add,$Aeq, ...
|
|
775
|
+
// ) {
|
|
776
|
+
line: i + 3,
|
|
777
|
+
column: 0,
|
|
778
|
+
},
|
|
779
|
+
original: {
|
|
780
|
+
line: range.startLineNumber,
|
|
781
|
+
column: range.startColumn - 1,
|
|
782
|
+
},
|
|
783
|
+
source: fileName,
|
|
784
|
+
});
|
|
785
|
+
}
|
|
760
786
|
const prefix = '//# ';
|
|
761
|
-
const sourceURL = hasSchema ? fileName : `${ORIGIN}
|
|
787
|
+
const sourceURL = hasSchema ? fileName : `${ORIGIN}${fileName}`;
|
|
762
788
|
this.codeLines.push(
|
|
763
789
|
// Prevent source map from being recognized as of this file
|
|
764
|
-
`${prefix}sourceURL=${sourceURL}`,
|
|
765
|
-
`${prefix}sourceMappingURL=data:application/json;base64,${
|
|
790
|
+
`${prefix}sourceURL=${sourceURL}.js`,
|
|
791
|
+
`${prefix}sourceMappingURL=data:application/json;base64,${toBase64(map.toString())}`,
|
|
766
792
|
);
|
|
767
793
|
}
|
|
768
794
|
}
|
package/src/compiler/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ import './types.js';
|
|
|
4
4
|
import { emit } from './emit.js';
|
|
5
5
|
import { createScript } from './create-script.js';
|
|
6
6
|
import { compileFast } from './compile-fast.js';
|
|
7
|
-
import { formatDiagnostic, parseDiagnostics } from './diagnostic.js';
|
|
7
|
+
import { DiagnosticCode, formatDiagnostic, parseDiagnostics } from './diagnostic.js';
|
|
8
8
|
import { generateBytecode, generateBytecodeSync, loadModule } from './generate-bytecode.js';
|
|
9
9
|
import { compileWorker } from './worker-manager.js';
|
|
10
10
|
await loadModule();
|
|
@@ -33,7 +33,10 @@ export function emitScript(
|
|
|
33
33
|
if (!code) {
|
|
34
34
|
reportDiagnostic(source, diagnostics);
|
|
35
35
|
}
|
|
36
|
-
const
|
|
36
|
+
const sourcemaps = options.sourceMap
|
|
37
|
+
? parseDiagnostics(source, diagnostics, (c) => c === DiagnosticCode.SourceMap).sourcemaps
|
|
38
|
+
: [];
|
|
39
|
+
const target = emit(source, code, sourcemaps, options);
|
|
37
40
|
return createScript(source, target);
|
|
38
41
|
}
|
|
39
42
|
|
|
@@ -41,6 +44,11 @@ export function emitScript(
|
|
|
41
44
|
* 生成 MiraScript 对应的 JavaScript 代码
|
|
42
45
|
*/
|
|
43
46
|
export async function compile(this: void, source: ScriptInput, options: TranspileOptions = {}): Promise<VmScript> {
|
|
47
|
+
if (options.sourceMap) {
|
|
48
|
+
options.diagnostic_sourcemap = true;
|
|
49
|
+
// https://tc39.es/ecma426/#sec-terms-and-definitions-colun
|
|
50
|
+
options.diagnostic_position_encoding ??= 'Utf16';
|
|
51
|
+
}
|
|
44
52
|
if (typeof source == 'string') {
|
|
45
53
|
const result = compileFast(source, options);
|
|
46
54
|
if (result) return result;
|