@nordsym/apiclaw 1.3.13 → 1.4.1
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/PRD-ANALYTICS-AGENTS-TEAMS.md +710 -0
- package/PRD-API-CHAINING.md +483 -0
- package/PRD-HARDEN-SHELL.md +18 -12
- package/PRD-LOGS-SUBAGENTS-V2.md +267 -0
- package/convex/_generated/api.d.ts +6 -0
- package/convex/agents.ts +188 -0
- package/convex/chains.ts +1248 -0
- package/convex/logs.ts +94 -0
- package/convex/schema.ts +139 -0
- package/convex/searchLogs.ts +141 -0
- package/convex/teams.ts +243 -0
- package/dist/chain-types.d.ts +187 -0
- package/dist/chain-types.d.ts.map +1 -0
- package/dist/chain-types.js +33 -0
- package/dist/chain-types.js.map +1 -0
- package/dist/chainExecutor.d.ts +122 -0
- package/dist/chainExecutor.d.ts.map +1 -0
- package/dist/chainExecutor.js +454 -0
- package/dist/chainExecutor.js.map +1 -0
- package/dist/chainResolver.d.ts +100 -0
- package/dist/chainResolver.d.ts.map +1 -0
- package/dist/chainResolver.js +519 -0
- package/dist/chainResolver.js.map +1 -0
- package/dist/chainResolver.test.d.ts +5 -0
- package/dist/chainResolver.test.d.ts.map +1 -0
- package/dist/chainResolver.test.js +201 -0
- package/dist/chainResolver.test.js.map +1 -0
- package/dist/execute.d.ts +4 -1
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +3 -0
- package/dist/execute.js.map +1 -1
- package/dist/index.js +478 -3
- package/dist/index.js.map +1 -1
- package/docs/SUBAGENT-NAMING.md +94 -0
- package/landing/public/logos/chattgpt.svg +1 -0
- package/landing/public/logos/claude.svg +1 -0
- package/landing/public/logos/gemini.svg +1 -0
- package/landing/public/logos/grok.svg +1 -0
- package/landing/src/app/page.tsx +12 -21
- package/landing/src/app/workspace/chains/page.tsx +520 -0
- package/landing/src/app/workspace/page.tsx +1903 -224
- package/landing/src/components/AITestimonials.tsx +15 -9
- package/landing/src/components/ChainStepDetail.tsx +310 -0
- package/landing/src/components/ChainTrace.tsx +261 -0
- package/landing/src/lib/stats.json +1 -1
- package/package.json +14 -2
- package/src/chainExecutor.ts +730 -0
- package/src/chainResolver.test.ts +246 -0
- package/src/chainResolver.ts +658 -0
- package/src/execute.ts +23 -0
- package/src/index.ts +524 -3
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIClaw Chain Resolver
|
|
3
|
+
*
|
|
4
|
+
* Handles reference resolution between chain steps.
|
|
5
|
+
* Supports: $prev, $stepId, $parallel, $chain, $inputs, $forEach
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// REFERENCE PATTERNS
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Matches all $references in a string
|
|
11
|
+
const REFERENCE_PATTERN = /\$(?:prev|chain|inputs|parallel|forEach|item|index|env|\w+)(?:\[\d+\])?(?:\.[a-zA-Z_][\w]*(?:\[\d+\])?)*|\$\w+(?:\.[a-zA-Z_][\w]*(?:\[\d+\])?)+/g;
|
|
12
|
+
// Matches a single complete reference for parsing
|
|
13
|
+
const SINGLE_REF_PATTERN = /^\$(\w+)(\[\d+\])?(.*)$/;
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// REFERENCE EXTRACTION
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Extract all $references from a string
|
|
19
|
+
*/
|
|
20
|
+
export function extractReferences(text) {
|
|
21
|
+
const matches = text.match(REFERENCE_PATTERN);
|
|
22
|
+
if (!matches)
|
|
23
|
+
return [];
|
|
24
|
+
return matches.map(parseReference).filter((r) => r !== null);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse a single reference string into a Reference object
|
|
28
|
+
*/
|
|
29
|
+
export function parseReference(raw) {
|
|
30
|
+
const match = raw.match(SINGLE_REF_PATTERN);
|
|
31
|
+
if (!match)
|
|
32
|
+
return null;
|
|
33
|
+
const [, rootName, arrayPart, pathPart] = match;
|
|
34
|
+
// Determine reference type
|
|
35
|
+
let type;
|
|
36
|
+
let stepId;
|
|
37
|
+
let arrayIndex;
|
|
38
|
+
// Parse array index from root (e.g., $parallel[0])
|
|
39
|
+
if (arrayPart) {
|
|
40
|
+
arrayIndex = parseInt(arrayPart.slice(1, -1), 10);
|
|
41
|
+
}
|
|
42
|
+
switch (rootName) {
|
|
43
|
+
case 'prev':
|
|
44
|
+
type = 'prev';
|
|
45
|
+
break;
|
|
46
|
+
case 'chain':
|
|
47
|
+
type = 'chain';
|
|
48
|
+
break;
|
|
49
|
+
case 'inputs':
|
|
50
|
+
type = 'inputs';
|
|
51
|
+
break;
|
|
52
|
+
case 'parallel':
|
|
53
|
+
type = 'parallel';
|
|
54
|
+
break;
|
|
55
|
+
case 'forEach':
|
|
56
|
+
type = 'forEach';
|
|
57
|
+
break;
|
|
58
|
+
case 'item':
|
|
59
|
+
type = 'item';
|
|
60
|
+
break;
|
|
61
|
+
case 'index':
|
|
62
|
+
type = 'index';
|
|
63
|
+
break;
|
|
64
|
+
case 'env':
|
|
65
|
+
type = 'env';
|
|
66
|
+
break;
|
|
67
|
+
default:
|
|
68
|
+
// It's a step ID reference
|
|
69
|
+
type = 'step';
|
|
70
|
+
stepId = rootName;
|
|
71
|
+
}
|
|
72
|
+
// Parse the property path
|
|
73
|
+
const path = parsePath(pathPart || '');
|
|
74
|
+
return { raw, type, stepId, path, arrayIndex };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Parse a property path like ".output.images[0].url" into ["output", "images", 0, "url"]
|
|
78
|
+
*/
|
|
79
|
+
function parsePath(pathStr) {
|
|
80
|
+
if (!pathStr)
|
|
81
|
+
return [];
|
|
82
|
+
const parts = [];
|
|
83
|
+
// Remove leading dot
|
|
84
|
+
const cleaned = pathStr.startsWith('.') ? pathStr.slice(1) : pathStr;
|
|
85
|
+
// Split by dots and brackets
|
|
86
|
+
const segments = cleaned.split(/\.|\[|\]/g).filter(Boolean);
|
|
87
|
+
for (const segment of segments) {
|
|
88
|
+
// Check if it's a numeric index
|
|
89
|
+
if (/^\d+$/.test(segment)) {
|
|
90
|
+
parts.push(segment); // Keep as string, will convert during resolution
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
parts.push(segment);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return parts;
|
|
97
|
+
}
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// REFERENCE RESOLUTION
|
|
100
|
+
// ============================================================================
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a reference to its actual value from context
|
|
103
|
+
*/
|
|
104
|
+
export function resolveReference(ref, context) {
|
|
105
|
+
let value;
|
|
106
|
+
switch (ref.type) {
|
|
107
|
+
case 'prev':
|
|
108
|
+
// Get the previous step's result
|
|
109
|
+
if (!context.prevStepId) {
|
|
110
|
+
throw new ReferenceError(`$prev used but no previous step exists`);
|
|
111
|
+
}
|
|
112
|
+
value = context.results[context.prevStepId];
|
|
113
|
+
break;
|
|
114
|
+
case 'step':
|
|
115
|
+
// Get a specific step's result
|
|
116
|
+
if (!ref.stepId || !(ref.stepId in context.results)) {
|
|
117
|
+
throw new ReferenceError(`Step '${ref.stepId}' not found in results`);
|
|
118
|
+
}
|
|
119
|
+
value = context.results[ref.stepId];
|
|
120
|
+
break;
|
|
121
|
+
case 'parallel':
|
|
122
|
+
// Get parallel execution results
|
|
123
|
+
if (!context.parallelResults) {
|
|
124
|
+
throw new ReferenceError(`$parallel used but not in parallel context`);
|
|
125
|
+
}
|
|
126
|
+
if (ref.arrayIndex !== undefined) {
|
|
127
|
+
value = context.parallelResults[ref.arrayIndex];
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
value = context.parallelResults;
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
case 'chain':
|
|
134
|
+
// Built-in chain variables
|
|
135
|
+
value = {
|
|
136
|
+
startedAt: context.startedAt,
|
|
137
|
+
index: context.currentIndex,
|
|
138
|
+
};
|
|
139
|
+
break;
|
|
140
|
+
case 'inputs':
|
|
141
|
+
// Template inputs
|
|
142
|
+
if (!context.inputs) {
|
|
143
|
+
throw new ReferenceError(`$inputs used but no inputs provided`);
|
|
144
|
+
}
|
|
145
|
+
value = context.inputs;
|
|
146
|
+
break;
|
|
147
|
+
case 'forEach':
|
|
148
|
+
// forEach accumulated results
|
|
149
|
+
value = {
|
|
150
|
+
results: context.forEachResults || [],
|
|
151
|
+
index: context.forEachIndex,
|
|
152
|
+
};
|
|
153
|
+
break;
|
|
154
|
+
case 'item':
|
|
155
|
+
// Current forEach item
|
|
156
|
+
if (context.forEachItem === undefined) {
|
|
157
|
+
throw new ReferenceError(`$item used but not in forEach loop`);
|
|
158
|
+
}
|
|
159
|
+
value = context.forEachItem;
|
|
160
|
+
break;
|
|
161
|
+
case 'index':
|
|
162
|
+
// Current forEach index
|
|
163
|
+
if (context.forEachIndex === undefined) {
|
|
164
|
+
throw new ReferenceError(`$index used but not in forEach loop`);
|
|
165
|
+
}
|
|
166
|
+
value = context.forEachIndex;
|
|
167
|
+
break;
|
|
168
|
+
case 'env':
|
|
169
|
+
// Environment variables
|
|
170
|
+
value = context.env || process.env;
|
|
171
|
+
break;
|
|
172
|
+
default:
|
|
173
|
+
throw new ReferenceError(`Unknown reference type: ${ref.type}`);
|
|
174
|
+
}
|
|
175
|
+
// Traverse the path
|
|
176
|
+
return traversePath(value, ref.path, ref.raw);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Traverse a path through an object/array
|
|
180
|
+
*/
|
|
181
|
+
function traversePath(obj, path, originalRef) {
|
|
182
|
+
let current = obj;
|
|
183
|
+
for (let i = 0; i < path.length; i++) {
|
|
184
|
+
if (current === null || current === undefined) {
|
|
185
|
+
const traversed = path.slice(0, i).join('.');
|
|
186
|
+
throw new ReferenceError(`Cannot read '${path[i]}' of ${current} at ${originalRef} (traversed: ${traversed})`);
|
|
187
|
+
}
|
|
188
|
+
const key = path[i];
|
|
189
|
+
// Handle array index (stored as string)
|
|
190
|
+
if (/^\d+$/.test(key)) {
|
|
191
|
+
current = current[parseInt(key, 10)];
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
current = current[key];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return current;
|
|
198
|
+
}
|
|
199
|
+
// ============================================================================
|
|
200
|
+
// RESOLVE ALL REFERENCES IN PARAMS
|
|
201
|
+
// ============================================================================
|
|
202
|
+
/**
|
|
203
|
+
* Resolve all $references in a params object
|
|
204
|
+
* Recursively processes strings, arrays, and nested objects
|
|
205
|
+
*/
|
|
206
|
+
export function resolveReferences(params, context) {
|
|
207
|
+
return resolveValue(params, context);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Resolve references in any value type
|
|
211
|
+
*/
|
|
212
|
+
function resolveValue(value, context) {
|
|
213
|
+
if (value === null || value === undefined) {
|
|
214
|
+
return value;
|
|
215
|
+
}
|
|
216
|
+
if (typeof value === 'string') {
|
|
217
|
+
return resolveStringValue(value, context);
|
|
218
|
+
}
|
|
219
|
+
if (Array.isArray(value)) {
|
|
220
|
+
return value.map(item => resolveValue(item, context));
|
|
221
|
+
}
|
|
222
|
+
if (typeof value === 'object') {
|
|
223
|
+
const resolved = {};
|
|
224
|
+
for (const [key, val] of Object.entries(value)) {
|
|
225
|
+
resolved[key] = resolveValue(val, context);
|
|
226
|
+
}
|
|
227
|
+
return resolved;
|
|
228
|
+
}
|
|
229
|
+
// Primitives (number, boolean) pass through
|
|
230
|
+
return value;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Resolve references in a string value
|
|
234
|
+
* Handles both full replacement and interpolation
|
|
235
|
+
*/
|
|
236
|
+
function resolveStringValue(str, context) {
|
|
237
|
+
const refs = extractReferences(str);
|
|
238
|
+
if (refs.length === 0) {
|
|
239
|
+
return str;
|
|
240
|
+
}
|
|
241
|
+
// If the entire string is a single reference, return the resolved value directly
|
|
242
|
+
// This preserves types (objects, arrays, numbers)
|
|
243
|
+
if (refs.length === 1 && refs[0].raw === str) {
|
|
244
|
+
return resolveReference(refs[0], context);
|
|
245
|
+
}
|
|
246
|
+
// Multiple references or mixed content: interpolate into string
|
|
247
|
+
let result = str;
|
|
248
|
+
for (const ref of refs) {
|
|
249
|
+
const resolved = resolveReference(ref, context);
|
|
250
|
+
const stringValue = typeof resolved === 'object' ? JSON.stringify(resolved) : String(resolved);
|
|
251
|
+
result = result.replace(ref.raw, stringValue);
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
// ============================================================================
|
|
256
|
+
// VALIDATION
|
|
257
|
+
// ============================================================================
|
|
258
|
+
/**
|
|
259
|
+
* Validate all references in a chain before execution
|
|
260
|
+
* Checks that referenced steps exist and come before the referencing step
|
|
261
|
+
*/
|
|
262
|
+
export function validateReferences(steps) {
|
|
263
|
+
const errors = [];
|
|
264
|
+
const warnings = [];
|
|
265
|
+
// Build set of step IDs that will exist
|
|
266
|
+
const definedSteps = new Set();
|
|
267
|
+
const stepOrder = [];
|
|
268
|
+
// First pass: collect all step IDs
|
|
269
|
+
for (const step of steps) {
|
|
270
|
+
if ('parallel' in step) {
|
|
271
|
+
for (const ps of step.parallel) {
|
|
272
|
+
definedSteps.add(ps.id);
|
|
273
|
+
stepOrder.push(ps.id);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else if ('forEach' in step) {
|
|
277
|
+
// forEach generates dynamic IDs
|
|
278
|
+
definedSteps.add(step.do.id.replace(/\$index/g, '*'));
|
|
279
|
+
}
|
|
280
|
+
else if ('if' in step) {
|
|
281
|
+
const collectConditional = (s) => {
|
|
282
|
+
const arr = Array.isArray(s) ? s : [s];
|
|
283
|
+
for (const cs of arr) {
|
|
284
|
+
definedSteps.add(cs.id);
|
|
285
|
+
stepOrder.push(cs.id);
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
collectConditional(step.then);
|
|
289
|
+
if (step.else)
|
|
290
|
+
collectConditional(step.else);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
definedSteps.add(step.id);
|
|
294
|
+
stepOrder.push(step.id);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Second pass: validate references
|
|
298
|
+
let currentIndex = 0;
|
|
299
|
+
const validateStep = (step, availableSteps, stepIdx) => {
|
|
300
|
+
if (!step.params)
|
|
301
|
+
return;
|
|
302
|
+
const paramStr = JSON.stringify(step.params);
|
|
303
|
+
const refs = extractReferences(paramStr);
|
|
304
|
+
for (const ref of refs) {
|
|
305
|
+
// Validate step references
|
|
306
|
+
if (ref.type === 'step' && ref.stepId) {
|
|
307
|
+
if (!definedSteps.has(ref.stepId)) {
|
|
308
|
+
errors.push({
|
|
309
|
+
stepId: step.id,
|
|
310
|
+
reference: ref.raw,
|
|
311
|
+
message: `References undefined step '${ref.stepId}'`,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
else if (!availableSteps.has(ref.stepId)) {
|
|
315
|
+
errors.push({
|
|
316
|
+
stepId: step.id,
|
|
317
|
+
reference: ref.raw,
|
|
318
|
+
message: `References step '${ref.stepId}' which hasn't executed yet`,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Validate $prev usage
|
|
323
|
+
if (ref.type === 'prev' && stepIdx === 0) {
|
|
324
|
+
errors.push({
|
|
325
|
+
stepId: step.id,
|
|
326
|
+
reference: ref.raw,
|
|
327
|
+
message: `$prev used in first step (no previous step exists)`,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
// Warn about $parallel outside parallel context
|
|
331
|
+
if (ref.type === 'parallel') {
|
|
332
|
+
warnings.push({
|
|
333
|
+
stepId: step.id,
|
|
334
|
+
reference: ref.raw,
|
|
335
|
+
message: `$parallel used - ensure this follows a parallel block`,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
// Warn about $item/$index outside forEach
|
|
339
|
+
if (ref.type === 'item' || ref.type === 'index') {
|
|
340
|
+
warnings.push({
|
|
341
|
+
stepId: step.id,
|
|
342
|
+
reference: ref.raw,
|
|
343
|
+
message: `${ref.raw} used - ensure this is inside a forEach block`,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
const availableSteps = new Set();
|
|
349
|
+
for (const step of steps) {
|
|
350
|
+
if ('parallel' in step) {
|
|
351
|
+
// Parallel steps can't reference each other
|
|
352
|
+
for (const ps of step.parallel) {
|
|
353
|
+
validateStep(ps, availableSteps, currentIndex);
|
|
354
|
+
}
|
|
355
|
+
// After parallel, all are available
|
|
356
|
+
for (const ps of step.parallel) {
|
|
357
|
+
availableSteps.add(ps.id);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else if ('forEach' in step) {
|
|
361
|
+
validateStep(step.do, availableSteps, currentIndex);
|
|
362
|
+
}
|
|
363
|
+
else if ('if' in step) {
|
|
364
|
+
const validateBranch = (s) => {
|
|
365
|
+
const arr = Array.isArray(s) ? s : [s];
|
|
366
|
+
for (const cs of arr) {
|
|
367
|
+
validateStep(cs, availableSteps, currentIndex);
|
|
368
|
+
availableSteps.add(cs.id);
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
validateBranch(step.then);
|
|
372
|
+
if (step.else)
|
|
373
|
+
validateBranch(step.else);
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
validateStep(step, availableSteps, currentIndex);
|
|
377
|
+
availableSteps.add(step.id);
|
|
378
|
+
}
|
|
379
|
+
currentIndex++;
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
valid: errors.length === 0,
|
|
383
|
+
errors,
|
|
384
|
+
warnings,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
// ============================================================================
|
|
388
|
+
// CONDITIONAL EVALUATION
|
|
389
|
+
// ============================================================================
|
|
390
|
+
/**
|
|
391
|
+
* Evaluate a conditional expression string
|
|
392
|
+
* Supports: ===, !==, >, <, >=, <=, &&, ||, !
|
|
393
|
+
*/
|
|
394
|
+
export function evaluateCondition(condition, context) {
|
|
395
|
+
// First resolve any references in the condition
|
|
396
|
+
const resolvedCondition = resolveStringValue(condition, context);
|
|
397
|
+
// Simple expression evaluation
|
|
398
|
+
// For security, we use a restricted evaluator instead of eval()
|
|
399
|
+
try {
|
|
400
|
+
return safeEvaluate(resolvedCondition, context);
|
|
401
|
+
}
|
|
402
|
+
catch (e) {
|
|
403
|
+
throw new Error(`Failed to evaluate condition '${condition}': ${e}`);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Safe expression evaluator for conditions
|
|
408
|
+
* Only allows comparison and logical operators
|
|
409
|
+
*/
|
|
410
|
+
function safeEvaluate(expr, context) {
|
|
411
|
+
// Trim whitespace
|
|
412
|
+
expr = expr.trim();
|
|
413
|
+
// Handle logical operators (lowest precedence)
|
|
414
|
+
// Split on || first (lowest precedence)
|
|
415
|
+
if (expr.includes('||')) {
|
|
416
|
+
const parts = splitOnOperator(expr, '||');
|
|
417
|
+
if (parts.length > 1) {
|
|
418
|
+
return parts.some(part => safeEvaluate(part, context));
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
// Then && (higher precedence than ||)
|
|
422
|
+
if (expr.includes('&&')) {
|
|
423
|
+
const parts = splitOnOperator(expr, '&&');
|
|
424
|
+
if (parts.length > 1) {
|
|
425
|
+
return parts.every(part => safeEvaluate(part, context));
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// Handle negation
|
|
429
|
+
if (expr.startsWith('!')) {
|
|
430
|
+
return !safeEvaluate(expr.slice(1), context);
|
|
431
|
+
}
|
|
432
|
+
// Handle parentheses
|
|
433
|
+
if (expr.startsWith('(') && expr.endsWith(')')) {
|
|
434
|
+
return safeEvaluate(expr.slice(1, -1), context);
|
|
435
|
+
}
|
|
436
|
+
// Handle comparison operators
|
|
437
|
+
const comparisons = ['===', '!==', '>=', '<=', '>', '<', '==', '!='];
|
|
438
|
+
for (const op of comparisons) {
|
|
439
|
+
const idx = expr.indexOf(op);
|
|
440
|
+
if (idx !== -1) {
|
|
441
|
+
const left = parseValue(expr.slice(0, idx).trim());
|
|
442
|
+
const right = parseValue(expr.slice(idx + op.length).trim());
|
|
443
|
+
switch (op) {
|
|
444
|
+
case '===': return left === right;
|
|
445
|
+
case '!==': return left !== right;
|
|
446
|
+
case '==': return left == right;
|
|
447
|
+
case '!=': return left != right;
|
|
448
|
+
case '>': return left > right;
|
|
449
|
+
case '<': return left < right;
|
|
450
|
+
case '>=': return left >= right;
|
|
451
|
+
case '<=': return left <= right;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
// If no operators, evaluate as truthy/falsy
|
|
456
|
+
return !!parseValue(expr);
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Split expression on operator, respecting parentheses
|
|
460
|
+
*/
|
|
461
|
+
function splitOnOperator(expr, op) {
|
|
462
|
+
const parts = [];
|
|
463
|
+
let depth = 0;
|
|
464
|
+
let current = '';
|
|
465
|
+
for (let i = 0; i < expr.length; i++) {
|
|
466
|
+
const char = expr[i];
|
|
467
|
+
if (char === '(')
|
|
468
|
+
depth++;
|
|
469
|
+
else if (char === ')')
|
|
470
|
+
depth--;
|
|
471
|
+
if (depth === 0 && expr.slice(i, i + op.length) === op) {
|
|
472
|
+
parts.push(current);
|
|
473
|
+
current = '';
|
|
474
|
+
i += op.length - 1;
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
current += char;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
if (current)
|
|
481
|
+
parts.push(current);
|
|
482
|
+
return parts;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Parse a value string into its actual type
|
|
486
|
+
*/
|
|
487
|
+
function parseValue(str) {
|
|
488
|
+
str = str.trim();
|
|
489
|
+
// String literals
|
|
490
|
+
if ((str.startsWith('"') && str.endsWith('"')) || (str.startsWith("'") && str.endsWith("'"))) {
|
|
491
|
+
return str.slice(1, -1);
|
|
492
|
+
}
|
|
493
|
+
// Numbers
|
|
494
|
+
if (/^-?\d+\.?\d*$/.test(str)) {
|
|
495
|
+
return parseFloat(str);
|
|
496
|
+
}
|
|
497
|
+
// Booleans
|
|
498
|
+
if (str === 'true')
|
|
499
|
+
return true;
|
|
500
|
+
if (str === 'false')
|
|
501
|
+
return false;
|
|
502
|
+
// Null/undefined
|
|
503
|
+
if (str === 'null')
|
|
504
|
+
return null;
|
|
505
|
+
if (str === 'undefined')
|
|
506
|
+
return undefined;
|
|
507
|
+
// Already resolved value (from reference resolution)
|
|
508
|
+
return str;
|
|
509
|
+
}
|
|
510
|
+
// ============================================================================
|
|
511
|
+
// CUSTOM ERROR CLASS
|
|
512
|
+
// ============================================================================
|
|
513
|
+
export class ReferenceError extends Error {
|
|
514
|
+
constructor(message) {
|
|
515
|
+
super(message);
|
|
516
|
+
this.name = 'ReferenceError';
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=chainResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainResolver.js","sourceRoot":"","sources":["../src/chainResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainResolver.test.d.ts","sourceRoot":"","sources":["../src/chainResolver.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|