@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.
Files changed (66) hide show
  1. package/README.md +27 -88
  2. package/dist/access-guards.d.ts +16 -0
  3. package/dist/access-guards.d.ts.map +1 -0
  4. package/dist/access-util.d.ts +7 -0
  5. package/dist/access-util.d.ts.map +1 -0
  6. package/dist/access.d.ts +9 -12
  7. package/dist/access.d.ts.map +1 -1
  8. package/dist/ast.d.ts +95 -1
  9. package/dist/ast.d.ts.map +1 -1
  10. package/dist/bind.d.ts +19 -0
  11. package/dist/bind.d.ts.map +1 -0
  12. package/dist/errors.d.ts +134 -0
  13. package/dist/errors.d.ts.map +1 -0
  14. package/dist/evaluate.d.ts +24 -7
  15. package/dist/evaluate.d.ts.map +1 -1
  16. package/dist/evaluation-context.d.ts +17 -0
  17. package/dist/evaluation-context.d.ts.map +1 -0
  18. package/dist/format.d.ts +7 -1
  19. package/dist/format.d.ts.map +1 -1
  20. package/dist/functions/FallbackMapView.d.ts +18 -0
  21. package/dist/functions/FallbackMapView.d.ts.map +1 -0
  22. package/dist/functions/builtins/array.d.ts +4 -0
  23. package/dist/functions/builtins/array.d.ts.map +1 -0
  24. package/dist/functions/builtins/index.d.ts +4 -0
  25. package/dist/functions/builtins/index.d.ts.map +1 -0
  26. package/dist/functions/builtins/math.d.ts +4 -0
  27. package/dist/functions/builtins/math.d.ts.map +1 -0
  28. package/dist/functions/builtins/string.d.ts +4 -0
  29. package/dist/functions/builtins/string.d.ts.map +1 -0
  30. package/dist/functions/builtins/type.d.ts +4 -0
  31. package/dist/functions/builtins/type.d.ts.map +1 -0
  32. package/dist/functions/datatype.d.ts +90 -0
  33. package/dist/functions/datatype.d.ts.map +1 -0
  34. package/dist/functions/index.d.ts +7 -0
  35. package/dist/functions/index.d.ts.map +1 -0
  36. package/dist/functions/provider.d.ts +6 -0
  37. package/dist/functions/provider.d.ts.map +1 -0
  38. package/dist/functions/registry.d.ts +20 -0
  39. package/dist/functions/registry.d.ts.map +1 -0
  40. package/dist/functions/types.d.ts +68 -0
  41. package/dist/functions/types.d.ts.map +1 -0
  42. package/dist/functions/validation.d.ts +30 -0
  43. package/dist/functions/validation.d.ts.map +1 -0
  44. package/dist/get.d.ts +3 -1
  45. package/dist/get.d.ts.map +1 -1
  46. package/dist/index.d.ts +5 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/json-selector.esm.js +4270 -1612
  49. package/dist/json-selector.esm.js.map +1 -1
  50. package/dist/json-selector.umd.js +4595 -1893
  51. package/dist/json-selector.umd.js.map +1 -1
  52. package/dist/lexer.d.ts +22 -7
  53. package/dist/lexer.d.ts.map +1 -1
  54. package/dist/parse.d.ts +3 -1
  55. package/dist/parse.d.ts.map +1 -1
  56. package/dist/parser.d.ts +79 -9
  57. package/dist/parser.d.ts.map +1 -1
  58. package/dist/set.d.ts +3 -1
  59. package/dist/set.d.ts.map +1 -1
  60. package/dist/token.d.ts +27 -17
  61. package/dist/token.d.ts.map +1 -1
  62. package/dist/util.d.ts +5 -0
  63. package/dist/util.d.ts.map +1 -1
  64. package/dist/visitor.d.ts +11 -1
  65. package/dist/visitor.d.ts.map +1 -1
  66. 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
- * Pratt Parser for JSON Selectors
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
- constructor(input: string);
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 jmespath which uses binding power (rbp) to control projection continuation,
69
- * we use a fixed threshold. This is because our AST structure is different: jmespath chains
70
- * projections (project(project(x, y), z)) while we nest them in the projection field
71
- * (project(x, project(y, z))). Both approaches produce the same JMESPath-compatible results,
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
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyC,MAAM,OAAO,CAAC;AAiE5E;;;;;;;GAOG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,EAAE,MAAM;IAIzB;;OAEG;IACH,KAAK,IAAI,YAAY;IAWrB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB;;;OAGG;IACH,OAAO,CAAC,GAAG;IA+EX;;;OAGG;IACH,OAAO,CAAC,GAAG;IA6GX;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IA4D9B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,kBAAkB;IA2D1B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA8BlB,OAAO,CAAC,eAAe;CAcxB"}
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
- export declare function setWithJsonSelector(selector: JsonSelector, context: unknown, value: unknown): unknown;
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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAKT"}
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,// Reserved for future use (multi-select hashes)
8
- RBRACE = 6,// Reserved for future use (multi-select hashes)
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
- AT = 20,
23
- DOLLAR = 21,
24
- STAR = 22,
25
- QUESTION = 23,// Reserved for future use (ternary operator)
26
- FILTER_BRACKET = 24,
27
- FLATTEN_BRACKET = 25,
28
- IDENTIFIER = 26,
29
- QUOTED_STRING = 27,
30
- RAW_STRING = 28,
31
- BACKTICK_LITERAL = 29,
32
- NUMBER = 30,
33
- NULL = 31,
34
- TRUE = 32,
35
- FALSE = 33
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
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}
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
@@ -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
@@ -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,EAClB,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3B,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAClD,UAAU,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACxD,WAAW,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1D,WAAW,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAClD,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAClD,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAC7C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EACpC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,OAAO,EAAE,CAAC,GACT,CAAC,CAmCH"}
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": "4.0.0",
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",