@loancrate/json-selector 4.0.0 → 5.1.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 +27 -88
- package/dist/access-guards.d.ts +16 -0
- package/dist/access-guards.d.ts.map +1 -0
- package/dist/access-util.d.ts +7 -0
- package/dist/access-util.d.ts.map +1 -0
- package/dist/access.d.ts +9 -12
- package/dist/access.d.ts.map +1 -1
- package/dist/ast.d.ts +95 -1
- package/dist/ast.d.ts.map +1 -1
- package/dist/bind.d.ts +19 -0
- package/dist/bind.d.ts.map +1 -0
- package/dist/errors.d.ts +134 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/evaluate.d.ts +24 -7
- package/dist/evaluate.d.ts.map +1 -1
- package/dist/evaluation-context.d.ts +17 -0
- package/dist/evaluation-context.d.ts.map +1 -0
- package/dist/format.d.ts +7 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/functions/FallbackMapView.d.ts +18 -0
- package/dist/functions/FallbackMapView.d.ts.map +1 -0
- package/dist/functions/builtins/array.d.ts +4 -0
- package/dist/functions/builtins/array.d.ts.map +1 -0
- package/dist/functions/builtins/index.d.ts +4 -0
- package/dist/functions/builtins/index.d.ts.map +1 -0
- package/dist/functions/builtins/math.d.ts +4 -0
- package/dist/functions/builtins/math.d.ts.map +1 -0
- package/dist/functions/builtins/string.d.ts +4 -0
- package/dist/functions/builtins/string.d.ts.map +1 -0
- package/dist/functions/builtins/type.d.ts +4 -0
- package/dist/functions/builtins/type.d.ts.map +1 -0
- package/dist/functions/datatype.d.ts +90 -0
- package/dist/functions/datatype.d.ts.map +1 -0
- package/dist/functions/index.d.ts +7 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/provider.d.ts +6 -0
- package/dist/functions/provider.d.ts.map +1 -0
- package/dist/functions/registry.d.ts +20 -0
- package/dist/functions/registry.d.ts.map +1 -0
- package/dist/functions/types.d.ts +68 -0
- package/dist/functions/types.d.ts.map +1 -0
- package/dist/functions/validation.d.ts +30 -0
- package/dist/functions/validation.d.ts.map +1 -0
- package/dist/get.d.ts +3 -1
- package/dist/get.d.ts.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/json-selector.esm.js +4270 -1612
- package/dist/json-selector.esm.js.map +1 -1
- package/dist/json-selector.umd.js +4595 -1893
- package/dist/json-selector.umd.js.map +1 -1
- package/dist/lexer.d.ts +22 -7
- package/dist/lexer.d.ts.map +1 -1
- package/dist/parse.d.ts +3 -1
- package/dist/parse.d.ts.map +1 -1
- package/dist/parser.d.ts +79 -9
- package/dist/parser.d.ts.map +1 -1
- package/dist/set.d.ts +3 -1
- package/dist/set.d.ts.map +1 -1
- package/dist/token.d.ts +27 -17
- package/dist/token.d.ts.map +1 -1
- package/dist/util.d.ts +5 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/visitor.d.ts +11 -1
- package/dist/visitor.d.ts.map +1 -1
- package/package.json +4 -2
package/dist/evaluate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FunctionProvider } from "./functions/provider";
|
|
2
|
+
/**
|
|
3
|
+
* Immutable runtime evaluation scope shared across expression evaluation.
|
|
4
|
+
* This context is evaluation-only; parser/lexer compatibility options are
|
|
5
|
+
* configured separately via parse options.
|
|
6
|
+
*/
|
|
7
|
+
export type EvaluationContext = {
|
|
8
|
+
/** The root document (`$`). */
|
|
9
|
+
rootContext: unknown;
|
|
10
|
+
/** Function provider for built-in and custom functions. */
|
|
11
|
+
functionProvider: FunctionProvider;
|
|
12
|
+
/** Lexical-scope variable bindings (name without `$` -> value). */
|
|
13
|
+
bindings?: ReadonlyMap<string, unknown>;
|
|
14
|
+
/** Evaluates multi-select expressions on null context instead of short-circuiting to null. Defaults to true. */
|
|
15
|
+
evaluateNullMultiSelect?: boolean;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=evaluation-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,2DAA2D;IAC3D,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,gHAAgH;IAChH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC"}
|
package/dist/format.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { JsonSelector } from "./ast";
|
|
2
|
+
/** Options controlling how a selector AST is formatted. */
|
|
2
3
|
export interface FormatJsonSelectorOptions {
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated This option has no effect. The AST now includes an `explicit`
|
|
6
|
+
* flag for current nodes and the formatter ensures valid output in all cases.
|
|
7
|
+
*/
|
|
3
8
|
currentImplied: boolean;
|
|
4
9
|
}
|
|
5
|
-
|
|
10
|
+
/** Converts a selector AST back into its canonical string representation. */
|
|
11
|
+
export declare function formatJsonSelector(selector: JsonSelector, _options?: Partial<FormatJsonSelectorOptions>): string;
|
|
6
12
|
//# sourceMappingURL=format.d.ts.map
|
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwB,MAAM,OAAO,CAAC;AAqE3D,2DAA2D;AAC3D,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC5C,MAAM,CAQR"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only {@link Map} view that layers a primary map over an optional fallback,
|
|
3
|
+
* with primary entries taking precedence on key collisions.
|
|
4
|
+
*/
|
|
5
|
+
export declare class FallbackMapView<K, V extends {}> implements ReadonlyMap<K, V> {
|
|
6
|
+
protected readonly primary: ReadonlyMap<K, V>;
|
|
7
|
+
protected readonly fallback?: ReadonlyMap<K, V> | undefined;
|
|
8
|
+
constructor(primary: ReadonlyMap<K, V>, fallback?: ReadonlyMap<K, V> | undefined);
|
|
9
|
+
get(name: K): V | undefined;
|
|
10
|
+
has(name: K): boolean;
|
|
11
|
+
get size(): number;
|
|
12
|
+
entries(): MapIterator<[K, V]>;
|
|
13
|
+
keys(): MapIterator<K>;
|
|
14
|
+
values(): MapIterator<V>;
|
|
15
|
+
[Symbol.iterator](): MapIterator<[K, V]>;
|
|
16
|
+
forEach(callbackfn: (value: V, key: K, map: ReadonlyMap<K, V>) => void, thisArg?: unknown): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=FallbackMapView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FallbackMapView.d.ts","sourceRoot":"","sources":["../../src/functions/FallbackMapView.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAE,YAAW,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;gBAD5B,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,YAAA;IAGjD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAI3B,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAIrB,IAAI,IAAI,IAAI,MAAM,CAUjB;IAEA,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAa9B,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAMtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAMzB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAIxC,OAAO,CACL,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAC9D,OAAO,CAAC,EAAE,OAAO,GAChB,IAAI;CAKR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/functions/builtins/array.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9C,kEAAkE;AAClE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAC1C,IAAI,CA4QN"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FunctionProvider } from "../provider";
|
|
2
|
+
/** Returns a lazily-initialized singleton {@link FunctionProvider} containing all standard JMESPath built-in functions. */
|
|
3
|
+
export declare function getBuiltinFunctionProvider(): FunctionProvider;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/functions/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAU/C,2HAA2H;AAC3H,wBAAgB,0BAA0B,IAAI,gBAAgB,CAgB7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../src/functions/builtins/math.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9C,gDAAgD;AAChD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAC1C,IAAI,CA8HN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../src/functions/builtins/string.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAQ9C,+CAA+C;AAC/C,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAC1C,IAAI,CAwXN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/functions/builtins/type.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9C,2EAA2E;AAC3E,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAC1C,IAAI,CAwDN"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { JsonSelector } from "../ast";
|
|
2
|
+
/** Describes a single scalar type in the function argument type system. */
|
|
3
|
+
export interface PrimitiveType {
|
|
4
|
+
kind: "any" | "boolean" | "number" | "string" | "object" | "null" | "expref";
|
|
5
|
+
}
|
|
6
|
+
/** String literal union of all primitive type kind discriminators. */
|
|
7
|
+
export type PrimitiveTypeKind = PrimitiveType["kind"];
|
|
8
|
+
/** Matches any value regardless of type. */
|
|
9
|
+
export declare const ANY_TYPE: Readonly<{
|
|
10
|
+
readonly kind: "any";
|
|
11
|
+
}>;
|
|
12
|
+
/** Matches only `true` or `false` values. */
|
|
13
|
+
export declare const BOOLEAN_TYPE: Readonly<{
|
|
14
|
+
readonly kind: "boolean";
|
|
15
|
+
}>;
|
|
16
|
+
/** Matches only numeric values (integers and floats). */
|
|
17
|
+
export declare const NUMBER_TYPE: Readonly<{
|
|
18
|
+
readonly kind: "number";
|
|
19
|
+
}>;
|
|
20
|
+
/** Matches only string values. */
|
|
21
|
+
export declare const STRING_TYPE: Readonly<{
|
|
22
|
+
readonly kind: "string";
|
|
23
|
+
}>;
|
|
24
|
+
/** Matches only plain objects (not arrays or null). */
|
|
25
|
+
export declare const OBJECT_TYPE: Readonly<{
|
|
26
|
+
readonly kind: "object";
|
|
27
|
+
}>;
|
|
28
|
+
/** Matches only `null` (or `undefined`, which is treated as null). */
|
|
29
|
+
export declare const NULL_TYPE: Readonly<{
|
|
30
|
+
readonly kind: "null";
|
|
31
|
+
}>;
|
|
32
|
+
/** Matches only expression references created with `&expr` syntax. */
|
|
33
|
+
export declare const EXPREF_TYPE: Readonly<{
|
|
34
|
+
readonly kind: "expref";
|
|
35
|
+
}>;
|
|
36
|
+
/** Describes an array type whose elements must all conform to a given {@link DataType}. */
|
|
37
|
+
export interface ArrayType {
|
|
38
|
+
kind: "array";
|
|
39
|
+
elementType: DataType;
|
|
40
|
+
}
|
|
41
|
+
/** Creates an {@link ArrayType} requiring all elements to match the given type. */
|
|
42
|
+
export declare function arrayOf(elementType: ConcreteType): ArrayType;
|
|
43
|
+
/** Array type accepting elements of any type. */
|
|
44
|
+
export declare const ANY_ARRAY_TYPE: Readonly<ArrayType>;
|
|
45
|
+
/** Array type accepting only numeric elements. */
|
|
46
|
+
export declare const NUMBER_ARRAY_TYPE: Readonly<ArrayType>;
|
|
47
|
+
/** Array type accepting only string elements. */
|
|
48
|
+
export declare const STRING_ARRAY_TYPE: Readonly<ArrayType>;
|
|
49
|
+
/** A non-union type: either a primitive or an array with typed elements. */
|
|
50
|
+
export type ConcreteType = PrimitiveType | ArrayType;
|
|
51
|
+
/** String literal union of all non-union type kind discriminators. */
|
|
52
|
+
export type ConcreteTypeKind = ConcreteType["kind"];
|
|
53
|
+
/** A type that accepts values matching any one of its constituent concrete types. */
|
|
54
|
+
export interface UnionType {
|
|
55
|
+
kind: "union";
|
|
56
|
+
types: ConcreteType[];
|
|
57
|
+
}
|
|
58
|
+
/** Creates a {@link UnionType} that matches values conforming to any of the given types. */
|
|
59
|
+
export declare function unionOf(types: [ConcreteType, ConcreteType, ...ConcreteType[]]): UnionType;
|
|
60
|
+
/** The complete function type system: a concrete type, an array type, or a union of types. */
|
|
61
|
+
export type DataType = ConcreteType | UnionType;
|
|
62
|
+
/** String literal union of all type kind discriminators including `"union"`. */
|
|
63
|
+
export type DataTypeKind = DataType["kind"];
|
|
64
|
+
declare const EXPREF_SYMBOL: unique symbol;
|
|
65
|
+
/**
|
|
66
|
+
* An unevaluated expression passed to a function via `&expr` syntax.
|
|
67
|
+
* Higher-order functions like `sort_by` and `map` receive these and
|
|
68
|
+
* evaluate them against each element using the provided `evaluate` callback.
|
|
69
|
+
*/
|
|
70
|
+
interface ExpressionRef {
|
|
71
|
+
[EXPREF_SYMBOL]: JsonSelector;
|
|
72
|
+
}
|
|
73
|
+
/** Wraps a selector AST node as an opaque reference for deferred evaluation by higher-order functions. */
|
|
74
|
+
export declare function makeExpressionRef(expression: JsonSelector): ExpressionRef;
|
|
75
|
+
/** Extracts the wrapped {@link JsonSelector} from an expression reference, or returns `null` if the value is not one. */
|
|
76
|
+
export declare function getExpressionRef(arg: unknown): JsonSelector | null;
|
|
77
|
+
/**
|
|
78
|
+
* Determine the {@link DataTypeKind} of a runtime value.
|
|
79
|
+
*/
|
|
80
|
+
export declare function getDataTypeKind(value: unknown): ConcreteTypeKind;
|
|
81
|
+
/**
|
|
82
|
+
* Determine the {@link DataType} of a runtime value.
|
|
83
|
+
*/
|
|
84
|
+
export declare function getDataType(value: unknown): ConcreteType;
|
|
85
|
+
/** Tests whether a runtime value conforms to the given {@link DataType}, including recursive element checks for arrays. */
|
|
86
|
+
export declare function matchesType(value: unknown, type: DataType): boolean;
|
|
87
|
+
/** Renders a {@link DataType} as a human-readable string for use in error messages and diagnostics. */
|
|
88
|
+
export declare function formatType(type: DataType): string;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=datatype.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatype.d.ts","sourceRoot":"","sources":["../../src/functions/datatype.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC9E;AAED,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtD,4CAA4C;AAC5C,eAAO,MAAM,QAAQ;;EAEc,CAAC;AAEpC,6CAA6C;AAC7C,eAAO,MAAM,YAAY;;EAEU,CAAC;AAEpC,yDAAyD;AACzD,eAAO,MAAM,WAAW;;EAEW,CAAC;AAEpC,kCAAkC;AAClC,eAAO,MAAM,WAAW;;EAEW,CAAC;AAEpC,uDAAuD;AACvD,eAAO,MAAM,WAAW;;EAEW,CAAC;AAEpC,sEAAsE;AACtE,eAAO,MAAM,SAAS;;EAEa,CAAC;AAEpC,sEAAsE;AACtE,eAAO,MAAM,WAAW;;EAEW,CAAC;AAIpC,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,QAAQ,CAAC;CACvB;AAED,mFAAmF;AACnF,wBAAgB,OAAO,CAAC,WAAW,EAAE,YAAY,GAAG,SAAS,CAE5D;AAED,iDAAiD;AACjD,eAAO,MAAM,cAAc,qBAAmC,CAAC;AAE/D,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,qBAAsC,CAAC;AAErE,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,qBAAsC,CAAC;AAErE,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,SAAS,CAAC;AAErD,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAIpD,qFAAqF;AACrF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CACrB,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC,GACrD,SAAS,CAEX;AAED,8FAA8F;AAC9F,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;AAEhD,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAI5C,QAAA,MAAM,aAAa,eAAmB,CAAC;AAEvC;;;;GAIG;AACH,UAAU,aAAa;IACrB,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,0GAA0G;AAC1G,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,YAAY,GAAG,aAAa,CAEzE;AAMD,yHAAyH;AACzH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAElE;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAsBhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAsBxD;AAwBD,2HAA2H;AAC3H,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAiBnE;AAED,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAYjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FunctionCallArgs, FunctionDefinition } from "./types";
|
|
2
|
+
/** Immutable lookup table mapping function names to their {@link FunctionDefinition}s. */
|
|
3
|
+
export type FunctionProvider = ReadonlyMap<string, FunctionDefinition>;
|
|
4
|
+
/** Resolves expression-ref arguments, validates argument types against the function's signatures, and invokes the handler. */
|
|
5
|
+
export declare function callFunction(provider: FunctionProvider, name: string, request: FunctionCallArgs): unknown;
|
|
6
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/functions/provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG5E,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEvE,8HAA8H;AAC9H,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAkBT"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FallbackMapView } from "./FallbackMapView";
|
|
2
|
+
import { FunctionProvider } from "./provider";
|
|
3
|
+
import { FunctionDefinition } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Function registry for built-in and custom functions.
|
|
6
|
+
* Pass `null` as the base provider to omit built-in functions.
|
|
7
|
+
*/
|
|
8
|
+
export declare class FunctionRegistry extends FallbackMapView<string, FunctionDefinition> {
|
|
9
|
+
private readonly custom;
|
|
10
|
+
constructor(baseProvider?: FunctionProvider | null);
|
|
11
|
+
/**
|
|
12
|
+
* Register a custom function (can override built-ins).
|
|
13
|
+
*/
|
|
14
|
+
register(def: FunctionDefinition): void;
|
|
15
|
+
/**
|
|
16
|
+
* Unregister a custom function.
|
|
17
|
+
*/
|
|
18
|
+
unregister(name: string): boolean;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/functions/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,eAAe,CACnD,MAAM,EACN,kBAAkB,CACnB;IACC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;gBAGvD,YAAY,GAAE,gBAAgB,GAAG,IAAmC;IAOtE;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAIvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGlC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { JsonSelector } from "../ast";
|
|
2
|
+
import type { EvaluationContext } from "../evaluation-context";
|
|
3
|
+
import { NonEmptyArray } from "../util";
|
|
4
|
+
import { DataType } from "./datatype";
|
|
5
|
+
/**
|
|
6
|
+
* Common evaluation context shared by function call and handler bindings.
|
|
7
|
+
*/
|
|
8
|
+
export interface EvaluationBindings extends EvaluationContext {
|
|
9
|
+
/** The current evaluation context (`@`). */
|
|
10
|
+
context: unknown;
|
|
11
|
+
/** Callback to evaluate a {@link JsonSelector} against a given context. */
|
|
12
|
+
evaluate: (selector: JsonSelector, ctx: unknown) => unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Bindings passed to `callFunction` to invoke a function.
|
|
16
|
+
*/
|
|
17
|
+
export interface FunctionCallArgs extends EvaluationBindings {
|
|
18
|
+
/** Unevaluated expression arguments from the AST. */
|
|
19
|
+
args: JsonSelector[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A resolved function argument: any JSON value or an {@link ExpressionRef}.
|
|
23
|
+
*/
|
|
24
|
+
export type FunctionArg = unknown;
|
|
25
|
+
/**
|
|
26
|
+
* Bindings passed to a {@link FunctionHandler} when it is called.
|
|
27
|
+
*/
|
|
28
|
+
export interface FunctionCallBindings extends EvaluationBindings {
|
|
29
|
+
/** Validated arguments (already checked against the matching signature). */
|
|
30
|
+
args: FunctionArg[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Describes a single function parameter: which types it accepts and whether it is optional.
|
|
34
|
+
*/
|
|
35
|
+
export interface ArgumentSignature {
|
|
36
|
+
/** Name of this parameter for error messages. */
|
|
37
|
+
name: string;
|
|
38
|
+
/** Type accepted at this parameter position. */
|
|
39
|
+
type: DataType;
|
|
40
|
+
/** If true, the caller may omit this argument. Optional parameters must be trailing. */
|
|
41
|
+
optional?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* If true, this parameter accepts any number of additional arguments of the same type.
|
|
44
|
+
* Must only appear on the last parameter in a signature.
|
|
45
|
+
* When combined with `optional`, zero variadic arguments are accepted;
|
|
46
|
+
* otherwise at least one argument at this position is required.
|
|
47
|
+
*/
|
|
48
|
+
variadic?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Implementation of a built-in or custom function.
|
|
52
|
+
*/
|
|
53
|
+
export type FunctionHandler = (bindings: FunctionCallBindings) => unknown;
|
|
54
|
+
/**
|
|
55
|
+
* A registered function: its name, accepted signatures (overloads), and implementation.
|
|
56
|
+
*/
|
|
57
|
+
export interface FunctionDefinition {
|
|
58
|
+
/** Function name as it appears in expressions (e.g. `"length"`). */
|
|
59
|
+
name: string;
|
|
60
|
+
/**
|
|
61
|
+
* One or more overloaded signatures. Each inner array is a complete parameter list;
|
|
62
|
+
* validation succeeds if the arguments match any one of them.
|
|
63
|
+
*/
|
|
64
|
+
signatures: NonEmptyArray<ArgumentSignature[]>;
|
|
65
|
+
/** Implementation called after argument validation succeeds. */
|
|
66
|
+
handler: FunctionHandler;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,qDAAqD;IACrD,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,4EAA4E;IAC5E,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,wFAAwF;IACxF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,oBAAoB,KAAK,OAAO,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC/C,gEAAgE;IAChE,OAAO,EAAE,eAAe,CAAC;CAC1B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { NonEmptyArray } from "../util";
|
|
2
|
+
import { DataType } from "./datatype";
|
|
3
|
+
import { ArgumentSignature, FunctionArg } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Validate function arguments against a list of possible signatures.
|
|
6
|
+
* Returns the index of the matching signature, or throws an error.
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateArguments(name: string, args: FunctionArg[], signatures: NonEmptyArray<ArgumentSignature[]>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Validate that a number is an integer.
|
|
11
|
+
*/
|
|
12
|
+
export declare function requireInteger(functionName: string, argumentName: string, value: number): number;
|
|
13
|
+
/**
|
|
14
|
+
* Validate that a number is a non-negative integer.
|
|
15
|
+
*/
|
|
16
|
+
export declare function requireNonNegativeInteger(functionName: string, argumentName: string, value: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Helper to create a required argument signature.
|
|
19
|
+
*/
|
|
20
|
+
export declare function arg(name: string, type: DataType): ArgumentSignature;
|
|
21
|
+
/**
|
|
22
|
+
* Helper to create an optional argument signature.
|
|
23
|
+
*/
|
|
24
|
+
export declare function optArg(name: string, type: DataType): ArgumentSignature;
|
|
25
|
+
/**
|
|
26
|
+
* Helper to create a variadic argument signature.
|
|
27
|
+
* Must be the last parameter in a signature. Accepts one or more arguments of the given type.
|
|
28
|
+
*/
|
|
29
|
+
export declare function varArg(name: string, type: DataType): ArgumentSignature;
|
|
30
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/functions/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAwC,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EAAE,EACnB,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,CAAC,GAC7C,IAAI,CAaN;AAyID;;GAEG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAEnE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAEtE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAEtE"}
|
package/dist/get.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type AccessorOptions } from "./access";
|
|
1
2
|
import { JsonSelector } from "./ast";
|
|
2
|
-
|
|
3
|
+
/** Evaluates a selector against a context and returns the selected value (read-only convenience wrapper). */
|
|
4
|
+
export declare function getWithJsonSelector(selector: JsonSelector, context: unknown, options?: Partial<AccessorOptions>): unknown;
|
|
3
5
|
//# sourceMappingURL=get.d.ts.map
|
package/dist/get.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../src/get.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../src/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAGrC,6GAA6G;AAC7G,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACjC,OAAO,CAET"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
export * from "./access";
|
|
2
2
|
export * from "./ast";
|
|
3
|
+
export * from "./bind";
|
|
4
|
+
export * from "./errors";
|
|
5
|
+
export * from "./evaluation-context";
|
|
3
6
|
export { evaluateJsonSelector } from "./evaluate";
|
|
4
7
|
export * from "./format";
|
|
8
|
+
export * from "./functions";
|
|
5
9
|
export * from "./get";
|
|
6
10
|
export * from "./parse";
|
|
11
|
+
export type { ParserOptions } from "./parser";
|
|
7
12
|
export * from "./set";
|
|
8
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,cAAc,OAAO,CAAC"}
|