@gabrielbryk/jq-ts 1.3.6 → 1.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/README.md +1 -0
- package/dist/index.cjs +2375 -1024
- package/dist/index.d.cts +118 -6
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +118 -6
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2220 -871
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -179,14 +179,36 @@ interface IfNode {
|
|
|
179
179
|
else: FilterNode;
|
|
180
180
|
span: Span;
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Represents a variable binding pattern used by `as`.
|
|
184
|
+
* Supports jq-style scalar, array, object, and `{$name}` shorthand patterns.
|
|
185
|
+
*/
|
|
186
|
+
type BindingPattern = {
|
|
187
|
+
kind: 'VariablePattern';
|
|
188
|
+
name: string;
|
|
189
|
+
span: Span;
|
|
190
|
+
} | {
|
|
191
|
+
kind: 'ArrayPattern';
|
|
192
|
+
items: BindingPattern[];
|
|
193
|
+
span: Span;
|
|
194
|
+
} | {
|
|
195
|
+
kind: 'ObjectPattern';
|
|
196
|
+
entries: ObjectPatternEntry[];
|
|
197
|
+
span: Span;
|
|
198
|
+
};
|
|
199
|
+
interface ObjectPatternEntry {
|
|
200
|
+
key: string;
|
|
201
|
+
pattern: BindingPattern;
|
|
202
|
+
span: Span;
|
|
203
|
+
}
|
|
182
204
|
/**
|
|
183
205
|
* Represents a variable binding expression.
|
|
184
|
-
* `expression as $var | body`
|
|
206
|
+
* `expression as $var | body` or `expression as [$a, {b: $b}] | body`
|
|
185
207
|
*/
|
|
186
208
|
interface AsNode {
|
|
187
209
|
kind: 'As';
|
|
188
210
|
bind: FilterNode;
|
|
189
|
-
|
|
211
|
+
pattern: BindingPattern;
|
|
190
212
|
body: FilterNode;
|
|
191
213
|
span: Span;
|
|
192
214
|
}
|
|
@@ -207,7 +229,7 @@ interface CallNode {
|
|
|
207
229
|
interface ReduceNode {
|
|
208
230
|
kind: 'Reduce';
|
|
209
231
|
source: FilterNode;
|
|
210
|
-
|
|
232
|
+
pattern: BindingPattern;
|
|
211
233
|
init: FilterNode;
|
|
212
234
|
update: FilterNode;
|
|
213
235
|
span: Span;
|
|
@@ -219,7 +241,7 @@ interface ReduceNode {
|
|
|
219
241
|
interface ForeachNode {
|
|
220
242
|
kind: 'Foreach';
|
|
221
243
|
source: FilterNode;
|
|
222
|
-
|
|
244
|
+
pattern: BindingPattern;
|
|
223
245
|
init: FilterNode;
|
|
224
246
|
update: FilterNode;
|
|
225
247
|
extract?: FilterNode;
|
|
@@ -355,10 +377,26 @@ declare const resolveLimits: (config?: LimitsConfig) => ResolvedLimits;
|
|
|
355
377
|
*/
|
|
356
378
|
declare class LimitTracker {
|
|
357
379
|
private readonly limits;
|
|
380
|
+
private readonly nowSeconds?;
|
|
358
381
|
private steps;
|
|
359
382
|
private depth;
|
|
360
383
|
private outputs;
|
|
361
|
-
|
|
384
|
+
/**
|
|
385
|
+
* @param limits - Resolved execution limits.
|
|
386
|
+
* @param nowSeconds - The wall-clock instant exposed to the `now` builtin, as
|
|
387
|
+
* seconds since the Unix epoch (may be fractional). When `undefined`, the
|
|
388
|
+
* `now` builtin throws rather than reading the host clock — jq-ts never
|
|
389
|
+
* reads the real clock on its own, so date programs stay deterministic
|
|
390
|
+
* unless the caller injects a clock via `options.now`.
|
|
391
|
+
*/
|
|
392
|
+
constructor(limits: ResolvedLimits, nowSeconds?: number | undefined);
|
|
393
|
+
/**
|
|
394
|
+
* Returns the injected wall-clock instant (seconds since the Unix epoch) for
|
|
395
|
+
* the `now` builtin.
|
|
396
|
+
* @param span - The source span for error reporting.
|
|
397
|
+
* @throws {RuntimeError} If no clock was injected (`options.now` was unset).
|
|
398
|
+
*/
|
|
399
|
+
now(span: Span): number;
|
|
362
400
|
/**
|
|
363
401
|
* Records a single execution step (AST node visit).
|
|
364
402
|
* @param span - The source span for error reporting.
|
|
@@ -408,6 +446,13 @@ interface EvalOptions {
|
|
|
408
446
|
* Keys are variable names without the '$' prefix.
|
|
409
447
|
*/
|
|
410
448
|
vars?: Record<string, Value>;
|
|
449
|
+
/**
|
|
450
|
+
* The wall-clock instant the `now` builtin resolves to — a `Date` or seconds
|
|
451
|
+
* since the Unix epoch. When omitted, `now` throws (jq-ts never reads the
|
|
452
|
+
* host clock on its own). Pure date builtins (`gmtime`, `strftime`, `todate`,
|
|
453
|
+
* …) are unaffected.
|
|
454
|
+
*/
|
|
455
|
+
now?: Date | number;
|
|
411
456
|
}
|
|
412
457
|
//#endregion
|
|
413
458
|
//#region src/eval/dispatch.d.ts
|
|
@@ -424,6 +469,15 @@ interface EvalOptions$1 {
|
|
|
424
469
|
* Keys are variable names without the '$' prefix.
|
|
425
470
|
*/
|
|
426
471
|
vars?: Record<string, Value>;
|
|
472
|
+
/**
|
|
473
|
+
* The wall-clock instant the `now` builtin resolves to. Accepts a `Date` or
|
|
474
|
+
* a number of seconds since the Unix epoch (may be fractional). When omitted,
|
|
475
|
+
* `now` throws — jq-ts never reads the host clock on its own, so date
|
|
476
|
+
* programs stay deterministic unless a clock is explicitly injected. Pure
|
|
477
|
+
* date builtins that take an explicit epoch (`gmtime`, `strftime`, `todate`,
|
|
478
|
+
* …) work regardless of this option.
|
|
479
|
+
*/
|
|
480
|
+
now?: Date | number;
|
|
427
481
|
}
|
|
428
482
|
/**
|
|
429
483
|
* Runs a jq AST against an input value.
|
|
@@ -483,6 +537,64 @@ declare class RuntimeError extends BaseError {
|
|
|
483
537
|
constructor(message: string, span: Span);
|
|
484
538
|
}
|
|
485
539
|
//#endregion
|
|
540
|
+
//#region src/compat.d.ts
|
|
541
|
+
type CompatibilityStage = 'lex' | 'parse' | 'validate' | 'runtime' | 'compare';
|
|
542
|
+
type CompatibilityFindingSeverity = 'error' | 'warning';
|
|
543
|
+
type CompatibilityFindingCategory = 'unsupported-syntax' | 'unsupported-builtin' | 'arity-mismatch' | 'intentional-exclusion' | 'semantic-deviation' | 'input-dependent' | 'runtime-error' | 'jq-error' | 'output-mismatch';
|
|
544
|
+
interface CompatibilityFinding {
|
|
545
|
+
severity: CompatibilityFindingSeverity;
|
|
546
|
+
stage?: CompatibilityStage;
|
|
547
|
+
category: CompatibilityFindingCategory;
|
|
548
|
+
message: string;
|
|
549
|
+
span?: {
|
|
550
|
+
start: number;
|
|
551
|
+
end: number;
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
interface CompatibilityCheckResult {
|
|
555
|
+
compatible: boolean;
|
|
556
|
+
findings: CompatibilityFinding[];
|
|
557
|
+
}
|
|
558
|
+
interface CompatibilityAnalysisResult extends CompatibilityCheckResult {
|
|
559
|
+
warnings: CompatibilityFinding[];
|
|
560
|
+
}
|
|
561
|
+
type ExecutionResult = {
|
|
562
|
+
ok: true;
|
|
563
|
+
outputs: Value[];
|
|
564
|
+
} | {
|
|
565
|
+
ok: false;
|
|
566
|
+
error: string;
|
|
567
|
+
stage?: CompatibilityStage;
|
|
568
|
+
};
|
|
569
|
+
interface CompareWithJqResult {
|
|
570
|
+
compatible: boolean;
|
|
571
|
+
equivalent: boolean | null;
|
|
572
|
+
analysis: CompatibilityAnalysisResult;
|
|
573
|
+
jqTs: ExecutionResult;
|
|
574
|
+
jq: ExecutionResult;
|
|
575
|
+
findings: CompatibilityFinding[];
|
|
576
|
+
}
|
|
577
|
+
type JqRunner = (source: string, input: Value) => Value[] | ExecutionResult;
|
|
578
|
+
/**
|
|
579
|
+
* Checks whether a jq expression can be parsed and statically validated by jq-ts.
|
|
580
|
+
*
|
|
581
|
+
* This is a syntax/subset check only. It does not prove that runtime behavior
|
|
582
|
+
* matches the jq binary for every possible input.
|
|
583
|
+
*/
|
|
584
|
+
declare const checkCompatibility: (source: string) => CompatibilityCheckResult;
|
|
585
|
+
/**
|
|
586
|
+
* Checks jq-ts compatibility and reports known semantic differences from jq.
|
|
587
|
+
*/
|
|
588
|
+
declare const analyzeCompatibility: (source: string) => CompatibilityAnalysisResult;
|
|
589
|
+
/**
|
|
590
|
+
* Compares jq-ts execution against a caller-provided jq runner or jq result.
|
|
591
|
+
*
|
|
592
|
+
* The function is safe to export from the isolate-safe library because it does
|
|
593
|
+
* not spawn the jq binary itself. Tests and development tools can pass a runner
|
|
594
|
+
* that shells out to jq.
|
|
595
|
+
*/
|
|
596
|
+
declare const compareWithJq: (source: string, input: Value, jq: JqRunner | ExecutionResult, options?: EvalOptions) => CompareWithJqResult;
|
|
597
|
+
//#endregion
|
|
486
598
|
//#region src/index.d.ts
|
|
487
599
|
/**
|
|
488
600
|
* Runs a jq query against a JSON input.
|
|
@@ -498,5 +610,5 @@ declare class RuntimeError extends BaseError {
|
|
|
498
610
|
*/
|
|
499
611
|
declare const run: (source: string, input: Value, options?: EvalOptions) => Value[];
|
|
500
612
|
//#endregion
|
|
501
|
-
export { type EvalOptions, LexError, LimitTracker, type LimitsConfig, ParseError, type ResolvedLimits, RuntimeError, ValidationError, type Value, parse, resolveLimits, run, runAst, validate };
|
|
613
|
+
export { type CompareWithJqResult, type CompatibilityAnalysisResult, type CompatibilityCheckResult, type CompatibilityFinding, type CompatibilityFindingCategory, type CompatibilityFindingSeverity, type CompatibilityStage, type EvalOptions, type ExecutionResult, type JqRunner, LexError, LimitTracker, type LimitsConfig, ParseError, type ResolvedLimits, RuntimeError, ValidationError, type Value, analyzeCompatibility, checkCompatibility, compareWithJq, parse, resolveLimits, run, runAst, validate };
|
|
502
614
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/span.ts","../src/ast.ts","../src/parser.ts","../src/validate.ts","../src/limits.ts","../src/value.ts","../src/eval/types.ts","../src/eval/dispatch.ts","../src/errors.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/span.ts","../src/ast.ts","../src/parser.ts","../src/validate.ts","../src/limits.ts","../src/value.ts","../src/eval/types.ts","../src/eval/dispatch.ts","../src/errors.ts","../src/compat.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -179,14 +179,36 @@ interface IfNode {
|
|
|
179
179
|
else: FilterNode;
|
|
180
180
|
span: Span;
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Represents a variable binding pattern used by `as`.
|
|
184
|
+
* Supports jq-style scalar, array, object, and `{$name}` shorthand patterns.
|
|
185
|
+
*/
|
|
186
|
+
type BindingPattern = {
|
|
187
|
+
kind: 'VariablePattern';
|
|
188
|
+
name: string;
|
|
189
|
+
span: Span;
|
|
190
|
+
} | {
|
|
191
|
+
kind: 'ArrayPattern';
|
|
192
|
+
items: BindingPattern[];
|
|
193
|
+
span: Span;
|
|
194
|
+
} | {
|
|
195
|
+
kind: 'ObjectPattern';
|
|
196
|
+
entries: ObjectPatternEntry[];
|
|
197
|
+
span: Span;
|
|
198
|
+
};
|
|
199
|
+
interface ObjectPatternEntry {
|
|
200
|
+
key: string;
|
|
201
|
+
pattern: BindingPattern;
|
|
202
|
+
span: Span;
|
|
203
|
+
}
|
|
182
204
|
/**
|
|
183
205
|
* Represents a variable binding expression.
|
|
184
|
-
* `expression as $var | body`
|
|
206
|
+
* `expression as $var | body` or `expression as [$a, {b: $b}] | body`
|
|
185
207
|
*/
|
|
186
208
|
interface AsNode {
|
|
187
209
|
kind: 'As';
|
|
188
210
|
bind: FilterNode;
|
|
189
|
-
|
|
211
|
+
pattern: BindingPattern;
|
|
190
212
|
body: FilterNode;
|
|
191
213
|
span: Span;
|
|
192
214
|
}
|
|
@@ -207,7 +229,7 @@ interface CallNode {
|
|
|
207
229
|
interface ReduceNode {
|
|
208
230
|
kind: 'Reduce';
|
|
209
231
|
source: FilterNode;
|
|
210
|
-
|
|
232
|
+
pattern: BindingPattern;
|
|
211
233
|
init: FilterNode;
|
|
212
234
|
update: FilterNode;
|
|
213
235
|
span: Span;
|
|
@@ -219,7 +241,7 @@ interface ReduceNode {
|
|
|
219
241
|
interface ForeachNode {
|
|
220
242
|
kind: 'Foreach';
|
|
221
243
|
source: FilterNode;
|
|
222
|
-
|
|
244
|
+
pattern: BindingPattern;
|
|
223
245
|
init: FilterNode;
|
|
224
246
|
update: FilterNode;
|
|
225
247
|
extract?: FilterNode;
|
|
@@ -355,10 +377,26 @@ declare const resolveLimits: (config?: LimitsConfig) => ResolvedLimits;
|
|
|
355
377
|
*/
|
|
356
378
|
declare class LimitTracker {
|
|
357
379
|
private readonly limits;
|
|
380
|
+
private readonly nowSeconds?;
|
|
358
381
|
private steps;
|
|
359
382
|
private depth;
|
|
360
383
|
private outputs;
|
|
361
|
-
|
|
384
|
+
/**
|
|
385
|
+
* @param limits - Resolved execution limits.
|
|
386
|
+
* @param nowSeconds - The wall-clock instant exposed to the `now` builtin, as
|
|
387
|
+
* seconds since the Unix epoch (may be fractional). When `undefined`, the
|
|
388
|
+
* `now` builtin throws rather than reading the host clock — jq-ts never
|
|
389
|
+
* reads the real clock on its own, so date programs stay deterministic
|
|
390
|
+
* unless the caller injects a clock via `options.now`.
|
|
391
|
+
*/
|
|
392
|
+
constructor(limits: ResolvedLimits, nowSeconds?: number | undefined);
|
|
393
|
+
/**
|
|
394
|
+
* Returns the injected wall-clock instant (seconds since the Unix epoch) for
|
|
395
|
+
* the `now` builtin.
|
|
396
|
+
* @param span - The source span for error reporting.
|
|
397
|
+
* @throws {RuntimeError} If no clock was injected (`options.now` was unset).
|
|
398
|
+
*/
|
|
399
|
+
now(span: Span): number;
|
|
362
400
|
/**
|
|
363
401
|
* Records a single execution step (AST node visit).
|
|
364
402
|
* @param span - The source span for error reporting.
|
|
@@ -408,6 +446,13 @@ interface EvalOptions {
|
|
|
408
446
|
* Keys are variable names without the '$' prefix.
|
|
409
447
|
*/
|
|
410
448
|
vars?: Record<string, Value>;
|
|
449
|
+
/**
|
|
450
|
+
* The wall-clock instant the `now` builtin resolves to — a `Date` or seconds
|
|
451
|
+
* since the Unix epoch. When omitted, `now` throws (jq-ts never reads the
|
|
452
|
+
* host clock on its own). Pure date builtins (`gmtime`, `strftime`, `todate`,
|
|
453
|
+
* …) are unaffected.
|
|
454
|
+
*/
|
|
455
|
+
now?: Date | number;
|
|
411
456
|
}
|
|
412
457
|
//#endregion
|
|
413
458
|
//#region src/eval/dispatch.d.ts
|
|
@@ -424,6 +469,15 @@ interface EvalOptions$1 {
|
|
|
424
469
|
* Keys are variable names without the '$' prefix.
|
|
425
470
|
*/
|
|
426
471
|
vars?: Record<string, Value>;
|
|
472
|
+
/**
|
|
473
|
+
* The wall-clock instant the `now` builtin resolves to. Accepts a `Date` or
|
|
474
|
+
* a number of seconds since the Unix epoch (may be fractional). When omitted,
|
|
475
|
+
* `now` throws — jq-ts never reads the host clock on its own, so date
|
|
476
|
+
* programs stay deterministic unless a clock is explicitly injected. Pure
|
|
477
|
+
* date builtins that take an explicit epoch (`gmtime`, `strftime`, `todate`,
|
|
478
|
+
* …) work regardless of this option.
|
|
479
|
+
*/
|
|
480
|
+
now?: Date | number;
|
|
427
481
|
}
|
|
428
482
|
/**
|
|
429
483
|
* Runs a jq AST against an input value.
|
|
@@ -483,6 +537,64 @@ declare class RuntimeError extends BaseError {
|
|
|
483
537
|
constructor(message: string, span: Span);
|
|
484
538
|
}
|
|
485
539
|
//#endregion
|
|
540
|
+
//#region src/compat.d.ts
|
|
541
|
+
type CompatibilityStage = 'lex' | 'parse' | 'validate' | 'runtime' | 'compare';
|
|
542
|
+
type CompatibilityFindingSeverity = 'error' | 'warning';
|
|
543
|
+
type CompatibilityFindingCategory = 'unsupported-syntax' | 'unsupported-builtin' | 'arity-mismatch' | 'intentional-exclusion' | 'semantic-deviation' | 'input-dependent' | 'runtime-error' | 'jq-error' | 'output-mismatch';
|
|
544
|
+
interface CompatibilityFinding {
|
|
545
|
+
severity: CompatibilityFindingSeverity;
|
|
546
|
+
stage?: CompatibilityStage;
|
|
547
|
+
category: CompatibilityFindingCategory;
|
|
548
|
+
message: string;
|
|
549
|
+
span?: {
|
|
550
|
+
start: number;
|
|
551
|
+
end: number;
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
interface CompatibilityCheckResult {
|
|
555
|
+
compatible: boolean;
|
|
556
|
+
findings: CompatibilityFinding[];
|
|
557
|
+
}
|
|
558
|
+
interface CompatibilityAnalysisResult extends CompatibilityCheckResult {
|
|
559
|
+
warnings: CompatibilityFinding[];
|
|
560
|
+
}
|
|
561
|
+
type ExecutionResult = {
|
|
562
|
+
ok: true;
|
|
563
|
+
outputs: Value[];
|
|
564
|
+
} | {
|
|
565
|
+
ok: false;
|
|
566
|
+
error: string;
|
|
567
|
+
stage?: CompatibilityStage;
|
|
568
|
+
};
|
|
569
|
+
interface CompareWithJqResult {
|
|
570
|
+
compatible: boolean;
|
|
571
|
+
equivalent: boolean | null;
|
|
572
|
+
analysis: CompatibilityAnalysisResult;
|
|
573
|
+
jqTs: ExecutionResult;
|
|
574
|
+
jq: ExecutionResult;
|
|
575
|
+
findings: CompatibilityFinding[];
|
|
576
|
+
}
|
|
577
|
+
type JqRunner = (source: string, input: Value) => Value[] | ExecutionResult;
|
|
578
|
+
/**
|
|
579
|
+
* Checks whether a jq expression can be parsed and statically validated by jq-ts.
|
|
580
|
+
*
|
|
581
|
+
* This is a syntax/subset check only. It does not prove that runtime behavior
|
|
582
|
+
* matches the jq binary for every possible input.
|
|
583
|
+
*/
|
|
584
|
+
declare const checkCompatibility: (source: string) => CompatibilityCheckResult;
|
|
585
|
+
/**
|
|
586
|
+
* Checks jq-ts compatibility and reports known semantic differences from jq.
|
|
587
|
+
*/
|
|
588
|
+
declare const analyzeCompatibility: (source: string) => CompatibilityAnalysisResult;
|
|
589
|
+
/**
|
|
590
|
+
* Compares jq-ts execution against a caller-provided jq runner or jq result.
|
|
591
|
+
*
|
|
592
|
+
* The function is safe to export from the isolate-safe library because it does
|
|
593
|
+
* not spawn the jq binary itself. Tests and development tools can pass a runner
|
|
594
|
+
* that shells out to jq.
|
|
595
|
+
*/
|
|
596
|
+
declare const compareWithJq: (source: string, input: Value, jq: JqRunner | ExecutionResult, options?: EvalOptions) => CompareWithJqResult;
|
|
597
|
+
//#endregion
|
|
486
598
|
//#region src/index.d.ts
|
|
487
599
|
/**
|
|
488
600
|
* Runs a jq query against a JSON input.
|
|
@@ -498,5 +610,5 @@ declare class RuntimeError extends BaseError {
|
|
|
498
610
|
*/
|
|
499
611
|
declare const run: (source: string, input: Value, options?: EvalOptions) => Value[];
|
|
500
612
|
//#endregion
|
|
501
|
-
export { type EvalOptions, LexError, LimitTracker, type LimitsConfig, ParseError, type ResolvedLimits, RuntimeError, ValidationError, type Value, parse, resolveLimits, run, runAst, validate };
|
|
613
|
+
export { type CompareWithJqResult, type CompatibilityAnalysisResult, type CompatibilityCheckResult, type CompatibilityFinding, type CompatibilityFindingCategory, type CompatibilityFindingSeverity, type CompatibilityStage, type EvalOptions, type ExecutionResult, type JqRunner, LexError, LimitTracker, type LimitsConfig, ParseError, type ResolvedLimits, RuntimeError, ValidationError, type Value, analyzeCompatibility, checkCompatibility, compareWithJq, parse, resolveLimits, run, runAst, validate };
|
|
502
614
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/span.ts","../src/ast.ts","../src/parser.ts","../src/validate.ts","../src/limits.ts","../src/value.ts","../src/eval/types.ts","../src/eval/dispatch.ts","../src/errors.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/span.ts","../src/ast.ts","../src/parser.ts","../src/validate.ts","../src/limits.ts","../src/value.ts","../src/eval/types.ts","../src/eval/dispatch.ts","../src/errors.ts","../src/compat.ts","../src/index.ts"],"mappings":"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"}
|