@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/parser.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import { JsonSelector } from "./ast";
|
|
1
|
+
import { JsonSelector, JsonSelectorCurrent, JsonSelectorRoot } from "./ast";
|
|
2
|
+
export declare const CURRENT_NODE: Readonly<JsonSelectorCurrent>;
|
|
3
|
+
export declare const ROOT_NODE: Readonly<JsonSelectorRoot>;
|
|
4
|
+
export interface ParserOptions {
|
|
5
|
+
/** Requires valid JSON content in backtick literals; throws on invalid JSON instead of falling back to a string. */
|
|
6
|
+
strictJsonLiterals?: boolean;
|
|
7
|
+
/** Enables backslash escape in raw strings (both \' and \\ are unescaped). Defaults to true. */
|
|
8
|
+
rawStringBackslashEscape?: boolean;
|
|
9
|
+
}
|
|
2
10
|
/**
|
|
3
|
-
*
|
|
11
|
+
* Hand-written parser for JSON Selectors.
|
|
4
12
|
*
|
|
5
13
|
* Uses precedence-climbing (Pratt parsing) with binding power (0-55 range) to handle
|
|
6
14
|
* operator precedence efficiently. The parser uses two main methods:
|
|
@@ -8,8 +16,10 @@ import { JsonSelector } from "./ast";
|
|
|
8
16
|
* - led() for infix/postfix operators (with left context)
|
|
9
17
|
*/
|
|
10
18
|
export declare class Parser {
|
|
19
|
+
private readonly input;
|
|
11
20
|
private readonly lexer;
|
|
12
|
-
|
|
21
|
+
private readonly strictJsonLiterals;
|
|
22
|
+
constructor(input: string, options?: ParserOptions);
|
|
13
23
|
/**
|
|
14
24
|
* Main entry point: parse a complete expression
|
|
15
25
|
*/
|
|
@@ -21,6 +31,11 @@ export declare class Parser {
|
|
|
21
31
|
* @returns Parsed expression node
|
|
22
32
|
*/
|
|
23
33
|
private expression;
|
|
34
|
+
/**
|
|
35
|
+
* Continue Pratt parsing from a given left-hand side node.
|
|
36
|
+
* Applies led (left denotation) operators while their binding power exceeds rbp.
|
|
37
|
+
*/
|
|
38
|
+
private expressionFrom;
|
|
24
39
|
/**
|
|
25
40
|
* NUD (Null Denotation): Handle prefix operators and primary expressions
|
|
26
41
|
* Called when we don't have a left-hand side yet
|
|
@@ -31,6 +46,16 @@ export declare class Parser {
|
|
|
31
46
|
* Called when we have a left-hand side
|
|
32
47
|
*/
|
|
33
48
|
private led;
|
|
49
|
+
/**
|
|
50
|
+
* Parse lexical scope expression:
|
|
51
|
+
* let $a = expr, $b = expr in body
|
|
52
|
+
*
|
|
53
|
+
* Called after consuming contextual "let".
|
|
54
|
+
*/
|
|
55
|
+
private parseLetExpression;
|
|
56
|
+
private parseCompare;
|
|
57
|
+
private parseArithmetic;
|
|
58
|
+
private foldUnaryArithmeticLiteral;
|
|
34
59
|
/**
|
|
35
60
|
* Parse bracket expression: foo[0], foo[:], foo[*], foo['id']
|
|
36
61
|
* Also handles leading brackets (no LHS): [0], [:], [*], ['id']
|
|
@@ -59,25 +84,70 @@ export declare class Parser {
|
|
|
59
84
|
* 2. Terminate the projection
|
|
60
85
|
*
|
|
61
86
|
* Uses PROJECTION_STOP_THRESHOLD to distinguish:
|
|
62
|
-
* - Below threshold: terminators (pipe, or, and, comparisons, EOF, closing brackets)
|
|
87
|
+
* - Below threshold: terminators (pipe, ternary, or, and, comparisons, EOF, closing brackets)
|
|
63
88
|
* - At/above threshold: continuation operators (flatten, filter, star, dot, bracket access)
|
|
64
89
|
*
|
|
65
90
|
* This allows proper precedence: `foo[] | bar` pipes the projection result,
|
|
66
91
|
* while `foo[].bar` continues the projection to select .bar from each element.
|
|
67
92
|
*
|
|
68
|
-
* NOTE: Unlike
|
|
69
|
-
* we use a fixed threshold. This is because our AST structure is
|
|
70
|
-
* projections (project(project(x, y), z)) while we nest
|
|
71
|
-
* (project(x, project(y, z))). Both approaches produce the same
|
|
93
|
+
* NOTE: Unlike the reference implementation which uses binding power (rbp) to control
|
|
94
|
+
* projection continuation, we use a fixed threshold. This is because our AST structure is
|
|
95
|
+
* different: the reference chains projections (project(project(x, y), z)) while we nest
|
|
96
|
+
* them in the projection field (project(x, project(y, z))). Both approaches produce the same results,
|
|
72
97
|
* but our nested structure creates clearer semantics for expressions like foo[*].bar[*].
|
|
73
98
|
*/
|
|
74
99
|
private parseProjectionRHS;
|
|
100
|
+
/**
|
|
101
|
+
* Parse the continuation of a projection: the chain of postfix operators
|
|
102
|
+
* (dot, bracket, filter) that apply to each projected element.
|
|
103
|
+
*
|
|
104
|
+
* Returns undefined if the next token does not continue the projection
|
|
105
|
+
* (e.g. pipe, comparison, EOF, or closing brackets).
|
|
106
|
+
*/
|
|
107
|
+
private parseProjectionContinuation;
|
|
75
108
|
/**
|
|
76
109
|
* Parse slice after [ and optional start have been consumed: [start:end:step]
|
|
77
110
|
*
|
|
78
|
-
* Called when pattern is [:...] (start undefined) or [n:...] (start known).
|
|
111
|
+
* Called when pattern is [:...] (start undefined) or [n:...] / [-n:...] (start known).
|
|
79
112
|
*/
|
|
80
113
|
private parseSlice;
|
|
114
|
+
/**
|
|
115
|
+
* After consuming [ and a number, determine if this is an index or slice.
|
|
116
|
+
*/
|
|
117
|
+
private parseIndexOrSlice;
|
|
118
|
+
private tryConsumeSignedNumber;
|
|
81
119
|
private parseIdentifier;
|
|
120
|
+
/**
|
|
121
|
+
* Parse comma-separated expressions and closing bracket into a multi-select list.
|
|
122
|
+
* Called after the first expression has already been parsed.
|
|
123
|
+
*/
|
|
124
|
+
private parseMultiSelectListFromBracket;
|
|
125
|
+
/**
|
|
126
|
+
* Parse function call: name(arg1, arg2, ...)
|
|
127
|
+
* Called after identifier has been consumed and ( has been peeked
|
|
128
|
+
*/
|
|
129
|
+
private parseFunctionCall;
|
|
130
|
+
/**
|
|
131
|
+
* Parse multi-select hash: {key: expr, key: expr, ...}
|
|
132
|
+
*/
|
|
133
|
+
private parseMultiSelectHash;
|
|
134
|
+
/**
|
|
135
|
+
* Parse a single key: value entry in a multi-select hash
|
|
136
|
+
*/
|
|
137
|
+
private parseMultiSelectHashEntry;
|
|
138
|
+
/**
|
|
139
|
+
* Parse object projection: creates the objectProject node and parses
|
|
140
|
+
* any continuation operators.
|
|
141
|
+
*/
|
|
142
|
+
private parseObjectProjection;
|
|
143
|
+
/**
|
|
144
|
+
* Parse dot-bracket: foo.[...] which could be:
|
|
145
|
+
* - Multi-select list: foo.[a, b]
|
|
146
|
+
* - Array projection: foo.[*]
|
|
147
|
+
*
|
|
148
|
+
* Note: foo.[0], foo.[:], and foo.['id'] are rejected as syntax errors.
|
|
149
|
+
*/
|
|
150
|
+
private parseDotBracket;
|
|
151
|
+
private unexpectedToken;
|
|
82
152
|
}
|
|
83
153
|
//# sourceMappingURL=parser.d.ts.map
|
package/dist/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAGZ,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,OAAO,CAAC;AAUf,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAErD,CAAC;AACH,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAE/C,CAAC;AAkEH,MAAM,WAAW,aAAa;IAC5B,oHAAoH;IACpH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gGAAgG;IAChG,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;gBAEjC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa;IAQlD;;OAEG;IACH,KAAK,IAAI,YAAY;IASrB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAIlB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,OAAO,CAAC,GAAG;IAwIX;;;OAGG;IACH,OAAO,CAAC,GAAG;IAyJX;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,0BAA0B;IAqBlC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IA2G9B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAYnC;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,eAAe;IAevB;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IASvC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAwDvB,OAAO,CAAC,eAAe;CAaxB"}
|
package/dist/set.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type AccessorOptions } from "./access";
|
|
1
2
|
import { JsonSelector } from "./ast";
|
|
2
|
-
|
|
3
|
+
/** Writes a value at the location identified by a selector, returning the previous value at that path. */
|
|
4
|
+
export declare function setWithJsonSelector(selector: JsonSelector, context: unknown, value: unknown, options?: Partial<AccessorOptions>): unknown;
|
|
3
5
|
//# sourceMappingURL=set.d.ts.map
|
package/dist/set.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAGrC,0GAA0G;AAC1G,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACjC,OAAO,CAKT"}
|
package/dist/token.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export declare const enum TokenType {
|
|
|
4
4
|
RPAREN = 2,
|
|
5
5
|
LBRACKET = 3,
|
|
6
6
|
RBRACKET = 4,
|
|
7
|
-
LBRACE = 5
|
|
8
|
-
RBRACE = 6
|
|
7
|
+
LBRACE = 5,
|
|
8
|
+
RBRACE = 6,
|
|
9
9
|
DOT = 7,
|
|
10
10
|
COMMA = 8,
|
|
11
11
|
COLON = 9,
|
|
@@ -19,26 +19,35 @@ export declare const enum TokenType {
|
|
|
19
19
|
LTE = 17,
|
|
20
20
|
GT = 18,
|
|
21
21
|
GTE = 19,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
22
|
+
PLUS = 20,// "+" (addition, unary plus)
|
|
23
|
+
MINUS = 21,// "-" (subtraction, unary minus; also Unicode "−")
|
|
24
|
+
MULTIPLY = 22,// "×" (Unicode U+00D7 multiplication sign only)
|
|
25
|
+
DIVIDE = 23,// "/" or "÷" (Unicode U+00F7)
|
|
26
|
+
MODULO = 24,// "%"
|
|
27
|
+
INT_DIVIDE = 25,// "//"
|
|
28
|
+
AT = 26,
|
|
29
|
+
DOLLAR = 27,
|
|
30
|
+
STAR = 28,
|
|
31
|
+
QUESTION = 29,// Ternary operator
|
|
32
|
+
AMPERSAND = 30,
|
|
33
|
+
FILTER_BRACKET = 31,
|
|
34
|
+
FLATTEN_BRACKET = 32,
|
|
35
|
+
IDENTIFIER = 33,
|
|
36
|
+
QUOTED_STRING = 34,
|
|
37
|
+
RAW_STRING = 35,
|
|
38
|
+
BACKTICK_LITERAL = 36,
|
|
39
|
+
NUMBER = 37,
|
|
40
|
+
NULL = 38,
|
|
41
|
+
TRUE = 39,
|
|
42
|
+
FALSE = 40,
|
|
43
|
+
VARIABLE = 41,
|
|
44
|
+
ASSIGN = 42
|
|
36
45
|
}
|
|
37
46
|
export declare const TOKEN_LIMIT: number;
|
|
38
47
|
interface TokenBase {
|
|
39
48
|
offset: number;
|
|
40
49
|
}
|
|
41
|
-
type StringTokenTypes = TokenType.IDENTIFIER | TokenType.QUOTED_STRING | TokenType.RAW_STRING | TokenType.BACKTICK_LITERAL;
|
|
50
|
+
type StringTokenTypes = TokenType.IDENTIFIER | TokenType.QUOTED_STRING | TokenType.RAW_STRING | TokenType.BACKTICK_LITERAL | TokenType.VARIABLE;
|
|
42
51
|
export interface StringToken extends TokenBase {
|
|
43
52
|
type: StringTokenTypes;
|
|
44
53
|
text: string;
|
|
@@ -74,6 +83,7 @@ export type Token = StringToken | NumberToken | NullToken | TrueToken | FalseTok
|
|
|
74
83
|
export type TokenTypeMap = {
|
|
75
84
|
[K in TokenType]: K extends StringTokenTypes ? StringToken : K extends TokenType.NUMBER ? NumberToken : K extends TokenType.NULL ? NullToken : K extends TokenType.TRUE ? TrueToken : K extends TokenType.FALSE ? FalseToken : SymbolToken;
|
|
76
85
|
};
|
|
86
|
+
export declare const EOF_DESCRIPTION = "end of input";
|
|
77
87
|
export declare function describeTokenType(type: TokenType): string;
|
|
78
88
|
export {};
|
|
79
89
|
//# sourceMappingURL=token.d.ts.map
|
package/dist/token.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AACA,0BAAkB,SAAS;IAEzB,GAAG,IAAA;IAGH,MAAM,IAAA;IACN,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,MAAM,IAAA
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { JsonValue } from "type-fest";
|
|
2
2
|
export declare function isArray(value: unknown): value is unknown[];
|
|
3
3
|
export declare function asArray(value: unknown): unknown[];
|
|
4
|
+
/** Tuple type that guarantees at least one element is present. */
|
|
5
|
+
export type NonEmptyArray<T> = [T, ...T[]];
|
|
6
|
+
/** Type guard that narrows an array to {@link NonEmptyArray}, confirming it has at least one element. */
|
|
7
|
+
export declare function isNonEmptyArray<T>(arr: T[]): arr is NonEmptyArray<T>;
|
|
4
8
|
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
5
9
|
export declare function isFalseOrEmpty(value: unknown): boolean;
|
|
6
10
|
export declare function getField(obj: unknown, name: string): unknown;
|
|
@@ -11,4 +15,5 @@ export declare function formatLiteral(value: JsonValue): string;
|
|
|
11
15
|
export declare function isValidIdentifier(s: string): boolean;
|
|
12
16
|
export declare function formatIdentifier(s: string): string;
|
|
13
17
|
export declare function formatRawString(s: string): string;
|
|
18
|
+
export declare function describeValueType(value: unknown): string;
|
|
14
19
|
//# sourceMappingURL=util.d.ts.map
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAE1D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAEjD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQtD;AAWD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAIjE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjD"}
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAE1D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAEjD;AAED,kEAAkE;AAClE,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAE3C,yGAAyG;AACzG,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAEpE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQtD;AAWD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAIjE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQxD"}
|
package/dist/visitor.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { JsonSelector, JsonSelectorAnd, JsonSelectorCompare, JsonSelectorCurrent, JsonSelectorFieldAccess, JsonSelectorFilter, JsonSelectorFlatten, JsonSelectorIdAccess, JsonSelectorIdentifier, JsonSelectorIndexAccess, JsonSelectorLiteral, JsonSelectorNot, JsonSelectorOr, JsonSelectorPipe, JsonSelectorProject, JsonSelectorRoot, JsonSelectorSlice } from "./ast";
|
|
1
|
+
import { JsonSelector, JsonSelectorAnd, JsonSelectorArithmetic, JsonSelectorCompare, JsonSelectorCurrent, JsonSelectorExpressionRef, JsonSelectorFieldAccess, JsonSelectorFilter, JsonSelectorFlatten, JsonSelectorFunctionCall, JsonSelectorIdAccess, JsonSelectorIdentifier, JsonSelectorIndexAccess, JsonSelectorLet, JsonSelectorLiteral, JsonSelectorMultiSelectHash, JsonSelectorMultiSelectList, JsonSelectorNot, JsonSelectorObjectProject, JsonSelectorOr, JsonSelectorPipe, JsonSelectorProject, JsonSelectorRoot, JsonSelectorSlice, JsonSelectorTernary, JsonSelectorUnaryArithmetic, JsonSelectorVariableRef } from "./ast";
|
|
2
2
|
export interface Visitor<R, C> {
|
|
3
3
|
current(node: JsonSelectorCurrent, context: C): R;
|
|
4
4
|
root(node: JsonSelectorRoot, context: C): R;
|
|
@@ -13,9 +13,19 @@ export interface Visitor<R, C> {
|
|
|
13
13
|
flatten(node: JsonSelectorFlatten, context: C): R;
|
|
14
14
|
not(node: JsonSelectorNot, context: C): R;
|
|
15
15
|
compare(node: JsonSelectorCompare, context: C): R;
|
|
16
|
+
arithmetic(node: JsonSelectorArithmetic, context: C): R;
|
|
17
|
+
unaryArithmetic(node: JsonSelectorUnaryArithmetic, context: C): R;
|
|
16
18
|
and(node: JsonSelectorAnd, context: C): R;
|
|
17
19
|
or(node: JsonSelectorOr, context: C): R;
|
|
20
|
+
ternary(node: JsonSelectorTernary, context: C): R;
|
|
18
21
|
pipe(node: JsonSelectorPipe, context: C): R;
|
|
22
|
+
functionCall(node: JsonSelectorFunctionCall, context: C): R;
|
|
23
|
+
expressionRef(node: JsonSelectorExpressionRef, context: C): R;
|
|
24
|
+
variableRef(node: JsonSelectorVariableRef, context: C): R;
|
|
25
|
+
let(node: JsonSelectorLet, context: C): R;
|
|
26
|
+
multiSelectList(node: JsonSelectorMultiSelectList, context: C): R;
|
|
27
|
+
multiSelectHash(node: JsonSelectorMultiSelectHash, context: C): R;
|
|
28
|
+
objectProject(node: JsonSelectorObjectProject, context: C): R;
|
|
19
29
|
}
|
|
20
30
|
export declare function visitJsonSelector<R, C>(selector: JsonSelector, visitor: Visitor<R, C>, context: C): R;
|
|
21
31
|
//# sourceMappingURL=visitor.d.ts.map
|
package/dist/visitor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../src/visitor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loancrate/json-selector",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "LoanCrate JSON Selectors",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"json",
|
|
@@ -41,9 +41,10 @@
|
|
|
41
41
|
"build": "rimraf dist && rollup -c rollup.config.mjs",
|
|
42
42
|
"changeset": "changeset",
|
|
43
43
|
"format": "prettier --write .",
|
|
44
|
+
"format:check": "prettier --check .",
|
|
44
45
|
"lint": "eslint src test benchmark",
|
|
45
46
|
"lint:ci": "eslint src test benchmark --max-warnings 0 --format junit --output-file test-results/eslint/junit.xml",
|
|
46
|
-
"prepare": "npm run build",
|
|
47
|
+
"prepare": "husky && npm run build",
|
|
47
48
|
"prepublishOnly": "npm run test && npm run lint",
|
|
48
49
|
"release": "changeset publish",
|
|
49
50
|
"test": "jest",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"@types/node": "^22.19.1",
|
|
67
68
|
"eslint": "^9.39.1",
|
|
68
69
|
"eslint-formatter-junit": "^9.0.1",
|
|
70
|
+
"eslint-plugin-import": "^2.32.0",
|
|
69
71
|
"eslint-plugin-jest": "^29.2.1",
|
|
70
72
|
"globals": "^16.5.0",
|
|
71
73
|
"husky": "^9.1.7",
|