simplex-lang 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/src/compiler.js +50 -23
- package/build/src/compiler.js.map +1 -1
- package/build/src/errors.d.ts +3 -3
- package/build/src/errors.js +14 -6
- package/build/src/errors.js.map +1 -1
- package/build/src/index.d.ts +1 -0
- package/build/src/index.js +1 -0
- package/build/src/index.js.map +1 -1
- package/build/src/tools/cast.d.ts +2 -0
- package/build/src/tools/cast.js +20 -0
- package/build/src/tools/cast.js.map +1 -0
- package/build/src/tools/ensure.d.ts +3 -0
- package/build/src/tools/ensure.js +30 -0
- package/build/src/tools/ensure.js.map +1 -0
- package/build/src/tools/guards.d.ts +2 -0
- package/build/src/tools/guards.js +20 -0
- package/build/src/tools/guards.js.map +1 -0
- package/build/src/tools/index.d.ts +11 -0
- package/build/src/tools/index.js +40 -0
- package/build/src/tools/index.js.map +1 -0
- package/package.json +1 -1
- package/src/compiler.ts +58 -34
- package/src/errors.ts +15 -3
- package/src/index.ts +1 -0
- package/src/tools/cast.ts +26 -0
- package/src/tools/ensure.ts +41 -0
- package/src/tools/guards.ts +29 -0
- package/src/tools/index.ts +45 -0
- package/build/src/utils.d.ts +0 -15
- package/build/src/utils.js +0 -98
- package/build/src/utils.js.map +0 -1
- package/src/utils.ts +0 -119
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/simplex-lang)
|
|
4
4
|
[](https://github.com/wmakeev/simplex/actions/workflows/main.yml)
|
|
5
|
-
<!-- [](https://app.codecov.io/gh/wmakeev/simplex/tree/master/) -->
|
|
6
5
|

|
|
7
6
|
[](https://peggyjs.org/)
|
|
7
|
+
<!-- [](https://app.codecov.io/gh/wmakeev/simplex/tree/master/) -->
|
|
8
8
|
|
|
9
9
|
> **SimpEx** - javascript **Simpl**e **Ex**pression language
|
|
10
10
|
|
package/build/src/compiler.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
1
2
|
import { parse } from '@project/simplex-parser';
|
|
2
3
|
import { ExpressionError, UnexpectedTypeError } from './errors.js';
|
|
3
|
-
import { bool, ensureFunction, isSimple, num, prettyType, relComp, toStr } from './utils.js';
|
|
4
4
|
import assert from 'node:assert';
|
|
5
|
+
import { castToBoolean } from './tools/cast.js';
|
|
6
|
+
import { ensureFunction, ensureRelationalComparable, ensureNumber } from './tools/ensure.js';
|
|
7
|
+
import { isSimpleValue } from './tools/guards.js';
|
|
8
|
+
import { castToString, typeOf } from './tools/index.js';
|
|
5
9
|
var hasOwn = Object.hasOwn;
|
|
6
10
|
var ERROR_STACK_REGEX = /<anonymous>:(?<row>\d+):(?<col>\d+)/g;
|
|
7
11
|
const defaultContextHelpers = {
|
|
8
|
-
castToBoolean
|
|
12
|
+
castToBoolean,
|
|
9
13
|
ensureFunction,
|
|
10
14
|
getIdentifierValue: (identifierName, globals, data) => {
|
|
11
15
|
if (identifierName === 'undefined')
|
|
@@ -22,10 +26,10 @@ const defaultContextHelpers = {
|
|
|
22
26
|
if (obj == null)
|
|
23
27
|
return obj;
|
|
24
28
|
if (typeof obj !== 'object') {
|
|
25
|
-
throw new UnexpectedTypeError('object',
|
|
29
|
+
throw new UnexpectedTypeError(['object'], obj);
|
|
26
30
|
}
|
|
27
|
-
if (
|
|
28
|
-
throw new UnexpectedTypeError('object key
|
|
31
|
+
if (isSimpleValue(key) === false) {
|
|
32
|
+
throw new UnexpectedTypeError(['simple type object key'], key);
|
|
29
33
|
}
|
|
30
34
|
if (hasOwn(obj, key)) {
|
|
31
35
|
// @ts-expect-error Type cannot be used as an index type
|
|
@@ -49,37 +53,60 @@ const defaultContextHelpers = {
|
|
|
49
53
|
}
|
|
50
54
|
};
|
|
51
55
|
export const defaultUnaryOperators = {
|
|
52
|
-
'+': val =>
|
|
53
|
-
'-': val => -
|
|
54
|
-
'not': val => !
|
|
56
|
+
'+': val => ensureNumber(val),
|
|
57
|
+
'-': val => -ensureNumber(val),
|
|
58
|
+
'not': val => !castToBoolean(val),
|
|
55
59
|
'typeof': val => typeof val
|
|
56
60
|
};
|
|
57
61
|
export const defaultBinaryOperators = {
|
|
58
62
|
'!=': (a, b) => a !== b,
|
|
59
63
|
'==': (a, b) => a === b,
|
|
60
|
-
|
|
61
|
-
'
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
// TIPS give the opportunity to get a base js error
|
|
65
|
+
'*': (a, b) => {
|
|
66
|
+
// @ts-expect-error
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
68
|
+
return ensureNumber(a) * ensureNumber(b);
|
|
69
|
+
},
|
|
70
|
+
'+': (a, b) => {
|
|
71
|
+
// @ts-expect-error
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/restrict-plus-operands
|
|
73
|
+
return ensureNumber(a) + ensureNumber(b);
|
|
74
|
+
},
|
|
75
|
+
'-': (a, b) => {
|
|
76
|
+
// @ts-expect-error
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
78
|
+
return ensureNumber(a) - ensureNumber(b);
|
|
79
|
+
},
|
|
80
|
+
'/': (a, b) => {
|
|
81
|
+
// @ts-expect-error
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
83
|
+
return ensureNumber(a) / ensureNumber(b);
|
|
84
|
+
},
|
|
65
85
|
'mod': (a, b) => {
|
|
66
|
-
|
|
86
|
+
// @ts-expect-error
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
88
|
+
return ensureNumber(a) % ensureNumber(b);
|
|
89
|
+
},
|
|
90
|
+
'^': (a, b) => {
|
|
91
|
+
// @ts-expect-error
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
93
|
+
return ensureNumber(a) ** ensureNumber(b);
|
|
67
94
|
},
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
71
|
-
'
|
|
95
|
+
'&': (a, b) => castToString(a) + castToString(b),
|
|
96
|
+
'<': (a, b) => ensureRelationalComparable(a) < ensureRelationalComparable(b),
|
|
97
|
+
'<=': (a, b) => ensureRelationalComparable(a) <= ensureRelationalComparable(b),
|
|
98
|
+
'>': (a, b) => ensureRelationalComparable(a) > ensureRelationalComparable(b),
|
|
99
|
+
'>=': (a, b) => ensureRelationalComparable(a) >= ensureRelationalComparable(b),
|
|
72
100
|
'in': (a, b) => {
|
|
73
|
-
if (
|
|
101
|
+
if (isSimpleValue(a) && b != null && typeof b === 'object') {
|
|
74
102
|
return Object.hasOwn(b, a);
|
|
75
103
|
}
|
|
76
104
|
else {
|
|
77
|
-
throw new TypeError(`Cannot use "in" operator to search for ${
|
|
105
|
+
throw new TypeError(`Cannot use "in" operator to search for ${typeOf(a)} key in ${typeOf(b)}`);
|
|
78
106
|
}
|
|
79
107
|
},
|
|
80
|
-
'
|
|
81
|
-
'
|
|
82
|
-
'or': (a, b) => bool(a) || bool(b)
|
|
108
|
+
'and': (a, b) => castToBoolean(a) && castToBoolean(b),
|
|
109
|
+
'or': (a, b) => castToBoolean(a) || castToBoolean(b)
|
|
83
110
|
};
|
|
84
111
|
const PIPE_LTR = '_';
|
|
85
112
|
const codePart = (codePart, ownerNode) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/build/src/errors.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export declare class ExpressionError extends Error {
|
|
|
4
4
|
constructor(error: Error, location: Location | null);
|
|
5
5
|
}
|
|
6
6
|
export declare class UnexpectedTypeError extends TypeError {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
expectedTypes: string[];
|
|
8
|
+
receivedValue: unknown;
|
|
9
9
|
I18N_STRING: string;
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(expectedTypes: string[], receivedValue: unknown);
|
|
11
11
|
}
|
package/build/src/errors.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { typeOf } from './tools/index.js';
|
|
1
2
|
export class ExpressionError extends Error {
|
|
2
3
|
location;
|
|
3
4
|
constructor(error, location) {
|
|
@@ -6,13 +7,20 @@ export class ExpressionError extends Error {
|
|
|
6
7
|
}
|
|
7
8
|
}
|
|
8
9
|
export class UnexpectedTypeError extends TypeError {
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
expectedTypes;
|
|
11
|
+
receivedValue;
|
|
11
12
|
I18N_STRING = 'UNEXPECTED_TYPE';
|
|
12
|
-
constructor(
|
|
13
|
-
super(`Expected ${
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
constructor(expectedTypes, receivedValue) {
|
|
14
|
+
super(`Expected ${expectedTypes.length === 1
|
|
15
|
+
? expectedTypes[0]
|
|
16
|
+
: expectedTypes
|
|
17
|
+
.flatMap((t, index) => {
|
|
18
|
+
return [t, index === expectedTypes.length - 2 ? ' or ' : ', '];
|
|
19
|
+
})
|
|
20
|
+
.slice(0, -1)
|
|
21
|
+
.join('')}, but got ${typeOf(receivedValue)} instead`);
|
|
22
|
+
this.expectedTypes = expectedTypes;
|
|
23
|
+
this.receivedValue = receivedValue;
|
|
16
24
|
}
|
|
17
25
|
}
|
|
18
26
|
//# sourceMappingURL=errors.js.map
|
package/build/src/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAG/B;IAFT,YACE,KAAY,EACL,QAAyB;QAEhC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAF/B,aAAQ,GAAR,QAAQ,CAAiB;IAGlC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAIvC;IACA;IAJT,WAAW,GAAG,iBAAiB,CAAA;IAE/B,YACS,aAAuB,EACvB,aAAsB;QAE7B,KAAK,CACH,YACE,aAAa,CAAC,MAAM,KAAK,CAAC;YACxB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,aAAa;iBACV,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACpB,OAAO,CAAC,CAAC,EAAE,KAAK,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAChE,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACZ,IAAI,CAAC,EAAE,CAChB,aAAa,MAAM,CAAC,aAAa,CAAC,UAAU,CAC7C,CAAA;QAdM,kBAAa,GAAb,aAAa,CAAU;QACvB,kBAAa,GAAb,aAAa,CAAS;IAc/B,CAAC;CACF"}
|
package/build/src/index.d.ts
CHANGED
package/build/src/index.js
CHANGED
package/build/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { unbox } from './index.js';
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
3
|
+
const toString = Object.prototype.toString;
|
|
4
|
+
export function castToBoolean(val) {
|
|
5
|
+
return Boolean(unbox(val));
|
|
6
|
+
}
|
|
7
|
+
export function castToString(val) {
|
|
8
|
+
val = unbox(val);
|
|
9
|
+
const type = typeof val;
|
|
10
|
+
if (type === 'string')
|
|
11
|
+
return val;
|
|
12
|
+
if (val == null ||
|
|
13
|
+
type === 'number' ||
|
|
14
|
+
type === 'boolean' ||
|
|
15
|
+
type === 'bigint') {
|
|
16
|
+
return String(val);
|
|
17
|
+
}
|
|
18
|
+
return toString.call(val);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=cast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cast.js","sourceRoot":"","sources":["../../../src/tools/cast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,6DAA6D;AAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AAE1C,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhB,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA;IAEvB,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAa,CAAA;IAC3C,IACE,GAAG,IAAI,IAAI;QACX,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,QAAQ,EACjB,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { UnexpectedTypeError } from '../errors.js';
|
|
2
|
+
import { unbox } from './index.js';
|
|
3
|
+
export function ensureNumber(val) {
|
|
4
|
+
if (typeof val === 'number' && Number.isFinite(val)) {
|
|
5
|
+
return val;
|
|
6
|
+
}
|
|
7
|
+
if (typeof val === 'bigint') {
|
|
8
|
+
return val;
|
|
9
|
+
}
|
|
10
|
+
if (typeof val === 'object' && val instanceof Number) {
|
|
11
|
+
return ensureNumber(val.valueOf());
|
|
12
|
+
}
|
|
13
|
+
throw new UnexpectedTypeError(['number', 'bigint'], val);
|
|
14
|
+
}
|
|
15
|
+
export function ensureFunction(val) {
|
|
16
|
+
if (typeof val === 'function')
|
|
17
|
+
return val;
|
|
18
|
+
throw new UnexpectedTypeError(['function'], val);
|
|
19
|
+
}
|
|
20
|
+
export function ensureRelationalComparable(val) {
|
|
21
|
+
val = unbox(val);
|
|
22
|
+
const type = typeof val;
|
|
23
|
+
if ((type === 'number' && Number.isNaN(val) === false) ||
|
|
24
|
+
type === 'string' ||
|
|
25
|
+
type === 'bigint') {
|
|
26
|
+
return val;
|
|
27
|
+
}
|
|
28
|
+
throw new UnexpectedTypeError(['number', 'bigint', 'string'], val);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ensure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure.js","sourceRoot":"","sources":["../../../src/tools/ensure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;QACrD,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,IAAI,mBAAmB,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,OAAO,GAAG,CAAA;IACzC,MAAM,IAAI,mBAAmB,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,GAAY;IAEZ,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhB,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA;IAEvB,IACE,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;QAClD,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,QAAQ,EACjB,CAAC;QACD,OAAO,GAA+B,CAAA;IACxC,CAAC;IAED,MAAM,IAAI,mBAAmB,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAA;AACpE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { unbox } from './index.js';
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
3
|
+
var objToStrProto = Object.prototype.toString;
|
|
4
|
+
export function isObject(val) {
|
|
5
|
+
return objToStrProto.call(val) === '[object Object]';
|
|
6
|
+
}
|
|
7
|
+
export function isSimpleValue(val) {
|
|
8
|
+
val = unbox(val);
|
|
9
|
+
const type = typeof val;
|
|
10
|
+
if (type === 'string' ||
|
|
11
|
+
type === 'number' ||
|
|
12
|
+
type === 'boolean' ||
|
|
13
|
+
type === 'bigint') {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (val == null)
|
|
17
|
+
return true;
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../src/tools/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,6DAA6D;AAC7D,IAAI,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AAE7C,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,iBAAiB,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAY;IAEZ,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhB,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA;IAEvB,IACE,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,QAAQ,EACjB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAE5B,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './cast.js';
|
|
2
|
+
export * from './ensure.js';
|
|
3
|
+
export * from './guards.js';
|
|
4
|
+
/**
|
|
5
|
+
* Converts instances of Number, String and Boolean to primitives
|
|
6
|
+
*/
|
|
7
|
+
export declare function unbox(val: unknown): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* Returns more specific type of a value
|
|
10
|
+
*/
|
|
11
|
+
export declare function typeOf(val: unknown): string;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export * from './cast.js';
|
|
2
|
+
export * from './ensure.js';
|
|
3
|
+
export * from './guards.js';
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
5
|
+
const toString = Object.prototype.toString;
|
|
6
|
+
/**
|
|
7
|
+
* Converts instances of Number, String and Boolean to primitives
|
|
8
|
+
*/
|
|
9
|
+
export function unbox(val) {
|
|
10
|
+
if (typeof val !== 'object' || val === null)
|
|
11
|
+
return val;
|
|
12
|
+
const objConstructor = val.constructor;
|
|
13
|
+
if (objConstructor === Number ||
|
|
14
|
+
objConstructor === String ||
|
|
15
|
+
objConstructor === Boolean) {
|
|
16
|
+
return val.valueOf();
|
|
17
|
+
}
|
|
18
|
+
return val;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns more specific type of a value
|
|
22
|
+
*/
|
|
23
|
+
export function typeOf(val) {
|
|
24
|
+
const type = typeof val;
|
|
25
|
+
if (type === 'number') {
|
|
26
|
+
if (Number.isFinite(val))
|
|
27
|
+
return 'number';
|
|
28
|
+
else if (val === Number.NEGATIVE_INFINITY)
|
|
29
|
+
return '-Infinity';
|
|
30
|
+
else if (val === Number.POSITIVE_INFINITY)
|
|
31
|
+
return 'Infinity';
|
|
32
|
+
else
|
|
33
|
+
return 'NaN';
|
|
34
|
+
}
|
|
35
|
+
if (type === 'object') {
|
|
36
|
+
return toString.call(val).slice(8, -1);
|
|
37
|
+
}
|
|
38
|
+
return type;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAE3B,6DAA6D;AAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AAE1C;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IAEvD,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,CAAA;IAEtC,IACE,cAAc,KAAK,MAAM;QACzB,cAAc,KAAK,MAAM;QACzB,cAAc,KAAK,OAAO,EAC1B,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,EAAE,CAAA;IACtB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA;IAEvB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAA;aACpC,IAAI,GAAG,KAAK,MAAM,CAAC,iBAAiB;YAAE,OAAO,WAAW,CAAA;aACxD,IAAI,GAAG,KAAK,MAAM,CAAC,iBAAiB;YAAE,OAAO,UAAU,CAAA;;YACvD,OAAO,KAAK,CAAA;IACnB,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/package.json
CHANGED
package/src/compiler.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
2
|
+
|
|
1
3
|
import { parse } from '@project/simplex-parser'
|
|
2
4
|
import { ExpressionError, UnexpectedTypeError } from './errors.js'
|
|
3
5
|
import {
|
|
@@ -9,16 +11,15 @@ import {
|
|
|
9
11
|
LogicalExpression,
|
|
10
12
|
UnaryExpression
|
|
11
13
|
} from './simplex-tree.js'
|
|
14
|
+
import assert from 'node:assert'
|
|
15
|
+
import { castToBoolean } from './tools/cast.js'
|
|
12
16
|
import {
|
|
13
|
-
bool,
|
|
14
17
|
ensureFunction,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
} from './utils.js'
|
|
21
|
-
import assert from 'node:assert'
|
|
18
|
+
ensureRelationalComparable,
|
|
19
|
+
ensureNumber
|
|
20
|
+
} from './tools/ensure.js'
|
|
21
|
+
import { isSimpleValue } from './tools/guards.js'
|
|
22
|
+
import { castToString, typeOf } from './tools/index.js'
|
|
22
23
|
|
|
23
24
|
interface ContextHelpers<Data, Globals> {
|
|
24
25
|
castToBoolean(this: void, val: unknown): boolean
|
|
@@ -45,7 +46,7 @@ const defaultContextHelpers: ContextHelpers<
|
|
|
45
46
|
Record<string, unknown>,
|
|
46
47
|
Record<string, unknown>
|
|
47
48
|
> = {
|
|
48
|
-
castToBoolean
|
|
49
|
+
castToBoolean,
|
|
49
50
|
|
|
50
51
|
ensureFunction,
|
|
51
52
|
|
|
@@ -67,14 +68,11 @@ const defaultContextHelpers: ContextHelpers<
|
|
|
67
68
|
if (obj == null) return obj
|
|
68
69
|
|
|
69
70
|
if (typeof obj !== 'object') {
|
|
70
|
-
throw new UnexpectedTypeError('object',
|
|
71
|
+
throw new UnexpectedTypeError(['object'], obj)
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
if (
|
|
74
|
-
throw new UnexpectedTypeError(
|
|
75
|
-
'object key to be simple type',
|
|
76
|
-
prettyType(key)
|
|
77
|
-
)
|
|
74
|
+
if (isSimpleValue(key) === false) {
|
|
75
|
+
throw new UnexpectedTypeError(['simple type object key'], key)
|
|
78
76
|
}
|
|
79
77
|
|
|
80
78
|
if (hasOwn(obj, key as any)) {
|
|
@@ -109,9 +107,9 @@ type ExpressionUnaryOperators = Record<
|
|
|
109
107
|
>
|
|
110
108
|
|
|
111
109
|
export const defaultUnaryOperators: ExpressionUnaryOperators = {
|
|
112
|
-
'+': val =>
|
|
113
|
-
'-': val => -
|
|
114
|
-
'not': val => !
|
|
110
|
+
'+': val => ensureNumber(val),
|
|
111
|
+
'-': val => -ensureNumber(val),
|
|
112
|
+
'not': val => !castToBoolean(val),
|
|
115
113
|
'typeof': val => typeof val
|
|
116
114
|
}
|
|
117
115
|
|
|
@@ -125,43 +123,69 @@ export const defaultBinaryOperators: ExpressionBinaryOperators = {
|
|
|
125
123
|
|
|
126
124
|
'==': (a, b) => a === b,
|
|
127
125
|
|
|
128
|
-
|
|
126
|
+
// TIPS give the opportunity to get a base js error
|
|
129
127
|
|
|
130
|
-
'
|
|
128
|
+
'*': (a, b) => {
|
|
129
|
+
// @ts-expect-error
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
131
|
+
return ensureNumber(a) * ensureNumber(b)
|
|
132
|
+
},
|
|
131
133
|
|
|
132
|
-
'
|
|
134
|
+
'+': (a, b) => {
|
|
135
|
+
// @ts-expect-error
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/restrict-plus-operands
|
|
137
|
+
return ensureNumber(a) + ensureNumber(b)
|
|
138
|
+
},
|
|
133
139
|
|
|
134
|
-
'-': (a, b) =>
|
|
140
|
+
'-': (a, b) => {
|
|
141
|
+
// @ts-expect-error
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
143
|
+
return ensureNumber(a) - ensureNumber(b)
|
|
144
|
+
},
|
|
135
145
|
|
|
136
|
-
'/': (a, b) =>
|
|
146
|
+
'/': (a, b) => {
|
|
147
|
+
// @ts-expect-error
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
149
|
+
return ensureNumber(a) / ensureNumber(b)
|
|
150
|
+
},
|
|
137
151
|
|
|
138
152
|
'mod': (a, b) => {
|
|
139
|
-
|
|
153
|
+
// @ts-expect-error
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
155
|
+
return ensureNumber(a) % ensureNumber(b)
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
'^': (a, b) => {
|
|
159
|
+
// @ts-expect-error
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
161
|
+
return ensureNumber(a) ** ensureNumber(b)
|
|
140
162
|
},
|
|
141
163
|
|
|
142
|
-
'
|
|
164
|
+
'&': (a, b) => castToString(a) + castToString(b),
|
|
165
|
+
|
|
166
|
+
'<': (a, b) => ensureRelationalComparable(a) < ensureRelationalComparable(b),
|
|
143
167
|
|
|
144
|
-
'<=': (a, b) =>
|
|
168
|
+
'<=': (a, b) =>
|
|
169
|
+
ensureRelationalComparable(a) <= ensureRelationalComparable(b),
|
|
145
170
|
|
|
146
|
-
'>': (a, b) =>
|
|
171
|
+
'>': (a, b) => ensureRelationalComparable(a) > ensureRelationalComparable(b),
|
|
147
172
|
|
|
148
|
-
'>=': (a, b) =>
|
|
173
|
+
'>=': (a, b) =>
|
|
174
|
+
ensureRelationalComparable(a) >= ensureRelationalComparable(b),
|
|
149
175
|
|
|
150
176
|
'in': (a, b) => {
|
|
151
|
-
if (
|
|
177
|
+
if (isSimpleValue(a) && b != null && typeof b === 'object') {
|
|
152
178
|
return Object.hasOwn(b, a as any)
|
|
153
179
|
} else {
|
|
154
180
|
throw new TypeError(
|
|
155
|
-
`Cannot use "in" operator to search for ${
|
|
181
|
+
`Cannot use "in" operator to search for ${typeOf(a)} key in ${typeOf(b)}`
|
|
156
182
|
)
|
|
157
183
|
}
|
|
158
184
|
},
|
|
159
185
|
|
|
160
|
-
'
|
|
161
|
-
|
|
162
|
-
'and': (a, b) => bool(a) && bool(b),
|
|
186
|
+
'and': (a, b) => castToBoolean(a) && castToBoolean(b),
|
|
163
187
|
|
|
164
|
-
'or': (a, b) =>
|
|
188
|
+
'or': (a, b) => castToBoolean(a) || castToBoolean(b)
|
|
165
189
|
}
|
|
166
190
|
|
|
167
191
|
interface ExpressionOperators {
|
package/src/errors.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Location } from './simplex-tree.js'
|
|
2
|
+
import { typeOf } from './tools/index.js'
|
|
2
3
|
|
|
3
4
|
export class ExpressionError extends Error {
|
|
4
5
|
constructor(
|
|
@@ -13,9 +14,20 @@ export class UnexpectedTypeError extends TypeError {
|
|
|
13
14
|
I18N_STRING = 'UNEXPECTED_TYPE'
|
|
14
15
|
|
|
15
16
|
constructor(
|
|
16
|
-
public
|
|
17
|
-
public
|
|
17
|
+
public expectedTypes: string[],
|
|
18
|
+
public receivedValue: unknown
|
|
18
19
|
) {
|
|
19
|
-
super(
|
|
20
|
+
super(
|
|
21
|
+
`Expected ${
|
|
22
|
+
expectedTypes.length === 1
|
|
23
|
+
? expectedTypes[0]
|
|
24
|
+
: expectedTypes
|
|
25
|
+
.flatMap((t, index) => {
|
|
26
|
+
return [t, index === expectedTypes.length - 2 ? ' or ' : ', ']
|
|
27
|
+
})
|
|
28
|
+
.slice(0, -1)
|
|
29
|
+
.join('')
|
|
30
|
+
}, but got ${typeOf(receivedValue)} instead`
|
|
31
|
+
)
|
|
20
32
|
}
|
|
21
33
|
}
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { unbox } from './index.js'
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
4
|
+
const toString = Object.prototype.toString
|
|
5
|
+
|
|
6
|
+
export function castToBoolean(val: unknown): boolean {
|
|
7
|
+
return Boolean(unbox(val))
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function castToString(val: unknown): string {
|
|
11
|
+
val = unbox(val)
|
|
12
|
+
|
|
13
|
+
const type = typeof val
|
|
14
|
+
|
|
15
|
+
if (type === 'string') return val as string
|
|
16
|
+
if (
|
|
17
|
+
val == null ||
|
|
18
|
+
type === 'number' ||
|
|
19
|
+
type === 'boolean' ||
|
|
20
|
+
type === 'bigint'
|
|
21
|
+
) {
|
|
22
|
+
return String(val)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return toString.call(val)
|
|
26
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { UnexpectedTypeError } from '../errors.js'
|
|
2
|
+
import { unbox } from './index.js'
|
|
3
|
+
|
|
4
|
+
export function ensureNumber(val: unknown): number | bigint {
|
|
5
|
+
if (typeof val === 'number' && Number.isFinite(val)) {
|
|
6
|
+
return val
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if (typeof val === 'bigint') {
|
|
10
|
+
return val
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (typeof val === 'object' && val instanceof Number) {
|
|
14
|
+
return ensureNumber(val.valueOf())
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
throw new UnexpectedTypeError(['number', 'bigint'], val)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function ensureFunction(val: unknown): Function {
|
|
21
|
+
if (typeof val === 'function') return val
|
|
22
|
+
throw new UnexpectedTypeError(['function'], val)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function ensureRelationalComparable(
|
|
26
|
+
val: unknown
|
|
27
|
+
): number | string | bigint {
|
|
28
|
+
val = unbox(val)
|
|
29
|
+
|
|
30
|
+
const type = typeof val
|
|
31
|
+
|
|
32
|
+
if (
|
|
33
|
+
(type === 'number' && Number.isNaN(val) === false) ||
|
|
34
|
+
type === 'string' ||
|
|
35
|
+
type === 'bigint'
|
|
36
|
+
) {
|
|
37
|
+
return val as number | string | bigint
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
throw new UnexpectedTypeError(['number', 'bigint', 'string'], val)
|
|
41
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { unbox } from './index.js'
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
4
|
+
var objToStrProto = Object.prototype.toString
|
|
5
|
+
|
|
6
|
+
export function isObject(val: unknown): val is object {
|
|
7
|
+
return objToStrProto.call(val) === '[object Object]'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function isSimpleValue(
|
|
11
|
+
val: unknown
|
|
12
|
+
): val is number | string | boolean | bigint | null | undefined {
|
|
13
|
+
val = unbox(val)
|
|
14
|
+
|
|
15
|
+
const type = typeof val
|
|
16
|
+
|
|
17
|
+
if (
|
|
18
|
+
type === 'string' ||
|
|
19
|
+
type === 'number' ||
|
|
20
|
+
type === 'boolean' ||
|
|
21
|
+
type === 'bigint'
|
|
22
|
+
) {
|
|
23
|
+
return true
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (val == null) return true
|
|
27
|
+
|
|
28
|
+
return false
|
|
29
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export * from './cast.js'
|
|
2
|
+
export * from './ensure.js'
|
|
3
|
+
export * from './guards.js'
|
|
4
|
+
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
6
|
+
const toString = Object.prototype.toString
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Converts instances of Number, String and Boolean to primitives
|
|
10
|
+
*/
|
|
11
|
+
export function unbox(val: unknown) {
|
|
12
|
+
if (typeof val !== 'object' || val === null) return val
|
|
13
|
+
|
|
14
|
+
const objConstructor = val.constructor
|
|
15
|
+
|
|
16
|
+
if (
|
|
17
|
+
objConstructor === Number ||
|
|
18
|
+
objConstructor === String ||
|
|
19
|
+
objConstructor === Boolean
|
|
20
|
+
) {
|
|
21
|
+
return val.valueOf()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return val
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns more specific type of a value
|
|
29
|
+
*/
|
|
30
|
+
export function typeOf(val: unknown) {
|
|
31
|
+
const type = typeof val
|
|
32
|
+
|
|
33
|
+
if (type === 'number') {
|
|
34
|
+
if (Number.isFinite(val)) return 'number'
|
|
35
|
+
else if (val === Number.NEGATIVE_INFINITY) return '-Infinity'
|
|
36
|
+
else if (val === Number.POSITIVE_INFINITY) return 'Infinity'
|
|
37
|
+
else return 'NaN'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (type === 'object') {
|
|
41
|
+
return toString.call(val).slice(8, -1)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return type
|
|
45
|
+
}
|
package/build/src/utils.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Converts instances of Number, String and Boolean to primitives
|
|
3
|
-
*/
|
|
4
|
-
export declare function unbox(value: unknown): {} | null | undefined;
|
|
5
|
-
export declare function num(val: unknown): number;
|
|
6
|
-
export declare function toStr(val: unknown): string;
|
|
7
|
-
export declare function relComp(val: unknown): number | string | bigint;
|
|
8
|
-
export declare function bool(val: unknown): boolean;
|
|
9
|
-
export declare function ensureFunction(val: unknown): Function;
|
|
10
|
-
export declare function isObj(val: unknown): val is object;
|
|
11
|
-
export declare function isSimple(val: unknown): val is number | string | boolean | bigint | null | undefined;
|
|
12
|
-
/**
|
|
13
|
-
* Returns the type of a value in a neat, user-readable way
|
|
14
|
-
*/
|
|
15
|
-
export declare function prettyType(val: unknown): "object" | "number" | "undefined" | "null" | "true" | "false" | "-infinity" | "infinity" | "NaN" | "string" | "unknown type" | "array";
|
package/build/src/utils.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
|
-
import { UnexpectedTypeError } from './errors.js';
|
|
3
|
-
/**
|
|
4
|
-
* Converts instances of Number, String and Boolean to primitives
|
|
5
|
-
*/
|
|
6
|
-
export function unbox(value) {
|
|
7
|
-
if (typeof value !== 'object')
|
|
8
|
-
return value;
|
|
9
|
-
if (value instanceof Number ||
|
|
10
|
-
value instanceof String ||
|
|
11
|
-
value instanceof Boolean) {
|
|
12
|
-
return value.valueOf();
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
export function num(val) {
|
|
17
|
-
val = unbox(val);
|
|
18
|
-
if (typeof val !== 'number' || Number.isFinite(val) === false) {
|
|
19
|
-
throw new UnexpectedTypeError('number', prettyType(val));
|
|
20
|
-
}
|
|
21
|
-
return val;
|
|
22
|
-
}
|
|
23
|
-
export function toStr(val) {
|
|
24
|
-
val = unbox(val);
|
|
25
|
-
const type = typeof val;
|
|
26
|
-
if (type === 'string')
|
|
27
|
-
return val;
|
|
28
|
-
if (type === 'number' || type === 'boolean' || type === 'bigint') {
|
|
29
|
-
return String(val);
|
|
30
|
-
}
|
|
31
|
-
throw new UnexpectedTypeError('string', prettyType(val));
|
|
32
|
-
}
|
|
33
|
-
export function relComp(val) {
|
|
34
|
-
val = unbox(val);
|
|
35
|
-
const type = typeof val;
|
|
36
|
-
if (type !== 'number' && type !== 'string' && type !== 'bigint') {
|
|
37
|
-
throw new UnexpectedTypeError('number or string', prettyType(val));
|
|
38
|
-
}
|
|
39
|
-
return val;
|
|
40
|
-
}
|
|
41
|
-
export function bool(val) {
|
|
42
|
-
return Boolean(unbox(val));
|
|
43
|
-
}
|
|
44
|
-
export function ensureFunction(val) {
|
|
45
|
-
if (typeof val === 'function')
|
|
46
|
-
return val;
|
|
47
|
-
throw new UnexpectedTypeError('function', prettyType(val));
|
|
48
|
-
}
|
|
49
|
-
var objToStrProto = Object.prototype.toString;
|
|
50
|
-
export function isObj(val) {
|
|
51
|
-
return objToStrProto.call(val) === '[object Object]';
|
|
52
|
-
}
|
|
53
|
-
export function isSimple(val) {
|
|
54
|
-
val = unbox(val);
|
|
55
|
-
const type = typeof val;
|
|
56
|
-
if (type === 'string' ||
|
|
57
|
-
type === 'number' ||
|
|
58
|
-
type === 'boolean' ||
|
|
59
|
-
type === 'bigint') {
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
if (val == null)
|
|
63
|
-
return true;
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Returns the type of a value in a neat, user-readable way
|
|
68
|
-
*/
|
|
69
|
-
export function prettyType(val) {
|
|
70
|
-
val = unbox(val);
|
|
71
|
-
if (val === undefined)
|
|
72
|
-
return 'undefined';
|
|
73
|
-
if (val === null)
|
|
74
|
-
return 'null';
|
|
75
|
-
if (val === true)
|
|
76
|
-
return 'true';
|
|
77
|
-
if (val === false)
|
|
78
|
-
return 'false';
|
|
79
|
-
const type = typeof val;
|
|
80
|
-
if (type === 'number') {
|
|
81
|
-
if (Number.isFinite(val))
|
|
82
|
-
return 'number';
|
|
83
|
-
else if (val === Number.NEGATIVE_INFINITY)
|
|
84
|
-
return '-infinity';
|
|
85
|
-
else if (val === Number.POSITIVE_INFINITY)
|
|
86
|
-
return 'infinity';
|
|
87
|
-
else
|
|
88
|
-
return 'NaN';
|
|
89
|
-
}
|
|
90
|
-
if (type === 'string')
|
|
91
|
-
return 'string';
|
|
92
|
-
if (type !== 'object' && type !== 'function')
|
|
93
|
-
return 'unknown type'; // TODO Get more detailed type info
|
|
94
|
-
if (Array.isArray(val))
|
|
95
|
-
return 'array';
|
|
96
|
-
return 'object';
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=utils.js.map
|
package/build/src/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/src/utils.ts
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
2
|
-
import { UnexpectedTypeError } from './errors.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Converts instances of Number, String and Boolean to primitives
|
|
6
|
-
*/
|
|
7
|
-
export function unbox(value: unknown) {
|
|
8
|
-
if (typeof value !== 'object') return value
|
|
9
|
-
|
|
10
|
-
if (
|
|
11
|
-
value instanceof Number ||
|
|
12
|
-
value instanceof String ||
|
|
13
|
-
value instanceof Boolean
|
|
14
|
-
) {
|
|
15
|
-
return value.valueOf()
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return value
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function num(val: unknown): number {
|
|
22
|
-
val = unbox(val)
|
|
23
|
-
|
|
24
|
-
if (typeof val !== 'number' || Number.isFinite(val) === false) {
|
|
25
|
-
throw new UnexpectedTypeError('number', prettyType(val))
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return val
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function toStr(val: unknown): string {
|
|
32
|
-
val = unbox(val)
|
|
33
|
-
|
|
34
|
-
const type = typeof val
|
|
35
|
-
|
|
36
|
-
if (type === 'string') return val as string
|
|
37
|
-
if (type === 'number' || type === 'boolean' || type === 'bigint') {
|
|
38
|
-
return String(val)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
throw new UnexpectedTypeError('string', prettyType(val))
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function relComp(val: unknown): number | string | bigint {
|
|
45
|
-
val = unbox(val)
|
|
46
|
-
|
|
47
|
-
const type = typeof val
|
|
48
|
-
|
|
49
|
-
if (type !== 'number' && type !== 'string' && type !== 'bigint') {
|
|
50
|
-
throw new UnexpectedTypeError('number or string', prettyType(val))
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return val as number | string | bigint
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function bool(val: unknown): boolean {
|
|
57
|
-
return Boolean(unbox(val))
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function ensureFunction(val: unknown): Function {
|
|
61
|
-
if (typeof val === 'function') return val
|
|
62
|
-
throw new UnexpectedTypeError('function', prettyType(val))
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
var objToStrProto = Object.prototype.toString
|
|
66
|
-
|
|
67
|
-
export function isObj(val: unknown): val is object {
|
|
68
|
-
return objToStrProto.call(val) === '[object Object]'
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function isSimple(
|
|
72
|
-
val: unknown
|
|
73
|
-
): val is number | string | boolean | bigint | null | undefined {
|
|
74
|
-
val = unbox(val)
|
|
75
|
-
|
|
76
|
-
const type = typeof val
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
type === 'string' ||
|
|
80
|
-
type === 'number' ||
|
|
81
|
-
type === 'boolean' ||
|
|
82
|
-
type === 'bigint'
|
|
83
|
-
) {
|
|
84
|
-
return true
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (val == null) return true
|
|
88
|
-
|
|
89
|
-
return false
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Returns the type of a value in a neat, user-readable way
|
|
94
|
-
*/
|
|
95
|
-
export function prettyType(val: unknown) {
|
|
96
|
-
val = unbox(val)
|
|
97
|
-
|
|
98
|
-
if (val === undefined) return 'undefined'
|
|
99
|
-
if (val === null) return 'null'
|
|
100
|
-
if (val === true) return 'true'
|
|
101
|
-
if (val === false) return 'false'
|
|
102
|
-
|
|
103
|
-
const type = typeof val
|
|
104
|
-
|
|
105
|
-
if (type === 'number') {
|
|
106
|
-
if (Number.isFinite(val)) return 'number'
|
|
107
|
-
else if (val === Number.NEGATIVE_INFINITY) return '-infinity'
|
|
108
|
-
else if (val === Number.POSITIVE_INFINITY) return 'infinity'
|
|
109
|
-
else return 'NaN'
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (type === 'string') return 'string'
|
|
113
|
-
|
|
114
|
-
if (type !== 'object' && type !== 'function') return 'unknown type' // TODO Get more detailed type info
|
|
115
|
-
|
|
116
|
-
if (Array.isArray(val)) return 'array'
|
|
117
|
-
|
|
118
|
-
return 'object'
|
|
119
|
-
}
|