bonsai-js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/LICENSE +21 -0
- package/README.md +478 -0
- package/dist/errors-t5i9AEaf.mjs +165 -0
- package/dist/errors-t5i9AEaf.mjs.map +1 -0
- package/dist/index.d.mts +77 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2226 -0
- package/dist/index.mjs.map +1 -0
- package/dist/stdlib/index.d.mts +23 -0
- package/dist/stdlib/index.d.mts.map +1 -0
- package/dist/stdlib/index.mjs +178 -0
- package/dist/stdlib/index.mjs.map +1 -0
- package/dist/types-Cbouo-QC.d.mts +244 -0
- package/dist/types-Cbouo-QC.d.mts.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
type BinaryOperator = '||' | '&&' | '==' | '!=' | '<' | '>' | '<=' | '>=' | '+' | '-' | '*' | '/' | '%' | '**' | 'in' | 'not';
|
|
3
|
+
type UnaryOperator = '!' | '-' | '+';
|
|
4
|
+
type BinaryExpressionOperator = Exclude<BinaryOperator, 'not'> | 'not in' | '??';
|
|
5
|
+
type OperatorValue = BinaryOperator | UnaryOperator;
|
|
6
|
+
type PunctuationValue = '(' | ')' | '[' | ']' | '{' | '}' | ',' | '.' | ':' | '?';
|
|
7
|
+
interface BaseToken {
|
|
8
|
+
start: number;
|
|
9
|
+
end: number;
|
|
10
|
+
}
|
|
11
|
+
type Token = {
|
|
12
|
+
type: 'Number';
|
|
13
|
+
value: string;
|
|
14
|
+
} & BaseToken | {
|
|
15
|
+
type: 'String';
|
|
16
|
+
value: string;
|
|
17
|
+
} & BaseToken | {
|
|
18
|
+
type: 'TemplateLiteral';
|
|
19
|
+
value: string;
|
|
20
|
+
} & BaseToken | {
|
|
21
|
+
type: 'Boolean';
|
|
22
|
+
value: 'true' | 'false';
|
|
23
|
+
} & BaseToken | {
|
|
24
|
+
type: 'Null';
|
|
25
|
+
value: 'null';
|
|
26
|
+
} & BaseToken | {
|
|
27
|
+
type: 'Undefined';
|
|
28
|
+
value: 'undefined';
|
|
29
|
+
} & BaseToken | {
|
|
30
|
+
type: 'Identifier';
|
|
31
|
+
value: string;
|
|
32
|
+
} & BaseToken | {
|
|
33
|
+
type: 'Operator';
|
|
34
|
+
value: OperatorValue;
|
|
35
|
+
} & BaseToken | {
|
|
36
|
+
type: 'Punctuation';
|
|
37
|
+
value: PunctuationValue;
|
|
38
|
+
} & BaseToken | {
|
|
39
|
+
type: 'Pipe';
|
|
40
|
+
value: '|>';
|
|
41
|
+
} & BaseToken | {
|
|
42
|
+
type: 'OptionalChain';
|
|
43
|
+
value: '?.';
|
|
44
|
+
} & BaseToken | {
|
|
45
|
+
type: 'NullishCoalescing';
|
|
46
|
+
value: '??';
|
|
47
|
+
} & BaseToken | {
|
|
48
|
+
type: 'Spread';
|
|
49
|
+
value: '...';
|
|
50
|
+
} & BaseToken | {
|
|
51
|
+
type: 'EOF';
|
|
52
|
+
value: '';
|
|
53
|
+
} & BaseToken;
|
|
54
|
+
type TokenType = Token['type'];
|
|
55
|
+
interface BaseNode {
|
|
56
|
+
start: number;
|
|
57
|
+
end: number;
|
|
58
|
+
}
|
|
59
|
+
interface NumberLiteral extends BaseNode {
|
|
60
|
+
type: 'NumberLiteral';
|
|
61
|
+
value: number;
|
|
62
|
+
}
|
|
63
|
+
interface StringLiteral extends BaseNode {
|
|
64
|
+
type: 'StringLiteral';
|
|
65
|
+
value: string;
|
|
66
|
+
}
|
|
67
|
+
interface BooleanLiteral extends BaseNode {
|
|
68
|
+
type: 'BooleanLiteral';
|
|
69
|
+
value: boolean;
|
|
70
|
+
}
|
|
71
|
+
interface NullLiteral extends BaseNode {
|
|
72
|
+
type: 'NullLiteral';
|
|
73
|
+
value: null;
|
|
74
|
+
}
|
|
75
|
+
interface UndefinedLiteral extends BaseNode {
|
|
76
|
+
type: 'UndefinedLiteral';
|
|
77
|
+
value: undefined;
|
|
78
|
+
}
|
|
79
|
+
interface Identifier extends BaseNode {
|
|
80
|
+
type: 'Identifier';
|
|
81
|
+
name: string;
|
|
82
|
+
}
|
|
83
|
+
interface BinaryExpression extends BaseNode {
|
|
84
|
+
type: 'BinaryExpression';
|
|
85
|
+
operator: BinaryExpressionOperator;
|
|
86
|
+
left: ASTNode;
|
|
87
|
+
right: ASTNode;
|
|
88
|
+
}
|
|
89
|
+
interface UnaryExpression extends BaseNode {
|
|
90
|
+
type: 'UnaryExpression';
|
|
91
|
+
operator: UnaryOperator;
|
|
92
|
+
operand: ASTNode;
|
|
93
|
+
}
|
|
94
|
+
interface ConditionalExpression extends BaseNode {
|
|
95
|
+
type: 'ConditionalExpression';
|
|
96
|
+
test: ASTNode;
|
|
97
|
+
consequent: ASTNode;
|
|
98
|
+
alternate: ASTNode;
|
|
99
|
+
}
|
|
100
|
+
interface MemberExpression extends BaseNode {
|
|
101
|
+
type: 'MemberExpression';
|
|
102
|
+
object: ASTNode;
|
|
103
|
+
property: ASTNode;
|
|
104
|
+
computed: boolean;
|
|
105
|
+
}
|
|
106
|
+
interface OptionalMemberExpression extends BaseNode {
|
|
107
|
+
type: 'OptionalMemberExpression';
|
|
108
|
+
object: ASTNode;
|
|
109
|
+
property: ASTNode;
|
|
110
|
+
computed: boolean;
|
|
111
|
+
}
|
|
112
|
+
interface ArrayLiteral extends BaseNode {
|
|
113
|
+
type: 'ArrayLiteral';
|
|
114
|
+
readonly elements: readonly (ASTNode | SpreadElement)[];
|
|
115
|
+
}
|
|
116
|
+
interface ObjectLiteral extends BaseNode {
|
|
117
|
+
type: 'ObjectLiteral';
|
|
118
|
+
readonly properties: readonly ObjectProperty[];
|
|
119
|
+
}
|
|
120
|
+
interface ObjectProperty extends BaseNode {
|
|
121
|
+
type: 'ObjectProperty';
|
|
122
|
+
key: ASTNode;
|
|
123
|
+
value: ASTNode;
|
|
124
|
+
computed: boolean;
|
|
125
|
+
}
|
|
126
|
+
interface CallExpression extends BaseNode {
|
|
127
|
+
type: 'CallExpression';
|
|
128
|
+
callee: ASTNode;
|
|
129
|
+
readonly args: readonly ASTNode[];
|
|
130
|
+
}
|
|
131
|
+
interface PipeExpression extends BaseNode {
|
|
132
|
+
type: 'PipeExpression';
|
|
133
|
+
input: ASTNode;
|
|
134
|
+
transform: ASTNode;
|
|
135
|
+
}
|
|
136
|
+
interface TemplateLiteral extends BaseNode {
|
|
137
|
+
type: 'TemplateLiteral';
|
|
138
|
+
readonly parts: readonly (StringLiteral | ASTNode)[];
|
|
139
|
+
}
|
|
140
|
+
interface SpreadElement extends BaseNode {
|
|
141
|
+
type: 'SpreadElement';
|
|
142
|
+
argument: ASTNode;
|
|
143
|
+
}
|
|
144
|
+
interface LambdaAccessor extends BaseNode {
|
|
145
|
+
type: 'LambdaAccessor';
|
|
146
|
+
property: string;
|
|
147
|
+
}
|
|
148
|
+
interface LambdaExpression extends BaseNode {
|
|
149
|
+
type: 'LambdaExpression';
|
|
150
|
+
body: ASTNode;
|
|
151
|
+
}
|
|
152
|
+
type ASTNode = NumberLiteral | StringLiteral | BooleanLiteral | NullLiteral | UndefinedLiteral | Identifier | BinaryExpression | UnaryExpression | ConditionalExpression | MemberExpression | OptionalMemberExpression | ArrayLiteral | ObjectLiteral | CallExpression | PipeExpression | TemplateLiteral | SpreadElement | LambdaAccessor | LambdaExpression;
|
|
153
|
+
/** Options for creating a Bonsai instance via {@link BonsaiInstance}. */
|
|
154
|
+
interface BonsaiOptions {
|
|
155
|
+
/** Cooperative timeout in milliseconds. 0 (default) disables timeout checks. */
|
|
156
|
+
timeout?: number;
|
|
157
|
+
/** Maximum expression nesting depth. Default: 100. */
|
|
158
|
+
maxDepth?: number;
|
|
159
|
+
/** Maximum array literal or spread size. Default: 100,000. */
|
|
160
|
+
maxArrayLength?: number;
|
|
161
|
+
/** Allowlist of property/method names expressions can access. */
|
|
162
|
+
allowedProperties?: string[];
|
|
163
|
+
/** Denylist of property/method names expressions cannot access. */
|
|
164
|
+
deniedProperties?: string[];
|
|
165
|
+
/** LRU cache size for compiled expressions and parsed ASTs. Default: 256. */
|
|
166
|
+
cacheSize?: number;
|
|
167
|
+
}
|
|
168
|
+
/** A transform receives the piped value as its first argument: `value |> myTransform(arg)`. */
|
|
169
|
+
type TransformFn = (value: unknown, ...args: unknown[]) => unknown | Promise<unknown>;
|
|
170
|
+
/** A function is called directly by name: `myFunction(arg1, arg2)`. */
|
|
171
|
+
type FunctionFn = (...args: unknown[]) => unknown | Promise<unknown>;
|
|
172
|
+
/** A plugin receives the Bonsai instance and extends it with transforms or functions. */
|
|
173
|
+
type BonsaiPlugin = (instance: BonsaiInstance) => void;
|
|
174
|
+
/** Core Bonsai instance returned by `bonsai()`. */
|
|
175
|
+
interface BonsaiInstance {
|
|
176
|
+
/** Register a plugin that extends this instance with transforms/functions. */
|
|
177
|
+
use(plugin: BonsaiPlugin): this;
|
|
178
|
+
/** Register a named transform for use with the pipe operator (`|>`). */
|
|
179
|
+
addTransform(name: string, fn: TransformFn): this;
|
|
180
|
+
/** Register a named function callable as `name(args)` in expressions. */
|
|
181
|
+
addFunction(name: string, fn: FunctionFn): this;
|
|
182
|
+
/** Remove a previously registered transform. Returns true if it existed. */
|
|
183
|
+
removeTransform(name: string): boolean;
|
|
184
|
+
/** Remove a previously registered function. Returns true if it existed. */
|
|
185
|
+
removeFunction(name: string): boolean;
|
|
186
|
+
/** Check whether a transform with the given name is registered. */
|
|
187
|
+
hasTransform(name: string): boolean;
|
|
188
|
+
/** Check whether a function with the given name is registered. */
|
|
189
|
+
hasFunction(name: string): boolean;
|
|
190
|
+
/** List all registered transform names. */
|
|
191
|
+
listTransforms(): string[];
|
|
192
|
+
/** List all registered function names. */
|
|
193
|
+
listFunctions(): string[];
|
|
194
|
+
/** Clear the compiled expression and AST caches. */
|
|
195
|
+
clearCache(): void;
|
|
196
|
+
/** Pre-compile an expression for repeated evaluation. */
|
|
197
|
+
compile(expression: string): CompiledExpression;
|
|
198
|
+
/** Evaluate an expression asynchronously. Required when transforms/functions are async. */
|
|
199
|
+
evaluate<T = unknown>(expression: string, context?: Record<string, unknown>): Promise<T>;
|
|
200
|
+
/** Evaluate an expression synchronously. Throws if a transform/function returns a Promise. */
|
|
201
|
+
evaluateSync<T = unknown>(expression: string, context?: Record<string, unknown>): T;
|
|
202
|
+
/** Check if an expression is syntactically valid without evaluating it. */
|
|
203
|
+
validate(expression: string): ValidationResult;
|
|
204
|
+
}
|
|
205
|
+
/** A pre-compiled expression that can be evaluated repeatedly with different contexts. */
|
|
206
|
+
interface CompiledExpression {
|
|
207
|
+
/** Evaluate asynchronously. Required when transforms/functions are async. */
|
|
208
|
+
evaluate<T = unknown>(context?: Record<string, unknown>): Promise<T>;
|
|
209
|
+
/** Evaluate synchronously. Throws if a transform/function returns a Promise. */
|
|
210
|
+
evaluateSync<T = unknown>(context?: Record<string, unknown>): T;
|
|
211
|
+
/** The optimized AST after constant folding and dead branch elimination. */
|
|
212
|
+
readonly ast: ASTNode;
|
|
213
|
+
/** The original expression string. */
|
|
214
|
+
readonly source: string;
|
|
215
|
+
}
|
|
216
|
+
/** Identifiers, transforms, and functions referenced by a parsed expression. */
|
|
217
|
+
interface ExpressionReferences {
|
|
218
|
+
identifiers: string[];
|
|
219
|
+
transforms: string[];
|
|
220
|
+
functions: string[];
|
|
221
|
+
}
|
|
222
|
+
/** Result of {@link BonsaiInstance.validate}. Discriminated on the `valid` field. */
|
|
223
|
+
type ValidationResult = {
|
|
224
|
+
valid: true;
|
|
225
|
+
errors: [];
|
|
226
|
+
ast: ASTNode;
|
|
227
|
+
references: ExpressionReferences;
|
|
228
|
+
} | {
|
|
229
|
+
valid: false;
|
|
230
|
+
errors: ValidationError[];
|
|
231
|
+
};
|
|
232
|
+
/** A syntax error with position information from {@link BonsaiInstance.validate}. */
|
|
233
|
+
interface ValidationError {
|
|
234
|
+
message: string;
|
|
235
|
+
position: {
|
|
236
|
+
line: number;
|
|
237
|
+
column: number;
|
|
238
|
+
};
|
|
239
|
+
suggestion?: string;
|
|
240
|
+
formatted?: string;
|
|
241
|
+
}
|
|
242
|
+
//#endregion
|
|
243
|
+
export { CompiledExpression as a, Token as c, ValidationResult as d, BonsaiPlugin as i, TokenType as l, BonsaiInstance as n, ExpressionReferences as o, BonsaiOptions as r, FunctionFn as s, ASTNode as t, TransformFn as u };
|
|
244
|
+
//# sourceMappingURL=types-Cbouo-QC.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-Cbouo-QC.d.mts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bonsai-js",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A modern, high-performance expression evaluator for JavaScript",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.mts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.mts",
|
|
12
|
+
"import": "./dist/index.mjs"
|
|
13
|
+
},
|
|
14
|
+
"./stdlib": {
|
|
15
|
+
"types": "./dist/stdlib/index.d.mts",
|
|
16
|
+
"import": "./dist/stdlib/index.mjs"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"LICENSE",
|
|
22
|
+
"CHANGELOG.md"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/danfry1/bonsai-js"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/danfry1/bonsai-js#readme",
|
|
32
|
+
"bugs": "https://github.com/danfry1/bonsai-js/issues",
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsdown",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"test:watch": "vitest",
|
|
37
|
+
"bench": "vitest bench",
|
|
38
|
+
"bench:gate": "bun run scripts/perf-gate.ts",
|
|
39
|
+
"check:package": "bun run build && bun run scripts/check-package.ts",
|
|
40
|
+
"lint": "oxlint --deny-warnings src tests scripts",
|
|
41
|
+
"typecheck": "tsc -p tsconfig.typecheck.json --noEmit",
|
|
42
|
+
"build:website": "bun website/build.ts",
|
|
43
|
+
"prepublishOnly": "bun run lint && bun run typecheck && bun run test && bun run bench:gate && bun run check:package"
|
|
44
|
+
},
|
|
45
|
+
"keywords": ["expression", "evaluator", "parser", "safe", "sandbox", "template", "pipe", "transform", "formula", "dsl", "ast", "jexl", "compiler"],
|
|
46
|
+
"author": "Daniel Fry",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=18"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"jexl": "^2.3.0",
|
|
53
|
+
"oxlint": "^1.51.0",
|
|
54
|
+
"tsdown": "^0.21.0",
|
|
55
|
+
"typescript": "^5.9.3",
|
|
56
|
+
"vitest": "^4.0.18"
|
|
57
|
+
}
|
|
58
|
+
}
|