stringent 0.0.2 → 0.0.4

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.
Files changed (58) hide show
  1. package/README.md +61 -73
  2. package/dist/context.d.ts +20 -2
  3. package/dist/context.d.ts.map +1 -0
  4. package/dist/context.js +1 -0
  5. package/dist/context.js.map +1 -0
  6. package/dist/createParser.d.ts +109 -26
  7. package/dist/createParser.d.ts.map +1 -0
  8. package/dist/createParser.js +80 -19
  9. package/dist/createParser.js.map +1 -0
  10. package/dist/errors.d.ts +121 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +186 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/grammar/index.d.ts +19 -14
  15. package/dist/grammar/index.d.ts.map +1 -0
  16. package/dist/grammar/index.js +4 -3
  17. package/dist/grammar/index.js.map +1 -0
  18. package/dist/index.d.ts +19 -11
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +16 -7
  21. package/dist/index.js.map +1 -0
  22. package/dist/parse/index.d.ts +101 -27
  23. package/dist/parse/index.d.ts.map +1 -0
  24. package/dist/parse/index.js +1 -0
  25. package/dist/parse/index.js.map +1 -0
  26. package/dist/performance.bench.d.ts +10 -0
  27. package/dist/performance.bench.d.ts.map +1 -0
  28. package/dist/performance.bench.js +379 -0
  29. package/dist/performance.bench.js.map +1 -0
  30. package/dist/primitive/index.d.ts +27 -35
  31. package/dist/primitive/index.d.ts.map +1 -0
  32. package/dist/primitive/index.js +22 -17
  33. package/dist/primitive/index.js.map +1 -0
  34. package/dist/runtime/eval.d.ts +157 -0
  35. package/dist/runtime/eval.d.ts.map +1 -0
  36. package/dist/runtime/eval.js +206 -0
  37. package/dist/runtime/eval.js.map +1 -0
  38. package/dist/runtime/infer.d.ts +2 -1
  39. package/dist/runtime/infer.d.ts.map +1 -0
  40. package/dist/runtime/infer.js +3 -2
  41. package/dist/runtime/infer.js.map +1 -0
  42. package/dist/runtime/parser.d.ts +92 -11
  43. package/dist/runtime/parser.d.ts.map +1 -0
  44. package/dist/runtime/parser.js +522 -47
  45. package/dist/runtime/parser.js.map +1 -0
  46. package/dist/schema/index.d.ts +230 -27
  47. package/dist/schema/index.d.ts.map +1 -0
  48. package/dist/schema/index.js +54 -28
  49. package/dist/schema/index.js.map +1 -0
  50. package/dist/static/infer.d.ts +4 -3
  51. package/dist/static/infer.d.ts.map +1 -0
  52. package/dist/static/infer.js +1 -0
  53. package/dist/static/infer.js.map +1 -0
  54. package/package.json +35 -4
  55. package/dist/combinators/index.d.ts +0 -57
  56. package/dist/combinators/index.js +0 -104
  57. package/dist/static/parser.d.ts +0 -7
  58. package/dist/static/parser.js +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.bench.js","sourceRoot":"","sources":["../src/performance.bench.ts"],"names":[],"mappings":"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"}
@@ -10,61 +10,49 @@
10
10
  * DO NOT remove the $ generic parameter - it ensures schema type information
11
11
  * flows through the parser chain. See CLAUDE.md for details.
12
12
  */
13
- import { Token } from "@sinclair/parsebox";
14
- import type { Context } from "../context.js";
15
- import type { ToNumber } from "hotscript/dist/internals/numbers/impl/utils.js";
16
- export type { Context } from "../context.js";
13
+ import { Token } from '@sinclair/parsebox';
14
+ import type { Context } from '../context.js';
15
+ import type { ToNumber } from 'hotscript/dist/internals/numbers/impl/utils.js';
16
+ export type { Context } from '../context.js';
17
17
  /** Parse result: empty = no match, [value, rest] = matched */
18
18
  export type ParseResult<T, R extends string = string> = [] | [T, R];
19
19
  export interface ASTNode<TType extends string = string, TOutputSchema = unknown> {
20
20
  node: TType;
21
21
  outputSchema: TOutputSchema;
22
22
  }
23
- export interface IdentNode<TName extends string = string, TOutputSchema = "unknown"> extends ASTNode<"identifier", TOutputSchema> {
23
+ export interface IdentNode<TName extends string = string, TOutputSchema = 'unknown'> extends ASTNode<'identifier', TOutputSchema> {
24
24
  name: TName;
25
25
  }
26
- export type NumberNode<TValue extends string = string> = ASTNode<"literal", "number"> & {
26
+ export type NumberNode<TValue extends string = string> = ASTNode<'literal', 'number'> & {
27
27
  raw: TValue;
28
28
  value: ToNumber<TValue>;
29
29
  };
30
- export type StringNode<TValue extends string = string> = ASTNode<"literal", "string"> & {
30
+ export type StringNode<TValue extends string = string> = ASTNode<'literal', 'string'> & {
31
31
  raw: TValue;
32
32
  value: TValue;
33
33
  };
34
- export type NullNode = ASTNode<"literal", "null"> & {
35
- raw: "null";
34
+ export type NullNode = ASTNode<'literal', 'null'> & {
35
+ raw: 'null';
36
36
  value: null;
37
37
  };
38
- export type UndefinedNode = ASTNode<"literal", "undefined"> & {
39
- raw: "undefined";
38
+ export type UndefinedNode = ASTNode<'literal', 'undefined'> & {
39
+ raw: 'undefined';
40
40
  value: undefined;
41
41
  };
42
- export type BooleanNode<TValue extends string = string> = ASTNode<"boolean", TValue> & {
42
+ export type BooleanNode<TValue extends string = string> = ASTNode<'literal', 'boolean'> & {
43
43
  raw: TValue;
44
- value: TValue extends "true" ? true : false;
44
+ value: TValue extends 'true' ? true : false;
45
45
  };
46
46
  export type LiteralNode = NumberNode | StringNode | NullNode | UndefinedNode | BooleanNode;
47
- export type ConstNode<TValue extends string = string> = ASTNode<"const", TValue>;
47
+ export type ConstNode<TValue extends string = string> = ASTNode<'const', TValue>;
48
48
  /** Computed parse result for Number */
49
- export type ParseNumber<TInput extends string> = Token.TNumber<TInput> extends [
50
- infer V extends string,
51
- infer R extends string
52
- ] ? [NumberNode<V>, R] : [];
49
+ export type ParseNumber<TInput extends string> = Token.TNumber<TInput> extends [infer V extends string, infer R extends string] ? [NumberNode<V>, R] : [];
53
50
  /** Computed parse result for String */
54
- export type ParseString<TQuotes extends string[], TInput extends string> = Token.TString<TQuotes, TInput> extends [
55
- infer V extends string,
56
- infer R extends string
57
- ] ? [StringNode<V>, R] : [];
51
+ export type ParseString<TQuotes extends string[], TInput extends string> = Token.TString<TQuotes, TInput> extends [infer V extends string, infer R extends string] ? [StringNode<V>, R] : [];
58
52
  /** Computed parse result for Ident - looks up value type from schema */
59
- export type ParseIdent<TInput extends string, $ extends Context> = Token.TIdent<TInput> extends [
60
- infer V extends string,
61
- infer R extends string
62
- ] ? V extends keyof $["data"] ? [IdentNode<V, $["data"][V]>, R] : [IdentNode<V>, R] : [];
53
+ export type ParseIdent<TInput extends string, $ extends Context> = Token.TIdent<TInput> extends [infer V extends string, infer R extends string] ? V extends keyof $['data'] ? [IdentNode<V, $['data'][V]>, R] : [IdentNode<V>, R] : [];
63
54
  /** Computed parse result for Const */
64
- export type ParseConst<TValue extends string, TInput extends string> = Token.TConst<TValue, TInput> extends [
65
- infer _V extends string,
66
- infer R extends string
67
- ] ? [ConstNode<TValue>, R] : [];
55
+ export type ParseConst<TValue extends string, TInput extends string> = Token.TConst<TValue, TInput> extends [infer _V extends string, infer R extends string] ? [ConstNode<TValue>, R] : [];
68
56
  /**
69
57
  * Base parser interface. All parsers implement this.
70
58
  * Context is generic to preserve type information.
@@ -96,9 +84,13 @@ declare class _Const<TValue extends string> {
96
84
  constructor(value: TValue);
97
85
  parse<TInput extends string, $ extends Context>(input: TInput, _$: $): ParseConst<TValue, TInput>;
98
86
  }
99
- export declare const Number: () => _Number;
100
- export declare const String: <TQuotes extends string[]>(quotes: [...TQuotes]) => _String<TQuotes>;
101
- export declare const Ident: () => _Ident;
102
- export declare const Const: <TValue extends string>(value: TValue) => _Const<TValue>;
87
+ /** @internal */
88
+ export declare const createNumber: () => _Number;
89
+ /** @internal */
90
+ export declare const createString: <TQuotes extends string[]>(quotes: [...TQuotes]) => _String<TQuotes>;
91
+ /** @internal */
92
+ export declare const createIdent: () => _Ident;
93
+ /** @internal */
94
+ export declare const createConst: <TValue extends string>(value: TValue) => _Const<TValue>;
103
95
  export type { _Number, _String, _Ident, _Const };
104
- export { type IParser as Primitive };
96
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitive/index.ts"],"names":[],"mappings":"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"}
@@ -10,13 +10,13 @@
10
10
  * DO NOT remove the $ generic parameter - it ensures schema type information
11
11
  * flows through the parser chain. See CLAUDE.md for details.
12
12
  */
13
- import { Token } from "@sinclair/parsebox";
13
+ import { Token } from '@sinclair/parsebox';
14
14
  // =============================================================================
15
15
  // Primitive Implementations
16
16
  // =============================================================================
17
17
  /** Number primitive - parses numeric literals using Token.Number */
18
18
  class _Number {
19
- __primitive = "number";
19
+ __primitive = 'number';
20
20
  parse(input, _$) {
21
21
  // Runtime type is [] | [string, string], but TypeScript computes exact type
22
22
  const result = Token.Number(input);
@@ -24,10 +24,10 @@ class _Number {
24
24
  return [];
25
25
  return [
26
26
  {
27
- node: "literal",
27
+ node: 'literal',
28
28
  raw: result[0],
29
29
  value: +result[0],
30
- outputSchema: "number",
30
+ outputSchema: 'number',
31
31
  },
32
32
  result[1],
33
33
  ];
@@ -35,7 +35,7 @@ class _Number {
35
35
  }
36
36
  /** String primitive - parses quoted string literals using Token.String */
37
37
  class _String {
38
- __primitive = "string";
38
+ __primitive = 'string';
39
39
  quotes;
40
40
  constructor(quotes) {
41
41
  this.quotes = quotes;
@@ -46,10 +46,10 @@ class _String {
46
46
  return [];
47
47
  return [
48
48
  {
49
- node: "literal",
49
+ node: 'literal',
50
50
  raw: result[0],
51
51
  value: result[0],
52
- outputSchema: "string",
52
+ outputSchema: 'string',
53
53
  },
54
54
  result[1],
55
55
  ];
@@ -57,23 +57,23 @@ class _String {
57
57
  }
58
58
  /** Identifier primitive - parses identifiers using Token.Ident */
59
59
  class _Ident {
60
- __primitive = "ident";
60
+ __primitive = 'ident';
61
61
  parse(input, $) {
62
62
  const result = Token.Ident(input);
63
63
  if (result.length !== 2)
64
64
  return [];
65
65
  const name = result[0];
66
66
  const data = $.data;
67
- const valueType = name in data ? data[name] : "unknown";
67
+ const valueType = name in data ? data[name] : 'unknown';
68
68
  return [
69
- { node: "identifier", name, outputSchema: valueType },
69
+ { node: 'identifier', name, outputSchema: valueType },
70
70
  result[1],
71
71
  ];
72
72
  }
73
73
  }
74
74
  /** Const primitive - parses exact string matches using Token.Const */
75
75
  class _Const {
76
- __primitive = "const";
76
+ __primitive = 'const';
77
77
  value;
78
78
  constructor(value) {
79
79
  this.value = value;
@@ -83,15 +83,20 @@ class _Const {
83
83
  if (result.length !== 2)
84
84
  return [];
85
85
  return [
86
- { node: "const", outputSchema: JSON.stringify(this.value) },
86
+ { node: 'const', outputSchema: JSON.stringify(this.value) },
87
87
  result[1],
88
88
  ];
89
89
  }
90
90
  }
91
91
  // =============================================================================
92
- // Exported Factories
92
+ // Internal Factories (used by runtime parser)
93
93
  // =============================================================================
94
- export const Number = () => new _Number();
95
- export const String = (quotes) => new _String(quotes);
96
- export const Ident = () => new _Ident();
97
- export const Const = (value) => new _Const(value);
94
+ /** @internal */
95
+ export const createNumber = () => new _Number();
96
+ /** @internal */
97
+ export const createString = (quotes) => new _String(quotes);
98
+ /** @internal */
99
+ export const createIdent = () => new _Ident();
100
+ /** @internal */
101
+ export const createConst = (value) => new _Const(value);
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/primitive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AA6G3C,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF,oEAAoE;AACpE,MAAM,OAAO;IACF,WAAW,GAAG,QAAiB,CAAC;IAEzC,KAAK,CAA2C,KAAa,EAAE,EAAK;QAClE,4EAA4E;QAC5E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAA0B,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAyB,CAAC;QAC1D,OAAO;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gBACd,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjB,YAAY,EAAE,QAAQ;aACvB;YACD,MAAM,CAAC,CAAC,CAAC;SACwB,CAAC;IACtC,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO;IACF,WAAW,GAAG,QAAiB,CAAC;IAChC,MAAM,CAAU;IAEzB,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CACH,KAAa,EACb,EAAK;QAEL,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAA0B,CAAC;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAkC,CAAC;QACnE,OAAO;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gBACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChB,YAAY,EAAE,QAAQ;aACvB;YACD,MAAM,CAAC,CAAC,CAAC;SACiC,CAAC;IAC/C,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,MAAM;IACD,WAAW,GAAG,OAAgB,CAAC;IAExC,KAAK,CAA2C,KAAa,EAAE,CAAI;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAA0B,CAAC;QAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAA2B,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,IAA8B,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxD,OAAO;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE;YACrD,MAAM,CAAC,CAAC,CAAC;SAC0B,CAAC;IACxC,CAAC;CACF;AAED,sEAAsE;AACtE,MAAM,MAAM;IACD,WAAW,GAAG,OAAgB,CAAC;IAC/B,KAAK,CAAS;IAEvB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CACH,KAAa,EACb,EAAK;QAEL,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAA0B,CAAC;QACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAgC,CAAC;QACjE,OAAO;YACL,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3D,MAAM,CAAC,CAAC,CAAC;SAC+B,CAAC;IAC7C,CAAC;CACF;AAED,gFAAgF;AAChF,8CAA8C;AAC9C,gFAAgF;AAEhF,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;AAEzD,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,CAA2B,MAAoB,EAAoB,EAAE,CAC/F,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AAEtB,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG,GAAW,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;AAEtD,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAwB,KAAa,EAAkB,EAAE,CAClF,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Runtime Expression Evaluation
3
+ *
4
+ * Evaluates parsed AST nodes to produce runtime values.
5
+ * Uses the eval functions defined in NodeSchema to compute results.
6
+ *
7
+ * The evaluator:
8
+ * 1. Recursively evaluates child nodes first
9
+ * 2. Passes evaluated values to the node's eval function
10
+ * 3. Returns the computed result
11
+ * 4. Validates values against arktype constraints at runtime
12
+ */
13
+ import type { NodeSchema, SchemaToType } from '../schema/index.js';
14
+ /**
15
+ * Extract the outputSchema from an AST node type.
16
+ * Returns the literal schema string if present, otherwise 'unknown'.
17
+ */
18
+ type ExtractOutputSchema<T> = T extends {
19
+ outputSchema: infer S extends string;
20
+ } ? S : 'unknown';
21
+ /**
22
+ * A type that represents any AST node with an outputSchema field.
23
+ * This is used as a constraint for the evaluate() function.
24
+ */
25
+ export type ASTNodeWithSchema<TSchema extends string = string> = {
26
+ readonly node: string;
27
+ readonly outputSchema: TSchema;
28
+ };
29
+ /**
30
+ * Recursively extract all identifier nodes from an AST.
31
+ * Returns a union of { name: string, outputSchema: string } tuples.
32
+ *
33
+ * This is used to determine what variables are used in an expression
34
+ * and what types they expect.
35
+ */
36
+ type ExtractIdentifiers<T> = T extends {
37
+ node: 'identifier';
38
+ name: infer N;
39
+ outputSchema: infer S;
40
+ } ? {
41
+ name: N;
42
+ outputSchema: S;
43
+ } : T extends object ? {
44
+ [K in keyof T]: ExtractIdentifiers<T[K]>;
45
+ }[keyof T] : never;
46
+ /**
47
+ * Convert a union of identifier tuples to a data object type.
48
+ *
49
+ * @example
50
+ * type Ids = { name: 'x'; outputSchema: 'number' } | { name: 'y'; outputSchema: 'string' };
51
+ * type Data = IdentifiersToData<Ids>;
52
+ * // { x: number; y: string }
53
+ */
54
+ type IdentifiersToData<T> = T extends {
55
+ name: infer N extends string;
56
+ outputSchema: infer S;
57
+ } ? {
58
+ [K in N]: SchemaToType<S>;
59
+ } : never;
60
+ /**
61
+ * Merge a union of single-key objects into a single object type.
62
+ *
63
+ * @example
64
+ * type Union = { x: number } | { y: string };
65
+ * type Merged = UnionToIntersection<Union>;
66
+ * // { x: number } & { y: string }
67
+ */
68
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
69
+ /**
70
+ * Extract required data types from an AST based on its identifier nodes.
71
+ * Returns Record<string, never> if no identifiers are found (empty object is allowed).
72
+ *
73
+ * @example
74
+ * type AST = { node: 'add'; left: { node: 'identifier'; name: 'x'; outputSchema: 'number' }; ... };
75
+ * type Data = ExtractRequiredData<AST>;
76
+ * // { x: number }
77
+ */
78
+ export type ExtractRequiredData<T> = ExtractIdentifiers<T> extends never ? Record<string, never> : UnionToIntersection<IdentifiersToData<ExtractIdentifiers<T>>>;
79
+ /**
80
+ * Evaluation context that includes both the parse context and node schemas.
81
+ * When AST type is provided, the data is type-checked against the AST's variables.
82
+ */
83
+ export interface EvalContext<TData = Record<string, unknown>> {
84
+ /** The data context (variable name → value mapping) */
85
+ data: TData;
86
+ /** The node schemas (for looking up eval functions) */
87
+ nodes: readonly NodeSchema[];
88
+ }
89
+ /**
90
+ * Evaluate an AST node to produce a runtime value.
91
+ *
92
+ * The return type is inferred from the AST node's `outputSchema` field:
93
+ * - `outputSchema: "number"` → returns `number`
94
+ * - `outputSchema: "string"` → returns `string`
95
+ * - `outputSchema: "boolean"` → returns `boolean`
96
+ * - `outputSchema: "null"` → returns `null`
97
+ * - `outputSchema: "undefined"` → returns `undefined`
98
+ * - Other/unknown → returns `unknown`
99
+ *
100
+ * @param ast - The parsed AST node to evaluate
101
+ * @param ctx - The evaluation context containing variable values and node schemas
102
+ * @returns The evaluated value with the type derived from the AST's outputSchema
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * import { createParser, defineNode, lhs, rhs, constVal } from "stringent";
107
+ * import { evaluate } from "stringent/runtime/eval";
108
+ *
109
+ * const add = defineNode({
110
+ * name: "add",
111
+ * pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
112
+ * precedence: 1,
113
+ * resultType: "number",
114
+ * eval: ({ left, right }) => left + right,
115
+ * });
116
+ *
117
+ * const parser = createParser([add] as const);
118
+ * const result = parser.parse("1+2", {});
119
+ *
120
+ * if (result.length === 2) {
121
+ * const value = evaluate(result[0], { data: {}, nodes: [add] });
122
+ * // value has type: number (not unknown!)
123
+ * // value === 3
124
+ * }
125
+ * ```
126
+ */
127
+ export declare function evaluate<T, TData extends ExtractRequiredData<T>>(ast: T, ctx: EvalContext<TData>): SchemaToType<ExtractOutputSchema<T>>;
128
+ /**
129
+ * Create a bound evaluator function for a specific set of node schemas.
130
+ *
131
+ * This is a convenience function that pre-binds the node schemas,
132
+ * so you only need to pass the AST and variable values when evaluating.
133
+ *
134
+ * The returned evaluator function preserves type inference:
135
+ * - The return type is derived from the AST's `outputSchema` field
136
+ * - `outputSchema: "number"` → returns `number`
137
+ * - `outputSchema: "string"` → returns `string`
138
+ * - etc.
139
+ *
140
+ * @param nodes - The node schemas with eval functions
141
+ * @returns An evaluator function with type inference
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * const evaluator = createEvaluator([add, mul]);
146
+ *
147
+ * const result = parser.parse("1+2*3", {});
148
+ * if (result.length === 2) {
149
+ * const value = evaluator(result[0], {});
150
+ * // value has type: number (inferred from AST's outputSchema)
151
+ * // value === 7
152
+ * }
153
+ * ```
154
+ */
155
+ export declare function createEvaluator(nodes: readonly NodeSchema[]): <T, TData extends ExtractRequiredData<T>>(ast: T, data: TData) => SchemaToType<ExtractOutputSchema<T>>;
156
+ export {};
157
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/runtime/eval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMnE;;;GAGG;AACH,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,YAAY,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAEjG;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,CAAC;AAMF;;;;;;GAMG;AACH,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC,CAAA;CAAE,GAC/F;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,CAAC,CAAA;CAAE,GAC5B,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,GACrD,KAAK,CAAC;AAEZ;;;;;;;GAOG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS;IACpC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC,CAAC;CACvB,GACG;KAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;CAAE,GAC7B,KAAK,CAAC;AAEV;;;;;;;GAOG;AACH,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CACjF,CAAC,EAAE,MAAM,CAAC,KACP,IAAI,GACL,CAAC,GACD,KAAK,CAAC;AAEV;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC/B,kBAAkB,CAAC,CAAC,CAAC,SAAS,KAAK,GAC/B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACrB,mBAAmB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC;IACZ,uDAAuD;IACvD,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CAC9B;AA0DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,SAAS,mBAAmB,CAAC,CAAC,CAAC,EAC9D,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,GACtB,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAgGtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,IAChC,CAAC,EAAE,KAAK,SAAS,mBAAmB,CAAC,CAAC,CAAC,EAC/D,KAAK,CAAC,EACN,MAAM,KAAK,KACV,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAGxC"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Runtime Expression Evaluation
3
+ *
4
+ * Evaluates parsed AST nodes to produce runtime values.
5
+ * Uses the eval functions defined in NodeSchema to compute results.
6
+ *
7
+ * The evaluator:
8
+ * 1. Recursively evaluates child nodes first
9
+ * 2. Passes evaluated values to the node's eval function
10
+ * 3. Returns the computed result
11
+ * 4. Validates values against arktype constraints at runtime
12
+ */
13
+ import { type } from 'arktype';
14
+ // =============================================================================
15
+ // Runtime ArkType Validation
16
+ // =============================================================================
17
+ /**
18
+ * Cache for arktype validators to avoid re-creating them for each evaluation.
19
+ * Maps schema strings to their compiled validators.
20
+ */
21
+ const validatorCache = new Map();
22
+ /**
23
+ * Get or create an arktype validator for a given schema string.
24
+ * Uses a cache to avoid re-creating validators for frequently used schemas.
25
+ *
26
+ * @param schema - The arktype schema string (e.g., 'number >= 0', 'string.email')
27
+ * @returns The compiled arktype validator
28
+ */
29
+ function getValidator(schema) {
30
+ let validator = validatorCache.get(schema);
31
+ if (!validator) {
32
+ // Create and cache the validator
33
+ // Note: Invalid schemas will cause arktype to throw at compile time
34
+ // At runtime, we trust the schema was validated at parse time
35
+ validator = type(schema);
36
+ validatorCache.set(schema, validator);
37
+ }
38
+ return validator;
39
+ }
40
+ /**
41
+ * Validate a value against an arktype schema at runtime.
42
+ * Throws an error if the value doesn't match the schema constraints.
43
+ *
44
+ * @param value - The value to validate
45
+ * @param schema - The arktype schema string (e.g., 'number >= 0', 'string.email')
46
+ * @param variableName - The name of the variable (for error messages)
47
+ * @throws Error if the value doesn't match the schema constraints
48
+ */
49
+ function validateValue(value, schema, variableName) {
50
+ // Skip validation for generic schemas that don't have runtime constraints
51
+ // These basic types are handled by TypeScript's compile-time checking
52
+ if (schema === 'unknown' || schema === 'never') {
53
+ return;
54
+ }
55
+ const validator = getValidator(schema);
56
+ const result = validator(value);
57
+ // arktype returns the value if valid, or an ArkErrors object if invalid
58
+ if (result instanceof type.errors) {
59
+ throw new Error(`Variable '${variableName}' failed validation for schema '${schema}': ${result.summary}`);
60
+ }
61
+ }
62
+ /**
63
+ * Evaluate an AST node to produce a runtime value.
64
+ *
65
+ * The return type is inferred from the AST node's `outputSchema` field:
66
+ * - `outputSchema: "number"` → returns `number`
67
+ * - `outputSchema: "string"` → returns `string`
68
+ * - `outputSchema: "boolean"` → returns `boolean`
69
+ * - `outputSchema: "null"` → returns `null`
70
+ * - `outputSchema: "undefined"` → returns `undefined`
71
+ * - Other/unknown → returns `unknown`
72
+ *
73
+ * @param ast - The parsed AST node to evaluate
74
+ * @param ctx - The evaluation context containing variable values and node schemas
75
+ * @returns The evaluated value with the type derived from the AST's outputSchema
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * import { createParser, defineNode, lhs, rhs, constVal } from "stringent";
80
+ * import { evaluate } from "stringent/runtime/eval";
81
+ *
82
+ * const add = defineNode({
83
+ * name: "add",
84
+ * pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
85
+ * precedence: 1,
86
+ * resultType: "number",
87
+ * eval: ({ left, right }) => left + right,
88
+ * });
89
+ *
90
+ * const parser = createParser([add] as const);
91
+ * const result = parser.parse("1+2", {});
92
+ *
93
+ * if (result.length === 2) {
94
+ * const value = evaluate(result[0], { data: {}, nodes: [add] });
95
+ * // value has type: number (not unknown!)
96
+ * // value === 3
97
+ * }
98
+ * ```
99
+ */
100
+ export function evaluate(ast, ctx) {
101
+ if (typeof ast !== 'object' || ast === null) {
102
+ throw new Error(`Invalid AST node: expected object, got ${typeof ast}`);
103
+ }
104
+ const node = ast;
105
+ // Check for the 'node' property that indicates the node type
106
+ if (!('node' in node) || typeof node.node !== 'string') {
107
+ throw new Error(`Invalid AST node: missing 'node' property`);
108
+ }
109
+ const nodeType = node.node;
110
+ // Handle literal nodes (number, string, boolean, null, undefined)
111
+ if (nodeType === 'literal') {
112
+ if ('value' in node) {
113
+ return node.value;
114
+ }
115
+ throw new Error(`Literal node missing 'value' property`);
116
+ }
117
+ // Internal eval context for recursive calls (typed at runtime level)
118
+ const internalCtx = ctx;
119
+ // Handle identifier nodes - look up value in context and validate against schema
120
+ if (nodeType === 'identifier') {
121
+ if (!('name' in node) || typeof node.name !== 'string') {
122
+ throw new Error(`Identifier node missing 'name' property`);
123
+ }
124
+ const name = node.name;
125
+ if (!(name in internalCtx.data)) {
126
+ throw new Error(`Undefined variable: ${name}`);
127
+ }
128
+ const value = internalCtx.data[name];
129
+ // Validate value against arktype schema at runtime
130
+ if ('outputSchema' in node && typeof node.outputSchema === 'string') {
131
+ validateValue(value, node.outputSchema, name);
132
+ }
133
+ return value;
134
+ }
135
+ // Handle const nodes (operators, keywords) - these shouldn't be evaluated directly
136
+ if (nodeType === 'const') {
137
+ throw new Error(`Cannot evaluate const node directly`);
138
+ }
139
+ // Handle parentheses - just evaluate the inner expression
140
+ if (nodeType === 'parentheses') {
141
+ if (!('inner' in node)) {
142
+ throw new Error(`Parentheses node missing 'inner' property`);
143
+ }
144
+ // Use type assertion for recursive call (data constraint already validated at entry)
145
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
146
+ return evaluate(node.inner, internalCtx);
147
+ }
148
+ // Look up the node schema for this node type
149
+ const nodeSchema = internalCtx.nodes.find((n) => n.name === nodeType);
150
+ if (!nodeSchema) {
151
+ throw new Error(`Unknown node type: ${nodeType}. Make sure to pass all node schemas to evaluate().`);
152
+ }
153
+ if (!nodeSchema.eval) {
154
+ throw new Error(`Node type '${nodeType}' has no eval function defined`);
155
+ }
156
+ // Extract and evaluate all named bindings from the node
157
+ const evaluatedBindings = {};
158
+ // Get the pattern to determine which fields are named bindings
159
+ for (const element of nodeSchema.pattern) {
160
+ // Check if this is a named schema (has __named and name)
161
+ if ('__named' in element && element.__named === true && 'name' in element) {
162
+ const bindingName = element.name;
163
+ if (bindingName in node) {
164
+ // Recursively evaluate the child node
165
+ // Use type assertion for recursive call (data constraint already validated at entry)
166
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
167
+ evaluatedBindings[bindingName] = evaluate(node[bindingName], internalCtx);
168
+ }
169
+ }
170
+ }
171
+ // Call the eval function with evaluated bindings
172
+ return nodeSchema.eval(evaluatedBindings, internalCtx.data);
173
+ }
174
+ /**
175
+ * Create a bound evaluator function for a specific set of node schemas.
176
+ *
177
+ * This is a convenience function that pre-binds the node schemas,
178
+ * so you only need to pass the AST and variable values when evaluating.
179
+ *
180
+ * The returned evaluator function preserves type inference:
181
+ * - The return type is derived from the AST's `outputSchema` field
182
+ * - `outputSchema: "number"` → returns `number`
183
+ * - `outputSchema: "string"` → returns `string`
184
+ * - etc.
185
+ *
186
+ * @param nodes - The node schemas with eval functions
187
+ * @returns An evaluator function with type inference
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * const evaluator = createEvaluator([add, mul]);
192
+ *
193
+ * const result = parser.parse("1+2*3", {});
194
+ * if (result.length === 2) {
195
+ * const value = evaluator(result[0], {});
196
+ * // value has type: number (inferred from AST's outputSchema)
197
+ * // value === 7
198
+ * }
199
+ * ```
200
+ */
201
+ export function createEvaluator(nodes) {
202
+ return function evaluator(ast, data) {
203
+ return evaluate(ast, { data, nodes });
204
+ };
205
+ }
206
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/runtime/eval.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  * With the new architecture, nodes carry their outputSchema directly,
7
7
  * so inference is simpler - just extract the outputSchema field.
8
8
  */
9
- import type { Context } from "../context.js";
9
+ import type { Context } from '../context.js';
10
10
  export type InferredType = string;
11
11
  /**
12
12
  * Runtime inference - extracts outputSchema from parsed AST nodes.
@@ -24,3 +24,4 @@ export type InferredType = string;
24
24
  * ```
25
25
  */
26
26
  export declare function infer(ast: unknown, _context: Context): InferredType;
27
+ //# sourceMappingURL=infer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../src/runtime/infer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,YAAY,CAanE"}