@mirascript/mirascript 0.1.63 → 0.1.65
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/README.md +7 -8
- package/dist/{chunk-5BBTXV5A.js → chunk-MRA5WJ72.js} +386 -402
- package/dist/chunk-MRA5WJ72.js.map +6 -0
- package/dist/{chunk-HZYARHEQ.js → chunk-X4FUFXO6.js} +17 -1
- package/dist/chunk-X4FUFXO6.js.map +6 -0
- package/dist/compiler/worker.js +1 -1
- package/dist/helpers/constants.d.ts +1 -0
- package/dist/helpers/constants.d.ts.map +1 -1
- package/dist/helpers/utils.d.ts +2 -0
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/subtle.js +2 -2
- package/dist/vm/lib/global/bit.d.ts.map +1 -1
- package/dist/vm/lib/global/debug.d.ts.map +1 -1
- package/dist/vm/lib/global/json.d.ts.map +1 -1
- package/dist/vm/lib/global/math/arr.d.ts.map +1 -1
- package/dist/vm/lib/global/math/const.d.ts.map +1 -1
- package/dist/vm/lib/global/math/gamma.d.ts.map +1 -1
- package/dist/vm/lib/global/math/index.d.ts.map +1 -1
- package/dist/vm/lib/global/math/round.d.ts.map +1 -1
- package/dist/vm/lib/global/math/unary.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/all-any.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/entries.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/find.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/flatten.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/len.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/map-filter.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/new.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/repeat.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/reverse.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/sort.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/unique.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/with.d.ts.map +1 -1
- package/dist/vm/lib/global/sequence/zip.d.ts.map +1 -1
- package/dist/vm/lib/global/string/case.d.ts.map +1 -1
- package/dist/vm/lib/global/string/index.d.ts.map +1 -1
- package/dist/vm/lib/global/string/search.d.ts.map +1 -1
- package/dist/vm/lib/global/string/trim.d.ts.map +1 -1
- package/dist/vm/lib/global/time.d.ts.map +1 -1
- package/dist/vm/lib/global/to-primitive.d.ts.map +1 -1
- package/dist/vm/lib/helpers.d.ts +1 -1
- package/dist/vm/lib/helpers.d.ts.map +1 -1
- package/dist/vm/lib/mod/matrix.d.ts.map +1 -1
- package/dist/vm/types/context.d.ts.map +1 -1
- package/dist/vm/types/function.d.ts +8 -7
- package/dist/vm/types/function.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/helpers/constants.ts +2 -0
- package/src/helpers/utils.ts +7 -0
- package/src/vm/lib/global/bit.ts +23 -21
- package/src/vm/lib/global/debug.ts +6 -6
- package/src/vm/lib/global/json.ts +7 -6
- package/src/vm/lib/global/math/arr.ts +10 -15
- package/src/vm/lib/global/math/const.ts +0 -10
- package/src/vm/lib/global/math/gamma.ts +4 -6
- package/src/vm/lib/global/math/index.ts +11 -8
- package/src/vm/lib/global/math/round.ts +20 -12
- package/src/vm/lib/global/math/unary.ts +44 -66
- package/src/vm/lib/global/sequence/all-any.ts +14 -10
- package/src/vm/lib/global/sequence/entries.ts +8 -9
- package/src/vm/lib/global/sequence/find.ts +6 -7
- package/src/vm/lib/global/sequence/flatten.ts +5 -3
- package/src/vm/lib/global/sequence/len.ts +2 -3
- package/src/vm/lib/global/sequence/map-filter.ts +18 -21
- package/src/vm/lib/global/sequence/new.ts +13 -6
- package/src/vm/lib/global/sequence/repeat.ts +3 -7
- package/src/vm/lib/global/sequence/reverse.ts +2 -3
- package/src/vm/lib/global/sequence/sort.ts +16 -16
- package/src/vm/lib/global/sequence/unique.ts +16 -16
- package/src/vm/lib/global/sequence/with.ts +6 -7
- package/src/vm/lib/global/sequence/zip.ts +2 -3
- package/src/vm/lib/global/string/case.ts +4 -6
- package/src/vm/lib/global/string/index.ts +18 -12
- package/src/vm/lib/global/string/search.ts +15 -9
- package/src/vm/lib/global/string/trim.ts +6 -9
- package/src/vm/lib/global/time.ts +10 -13
- package/src/vm/lib/global/to-primitive.ts +15 -15
- package/src/vm/lib/helpers.ts +1 -6
- package/src/vm/lib/mod/matrix.ts +48 -39
- package/src/vm/operations/compound.ts +2 -2
- package/src/vm/types/context.ts +17 -20
- package/src/vm/types/function.ts +9 -10
- package/dist/chunk-5BBTXV5A.js.map +0 -6
- package/dist/chunk-HZYARHEQ.js.map +0 -6
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
VmError,
|
|
10
10
|
__export,
|
|
11
11
|
apply,
|
|
12
|
+
constants_exports,
|
|
12
13
|
create,
|
|
13
14
|
defineProperty,
|
|
14
15
|
display,
|
|
@@ -45,10 +46,11 @@ import {
|
|
|
45
46
|
kVmScript,
|
|
46
47
|
kVmWrapper,
|
|
47
48
|
keys,
|
|
49
|
+
keysLength,
|
|
48
50
|
parseDiagnostics,
|
|
49
51
|
toString,
|
|
50
52
|
values
|
|
51
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-X4FUFXO6.js";
|
|
52
54
|
|
|
53
55
|
// src/compiler/load-module.ts
|
|
54
56
|
import { loadModule } from "@mirascript/bindings";
|
|
@@ -493,9 +495,7 @@ function VmFunction(fn, option = {}) {
|
|
|
493
495
|
isLib: opt.isLib ?? false,
|
|
494
496
|
summary: opt.summary || void 0,
|
|
495
497
|
params: opt.params,
|
|
496
|
-
|
|
497
|
-
returns: opt.returns || void 0,
|
|
498
|
-
returnsType: opt.returnsType || void 0,
|
|
498
|
+
returns: opt.returns ?? void 0,
|
|
499
499
|
examples: opt.examples?.length ? opt.examples : void 0,
|
|
500
500
|
deprecated: opt.deprecated ?? void 0
|
|
501
501
|
};
|
|
@@ -562,21 +562,19 @@ var ValueVmContext = class {
|
|
|
562
562
|
}
|
|
563
563
|
/** @inheritdoc */
|
|
564
564
|
get(key) {
|
|
565
|
-
if (hasOwn(this.env, key))
|
|
566
|
-
|
|
567
|
-
const val = VM_SHARED_CONTEXT[key];
|
|
568
|
-
if (val !== void 0) return val;
|
|
569
|
-
return globalVarNotFound(key);
|
|
565
|
+
if (hasOwn(this.env, key)) {
|
|
566
|
+
return this.env[key] ?? null;
|
|
570
567
|
}
|
|
568
|
+
return DefaultVmContext.get(key);
|
|
571
569
|
}
|
|
572
570
|
/** @inheritdoc */
|
|
573
571
|
has(key) {
|
|
574
|
-
return hasOwn(this.env, key) || key
|
|
572
|
+
return hasOwn(this.env, key) || DefaultVmContext.has(key);
|
|
575
573
|
}
|
|
576
574
|
/** @inheritdoc */
|
|
577
575
|
describe(key) {
|
|
578
576
|
if (hasOwn(this.env, key)) return this.describer?.(key);
|
|
579
|
-
return
|
|
577
|
+
return DefaultVmContext.describe(key);
|
|
580
578
|
}
|
|
581
579
|
};
|
|
582
580
|
defineProperty(ValueVmContext.prototype, kVmContext, { value: true });
|
|
@@ -594,32 +592,34 @@ var Value2VmContext = class {
|
|
|
594
592
|
}
|
|
595
593
|
/** @inheritdoc */
|
|
596
594
|
get(key) {
|
|
597
|
-
if (this.env != null && hasOwn(this.env, key))
|
|
595
|
+
if (this.env != null && hasOwn(this.env, key)) {
|
|
596
|
+
return this.env[key] ?? null;
|
|
597
|
+
}
|
|
598
598
|
if (hasOwn(this.extern, key)) {
|
|
599
|
-
const
|
|
600
|
-
if (
|
|
601
|
-
if (typeof
|
|
602
|
-
return wrapToVmValue(
|
|
599
|
+
const val = this.extern[key];
|
|
600
|
+
if (val == null) return null;
|
|
601
|
+
if (typeof val != "object" && typeof val != "function") {
|
|
602
|
+
return wrapToVmValue(val, null, null);
|
|
603
603
|
}
|
|
604
|
-
let cached = this.externCache.get(
|
|
604
|
+
let cached = this.externCache.get(val);
|
|
605
605
|
if (cached == null) {
|
|
606
|
-
cached = wrapToVmValue(
|
|
607
|
-
this.externCache.set(
|
|
606
|
+
cached = wrapToVmValue(val, null, null);
|
|
607
|
+
this.externCache.set(val, cached);
|
|
608
608
|
}
|
|
609
609
|
return cached;
|
|
610
610
|
}
|
|
611
|
-
|
|
612
|
-
if (val !== void 0) return val;
|
|
613
|
-
return globalVarNotFound(key);
|
|
611
|
+
return DefaultVmContext.get(key);
|
|
614
612
|
}
|
|
615
613
|
/** @inheritdoc */
|
|
616
614
|
has(key) {
|
|
617
|
-
return this.env != null && hasOwn(this.env, key) || hasOwn(this.extern, key) || key
|
|
615
|
+
return this.env != null && hasOwn(this.env, key) || hasOwn(this.extern, key) || DefaultVmContext.has(key);
|
|
618
616
|
}
|
|
619
617
|
/** @inheritdoc */
|
|
620
618
|
describe(key) {
|
|
621
|
-
if (this.env != null && hasOwn(this.env, key) || hasOwn(this.extern, key))
|
|
622
|
-
|
|
619
|
+
if (this.env != null && hasOwn(this.env, key) || hasOwn(this.extern, key)) {
|
|
620
|
+
return this.describer?.(key);
|
|
621
|
+
}
|
|
622
|
+
return DefaultVmContext.describe(key);
|
|
623
623
|
}
|
|
624
624
|
};
|
|
625
625
|
defineProperty(Value2VmContext.prototype, kVmContext, { value: true });
|
|
@@ -639,18 +639,16 @@ var FactoryVmContext = class {
|
|
|
639
639
|
get(key) {
|
|
640
640
|
const value = this.getter(key);
|
|
641
641
|
if (value !== void 0) return value;
|
|
642
|
-
|
|
643
|
-
if (val !== void 0) return val;
|
|
644
|
-
return globalVarNotFound(key);
|
|
642
|
+
return DefaultVmContext.get(key);
|
|
645
643
|
}
|
|
646
644
|
/** @inheritdoc */
|
|
647
645
|
has(key) {
|
|
648
|
-
return this.getter(key) !== void 0 || key
|
|
646
|
+
return this.getter(key) !== void 0 || DefaultVmContext.has(key);
|
|
649
647
|
}
|
|
650
648
|
/** @inheritdoc */
|
|
651
649
|
describe(key) {
|
|
652
650
|
if (this.getter(key) !== void 0) return this.describer?.(key);
|
|
653
|
-
return
|
|
651
|
+
return DefaultVmContext.describe(key);
|
|
654
652
|
}
|
|
655
653
|
};
|
|
656
654
|
defineProperty(FactoryVmContext.prototype, kVmContext, { value: true });
|
|
@@ -1134,7 +1132,7 @@ var $In = (value, iterable) => {
|
|
|
1134
1132
|
var $Length = (value) => {
|
|
1135
1133
|
$AssertInit(value);
|
|
1136
1134
|
if (isVmArray(value)) return value.length;
|
|
1137
|
-
if (isVmRecord(value)) return
|
|
1135
|
+
if (isVmRecord(value)) return keysLength(value);
|
|
1138
1136
|
if (isVmWrapper(value)) return value.keys().length;
|
|
1139
1137
|
throw new VmError(`Value has no length: ${display(value)}`, 0);
|
|
1140
1138
|
};
|
|
@@ -1607,9 +1605,7 @@ function VmLib(value, option, properties) {
|
|
|
1607
1605
|
Object.defineProperties(ret, {
|
|
1608
1606
|
summary: { enumerable: true, value: option.summary },
|
|
1609
1607
|
params: { enumerable: true, value: option.params },
|
|
1610
|
-
paramsType: { enumerable: true, value: option.paramsType },
|
|
1611
1608
|
returns: { enumerable: true, value: option.returns },
|
|
1612
|
-
returnsType: { enumerable: true, value: option.returnsType },
|
|
1613
1609
|
examples: { enumerable: true, value: option.examples },
|
|
1614
1610
|
deprecated: { enumerable: true, value: option.deprecated ?? void 0 }
|
|
1615
1611
|
});
|
|
@@ -1626,23 +1622,20 @@ function build(f) {
|
|
|
1626
1622
|
}
|
|
1627
1623
|
var max = VmLib(build(Math.max), {
|
|
1628
1624
|
summary: "返回一组数中的最大值",
|
|
1629
|
-
params: { "..values": "要比较的数值" },
|
|
1630
|
-
|
|
1631
|
-
returnsType: "number",
|
|
1625
|
+
params: { "..values": { type: "number", description: "要比较的数值" } },
|
|
1626
|
+
returns: { type: "number" },
|
|
1632
1627
|
examples: ["max(3, 7, 2) // 7"]
|
|
1633
1628
|
});
|
|
1634
1629
|
var min2 = VmLib(build(Math.min), {
|
|
1635
1630
|
summary: "返回一组数中的最小值",
|
|
1636
|
-
params: { "..values": "要比较的数值" },
|
|
1637
|
-
|
|
1638
|
-
returnsType: "number",
|
|
1631
|
+
params: { "..values": { type: "number", description: "要比较的数值" } },
|
|
1632
|
+
returns: { type: "number" },
|
|
1639
1633
|
examples: ["min(3, 7, 2) // 2"]
|
|
1640
1634
|
});
|
|
1641
1635
|
var hypot = VmLib(build(Math.hypot), {
|
|
1642
1636
|
summary: "返回所有参数平方和的平方根",
|
|
1643
|
-
params: { "..values": "要计算的数值" },
|
|
1644
|
-
|
|
1645
|
-
returnsType: "number",
|
|
1637
|
+
params: { "..values": { type: "number", description: "要计算的数值" } },
|
|
1638
|
+
returns: { type: "number" },
|
|
1646
1639
|
examples: ["hypot(3, 4) // 5"]
|
|
1647
1640
|
});
|
|
1648
1641
|
var sum = VmLib(
|
|
@@ -1652,9 +1645,8 @@ var sum = VmLib(
|
|
|
1652
1645
|
},
|
|
1653
1646
|
{
|
|
1654
1647
|
summary: "返回一组数的总和",
|
|
1655
|
-
params: { "..values": "要计算的数值" },
|
|
1656
|
-
|
|
1657
|
-
returnsType: "number",
|
|
1648
|
+
params: { "..values": { type: "number", description: "要计算的数值" } },
|
|
1649
|
+
returns: { type: "number" },
|
|
1658
1650
|
examples: ["sum(1, 2, 3, 4) // 10"]
|
|
1659
1651
|
}
|
|
1660
1652
|
);
|
|
@@ -1665,9 +1657,8 @@ var product = VmLib(
|
|
|
1665
1657
|
},
|
|
1666
1658
|
{
|
|
1667
1659
|
summary: "返回一组数的乘积",
|
|
1668
|
-
params: { "..values": "要计算的数值" },
|
|
1669
|
-
|
|
1670
|
-
returnsType: "number",
|
|
1660
|
+
params: { "..values": { type: "number", description: "要计算的数值" } },
|
|
1661
|
+
returns: { type: "number" },
|
|
1671
1662
|
examples: ["product(2, 3, 4) // 24"]
|
|
1672
1663
|
}
|
|
1673
1664
|
);
|
|
@@ -1675,16 +1666,13 @@ var product = VmLib(
|
|
|
1675
1666
|
// src/vm/lib/global/math/const.ts
|
|
1676
1667
|
import { DiagnosticCode as DiagnosticCode2 } from "@mirascript/constants";
|
|
1677
1668
|
var PI = VmLib(Math.PI, {
|
|
1678
|
-
summary: "圆周率"
|
|
1679
|
-
returnsType: "number"
|
|
1669
|
+
summary: "圆周率"
|
|
1680
1670
|
});
|
|
1681
1671
|
var E = VmLib(Math.E, {
|
|
1682
|
-
summary: "自然对数的底数"
|
|
1683
|
-
returnsType: "number"
|
|
1672
|
+
summary: "自然对数的底数"
|
|
1684
1673
|
});
|
|
1685
1674
|
var pi = VmLib(Math.PI, {
|
|
1686
1675
|
summary: "圆周率",
|
|
1687
|
-
returnsType: "number",
|
|
1688
1676
|
deprecated: {
|
|
1689
1677
|
use: "PI",
|
|
1690
1678
|
message: DiagnosticCode2.PreferUppercaseConstant
|
|
@@ -1692,35 +1680,28 @@ var pi = VmLib(Math.PI, {
|
|
|
1692
1680
|
});
|
|
1693
1681
|
var e = VmLib(Math.E, {
|
|
1694
1682
|
summary: "自然对数的底数",
|
|
1695
|
-
returnsType: "number",
|
|
1696
1683
|
deprecated: {
|
|
1697
1684
|
use: "E",
|
|
1698
1685
|
message: DiagnosticCode2.PreferUppercaseConstant
|
|
1699
1686
|
}
|
|
1700
1687
|
});
|
|
1701
1688
|
var SQRT1_2 = VmLib(Math.SQRT1_2, {
|
|
1702
|
-
summary: "½ 的平方根"
|
|
1703
|
-
returnsType: "number"
|
|
1689
|
+
summary: "½ 的平方根"
|
|
1704
1690
|
});
|
|
1705
1691
|
var SQRT2 = VmLib(Math.SQRT2, {
|
|
1706
|
-
summary: "2 的平方根"
|
|
1707
|
-
returnsType: "number"
|
|
1692
|
+
summary: "2 的平方根"
|
|
1708
1693
|
});
|
|
1709
1694
|
var LN2 = VmLib(Math.LN2, {
|
|
1710
|
-
summary: "2 的自然对数"
|
|
1711
|
-
returnsType: "number"
|
|
1695
|
+
summary: "2 的自然对数"
|
|
1712
1696
|
});
|
|
1713
1697
|
var LN10 = VmLib(Math.LN10, {
|
|
1714
|
-
summary: "10 的自然对数"
|
|
1715
|
-
returnsType: "number"
|
|
1698
|
+
summary: "10 的自然对数"
|
|
1716
1699
|
});
|
|
1717
1700
|
var LOG2E = VmLib(Math.LOG2E, {
|
|
1718
|
-
summary: "e 以 2 为底的对数"
|
|
1719
|
-
returnsType: "number"
|
|
1701
|
+
summary: "e 以 2 为底的对数"
|
|
1720
1702
|
});
|
|
1721
1703
|
var LOG10E = VmLib(Math.LOG10E, {
|
|
1722
|
-
summary: "e 以 10 为底的对数"
|
|
1723
|
-
returnsType: "number"
|
|
1704
|
+
summary: "e 以 10 为底的对数"
|
|
1724
1705
|
});
|
|
1725
1706
|
|
|
1726
1707
|
// src/vm/lib/global/math/unary.ts
|
|
@@ -1731,135 +1712,113 @@ function build2(f) {
|
|
|
1731
1712
|
}
|
|
1732
1713
|
var sign = VmLib(build2(Math.sign), {
|
|
1733
1714
|
summary: "返回数值的符号(正数为 1,负数为 -1,零为 0)",
|
|
1734
|
-
params: { x: "要判断符号的数" },
|
|
1735
|
-
|
|
1736
|
-
returnsType: "number"
|
|
1715
|
+
params: { x: { type: "number", description: "要判断符号的数" } },
|
|
1716
|
+
returns: { type: "number" }
|
|
1737
1717
|
});
|
|
1738
1718
|
var abs2 = VmLib(build2(Math.abs), {
|
|
1739
1719
|
summary: "返回数值的绝对值",
|
|
1740
|
-
params: { x: "要取绝对值的数" },
|
|
1741
|
-
|
|
1742
|
-
returnsType: "number"
|
|
1720
|
+
params: { x: { type: "number", description: "要取绝对值的数" } },
|
|
1721
|
+
returns: { type: "number" }
|
|
1743
1722
|
});
|
|
1744
1723
|
var acos = VmLib(build2(Math.acos), {
|
|
1745
1724
|
summary: "返回数值的反余弦值(弧度)",
|
|
1746
|
-
params: { x: "要计算反余弦的数" },
|
|
1747
|
-
|
|
1748
|
-
returnsType: "number"
|
|
1725
|
+
params: { x: { type: "number", description: "要计算反余弦的数" } },
|
|
1726
|
+
returns: { type: "number" }
|
|
1749
1727
|
});
|
|
1750
1728
|
var acosh = VmLib(build2(Math.acosh), {
|
|
1751
1729
|
summary: "返回数值的反双曲余弦值",
|
|
1752
|
-
params: { x: "要计算反双曲余弦的数" },
|
|
1753
|
-
|
|
1754
|
-
returnsType: "number"
|
|
1730
|
+
params: { x: { type: "number", description: "要计算反双曲余弦的数" } },
|
|
1731
|
+
returns: { type: "number" }
|
|
1755
1732
|
});
|
|
1756
1733
|
var asin = VmLib(build2(Math.asin), {
|
|
1757
1734
|
summary: "返回数值的反正弦值(弧度)",
|
|
1758
|
-
params: { x: "要计算反正弦的数" },
|
|
1759
|
-
|
|
1760
|
-
returnsType: "number"
|
|
1735
|
+
params: { x: { type: "number", description: "要计算反正弦的数" } },
|
|
1736
|
+
returns: { type: "number" }
|
|
1761
1737
|
});
|
|
1762
1738
|
var asinh = VmLib(build2(Math.asinh), {
|
|
1763
1739
|
summary: "返回数值的反双曲正弦值",
|
|
1764
|
-
params: { x: "要计算反双曲正弦的数" },
|
|
1765
|
-
|
|
1766
|
-
returnsType: "number"
|
|
1740
|
+
params: { x: { type: "number", description: "要计算反双曲正弦的数" } },
|
|
1741
|
+
returns: { type: "number" }
|
|
1767
1742
|
});
|
|
1768
1743
|
var atan = VmLib(build2(Math.atan), {
|
|
1769
1744
|
summary: "返回数值的反正切值(弧度)",
|
|
1770
|
-
params: { x: "要计算反正切的数" },
|
|
1771
|
-
|
|
1772
|
-
returnsType: "number"
|
|
1745
|
+
params: { x: { type: "number", description: "要计算反正切的数" } },
|
|
1746
|
+
returns: { type: "number" }
|
|
1773
1747
|
});
|
|
1774
1748
|
var atanh = VmLib(build2(Math.atanh), {
|
|
1775
1749
|
summary: "返回数值的反双曲正切值",
|
|
1776
|
-
params: { x: "要计算反双曲正切的数" },
|
|
1777
|
-
|
|
1778
|
-
returnsType: "number"
|
|
1750
|
+
params: { x: { type: "number", description: "要计算反双曲正切的数" } },
|
|
1751
|
+
returns: { type: "number" }
|
|
1779
1752
|
});
|
|
1780
1753
|
var cos = VmLib(build2(Math.cos), {
|
|
1781
1754
|
summary: "返回数值的余弦值",
|
|
1782
|
-
params: { x: "要计算余弦的数(弧度)" },
|
|
1783
|
-
|
|
1784
|
-
returnsType: "number"
|
|
1755
|
+
params: { x: { type: "number", description: "要计算余弦的数(弧度)" } },
|
|
1756
|
+
returns: { type: "number" }
|
|
1785
1757
|
});
|
|
1786
1758
|
var cosh = VmLib(build2(Math.cosh), {
|
|
1787
1759
|
summary: "返回数值的双曲余弦值",
|
|
1788
|
-
params: { x: "要计算双曲余弦的数" },
|
|
1789
|
-
|
|
1790
|
-
returnsType: "number"
|
|
1760
|
+
params: { x: { type: "number", description: "要计算双曲余弦的数" } },
|
|
1761
|
+
returns: { type: "number" }
|
|
1791
1762
|
});
|
|
1792
1763
|
var sin = VmLib(build2(Math.sin), {
|
|
1793
1764
|
summary: "返回数值的正弦值",
|
|
1794
|
-
params: { x: "要计算正弦的数(弧度)" },
|
|
1795
|
-
|
|
1796
|
-
returnsType: "number"
|
|
1765
|
+
params: { x: { type: "number", description: "要计算正弦的数(弧度)" } },
|
|
1766
|
+
returns: { type: "number" }
|
|
1797
1767
|
});
|
|
1798
1768
|
var sinh = VmLib(build2(Math.sinh), {
|
|
1799
1769
|
summary: "返回数值的双曲正弦值",
|
|
1800
|
-
params: { x: "要计算双曲正弦的数" },
|
|
1801
|
-
|
|
1802
|
-
returnsType: "number"
|
|
1770
|
+
params: { x: { type: "number", description: "要计算双曲正弦的数" } },
|
|
1771
|
+
returns: { type: "number" }
|
|
1803
1772
|
});
|
|
1804
1773
|
var tan = VmLib(build2(Math.tan), {
|
|
1805
1774
|
summary: "返回数值的正切值",
|
|
1806
|
-
params: { x: "要计算正切的数(弧度)" },
|
|
1807
|
-
|
|
1808
|
-
returnsType: "number"
|
|
1775
|
+
params: { x: { type: "number", description: "要计算正切的数(弧度)" } },
|
|
1776
|
+
returns: { type: "number" }
|
|
1809
1777
|
});
|
|
1810
1778
|
var tanh = VmLib(build2(Math.tanh), {
|
|
1811
1779
|
summary: "返回数值的双曲正切值",
|
|
1812
|
-
params: { x: "要计算双曲正切的数" },
|
|
1813
|
-
|
|
1814
|
-
returnsType: "number"
|
|
1780
|
+
params: { x: { type: "number", description: "要计算双曲正切的数" } },
|
|
1781
|
+
returns: { type: "number" }
|
|
1815
1782
|
});
|
|
1816
1783
|
var exp = VmLib(build2(Math.exp), {
|
|
1817
1784
|
summary: "返回 e 的指定次幂",
|
|
1818
|
-
params: { x: "指数" },
|
|
1819
|
-
|
|
1820
|
-
returnsType: "number"
|
|
1785
|
+
params: { x: { type: "number", description: "指数" } },
|
|
1786
|
+
returns: { type: "number" }
|
|
1821
1787
|
});
|
|
1822
1788
|
var expm1 = VmLib(build2(Math.expm1), {
|
|
1823
1789
|
summary: "返回 e 的 x 次幂减 1",
|
|
1824
|
-
params: { x: "指数" },
|
|
1825
|
-
|
|
1826
|
-
returnsType: "number"
|
|
1790
|
+
params: { x: { type: "number", description: "指数" } },
|
|
1791
|
+
returns: { type: "number" }
|
|
1827
1792
|
});
|
|
1828
1793
|
var log = VmLib(build2(Math.log), {
|
|
1829
1794
|
summary: "返回数值的自然对数(以 e 为底)",
|
|
1830
|
-
params: { x: "要取对数的数" },
|
|
1831
|
-
|
|
1832
|
-
returnsType: "number"
|
|
1795
|
+
params: { x: { type: "number", description: "要取对数的数" } },
|
|
1796
|
+
returns: { type: "number" }
|
|
1833
1797
|
});
|
|
1834
1798
|
var log10 = VmLib(build2(Math.log10), {
|
|
1835
1799
|
summary: "返回数值的以 10 为底的对数",
|
|
1836
|
-
params: { x: "要取对数的数" },
|
|
1837
|
-
|
|
1838
|
-
returnsType: "number"
|
|
1800
|
+
params: { x: { type: "number", description: "要取对数的数" } },
|
|
1801
|
+
returns: { type: "number" }
|
|
1839
1802
|
});
|
|
1840
1803
|
var log1p = VmLib(build2(Math.log1p), {
|
|
1841
1804
|
summary: "返回 1 加上数值的自然对数",
|
|
1842
|
-
params: { x: "要取对数的数" },
|
|
1843
|
-
|
|
1844
|
-
returnsType: "number"
|
|
1805
|
+
params: { x: { type: "number", description: "要取对数的数" } },
|
|
1806
|
+
returns: { type: "number" }
|
|
1845
1807
|
});
|
|
1846
1808
|
var log2 = VmLib(build2(Math.log2), {
|
|
1847
1809
|
summary: "返回数值的以 2 为底的对数",
|
|
1848
|
-
params: { x: "要取对数的数" },
|
|
1849
|
-
|
|
1850
|
-
returnsType: "number"
|
|
1810
|
+
params: { x: { type: "number", description: "要取对数的数" } },
|
|
1811
|
+
returns: { type: "number" }
|
|
1851
1812
|
});
|
|
1852
1813
|
var sqrt = VmLib(build2(Math.sqrt), {
|
|
1853
1814
|
summary: "返回数值的平方根",
|
|
1854
|
-
params: { x: "要开平方的数" },
|
|
1855
|
-
|
|
1856
|
-
returnsType: "number"
|
|
1815
|
+
params: { x: { type: "number", description: "要开平方的数" } },
|
|
1816
|
+
returns: { type: "number" }
|
|
1857
1817
|
});
|
|
1858
1818
|
var cbrt = VmLib(build2(Math.cbrt), {
|
|
1859
1819
|
summary: "返回数值的立方根",
|
|
1860
|
-
params: { x: "要计算立方根的数" },
|
|
1861
|
-
|
|
1862
|
-
returnsType: "number"
|
|
1820
|
+
params: { x: { type: "number", description: "要计算立方根的数" } },
|
|
1821
|
+
returns: { type: "number" }
|
|
1863
1822
|
});
|
|
1864
1823
|
|
|
1865
1824
|
// src/vm/lib/global/math/round.ts
|
|
@@ -1874,21 +1833,27 @@ function build3(f) {
|
|
|
1874
1833
|
}
|
|
1875
1834
|
var trunc2 = VmLib(build3(Math.trunc), {
|
|
1876
1835
|
summary: "向零方向舍入数值",
|
|
1877
|
-
params: {
|
|
1878
|
-
|
|
1879
|
-
|
|
1836
|
+
params: {
|
|
1837
|
+
x: { type: "number", description: "要舍入的数" },
|
|
1838
|
+
n: { type: "number | nil", description: "小数位数,默认为 0" }
|
|
1839
|
+
},
|
|
1840
|
+
returns: { type: "number" }
|
|
1880
1841
|
});
|
|
1881
1842
|
var floor = VmLib(build3(Math.floor), {
|
|
1882
1843
|
summary: "向下舍入数值",
|
|
1883
|
-
params: {
|
|
1884
|
-
|
|
1885
|
-
|
|
1844
|
+
params: {
|
|
1845
|
+
x: { type: "number", description: "要舍入的数" },
|
|
1846
|
+
n: { type: "number | nil", description: "小数位数,默认为 0" }
|
|
1847
|
+
},
|
|
1848
|
+
returns: { type: "number" }
|
|
1886
1849
|
});
|
|
1887
1850
|
var ceil2 = VmLib(build3(Math.ceil), {
|
|
1888
1851
|
summary: "向上舍入数值",
|
|
1889
|
-
params: {
|
|
1890
|
-
|
|
1891
|
-
|
|
1852
|
+
params: {
|
|
1853
|
+
x: { type: "number", description: "要舍入的数" },
|
|
1854
|
+
n: { type: "number | nil", description: "小数位数,默认为 0" }
|
|
1855
|
+
},
|
|
1856
|
+
returns: { type: "number" }
|
|
1892
1857
|
});
|
|
1893
1858
|
var _round = Math.round;
|
|
1894
1859
|
var _abs = Math.abs;
|
|
@@ -1902,9 +1867,11 @@ var round = VmLib(
|
|
|
1902
1867
|
}),
|
|
1903
1868
|
{
|
|
1904
1869
|
summary: "四舍五入数值",
|
|
1905
|
-
params: {
|
|
1906
|
-
|
|
1907
|
-
|
|
1870
|
+
params: {
|
|
1871
|
+
x: { type: "number", description: "要舍入的数" },
|
|
1872
|
+
n: { type: "number | nil", description: "小数位数,默认为 0" }
|
|
1873
|
+
},
|
|
1874
|
+
returns: { type: "number" }
|
|
1908
1875
|
}
|
|
1909
1876
|
);
|
|
1910
1877
|
|
|
@@ -2042,9 +2009,8 @@ var gamma = VmLib(
|
|
|
2042
2009
|
},
|
|
2043
2010
|
{
|
|
2044
2011
|
summary: "返回 Gamma 函数的值",
|
|
2045
|
-
params: { x: "要计算 Gamma 函数的数值" },
|
|
2046
|
-
|
|
2047
|
-
returnsType: "number",
|
|
2012
|
+
params: { x: { type: "number", description: "要计算 Gamma 函数的数值" } },
|
|
2013
|
+
returns: { type: "number" },
|
|
2048
2014
|
examples: ["gamma(5) // 24"]
|
|
2049
2015
|
}
|
|
2050
2016
|
);
|
|
@@ -2068,9 +2034,8 @@ var factorial = VmLib(
|
|
|
2068
2034
|
},
|
|
2069
2035
|
{
|
|
2070
2036
|
summary: "返回一个数的阶乘",
|
|
2071
|
-
params: { x: "要计算阶乘的数值" },
|
|
2072
|
-
|
|
2073
|
-
returnsType: "number",
|
|
2037
|
+
params: { x: { type: "number", description: "要计算阶乘的数值" } },
|
|
2038
|
+
returns: { type: "number" },
|
|
2074
2039
|
examples: ["factorial(5) // 120"]
|
|
2075
2040
|
}
|
|
2076
2041
|
);
|
|
@@ -2079,21 +2044,24 @@ var factorial = VmLib(
|
|
|
2079
2044
|
var { atan2: _atan2, pow: _pow, random: _random } = Math;
|
|
2080
2045
|
var atan2 = VmLib((x, y) => _atan2(expectNumber(0, x), expectNumber(1, y)), {
|
|
2081
2046
|
summary: "返回从原点到点 (x, y) 的角度(弧度)",
|
|
2082
|
-
params: {
|
|
2083
|
-
|
|
2084
|
-
|
|
2047
|
+
params: {
|
|
2048
|
+
x: { type: "number", description: "x 坐标" },
|
|
2049
|
+
y: { type: "number", description: "y 坐标" }
|
|
2050
|
+
},
|
|
2051
|
+
returns: { type: "number" }
|
|
2085
2052
|
});
|
|
2086
2053
|
var pow3 = VmLib((x, y) => _pow(expectNumber(0, x), expectNumber(1, y)), {
|
|
2087
2054
|
summary: "返回 x 的 y 次幂",
|
|
2088
|
-
params: {
|
|
2089
|
-
|
|
2090
|
-
|
|
2055
|
+
params: {
|
|
2056
|
+
x: { type: "number", description: "底数" },
|
|
2057
|
+
y: { type: "number", description: "指数" }
|
|
2058
|
+
},
|
|
2059
|
+
returns: { type: "number" }
|
|
2091
2060
|
});
|
|
2092
2061
|
var random = VmLib(() => _random(), {
|
|
2093
2062
|
summary: "返回 [0, 1) 之间的伪随机数",
|
|
2094
2063
|
params: {},
|
|
2095
|
-
|
|
2096
|
-
returnsType: "number"
|
|
2064
|
+
returns: { type: "number" }
|
|
2097
2065
|
});
|
|
2098
2066
|
|
|
2099
2067
|
// src/vm/lib/global/bit.ts
|
|
@@ -2103,9 +2071,11 @@ var b_and = VmLib(
|
|
|
2103
2071
|
},
|
|
2104
2072
|
{
|
|
2105
2073
|
summary: "返回两个数的按位与",
|
|
2106
|
-
params: {
|
|
2107
|
-
|
|
2108
|
-
|
|
2074
|
+
params: {
|
|
2075
|
+
x: { type: "number", description: "第一个操作数" },
|
|
2076
|
+
y: { type: "number", description: "第二个操作数" }
|
|
2077
|
+
},
|
|
2078
|
+
returns: { type: "number" },
|
|
2109
2079
|
examples: ["b_and(6, 3) // 2"]
|
|
2110
2080
|
}
|
|
2111
2081
|
);
|
|
@@ -2115,9 +2085,11 @@ var b_or = VmLib(
|
|
|
2115
2085
|
},
|
|
2116
2086
|
{
|
|
2117
2087
|
summary: "返回两个数的按位或",
|
|
2118
|
-
params: {
|
|
2119
|
-
|
|
2120
|
-
|
|
2088
|
+
params: {
|
|
2089
|
+
x: { type: "number", description: "第一个操作数" },
|
|
2090
|
+
y: { type: "number", description: "第二个操作数" }
|
|
2091
|
+
},
|
|
2092
|
+
returns: { type: "number" },
|
|
2121
2093
|
examples: ["b_or(5, 2) // 7"]
|
|
2122
2094
|
}
|
|
2123
2095
|
);
|
|
@@ -2127,9 +2099,8 @@ var b_not = VmLib(
|
|
|
2127
2099
|
},
|
|
2128
2100
|
{
|
|
2129
2101
|
summary: "返回一个数的按位取反",
|
|
2130
|
-
params: { x: "操作数" },
|
|
2131
|
-
|
|
2132
|
-
returnsType: "number",
|
|
2102
|
+
params: { x: { type: "number", description: "操作数" } },
|
|
2103
|
+
returns: { type: "number" },
|
|
2133
2104
|
examples: ["b_not(0) // -1"]
|
|
2134
2105
|
}
|
|
2135
2106
|
);
|
|
@@ -2139,9 +2110,11 @@ var b_xor = VmLib(
|
|
|
2139
2110
|
},
|
|
2140
2111
|
{
|
|
2141
2112
|
summary: "返回两个数的按位异或",
|
|
2142
|
-
params: {
|
|
2143
|
-
|
|
2144
|
-
|
|
2113
|
+
params: {
|
|
2114
|
+
x: { type: "number", description: "第一个操作数" },
|
|
2115
|
+
y: { type: "number", description: "第二个操作数" }
|
|
2116
|
+
},
|
|
2117
|
+
returns: { type: "number" },
|
|
2145
2118
|
examples: ["b_xor(5, 3) // 6"]
|
|
2146
2119
|
}
|
|
2147
2120
|
);
|
|
@@ -2151,9 +2124,8 @@ var shl = VmLib(
|
|
|
2151
2124
|
},
|
|
2152
2125
|
{
|
|
2153
2126
|
summary: "返回第一个操作数左移指定的位数",
|
|
2154
|
-
params: { x: "第一个操作数", y: "位数" },
|
|
2155
|
-
|
|
2156
|
-
returnsType: "number",
|
|
2127
|
+
params: { x: { type: "number", description: "第一个操作数" }, y: { type: "number", description: "位数" } },
|
|
2128
|
+
returns: { type: "number" },
|
|
2157
2129
|
examples: ["shl(3, 2) // 12"]
|
|
2158
2130
|
}
|
|
2159
2131
|
);
|
|
@@ -2163,9 +2135,8 @@ var sar = VmLib(
|
|
|
2163
2135
|
},
|
|
2164
2136
|
{
|
|
2165
2137
|
summary: "返回第一个操作数右移指定的位数",
|
|
2166
|
-
params: { x: "第一个操作数", y: "位数" },
|
|
2167
|
-
|
|
2168
|
-
returnsType: "number",
|
|
2138
|
+
params: { x: { type: "number", description: "第一个操作数" }, y: { type: "number", description: "位数" } },
|
|
2139
|
+
returns: { type: "number" },
|
|
2169
2140
|
examples: ["sar(-8, 1) // -4"]
|
|
2170
2141
|
}
|
|
2171
2142
|
);
|
|
@@ -2175,9 +2146,8 @@ var shr = VmLib(
|
|
|
2175
2146
|
},
|
|
2176
2147
|
{
|
|
2177
2148
|
summary: "返回第一个操作数无符号右移指定的位数",
|
|
2178
|
-
params: { x: "第一个操作数", y: "位数" },
|
|
2179
|
-
|
|
2180
|
-
returnsType: "number",
|
|
2149
|
+
params: { x: { type: "number", description: "第一个操作数" }, y: { type: "number", description: "位数" } },
|
|
2150
|
+
returns: { type: "number" },
|
|
2181
2151
|
examples: ["shr(8, 1) // 4"]
|
|
2182
2152
|
}
|
|
2183
2153
|
);
|
|
@@ -2294,14 +2264,13 @@ var _with = VmLib(
|
|
|
2294
2264
|
{
|
|
2295
2265
|
summary: "在数组或记录中设置多个键值对",
|
|
2296
2266
|
params: {
|
|
2297
|
-
data: "要设置的数组或记录",
|
|
2298
|
-
"..entries":
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
"..entries": `[..[number | string | (number | string)[], any][]]`
|
|
2267
|
+
data: { type: "array | record", description: "要设置的数组或记录" },
|
|
2268
|
+
"..entries": {
|
|
2269
|
+
type: "[..[number | string | (number | string)[], any][]]",
|
|
2270
|
+
description: "要设置的键值对,成对出现;键可以是一个值或一个数组(表示嵌套路径)"
|
|
2271
|
+
}
|
|
2303
2272
|
},
|
|
2304
|
-
|
|
2273
|
+
returns: { type: "type(data)" },
|
|
2305
2274
|
examples: [
|
|
2306
2275
|
`with([10, 20], 2, 99, 3 ,100) // [10, 20, 99, 100]`,
|
|
2307
2276
|
`(a: 1)::with(["b", 1], 2) // (a: 1, b: [nil, 2])`
|
|
@@ -2328,9 +2297,10 @@ var keys3 = VmLib(
|
|
|
2328
2297
|
},
|
|
2329
2298
|
{
|
|
2330
2299
|
summary: "返回数组、记录、外部对象或模块的键列表",
|
|
2331
|
-
params: {
|
|
2332
|
-
|
|
2333
|
-
|
|
2300
|
+
params: {
|
|
2301
|
+
data: { type: "array | record | extern | module", description: "要获取键的数组、记录、外部对象或模块" }
|
|
2302
|
+
},
|
|
2303
|
+
returns: { type: "number[] | string[]" },
|
|
2334
2304
|
examples: ["keys([10, 20]) // [0, 1]", 'keys((10, 20)) // ["0", "1"]']
|
|
2335
2305
|
}
|
|
2336
2306
|
);
|
|
@@ -2344,9 +2314,8 @@ var values3 = VmLib(
|
|
|
2344
2314
|
},
|
|
2345
2315
|
{
|
|
2346
2316
|
summary: "返回数组或记录的值列表",
|
|
2347
|
-
params: { data: "要获取值的数组或记录" },
|
|
2348
|
-
|
|
2349
|
-
returnsType: "array",
|
|
2317
|
+
params: { data: { type: "array | record", description: "要获取值的数组或记录" } },
|
|
2318
|
+
returns: { type: "array" },
|
|
2350
2319
|
examples: ["values((a: 1, b: 2)) // [1, 2]"]
|
|
2351
2320
|
}
|
|
2352
2321
|
);
|
|
@@ -2365,9 +2334,8 @@ var entries2 = VmLib(
|
|
|
2365
2334
|
},
|
|
2366
2335
|
{
|
|
2367
2336
|
summary: "返回数组或记录的键值对列表",
|
|
2368
|
-
params: { data: "要获取键值对的数组或记录" },
|
|
2369
|
-
|
|
2370
|
-
returnsType: "(number, any)[] | (string, any)[]",
|
|
2337
|
+
params: { data: { type: "array | record", description: "要获取键值对的数组或记录" } },
|
|
2338
|
+
returns: { type: "(number, any)[] | (string, any)[]" },
|
|
2371
2339
|
examples: ["entries([1]) // [(0, 1)]", 'entries((a: 1)) // [("a", 1)]']
|
|
2372
2340
|
}
|
|
2373
2341
|
);
|
|
@@ -2386,9 +2354,8 @@ var len = VmLib(
|
|
|
2386
2354
|
},
|
|
2387
2355
|
{
|
|
2388
2356
|
summary: "返回数组的长度",
|
|
2389
|
-
params: { arr: "要求长度的数组" },
|
|
2390
|
-
|
|
2391
|
-
returnsType: "number",
|
|
2357
|
+
params: { arr: { type: "array | extern", description: "要求长度的数组" } },
|
|
2358
|
+
returns: { type: "number" },
|
|
2392
2359
|
examples: ["len([1, 2, 3]) // 3"]
|
|
2393
2360
|
}
|
|
2394
2361
|
);
|
|
@@ -2408,14 +2375,13 @@ var map2 = VmLib(
|
|
|
2408
2375
|
{
|
|
2409
2376
|
summary: "对数组或记录中的每个元素应用函数,并返回结果",
|
|
2410
2377
|
params: {
|
|
2411
|
-
data: "要映射的数组或记录",
|
|
2412
|
-
f:
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
f: "fn(value: any, key: number | string, input: type(data)) -> any"
|
|
2378
|
+
data: { type: "array | record", description: "要映射的数组或记录" },
|
|
2379
|
+
f: {
|
|
2380
|
+
type: "fn(value: any, key: number | string, input: type(data)) -> any",
|
|
2381
|
+
description: "应用于每个元素的函数"
|
|
2382
|
+
}
|
|
2417
2383
|
},
|
|
2418
|
-
|
|
2384
|
+
returns: { type: "type(data)" },
|
|
2419
2385
|
examples: ["map([1, 2, 3], fn { it * it }) // [1, 4, 9]"]
|
|
2420
2386
|
}
|
|
2421
2387
|
);
|
|
@@ -2427,14 +2393,13 @@ var filter = VmLib(
|
|
|
2427
2393
|
{
|
|
2428
2394
|
summary: "过滤数组或记录中的元素,返回满足条件的元素",
|
|
2429
2395
|
params: {
|
|
2430
|
-
data: "要过滤的数组或记录",
|
|
2431
|
-
predicate:
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
predicate: "fn(value: any, key: number | string, input: type(data)) -> boolean"
|
|
2396
|
+
data: { type: "array | record", description: "要过滤的数组或记录" },
|
|
2397
|
+
predicate: {
|
|
2398
|
+
type: "fn(value: any, key: number | string, input: type(data)) -> boolean",
|
|
2399
|
+
description: "用于测试每个元素的函数"
|
|
2400
|
+
}
|
|
2436
2401
|
},
|
|
2437
|
-
|
|
2402
|
+
returns: { type: "type(data)" },
|
|
2438
2403
|
examples: ["filter([1, 2, 3, 4], fn { it % 2 == 0 }) // [2, 4]"]
|
|
2439
2404
|
}
|
|
2440
2405
|
);
|
|
@@ -2446,14 +2411,13 @@ var filter_map = VmLib(
|
|
|
2446
2411
|
{
|
|
2447
2412
|
summary: "对数组或记录中的每个元素应用函数,并返回非 `nil` 的结果",
|
|
2448
2413
|
params: {
|
|
2449
|
-
data: "要映射的数组或记录",
|
|
2450
|
-
f:
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
f: "fn(value: any, key: number | string, input: type(data)) -> any | nil"
|
|
2414
|
+
data: { type: "array | record", description: "要映射的数组或记录" },
|
|
2415
|
+
f: {
|
|
2416
|
+
type: "fn(value: any, key: number | string, input: type(data)) -> any | nil",
|
|
2417
|
+
description: "应用于每个元素的函数"
|
|
2418
|
+
}
|
|
2455
2419
|
},
|
|
2456
|
-
|
|
2420
|
+
returns: { type: "type(data)" },
|
|
2457
2421
|
examples: ["filter_map([1, 2, 3], fn {\n if it % 2 == 0 { it * it } else { nil } \n}) // [4]"]
|
|
2458
2422
|
}
|
|
2459
2423
|
);
|
|
@@ -2491,14 +2455,13 @@ var find = VmLib(
|
|
|
2491
2455
|
{
|
|
2492
2456
|
summary: "查找数组或记录中的键值对,返回第一个满足条件的键值对",
|
|
2493
2457
|
params: {
|
|
2494
|
-
data: "要查找的数组或记录",
|
|
2495
|
-
predicate:
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
predicate: "(fn(value: any, key: number | string, input: type(data)) -> boolean) | any"
|
|
2458
|
+
data: { type: "array | record", description: "要查找的数组或记录" },
|
|
2459
|
+
predicate: {
|
|
2460
|
+
type: "(fn(value: any, key: number | string, input: type(data)) -> boolean) | any",
|
|
2461
|
+
description: "用于测试每个键值对的函数,或要查找的值"
|
|
2462
|
+
}
|
|
2500
2463
|
},
|
|
2501
|
-
|
|
2464
|
+
returns: { type: "(number | string, any) | nil" },
|
|
2502
2465
|
examples: ["find([3, 5, 8], fn (v) { v % 2 == 0 }) // (2, 8)", `find((x: 1, y: 2, z: 3), 2) // ('y', 2)`]
|
|
2503
2466
|
}
|
|
2504
2467
|
);
|
|
@@ -2511,9 +2474,11 @@ var flatten = VmLib(
|
|
|
2511
2474
|
},
|
|
2512
2475
|
{
|
|
2513
2476
|
summary: "将数组扁平化",
|
|
2514
|
-
params: {
|
|
2515
|
-
|
|
2516
|
-
|
|
2477
|
+
params: {
|
|
2478
|
+
data: { type: "array", description: "要扁平化的数组" },
|
|
2479
|
+
depth: { type: "number | nil", description: "扁平化的深度,默认为 1" }
|
|
2480
|
+
},
|
|
2481
|
+
returns: { type: "array" },
|
|
2517
2482
|
examples: ["flatten([[1, 2], [3, [4]]], 2) // [1, 2, 3, 4]"]
|
|
2518
2483
|
}
|
|
2519
2484
|
);
|
|
@@ -2528,9 +2493,8 @@ var reverse = VmLib(
|
|
|
2528
2493
|
},
|
|
2529
2494
|
{
|
|
2530
2495
|
summary: "返回数组的反转副本",
|
|
2531
|
-
params: { arr: "要反转的数组" },
|
|
2532
|
-
|
|
2533
|
-
returnsType: "array",
|
|
2496
|
+
params: { arr: { type: "array", description: "要反转的数组" } },
|
|
2497
|
+
returns: { type: "array" },
|
|
2534
2498
|
examples: ["reverse([1, 2, 3]) // [3, 2, 1]"]
|
|
2535
2499
|
}
|
|
2536
2500
|
);
|
|
@@ -2561,9 +2525,8 @@ var zip = VmLib(
|
|
|
2561
2525
|
},
|
|
2562
2526
|
{
|
|
2563
2527
|
summary: "将数组的数组/记录转换为数组/记录的数组",
|
|
2564
|
-
params: { data: "要转换的数组/记录" },
|
|
2565
|
-
|
|
2566
|
-
returnsType: "(array | record)[]",
|
|
2528
|
+
params: { data: { type: "array | record", description: "要转换的数组/记录" } },
|
|
2529
|
+
returns: { type: "(array | record)[]" },
|
|
2567
2530
|
examples: [
|
|
2568
2531
|
'zip((x: [1, 2], y: ["a", "b"])) // [(x: 1, y: "a"), (x: 2, y: "b")]',
|
|
2569
2532
|
`zip([[1, 2], ["a", "b"]]) // [[1, "a"], [2, "b"]]`
|
|
@@ -2596,12 +2559,14 @@ var all = VmLib(
|
|
|
2596
2559
|
},
|
|
2597
2560
|
{
|
|
2598
2561
|
summary: "检查数组或记录中的所有键值对是否都满足条件",
|
|
2599
|
-
params: {
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2562
|
+
params: {
|
|
2563
|
+
data: { type: "array | record", description: "要检查的数组或记录" },
|
|
2564
|
+
predicate: {
|
|
2565
|
+
type: "fn(value: any, key: number | string, input: type(data)) -> boolean",
|
|
2566
|
+
description: "用于测试每个键值对的函数"
|
|
2567
|
+
}
|
|
2603
2568
|
},
|
|
2604
|
-
|
|
2569
|
+
returns: { type: "boolean" },
|
|
2605
2570
|
examples: ["all([1, 2, 3], fn { it > 0 }) // true"]
|
|
2606
2571
|
}
|
|
2607
2572
|
);
|
|
@@ -2629,12 +2594,14 @@ var any = VmLib(
|
|
|
2629
2594
|
},
|
|
2630
2595
|
{
|
|
2631
2596
|
summary: "检查数组或记录中的是否存在满足条件的键值对",
|
|
2632
|
-
params: {
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2597
|
+
params: {
|
|
2598
|
+
data: { type: "array | record", description: "要检查的数组或记录" },
|
|
2599
|
+
predicate: {
|
|
2600
|
+
type: "fn(value: any, key: number | string, input: type(data)) -> boolean",
|
|
2601
|
+
description: "用于测试每个键值对的函数"
|
|
2602
|
+
}
|
|
2636
2603
|
},
|
|
2637
|
-
|
|
2604
|
+
returns: { type: "boolean" },
|
|
2638
2605
|
examples: ["any([0, 1, 2], fn { it > 1 }) // true"]
|
|
2639
2606
|
}
|
|
2640
2607
|
);
|
|
@@ -2677,14 +2644,13 @@ var sort = VmLib(
|
|
|
2677
2644
|
{
|
|
2678
2645
|
summary: "对数组中的元素进行排序,并返回排序后的结果",
|
|
2679
2646
|
params: {
|
|
2680
|
-
data: "要排序的数组",
|
|
2681
|
-
comparator:
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
comparator: "fn(a: any, b: any) -> number"
|
|
2647
|
+
data: { type: "array", description: "要排序的数组" },
|
|
2648
|
+
comparator: {
|
|
2649
|
+
type: "fn(a: any, b: any) -> number",
|
|
2650
|
+
description: "用于比较两个元素的函数,返回一个数字,表示它们的相对顺序,默认按升序排列"
|
|
2651
|
+
}
|
|
2686
2652
|
},
|
|
2687
|
-
|
|
2653
|
+
returns: { type: "array" },
|
|
2688
2654
|
examples: ['sort(["c", "a", "b"]) // ["a", "b", "c"]']
|
|
2689
2655
|
}
|
|
2690
2656
|
);
|
|
@@ -2708,16 +2674,17 @@ var sort_by = VmLib(
|
|
|
2708
2674
|
{
|
|
2709
2675
|
summary: "根据键函数对数组中的元素进行排序,并返回排序后的结果",
|
|
2710
2676
|
params: {
|
|
2711
|
-
data: "要排序的数组",
|
|
2712
|
-
key:
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2677
|
+
data: { type: "array", description: "要排序的数组" },
|
|
2678
|
+
key: {
|
|
2679
|
+
type: "fn(value: any, index: number, arr: type(data)) -> any",
|
|
2680
|
+
description: "用于提取排序键的函数,接受一个元素并返回其排序键"
|
|
2681
|
+
},
|
|
2682
|
+
comparator: {
|
|
2683
|
+
type: "fn(a: any, b: any) -> number",
|
|
2684
|
+
description: "用于比较两个排序键的函数,返回一个数字,表示它们的相对顺序,默认按升序排列"
|
|
2685
|
+
}
|
|
2719
2686
|
},
|
|
2720
|
-
|
|
2687
|
+
returns: { type: "array" },
|
|
2721
2688
|
examples: ['sort_by([(0, "x"), (2, "y"), (1, "z")], fn (item) { item[0] }) // [(0, "x"), (1, "z"), (2, "y")]']
|
|
2722
2689
|
}
|
|
2723
2690
|
);
|
|
@@ -2754,14 +2721,13 @@ var unique = VmLib(
|
|
|
2754
2721
|
{
|
|
2755
2722
|
summary: "对数组中的元素进行去重,并返回去重后的结果",
|
|
2756
2723
|
params: {
|
|
2757
|
-
data: "要去重的数组",
|
|
2758
|
-
equal:
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
equal: "fn(a: any, b: any) -> boolean"
|
|
2724
|
+
data: { type: "array", description: "要去重的数组" },
|
|
2725
|
+
equal: {
|
|
2726
|
+
type: "fn(a: any, b: any) -> boolean",
|
|
2727
|
+
description: "用于判等两个元素的函数,返回一个布尔值,默认使用严格相等比较"
|
|
2728
|
+
}
|
|
2763
2729
|
},
|
|
2764
|
-
|
|
2730
|
+
returns: { type: "array" },
|
|
2765
2731
|
examples: ["unique([1, 2, 2, 3]) // [1, 2, 3]"]
|
|
2766
2732
|
}
|
|
2767
2733
|
);
|
|
@@ -2794,16 +2760,17 @@ var unique_by = VmLib(
|
|
|
2794
2760
|
{
|
|
2795
2761
|
summary: "根据键函数对数组中的元素进行去重,并返回去重后的结果",
|
|
2796
2762
|
params: {
|
|
2797
|
-
data: "要去重的数组",
|
|
2798
|
-
key:
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2763
|
+
data: { type: "array", description: "要去重的数组" },
|
|
2764
|
+
key: {
|
|
2765
|
+
type: "fn(value: any, index: number, arr: type(data)) -> any",
|
|
2766
|
+
description: "用于提取去重键的函数,接受一个元素并返回其去重键"
|
|
2767
|
+
},
|
|
2768
|
+
equal: {
|
|
2769
|
+
type: "fn(a: any, b: any) -> boolean",
|
|
2770
|
+
description: "用于判同两个元素的函数,返回一个布尔值,默认使用严格相等比较"
|
|
2771
|
+
}
|
|
2805
2772
|
},
|
|
2806
|
-
|
|
2773
|
+
returns: { type: "array" },
|
|
2807
2774
|
examples: ['unique_by(["apple", "banana", "apricot"], fn { chars(it)[0] }) // ["apple", "banana"]']
|
|
2808
2775
|
}
|
|
2809
2776
|
);
|
|
@@ -2821,14 +2788,10 @@ var repeat = VmLib(
|
|
|
2821
2788
|
{
|
|
2822
2789
|
summary: "创建一个包含重复元素的数组",
|
|
2823
2790
|
params: {
|
|
2824
|
-
data: "要重复的元素",
|
|
2825
|
-
times: "重复的次数,必须是非负整数"
|
|
2826
|
-
},
|
|
2827
|
-
paramsType: {
|
|
2828
|
-
data: "any",
|
|
2829
|
-
times: "number"
|
|
2791
|
+
data: { type: "any", description: "要重复的元素" },
|
|
2792
|
+
times: { type: "number", description: "重复的次数,必须是非负整数" }
|
|
2830
2793
|
},
|
|
2831
|
-
|
|
2794
|
+
returns: { type: "type(data)[]" },
|
|
2832
2795
|
examples: ["repeat(0, 5) // [0, 0, 0, 0, 0]", 'repeat("a", 3) // ["a", "a", "a"]']
|
|
2833
2796
|
}
|
|
2834
2797
|
);
|
|
@@ -2850,9 +2813,14 @@ var new_record = VmLib(
|
|
|
2850
2813
|
},
|
|
2851
2814
|
{
|
|
2852
2815
|
summary: "根据生成器函数创建一个记录",
|
|
2853
|
-
params: {
|
|
2854
|
-
|
|
2855
|
-
|
|
2816
|
+
params: {
|
|
2817
|
+
size: { type: "number", description: "记录的大小" },
|
|
2818
|
+
generator: {
|
|
2819
|
+
type: "fn(index: number) -> (string, any) | nil",
|
|
2820
|
+
description: "生成器函数,返回键值对或 nil(表示跳过该条目)"
|
|
2821
|
+
}
|
|
2822
|
+
},
|
|
2823
|
+
returns: { type: "record" },
|
|
2856
2824
|
examples: ["new_record(3, fn { (it, it * 2) }) // (0, 2, 4)"]
|
|
2857
2825
|
}
|
|
2858
2826
|
);
|
|
@@ -2868,9 +2836,11 @@ var new_array = VmLib(
|
|
|
2868
2836
|
},
|
|
2869
2837
|
{
|
|
2870
2838
|
summary: "根据生成器函数创建一个数组",
|
|
2871
|
-
params: {
|
|
2872
|
-
|
|
2873
|
-
|
|
2839
|
+
params: {
|
|
2840
|
+
length: { type: "number", description: "数组的长度" },
|
|
2841
|
+
generator: { type: "fn(index: number) -> any", description: "生成器函数,返回数组元素的值" }
|
|
2842
|
+
},
|
|
2843
|
+
returns: { type: "array" },
|
|
2874
2844
|
examples: ["new_array(5, fn { it * it }) // [0, 1, 4, 9, 16]"]
|
|
2875
2845
|
}
|
|
2876
2846
|
);
|
|
@@ -3012,9 +2982,10 @@ var debug_print = VmLib(
|
|
|
3012
2982
|
},
|
|
3013
2983
|
{
|
|
3014
2984
|
summary: "打印调试信息到控制台",
|
|
3015
|
-
params: {
|
|
3016
|
-
|
|
3017
|
-
|
|
2985
|
+
params: {
|
|
2986
|
+
"..args": { type: "any[]", description: "要打印的值,可以是任意类型" }
|
|
2987
|
+
},
|
|
2988
|
+
returns: { type: "nil" },
|
|
3018
2989
|
examples: ['debug_print("value:", 42);']
|
|
3019
2990
|
},
|
|
3020
2991
|
// eslint-disable-next-line no-console
|
|
@@ -3029,9 +3000,8 @@ var panic = VmLib(
|
|
|
3029
3000
|
},
|
|
3030
3001
|
{
|
|
3031
3002
|
summary: "产生错误,并打印错误信息到控制台",
|
|
3032
|
-
params: { message: "要打印的错误信息" },
|
|
3033
|
-
|
|
3034
|
-
returnsType: "never",
|
|
3003
|
+
params: { message: { type: "string", description: "要打印的错误信息" } },
|
|
3004
|
+
returns: { type: "never" },
|
|
3035
3005
|
examples: ['panic("boom");']
|
|
3036
3006
|
},
|
|
3037
3007
|
// eslint-disable-next-line no-console
|
|
@@ -3069,9 +3039,8 @@ var to_json = VmLib(
|
|
|
3069
3039
|
},
|
|
3070
3040
|
{
|
|
3071
3041
|
summary: "将数据转换为 JSON 字符串",
|
|
3072
|
-
params: { data: "要转换为 JSON 的数据" },
|
|
3073
|
-
|
|
3074
|
-
returnsType: "string",
|
|
3042
|
+
params: { data: { type: "any", description: "要转换为 JSON 的数据" } },
|
|
3043
|
+
returns: { type: "string" },
|
|
3075
3044
|
examples: ['to_json([1, 2, 3]) // "[1,2,3]"']
|
|
3076
3045
|
}
|
|
3077
3046
|
);
|
|
@@ -3087,9 +3056,11 @@ var from_json = VmLib(
|
|
|
3087
3056
|
},
|
|
3088
3057
|
{
|
|
3089
3058
|
summary: "将 JSON 字符串转换为数据",
|
|
3090
|
-
params: {
|
|
3091
|
-
|
|
3092
|
-
|
|
3059
|
+
params: {
|
|
3060
|
+
json: { type: "string", description: "要转换的 JSON 字符串" },
|
|
3061
|
+
fallback: { type: "any", description: "如果转换失败,返回的默认值" }
|
|
3062
|
+
},
|
|
3063
|
+
returns: { type: "any" },
|
|
3093
3064
|
examples: [`from_json('{"a":1}') // (a: 1)`]
|
|
3094
3065
|
}
|
|
3095
3066
|
);
|
|
@@ -3103,11 +3074,10 @@ var to_string = VmLib(
|
|
|
3103
3074
|
{
|
|
3104
3075
|
summary: "将数据转换为字符串",
|
|
3105
3076
|
params: {
|
|
3106
|
-
data: "要转换的数据",
|
|
3107
|
-
fallback: "转换失败时的返回值"
|
|
3077
|
+
data: { type: "any", description: "要转换的数据" },
|
|
3078
|
+
fallback: { type: "any", description: "转换失败时的返回值" }
|
|
3108
3079
|
},
|
|
3109
|
-
|
|
3110
|
-
returnsType: "string | type(fallback)",
|
|
3080
|
+
returns: { type: "string | type(fallback)" },
|
|
3111
3081
|
examples: ['to_string([1, 2]) // "1, 2"']
|
|
3112
3082
|
}
|
|
3113
3083
|
);
|
|
@@ -3119,11 +3089,10 @@ var to_number = VmLib(
|
|
|
3119
3089
|
{
|
|
3120
3090
|
summary: "将数据转换为数字",
|
|
3121
3091
|
params: {
|
|
3122
|
-
data: "要转换的数据",
|
|
3123
|
-
fallback: "转换失败时的返回值"
|
|
3092
|
+
data: { type: "string | number | boolean", description: "要转换的数据" },
|
|
3093
|
+
fallback: { type: "any", description: "转换失败时的返回值" }
|
|
3124
3094
|
},
|
|
3125
|
-
|
|
3126
|
-
returnsType: "number | type(fallback)",
|
|
3095
|
+
returns: { type: "number | type(fallback)" },
|
|
3127
3096
|
examples: ['to_number("1.5") // 1.5']
|
|
3128
3097
|
}
|
|
3129
3098
|
);
|
|
@@ -3134,9 +3103,11 @@ var format = VmLib(
|
|
|
3134
3103
|
},
|
|
3135
3104
|
{
|
|
3136
3105
|
summary: "将数据格式化为指定格式的字符串",
|
|
3137
|
-
params: {
|
|
3138
|
-
|
|
3139
|
-
|
|
3106
|
+
params: {
|
|
3107
|
+
data: { type: "any", description: "要格式化的数据" },
|
|
3108
|
+
format: { type: "string", description: "格式字符串" }
|
|
3109
|
+
},
|
|
3110
|
+
returns: { type: "string" },
|
|
3140
3111
|
examples: ['format(12, ".3") // "12.000"']
|
|
3141
3112
|
}
|
|
3142
3113
|
);
|
|
@@ -3148,9 +3119,8 @@ var trim_start = VmLib(
|
|
|
3148
3119
|
},
|
|
3149
3120
|
{
|
|
3150
3121
|
summary: "去除字符串开头的空白字符",
|
|
3151
|
-
params: { str: "要处理的字符串" },
|
|
3152
|
-
|
|
3153
|
-
returnsType: "string",
|
|
3122
|
+
params: { str: { type: "string", description: "要处理的字符串" } },
|
|
3123
|
+
returns: { type: "string" },
|
|
3154
3124
|
examples: ['trim_start(" mira") // "mira"']
|
|
3155
3125
|
}
|
|
3156
3126
|
);
|
|
@@ -3160,9 +3130,8 @@ var trim_end = VmLib(
|
|
|
3160
3130
|
},
|
|
3161
3131
|
{
|
|
3162
3132
|
summary: "去除字符串结尾的空白字符",
|
|
3163
|
-
params: { str: "要处理的字符串" },
|
|
3164
|
-
|
|
3165
|
-
returnsType: "string",
|
|
3133
|
+
params: { str: { type: "string", description: "要处理的字符串" } },
|
|
3134
|
+
returns: { type: "string" },
|
|
3166
3135
|
examples: ['trim_end("mira ") // "mira"']
|
|
3167
3136
|
}
|
|
3168
3137
|
);
|
|
@@ -3172,9 +3141,8 @@ var trim = VmLib(
|
|
|
3172
3141
|
},
|
|
3173
3142
|
{
|
|
3174
3143
|
summary: "去除字符串两端的空白字符",
|
|
3175
|
-
params: { str: "要处理的字符串" },
|
|
3176
|
-
|
|
3177
|
-
returnsType: "string",
|
|
3144
|
+
params: { str: { type: "string", description: "要处理的字符串" } },
|
|
3145
|
+
returns: { type: "string" },
|
|
3178
3146
|
examples: ['trim(" mira ") // "mira"']
|
|
3179
3147
|
}
|
|
3180
3148
|
);
|
|
@@ -3186,9 +3154,8 @@ var to_uppercase = VmLib(
|
|
|
3186
3154
|
},
|
|
3187
3155
|
{
|
|
3188
3156
|
summary: "将字符串转换为大写",
|
|
3189
|
-
params: { str: "要转换的字符串" },
|
|
3190
|
-
|
|
3191
|
-
returnsType: "string",
|
|
3157
|
+
params: { str: { type: "string", description: "要转换的字符串" } },
|
|
3158
|
+
returns: { type: "string" },
|
|
3192
3159
|
examples: ['to_uppercase("mira") // "MIRA"']
|
|
3193
3160
|
}
|
|
3194
3161
|
);
|
|
@@ -3198,9 +3165,8 @@ var to_lowercase = VmLib(
|
|
|
3198
3165
|
},
|
|
3199
3166
|
{
|
|
3200
3167
|
summary: "将字符串转换为小写",
|
|
3201
|
-
params: { str: "要转换的字符串" },
|
|
3202
|
-
|
|
3203
|
-
returnsType: "string",
|
|
3168
|
+
params: { str: { type: "string", description: "要转换的字符串" } },
|
|
3169
|
+
returns: { type: "string" },
|
|
3204
3170
|
examples: ['to_lowercase("MIRA") // "mira"']
|
|
3205
3171
|
}
|
|
3206
3172
|
);
|
|
@@ -3212,9 +3178,11 @@ var starts_with = VmLib(
|
|
|
3212
3178
|
},
|
|
3213
3179
|
{
|
|
3214
3180
|
summary: "检查字符串是否以指定子串开头",
|
|
3215
|
-
params: {
|
|
3216
|
-
|
|
3217
|
-
|
|
3181
|
+
params: {
|
|
3182
|
+
str: { type: "string", description: "要检查的字符串" },
|
|
3183
|
+
search: { type: "string", description: "要匹配的子串" }
|
|
3184
|
+
},
|
|
3185
|
+
returns: { type: "boolean" },
|
|
3218
3186
|
examples: ['starts_with("mira", "mi") // true']
|
|
3219
3187
|
}
|
|
3220
3188
|
);
|
|
@@ -3224,9 +3192,11 @@ var ends_with = VmLib(
|
|
|
3224
3192
|
},
|
|
3225
3193
|
{
|
|
3226
3194
|
summary: "检查字符串是否以指定子串结尾",
|
|
3227
|
-
params: {
|
|
3228
|
-
|
|
3229
|
-
|
|
3195
|
+
params: {
|
|
3196
|
+
str: { type: "string", description: "要检查的字符串" },
|
|
3197
|
+
search: { type: "string", description: "要匹配的子串" }
|
|
3198
|
+
},
|
|
3199
|
+
returns: { type: "boolean" },
|
|
3230
3200
|
examples: ['ends_with("mira", "ra") // true']
|
|
3231
3201
|
}
|
|
3232
3202
|
);
|
|
@@ -3236,9 +3206,11 @@ var contains = VmLib(
|
|
|
3236
3206
|
},
|
|
3237
3207
|
{
|
|
3238
3208
|
summary: "检查字符串是否包含指定子串",
|
|
3239
|
-
params: {
|
|
3240
|
-
|
|
3241
|
-
|
|
3209
|
+
params: {
|
|
3210
|
+
str: { type: "string", description: "要检查的字符串" },
|
|
3211
|
+
search: { type: "string", description: "要匹配的子串" }
|
|
3212
|
+
},
|
|
3213
|
+
returns: { type: "boolean" },
|
|
3242
3214
|
examples: ['contains("hello", "ll") // true']
|
|
3243
3215
|
}
|
|
3244
3216
|
);
|
|
@@ -3250,9 +3222,8 @@ var chars = VmLib(
|
|
|
3250
3222
|
},
|
|
3251
3223
|
{
|
|
3252
3224
|
summary: "将字符串转换为字符数组",
|
|
3253
|
-
params: { str: "要转换的字符串" },
|
|
3254
|
-
|
|
3255
|
-
returnsType: "string[]",
|
|
3225
|
+
params: { str: { type: "string", description: "要转换的字符串" } },
|
|
3226
|
+
returns: { type: "string[]" },
|
|
3256
3227
|
examples: ['chars("Mira") // ["M", "i", "r", "a"]']
|
|
3257
3228
|
}
|
|
3258
3229
|
);
|
|
@@ -3265,9 +3236,12 @@ var replace = VmLib(
|
|
|
3265
3236
|
},
|
|
3266
3237
|
{
|
|
3267
3238
|
summary: "替换字符串中的指定子串",
|
|
3268
|
-
params: {
|
|
3269
|
-
|
|
3270
|
-
|
|
3239
|
+
params: {
|
|
3240
|
+
str: { type: "string", description: "要处理的字符串" },
|
|
3241
|
+
search: { type: "string", description: "要替换的子串" },
|
|
3242
|
+
replacement: { type: "string", description: "替换后的字符串" }
|
|
3243
|
+
},
|
|
3244
|
+
returns: { type: "string" },
|
|
3271
3245
|
examples: ['replace("foo bar foo", "foo", "baz") // "baz bar baz"']
|
|
3272
3246
|
}
|
|
3273
3247
|
);
|
|
@@ -3280,9 +3254,11 @@ var split = VmLib(
|
|
|
3280
3254
|
},
|
|
3281
3255
|
{
|
|
3282
3256
|
summary: "将字符串拆分为子串数组",
|
|
3283
|
-
params: {
|
|
3284
|
-
|
|
3285
|
-
|
|
3257
|
+
params: {
|
|
3258
|
+
str: { type: "string", description: "要拆分的字符串" },
|
|
3259
|
+
separator: { type: "string", description: "分隔符" }
|
|
3260
|
+
},
|
|
3261
|
+
returns: { type: "string[]" },
|
|
3286
3262
|
examples: ['split("a,b,c", ",") // ["a", "b", "c"]']
|
|
3287
3263
|
}
|
|
3288
3264
|
);
|
|
@@ -3294,9 +3270,11 @@ var join = VmLib(
|
|
|
3294
3270
|
},
|
|
3295
3271
|
{
|
|
3296
3272
|
summary: "将字符串数组连接为单个字符串",
|
|
3297
|
-
params: {
|
|
3298
|
-
|
|
3299
|
-
|
|
3273
|
+
params: {
|
|
3274
|
+
arr: { type: "string[]", description: "要连接的字符串数组" },
|
|
3275
|
+
separator: { type: "string", description: "分隔符" }
|
|
3276
|
+
},
|
|
3277
|
+
returns: { type: "string" },
|
|
3300
3278
|
examples: ['join(["a", "b", "c"], "-") // "a-b-c"']
|
|
3301
3279
|
}
|
|
3302
3280
|
);
|
|
@@ -3337,11 +3315,10 @@ var to_timestamp = VmLib(
|
|
|
3337
3315
|
{
|
|
3338
3316
|
summary: "将数据转换为 Unix 毫秒时间戳",
|
|
3339
3317
|
params: {
|
|
3340
|
-
datetime: "要转换的数据,默认为当前时间",
|
|
3341
|
-
fallback: "转换失败时的返回值"
|
|
3318
|
+
datetime: { type: "number | string | nil", description: "要转换的数据,默认为当前时间" },
|
|
3319
|
+
fallback: { type: "any", description: "转换失败时的返回值" }
|
|
3342
3320
|
},
|
|
3343
|
-
|
|
3344
|
-
returnsType: "number | type(fallback)",
|
|
3321
|
+
returns: { type: "number | type(fallback)" },
|
|
3345
3322
|
examples: ['to_timestamp("1970-01-01T00:00:00Z") // 0']
|
|
3346
3323
|
}
|
|
3347
3324
|
);
|
|
@@ -3366,12 +3343,11 @@ var to_datetime = VmLib(
|
|
|
3366
3343
|
{
|
|
3367
3344
|
summary: "将数据转换为 DateTime 记录",
|
|
3368
3345
|
params: {
|
|
3369
|
-
datetime: "要转换的数据,默认为当前时间",
|
|
3370
|
-
offset: "时区偏移量(单位:小时),默认为 0",
|
|
3371
|
-
fallback: "转换失败时的返回值"
|
|
3346
|
+
datetime: { type: "number | string | nil", description: "要转换的数据,默认为当前时间" },
|
|
3347
|
+
offset: { type: "number | nil", description: "时区偏移量(单位:小时),默认为 0" },
|
|
3348
|
+
fallback: { type: "any", description: "转换失败时的返回值" }
|
|
3372
3349
|
},
|
|
3373
|
-
|
|
3374
|
-
returnsType: "DateTime | type(fallback)",
|
|
3350
|
+
returns: { type: "DateTime | type(fallback)" },
|
|
3375
3351
|
examples: [
|
|
3376
3352
|
`
|
|
3377
3353
|
to_datetime(0)
|
|
@@ -3394,11 +3370,10 @@ var to_iso8601 = VmLib(
|
|
|
3394
3370
|
{
|
|
3395
3371
|
summary: "将数据转换为 ISO 8601 格式的字符串",
|
|
3396
3372
|
params: {
|
|
3397
|
-
datetime: "要转换的数据,默认为当前时间",
|
|
3398
|
-
fallback: "转换失败时的返回值"
|
|
3373
|
+
datetime: { type: "number | string | nil", description: "要转换的数据,默认为当前时间" },
|
|
3374
|
+
fallback: { type: "any", description: "转换失败时的返回值" }
|
|
3399
3375
|
},
|
|
3400
|
-
|
|
3401
|
-
returnsType: "string | type(fallback)",
|
|
3376
|
+
returns: { type: "string | type(fallback)" },
|
|
3402
3377
|
examples: ['to_iso8601(0) // "1970-01-01T00:00:00.000Z"']
|
|
3403
3378
|
}
|
|
3404
3379
|
);
|
|
@@ -3450,9 +3425,8 @@ var size = VmLib(
|
|
|
3450
3425
|
},
|
|
3451
3426
|
{
|
|
3452
3427
|
summary: "获取矩阵尺寸",
|
|
3453
|
-
params: { matrix: "要获取尺寸的矩阵" },
|
|
3454
|
-
|
|
3455
|
-
returnsType: "[number, number]",
|
|
3428
|
+
params: { matrix: { type: "any[][]", description: "要获取尺寸的矩阵" } },
|
|
3429
|
+
returns: { type: "[number, number]" },
|
|
3456
3430
|
examples: ["matrix.size([[1, 2], [3, 4]]) // [2, 2]"]
|
|
3457
3431
|
}
|
|
3458
3432
|
);
|
|
@@ -3476,9 +3450,8 @@ var transpose = VmLib(
|
|
|
3476
3450
|
},
|
|
3477
3451
|
{
|
|
3478
3452
|
summary: "转置矩阵",
|
|
3479
|
-
params: { matrix: "要转置的矩阵" },
|
|
3480
|
-
|
|
3481
|
-
returnsType: "any[][]",
|
|
3453
|
+
params: { matrix: { type: "any[][]", description: "要转置的矩阵" } },
|
|
3454
|
+
returns: { type: "any[][]" },
|
|
3482
3455
|
examples: ["matrix.transpose([[1, 2], [3, 4]]) // [[1, 3], [2, 4]]"]
|
|
3483
3456
|
}
|
|
3484
3457
|
);
|
|
@@ -3591,9 +3564,12 @@ var entrywise = VmLib(
|
|
|
3591
3564
|
},
|
|
3592
3565
|
{
|
|
3593
3566
|
summary: "逐项操作",
|
|
3594
|
-
params: {
|
|
3595
|
-
|
|
3596
|
-
|
|
3567
|
+
params: {
|
|
3568
|
+
a: { type: "any | any[] | any[][]", description: "第一个操作数" },
|
|
3569
|
+
b: { type: "any | any[] | any[][]", description: "第二个操作数" },
|
|
3570
|
+
f: { type: "fn(a: any, b: any) -> any", description: "操作函数" }
|
|
3571
|
+
},
|
|
3572
|
+
returns: { type: "any | any[] | any[][]" },
|
|
3597
3573
|
examples: [`matrix.entrywise([1, 2], [3, 4], fn (x, y) { x + y }) // [4, 6]`]
|
|
3598
3574
|
}
|
|
3599
3575
|
);
|
|
@@ -3605,9 +3581,11 @@ var add2 = VmLib(
|
|
|
3605
3581
|
},
|
|
3606
3582
|
{
|
|
3607
3583
|
summary: "逐项相加",
|
|
3608
|
-
params: {
|
|
3609
|
-
|
|
3610
|
-
|
|
3584
|
+
params: {
|
|
3585
|
+
a: { type: "number | number[] | number[][]", description: "第一个操作数" },
|
|
3586
|
+
b: { type: "number | number[] | number[][]", description: "第二个操作数" }
|
|
3587
|
+
},
|
|
3588
|
+
returns: { type: "number | number[] | number[][]" },
|
|
3611
3589
|
examples: ["matrix.add([1, 2], [3, 4]) // [4, 6]"]
|
|
3612
3590
|
}
|
|
3613
3591
|
);
|
|
@@ -3619,9 +3597,11 @@ var subtract = VmLib(
|
|
|
3619
3597
|
},
|
|
3620
3598
|
{
|
|
3621
3599
|
summary: "逐项相减",
|
|
3622
|
-
params: {
|
|
3623
|
-
|
|
3624
|
-
|
|
3600
|
+
params: {
|
|
3601
|
+
a: { type: "number | number[] | number[][]", description: "第一个操作数" },
|
|
3602
|
+
b: { type: "number | number[] | number[][]", description: "第二个操作数" }
|
|
3603
|
+
},
|
|
3604
|
+
returns: { type: "number | number[] | number[][]" },
|
|
3625
3605
|
examples: ["matrix.subtract([3, 4], [1, 2]) // [2, 2]"]
|
|
3626
3606
|
}
|
|
3627
3607
|
);
|
|
@@ -3633,9 +3613,11 @@ var entrywise_multiply = VmLib(
|
|
|
3633
3613
|
},
|
|
3634
3614
|
{
|
|
3635
3615
|
summary: "逐项相乘",
|
|
3636
|
-
params: {
|
|
3637
|
-
|
|
3638
|
-
|
|
3616
|
+
params: {
|
|
3617
|
+
a: { type: "number | number[] | number[][]", description: "第一个操作数" },
|
|
3618
|
+
b: { type: "number | number[] | number[][]", description: "第二个操作数" }
|
|
3619
|
+
},
|
|
3620
|
+
returns: { type: "number | number[] | number[][]" },
|
|
3639
3621
|
examples: ["matrix.entrywise_multiply([1, 2], [3, 4]) // [3, 8]"]
|
|
3640
3622
|
}
|
|
3641
3623
|
);
|
|
@@ -3647,9 +3629,11 @@ var entrywise_divide = VmLib(
|
|
|
3647
3629
|
},
|
|
3648
3630
|
{
|
|
3649
3631
|
summary: "逐项相除",
|
|
3650
|
-
params: {
|
|
3651
|
-
|
|
3652
|
-
|
|
3632
|
+
params: {
|
|
3633
|
+
a: { type: "number | number[] | number[][]", description: "第一个操作数" },
|
|
3634
|
+
b: { type: "number | number[] | number[][]", description: "第二个操作数" }
|
|
3635
|
+
},
|
|
3636
|
+
returns: { type: "number | number[] | number[][]" },
|
|
3653
3637
|
examples: ["matrix.entrywise_divide([4, 6], [2, 3]) // [2, 2]"]
|
|
3654
3638
|
}
|
|
3655
3639
|
);
|
|
@@ -3713,9 +3697,11 @@ var multiply = VmLib(
|
|
|
3713
3697
|
},
|
|
3714
3698
|
{
|
|
3715
3699
|
summary: "矩阵相乘",
|
|
3716
|
-
params: {
|
|
3717
|
-
|
|
3718
|
-
|
|
3700
|
+
params: {
|
|
3701
|
+
a: { type: "number | number[] | number[][]", description: "第一个操作数" },
|
|
3702
|
+
b: { type: "number | number[] | number[][]", description: "第二个操作数" }
|
|
3703
|
+
},
|
|
3704
|
+
returns: { type: "number | number[] | number[][]" },
|
|
3719
3705
|
examples: ["matrix.multiply([[1, 2], [3, 4]], [5, 6]) // [17, 39]"]
|
|
3720
3706
|
}
|
|
3721
3707
|
);
|
|
@@ -3804,9 +3790,8 @@ var invert = VmLib(
|
|
|
3804
3790
|
},
|
|
3805
3791
|
{
|
|
3806
3792
|
summary: "矩阵求逆",
|
|
3807
|
-
params: { a: "待求逆的矩阵" },
|
|
3808
|
-
|
|
3809
|
-
returnsType: "number | number[][]",
|
|
3793
|
+
params: { a: { type: "number | number[][]", description: "待求逆的矩阵" } },
|
|
3794
|
+
returns: { type: "number | number[][]" },
|
|
3810
3795
|
examples: ["matrix.invert([[1, 2], [3, 4]]) // [[-2, 1], [1.5, -0.5]]"]
|
|
3811
3796
|
}
|
|
3812
3797
|
);
|
|
@@ -3825,16 +3810,14 @@ function filled(size2, value) {
|
|
|
3825
3810
|
}
|
|
3826
3811
|
var zeros = VmLib((...size2) => filled(size2, 0), {
|
|
3827
3812
|
summary: "创建一个全零的矩阵",
|
|
3828
|
-
params: { "..size": "矩阵的维度" },
|
|
3829
|
-
|
|
3830
|
-
returnsType: "number[][]",
|
|
3813
|
+
params: { "..size": { type: "number[]", description: "矩阵的维度" } },
|
|
3814
|
+
returns: { type: "number[][]" },
|
|
3831
3815
|
examples: ["matrix.zeros(2, 3) // [[0, 0, 0], [0, 0, 0]]"]
|
|
3832
3816
|
});
|
|
3833
3817
|
var ones = VmLib((...size2) => filled(size2, 1), {
|
|
3834
3818
|
summary: "创建一个全一的矩阵",
|
|
3835
|
-
params: { "..size": "矩阵的维度" },
|
|
3836
|
-
|
|
3837
|
-
returnsType: "number[][]",
|
|
3819
|
+
params: { "..size": { type: "number[]", description: "矩阵的维度" } },
|
|
3820
|
+
returns: { type: "number[][]" },
|
|
3838
3821
|
examples: ["matrix.ones(2, 2) // [[1, 1], [1, 1]]"]
|
|
3839
3822
|
});
|
|
3840
3823
|
var identity = VmLib(
|
|
@@ -3857,9 +3840,8 @@ var identity = VmLib(
|
|
|
3857
3840
|
},
|
|
3858
3841
|
{
|
|
3859
3842
|
summary: "创建一个单位矩阵",
|
|
3860
|
-
params: { "..size": "矩阵的维度" },
|
|
3861
|
-
|
|
3862
|
-
returnsType: "number[][]",
|
|
3843
|
+
params: { "..size": { type: "[number] | [number, number]", description: "矩阵的维度" } },
|
|
3844
|
+
returns: { type: "number[][]" },
|
|
3863
3845
|
examples: ["matrix.identity(3) // [[1, 0, 0], [0, 1, 0], [0, 0, 1]]"]
|
|
3864
3846
|
}
|
|
3865
3847
|
);
|
|
@@ -3897,9 +3879,11 @@ var diagonal = VmLib(
|
|
|
3897
3879
|
},
|
|
3898
3880
|
{
|
|
3899
3881
|
summary: "创建一个对角矩阵或获取矩阵的对角线",
|
|
3900
|
-
params: {
|
|
3901
|
-
|
|
3902
|
-
|
|
3882
|
+
params: {
|
|
3883
|
+
x: { type: "number[] | number[][]", description: "对角线元素或要获取对角线的矩阵" },
|
|
3884
|
+
k: { type: "number", description: "对角线偏移量,默认为 0" }
|
|
3885
|
+
},
|
|
3886
|
+
returns: { type: "number[][] | number[]" },
|
|
3903
3887
|
examples: [
|
|
3904
3888
|
"matrix.diagonal([1, 2, 3]) // [[1, 0, 0], [0, 2, 0], [0, 0, 3]]",
|
|
3905
3889
|
"matrix.diagonal([[1, 2], [3, 4]]) // [1, 4]"
|
|
@@ -3978,4 +3962,4 @@ export {
|
|
|
3978
3962
|
emitScript,
|
|
3979
3963
|
lib
|
|
3980
3964
|
};
|
|
3981
|
-
//# sourceMappingURL=chunk-
|
|
3965
|
+
//# sourceMappingURL=chunk-MRA5WJ72.js.map
|