stringent 0.0.1 → 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.
- package/README.md +96 -0
- package/dist/context.d.ts +45 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +14 -0
- package/dist/context.js.map +1 -0
- package/dist/createParser.d.ts +159 -0
- package/dist/createParser.d.ts.map +1 -0
- package/dist/createParser.js +118 -0
- package/dist/createParser.js.map +1 -0
- package/dist/errors.d.ts +121 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +186 -0
- package/dist/errors.js.map +1 -0
- package/dist/grammar/index.d.ts +48 -0
- package/dist/grammar/index.d.ts.map +1 -0
- package/dist/grammar/index.js +13 -0
- package/dist/grammar/index.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/parse/index.d.ts +211 -0
- package/dist/parse/index.d.ts.map +1 -0
- package/dist/parse/index.js +16 -0
- package/dist/parse/index.js.map +1 -0
- package/dist/performance.bench.d.ts +10 -0
- package/dist/performance.bench.d.ts.map +1 -0
- package/dist/performance.bench.js +379 -0
- package/dist/performance.bench.js.map +1 -0
- package/dist/primitive/index.d.ts +96 -0
- package/dist/primitive/index.d.ts.map +1 -0
- package/dist/primitive/index.js +102 -0
- package/dist/primitive/index.js.map +1 -0
- package/dist/runtime/eval.d.ts +157 -0
- package/dist/runtime/eval.d.ts.map +1 -0
- package/dist/runtime/eval.js +206 -0
- package/dist/runtime/eval.js.map +1 -0
- package/dist/runtime/infer.d.ts +27 -0
- package/dist/runtime/infer.d.ts.map +1 -0
- package/dist/runtime/infer.js +35 -0
- package/dist/runtime/infer.js.map +1 -0
- package/dist/runtime/parser.d.ts +115 -0
- package/dist/runtime/parser.d.ts.map +1 -0
- package/dist/runtime/parser.js +746 -0
- package/dist/runtime/parser.js.map +1 -0
- package/dist/schema/index.d.ts +476 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +137 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/static/infer.d.ts +27 -0
- package/dist/static/infer.d.ts.map +1 -0
- package/dist/static/infer.js +10 -0
- package/dist/static/infer.js.map +1 -0
- package/package.json +62 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/runtime/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Types
|
|
3
|
+
*
|
|
4
|
+
* Pattern element schemas for defineNode. These are pure type descriptors
|
|
5
|
+
* that preserve literal types for compile-time grammar computation.
|
|
6
|
+
*
|
|
7
|
+
* The key insight: defineNode returns a schema object whose TYPE carries
|
|
8
|
+
* all the information needed for type-level parsing. No runtime magic.
|
|
9
|
+
*/
|
|
10
|
+
import type { NumberNode, StringNode, IdentNode, ConstNode, NullNode, BooleanNode, UndefinedNode } from '../primitive/index.js';
|
|
11
|
+
import { type } from 'arktype';
|
|
12
|
+
export interface Schema<TKind extends string> {
|
|
13
|
+
readonly kind: TKind;
|
|
14
|
+
}
|
|
15
|
+
/** Number literal pattern element */
|
|
16
|
+
export interface NumberSchema extends Schema<'number'> {
|
|
17
|
+
}
|
|
18
|
+
/** String literal pattern element */
|
|
19
|
+
export interface StringSchema<TQuotes extends readonly string[] = readonly string[]> extends Schema<'string'> {
|
|
20
|
+
readonly quotes: TQuotes;
|
|
21
|
+
}
|
|
22
|
+
/** Identifier pattern element */
|
|
23
|
+
export interface IdentSchema extends Schema<'ident'> {
|
|
24
|
+
}
|
|
25
|
+
/** Constant (exact match) pattern element */
|
|
26
|
+
export interface ConstSchema<TValue extends string = string> extends Schema<'const'> {
|
|
27
|
+
readonly value: TValue;
|
|
28
|
+
}
|
|
29
|
+
/** Null literal pattern element */
|
|
30
|
+
export interface NullSchema extends Schema<'null'> {
|
|
31
|
+
}
|
|
32
|
+
/** Boolean literal pattern element */
|
|
33
|
+
export interface BooleanSchema extends Schema<'boolean'> {
|
|
34
|
+
}
|
|
35
|
+
/** Undefined literal pattern element */
|
|
36
|
+
export interface UndefinedSchema extends Schema<'undefined'> {
|
|
37
|
+
}
|
|
38
|
+
/** Expression role determines which grammar level is used */
|
|
39
|
+
export type ExprRole = 'lhs' | 'rhs' | 'expr';
|
|
40
|
+
/** Recursive expression pattern element with optional type constraint and role */
|
|
41
|
+
export interface ExprSchema<
|
|
42
|
+
/** This technically shouldn't require a string
|
|
43
|
+
* because JSON or array or other types could be used in the future.
|
|
44
|
+
* For now, I would prefer that we just keep it open tbh. And validate at the
|
|
45
|
+
* expr()/lhs()/rhs() usage site by
|
|
46
|
+
* using arktype.type.validate<> (see createBox example: https://arktype.io/docs/generics).
|
|
47
|
+
**/
|
|
48
|
+
TConstraint extends string = string, TRole extends ExprRole = ExprRole> extends Schema<'expr'> {
|
|
49
|
+
readonly constraint?: TConstraint;
|
|
50
|
+
readonly role: TRole;
|
|
51
|
+
}
|
|
52
|
+
/** Base pattern schema type (without NamedSchema to avoid circular reference) */
|
|
53
|
+
export type PatternSchemaBase = NumberSchema | StringSchema<readonly string[]> | IdentSchema | ConstSchema<string> | NullSchema | BooleanSchema | UndefinedSchema | ExprSchema<string, ExprRole>;
|
|
54
|
+
/**
|
|
55
|
+
* A pattern schema with a binding name.
|
|
56
|
+
* Created by calling .as(name) on any pattern element.
|
|
57
|
+
*
|
|
58
|
+
* Uses intersection so schema properties remain accessible without unwrapping.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* lhs("number").as("left") // ExprSchema<"number", "lhs"> & { __named: true; name: "left" }
|
|
62
|
+
*/
|
|
63
|
+
export type NamedSchema<TSchema extends PatternSchemaBase = PatternSchemaBase, TName extends string = string> = TSchema & {
|
|
64
|
+
readonly __named: true;
|
|
65
|
+
readonly name: TName;
|
|
66
|
+
};
|
|
67
|
+
/** Union of all pattern element schemas (including named) */
|
|
68
|
+
export type PatternSchema = PatternSchemaBase | NamedSchema;
|
|
69
|
+
/**
|
|
70
|
+
* Schema wrapper with .as() method for naming bindings.
|
|
71
|
+
* All pattern factories return this type.
|
|
72
|
+
*/
|
|
73
|
+
export type SchemaWithAs<TSchema extends PatternSchemaBase> = TSchema & {
|
|
74
|
+
/** Add a binding name to this pattern element */
|
|
75
|
+
as<TName extends string>(name: TName): NamedSchema<TSchema, TName>;
|
|
76
|
+
};
|
|
77
|
+
/** Create a number literal pattern element */
|
|
78
|
+
export declare const number: () => NumberSchema & {
|
|
79
|
+
as<TName extends string>(name: TName): NamedSchema<NumberSchema, TName>;
|
|
80
|
+
};
|
|
81
|
+
/** Create a string literal pattern element */
|
|
82
|
+
export declare const string: <const TQuotes extends readonly string[]>(quotes: TQuotes) => StringSchema<TQuotes> & {
|
|
83
|
+
as<TName extends string>(name: TName): NamedSchema<StringSchema<TQuotes>, TName>;
|
|
84
|
+
};
|
|
85
|
+
/** Create an identifier pattern element */
|
|
86
|
+
export declare const ident: () => IdentSchema & {
|
|
87
|
+
as<TName extends string>(name: TName): NamedSchema<IdentSchema, TName>;
|
|
88
|
+
};
|
|
89
|
+
/** Create a constant (exact match) pattern element */
|
|
90
|
+
export declare const constVal: <const TValue extends string>(value: TValue) => ConstSchema<TValue> & {
|
|
91
|
+
as<TName extends string>(name: TName): NamedSchema<ConstSchema<TValue>, TName>;
|
|
92
|
+
};
|
|
93
|
+
/** Create a null literal pattern element */
|
|
94
|
+
export declare const nullLiteral: () => NullSchema & {
|
|
95
|
+
as<TName extends string>(name: TName): NamedSchema<NullSchema, TName>;
|
|
96
|
+
};
|
|
97
|
+
/** Create a boolean literal pattern element */
|
|
98
|
+
export declare const booleanLiteral: () => BooleanSchema & {
|
|
99
|
+
as<TName extends string>(name: TName): NamedSchema<BooleanSchema, TName>;
|
|
100
|
+
};
|
|
101
|
+
/** Create an undefined literal pattern element */
|
|
102
|
+
export declare const undefinedLiteral: () => UndefinedSchema & {
|
|
103
|
+
as<TName extends string>(name: TName): NamedSchema<UndefinedSchema, TName>;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Create a LEFT-HAND SIDE expression element.
|
|
107
|
+
*
|
|
108
|
+
* Uses TNextLevel grammar to avoid left-recursion.
|
|
109
|
+
* Must be at position 0 in a pattern.
|
|
110
|
+
*
|
|
111
|
+
* The constraint parameter is validated at compile time using arktype.
|
|
112
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* const add = defineNode({
|
|
117
|
+
* pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
|
|
118
|
+
* // lhs parses at higher precedence to avoid infinite recursion
|
|
119
|
+
* });
|
|
120
|
+
*
|
|
121
|
+
* // Valid arktype constraints:
|
|
122
|
+
* lhs('number') // primitive
|
|
123
|
+
* lhs('string.email') // subtype
|
|
124
|
+
* lhs('number >= 0') // constraint
|
|
125
|
+
* lhs('string | number') // union
|
|
126
|
+
*
|
|
127
|
+
* // Invalid - causes compile error:
|
|
128
|
+
* // lhs('garbage')
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare const lhs: <const TConstraint extends string>(constraint?: type.validate<TConstraint>) => ExprSchema<TConstraint, "lhs"> & {
|
|
132
|
+
as<TName extends string>(name: TName): NamedSchema<ExprSchema<TConstraint, "lhs">, TName>;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Create a RIGHT-HAND SIDE expression element.
|
|
136
|
+
*
|
|
137
|
+
* Uses TCurrentLevel grammar to maintain precedence and enable right-associativity.
|
|
138
|
+
* Used for right operands of binary operators.
|
|
139
|
+
*
|
|
140
|
+
* The constraint parameter is validated at compile time using arktype.
|
|
141
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* const add = defineNode({
|
|
146
|
+
* pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
|
|
147
|
+
* // rhs parses at same level for right-associativity: 1+2+3 = 1+(2+3)
|
|
148
|
+
* });
|
|
149
|
+
*
|
|
150
|
+
* // Valid arktype constraints:
|
|
151
|
+
* rhs('number') // primitive
|
|
152
|
+
* rhs('string.email') // subtype
|
|
153
|
+
* rhs('number >= 0') // constraint
|
|
154
|
+
* rhs('string | number') // union
|
|
155
|
+
*
|
|
156
|
+
* // Invalid - causes compile error:
|
|
157
|
+
* // rhs('garbage')
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export declare const rhs: <const TConstraint extends string>(constraint?: type.validate<TConstraint>) => ExprSchema<TConstraint, "rhs"> & {
|
|
161
|
+
as<TName extends string>(name: TName): NamedSchema<ExprSchema<TConstraint, "rhs">, TName>;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Create a FULL expression element.
|
|
165
|
+
*
|
|
166
|
+
* Uses TFullGrammar - resets to full grammar (precedence 0).
|
|
167
|
+
* Used for delimited contexts like parentheses, ternary branches, function arguments.
|
|
168
|
+
*
|
|
169
|
+
* The constraint parameter is validated at compile time using arktype.
|
|
170
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```ts
|
|
174
|
+
* const parens = defineNode({
|
|
175
|
+
* pattern: [constVal("("), expr().as("inner"), constVal(")")],
|
|
176
|
+
* // expr() can contain ANY expression, including low-precedence operators
|
|
177
|
+
* });
|
|
178
|
+
*
|
|
179
|
+
* const ternary = defineNode({
|
|
180
|
+
* pattern: [lhs("boolean").as("cond"), constVal("?"), expr().as("then"), constVal(":"), expr().as("else")],
|
|
181
|
+
* // The branches can contain any expression
|
|
182
|
+
* });
|
|
183
|
+
*
|
|
184
|
+
* // Valid arktype constraints:
|
|
185
|
+
* expr('number') // primitive
|
|
186
|
+
* expr('string.email') // subtype
|
|
187
|
+
* expr('number >= 0') // constraint
|
|
188
|
+
* expr('string | number') // union
|
|
189
|
+
*
|
|
190
|
+
* // Invalid - causes compile error:
|
|
191
|
+
* // expr('garbage')
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export declare const expr: <const TConstraint extends string>(constraint?: type.validate<TConstraint>) => ExprSchema<TConstraint, "expr"> & {
|
|
195
|
+
as<TName extends string>(name: TName): NamedSchema<ExprSchema<TConstraint, "expr">, TName>;
|
|
196
|
+
};
|
|
197
|
+
/** Precedence type: number for operators (lower = binds looser) */
|
|
198
|
+
export type Precedence = number;
|
|
199
|
+
/**
|
|
200
|
+
* Marker for computed union result types.
|
|
201
|
+
* When used as resultType, the outputSchema is computed at parse time
|
|
202
|
+
* as the union of the outputSchemas from the specified bindings.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```ts
|
|
206
|
+
* const ternary = defineNode({
|
|
207
|
+
* name: 'ternary',
|
|
208
|
+
* pattern: [
|
|
209
|
+
* lhs('boolean').as('condition'),
|
|
210
|
+
* constVal('?'),
|
|
211
|
+
* expr().as('then'),
|
|
212
|
+
* constVal(':'),
|
|
213
|
+
* rhs().as('else'),
|
|
214
|
+
* ],
|
|
215
|
+
* precedence: 1,
|
|
216
|
+
* resultType: { union: ['then', 'else'] }, // Computed union of then/else types
|
|
217
|
+
* });
|
|
218
|
+
*
|
|
219
|
+
* // Parsing 'x ? true : 0' would result in outputSchema: 'boolean | number'
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
export interface UnionResultType<TBindings extends readonly string[] = readonly string[]> {
|
|
223
|
+
readonly union: TBindings;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Result type specification for nodes.
|
|
227
|
+
* Can be either:
|
|
228
|
+
* - A string literal type (static result type validated by arktype)
|
|
229
|
+
* - A UnionResultType object for computed union types
|
|
230
|
+
*/
|
|
231
|
+
export type ResultTypeSpec<T extends string | UnionResultType = string | UnionResultType> = T;
|
|
232
|
+
/**
|
|
233
|
+
* A node definition schema.
|
|
234
|
+
*
|
|
235
|
+
* This is the return type of defineNode. The generic parameters capture
|
|
236
|
+
* all the literal types needed for compile-time grammar computation:
|
|
237
|
+
* - TName: The unique node name (e.g., "add", "mul")
|
|
238
|
+
* - TPattern: The pattern elements as a tuple type
|
|
239
|
+
* - TPrecedence: The precedence (lower = binds looser, tried first)
|
|
240
|
+
* - TResultType: The result type (e.g., "number", "string", or UnionResultType)
|
|
241
|
+
*/
|
|
242
|
+
export interface NodeSchema<TName extends string = string, TPattern extends readonly PatternSchema[] = readonly PatternSchema[], TPrecedence extends Precedence = Precedence, TResultType = unknown> {
|
|
243
|
+
readonly name: TName;
|
|
244
|
+
readonly pattern: TPattern;
|
|
245
|
+
readonly precedence: TPrecedence;
|
|
246
|
+
readonly resultType: TResultType;
|
|
247
|
+
/**
|
|
248
|
+
* Optional: Transform parsed bindings into node fields.
|
|
249
|
+
* If not provided, bindings are used directly as fields.
|
|
250
|
+
*
|
|
251
|
+
* @param bindings - The named values extracted from pattern via .as()
|
|
252
|
+
* @param ctx - The parse context
|
|
253
|
+
* @returns The fields to add to the AST node
|
|
254
|
+
*/
|
|
255
|
+
readonly configure?: ConfigureFn;
|
|
256
|
+
/**
|
|
257
|
+
* Optional: Evaluate the AST node to produce a runtime value.
|
|
258
|
+
*
|
|
259
|
+
* @param node - The full AST node including name, outputSchema, and fields
|
|
260
|
+
* @param ctx - The evaluation context
|
|
261
|
+
* @returns The evaluated value
|
|
262
|
+
*/
|
|
263
|
+
readonly eval?: EvalFn;
|
|
264
|
+
}
|
|
265
|
+
/** Stored function type for configure - loose for variance compatibility */
|
|
266
|
+
export type ConfigureFn = <$>(bindings: Record<string, unknown>, ctx: $) => Record<string, unknown>;
|
|
267
|
+
/** Stored function type for eval - loose for variance compatibility */
|
|
268
|
+
export type EvalFn = <$>(values: Record<string, unknown>, ctx: $) => unknown;
|
|
269
|
+
/**
|
|
270
|
+
* Define a node type for the grammar.
|
|
271
|
+
*
|
|
272
|
+
* The `const` modifier on generics ensures literal types are preserved:
|
|
273
|
+
* - name: "add" (not string)
|
|
274
|
+
* - pattern: readonly [ExprSchema<"number">, ConstSchema<"+">, ExprSchema<"number">]
|
|
275
|
+
* - precedence: 1 or "atom" (not number | "atom")
|
|
276
|
+
* - resultType: "number" (not string), or { union: ['then', 'else'] } for computed unions
|
|
277
|
+
*
|
|
278
|
+
* The resultType parameter is validated at compile time using arktype (for string types).
|
|
279
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
280
|
+
* Valid arktype types include: primitives, subtypes (string.email), constraints (number >= 0), unions.
|
|
281
|
+
*
|
|
282
|
+
* For computed union types, use { union: ['bindingA', 'bindingB'] } to compute the
|
|
283
|
+
* outputSchema as the union of the outputSchemas of the named bindings.
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* ```ts
|
|
287
|
+
* // Static result type
|
|
288
|
+
* const add = defineNode({
|
|
289
|
+
* name: "add",
|
|
290
|
+
* pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
|
|
291
|
+
* precedence: 1,
|
|
292
|
+
* resultType: "number",
|
|
293
|
+
* eval: ({ left, right }) => left + right,
|
|
294
|
+
* });
|
|
295
|
+
*
|
|
296
|
+
* // Computed union result type
|
|
297
|
+
* const ternary = defineNode({
|
|
298
|
+
* name: "ternary",
|
|
299
|
+
* pattern: [
|
|
300
|
+
* lhs("boolean").as("condition"),
|
|
301
|
+
* constVal("?"),
|
|
302
|
+
* expr().as("then"),
|
|
303
|
+
* constVal(":"),
|
|
304
|
+
* rhs().as("else"),
|
|
305
|
+
* ],
|
|
306
|
+
* precedence: 0,
|
|
307
|
+
* resultType: { union: ["then", "else"] }, // outputSchema = then | else
|
|
308
|
+
* eval: ({ condition, then, else: elseVal }) => (condition ? then : elseVal),
|
|
309
|
+
* });
|
|
310
|
+
*
|
|
311
|
+
* // Valid resultType examples:
|
|
312
|
+
* // resultType: 'string' // primitive
|
|
313
|
+
* // resultType: 'string.email' // subtype
|
|
314
|
+
* // resultType: 'number >= 0' // constraint
|
|
315
|
+
* // resultType: 'string | number' // static union
|
|
316
|
+
* // resultType: { union: ['a', 'b'] } // computed union from bindings
|
|
317
|
+
*
|
|
318
|
+
* // Invalid - causes compile error:
|
|
319
|
+
* // resultType: 'garbage'
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
export declare function defineNode<const TName extends string, const TPattern extends readonly PatternSchema[], const TPrecedence extends Precedence, const TBindings extends readonly string[]>(config: {
|
|
323
|
+
readonly name: TName;
|
|
324
|
+
readonly pattern: TPattern;
|
|
325
|
+
readonly precedence: TPrecedence;
|
|
326
|
+
readonly resultType: UnionResultType<TBindings>;
|
|
327
|
+
readonly configure?: <$>(bindings: InferBindings<TPattern>, ctx: $) => Record<string, unknown>;
|
|
328
|
+
readonly eval?: <$>(values: InferEvaluatedBindings<TPattern>, ctx: $) => unknown;
|
|
329
|
+
}): NodeSchema<TName, TPattern, TPrecedence, UnionResultType<TBindings>>;
|
|
330
|
+
export declare function defineNode<const TName extends string, const TPattern extends readonly PatternSchema[], const TPrecedence extends Precedence, const TResultType extends UnionResultType>(config: {
|
|
331
|
+
readonly name: TName;
|
|
332
|
+
readonly pattern: TPattern;
|
|
333
|
+
readonly precedence: TPrecedence;
|
|
334
|
+
readonly resultType: TResultType;
|
|
335
|
+
readonly configure?: <$>(bindings: InferBindings<TPattern>, ctx: $) => Record<string, unknown>;
|
|
336
|
+
readonly eval?: <$>(values: InferEvaluatedBindings<TPattern>, ctx: $) => unknown;
|
|
337
|
+
}): NodeSchema<TName, TPattern, TPrecedence, TResultType>;
|
|
338
|
+
export declare function defineNode<const TName extends string, const TPattern extends readonly PatternSchema[], const TPrecedence extends Precedence, const TResultType>(config: {
|
|
339
|
+
readonly name: TName;
|
|
340
|
+
readonly pattern: TPattern;
|
|
341
|
+
readonly precedence: TPrecedence;
|
|
342
|
+
readonly resultType: type.validate<TResultType>;
|
|
343
|
+
readonly configure?: <$>(bindings: InferBindings<TPattern>, ctx: $) => Record<string, unknown>;
|
|
344
|
+
readonly eval?: <$>(values: InferEvaluatedBindings<TPattern>, ctx: $) => unknown;
|
|
345
|
+
}): NodeSchema<TName, TPattern, TPrecedence, TResultType>;
|
|
346
|
+
/** Extract the operator from a binary pattern (second element should be ConstSchema) */
|
|
347
|
+
export type ExtractOperator<T extends readonly PatternSchema[]> = T extends readonly [
|
|
348
|
+
PatternSchema,
|
|
349
|
+
infer Op extends ConstSchema,
|
|
350
|
+
PatternSchema
|
|
351
|
+
] ? Op['value'] : never;
|
|
352
|
+
/**
|
|
353
|
+
* Validate that a type definition string is a valid arktype definition.
|
|
354
|
+
* This is used at compile time to reject invalid type strings like 'garbage'.
|
|
355
|
+
*
|
|
356
|
+
* @example
|
|
357
|
+
* ```ts
|
|
358
|
+
* type Valid = ValidArkType<'number'>; // 'number' - valid
|
|
359
|
+
* type Valid2 = ValidArkType<'string.email'>; // 'string.email' - valid
|
|
360
|
+
* type Invalid = ValidArkType<'garbage'>; // never - invalid
|
|
361
|
+
* ```
|
|
362
|
+
*/
|
|
363
|
+
export type ValidArkType<T extends string> = type.validate<T>;
|
|
364
|
+
/**
|
|
365
|
+
* Map a valid arktype schema string to its TypeScript runtime type.
|
|
366
|
+
* Uses arktype's type.infer directly (no fallback for invalid types).
|
|
367
|
+
*
|
|
368
|
+
* Correctly infers types for:
|
|
369
|
+
* - Primitives: 'number', 'string', 'boolean', 'null', 'undefined'
|
|
370
|
+
* - Subtypes: 'string.email', 'number.integer' → base type (string, number)
|
|
371
|
+
* - Constraints: 'number >= 0' → base type (number)
|
|
372
|
+
* - Unions: 'string | number' → union type (string | number)
|
|
373
|
+
*
|
|
374
|
+
* Returns `never` for invalid type strings (no fallback).
|
|
375
|
+
* Use `SchemaToType` if you need a fallback to `unknown`.
|
|
376
|
+
*
|
|
377
|
+
* @example
|
|
378
|
+
* ```ts
|
|
379
|
+
* type N = ArkTypeSchemaToType<'number'>; // number
|
|
380
|
+
* type S = ArkTypeSchemaToType<'string'>; // string
|
|
381
|
+
* type E = ArkTypeSchemaToType<'string.email'>; // string
|
|
382
|
+
* type C = ArkTypeSchemaToType<'number >= 0'>; // number
|
|
383
|
+
* type U = ArkTypeSchemaToType<'string | number'>; // string | number
|
|
384
|
+
* type X = ArkTypeSchemaToType<'invalid'>; // never
|
|
385
|
+
* ```
|
|
386
|
+
*/
|
|
387
|
+
export type ArkTypeSchemaToType<T extends string> = type.infer<T>;
|
|
388
|
+
/**
|
|
389
|
+
* Map a schema type string to its TypeScript runtime type.
|
|
390
|
+
*
|
|
391
|
+
* Uses arktype's `type.infer<T>` to infer TypeScript types from ANY valid
|
|
392
|
+
* arktype type string.
|
|
393
|
+
*
|
|
394
|
+
* Supports ALL arktype types:
|
|
395
|
+
* - Primitives: 'number', 'string', 'boolean', 'null', 'undefined', 'unknown'
|
|
396
|
+
* - Subtypes: 'string.email', 'string.uuid', 'number.integer', etc.
|
|
397
|
+
* - Constraints: 'number >= 0', 'number > 0', '1 <= number <= 100', etc.
|
|
398
|
+
* - Unions: 'string | number', 'boolean | null', etc.
|
|
399
|
+
* - Arrays: 'string[]', 'number[]', '(string | number)[]', etc.
|
|
400
|
+
*
|
|
401
|
+
* Falls back to `unknown` for:
|
|
402
|
+
* - Generic 'string' type (not a literal)
|
|
403
|
+
* - Invalid arktype type strings
|
|
404
|
+
*
|
|
405
|
+
* @example
|
|
406
|
+
* ```ts
|
|
407
|
+
* type N = SchemaToType<'number'>; // number
|
|
408
|
+
* type S = SchemaToType<'string'>; // string
|
|
409
|
+
* type E = SchemaToType<'string.email'>; // string
|
|
410
|
+
* type C = SchemaToType<'number >= 0'>; // number
|
|
411
|
+
* type U = SchemaToType<'string | number'>; // string | number
|
|
412
|
+
* type A = SchemaToType<'string[]'>; // string[]
|
|
413
|
+
* type X = SchemaToType<'invalid'>; // unknown (fallback)
|
|
414
|
+
* ```
|
|
415
|
+
*/
|
|
416
|
+
export type SchemaToType<T> = string extends T ? unknown : number extends T ? unknown : boolean extends T ? unknown : [type.infer<T>] extends [never] ? unknown : type.infer<T>;
|
|
417
|
+
/**
|
|
418
|
+
* Infer the AST node type from a pattern schema.
|
|
419
|
+
* This maps schema types to their corresponding node types.
|
|
420
|
+
*
|
|
421
|
+
* Note: ExprSchema maps to `unknown` since the actual type depends on the constraint
|
|
422
|
+
* and what's parsed. The runtime parser will fill this in.
|
|
423
|
+
*/
|
|
424
|
+
export type InferNodeType<TSchema extends PatternSchemaBase> = TSchema extends NumberSchema ? NumberNode : TSchema extends StringSchema ? StringNode : TSchema extends IdentSchema ? IdentNode : TSchema extends ConstSchema ? ConstNode : TSchema extends NullSchema ? NullNode : TSchema extends BooleanSchema ? BooleanNode : TSchema extends UndefinedSchema ? UndefinedNode : TSchema extends ExprSchema<infer C> ? {
|
|
425
|
+
outputSchema: C;
|
|
426
|
+
} : never;
|
|
427
|
+
/**
|
|
428
|
+
* Infer the evaluated value type from a pattern schema.
|
|
429
|
+
* For ExprSchema, uses the constraint to determine the runtime type.
|
|
430
|
+
*/
|
|
431
|
+
export type InferEvaluatedType<TSchema extends PatternSchemaBase> = TSchema extends NumberSchema ? number : TSchema extends StringSchema ? string : TSchema extends IdentSchema ? unknown : TSchema extends ConstSchema ? never : TSchema extends NullSchema ? null : TSchema extends BooleanSchema ? boolean : TSchema extends UndefinedSchema ? undefined : TSchema extends ExprSchema<infer C extends string> ? SchemaToType<C> : never;
|
|
432
|
+
/**
|
|
433
|
+
* Extract all NamedSchema entries from a pattern tuple as a union.
|
|
434
|
+
*/
|
|
435
|
+
type ExtractNamedSchemas<TPattern extends readonly PatternSchema[]> = TPattern[number] extends infer E ? E extends NamedSchema<infer S, infer N> ? {
|
|
436
|
+
schema: S;
|
|
437
|
+
name: N;
|
|
438
|
+
} : never : never;
|
|
439
|
+
/**
|
|
440
|
+
* Infer bindings object type from a pattern (AST nodes).
|
|
441
|
+
* Used for configure() - receives parsed AST nodes.
|
|
442
|
+
*
|
|
443
|
+
* @example
|
|
444
|
+
* ```ts
|
|
445
|
+
* type Pattern = [
|
|
446
|
+
* NamedSchema<ExprSchema<"number", "lhs">, "left">,
|
|
447
|
+
* ConstSchema<"+">,
|
|
448
|
+
* NamedSchema<ExprSchema<"number", "rhs">, "right">
|
|
449
|
+
* ];
|
|
450
|
+
* type Bindings = InferBindings<Pattern>;
|
|
451
|
+
* // { left: { outputSchema: "number" }; right: { outputSchema: "number" } }
|
|
452
|
+
* ```
|
|
453
|
+
*/
|
|
454
|
+
export type InferBindings<TPattern extends readonly PatternSchema[]> = {
|
|
455
|
+
[K in ExtractNamedSchemas<TPattern> as K['name']]: InferNodeType<K['schema']>;
|
|
456
|
+
};
|
|
457
|
+
/**
|
|
458
|
+
* Infer evaluated bindings from a pattern (runtime values).
|
|
459
|
+
* Used for eval() - receives already-evaluated values.
|
|
460
|
+
*
|
|
461
|
+
* @example
|
|
462
|
+
* ```ts
|
|
463
|
+
* type Pattern = [
|
|
464
|
+
* NamedSchema<ExprSchema<"number", "lhs">, "left">,
|
|
465
|
+
* ConstSchema<"+">,
|
|
466
|
+
* NamedSchema<ExprSchema<"number", "rhs">, "right">
|
|
467
|
+
* ];
|
|
468
|
+
* type EvalBindings = InferEvaluatedBindings<Pattern>;
|
|
469
|
+
* // { left: number; right: number }
|
|
470
|
+
* ```
|
|
471
|
+
*/
|
|
472
|
+
export type InferEvaluatedBindings<TPattern extends readonly PatternSchema[]> = {
|
|
473
|
+
[K in ExtractNamedSchemas<TPattern> as K['name']]: InferEvaluatedType<K['schema']>;
|
|
474
|
+
};
|
|
475
|
+
export {};
|
|
476
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Types
|
|
3
|
+
*
|
|
4
|
+
* Pattern element schemas for defineNode. These are pure type descriptors
|
|
5
|
+
* that preserve literal types for compile-time grammar computation.
|
|
6
|
+
*
|
|
7
|
+
* The key insight: defineNode returns a schema object whose TYPE carries
|
|
8
|
+
* all the information needed for type-level parsing. No runtime magic.
|
|
9
|
+
*/
|
|
10
|
+
/** Create a schema wrapper with .as() method */
|
|
11
|
+
function withAs(schema) {
|
|
12
|
+
return Object.assign(schema, {
|
|
13
|
+
as(name) {
|
|
14
|
+
return { ...schema, __named: true, name };
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Pattern Element Factories
|
|
20
|
+
// =============================================================================
|
|
21
|
+
/** Create a number literal pattern element */
|
|
22
|
+
export const number = () => withAs({ kind: 'number' });
|
|
23
|
+
/** Create a string literal pattern element */
|
|
24
|
+
export const string = (quotes) => withAs({ kind: 'string', quotes });
|
|
25
|
+
/** Create an identifier pattern element */
|
|
26
|
+
export const ident = () => withAs({ kind: 'ident' });
|
|
27
|
+
/** Create a constant (exact match) pattern element */
|
|
28
|
+
export const constVal = (value) => withAs({ kind: 'const', value });
|
|
29
|
+
/** Create a null literal pattern element */
|
|
30
|
+
export const nullLiteral = () => withAs({ kind: 'null' });
|
|
31
|
+
/** Create a boolean literal pattern element */
|
|
32
|
+
export const booleanLiteral = () => withAs({ kind: 'boolean' });
|
|
33
|
+
/** Create an undefined literal pattern element */
|
|
34
|
+
export const undefinedLiteral = () => withAs({ kind: 'undefined' });
|
|
35
|
+
/**
|
|
36
|
+
* Create a LEFT-HAND SIDE expression element.
|
|
37
|
+
*
|
|
38
|
+
* Uses TNextLevel grammar to avoid left-recursion.
|
|
39
|
+
* Must be at position 0 in a pattern.
|
|
40
|
+
*
|
|
41
|
+
* The constraint parameter is validated at compile time using arktype.
|
|
42
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const add = defineNode({
|
|
47
|
+
* pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
|
|
48
|
+
* // lhs parses at higher precedence to avoid infinite recursion
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Valid arktype constraints:
|
|
52
|
+
* lhs('number') // primitive
|
|
53
|
+
* lhs('string.email') // subtype
|
|
54
|
+
* lhs('number >= 0') // constraint
|
|
55
|
+
* lhs('string | number') // union
|
|
56
|
+
*
|
|
57
|
+
* // Invalid - causes compile error:
|
|
58
|
+
* // lhs('garbage')
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export const lhs = (constraint) => withAs({
|
|
62
|
+
kind: 'expr',
|
|
63
|
+
constraint: constraint,
|
|
64
|
+
role: 'lhs',
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Create a RIGHT-HAND SIDE expression element.
|
|
68
|
+
*
|
|
69
|
+
* Uses TCurrentLevel grammar to maintain precedence and enable right-associativity.
|
|
70
|
+
* Used for right operands of binary operators.
|
|
71
|
+
*
|
|
72
|
+
* The constraint parameter is validated at compile time using arktype.
|
|
73
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* const add = defineNode({
|
|
78
|
+
* pattern: [lhs("number").as("left"), constVal("+"), rhs("number").as("right")],
|
|
79
|
+
* // rhs parses at same level for right-associativity: 1+2+3 = 1+(2+3)
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* // Valid arktype constraints:
|
|
83
|
+
* rhs('number') // primitive
|
|
84
|
+
* rhs('string.email') // subtype
|
|
85
|
+
* rhs('number >= 0') // constraint
|
|
86
|
+
* rhs('string | number') // union
|
|
87
|
+
*
|
|
88
|
+
* // Invalid - causes compile error:
|
|
89
|
+
* // rhs('garbage')
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export const rhs = (constraint) => withAs({
|
|
93
|
+
kind: 'expr',
|
|
94
|
+
constraint: constraint,
|
|
95
|
+
role: 'rhs',
|
|
96
|
+
});
|
|
97
|
+
/**
|
|
98
|
+
* Create a FULL expression element.
|
|
99
|
+
*
|
|
100
|
+
* Uses TFullGrammar - resets to full grammar (precedence 0).
|
|
101
|
+
* Used for delimited contexts like parentheses, ternary branches, function arguments.
|
|
102
|
+
*
|
|
103
|
+
* The constraint parameter is validated at compile time using arktype.
|
|
104
|
+
* Invalid type strings like 'garbage' will cause TypeScript errors.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const parens = defineNode({
|
|
109
|
+
* pattern: [constVal("("), expr().as("inner"), constVal(")")],
|
|
110
|
+
* // expr() can contain ANY expression, including low-precedence operators
|
|
111
|
+
* });
|
|
112
|
+
*
|
|
113
|
+
* const ternary = defineNode({
|
|
114
|
+
* pattern: [lhs("boolean").as("cond"), constVal("?"), expr().as("then"), constVal(":"), expr().as("else")],
|
|
115
|
+
* // The branches can contain any expression
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* // Valid arktype constraints:
|
|
119
|
+
* expr('number') // primitive
|
|
120
|
+
* expr('string.email') // subtype
|
|
121
|
+
* expr('number >= 0') // constraint
|
|
122
|
+
* expr('string | number') // union
|
|
123
|
+
*
|
|
124
|
+
* // Invalid - causes compile error:
|
|
125
|
+
* // expr('garbage')
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export const expr = (constraint) => withAs({
|
|
129
|
+
kind: 'expr',
|
|
130
|
+
constraint: constraint,
|
|
131
|
+
role: 'expr',
|
|
132
|
+
});
|
|
133
|
+
// Implementation
|
|
134
|
+
export function defineNode(config) {
|
|
135
|
+
return config;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=index.js.map
|