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.
@@ -0,0 +1,165 @@
1
+ //#region src/errors.ts
2
+ const NEWLINE_CODE = 10;
3
+ /** Syntax error thrown during parsing. Contains source location and formatted caret display. */
4
+ var ExpressionError = class extends Error {
5
+ rawMessage;
6
+ start;
7
+ end;
8
+ source;
9
+ suggestion;
10
+ constructor(message, location, suggestion) {
11
+ const formatted = formatError(message, location, suggestion);
12
+ super(formatted);
13
+ this.name = "ExpressionError";
14
+ this.rawMessage = message;
15
+ this.start = location.start;
16
+ this.end = location.end;
17
+ this.source = location.source;
18
+ this.suggestion = suggestion;
19
+ }
20
+ };
21
+ /** Runtime type error when a transform, function, or method receives an unexpected value type. */
22
+ var BonsaiTypeError = class extends Error {
23
+ transform;
24
+ expected;
25
+ received;
26
+ location;
27
+ formatted;
28
+ constructor(transform, expected, value) {
29
+ let received;
30
+ if (value === null) received = "null";
31
+ else if (value instanceof Promise) received = "Promise";
32
+ else if (Array.isArray(value)) received = "array";
33
+ else received = typeof value;
34
+ super(`"${transform}" expects ${expected}, got ${received}`);
35
+ this.name = "BonsaiTypeError";
36
+ this.transform = transform;
37
+ this.expected = expected;
38
+ this.received = received;
39
+ }
40
+ };
41
+ /** Security violation: blocked property access, timeout, depth limit, or array size limit. */
42
+ var BonsaiSecurityError = class extends Error {
43
+ code;
44
+ location;
45
+ formatted;
46
+ constructor(code, message) {
47
+ super(message);
48
+ this.name = "BonsaiSecurityError";
49
+ this.code = code;
50
+ }
51
+ };
52
+ /** Unknown transform, function, or method name. Includes a "did you mean?" suggestion when possible. */
53
+ var BonsaiReferenceError = class extends Error {
54
+ identifier;
55
+ kind;
56
+ suggestion;
57
+ location;
58
+ formatted;
59
+ constructor(kind, identifier, suggestion) {
60
+ const msg = suggestion ? `Unknown ${kind} "${identifier}". Did you mean "${suggestion}"?` : `Unknown ${kind} "${identifier}"`;
61
+ super(msg);
62
+ this.name = "BonsaiReferenceError";
63
+ this.identifier = identifier;
64
+ this.kind = kind;
65
+ this.suggestion = suggestion;
66
+ }
67
+ };
68
+ function clampOffset(source, offset) {
69
+ return Math.max(0, Math.min(offset, source.length));
70
+ }
71
+ function getLineStart(source, offset) {
72
+ let index = clampOffset(source, offset);
73
+ while (index > 0 && source.charCodeAt(index - 1) !== NEWLINE_CODE) index--;
74
+ return index;
75
+ }
76
+ function getLineEnd(source, offset) {
77
+ let index = clampOffset(source, offset);
78
+ while (index < source.length && source.charCodeAt(index) !== NEWLINE_CODE) index++;
79
+ return index;
80
+ }
81
+ function offsetToPosition(source, offset) {
82
+ const safeOffset = clampOffset(source, offset);
83
+ let line = 1;
84
+ let column = 1;
85
+ for (let index = 0; index < safeOffset; index++) if (source.charCodeAt(index) === NEWLINE_CODE) {
86
+ line++;
87
+ column = 1;
88
+ } else column++;
89
+ return {
90
+ line,
91
+ column,
92
+ offset: safeOffset
93
+ };
94
+ }
95
+ function hasErrorLocation(error) {
96
+ return (error instanceof BonsaiTypeError || error instanceof BonsaiSecurityError || error instanceof BonsaiReferenceError) && error.location !== void 0;
97
+ }
98
+ function attachLocation(error, source, start, end) {
99
+ if (error instanceof BonsaiTypeError || error instanceof BonsaiSecurityError || error instanceof BonsaiReferenceError) {
100
+ if (!error.location) {
101
+ error.location = {
102
+ source,
103
+ start,
104
+ end
105
+ };
106
+ error.formatted = formatError(error.message, error.location);
107
+ }
108
+ }
109
+ }
110
+ /** Format an error message with source context, caret display, and position info. */
111
+ function formatError(message, location, suggestion) {
112
+ const { source } = location;
113
+ const start = clampOffset(source, location.start);
114
+ const rawEnd = clampOffset(source, location.end);
115
+ const end = Math.max(start + 1, rawEnd);
116
+ const startPos = offsetToPosition(source, start);
117
+ const lineStart = getLineStart(source, start);
118
+ const lineEnd = getLineEnd(source, start);
119
+ const lineText = source.slice(lineStart, lineEnd);
120
+ const caretStart = start - lineStart;
121
+ const caretEnd = Math.min(end, lineEnd);
122
+ const caretLength = Math.max(1, caretEnd - start);
123
+ const gutter = `${startPos.line} | `;
124
+ let result = `${message}\n\n${gutter}${lineText}\n${" ".repeat(gutter.length + caretStart)}${"^".repeat(caretLength)}`;
125
+ if (suggestion) result += ` Did you mean "${suggestion}"?`;
126
+ result += `\n\nat line ${startPos.line}, column ${startPos.column} (offset ${start}-${end})`;
127
+ return result;
128
+ }
129
+ /** Format any Bonsai error into a human-readable string with source context when available. */
130
+ function formatBonsaiError(error) {
131
+ if (error instanceof ExpressionError) return error.message;
132
+ if (hasErrorLocation(error)) return error.formatted ?? formatError(error.message, error.location);
133
+ if (error instanceof Error) return error.message;
134
+ return String(error);
135
+ }
136
+ const MAX_SUGGEST_LENGTH = 64;
137
+ function suggest(input, known, maxDistance = 2) {
138
+ if (input.length > MAX_SUGGEST_LENGTH) return void 0;
139
+ let best;
140
+ let bestDistance = maxDistance + 1;
141
+ for (const candidate of known) {
142
+ const distance = levenshtein(input, candidate);
143
+ if (distance < bestDistance) {
144
+ bestDistance = distance;
145
+ best = candidate;
146
+ }
147
+ }
148
+ return best;
149
+ }
150
+ function levenshtein(a, b) {
151
+ const m = a.length;
152
+ const n = b.length;
153
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
154
+ for (let i = 0; i <= m; i++) dp[i][0] = i;
155
+ for (let j = 0; j <= n; j++) dp[0][j] = j;
156
+ for (let i = 1; i <= m; i++) for (let j = 1; j <= n; j++) {
157
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
158
+ dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);
159
+ }
160
+ return dp[m][n];
161
+ }
162
+ //#endregion
163
+ export { attachLocation as a, offsetToPosition as c, ExpressionError as i, suggest as l, BonsaiSecurityError as n, formatBonsaiError as o, BonsaiTypeError as r, formatError as s, BonsaiReferenceError as t };
164
+
165
+ //# sourceMappingURL=errors-t5i9AEaf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-t5i9AEaf.mjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["import type { SourcePosition } from './types.js'\n\nconst NEWLINE_CODE = 10\n\nexport interface ErrorLocation {\n source: string\n start: number\n end: number\n}\n\n/** Syntax error thrown during parsing. Contains source location and formatted caret display. */\nexport class ExpressionError extends Error {\n readonly rawMessage: string\n readonly start: number\n readonly end: number\n readonly source: string\n readonly suggestion?: string\n\n constructor(\n message: string,\n location: ErrorLocation,\n suggestion?: string,\n ) {\n const formatted = formatError(message, location, suggestion)\n super(formatted)\n this.name = 'ExpressionError'\n this.rawMessage = message\n this.start = location.start\n this.end = location.end\n this.source = location.source\n this.suggestion = suggestion\n }\n}\n\n/** Runtime type error when a transform, function, or method receives an unexpected value type. */\nexport class BonsaiTypeError extends Error {\n readonly transform: string\n readonly expected: string\n readonly received: string\n location?: ErrorLocation\n formatted?: string\n\n constructor(transform: string, expected: string, value: unknown) {\n let received: string\n if (value === null) received = 'null'\n else if (value instanceof Promise) received = 'Promise'\n else if (Array.isArray(value)) received = 'array'\n else received = typeof value\n super(`\"${transform}\" expects ${expected}, got ${received}`)\n this.name = 'BonsaiTypeError'\n this.transform = transform\n this.expected = expected\n this.received = received\n }\n}\n\n/** Security violation: blocked property access, timeout, depth limit, or array size limit. */\nexport class BonsaiSecurityError extends Error {\n readonly code: string\n location?: ErrorLocation\n formatted?: string\n\n constructor(code: string, message: string) {\n super(message)\n this.name = 'BonsaiSecurityError'\n this.code = code\n }\n}\n\n/** Unknown transform, function, or method name. Includes a \"did you mean?\" suggestion when possible. */\nexport class BonsaiReferenceError extends Error {\n readonly identifier: string\n readonly kind: 'transform' | 'function' | 'method'\n readonly suggestion?: string\n location?: ErrorLocation\n formatted?: string\n\n constructor(kind: 'transform' | 'function' | 'method', identifier: string, suggestion?: string) {\n const msg = suggestion\n ? `Unknown ${kind} \"${identifier}\". Did you mean \"${suggestion}\"?`\n : `Unknown ${kind} \"${identifier}\"`\n super(msg)\n this.name = 'BonsaiReferenceError'\n this.identifier = identifier\n this.kind = kind\n this.suggestion = suggestion\n }\n}\n\nexport type BonsaiRuntimeError = BonsaiTypeError | BonsaiSecurityError | BonsaiReferenceError\nexport type BonsaiError = ExpressionError | BonsaiRuntimeError\n\nfunction clampOffset(source: string, offset: number): number {\n return Math.max(0, Math.min(offset, source.length))\n}\n\nfunction getLineStart(source: string, offset: number): number {\n let index = clampOffset(source, offset)\n while (index > 0 && source.charCodeAt(index - 1) !== NEWLINE_CODE) index--\n return index\n}\n\nfunction getLineEnd(source: string, offset: number): number {\n let index = clampOffset(source, offset)\n while (index < source.length && source.charCodeAt(index) !== NEWLINE_CODE) index++\n return index\n}\n\nexport function offsetToPosition(source: string, offset: number): SourcePosition {\n const safeOffset = clampOffset(source, offset)\n let line = 1\n let column = 1\n\n for (let index = 0; index < safeOffset; index++) {\n if (source.charCodeAt(index) === NEWLINE_CODE) {\n line++\n column = 1\n } else {\n column++\n }\n }\n\n return { line, column, offset: safeOffset }\n}\n\nexport function hasErrorLocation(error: unknown): error is BonsaiRuntimeError & { location: ErrorLocation } {\n return (\n (error instanceof BonsaiTypeError\n || error instanceof BonsaiSecurityError\n || error instanceof BonsaiReferenceError)\n && error.location !== undefined\n )\n}\n\nexport function attachLocation(error: unknown, source: string, start: number, end: number): void {\n if (error instanceof BonsaiTypeError || error instanceof BonsaiSecurityError || error instanceof BonsaiReferenceError) {\n if (!error.location) {\n error.location = { source, start, end }\n error.formatted = formatError(error.message, error.location)\n }\n }\n}\n\n/** Format an error message with source context, caret display, and position info. */\nexport function formatError(\n message: string,\n location: ErrorLocation,\n suggestion?: string,\n): string {\n const { source } = location\n const start = clampOffset(source, location.start)\n const rawEnd = clampOffset(source, location.end)\n const end = Math.max(start + 1, rawEnd)\n const startPos = offsetToPosition(source, start)\n const lineStart = getLineStart(source, start)\n const lineEnd = getLineEnd(source, start)\n const lineText = source.slice(lineStart, lineEnd)\n const caretStart = start - lineStart\n const caretEnd = Math.min(end, lineEnd)\n const caretLength = Math.max(1, caretEnd - start)\n const gutter = `${startPos.line} | `\n const padding = ' '.repeat(gutter.length + caretStart)\n const carets = '^'.repeat(caretLength)\n\n let result = `${message}\\n\\n${gutter}${lineText}\\n${padding}${carets}`\n\n if (suggestion) {\n result += ` Did you mean \"${suggestion}\"?`\n }\n\n result += `\\n\\nat line ${startPos.line}, column ${startPos.column} (offset ${start}-${end})`\n\n return result\n}\n\n/** Format any Bonsai error into a human-readable string with source context when available. */\nexport function formatBonsaiError(error: unknown): string {\n if (error instanceof ExpressionError) return error.message\n if (hasErrorLocation(error)) {\n return error.formatted ?? formatError(error.message, error.location)\n }\n if (error instanceof Error) return error.message\n return String(error)\n}\n\nconst MAX_SUGGEST_LENGTH = 64\n\nexport function suggest(\n input: string,\n known: string[],\n maxDistance = 2,\n): string | undefined {\n if (input.length > MAX_SUGGEST_LENGTH) return undefined\n let best: string | undefined\n let bestDistance = maxDistance + 1\n\n for (const candidate of known) {\n const distance = levenshtein(input, candidate)\n if (distance < bestDistance) {\n bestDistance = distance\n best = candidate\n }\n }\n\n return best\n}\n\nfunction levenshtein(a: string, b: string): number {\n const m = a.length\n const n = b.length\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0))\n\n for (let i = 0; i <= m; i++) dp[i][0] = i\n for (let j = 0; j <= n; j++) dp[0][j] = j\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1\n dp[i][j] = Math.min(\n dp[i - 1][j] + 1,\n dp[i][j - 1] + 1,\n dp[i - 1][j - 1] + cost,\n )\n }\n }\n\n return dp[m][n]\n}\n"],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { a as CompiledExpression, c as Token, d as ValidationResult, i as BonsaiPlugin, l as TokenType, n as BonsaiInstance, o as ExpressionReferences, r as BonsaiOptions, s as FunctionFn, t as ASTNode, u as TransformFn } from "./types-Cbouo-QC.mjs";
2
+
3
+ //#region src/errors.d.ts
4
+ interface ErrorLocation {
5
+ source: string;
6
+ start: number;
7
+ end: number;
8
+ }
9
+ /** Syntax error thrown during parsing. Contains source location and formatted caret display. */
10
+ declare class ExpressionError extends Error {
11
+ readonly rawMessage: string;
12
+ readonly start: number;
13
+ readonly end: number;
14
+ readonly source: string;
15
+ readonly suggestion?: string;
16
+ constructor(message: string, location: ErrorLocation, suggestion?: string);
17
+ }
18
+ /** Runtime type error when a transform, function, or method receives an unexpected value type. */
19
+ declare class BonsaiTypeError extends Error {
20
+ readonly transform: string;
21
+ readonly expected: string;
22
+ readonly received: string;
23
+ location?: ErrorLocation;
24
+ formatted?: string;
25
+ constructor(transform: string, expected: string, value: unknown);
26
+ }
27
+ /** Security violation: blocked property access, timeout, depth limit, or array size limit. */
28
+ declare class BonsaiSecurityError extends Error {
29
+ readonly code: string;
30
+ location?: ErrorLocation;
31
+ formatted?: string;
32
+ constructor(code: string, message: string);
33
+ }
34
+ /** Unknown transform, function, or method name. Includes a "did you mean?" suggestion when possible. */
35
+ declare class BonsaiReferenceError extends Error {
36
+ readonly identifier: string;
37
+ readonly kind: 'transform' | 'function' | 'method';
38
+ readonly suggestion?: string;
39
+ location?: ErrorLocation;
40
+ formatted?: string;
41
+ constructor(kind: 'transform' | 'function' | 'method', identifier: string, suggestion?: string);
42
+ }
43
+ /** Format an error message with source context, caret display, and position info. */
44
+ declare function formatError(message: string, location: ErrorLocation, suggestion?: string): string;
45
+ /** Format any Bonsai error into a human-readable string with source context when available. */
46
+ declare function formatBonsaiError(error: unknown): string;
47
+ //#endregion
48
+ //#region src/lexer.d.ts
49
+ declare function tokenize(source: string): Token[];
50
+ //#endregion
51
+ //#region src/parser.d.ts
52
+ declare function parse(source: string, _depth?: number): ASTNode;
53
+ //#endregion
54
+ //#region src/compiler.d.ts
55
+ declare function compile(ast: ASTNode): ASTNode;
56
+ //#endregion
57
+ //#region src/index.d.ts
58
+ /**
59
+ * Evaluate a single expression with default options. Uses a shared instance internally.
60
+ * For repeated evaluation or custom configuration, use `bonsai()` to create a dedicated instance.
61
+ */
62
+ declare function evaluateExpression<T = unknown>(expression: string, context?: Record<string, unknown>): T;
63
+ /**
64
+ * Create a new Bonsai instance with optional safety and caching configuration.
65
+ * Register transforms and functions via `.use()`, `.addTransform()`, and `.addFunction()`.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const expr = bonsai({ timeout: 50 })
70
+ * expr.use(strings)
71
+ * expr.evaluateSync('name |> trim |> upper', { name: ' hello ' }) // "HELLO"
72
+ * ```
73
+ */
74
+ declare function bonsai(options?: BonsaiOptions): BonsaiInstance;
75
+ //#endregion
76
+ export { type ASTNode, type BonsaiInstance, type BonsaiOptions, type BonsaiPlugin, BonsaiReferenceError, BonsaiSecurityError, BonsaiTypeError, type CompiledExpression, ExpressionError, type ExpressionReferences, type FunctionFn, type Token, type TokenType, type TransformFn, type ValidationResult, bonsai, compile, evaluateExpression, formatBonsaiError, formatError, parse, tokenize };
77
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors.ts","../src/lexer.ts","../src/parser.ts","../src/compiler.ts","../src/index.ts"],"mappings":";;;UAIiB,aAAA;EACf,MAAA;EACA,KAAA;EACA,GAAA;AAAA;;cAIW,eAAA,SAAwB,KAAA;EAAA,SAC1B,UAAA;EAAA,SACA,KAAA;EAAA,SACA,GAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;cAGP,OAAA,UACA,QAAA,EAAU,aAAA,EACV,UAAA;AAAA;;cAcS,eAAA,SAAwB,KAAA;EAAA,SAC1B,SAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EACT,QAAA,GAAW,aAAA;EACX,SAAA;cAEY,SAAA,UAAmB,QAAA,UAAkB,KAAA;AAAA;;cAetC,mBAAA,SAA4B,KAAA;EAAA,SAC9B,IAAA;EACT,QAAA,GAAW,aAAA;EACX,SAAA;cAEY,IAAA,UAAc,OAAA;AAAA;;cAQf,oBAAA,SAA6B,KAAA;EAAA,SAC/B,UAAA;EAAA,SACA,IAAA;EAAA,SACA,UAAA;EACT,QAAA,GAAW,aAAA;EACX,SAAA;cAEY,IAAA,uCAA2C,UAAA,UAAoB,UAAA;AAAA;;iBAmE7D,WAAA,CACd,OAAA,UACA,QAAA,EAAU,aAAA,EACV,UAAA;;iBA6Bc,iBAAA,CAAkB,KAAA;;;iBCpJlB,QAAA,CAAS,MAAA,WAAiB,KAAA;;;iBCS1B,KAAA,CAAM,MAAA,UAAgB,MAAA,YAAa,OAAA;;;iBCnCnC,OAAA,CAAQ,GAAA,EAAK,OAAA,GAAU,OAAA;;;;;;;iBC8CvB,kBAAA,aAAA,CAAgC,UAAA,UAAoB,OAAA,GAAU,MAAA,oBAA0B,CAAA;;AJrCxG;;;;;;;;;;iBIqDgB,MAAA,CAAO,OAAA,GAAS,aAAA,GAAqB,cAAA"}