@rcrsr/rill 0.4.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/check/config.d.ts.map +1 -1
- package/dist/check/config.js +9 -9
- package/dist/check/config.js.map +1 -1
- package/dist/check/visitor.d.ts.map +1 -1
- package/dist/check/visitor.js +1 -0
- package/dist/check/visitor.js.map +1 -1
- package/dist/cli-check.js +8 -9
- package/dist/cli-check.js.map +1 -1
- package/dist/cli-eval.js +4 -5
- package/dist/cli-eval.js.map +1 -1
- package/dist/cli-exec.d.ts.map +1 -1
- package/dist/cli-exec.js +2 -3
- package/dist/cli-exec.js.map +1 -1
- package/dist/cli-shared.d.ts +5 -3
- package/dist/cli-shared.d.ts.map +1 -1
- package/dist/cli-shared.js +5 -9
- package/dist/cli-shared.js.map +1 -1
- package/dist/generated/introspection-data.d.ts +2 -0
- package/dist/generated/introspection-data.d.ts.map +1 -0
- package/dist/generated/introspection-data.js +618 -0
- package/dist/generated/introspection-data.js.map +1 -0
- package/dist/generated/version-data.d.ts +18 -0
- package/dist/generated/version-data.d.ts.map +1 -0
- package/dist/generated/version-data.js +16 -0
- package/dist/generated/version-data.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lexer/errors.d.ts +3 -2
- package/dist/lexer/errors.d.ts.map +1 -1
- package/dist/lexer/errors.js +19 -4
- package/dist/lexer/errors.js.map +1 -1
- package/dist/lexer/operators.d.ts.map +1 -1
- package/dist/lexer/operators.js +1 -0
- package/dist/lexer/operators.js.map +1 -1
- package/dist/lexer/readers.d.ts.map +1 -1
- package/dist/lexer/readers.js +4 -4
- package/dist/lexer/readers.js.map +1 -1
- package/dist/lexer/tokenizer.js +1 -1
- package/dist/lexer/tokenizer.js.map +1 -1
- package/dist/parser/helpers.d.ts.map +1 -1
- package/dist/parser/helpers.js +5 -3
- package/dist/parser/helpers.js.map +1 -1
- package/dist/parser/parser-collect.js +1 -1
- package/dist/parser/parser-collect.js.map +1 -1
- package/dist/parser/parser-control.js +6 -4
- package/dist/parser/parser-control.js.map +1 -1
- package/dist/parser/parser-expr.d.ts.map +1 -1
- package/dist/parser/parser-expr.js +24 -4
- package/dist/parser/parser-expr.js.map +1 -1
- package/dist/parser/parser-extract.js +1 -1
- package/dist/parser/parser-extract.js.map +1 -1
- package/dist/parser/parser-functions.js +2 -1
- package/dist/parser/parser-functions.js.map +1 -1
- package/dist/parser/parser-literals.js +11 -11
- package/dist/parser/parser-literals.js.map +1 -1
- package/dist/parser/parser-script.js +2 -0
- package/dist/parser/parser-script.js.map +1 -1
- package/dist/parser/parser-variables.js +7 -3
- package/dist/parser/parser-variables.js.map +1 -1
- package/dist/parser/state.js +1 -1
- package/dist/parser/state.js.map +1 -1
- package/dist/runtime/core/callable.d.ts +8 -0
- package/dist/runtime/core/callable.d.ts.map +1 -1
- package/dist/runtime/core/callable.js +6 -6
- package/dist/runtime/core/callable.js.map +1 -1
- package/dist/runtime/core/context.d.ts.map +1 -1
- package/dist/runtime/core/context.js +17 -8
- package/dist/runtime/core/context.js.map +1 -1
- package/dist/runtime/core/equals.d.ts.map +1 -1
- package/dist/runtime/core/equals.js +2 -1
- package/dist/runtime/core/equals.js.map +1 -1
- package/dist/runtime/core/eval/base.js +2 -2
- package/dist/runtime/core/eval/base.js.map +1 -1
- package/dist/runtime/core/eval/mixins/annotations.js +2 -2
- package/dist/runtime/core/eval/mixins/annotations.js.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.js +32 -26
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -1
- package/dist/runtime/core/eval/mixins/collections.js +13 -13
- package/dist/runtime/core/eval/mixins/collections.js.map +1 -1
- package/dist/runtime/core/eval/mixins/control-flow.js +1 -1
- package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -1
- package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/core.js +37 -14
- package/dist/runtime/core/eval/mixins/core.js.map +1 -1
- package/dist/runtime/core/eval/mixins/expressions.d.ts +2 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/expressions.js +80 -27
- package/dist/runtime/core/eval/mixins/expressions.js.map +1 -1
- package/dist/runtime/core/eval/mixins/extraction.js +14 -14
- package/dist/runtime/core/eval/mixins/extraction.js.map +1 -1
- package/dist/runtime/core/eval/mixins/literals.d.ts +4 -1
- package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/literals.js +40 -20
- package/dist/runtime/core/eval/mixins/literals.js.map +1 -1
- package/dist/runtime/core/eval/mixins/types.js +3 -3
- package/dist/runtime/core/eval/mixins/types.js.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.js +32 -32
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -1
- package/dist/runtime/core/execute.js +2 -2
- package/dist/runtime/core/execute.js.map +1 -1
- package/dist/runtime/core/introspection-data.d.ts +2 -0
- package/dist/runtime/core/introspection-data.d.ts.map +1 -0
- package/dist/runtime/core/introspection-data.js +618 -0
- package/dist/runtime/core/introspection-data.js.map +1 -0
- package/dist/runtime/core/introspection.d.ts +59 -0
- package/dist/runtime/core/introspection.d.ts.map +1 -0
- package/dist/runtime/core/introspection.js +120 -0
- package/dist/runtime/core/introspection.js.map +1 -0
- package/dist/runtime/core/version-data.d.ts +18 -0
- package/dist/runtime/core/version-data.d.ts.map +1 -0
- package/dist/runtime/core/version-data.js +16 -0
- package/dist/runtime/core/version-data.js.map +1 -0
- package/dist/runtime/ext/builtins.js +21 -21
- package/dist/runtime/ext/builtins.js.map +1 -1
- package/dist/runtime/ext/extensions.js +1 -1
- package/dist/runtime/ext/extensions.js.map +1 -1
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/types.d.ts +116 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +457 -11
- package/dist/types.js.map +1 -1
- package/docs/02_types.md +22 -0
- package/docs/04_operators.md +22 -1
- package/docs/05_control-flow.md +62 -0
- package/docs/11_reference.md +3 -2
- package/docs/12_examples.md +4 -4
- package/docs/14_host-integration.md +152 -0
- package/docs/15_grammar.ebnf +19 -1
- package/docs/88_errors.md +902 -0
- package/docs/99_llm-reference.txt +13 -0
- package/package.json +4 -2
package/dist/types.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Rill AST Types
|
|
3
3
|
* Based on docs/grammar.ebnf
|
|
4
4
|
*/
|
|
5
|
+
import { VERSION } from './generated/version-data.js';
|
|
5
6
|
// ============================================================
|
|
6
7
|
// ERROR HIERARCHY
|
|
7
8
|
// ============================================================
|
|
@@ -31,12 +32,418 @@ export const RILL_ERROR_CODES = {
|
|
|
31
32
|
CHECK_INVALID_CONFIG: 'CHECK_INVALID_CONFIG',
|
|
32
33
|
CHECK_FIX_COLLISION: 'CHECK_FIX_COLLISION',
|
|
33
34
|
};
|
|
35
|
+
class ErrorRegistryImpl {
|
|
36
|
+
byId;
|
|
37
|
+
byLegacyCode;
|
|
38
|
+
constructor(definitions) {
|
|
39
|
+
const idMap = new Map();
|
|
40
|
+
const codeMap = new Map();
|
|
41
|
+
for (const def of definitions) {
|
|
42
|
+
idMap.set(def.errorId, def);
|
|
43
|
+
const existing = codeMap.get(def.legacyCode) ?? [];
|
|
44
|
+
codeMap.set(def.legacyCode, [...existing, def]);
|
|
45
|
+
}
|
|
46
|
+
this.byId = idMap;
|
|
47
|
+
this.byLegacyCode = codeMap;
|
|
48
|
+
}
|
|
49
|
+
get(errorId) {
|
|
50
|
+
return this.byId.get(errorId);
|
|
51
|
+
}
|
|
52
|
+
getByLegacyCode(code) {
|
|
53
|
+
return this.byLegacyCode.get(code) ?? [];
|
|
54
|
+
}
|
|
55
|
+
has(errorId) {
|
|
56
|
+
return this.byId.has(errorId);
|
|
57
|
+
}
|
|
58
|
+
get size() {
|
|
59
|
+
return this.byId.size;
|
|
60
|
+
}
|
|
61
|
+
entries() {
|
|
62
|
+
return this.byId.entries();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** All error definitions indexed by error ID */
|
|
66
|
+
const ERROR_DEFINITIONS = [
|
|
67
|
+
// Lexer Errors (RILL-L0xx)
|
|
68
|
+
{
|
|
69
|
+
errorId: 'RILL-L001',
|
|
70
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
71
|
+
category: 'lexer',
|
|
72
|
+
description: 'Unterminated string literal',
|
|
73
|
+
messageTemplate: 'Unterminated string literal at {location}',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
errorId: 'RILL-L002',
|
|
77
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
78
|
+
category: 'lexer',
|
|
79
|
+
description: 'Invalid character',
|
|
80
|
+
messageTemplate: 'Invalid character {char} at {location}',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
errorId: 'RILL-L003',
|
|
84
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
85
|
+
category: 'lexer',
|
|
86
|
+
description: 'Invalid number format',
|
|
87
|
+
messageTemplate: 'Invalid number format: {value}',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
errorId: 'RILL-L004',
|
|
91
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
92
|
+
category: 'lexer',
|
|
93
|
+
description: 'Unterminated multiline string',
|
|
94
|
+
messageTemplate: 'Unterminated multiline string starting at {location}',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
errorId: 'RILL-L005',
|
|
98
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
99
|
+
category: 'lexer',
|
|
100
|
+
description: 'Invalid escape sequence',
|
|
101
|
+
messageTemplate: 'Invalid escape sequence {sequence} at {location}',
|
|
102
|
+
},
|
|
103
|
+
// Parse Errors (RILL-P0xx)
|
|
104
|
+
{
|
|
105
|
+
errorId: 'RILL-P001',
|
|
106
|
+
legacyCode: RILL_ERROR_CODES.PARSE_UNEXPECTED_TOKEN,
|
|
107
|
+
category: 'parse',
|
|
108
|
+
description: 'Unexpected token',
|
|
109
|
+
messageTemplate: 'Unexpected token {token}, expected {expected}',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
errorId: 'RILL-P002',
|
|
113
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
114
|
+
category: 'parse',
|
|
115
|
+
description: 'Unexpected end of input',
|
|
116
|
+
messageTemplate: 'Unexpected end of input, expected {expected}',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
errorId: 'RILL-P003',
|
|
120
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_TYPE,
|
|
121
|
+
category: 'parse',
|
|
122
|
+
description: 'Invalid type annotation',
|
|
123
|
+
messageTemplate: 'Invalid type annotation: {type}',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
errorId: 'RILL-P004',
|
|
127
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
128
|
+
category: 'parse',
|
|
129
|
+
description: 'Invalid expression',
|
|
130
|
+
messageTemplate: 'Invalid expression: {details}',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
errorId: 'RILL-P005',
|
|
134
|
+
legacyCode: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
135
|
+
category: 'parse',
|
|
136
|
+
description: 'Missing delimiter',
|
|
137
|
+
messageTemplate: 'Missing {delimiter}, found {found}',
|
|
138
|
+
},
|
|
139
|
+
// Runtime Errors (RILL-R0xx)
|
|
140
|
+
{
|
|
141
|
+
errorId: 'RILL-R001',
|
|
142
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_TYPE_ERROR,
|
|
143
|
+
category: 'runtime',
|
|
144
|
+
description: 'Parameter type mismatch',
|
|
145
|
+
messageTemplate: 'Function {function} expects parameter {param} (position {position}) to be {expected}, got {actual}',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
errorId: 'RILL-R002',
|
|
149
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_TYPE_ERROR,
|
|
150
|
+
category: 'runtime',
|
|
151
|
+
description: 'Operator type mismatch',
|
|
152
|
+
messageTemplate: 'Operator {operator} cannot be applied to {leftType} and {rightType}',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
errorId: 'RILL-R003',
|
|
156
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_TYPE_ERROR,
|
|
157
|
+
category: 'runtime',
|
|
158
|
+
description: 'Method receiver type mismatch',
|
|
159
|
+
messageTemplate: 'Method {method} cannot be called on {type}',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
errorId: 'RILL-R004',
|
|
163
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_TYPE_ERROR,
|
|
164
|
+
category: 'runtime',
|
|
165
|
+
description: 'Type conversion failure',
|
|
166
|
+
messageTemplate: 'Cannot convert {value} to {targetType}',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
errorId: 'RILL-R005',
|
|
170
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_UNDEFINED_VARIABLE,
|
|
171
|
+
category: 'runtime',
|
|
172
|
+
description: 'Undefined variable',
|
|
173
|
+
messageTemplate: 'Variable {name} is not defined',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
errorId: 'RILL-R006',
|
|
177
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_UNDEFINED_FUNCTION,
|
|
178
|
+
category: 'runtime',
|
|
179
|
+
description: 'Undefined function',
|
|
180
|
+
messageTemplate: 'Function {name} is not defined',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
errorId: 'RILL-R007',
|
|
184
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_UNDEFINED_METHOD,
|
|
185
|
+
category: 'runtime',
|
|
186
|
+
description: 'Undefined method',
|
|
187
|
+
messageTemplate: 'Method {method} is not defined on {type}',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
errorId: 'RILL-R008',
|
|
191
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_UNDEFINED_ANNOTATION,
|
|
192
|
+
category: 'runtime',
|
|
193
|
+
description: 'Undefined annotation',
|
|
194
|
+
messageTemplate: 'Annotation {key} is not defined',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
errorId: 'RILL-R009',
|
|
198
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_PROPERTY_NOT_FOUND,
|
|
199
|
+
category: 'runtime',
|
|
200
|
+
description: 'Property not found',
|
|
201
|
+
messageTemplate: 'Property {property} not found on {type}',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
errorId: 'RILL-R010',
|
|
205
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_LIMIT_EXCEEDED,
|
|
206
|
+
category: 'runtime',
|
|
207
|
+
description: 'Iteration limit exceeded',
|
|
208
|
+
messageTemplate: 'Iteration limit of {limit} exceeded',
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
errorId: 'RILL-R011',
|
|
212
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_INVALID_PATTERN,
|
|
213
|
+
category: 'runtime',
|
|
214
|
+
description: 'Invalid regex pattern',
|
|
215
|
+
messageTemplate: 'Invalid regex pattern: {pattern}',
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
errorId: 'RILL-R012',
|
|
219
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_TIMEOUT,
|
|
220
|
+
category: 'runtime',
|
|
221
|
+
description: 'Operation timeout',
|
|
222
|
+
messageTemplate: 'Operation timed out after {timeout}ms',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
errorId: 'RILL-R013',
|
|
226
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_ABORTED,
|
|
227
|
+
category: 'runtime',
|
|
228
|
+
description: 'Execution aborted',
|
|
229
|
+
messageTemplate: 'Execution aborted by signal',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
errorId: 'RILL-R014',
|
|
233
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_AUTO_EXCEPTION,
|
|
234
|
+
category: 'runtime',
|
|
235
|
+
description: 'Auto-exception triggered',
|
|
236
|
+
messageTemplate: 'Auto-exception triggered: pattern {pattern} matched',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
errorId: 'RILL-R015',
|
|
240
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_ASSERTION_FAILED,
|
|
241
|
+
category: 'runtime',
|
|
242
|
+
description: 'Assertion failed',
|
|
243
|
+
messageTemplate: 'Assertion failed: {condition}',
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
errorId: 'RILL-R016',
|
|
247
|
+
legacyCode: RILL_ERROR_CODES.RUNTIME_ERROR_RAISED,
|
|
248
|
+
category: 'runtime',
|
|
249
|
+
description: 'Error statement executed',
|
|
250
|
+
messageTemplate: 'Error raised: {message}',
|
|
251
|
+
},
|
|
252
|
+
// Check Errors (RILL-C0xx)
|
|
253
|
+
{
|
|
254
|
+
errorId: 'RILL-C001',
|
|
255
|
+
legacyCode: RILL_ERROR_CODES.CHECK_FILE_NOT_FOUND,
|
|
256
|
+
category: 'check',
|
|
257
|
+
description: 'File not found',
|
|
258
|
+
messageTemplate: 'File not found: {path}',
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
errorId: 'RILL-C002',
|
|
262
|
+
legacyCode: RILL_ERROR_CODES.CHECK_FILE_UNREADABLE,
|
|
263
|
+
category: 'check',
|
|
264
|
+
description: 'File unreadable',
|
|
265
|
+
messageTemplate: 'File unreadable: {path}',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
errorId: 'RILL-C003',
|
|
269
|
+
legacyCode: RILL_ERROR_CODES.CHECK_INVALID_CONFIG,
|
|
270
|
+
category: 'check',
|
|
271
|
+
description: 'Invalid configuration',
|
|
272
|
+
messageTemplate: 'Invalid configuration: {details}',
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
errorId: 'RILL-C004',
|
|
276
|
+
legacyCode: RILL_ERROR_CODES.CHECK_FIX_COLLISION,
|
|
277
|
+
category: 'check',
|
|
278
|
+
description: 'Fix collision detected',
|
|
279
|
+
messageTemplate: 'Fix collision detected for {location}',
|
|
280
|
+
},
|
|
281
|
+
];
|
|
282
|
+
/**
|
|
283
|
+
* Global error registry instance.
|
|
284
|
+
* Read-only singleton initialized at module load.
|
|
285
|
+
*/
|
|
286
|
+
export const ERROR_REGISTRY = new ErrorRegistryImpl(ERROR_DEFINITIONS);
|
|
287
|
+
// ============================================================
|
|
288
|
+
// TEMPLATE RENDERING
|
|
289
|
+
// ============================================================
|
|
290
|
+
/**
|
|
291
|
+
* Renders a message template by replacing placeholders with context values.
|
|
292
|
+
*
|
|
293
|
+
* Placeholder format: {varName}
|
|
294
|
+
* Missing context values render as empty string.
|
|
295
|
+
* Non-string values are coerced via String().
|
|
296
|
+
* Invalid templates (unclosed braces) return template unchanged.
|
|
297
|
+
*
|
|
298
|
+
* @param template - Template string with {placeholder} syntax
|
|
299
|
+
* @param context - Key-value pairs for placeholder replacement
|
|
300
|
+
* @returns Rendered message with placeholders replaced
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* renderMessage("Expected {expected}, got {actual}", {expected: "string", actual: "number"})
|
|
304
|
+
* // Returns: "Expected string, got number"
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* renderMessage("Hello {name}", {})
|
|
308
|
+
* // Returns: "Hello "
|
|
309
|
+
*/
|
|
310
|
+
export function renderMessage(template, context) {
|
|
311
|
+
let result = '';
|
|
312
|
+
let i = 0;
|
|
313
|
+
while (i < template.length) {
|
|
314
|
+
const char = template[i];
|
|
315
|
+
if (char === '{') {
|
|
316
|
+
// Check if this is the start of a placeholder
|
|
317
|
+
const nextChar = template[i + 1];
|
|
318
|
+
if (nextChar !== '{') {
|
|
319
|
+
// Find the closing brace
|
|
320
|
+
let j = i + 1;
|
|
321
|
+
while (j < template.length && template[j] !== '}') {
|
|
322
|
+
j++;
|
|
323
|
+
}
|
|
324
|
+
// Check if we found a closing brace
|
|
325
|
+
if (j >= template.length) {
|
|
326
|
+
// Unclosed brace - return template unchanged
|
|
327
|
+
return template;
|
|
328
|
+
}
|
|
329
|
+
// Extract placeholder name and render value
|
|
330
|
+
const placeholderName = template.slice(i + 1, j);
|
|
331
|
+
const value = context[placeholderName];
|
|
332
|
+
// Render value: missing = empty string, non-string coerced via String()
|
|
333
|
+
if (value === undefined) {
|
|
334
|
+
result += '';
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
try {
|
|
338
|
+
result += String(value);
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
// String() coercion failed - use default toString behavior
|
|
342
|
+
result += Object.prototype.toString.call(value);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Move past closing brace. Each character is visited once (O(n) performance).
|
|
346
|
+
i = j + 1;
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// Regular character - append to result
|
|
351
|
+
result += char;
|
|
352
|
+
i++;
|
|
353
|
+
}
|
|
354
|
+
return result;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Generates documentation URL for an error ID.
|
|
358
|
+
*
|
|
359
|
+
* Format: https://github.com/rcrsr/rill/blob/v{version}/docs/88_errors.md#{errorId}
|
|
360
|
+
* Error ID is lowercased in anchor.
|
|
361
|
+
*
|
|
362
|
+
* @param errorId - Error identifier (format: RILL-{category}{3-digit}, e.g., RILL-R001)
|
|
363
|
+
* @param version - Semver version (format: X.Y.Z)
|
|
364
|
+
* @returns Documentation URL, or empty string if inputs are invalid
|
|
365
|
+
*
|
|
366
|
+
* @example
|
|
367
|
+
* getHelpUrl("RILL-R001", "0.4.1")
|
|
368
|
+
* // Returns: "https://github.com/rcrsr/rill/blob/v0.4.1/docs/88_errors.md#rill-r001"
|
|
369
|
+
*
|
|
370
|
+
* @example
|
|
371
|
+
* getHelpUrl("invalid", "0.4.1")
|
|
372
|
+
* // Returns: ""
|
|
373
|
+
*/
|
|
374
|
+
export function getHelpUrl(errorId, version) {
|
|
375
|
+
// Validate errorId format: RILL-{category}{3-digit}
|
|
376
|
+
// Category is single letter (L=lexer, P=parse, R=runtime, C=check)
|
|
377
|
+
const errorIdPattern = /^RILL-[LPRC]\d{3}$/;
|
|
378
|
+
if (!errorIdPattern.test(errorId)) {
|
|
379
|
+
return '';
|
|
380
|
+
}
|
|
381
|
+
// Validate version format: X.Y.Z (semver)
|
|
382
|
+
const versionPattern = /^\d+\.\d+\.\d+$/;
|
|
383
|
+
if (!versionPattern.test(version)) {
|
|
384
|
+
return '';
|
|
385
|
+
}
|
|
386
|
+
// Build URL with lowercased errorId in anchor
|
|
387
|
+
const anchor = errorId.toLowerCase();
|
|
388
|
+
return `https://github.com/rcrsr/rill/blob/v${version}/docs/88_errors.md#${anchor}`;
|
|
389
|
+
}
|
|
390
|
+
// ============================================================
|
|
391
|
+
// ERROR FACTORY
|
|
392
|
+
// ============================================================
|
|
393
|
+
/**
|
|
394
|
+
* Factory function for creating errors from registry.
|
|
395
|
+
*
|
|
396
|
+
* Looks up error definition from registry, renders message template with context,
|
|
397
|
+
* and creates RillError with structured metadata.
|
|
398
|
+
*
|
|
399
|
+
* @param errorId - Error identifier (format: RILL-{category}{3-digit})
|
|
400
|
+
* @param context - Key-value pairs for template placeholder replacement
|
|
401
|
+
* @param location - Source location where error occurred (optional)
|
|
402
|
+
* @returns RillError instance with rendered message
|
|
403
|
+
* @throws TypeError if errorId is not found in registry
|
|
404
|
+
*
|
|
405
|
+
* @example
|
|
406
|
+
* createError("RILL-R005", { name: "foo" }, location)
|
|
407
|
+
* // Creates RuntimeError: "Variable foo is not defined at 1:5"
|
|
408
|
+
*
|
|
409
|
+
* @example
|
|
410
|
+
* createError("RILL-X999", {})
|
|
411
|
+
* // Throws: TypeError("Unknown error ID: RILL-X999")
|
|
412
|
+
*/
|
|
413
|
+
export function createError(errorId, context, location) {
|
|
414
|
+
// Lookup error definition from registry (O(1))
|
|
415
|
+
const definition = ERROR_REGISTRY.get(errorId);
|
|
416
|
+
// EC-9: Unknown errorId -> Throws TypeError
|
|
417
|
+
if (!definition) {
|
|
418
|
+
throw new TypeError(`Unknown error ID: ${errorId}`);
|
|
419
|
+
}
|
|
420
|
+
// Render message from template + context (O(n) where n = template length)
|
|
421
|
+
// EC-10: Context value fails String() coercion -> Uses fallback "[object Object]"
|
|
422
|
+
// This is handled inside renderMessage via try-catch
|
|
423
|
+
const message = renderMessage(definition.messageTemplate, context);
|
|
424
|
+
// EC-11: Malformed location (missing line/column) -> Error created without location metadata
|
|
425
|
+
// We accept the location as-is; if it's malformed, the error won't have proper location data
|
|
426
|
+
// This is acceptable per spec - the error is still created, just without complete location info
|
|
427
|
+
// Compute helpUrl from errorId using VERSION constant
|
|
428
|
+
const helpUrl = getHelpUrl(errorId, VERSION);
|
|
429
|
+
// Create RillError with errorId, helpUrl, legacy code, and rendered message
|
|
430
|
+
return new RillError({
|
|
431
|
+
code: definition.legacyCode,
|
|
432
|
+
errorId,
|
|
433
|
+
helpUrl: helpUrl || undefined, // Convert empty string to undefined
|
|
434
|
+
message,
|
|
435
|
+
location,
|
|
436
|
+
context,
|
|
437
|
+
});
|
|
438
|
+
}
|
|
34
439
|
/**
|
|
35
440
|
* Base error class for all Rill errors.
|
|
36
441
|
* Provides structured data for host applications to format as needed.
|
|
37
442
|
*/
|
|
38
443
|
export class RillError extends Error {
|
|
39
444
|
code;
|
|
445
|
+
errorId;
|
|
446
|
+
helpUrl;
|
|
40
447
|
location;
|
|
41
448
|
context;
|
|
42
449
|
constructor(data) {
|
|
@@ -46,6 +453,8 @@ export class RillError extends Error {
|
|
|
46
453
|
super(`${data.message}${locationStr}`);
|
|
47
454
|
this.name = 'RillError';
|
|
48
455
|
this.code = data.code;
|
|
456
|
+
this.errorId = data.errorId;
|
|
457
|
+
this.helpUrl = data.helpUrl;
|
|
49
458
|
this.location = data.location;
|
|
50
459
|
this.context = data.context;
|
|
51
460
|
}
|
|
@@ -53,6 +462,8 @@ export class RillError extends Error {
|
|
|
53
462
|
toData() {
|
|
54
463
|
return {
|
|
55
464
|
code: this.code,
|
|
465
|
+
errorId: this.errorId,
|
|
466
|
+
helpUrl: this.helpUrl,
|
|
56
467
|
message: this.message.replace(/ at \d+:\d+$/, ''), // Strip location suffix
|
|
57
468
|
location: this.location,
|
|
58
469
|
context: this.context,
|
|
@@ -67,25 +478,59 @@ export class RillError extends Error {
|
|
|
67
478
|
}
|
|
68
479
|
/** Parse-time errors */
|
|
69
480
|
export class ParseError extends RillError {
|
|
70
|
-
constructor(message, location, context) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
481
|
+
constructor(message, location, context, errorId) {
|
|
482
|
+
// When errorId provided, look up definition and derive legacyCode
|
|
483
|
+
if (errorId) {
|
|
484
|
+
const definition = ERROR_REGISTRY.get(errorId);
|
|
485
|
+
if (!definition) {
|
|
486
|
+
throw new TypeError(`Unknown error ID: ${errorId}`);
|
|
487
|
+
}
|
|
488
|
+
super({
|
|
489
|
+
code: definition.legacyCode,
|
|
490
|
+
errorId,
|
|
491
|
+
message,
|
|
492
|
+
location,
|
|
493
|
+
context,
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
// Backward compatible: use default PARSE_INVALID_SYNTAX code
|
|
498
|
+
super({
|
|
499
|
+
code: RILL_ERROR_CODES.PARSE_INVALID_SYNTAX,
|
|
500
|
+
message,
|
|
501
|
+
location,
|
|
502
|
+
context,
|
|
503
|
+
});
|
|
504
|
+
}
|
|
77
505
|
this.name = 'ParseError';
|
|
78
506
|
}
|
|
79
507
|
}
|
|
80
508
|
/** Runtime execution errors */
|
|
81
509
|
export class RuntimeError extends RillError {
|
|
82
|
-
constructor(code, message, location, context) {
|
|
83
|
-
|
|
510
|
+
constructor(code, message, location, context, errorId) {
|
|
511
|
+
// When errorId provided, look up definition and derive legacyCode
|
|
512
|
+
if (errorId) {
|
|
513
|
+
const definition = ERROR_REGISTRY.get(errorId);
|
|
514
|
+
if (!definition) {
|
|
515
|
+
throw new TypeError(`Unknown error ID: ${errorId}`);
|
|
516
|
+
}
|
|
517
|
+
super({
|
|
518
|
+
code: definition.legacyCode,
|
|
519
|
+
errorId,
|
|
520
|
+
message,
|
|
521
|
+
location,
|
|
522
|
+
context,
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
// Backward compatible: use provided code directly
|
|
527
|
+
super({ code, message, location, context });
|
|
528
|
+
}
|
|
84
529
|
this.name = 'RuntimeError';
|
|
85
530
|
}
|
|
86
531
|
/** Create from an AST node */
|
|
87
|
-
static fromNode(code, message, node, context) {
|
|
88
|
-
return new RuntimeError(code, message, node?.span.start, context);
|
|
532
|
+
static fromNode(code, message, node, context, errorId) {
|
|
533
|
+
return new RuntimeError(code, message, node?.span.start, context, errorId);
|
|
89
534
|
}
|
|
90
535
|
}
|
|
91
536
|
/** Timeout errors */
|
|
@@ -181,6 +626,7 @@ export const TOKEN_TYPES = {
|
|
|
181
626
|
// Keywords
|
|
182
627
|
BREAK: 'BREAK',
|
|
183
628
|
RETURN: 'RETURN',
|
|
629
|
+
PASS: 'PASS',
|
|
184
630
|
ASSERT: 'ASSERT',
|
|
185
631
|
ERROR: 'ERROR',
|
|
186
632
|
EACH: 'EACH',
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/docs/02_types.md
CHANGED
|
@@ -109,6 +109,28 @@ false ? "yes" ! "no" # "no"
|
|
|
109
109
|
0 -> ($ == 0) ? "zero" ! "nonzero" # Use comparison
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
+
### Type-Safe Negation
|
|
113
|
+
|
|
114
|
+
The negation operator (`!`) requires a boolean operand. There is no truthiness coercion:
|
|
115
|
+
|
|
116
|
+
```rill
|
|
117
|
+
!true # false
|
|
118
|
+
!false # true
|
|
119
|
+
"hello" -> .empty -> (!$) # true (negates boolean from .empty)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
```text
|
|
123
|
+
!"hello" # ERROR: Negation requires boolean, got string
|
|
124
|
+
!0 # ERROR: Negation requires boolean, got number
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Use explicit boolean checks when needed:
|
|
128
|
+
|
|
129
|
+
```rill
|
|
130
|
+
"" -> .empty -> (!$) ? "has content" ! "empty" # Negate boolean result
|
|
131
|
+
[1,2,3] -> .empty -> (!$) ? "has items" ! "none" # Check non-empty
|
|
132
|
+
```
|
|
133
|
+
|
|
112
134
|
---
|
|
113
135
|
|
|
114
136
|
## Lists
|
package/docs/04_operators.md
CHANGED
|
@@ -507,7 +507,7 @@ See [Reference](11_reference.md) for full dispatch semantics including dict disp
|
|
|
507
507
|
|
|
508
508
|
## Default Operator `??`
|
|
509
509
|
|
|
510
|
-
Provide a default value if field is missing:
|
|
510
|
+
Provide a default value if field is missing or access fails:
|
|
511
511
|
|
|
512
512
|
```rill
|
|
513
513
|
[:] :> $empty
|
|
@@ -518,6 +518,27 @@ $user.name ?? "unknown" # "alice"
|
|
|
518
518
|
$user.age ?? 0 # 0
|
|
519
519
|
```
|
|
520
520
|
|
|
521
|
+
### With Function Calls
|
|
522
|
+
|
|
523
|
+
The default operator works with any expression, including function and method calls:
|
|
524
|
+
|
|
525
|
+
```text
|
|
526
|
+
get_data().status ?? "default" # "default" if status field missing
|
|
527
|
+
fetch_value() ?? "fallback" # "fallback" if fetch_value returns undefined
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### With Method Calls
|
|
531
|
+
|
|
532
|
+
The `??` operator applies after method invocations in access chains:
|
|
533
|
+
|
|
534
|
+
```text
|
|
535
|
+
$dict.transform() ?? "default" # default if method throws or result missing
|
|
536
|
+
$obj.compute().value ?? 0 # default if value field missing after method
|
|
537
|
+
$config.get_setting() ?? [:] # default if method returns undefined
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
Method calls evaluate fully before the default operator applies.
|
|
541
|
+
|
|
521
542
|
---
|
|
522
543
|
|
|
523
544
|
## Existence Operators
|