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,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Benchmarks for Stringent Parser
|
|
3
|
+
*
|
|
4
|
+
* This file contains benchmarks to measure and document the performance
|
|
5
|
+
* characteristics of the runtime parser.
|
|
6
|
+
*
|
|
7
|
+
* Run with: pnpm bench
|
|
8
|
+
*/
|
|
9
|
+
import { bench, describe } from 'vitest';
|
|
10
|
+
import { createParser, defineNode, constVal, lhs, rhs, expr } from './index.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Test Grammar Setup
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Basic arithmetic grammar
|
|
15
|
+
const add = defineNode({
|
|
16
|
+
name: 'add',
|
|
17
|
+
pattern: [lhs('number').as('left'), constVal('+'), rhs('number').as('right')],
|
|
18
|
+
precedence: 1,
|
|
19
|
+
resultType: 'number',
|
|
20
|
+
});
|
|
21
|
+
const mul = defineNode({
|
|
22
|
+
name: 'mul',
|
|
23
|
+
pattern: [lhs('number').as('left'), constVal('*'), rhs('number').as('right')],
|
|
24
|
+
precedence: 2,
|
|
25
|
+
resultType: 'number',
|
|
26
|
+
});
|
|
27
|
+
const pow = defineNode({
|
|
28
|
+
name: 'pow',
|
|
29
|
+
pattern: [lhs('number').as('left'), constVal('**'), rhs('number').as('right')],
|
|
30
|
+
precedence: 3,
|
|
31
|
+
resultType: 'number',
|
|
32
|
+
});
|
|
33
|
+
const sub = defineNode({
|
|
34
|
+
name: 'sub',
|
|
35
|
+
pattern: [lhs('number').as('left'), constVal('-'), rhs('number').as('right')],
|
|
36
|
+
precedence: 1,
|
|
37
|
+
resultType: 'number',
|
|
38
|
+
});
|
|
39
|
+
const div = defineNode({
|
|
40
|
+
name: 'div',
|
|
41
|
+
pattern: [lhs('number').as('left'), constVal('/'), rhs('number').as('right')],
|
|
42
|
+
precedence: 2,
|
|
43
|
+
resultType: 'number',
|
|
44
|
+
});
|
|
45
|
+
// Comparison operators
|
|
46
|
+
const eq = defineNode({
|
|
47
|
+
name: 'eq',
|
|
48
|
+
pattern: [lhs().as('left'), constVal('=='), rhs().as('right')],
|
|
49
|
+
precedence: 0,
|
|
50
|
+
resultType: 'boolean',
|
|
51
|
+
});
|
|
52
|
+
// String operations
|
|
53
|
+
const concat = defineNode({
|
|
54
|
+
name: 'concat',
|
|
55
|
+
pattern: [lhs('string').as('left'), constVal('++'), rhs('string').as('right')],
|
|
56
|
+
precedence: 1,
|
|
57
|
+
resultType: 'string',
|
|
58
|
+
});
|
|
59
|
+
// Ternary
|
|
60
|
+
const ternary = defineNode({
|
|
61
|
+
name: 'ternary',
|
|
62
|
+
pattern: [
|
|
63
|
+
lhs('boolean').as('condition'),
|
|
64
|
+
constVal('?'),
|
|
65
|
+
expr().as('then'),
|
|
66
|
+
constVal(':'),
|
|
67
|
+
rhs().as('else'),
|
|
68
|
+
],
|
|
69
|
+
precedence: 0,
|
|
70
|
+
resultType: 'unknown',
|
|
71
|
+
});
|
|
72
|
+
// Create parsers
|
|
73
|
+
const arithmeticParser = createParser([add, sub, mul, div, pow]);
|
|
74
|
+
const fullParser = createParser([add, sub, mul, div, pow, eq, concat, ternary]);
|
|
75
|
+
// =============================================================================
|
|
76
|
+
// Test Data Generation
|
|
77
|
+
// =============================================================================
|
|
78
|
+
/** Generate a simple number literal */
|
|
79
|
+
function simpleNumber() {
|
|
80
|
+
return String(Math.floor(Math.random() * 1000));
|
|
81
|
+
}
|
|
82
|
+
/** Generate a chained addition expression */
|
|
83
|
+
function chainedAddition(count) {
|
|
84
|
+
return Array.from({ length: count }, () => simpleNumber()).join(' + ');
|
|
85
|
+
}
|
|
86
|
+
/** Generate a chained multiplication expression */
|
|
87
|
+
function chainedMultiplication(count) {
|
|
88
|
+
return Array.from({ length: count }, () => simpleNumber()).join(' * ');
|
|
89
|
+
}
|
|
90
|
+
/** Generate a mixed precedence expression */
|
|
91
|
+
function mixedPrecedence(count) {
|
|
92
|
+
const ops = ['+', '-', '*', '/', '**'];
|
|
93
|
+
let expr = simpleNumber();
|
|
94
|
+
for (let i = 0; i < count - 1; i++) {
|
|
95
|
+
const op = ops[i % ops.length];
|
|
96
|
+
expr += ` ${op} ${simpleNumber()}`;
|
|
97
|
+
}
|
|
98
|
+
return expr;
|
|
99
|
+
}
|
|
100
|
+
/** Generate nested parentheses */
|
|
101
|
+
function nestedParens(depth) {
|
|
102
|
+
let expr = simpleNumber();
|
|
103
|
+
for (let i = 0; i < depth; i++) {
|
|
104
|
+
expr = `(${expr})`;
|
|
105
|
+
}
|
|
106
|
+
return expr;
|
|
107
|
+
}
|
|
108
|
+
/** Generate expression with nested parentheses and operations */
|
|
109
|
+
function nestedParensWithOps(depth) {
|
|
110
|
+
let expr = simpleNumber();
|
|
111
|
+
for (let i = 0; i < depth; i++) {
|
|
112
|
+
expr = `(${expr} + ${simpleNumber()})`;
|
|
113
|
+
}
|
|
114
|
+
return expr;
|
|
115
|
+
}
|
|
116
|
+
// =============================================================================
|
|
117
|
+
// Benchmarks: Simple Literals
|
|
118
|
+
// =============================================================================
|
|
119
|
+
describe('Simple Literals', () => {
|
|
120
|
+
bench('number literal', () => {
|
|
121
|
+
arithmeticParser.parse('42', {});
|
|
122
|
+
});
|
|
123
|
+
bench('decimal number', () => {
|
|
124
|
+
arithmeticParser.parse('3.14159', {});
|
|
125
|
+
});
|
|
126
|
+
bench('large number', () => {
|
|
127
|
+
arithmeticParser.parse('9007199254740991', {});
|
|
128
|
+
});
|
|
129
|
+
bench('string literal (double quotes)', () => {
|
|
130
|
+
fullParser.parse('"hello world"', {});
|
|
131
|
+
});
|
|
132
|
+
bench('string literal (single quotes)', () => {
|
|
133
|
+
fullParser.parse("'hello world'", {});
|
|
134
|
+
});
|
|
135
|
+
bench('identifier', () => {
|
|
136
|
+
arithmeticParser.parse('variableName', { variableName: 'number' });
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
// =============================================================================
|
|
140
|
+
// Benchmarks: Binary Operations
|
|
141
|
+
// =============================================================================
|
|
142
|
+
describe('Binary Operations', () => {
|
|
143
|
+
bench('simple addition: 1 + 2', () => {
|
|
144
|
+
arithmeticParser.parse('1 + 2', {});
|
|
145
|
+
});
|
|
146
|
+
bench('simple multiplication: 3 * 4', () => {
|
|
147
|
+
arithmeticParser.parse('3 * 4', {});
|
|
148
|
+
});
|
|
149
|
+
bench('simple exponentiation: 2 ** 8', () => {
|
|
150
|
+
arithmeticParser.parse('2 ** 8', {});
|
|
151
|
+
});
|
|
152
|
+
bench('mixed precedence: 1 + 2 * 3', () => {
|
|
153
|
+
arithmeticParser.parse('1 + 2 * 3', {});
|
|
154
|
+
});
|
|
155
|
+
bench('mixed precedence: 2 * 3 + 4 * 5', () => {
|
|
156
|
+
arithmeticParser.parse('2 * 3 + 4 * 5', {});
|
|
157
|
+
});
|
|
158
|
+
bench('three precedence levels: 1 + 2 * 3 ** 4', () => {
|
|
159
|
+
arithmeticParser.parse('1 + 2 * 3 ** 4', {});
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
// =============================================================================
|
|
163
|
+
// Benchmarks: Chained Operations
|
|
164
|
+
// =============================================================================
|
|
165
|
+
describe('Chained Operations', () => {
|
|
166
|
+
const chain5 = chainedAddition(5);
|
|
167
|
+
const chain10 = chainedAddition(10);
|
|
168
|
+
const chain20 = chainedAddition(20);
|
|
169
|
+
const chain50 = chainedAddition(50);
|
|
170
|
+
bench('5-element addition chain', () => {
|
|
171
|
+
arithmeticParser.parse(chain5, {});
|
|
172
|
+
});
|
|
173
|
+
bench('10-element addition chain', () => {
|
|
174
|
+
arithmeticParser.parse(chain10, {});
|
|
175
|
+
});
|
|
176
|
+
bench('20-element addition chain', () => {
|
|
177
|
+
arithmeticParser.parse(chain20, {});
|
|
178
|
+
});
|
|
179
|
+
bench('50-element addition chain', () => {
|
|
180
|
+
arithmeticParser.parse(chain50, {});
|
|
181
|
+
});
|
|
182
|
+
const mulChain10 = chainedMultiplication(10);
|
|
183
|
+
const mulChain20 = chainedMultiplication(20);
|
|
184
|
+
bench('10-element multiplication chain', () => {
|
|
185
|
+
arithmeticParser.parse(mulChain10, {});
|
|
186
|
+
});
|
|
187
|
+
bench('20-element multiplication chain', () => {
|
|
188
|
+
arithmeticParser.parse(mulChain20, {});
|
|
189
|
+
});
|
|
190
|
+
const mixed10 = mixedPrecedence(10);
|
|
191
|
+
const mixed20 = mixedPrecedence(20);
|
|
192
|
+
bench('10-element mixed precedence', () => {
|
|
193
|
+
arithmeticParser.parse(mixed10, {});
|
|
194
|
+
});
|
|
195
|
+
bench('20-element mixed precedence', () => {
|
|
196
|
+
arithmeticParser.parse(mixed20, {});
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
// =============================================================================
|
|
200
|
+
// Benchmarks: Nested Parentheses
|
|
201
|
+
// =============================================================================
|
|
202
|
+
describe('Nested Parentheses', () => {
|
|
203
|
+
const parens5 = nestedParens(5);
|
|
204
|
+
const parens10 = nestedParens(10);
|
|
205
|
+
const parens20 = nestedParens(20);
|
|
206
|
+
bench('5 levels of nesting', () => {
|
|
207
|
+
arithmeticParser.parse(parens5, {});
|
|
208
|
+
});
|
|
209
|
+
bench('10 levels of nesting', () => {
|
|
210
|
+
arithmeticParser.parse(parens10, {});
|
|
211
|
+
});
|
|
212
|
+
bench('20 levels of nesting', () => {
|
|
213
|
+
arithmeticParser.parse(parens20, {});
|
|
214
|
+
});
|
|
215
|
+
const parensOps5 = nestedParensWithOps(5);
|
|
216
|
+
const parensOps10 = nestedParensWithOps(10);
|
|
217
|
+
const parensOps20 = nestedParensWithOps(20);
|
|
218
|
+
bench('5 levels with operations', () => {
|
|
219
|
+
arithmeticParser.parse(parensOps5, {});
|
|
220
|
+
});
|
|
221
|
+
bench('10 levels with operations', () => {
|
|
222
|
+
arithmeticParser.parse(parensOps10, {});
|
|
223
|
+
});
|
|
224
|
+
bench('20 levels with operations', () => {
|
|
225
|
+
arithmeticParser.parse(parensOps20, {});
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
// =============================================================================
|
|
229
|
+
// Benchmarks: Complex Expressions
|
|
230
|
+
// =============================================================================
|
|
231
|
+
describe('Complex Expressions', () => {
|
|
232
|
+
bench('precedence override: (1 + 2) * 3', () => {
|
|
233
|
+
arithmeticParser.parse('(1 + 2) * 3', {});
|
|
234
|
+
});
|
|
235
|
+
bench('nested groups: ((1 + 2) * 3) + 4', () => {
|
|
236
|
+
arithmeticParser.parse('((1 + 2) * 3) + 4', {});
|
|
237
|
+
});
|
|
238
|
+
bench('complex: (1 + 2) * (3 + 4)', () => {
|
|
239
|
+
arithmeticParser.parse('(1 + 2) * (3 + 4)', {});
|
|
240
|
+
});
|
|
241
|
+
bench('very complex: ((1 + 2) * 3 + 4) ** 2 / (5 - 6)', () => {
|
|
242
|
+
arithmeticParser.parse('((1 + 2) * 3 + 4) ** 2 / (5 - 6)', {});
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
// =============================================================================
|
|
246
|
+
// Benchmarks: Parser Creation
|
|
247
|
+
// =============================================================================
|
|
248
|
+
describe('Parser Creation', () => {
|
|
249
|
+
bench('create simple parser (1 node)', () => {
|
|
250
|
+
createParser([add]);
|
|
251
|
+
});
|
|
252
|
+
bench('create medium parser (5 nodes)', () => {
|
|
253
|
+
createParser([add, sub, mul, div, pow]);
|
|
254
|
+
});
|
|
255
|
+
bench('create full parser (8 nodes)', () => {
|
|
256
|
+
createParser([add, sub, mul, div, pow, eq, concat, ternary]);
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
// =============================================================================
|
|
260
|
+
// Benchmarks: Grammar Complexity
|
|
261
|
+
// =============================================================================
|
|
262
|
+
describe('Grammar Complexity', () => {
|
|
263
|
+
// Create parsers with varying numbers of operators at the same precedence
|
|
264
|
+
const samePrec2 = createParser([
|
|
265
|
+
defineNode({
|
|
266
|
+
name: 'op1',
|
|
267
|
+
pattern: [lhs('number').as('l'), constVal('|1|'), rhs('number').as('r')],
|
|
268
|
+
precedence: 1,
|
|
269
|
+
resultType: 'number',
|
|
270
|
+
}),
|
|
271
|
+
defineNode({
|
|
272
|
+
name: 'op2',
|
|
273
|
+
pattern: [lhs('number').as('l'), constVal('|2|'), rhs('number').as('r')],
|
|
274
|
+
precedence: 1,
|
|
275
|
+
resultType: 'number',
|
|
276
|
+
}),
|
|
277
|
+
]);
|
|
278
|
+
const samePrec5 = createParser([
|
|
279
|
+
defineNode({
|
|
280
|
+
name: 'op1',
|
|
281
|
+
pattern: [lhs('number').as('l'), constVal('|1|'), rhs('number').as('r')],
|
|
282
|
+
precedence: 1,
|
|
283
|
+
resultType: 'number',
|
|
284
|
+
}),
|
|
285
|
+
defineNode({
|
|
286
|
+
name: 'op2',
|
|
287
|
+
pattern: [lhs('number').as('l'), constVal('|2|'), rhs('number').as('r')],
|
|
288
|
+
precedence: 1,
|
|
289
|
+
resultType: 'number',
|
|
290
|
+
}),
|
|
291
|
+
defineNode({
|
|
292
|
+
name: 'op3',
|
|
293
|
+
pattern: [lhs('number').as('l'), constVal('|3|'), rhs('number').as('r')],
|
|
294
|
+
precedence: 1,
|
|
295
|
+
resultType: 'number',
|
|
296
|
+
}),
|
|
297
|
+
defineNode({
|
|
298
|
+
name: 'op4',
|
|
299
|
+
pattern: [lhs('number').as('l'), constVal('|4|'), rhs('number').as('r')],
|
|
300
|
+
precedence: 1,
|
|
301
|
+
resultType: 'number',
|
|
302
|
+
}),
|
|
303
|
+
defineNode({
|
|
304
|
+
name: 'op5',
|
|
305
|
+
pattern: [lhs('number').as('l'), constVal('|5|'), rhs('number').as('r')],
|
|
306
|
+
precedence: 1,
|
|
307
|
+
resultType: 'number',
|
|
308
|
+
}),
|
|
309
|
+
]);
|
|
310
|
+
bench('2 ops at same precedence - first op', () => {
|
|
311
|
+
samePrec2.parse('1 |1| 2', {});
|
|
312
|
+
});
|
|
313
|
+
bench('2 ops at same precedence - second op', () => {
|
|
314
|
+
samePrec2.parse('1 |2| 2', {});
|
|
315
|
+
});
|
|
316
|
+
bench('5 ops at same precedence - first op', () => {
|
|
317
|
+
samePrec5.parse('1 |1| 2', {});
|
|
318
|
+
});
|
|
319
|
+
bench('5 ops at same precedence - fifth op', () => {
|
|
320
|
+
samePrec5.parse('1 |5| 2', {});
|
|
321
|
+
});
|
|
322
|
+
bench('5 ops at same precedence - number literal only', () => {
|
|
323
|
+
samePrec5.parse('42', {});
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
// =============================================================================
|
|
327
|
+
// Benchmarks: String Parsing
|
|
328
|
+
// =============================================================================
|
|
329
|
+
describe('String Parsing', () => {
|
|
330
|
+
const stringParser = createParser([concat]);
|
|
331
|
+
const shortStr = '"hello"';
|
|
332
|
+
const mediumStr = '"' + 'a'.repeat(100) + '"';
|
|
333
|
+
const longStr = '"' + 'a'.repeat(1000) + '"';
|
|
334
|
+
bench('short string (5 chars)', () => {
|
|
335
|
+
stringParser.parse(shortStr, {});
|
|
336
|
+
});
|
|
337
|
+
bench('medium string (100 chars)', () => {
|
|
338
|
+
stringParser.parse(mediumStr, {});
|
|
339
|
+
});
|
|
340
|
+
bench('long string (1000 chars)', () => {
|
|
341
|
+
stringParser.parse(longStr, {});
|
|
342
|
+
});
|
|
343
|
+
const escapedStr = '"hello\\nworld\\t\\u0041"';
|
|
344
|
+
bench('string with escapes', () => {
|
|
345
|
+
stringParser.parse(escapedStr, {});
|
|
346
|
+
});
|
|
347
|
+
bench('string concatenation', () => {
|
|
348
|
+
stringParser.parse('"hello" ++ "world"', {});
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
// =============================================================================
|
|
352
|
+
// Benchmarks: Context Resolution
|
|
353
|
+
// =============================================================================
|
|
354
|
+
describe('Context Resolution', () => {
|
|
355
|
+
const smallContext = { x: 'number' };
|
|
356
|
+
const mediumContext = {
|
|
357
|
+
a: 'number',
|
|
358
|
+
b: 'number',
|
|
359
|
+
c: 'number',
|
|
360
|
+
d: 'number',
|
|
361
|
+
e: 'number',
|
|
362
|
+
x: 'number',
|
|
363
|
+
};
|
|
364
|
+
const largeContext = Object.fromEntries(Array.from({ length: 100 }, (_, i) => [`var${i}`, 'number']));
|
|
365
|
+
largeContext['x'] = 'number';
|
|
366
|
+
bench('small context - identifier lookup', () => {
|
|
367
|
+
arithmeticParser.parse('x', smallContext);
|
|
368
|
+
});
|
|
369
|
+
bench('medium context - identifier lookup', () => {
|
|
370
|
+
arithmeticParser.parse('x', mediumContext);
|
|
371
|
+
});
|
|
372
|
+
bench('large context - identifier lookup', () => {
|
|
373
|
+
arithmeticParser.parse('x', largeContext);
|
|
374
|
+
});
|
|
375
|
+
bench('context - expression with identifiers', () => {
|
|
376
|
+
arithmeticParser.parse('x + x * x', smallContext);
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
//# sourceMappingURL=performance.bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.bench.js","sourceRoot":"","sources":["../src/performance.bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Primitive Factory System
|
|
3
|
+
*
|
|
4
|
+
* Creates context-aware parser primitives using Parsebox Token API.
|
|
5
|
+
* Parse methods are generic - return types computed from input literals.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: All parse methods MUST be generic in context:
|
|
8
|
+
* parse<TInput extends string, $ extends Context>(input: TInput, $: $)
|
|
9
|
+
*
|
|
10
|
+
* DO NOT remove the $ generic parameter - it ensures schema type information
|
|
11
|
+
* flows through the parser chain. See CLAUDE.md for details.
|
|
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';
|
|
17
|
+
/** Parse result: empty = no match, [value, rest] = matched */
|
|
18
|
+
export type ParseResult<T, R extends string = string> = [] | [T, R];
|
|
19
|
+
export interface ASTNode<TType extends string = string, TOutputSchema = unknown> {
|
|
20
|
+
node: TType;
|
|
21
|
+
outputSchema: TOutputSchema;
|
|
22
|
+
}
|
|
23
|
+
export interface IdentNode<TName extends string = string, TOutputSchema = 'unknown'> extends ASTNode<'identifier', TOutputSchema> {
|
|
24
|
+
name: TName;
|
|
25
|
+
}
|
|
26
|
+
export type NumberNode<TValue extends string = string> = ASTNode<'literal', 'number'> & {
|
|
27
|
+
raw: TValue;
|
|
28
|
+
value: ToNumber<TValue>;
|
|
29
|
+
};
|
|
30
|
+
export type StringNode<TValue extends string = string> = ASTNode<'literal', 'string'> & {
|
|
31
|
+
raw: TValue;
|
|
32
|
+
value: TValue;
|
|
33
|
+
};
|
|
34
|
+
export type NullNode = ASTNode<'literal', 'null'> & {
|
|
35
|
+
raw: 'null';
|
|
36
|
+
value: null;
|
|
37
|
+
};
|
|
38
|
+
export type UndefinedNode = ASTNode<'literal', 'undefined'> & {
|
|
39
|
+
raw: 'undefined';
|
|
40
|
+
value: undefined;
|
|
41
|
+
};
|
|
42
|
+
export type BooleanNode<TValue extends string = string> = ASTNode<'literal', 'boolean'> & {
|
|
43
|
+
raw: TValue;
|
|
44
|
+
value: TValue extends 'true' ? true : false;
|
|
45
|
+
};
|
|
46
|
+
export type LiteralNode = NumberNode | StringNode | NullNode | UndefinedNode | BooleanNode;
|
|
47
|
+
export type ConstNode<TValue extends string = string> = ASTNode<'const', TValue>;
|
|
48
|
+
/** Computed parse result for Number */
|
|
49
|
+
export type ParseNumber<TInput extends string> = Token.TNumber<TInput> extends [infer V extends string, infer R extends string] ? [NumberNode<V>, R] : [];
|
|
50
|
+
/** Computed parse result for String */
|
|
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] : [];
|
|
52
|
+
/** Computed parse result for Ident - looks up value type from schema */
|
|
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] : [];
|
|
54
|
+
/** Computed parse result for Const */
|
|
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] : [];
|
|
56
|
+
/**
|
|
57
|
+
* Base parser interface. All parsers implement this.
|
|
58
|
+
* Context is generic to preserve type information.
|
|
59
|
+
*/
|
|
60
|
+
export interface IParser {
|
|
61
|
+
parse<TInput extends string, $ extends Context>(input: TInput, $: $): [] | [unknown, string];
|
|
62
|
+
}
|
|
63
|
+
/** Number primitive - parses numeric literals using Token.Number */
|
|
64
|
+
declare class _Number {
|
|
65
|
+
readonly __primitive: "number";
|
|
66
|
+
parse<TInput extends string, $ extends Context>(input: TInput, _$: $): ParseNumber<TInput>;
|
|
67
|
+
}
|
|
68
|
+
/** String primitive - parses quoted string literals using Token.String */
|
|
69
|
+
declare class _String<TQuotes extends string[]> {
|
|
70
|
+
readonly __primitive: "string";
|
|
71
|
+
readonly quotes: TQuotes;
|
|
72
|
+
constructor(quotes: TQuotes);
|
|
73
|
+
parse<TInput extends string, $ extends Context>(input: TInput, _$: $): ParseString<TQuotes, TInput>;
|
|
74
|
+
}
|
|
75
|
+
/** Identifier primitive - parses identifiers using Token.Ident */
|
|
76
|
+
declare class _Ident {
|
|
77
|
+
readonly __primitive: "ident";
|
|
78
|
+
parse<TInput extends string, $ extends Context>(input: TInput, $: $): ParseIdent<TInput, $>;
|
|
79
|
+
}
|
|
80
|
+
/** Const primitive - parses exact string matches using Token.Const */
|
|
81
|
+
declare class _Const<TValue extends string> {
|
|
82
|
+
readonly __primitive: "const";
|
|
83
|
+
readonly value: TValue;
|
|
84
|
+
constructor(value: TValue);
|
|
85
|
+
parse<TInput extends string, $ extends Context>(input: TInput, _$: $): ParseConst<TValue, TInput>;
|
|
86
|
+
}
|
|
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>;
|
|
95
|
+
export type { _Number, _String, _Ident, _Const };
|
|
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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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Primitive Factory System
|
|
3
|
+
*
|
|
4
|
+
* Creates context-aware parser primitives using Parsebox Token API.
|
|
5
|
+
* Parse methods are generic - return types computed from input literals.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: All parse methods MUST be generic in context:
|
|
8
|
+
* parse<TInput extends string, $ extends Context>(input: TInput, $: $)
|
|
9
|
+
*
|
|
10
|
+
* DO NOT remove the $ generic parameter - it ensures schema type information
|
|
11
|
+
* flows through the parser chain. See CLAUDE.md for details.
|
|
12
|
+
*/
|
|
13
|
+
import { Token } from '@sinclair/parsebox';
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Primitive Implementations
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/** Number primitive - parses numeric literals using Token.Number */
|
|
18
|
+
class _Number {
|
|
19
|
+
__primitive = 'number';
|
|
20
|
+
parse(input, _$) {
|
|
21
|
+
// Runtime type is [] | [string, string], but TypeScript computes exact type
|
|
22
|
+
const result = Token.Number(input);
|
|
23
|
+
if (result.length !== 2)
|
|
24
|
+
return [];
|
|
25
|
+
return [
|
|
26
|
+
{
|
|
27
|
+
node: 'literal',
|
|
28
|
+
raw: result[0],
|
|
29
|
+
value: +result[0],
|
|
30
|
+
outputSchema: 'number',
|
|
31
|
+
},
|
|
32
|
+
result[1],
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** String primitive - parses quoted string literals using Token.String */
|
|
37
|
+
class _String {
|
|
38
|
+
__primitive = 'string';
|
|
39
|
+
quotes;
|
|
40
|
+
constructor(quotes) {
|
|
41
|
+
this.quotes = quotes;
|
|
42
|
+
}
|
|
43
|
+
parse(input, _$) {
|
|
44
|
+
const result = Token.String(this.quotes, input);
|
|
45
|
+
if (result.length !== 2)
|
|
46
|
+
return [];
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
node: 'literal',
|
|
50
|
+
raw: result[0],
|
|
51
|
+
value: result[0],
|
|
52
|
+
outputSchema: 'string',
|
|
53
|
+
},
|
|
54
|
+
result[1],
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Identifier primitive - parses identifiers using Token.Ident */
|
|
59
|
+
class _Ident {
|
|
60
|
+
__primitive = 'ident';
|
|
61
|
+
parse(input, $) {
|
|
62
|
+
const result = Token.Ident(input);
|
|
63
|
+
if (result.length !== 2)
|
|
64
|
+
return [];
|
|
65
|
+
const name = result[0];
|
|
66
|
+
const data = $.data;
|
|
67
|
+
const valueType = name in data ? data[name] : 'unknown';
|
|
68
|
+
return [
|
|
69
|
+
{ node: 'identifier', name, outputSchema: valueType },
|
|
70
|
+
result[1],
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Const primitive - parses exact string matches using Token.Const */
|
|
75
|
+
class _Const {
|
|
76
|
+
__primitive = 'const';
|
|
77
|
+
value;
|
|
78
|
+
constructor(value) {
|
|
79
|
+
this.value = value;
|
|
80
|
+
}
|
|
81
|
+
parse(input, _$) {
|
|
82
|
+
const result = Token.Const(this.value, input);
|
|
83
|
+
if (result.length !== 2)
|
|
84
|
+
return [];
|
|
85
|
+
return [
|
|
86
|
+
{ node: 'const', outputSchema: JSON.stringify(this.value) },
|
|
87
|
+
result[1],
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// =============================================================================
|
|
92
|
+
// Internal Factories (used by runtime parser)
|
|
93
|
+
// =============================================================================
|
|
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":"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"}
|