@jmespath-community/jmespath 1.2.0 → 1.3.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 (68) hide show
  1. package/README.md +76 -4
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.mjs +2181 -0
  4. package/dist/cli.mjs.map +1 -0
  5. package/dist/index.cjs +2118 -0
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/index.d.cts +412 -0
  8. package/dist/index.d.ts +412 -0
  9. package/dist/index.esm.js +2099 -0
  10. package/dist/index.esm.js.map +1 -0
  11. package/dist/index.esm.min.js +2 -0
  12. package/dist/index.esm.min.js.map +1 -0
  13. package/dist/index.mjs +2089 -0
  14. package/dist/index.mjs.map +1 -0
  15. package/dist/index.umd.js +2133 -0
  16. package/dist/index.umd.js.map +1 -0
  17. package/dist/index.umd.min.js +2 -0
  18. package/dist/index.umd.min.js.map +1 -0
  19. package/package.json +28 -6
  20. package/dist/jmespath.esm.js +0 -2369
  21. package/dist/jmespath.esm.min.js +0 -2
  22. package/dist/jmespath.esm.min.js.map +0 -1
  23. package/dist/jmespath.umd.js +0 -2398
  24. package/dist/jmespath.umd.min.js +0 -2
  25. package/dist/jmespath.umd.min.js.map +0 -1
  26. package/dist/lib/bin/jp.js +0 -127
  27. package/dist/lib/bin/jp.js.map +0 -1
  28. package/dist/lib/package.json +0 -70
  29. package/dist/lib/src/AST.type.js +0 -3
  30. package/dist/lib/src/AST.type.js.map +0 -1
  31. package/dist/lib/src/JSON.type.js +0 -3
  32. package/dist/lib/src/JSON.type.js.map +0 -1
  33. package/dist/lib/src/Lexer.js +0 -327
  34. package/dist/lib/src/Lexer.js.map +0 -1
  35. package/dist/lib/src/Lexer.type.js +0 -46
  36. package/dist/lib/src/Lexer.type.js.map +0 -1
  37. package/dist/lib/src/Parser.js +0 -468
  38. package/dist/lib/src/Parser.js.map +0 -1
  39. package/dist/lib/src/Parser.type.js +0 -3
  40. package/dist/lib/src/Parser.type.js.map +0 -1
  41. package/dist/lib/src/Runtime.js +0 -924
  42. package/dist/lib/src/Runtime.js.map +0 -1
  43. package/dist/lib/src/Scope.js +0 -29
  44. package/dist/lib/src/Scope.js.map +0 -1
  45. package/dist/lib/src/TreeInterpreter.js +0 -319
  46. package/dist/lib/src/TreeInterpreter.js.map +0 -1
  47. package/dist/lib/src/index.js +0 -65
  48. package/dist/lib/src/index.js.map +0 -1
  49. package/dist/lib/src/utils/index.js +0 -145
  50. package/dist/lib/src/utils/index.js.map +0 -1
  51. package/dist/lib/src/utils/strings.js +0 -92
  52. package/dist/lib/src/utils/strings.js.map +0 -1
  53. package/dist/lib/src/utils/text.js +0 -45
  54. package/dist/lib/src/utils/text.js.map +0 -1
  55. package/dist/types/bin/jp.d.ts +0 -2
  56. package/dist/types/src/AST.type.d.ts +0 -104
  57. package/dist/types/src/JSON.type.d.ts +0 -10
  58. package/dist/types/src/Lexer.d.ts +0 -19
  59. package/dist/types/src/Lexer.type.d.ts +0 -51
  60. package/dist/types/src/Parser.d.ts +0 -33
  61. package/dist/types/src/Parser.type.d.ts +0 -4
  62. package/dist/types/src/Runtime.d.ts +0 -87
  63. package/dist/types/src/Scope.d.ts +0 -8
  64. package/dist/types/src/TreeInterpreter.d.ts +0 -22
  65. package/dist/types/src/index.d.ts +0 -45
  66. package/dist/types/src/utils/index.d.ts +0 -16
  67. package/dist/types/src/utils/strings.d.ts +0 -11
  68. package/dist/types/src/utils/text.d.ts +0 -11
package/README.md CHANGED
@@ -91,11 +91,13 @@ TreeInterpreter.search(ast, { foo: { bar: "BAZ" } });
91
91
 
92
92
  ## EXTENSIONS TO ORIGINAL SPEC
93
93
 
94
- 1. ### Register you own custom functions
94
+ 1. ### Register your own custom functions
95
95
 
96
- #### `registerFunction(functionName: string, customFunction: RuntimeFunction, signature: InputSignature[]): void`
96
+ #### Enhanced Function Registry API
97
97
 
98
- Extend the list of built in JMESpath expressions with your own functions.
98
+ The library provides both backward-compatible and enhanced APIs for registering custom functions with improved developer experience, type safety, and flexible override behavior.
99
+
100
+ ##### Basic Usage (Backward Compatible)
99
101
 
100
102
  ```javascript
101
103
  import { search, registerFunction, TYPE_NUMBER } from "@jmespath-community/jmespath";
@@ -117,6 +119,76 @@ TreeInterpreter.search(ast, { foo: { bar: "BAZ" } });
117
119
  // OUTPUTS: 6
118
120
  ```
119
121
 
122
+ ##### Enhanced Registry API with Type Safety
123
+
124
+ ```typescript
125
+ import { register, search, TYPE_NUMBER } from "@jmespath-community/jmespath";
126
+
127
+ // TypeScript prevents registering built-in functions at compile time
128
+ // register('sum', myFunc, signature); // TypeScript error!
129
+
130
+ // Enhanced registration with better error handling
131
+ const result = register('multiply', ([a, b]) => a * b, [
132
+ { types: [TYPE_NUMBER] },
133
+ { types: [TYPE_NUMBER] }
134
+ ]);
135
+
136
+ if (result.success) {
137
+ console.log(result.message); // "Function multiply() registered successfully"
138
+ } else {
139
+ console.error(result.message); // Detailed error information
140
+ }
141
+ ```
142
+
143
+ ##### Override Existing Functions
144
+
145
+ ```javascript
146
+ import { registerFunction, register } from "@jmespath-community/jmespath";
147
+
148
+ // Option 1: Using registerFunction with options
149
+ registerFunction('myFunc', () => 'first', []);
150
+ registerFunction('myFunc', () => 'second', [], { override: true, warn: true });
151
+ // Console: "Warning: Overriding existing function: myFunc()"
152
+
153
+ // Option 2: Using enhanced register API
154
+ const result = register('myFunc', () => 'third', [], { override: true });
155
+ console.log(result.message); // "Function myFunc() overridden successfully"
156
+ ```
157
+
158
+ ##### Registry Management
159
+
160
+ ```javascript
161
+ import {
162
+ isRegistered,
163
+ getRegisteredFunctions,
164
+ getCustomFunctions,
165
+ unregisterFunction,
166
+ clearCustomFunctions
167
+ } from "@jmespath-community/jmespath";
168
+
169
+ // Check if function exists
170
+ console.log(isRegistered('sum')); // true (built-in)
171
+ console.log(isRegistered('myFunc')); // true (if registered)
172
+
173
+ // Get all registered functions
174
+ const allFunctions = getRegisteredFunctions();
175
+ console.log(allFunctions); // ['abs', 'avg', 'ceil', ..., 'myFunc']
176
+
177
+ // Get only custom functions
178
+ const customFunctions = getCustomFunctions();
179
+ console.log(customFunctions); // ['myFunc', 'divide', ...]
180
+
181
+ // Unregister custom function (built-ins cannot be unregistered)
182
+ const removed = unregisterFunction('myFunc');
183
+ console.log(removed); // true if successful
184
+
185
+ // Clear all custom functions
186
+ clearCustomFunctions();
187
+ console.log(getCustomFunctions()); // []
188
+ ```
189
+
190
+ ##### Optional Arguments
191
+
120
192
  Optional arguments are supported by setting `{..., optional: true}` in argument signatures
121
193
 
122
194
  ```javascript
@@ -124,7 +196,7 @@ TreeInterpreter.search(ast, { foo: { bar: "BAZ" } });
124
196
  "divide",
125
197
  (resolvedArgs) => {
126
198
  const [dividend, divisor] = resolvedArgs;
127
- return dividend / divisor ?? 1; //OPTIONAL DIVISOR THAT DEFAULTS TO 1
199
+ return dividend / (divisor ?? 1); //OPTIONAL DIVISOR THAT DEFAULTS TO 1
128
200
  },
129
201
  [{ types: [TYPE_NUMBER] }, { types: [TYPE_NUMBER], optional: true }], //SIGNATURE
130
202
  );
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export { }