@mirascript/mirascript 0.1.76 → 0.1.78
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-VI74OKFU.js → chunk-BITOQYYQ.js} +99 -89
- package/dist/chunk-BITOQYYQ.js.map +6 -0
- package/dist/{chunk-ZRLBJK6A.js → chunk-VNQQF2W7.js} +127 -47
- package/dist/chunk-VNQQF2W7.js.map +6 -0
- package/dist/compiler/emit/index.d.ts.map +1 -1
- package/dist/compiler/emit-script.d.ts.map +1 -1
- package/dist/compiler/worker.js +1 -1
- package/dist/helpers/convert/to-number.d.ts.map +1 -1
- package/dist/helpers/convert/to-string.d.ts +2 -0
- package/dist/helpers/convert/to-string.d.ts.map +1 -1
- package/dist/helpers/error.d.ts +1 -0
- package/dist/helpers/error.d.ts.map +1 -1
- package/dist/helpers/serialize.d.ts.map +1 -1
- package/dist/helpers/utils.d.ts +9 -0
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/subtle.js +2 -2
- package/dist/vm/lib/global/debug.d.ts.map +1 -1
- package/dist/vm/lib/global/json.d.ts +3 -2
- package/dist/vm/lib/global/json.d.ts.map +1 -1
- package/dist/vm/lib/global/math/tgamma.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/entries.d.ts +1 -1
- package/dist/vm/lib/global/sequence/entries.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/fold.d.ts +3 -0
- package/dist/vm/lib/global/sequence/fold.d.ts.map +1 -0
- package/dist/vm/lib/global/sequence/group.d.ts +3 -0
- package/dist/vm/lib/global/sequence/group.d.ts.map +1 -0
- package/dist/vm/lib/global/sequence/index.d.ts +2 -0
- package/dist/vm/lib/global/sequence/index.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/new.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/zip.d.ts +2 -2
- package/dist/vm/lib/global/sequence/zip.d.ts.map +1 -1
- package/dist/vm/lib/helpers.d.ts +2 -2
- package/dist/vm/lib/helpers.d.ts.map +1 -1
- package/dist/vm/operations/compound.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/compiler/compile-fast.ts +1 -1
- package/src/compiler/emit/index.ts +0 -6
- package/src/compiler/emit-script.ts +1 -0
- package/src/helpers/convert/to-number.ts +5 -10
- package/src/helpers/convert/to-string.ts +3 -2
- package/src/helpers/error.ts +3 -1
- package/src/helpers/serialize.ts +4 -9
- package/src/helpers/types.ts +1 -1
- package/src/helpers/utils.ts +27 -0
- package/src/vm/lib/global/debug.ts +4 -8
- package/src/vm/lib/global/json.ts +21 -9
- package/src/vm/lib/global/math/tgamma.ts +8 -14
- package/src/vm/lib/global/sequence/entries.ts +6 -1
- package/src/vm/lib/global/sequence/fold.ts +30 -0
- package/src/vm/lib/global/sequence/group.ts +37 -0
- package/src/vm/lib/global/sequence/index.ts +2 -0
- package/src/vm/lib/global/sequence/map-filter.ts +2 -2
- package/src/vm/lib/global/sequence/new.ts +8 -2
- package/src/vm/lib/global/sequence/with.ts +4 -4
- package/src/vm/lib/global/sequence/zip.ts +21 -10
- package/src/vm/lib/helpers.ts +4 -4
- package/src/vm/lib/mod/matrix.ts +2 -2
- package/src/vm/operations/compound.ts +13 -6
- package/src/vm/types/extern.ts +1 -1
- package/dist/chunk-VI74OKFU.js.map +0 -6
- package/dist/chunk-ZRLBJK6A.js.map +0 -6
package/dist/helpers/utils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { VmConst, VmRecord } from '../vm/index.js';
|
|
1
2
|
export declare const isArray: (arg: any) => arg is unknown[];
|
|
2
3
|
export declare const isFinite: (number: unknown) => boolean, isNaN: (number: unknown) => boolean, isInteger: (number: unknown) => boolean, isSafeInteger: (number: unknown) => boolean, NotNumber: number, PositiveInfinity: number, NegativeInfinity: number;
|
|
3
4
|
export declare const hasOwn: <Obj extends object, Key extends PropertyKey>(o: Obj, v: Key) => o is Obj & (string extends Key ? {} : number extends Key ? {} : symbol extends Key ? {} : Key extends PropertyKey ? { [key in Key]: unknown; } : {}), keys: {
|
|
@@ -42,4 +43,12 @@ export declare const keysLength: (o: object) => number;
|
|
|
42
43
|
* Determines whether an object has an enumerable property with the specified name.
|
|
43
44
|
*/
|
|
44
45
|
export declare const hasOwnEnumerable: (o: object, v: PropertyKey) => boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Set property on an vm record.
|
|
48
|
+
*/
|
|
49
|
+
export declare const setRecord: (obj: Record<string, VmConst | undefined>, key: string, value: VmConst | undefined) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Get property from an vm record.
|
|
52
|
+
*/
|
|
53
|
+
export declare const getRecord: (obj: VmRecord, key: string) => VmConst | undefined;
|
|
45
54
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/helpers/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAQ,OAAO,gCAAU,CAAC;AACjC,eAAO,MACH,QAAQ,gCACR,KAAK,gCACL,SAAS,gCACT,aAAa,gCACR,SAAS,UACK,gBAAgB,UAChB,gBAAgB,QAC7B,CAAC;AACX,eAAO,MAAQ,MAAM,yNAAE,IAAI;;;GAAE,MAAM;;;;GAAE,OAAO;;;;GAAE,MAAM;;;;;;;;;;;;;GAAE,WAAW,2FAAE,cAAc;;;;+BAAE,mBAAmB,uBAAE,MAAM;;;;;;CACpG,CAAC;AACX,eAAO,MAAQ,KAAK,wBAAE,cAAc,+BAAY,CAAC;AAGjD,eAAe;AACf,eAAO,MAAM,UAAU,MAEa,MAAM,KAAK,MACA,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAGxB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/helpers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExD,eAAO,MAAQ,OAAO,gCAAU,CAAC;AACjC,eAAO,MACH,QAAQ,gCACR,KAAK,gCACL,SAAS,gCACT,aAAa,gCACR,SAAS,UACK,gBAAgB,UAChB,gBAAgB,QAC7B,CAAC;AACX,eAAO,MAAQ,MAAM,yNAAE,IAAI;;;GAAE,MAAM;;;;GAAE,OAAO;;;;GAAE,MAAM;;;;;;;;;;;;;GAAE,WAAW,2FAAE,cAAc;;;;+BAAE,mBAAmB,uBAAE,MAAM;;;;;;CACpG,CAAC;AACX,eAAO,MAAQ,KAAK,wBAAE,cAAc,+BAAY,CAAC;AAGjD,eAAe;AACf,eAAO,MAAM,UAAU,MAEa,MAAM,KAAK,MACA,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAGxB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;AAG5C;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,OAAO,GAAG,SAAS,KAAG,IAW7G,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,QAAQ,EAAE,KAAK,MAAM,KAAG,OAAO,GAAG,SAGhE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
unwrapFromVmValue,
|
|
13
13
|
wrapScript,
|
|
14
14
|
wrapToVmValue
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-VNQQF2W7.js";
|
|
16
16
|
import {
|
|
17
17
|
VmError,
|
|
18
18
|
defineProperty,
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
isVmValue,
|
|
40
40
|
isVmWrapper,
|
|
41
41
|
serialize
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-BITOQYYQ.js";
|
|
43
43
|
|
|
44
44
|
// src/compiler/compile-fast.ts
|
|
45
45
|
import { isKeyword } from "@mirascript/constants";
|
|
@@ -47,7 +47,7 @@ var REG_NUMBER_FULL = /^(?:[+-])?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?$/;
|
|
|
47
47
|
var REG_IDENTIFIER_FAST = /^(?:\$+|@+|[A-Za-z])[a-zA-Z0-9_]*$/;
|
|
48
48
|
var FAST_SCRIPT_MAX_LEN = 32;
|
|
49
49
|
function safeStringify(value) {
|
|
50
|
-
return JSON.stringify(value).replaceAll(/[<>&\
|
|
50
|
+
return JSON.stringify(value).replaceAll(/[<>&\u{2028}\u{2029}/]/gu, (c) => {
|
|
51
51
|
return String.raw`\u${c.codePointAt(0)?.toString(16).padStart(4, "0")}`;
|
|
52
52
|
});
|
|
53
53
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/compiler/compile-fast.ts", "../src/compiler/worker-manager.ts", "../src/compiler/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,iBAAiB;AAM1B,IAAM,kBAAkB;AAExB,IAAM,sBAAsB;AAU5B,IAAM,sBAAsB;AAG5B,SAAS,cAAc,OAAuB;AAC1C,SAAO,KAAK,UAAU,KAAK,EAAE,WAAW,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/subtle.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
lib,
|
|
7
7
|
operations_exports,
|
|
8
8
|
wrapScript
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VNQQF2W7.js";
|
|
10
10
|
import {
|
|
11
11
|
DiagnosticCode,
|
|
12
12
|
constants_exports,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
serializeRecord,
|
|
27
27
|
serializeRecordKey,
|
|
28
28
|
serializeString
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-BITOQYYQ.js";
|
|
30
30
|
|
|
31
31
|
// src/subtle.ts
|
|
32
32
|
import { OpCode, isKeyword } from "@mirascript/constants";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../src/vm/lib/global/debug.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGlD,YAAY;AACZ,KAAK,eAAe;AAChB,cAAc;AACZ,EAAE;AACJ,qBAAqB;GACnB,IAAI,MAAM,EAAE,CAAC;AAOnB,YAAY;AACZ,UAAU,YAAY;IAClB,cAAc;IACd,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,qCAAqC;IACrC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CACvC;
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../src/vm/lib/global/debug.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGlD,YAAY;AACZ,KAAK,eAAe;AAChB,cAAc;AACZ,EAAE;AACJ,qBAAqB;GACnB,IAAI,MAAM,EAAE,CAAC;AAOnB,YAAY;AACZ,UAAU,YAAY;IAClB,cAAc;IACd,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,qCAAqC;IACrC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CACvC;AA4ID,aAAa;AACb,KAAK,YAAY,GAAG;IAChB,eAAe;IACf,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACrE;;;;;OAKG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,KAAK,MAAM,GAAG,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7G,kEAAkE;IAClE,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,KAAK,YAAY,CAAC;IACrE,0CAA0C;IAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5F,mBAAmB;IACnB,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAC5D,CAAC;AAQF,eAAO,MAAM,WAAW,gJAcvB,CAAC;AAEF,eAAO,MAAM,KAAK,aACJ,KAAK,gEAclB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
1
|
+
import { type VmValue } from '../../types/index.js';
|
|
2
|
+
export declare const to_json: ((data: VmValue | undefined) => string | null | undefined) & import("../helpers.js").VmLibOption & Record<never, never>;
|
|
3
|
+
export declare const from_json: ((json: VmValue | undefined, fallback: VmValue | undefined) => string | number | boolean | import("../../types/index.js").VmRecord | import("../../types/index.js").VmArray | import("../../types/function.js").VmFunction | import("../../types/module.js").VmModule<Record<string, import("../../types/index.js").VmImmutable>> | import("../../types/extern.js").VmExtern<object> | null) & import("../helpers.js").VmLibOption & Record<never, never>;
|
|
3
4
|
//# sourceMappingURL=json.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/vm/lib/global/json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/vm/lib/global/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI5E,eAAO,MAAM,OAAO,yHA+BnB,CAAC;AAEF,eAAO,MAAM,SAAS,2bAmBrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tgamma.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/math/tgamma.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tgamma.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/math/tgamma.ts"],"names":[],"mappings":"AAqMA,eAAO,MAAM,KAAK,kIAWjB,CAAC;AAgBF,eAAO,MAAM,SAAS,2DACb,MAAM,iEAWd,CAAC"}
|
|
@@ -6,6 +6,6 @@ export declare const entries: ((data: import("../../../types/index.js").VmValue
|
|
|
6
6
|
1: VmConst;
|
|
7
7
|
}[] | {
|
|
8
8
|
0: string;
|
|
9
|
-
1:
|
|
9
|
+
1: VmConst;
|
|
10
10
|
}[]) & import("../../helpers.js").VmLibOption & Record<never, never>;
|
|
11
11
|
//# sourceMappingURL=entries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/entries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAI9E,eAAO,MAAM,IAAI,wJAwBhB,CAAC;AAEF,eAAO,MAAM,MAAM,8KAgBlB,CAAC;AAEF,eAAO,MAAM,OAAO;OAIc,MAAM;OAAK,OAAO
|
|
1
|
+
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/entries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAI9E,eAAO,MAAM,IAAI,wJAwBhB,CAAC;AAEF,eAAO,MAAM,MAAM,8KAgBlB,CAAC;AAEF,eAAO,MAAM,OAAO;OAIc,MAAM;OAAK,OAAO;;OAOlB,MAAM;OAAK,OAAO;oEAanD,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { VmValue } from '../../../types/index.js';
|
|
2
|
+
export declare const fold: ((data: VmValue | undefined, initial: VmValue | undefined, f: VmValue | undefined) => VmValue) & import("../../helpers.js").VmLibOption & Record<never, never>;
|
|
3
|
+
//# sourceMappingURL=fold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/fold.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,eAAO,MAAM,IAAI,gKAyBhB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { VmConst } from '../../../types/index.js';
|
|
2
|
+
export declare const group_by: ((data: import("../../../types/index.js").VmValue | undefined, key: import("../../../types/index.js").VmValue | undefined) => Record<string, VmConst[]>) & import("../../helpers.js").VmLibOption & Record<never, never>;
|
|
3
|
+
//# sourceMappingURL=group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/group.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,eAAO,MAAM,QAAQ,0NA8BpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAa1E,eAAO,MAAM,UAAU,sIACA,QAAQ,iEAyB9B,CAAC;AAEF,eAAO,MAAM,SAAS,wIACG,OAAO,iEAkB/B,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare const zip: ((data: import("../../../types/index.js").VmValue | undefined) =>
|
|
1
|
+
import { type VmArray, type VmRecord } from '../../../types/index.js';
|
|
2
|
+
export declare const zip: ((data: import("../../../types/index.js").VmValue | undefined) => (VmRecord | VmArray)[]) & import("../../helpers.js").VmLibOption & Record<never, never>;
|
|
3
3
|
//# sourceMappingURL=zip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/zip.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../../../../src/vm/lib/global/sequence/zip.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAI/F,eAAO,MAAM,GAAG,2JA0Cf,CAAC"}
|
package/dist/vm/lib/helpers.d.ts
CHANGED
|
@@ -42,9 +42,9 @@ export declare function getNumbers(args: readonly VmAny[]): number[];
|
|
|
42
42
|
/** 将值转为数组长度 */
|
|
43
43
|
export declare function arrayLen(len: number | null | undefined): number;
|
|
44
44
|
/** 应用映射函数 */
|
|
45
|
-
export declare function
|
|
45
|
+
export declare function iterate<T extends VmConst>(data: T,
|
|
46
46
|
/** 返回 `undefined` 表示跳过该元素 */
|
|
47
|
-
mapper: (value: VmConst, index: number | string | null, data:
|
|
47
|
+
mapper: (value: VmConst, index: number | string | null, data: T) => VmConst | undefined): VmConst;
|
|
48
48
|
/** 库函数选项 */
|
|
49
49
|
export type VmLibOption = Pick<VmFunctionOption, 'summary' | 'params' | 'returns' | 'examples' | 'deprecated'>;
|
|
50
50
|
/** 库函数 */
|
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compound.d.ts","sourceRoot":"","sources":["../../../src/vm/operations/compound.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compound.d.ts","sourceRoot":"","sources":["../../../src/vm/operations/compound.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAS3E,mBAAmB;AACnB,eAAO,MAAM,GAAG,GAAI,OAAO,KAAK,EAAE,UAAU,KAAK,KAAG,OAoBnD,CAAC;AAEF,aAAa;AACb,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,MAOtC,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,SAAS,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,QAY7E,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,QAAQ,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,QAW5E,CAAC;AACF,eAAe;AACf,eAAO,MAAM,IAAI,GAAI,KAAK,KAAK,EAAE,KAAK,KAAK,KAAG,OAM7C,CAAC;AAEF,WAAW;AACX,eAAO,MAAM,IAAI,GAAI,KAAK,KAAK,EAAE,KAAK,KAAK,KAAG,OAsB7C,CAAC;AACF,WAAW;AACX,eAAO,MAAM,IAAI,GAAI,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,OAAO,KAAK,KAAG,IAM3D,CAAC;AACF,cAAc;AACd,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,KAAG,QAAQ,CAAC,OAAO,GAAG,SAAS,CAMpE,CAAC;AACF,WAAW;AACX,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,KAAG,QAAQ,GAAG,IAuBxD,CAAC;AAEF,WAAW;AACX,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,KAAG,QAAQ,CAAC,OAAO,GAAG,SAAS,CAqBvE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirascript/mirascript",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.78",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "An expression based scripting language.",
|
|
@@ -41,15 +41,15 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@cloudpss/worker": "^0.1.11",
|
|
43
43
|
"source-map-js": "^1.2.1",
|
|
44
|
-
"supports-color": "^
|
|
45
|
-
"@mirascript/bindings": "~0.1.
|
|
46
|
-
"@mirascript/constants": "~0.1.
|
|
44
|
+
"supports-color": "^11.0.0",
|
|
45
|
+
"@mirascript/bindings": "~0.1.78",
|
|
46
|
+
"@mirascript/constants": "~0.1.78"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "^26.1.1",
|
|
50
50
|
"ava": "^8.0.1",
|
|
51
51
|
"c8": "^12.0.0",
|
|
52
|
-
"tinybench": "^6.
|
|
52
|
+
"tinybench": "^6.1.2",
|
|
53
53
|
"type-fest": "^5.8.0"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
@@ -20,7 +20,7 @@ const FAST_SCRIPT_MAX_LEN = 32;
|
|
|
20
20
|
|
|
21
21
|
/** 生成安全的 JS 字符串 */
|
|
22
22
|
function safeStringify(value: string): string {
|
|
23
|
-
return JSON.stringify(value).replaceAll(/[<>&\
|
|
23
|
+
return JSON.stringify(value).replaceAll(/[<>&\u{2028}\u{2029}/]/gu, (c) => {
|
|
24
24
|
return String.raw`\u${c.codePointAt(0)?.toString(16).padStart(4, '0')}`;
|
|
25
25
|
});
|
|
26
26
|
}
|
|
@@ -174,12 +174,6 @@ export class Emitter {
|
|
|
174
174
|
this.codeLines.push(body);
|
|
175
175
|
break;
|
|
176
176
|
}
|
|
177
|
-
if (opcode === OpCode.ElIf) {
|
|
178
|
-
this.codeOffset++;
|
|
179
|
-
const body = this.ident(-1) + `} else `;
|
|
180
|
-
this.codeLines.push(body);
|
|
181
|
-
return this.readCode();
|
|
182
|
-
}
|
|
183
177
|
this.readCode();
|
|
184
178
|
}
|
|
185
179
|
return this.readBlockEnd(OpCode.IfEnd);
|
|
@@ -8,6 +8,7 @@ import { DiagnosticCode, formatDiagnostics, parseDiagnostics } from './diagnosti
|
|
|
8
8
|
export class CompileError extends Error {
|
|
9
9
|
constructor(
|
|
10
10
|
source: ScriptInput,
|
|
11
|
+
// eslint-disable-next-line unicorn/custom-error-definition
|
|
11
12
|
diagnostics: Uint32Array,
|
|
12
13
|
readonly fileName: string | undefined,
|
|
13
14
|
) {
|
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
import type { VmAny } from '../../vm/index.js';
|
|
2
2
|
import { VmError } from '../error.js';
|
|
3
3
|
import { display } from '../serialize.js';
|
|
4
|
-
import {
|
|
4
|
+
import { NegativeInfinity, NotNumber, PositiveInfinity } from '../utils.js';
|
|
5
5
|
|
|
6
6
|
/** 将字符串转换为数字 */
|
|
7
7
|
function parseNumericLiteral(value: string): number | null {
|
|
8
|
-
if (value === '') return null;
|
|
9
8
|
const ch0 = value.charAt(0);
|
|
10
9
|
if (ch0 < '0' || ch0 > '9') {
|
|
11
10
|
return null;
|
|
12
11
|
}
|
|
13
12
|
// 二进制
|
|
14
13
|
if (/^0[bB][01]+$/.test(value)) {
|
|
15
|
-
|
|
16
|
-
return isNaN(num) ? null : num;
|
|
14
|
+
return Number.parseInt(value.slice(2), 2);
|
|
17
15
|
}
|
|
18
16
|
// 八进制
|
|
19
17
|
if (/^0[oO][0-7]+$/.test(value)) {
|
|
20
|
-
|
|
21
|
-
return isNaN(num) ? null : num;
|
|
18
|
+
return Number.parseInt(value.slice(2), 8);
|
|
22
19
|
}
|
|
23
20
|
// 十六进制
|
|
24
21
|
if (/^0[xX][0-9a-fA-F]+$/.test(value)) {
|
|
25
|
-
|
|
26
|
-
return isNaN(num) ? null : num;
|
|
22
|
+
return Number.parseInt(value.slice(2), 16);
|
|
27
23
|
}
|
|
28
24
|
// 十进制/科学计数法
|
|
29
25
|
if (/^[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?$/.test(value)) {
|
|
30
|
-
|
|
31
|
-
return isNaN(num) ? null : num;
|
|
26
|
+
return Number.parseFloat(value);
|
|
32
27
|
}
|
|
33
28
|
return null;
|
|
34
29
|
}
|
|
@@ -5,17 +5,18 @@ import { display, displayFunction } from '../serialize.js';
|
|
|
5
5
|
import { keys, isNaN } from '../utils.js';
|
|
6
6
|
|
|
7
7
|
/** 转换为 string */
|
|
8
|
-
function numberToString(value: number): string {
|
|
8
|
+
export function numberToString(value: number, minusZero: boolean): string {
|
|
9
9
|
if (isNaN(value)) return 'nan';
|
|
10
10
|
if (value === Infinity) return 'inf';
|
|
11
11
|
if (value === -Infinity) return '-inf';
|
|
12
|
+
if (minusZero && value === 0 && 1 / value < 0) return '-0';
|
|
12
13
|
return String(value);
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
/** 转换为 string */
|
|
16
17
|
export function innerToString(value: VmAny, useBraces: boolean): string {
|
|
17
18
|
if (value == null) return 'nil';
|
|
18
|
-
if (typeof value == 'number') return numberToString(value);
|
|
19
|
+
if (typeof value == 'number') return numberToString(value, false);
|
|
19
20
|
if (typeof value == 'string' || typeof value == 'boolean') return String(value);
|
|
20
21
|
if (typeof value == 'function') return displayFunction(value);
|
|
21
22
|
if (isVmWrapper(value)) return value.toString(useBraces);
|
package/src/helpers/error.ts
CHANGED
|
@@ -6,12 +6,14 @@ import type { VmAny } from '../vm/types/index.js';
|
|
|
6
6
|
export class VmError extends Error {
|
|
7
7
|
constructor(
|
|
8
8
|
message: string,
|
|
9
|
+
// eslint-disable-next-line unicorn/custom-error-definition
|
|
9
10
|
readonly recovered: VmAny,
|
|
10
11
|
) {
|
|
11
12
|
super(message);
|
|
12
|
-
this.name = 'VmError';
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
override readonly name = 'VmError';
|
|
16
|
+
|
|
15
17
|
/** 从其他错误构造 */
|
|
16
18
|
static from(prefix: string, error: unknown, recovered: VmAny): VmError {
|
|
17
19
|
if (prefix) {
|
package/src/helpers/serialize.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { REG_IDENTIFIER_FULL, REG_ORDINAL_FULL } from '@mirascript/constants';
|
|
2
2
|
import type { VmArray, VmExtern, VmFunction, VmModule, VmAny, VmRecord } from '../vm/index.js';
|
|
3
|
-
import { entries, hasOwn
|
|
3
|
+
import { entries, hasOwn } from '../helpers/utils.js';
|
|
4
4
|
import {
|
|
5
5
|
getVmFunctionInfo,
|
|
6
6
|
isVmArray,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
isVmModule,
|
|
11
11
|
isVmRecord,
|
|
12
12
|
} from './types.js';
|
|
13
|
+
import { numberToString } from './convert/to-string.js';
|
|
13
14
|
|
|
14
15
|
/** 序列化 nil 值 */
|
|
15
16
|
export function serializeNil(): string {
|
|
@@ -23,13 +24,7 @@ export function serializeBoolean(value: boolean): string {
|
|
|
23
24
|
|
|
24
25
|
/** 序列化数字 */
|
|
25
26
|
export function serializeNumber(value: number): string {
|
|
26
|
-
|
|
27
|
-
if (!isFinite(value)) return value < 0 ? '-inf' : 'inf';
|
|
28
|
-
if (value === 0) {
|
|
29
|
-
if (1 / value < 0) return '-0';
|
|
30
|
-
return '0';
|
|
31
|
-
}
|
|
32
|
-
return String(value);
|
|
27
|
+
return numberToString(value, true);
|
|
33
28
|
}
|
|
34
29
|
|
|
35
30
|
/**
|
|
@@ -177,7 +172,7 @@ const { valueOf } = Object.prototype;
|
|
|
177
172
|
function customValueOf(value: VmRecord): VmAny | undefined {
|
|
178
173
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
179
174
|
const thisValueOf = value.valueOf;
|
|
180
|
-
if (typeof thisValueOf
|
|
175
|
+
if (typeof thisValueOf !== 'function' || thisValueOf === valueOf) {
|
|
181
176
|
return undefined;
|
|
182
177
|
}
|
|
183
178
|
const customValue = thisValueOf.call(value) as VmAny | undefined;
|
package/src/helpers/types.ts
CHANGED
|
@@ -86,7 +86,7 @@ export function isVmArray(value: VmAny): value is VmArray {
|
|
|
86
86
|
|
|
87
87
|
/** 检查值是否为 Mirascript 记录 */
|
|
88
88
|
export function isVmRecord(value: VmAny): value is VmRecord {
|
|
89
|
-
if (value == null || typeof value
|
|
89
|
+
if (value == null || typeof value != 'object') return false;
|
|
90
90
|
if (isVmWrapper(value)) return false;
|
|
91
91
|
if (isVmArray(value)) return false;
|
|
92
92
|
value satisfies VmRecord;
|
package/src/helpers/utils.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { VmConst, VmRecord } from '../vm/index.js';
|
|
2
|
+
|
|
1
3
|
export const { isArray } = Array;
|
|
2
4
|
export const {
|
|
3
5
|
isFinite,
|
|
@@ -26,3 +28,28 @@ export const hasOwnEnumerable = Function.call.bind(
|
|
|
26
28
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
27
29
|
Object.prototype.propertyIsEnumerable,
|
|
28
30
|
) as (o: object, v: PropertyKey) => boolean;
|
|
31
|
+
|
|
32
|
+
const SPECIAL_KEYS = new Set(getOwnPropertyNames(Object.prototype));
|
|
33
|
+
/**
|
|
34
|
+
* Set property on an vm record.
|
|
35
|
+
*/
|
|
36
|
+
export const setRecord = (obj: Record<string, VmConst | undefined>, key: string, value: VmConst | undefined): void => {
|
|
37
|
+
if (!SPECIAL_KEYS.has(key)) {
|
|
38
|
+
obj[key] = value ?? null;
|
|
39
|
+
} else {
|
|
40
|
+
Object.defineProperty(obj, key, {
|
|
41
|
+
value: value ?? null,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
enumerable: true,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get property from an vm record.
|
|
51
|
+
*/
|
|
52
|
+
export const getRecord = (obj: VmRecord, key: string): VmConst | undefined => {
|
|
53
|
+
if (!hasOwnEnumerable(obj, key)) return undefined;
|
|
54
|
+
return obj[key] ?? null;
|
|
55
|
+
};
|
|
@@ -33,7 +33,7 @@ function serializeValue(
|
|
|
33
33
|
format: SerializeFormat,
|
|
34
34
|
): string | null | PromiseLike<string> {
|
|
35
35
|
const { serializer } = options;
|
|
36
|
-
if (serializer
|
|
36
|
+
if (serializer === defaultSerializer || serializer === null) {
|
|
37
37
|
return defaultSerializer(arg, format);
|
|
38
38
|
}
|
|
39
39
|
try {
|
|
@@ -113,11 +113,7 @@ const printParser: PrintOptions['parser'] = function (args) {
|
|
|
113
113
|
templates.push(i < values.length - 1 ? ' ' : '');
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
return {
|
|
117
|
-
templates,
|
|
118
|
-
values,
|
|
119
|
-
formats,
|
|
120
|
-
};
|
|
116
|
+
return { templates, values, formats };
|
|
121
117
|
};
|
|
122
118
|
|
|
123
119
|
/** 默认格式化函数 */
|
|
@@ -234,9 +230,9 @@ if (typeof location != 'undefined') {
|
|
|
234
230
|
panic.prefix = [badge, `${common} background: #d23d3d; color: #fff;`, reset];
|
|
235
231
|
} else {
|
|
236
232
|
if (supportsColor.stdout) {
|
|
237
|
-
debug_print.prefix = ['\
|
|
233
|
+
debug_print.prefix = ['\u{1B}[44;37m MiraScript \u{1B}[0m'];
|
|
238
234
|
}
|
|
239
235
|
if (supportsColor.stderr) {
|
|
240
|
-
panic.prefix = ['\
|
|
236
|
+
panic.prefix = ['\u{1B}[41;37m MiraScript \u{1B}[0m'];
|
|
241
237
|
}
|
|
242
238
|
}
|
|
@@ -1,19 +1,31 @@
|
|
|
1
|
-
import { isVmExtern, isVmModule } from '../../types/index.js';
|
|
1
|
+
import { isVmExtern, isVmModule, type VmValue } from '../../types/index.js';
|
|
2
2
|
import { expectString, required, rethrowError, VmLib } from '../helpers.js';
|
|
3
3
|
const { parse, stringify } = JSON;
|
|
4
4
|
|
|
5
5
|
export const to_json = VmLib(
|
|
6
6
|
(data) => {
|
|
7
7
|
required('data', data, null);
|
|
8
|
-
if (isVmExtern(data) || isVmModule(data)) {
|
|
9
|
-
try {
|
|
10
|
-
return stringify(data.value) ?? null;
|
|
11
|
-
} catch (ex) {
|
|
12
|
-
rethrowError('Failed to convert extern to JSON', ex, '{}');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
8
|
if (typeof data == 'function') return null;
|
|
16
|
-
return stringify(data)
|
|
9
|
+
return stringify(data, (key, value: VmValue) => {
|
|
10
|
+
if (typeof value == 'function') {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (isVmModule(value)) {
|
|
14
|
+
return value.value as JSONValue;
|
|
15
|
+
}
|
|
16
|
+
if (isVmExtern(value)) {
|
|
17
|
+
const extern = value.value;
|
|
18
|
+
if ('toJSON' in extern && typeof extern.toJSON == 'function') {
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
20
|
+
return extern.toJSON() as JSONValue;
|
|
21
|
+
}
|
|
22
|
+
if (typeof extern == 'function') {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return extern as JSONValue;
|
|
26
|
+
}
|
|
27
|
+
return value as JSONValue;
|
|
28
|
+
});
|
|
17
29
|
},
|
|
18
30
|
{
|
|
19
31
|
summary: '将数据转换为 JSON 字符串',
|
|
@@ -81,22 +81,16 @@ function sinpi(x: number): number {
|
|
|
81
81
|
const N = 12;
|
|
82
82
|
|
|
83
83
|
// static const double g = 6.024680040776729583740234375;
|
|
84
|
-
const GMHALF = 5.
|
|
84
|
+
const GMHALF = 5.524680040776729583740234375 as const;
|
|
85
85
|
|
|
86
86
|
const SNUM = [
|
|
87
|
-
23_531_376_880.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
31_426_415.585_400_194_380_614_231_628_318_205_362_874_684_987_64,
|
|
95
|
-
2_876_370.628_935_372_441_225_409_051_620_849_613_599_114_537_876_8,
|
|
96
|
-
186_056.265_395_223_495_040_294_989_716_045_699_282_207_842_363_28,
|
|
97
|
-
8071.672_002_365_816_210_638_002_902_272_250_613_821_851_632_502_4,
|
|
98
|
-
210.824_277_751_579_345_872_509_733_920_713_362_711_669_695_802_91,
|
|
99
|
-
2.506_628_274_631_000_270_164_908_177_133_837_338_626_431_079_340_8,
|
|
87
|
+
23_531_376_880.41075968857200767445163675473484680494, 42_919_803_642.649098768957899047001988850926355848959,
|
|
88
|
+
35_711_959_237.355668049440185451547166705960488635843, 17_921_034_426.03720969991975575445893111267140326539,
|
|
89
|
+
6_039_542_586.3520280050642916443072979210699388420708, 1_439_720_407.3117216736632230727949123939715485786772,
|
|
90
|
+
248_874_557.86205415651146038641322942321632125127801, 31_426_415.58540019438061423162831820536287468498764,
|
|
91
|
+
2_876_370.6289353724412254090516208496135991145378768, 186_056.26539522349504029498971604569928220784236328,
|
|
92
|
+
8071.6720023658162106380029022722506138218516325024, 210.82427775157934587250973392071336271166969580291,
|
|
93
|
+
2.5066282746310002701649081771338373386264310793408,
|
|
100
94
|
] as const;
|
|
101
95
|
|
|
102
96
|
const SDEN = [
|
|
@@ -56,8 +56,13 @@ export const entries = VmLib(
|
|
|
56
56
|
arr.push({ 0: i, 1: data[i] ?? null });
|
|
57
57
|
}
|
|
58
58
|
return arr;
|
|
59
|
+
} else {
|
|
60
|
+
const arr: Array<{ 0: string; 1: VmConst }> = [];
|
|
61
|
+
for (const [key, value] of _entries(data)) {
|
|
62
|
+
arr.push({ 0: key, 1: value ?? null });
|
|
63
|
+
}
|
|
64
|
+
return arr;
|
|
59
65
|
}
|
|
60
|
-
return _entries(data).map(([key, value]) => ({ 0: key, 1: value ?? null }));
|
|
61
66
|
},
|
|
62
67
|
{
|
|
63
68
|
summary: '返回数组或记录的键值对列表',
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { $Call } from '../../../operations/index.js';
|
|
2
|
+
import type { VmValue } from '../../../types/index.js';
|
|
3
|
+
import { VmLib, expectCallable, expectConst, iterate, required } from '../../helpers.js';
|
|
4
|
+
|
|
5
|
+
export const fold = VmLib(
|
|
6
|
+
(data, initial, f) => {
|
|
7
|
+
required('initial', initial, null);
|
|
8
|
+
expectConst('data', data, null);
|
|
9
|
+
expectCallable('f', f, data);
|
|
10
|
+
|
|
11
|
+
let acc: VmValue = initial;
|
|
12
|
+
iterate(data, (value, index, data) => {
|
|
13
|
+
acc = $Call(f, [acc, value, index, data]);
|
|
14
|
+
});
|
|
15
|
+
return acc;
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
summary: '对数组或记录中的每个元素应用函数,并返回累积结果',
|
|
19
|
+
params: {
|
|
20
|
+
data: { type: 'array | record', description: '要折叠的数组或记录' },
|
|
21
|
+
initial: { type: 'any', description: '初始累积值' },
|
|
22
|
+
f: {
|
|
23
|
+
type: 'fn(acc: type(initial), value: any, key: number | string, input: type(data)) -> type(initial)',
|
|
24
|
+
description: '应用于每个元素的函数',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
returns: { type: 'type(initial)' },
|
|
28
|
+
examples: ['fold([1, 2, 3], 0, fn (acc, x) { acc + x }) // 6'],
|
|
29
|
+
},
|
|
30
|
+
);
|