flowquery 1.0.5 → 1.0.7

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 (138) hide show
  1. package/README.md +74 -0
  2. package/dist/compute/runner.d.ts +1 -22
  3. package/dist/compute/runner.d.ts.map +1 -1
  4. package/dist/compute/runner.js.map +1 -1
  5. package/dist/extensibility.d.ts +35 -0
  6. package/dist/extensibility.d.ts.map +1 -0
  7. package/dist/extensibility.js +49 -0
  8. package/dist/extensibility.js.map +1 -0
  9. package/dist/flowquery.min.js +1 -1
  10. package/dist/index.browser.d.ts.map +1 -1
  11. package/dist/index.browser.js +0 -80
  12. package/dist/index.browser.js.map +1 -1
  13. package/dist/index.node.d.ts +3 -3
  14. package/dist/index.node.d.ts.map +1 -1
  15. package/dist/index.node.js +0 -80
  16. package/dist/index.node.js.map +1 -1
  17. package/dist/parsing/functions/avg.d.ts.map +1 -1
  18. package/dist/parsing/functions/avg.js +20 -2
  19. package/dist/parsing/functions/avg.js.map +1 -1
  20. package/dist/parsing/functions/collect.d.ts.map +1 -1
  21. package/dist/parsing/functions/collect.js +20 -2
  22. package/dist/parsing/functions/collect.js.map +1 -1
  23. package/dist/parsing/functions/function_factory.d.ts +26 -80
  24. package/dist/parsing/functions/function_factory.d.ts.map +1 -1
  25. package/dist/parsing/functions/function_factory.js +46 -168
  26. package/dist/parsing/functions/function_factory.js.map +1 -1
  27. package/dist/parsing/functions/function_metadata.d.ts +81 -20
  28. package/dist/parsing/functions/function_metadata.d.ts.map +1 -1
  29. package/dist/parsing/functions/function_metadata.js +154 -152
  30. package/dist/parsing/functions/function_metadata.js.map +1 -1
  31. package/dist/parsing/functions/functions.d.ts.map +1 -1
  32. package/dist/parsing/functions/functions.js +37 -2
  33. package/dist/parsing/functions/functions.js.map +1 -1
  34. package/dist/parsing/functions/join.d.ts.map +1 -1
  35. package/dist/parsing/functions/join.js +21 -2
  36. package/dist/parsing/functions/join.js.map +1 -1
  37. package/dist/parsing/functions/predicate_function.d.ts +1 -0
  38. package/dist/parsing/functions/predicate_function.d.ts.map +1 -1
  39. package/dist/parsing/functions/predicate_function.js +3 -0
  40. package/dist/parsing/functions/predicate_function.js.map +1 -1
  41. package/dist/parsing/functions/predicate_sum.d.ts.map +1 -1
  42. package/dist/parsing/functions/predicate_sum.js +23 -2
  43. package/dist/parsing/functions/predicate_sum.js.map +1 -1
  44. package/dist/parsing/functions/rand.d.ts.map +1 -1
  45. package/dist/parsing/functions/rand.js +18 -2
  46. package/dist/parsing/functions/rand.js.map +1 -1
  47. package/dist/parsing/functions/range.d.ts.map +1 -1
  48. package/dist/parsing/functions/range.js +21 -2
  49. package/dist/parsing/functions/range.js.map +1 -1
  50. package/dist/parsing/functions/replace.d.ts.map +1 -1
  51. package/dist/parsing/functions/replace.js +22 -2
  52. package/dist/parsing/functions/replace.js.map +1 -1
  53. package/dist/parsing/functions/round.d.ts.map +1 -1
  54. package/dist/parsing/functions/round.js +20 -2
  55. package/dist/parsing/functions/round.js.map +1 -1
  56. package/dist/parsing/functions/size.d.ts.map +1 -1
  57. package/dist/parsing/functions/size.js +20 -2
  58. package/dist/parsing/functions/size.js.map +1 -1
  59. package/dist/parsing/functions/split.d.ts.map +1 -1
  60. package/dist/parsing/functions/split.js +21 -2
  61. package/dist/parsing/functions/split.js.map +1 -1
  62. package/dist/parsing/functions/stringify.d.ts.map +1 -1
  63. package/dist/parsing/functions/stringify.js +20 -2
  64. package/dist/parsing/functions/stringify.js.map +1 -1
  65. package/dist/parsing/functions/sum.d.ts.map +1 -1
  66. package/dist/parsing/functions/sum.js +20 -2
  67. package/dist/parsing/functions/sum.js.map +1 -1
  68. package/dist/parsing/functions/to_json.d.ts.map +1 -1
  69. package/dist/parsing/functions/to_json.js +20 -2
  70. package/dist/parsing/functions/to_json.js.map +1 -1
  71. package/dist/parsing/parser.d.ts.map +1 -1
  72. package/dist/parsing/parser.js +1 -2
  73. package/dist/parsing/parser.js.map +1 -1
  74. package/docs/flowquery.min.js +1 -1
  75. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +1 -1
  76. package/misc/apps/RAG/.env.example +14 -0
  77. package/misc/apps/RAG/README.md +0 -7
  78. package/misc/apps/RAG/package.json +16 -7
  79. package/misc/apps/RAG/public/index.html +18 -0
  80. package/misc/apps/RAG/src/App.css +42 -0
  81. package/misc/apps/RAG/src/App.tsx +50 -0
  82. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +245 -0
  83. package/misc/apps/RAG/src/components/ChatContainer.css +67 -0
  84. package/misc/apps/RAG/src/components/ChatContainer.tsx +239 -0
  85. package/misc/apps/RAG/src/components/ChatInput.css +23 -0
  86. package/misc/apps/RAG/src/components/ChatInput.tsx +62 -0
  87. package/misc/apps/RAG/src/components/ChatMessage.css +136 -0
  88. package/misc/apps/RAG/src/components/ChatMessage.tsx +152 -0
  89. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +390 -0
  90. package/misc/apps/RAG/src/components/FlowQueryRunner.css +104 -0
  91. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +332 -0
  92. package/misc/apps/RAG/src/components/index.ts +15 -0
  93. package/misc/apps/RAG/src/index.tsx +17 -0
  94. package/misc/apps/RAG/src/plugins/README.md +139 -0
  95. package/misc/apps/RAG/src/plugins/index.ts +68 -0
  96. package/misc/apps/RAG/src/plugins/loaders/CatFacts.ts +75 -0
  97. package/misc/apps/RAG/src/plugins/loaders/FetchJson.ts +67 -0
  98. package/misc/apps/RAG/src/plugins/loaders/Llm.ts +437 -0
  99. package/misc/apps/RAG/src/plugins/loaders/MockData.ts +151 -0
  100. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +385 -0
  101. package/misc/apps/RAG/src/prompts/index.ts +10 -0
  102. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +131 -0
  103. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +203 -0
  104. package/misc/apps/RAG/src/utils/index.ts +9 -0
  105. package/misc/apps/RAG/tsconfig.json +4 -2
  106. package/misc/apps/RAG/webpack.config.js +23 -12
  107. package/package.json +7 -1
  108. package/src/compute/runner.ts +1 -26
  109. package/src/extensibility.ts +45 -0
  110. package/src/index.browser.ts +2 -88
  111. package/src/index.node.ts +3 -92
  112. package/src/parsing/functions/avg.ts +10 -0
  113. package/src/parsing/functions/collect.ts +10 -0
  114. package/src/parsing/functions/function_factory.ts +56 -194
  115. package/src/parsing/functions/function_metadata.ts +187 -168
  116. package/src/parsing/functions/functions.ts +27 -0
  117. package/src/parsing/functions/join.ts +11 -0
  118. package/src/parsing/functions/predicate_function.ts +4 -0
  119. package/src/parsing/functions/predicate_sum.ts +13 -0
  120. package/src/parsing/functions/rand.ts +8 -0
  121. package/src/parsing/functions/range.ts +11 -0
  122. package/src/parsing/functions/replace.ts +12 -0
  123. package/src/parsing/functions/round.ts +10 -0
  124. package/src/parsing/functions/size.ts +10 -0
  125. package/src/parsing/functions/split.ts +11 -0
  126. package/src/parsing/functions/stringify.ts +10 -0
  127. package/src/parsing/functions/sum.ts +10 -0
  128. package/src/parsing/functions/to_json.ts +10 -0
  129. package/src/parsing/parser.ts +1 -2
  130. package/tests/extensibility.test.ts +563 -0
  131. package/tsconfig.json +1 -0
  132. package/dist/parsing/functions/predicate_function_factory.d.ts +0 -6
  133. package/dist/parsing/functions/predicate_function_factory.d.ts.map +0 -1
  134. package/dist/parsing/functions/predicate_function_factory.js +0 -19
  135. package/dist/parsing/functions/predicate_function_factory.js.map +0 -1
  136. package/misc/apps/RAG/src/index.ts +0 -20
  137. package/src/parsing/functions/predicate_function_factory.ts +0 -15
  138. package/tests/parsing/function_plugins.test.ts +0 -369
@@ -17,86 +17,6 @@ const function_factory_1 = __importDefault(require("./parsing/functions/function
17
17
  exports.FunctionFactory = function_factory_1.default;
18
18
  const function_1 = __importDefault(require("./parsing/functions/function"));
19
19
  exports.Function = function_1.default;
20
- /**
21
- * Register a synchronous plugin function.
22
- *
23
- * @param name - The function name
24
- * @param factoryOrOptions - Factory function or options object with metadata
25
- *
26
- * @example
27
- * ```javascript
28
- * // Simple registration
29
- * FlowQuery.registerFunction("uppercase", () => new MyUpperCaseFunction());
30
- *
31
- * // Registration with metadata for LLM consumption
32
- * FlowQuery.registerFunction("uppercase", {
33
- * factory: () => new MyUpperCaseFunction(),
34
- * metadata: {
35
- * name: "uppercase",
36
- * description: "Converts a string to uppercase",
37
- * category: "string",
38
- * parameters: [{ name: "text", description: "String to convert", type: "string" }],
39
- * output: { description: "Uppercase string", type: "string" },
40
- * examples: ["WITH 'hello' AS s RETURN uppercase(s)"]
41
- * }
42
- * });
43
- * ```
44
- */
45
- runner_1.default.registerFunction = function (name, factoryOrOptions) {
46
- function_factory_1.default.register(name, factoryOrOptions);
47
- };
48
- /**
49
- * Unregister a synchronous plugin function.
50
- *
51
- * @param name - The function name
52
- */
53
- runner_1.default.unregisterFunction = function (name) {
54
- function_factory_1.default.unregister(name);
55
- };
56
- /**
57
- * Register an async data provider function for use in LOAD operations.
58
- *
59
- * @param name - The function name
60
- * @param providerOrOptions - Async provider or options object with metadata
61
- *
62
- * @example
63
- * ```javascript
64
- * // Registration with metadata for LLM consumption
65
- * FlowQuery.registerAsyncProvider("fetchUsers", {
66
- * provider: async function* (endpoint) {
67
- * const response = await fetch(endpoint);
68
- * const data = await response.json();
69
- * for (const item of data) yield item;
70
- * },
71
- * metadata: {
72
- * name: "fetchUsers",
73
- * description: "Fetches user data from an API",
74
- * category: "data",
75
- * parameters: [{ name: "endpoint", description: "API URL", type: "string" }],
76
- * output: {
77
- * description: "User object",
78
- * type: "object",
79
- * properties: {
80
- * id: { description: "User ID", type: "number" },
81
- * name: { description: "User name", type: "string" }
82
- * }
83
- * },
84
- * examples: ["LOAD JSON FROM fetchUsers('https://api.example.com/users') AS user"]
85
- * }
86
- * });
87
- * ```
88
- */
89
- runner_1.default.registerAsyncProvider = function (name, providerOrOptions) {
90
- function_factory_1.default.registerAsyncProvider(name, providerOrOptions);
91
- };
92
- /**
93
- * Unregister an async data provider function.
94
- *
95
- * @param name - The function name
96
- */
97
- runner_1.default.unregisterAsyncProvider = function (name) {
98
- function_factory_1.default.unregisterAsyncProvider(name);
99
- };
100
20
  /**
101
21
  * List all registered functions with their metadata.
102
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.node.js","sourceRoot":"","sources":["../src/index.node.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAEH,8DAAsD;AA0HlD,0FA1He,gBAAS,OA0Hf;AAzHb,4FAA2G;AA2HvG,0BA3HG,0BAAe,CA2HH;AAnHnB,4EAAoD;AAkHhD,mBAlHG,kBAAQ,CAkHH;AAhHZ;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,gBAAS,CAAC,gBAAgB,GAAG,UAAS,IAAY,EAAE,gBAA2D;IAC3G,0BAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;;;;GAIG;AACH,gBAAS,CAAC,kBAAkB,GAAG,UAAS,IAAY;IAChD,0BAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,gBAAS,CAAC,qBAAqB,GAAG,UAAS,IAAY,EAAE,iBAAmE;IACxH,0BAAe,CAAC,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF;;;;GAIG;AACH,gBAAS,CAAC,uBAAuB,GAAG,UAAS,IAAY;IACrD,0BAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,gBAAS,CAAC,aAAa,GAAG,UAAS,OAAwE;IACvG,OAAO,0BAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,gBAAS,CAAC,mBAAmB,GAAG,UAAS,IAAY;IACjD,OAAO,0BAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;GAEG;AACH,gBAAS,CAAC,QAAQ,GAAG,kBAAQ,CAAC;AAE9B,kBAAe,gBAAS,CAAC"}
1
+ {"version":3,"file":"index.node.js","sourceRoot":"","sources":["../src/index.node.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAEH,8DAAsD;AAoClD,0FApCe,gBAAS,OAoCf;AAnCb,4FAA0F;AAqCtF,0BArCG,0BAAe,CAqCH;AA/BnB,4EAAoD;AA8BhD,mBA9BG,kBAAQ,CA8BH;AA5BZ;;;;;GAKG;AACH,gBAAS,CAAC,aAAa,GAAG,UAAS,OAAwE;IACvG,OAAO,0BAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,gBAAS,CAAC,mBAAmB,GAAG,UAAS,IAAY;IACjD,OAAO,0BAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;GAEG;AACH,gBAAS,CAAC,QAAQ,GAAG,kBAAQ,CAAC;AAE9B,kBAAe,gBAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"avg.d.ts","sourceRoot":"","sources":["../../../src/parsing/functions/avg.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAErD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAE/C,cAAM,iBAAkB,SAAQ,cAAc;IAC1C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,IAAI,CAAuB;IACnC,IAAW,KAAK,IAAI,MAAM,GAAG,IAAI,CAKhC;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAO7B;CACJ;AAED,cAAM,GAAI,SAAQ,iBAAiB;;IAKxB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAGxC,OAAO,IAAI,iBAAiB;CAGtC;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"avg.d.ts","sourceRoot":"","sources":["../../../src/parsing/functions/avg.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAErD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAG/C,cAAM,iBAAkB,SAAQ,cAAc;IAC1C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,IAAI,CAAuB;IACnC,IAAW,KAAK,IAAI,MAAM,GAAG,IAAI,CAKhC;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAO7B;CACJ;AAED,cASM,GAAI,SAAQ,iBAAiB;;IAKxB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAGxC,OAAO,IAAI,iBAAiB;CAGtC;AAED,eAAe,GAAG,CAAC"}
@@ -1,10 +1,17 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
2
8
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
10
  };
5
11
  Object.defineProperty(exports, "__esModule", { value: true });
6
12
  const aggregate_function_1 = __importDefault(require("./aggregate_function"));
7
13
  const reducer_element_1 = __importDefault(require("./reducer_element"));
14
+ const function_metadata_1 = require("./function_metadata");
8
15
  class AvgReducerElement extends reducer_element_1.default {
9
16
  constructor() {
10
17
  super(...arguments);
@@ -27,7 +34,7 @@ class AvgReducerElement extends reducer_element_1.default {
27
34
  }
28
35
  }
29
36
  }
30
- class Avg extends aggregate_function_1.default {
37
+ let Avg = class Avg extends aggregate_function_1.default {
31
38
  constructor() {
32
39
  super("avg");
33
40
  this._expectedParameterCount = 1;
@@ -38,6 +45,17 @@ class Avg extends aggregate_function_1.default {
38
45
  element() {
39
46
  return new AvgReducerElement();
40
47
  }
41
- }
48
+ };
49
+ Avg = __decorate([
50
+ (0, function_metadata_1.FunctionDef)({
51
+ description: "Calculates the average of numeric values across grouped rows",
52
+ category: "aggregate",
53
+ parameters: [
54
+ { name: "value", description: "Numeric value to average", type: "number" }
55
+ ],
56
+ output: { description: "Average of all values", type: "number", example: 50 },
57
+ examples: ["WITH [10, 20, 30] AS nums UNWIND nums AS n RETURN avg(n)"]
58
+ })
59
+ ], Avg);
42
60
  exports.default = Avg;
43
61
  //# sourceMappingURL=avg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"avg.js","sourceRoot":"","sources":["../../../src/parsing/functions/avg.ts"],"names":[],"mappings":";;;;;AAAA,8EAAqD;AAErD,wEAA+C;AAE/C,MAAM,iBAAkB,SAAQ,yBAAc;IAA9C;;QACY,WAAM,GAAW,CAAC,CAAC;QACnB,SAAI,GAAkB,IAAI,CAAC;IAevC,CAAC;IAdG,IAAW,KAAK;QACZ,IAAG,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,IAAW,KAAK,CAAC,KAAa;QAC1B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,IAAG,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;CACJ;AAED,MAAM,GAAI,SAAQ,4BAAiB;IAC/B;QACI,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,OAA0B;QACpC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IACM,OAAO;QACV,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACnC,CAAC;CACJ;AAED,kBAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"avg.js","sourceRoot":"","sources":["../../../src/parsing/functions/avg.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,8EAAqD;AAErD,wEAA+C;AAC/C,2DAAkD;AAElD,MAAM,iBAAkB,SAAQ,yBAAc;IAA9C;;QACY,WAAM,GAAW,CAAC,CAAC;QACnB,SAAI,GAAkB,IAAI,CAAC;IAevC,CAAC;IAdG,IAAW,KAAK;QACZ,IAAG,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,IAAW,KAAK,CAAC,KAAa;QAC1B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,IAAG,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;CACJ;AAWD,IAAM,GAAG,GAAT,MAAM,GAAI,SAAQ,4BAAiB;IAC/B;QACI,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,OAA0B;QACpC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IACM,OAAO;QACV,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACnC,CAAC;CACJ,CAAA;AAXK,GAAG;IATR,IAAA,+BAAW,EAAC;QACT,WAAW,EAAE,8DAA8D;QAC3E,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE;YACR,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC7E;QACD,MAAM,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7E,QAAQ,EAAE,CAAC,0DAA0D,CAAC;KACzE,CAAC;GACI,GAAG,CAWR;AAED,kBAAe,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../src/parsing/functions/collect.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAE/C,cAAM,qBAAsB,SAAQ,cAAc;IAC9C,OAAO,CAAC,MAAM,CAAa;IAC3B,IAAW,KAAK,IAAI,GAAG,CAEtB;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,GAAG,EAE1B;CACJ;AAED,cAAM,6BAA8B,SAAQ,cAAc;IACtD,OAAO,CAAC,MAAM,CAA4B;IAC1C,IAAW,KAAK,IAAI,GAAG,CAEtB;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,GAAG,EAK1B;CACJ;AAED,cAAM,OAAQ,SAAQ,iBAAiB;IACnC,OAAO,CAAC,SAAS,CAAkB;;IAK5B,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAG5C,OAAO,IAAI,qBAAqB,GAAG,6BAA6B;IAGvE,IAAW,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAEpC;CACJ;AAED,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../src/parsing/functions/collect.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAG/C,cAAM,qBAAsB,SAAQ,cAAc;IAC9C,OAAO,CAAC,MAAM,CAAa;IAC3B,IAAW,KAAK,IAAI,GAAG,CAEtB;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,GAAG,EAE1B;CACJ;AAED,cAAM,6BAA8B,SAAQ,cAAc;IACtD,OAAO,CAAC,MAAM,CAA4B;IAC1C,IAAW,KAAK,IAAI,GAAG,CAEtB;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,GAAG,EAK1B;CACJ;AAED,cASM,OAAQ,SAAQ,iBAAiB;IACnC,OAAO,CAAC,SAAS,CAAkB;;IAK5B,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAG5C,OAAO,IAAI,qBAAqB,GAAG,6BAA6B;IAGvE,IAAW,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAEpC;CACJ;AAED,eAAe,OAAO,CAAC"}
@@ -1,10 +1,17 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
2
8
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
10
  };
5
11
  Object.defineProperty(exports, "__esModule", { value: true });
6
12
  const aggregate_function_1 = __importDefault(require("./aggregate_function"));
7
13
  const reducer_element_1 = __importDefault(require("./reducer_element"));
14
+ const function_metadata_1 = require("./function_metadata");
8
15
  class CollectReducerElement extends reducer_element_1.default {
9
16
  constructor() {
10
17
  super(...arguments);
@@ -32,7 +39,7 @@ class DistinctCollectReducerElement extends reducer_element_1.default {
32
39
  }
33
40
  }
34
41
  }
35
- class Collect extends aggregate_function_1.default {
42
+ let Collect = class Collect extends aggregate_function_1.default {
36
43
  constructor() {
37
44
  super("collect");
38
45
  this._distinct = false;
@@ -47,6 +54,17 @@ class Collect extends aggregate_function_1.default {
47
54
  set distinct(distinct) {
48
55
  this._distinct = distinct;
49
56
  }
50
- }
57
+ };
58
+ Collect = __decorate([
59
+ (0, function_metadata_1.FunctionDef)({
60
+ description: "Collects values into an array across grouped rows",
61
+ category: "aggregate",
62
+ parameters: [
63
+ { name: "value", description: "Value to collect", type: "any" }
64
+ ],
65
+ output: { description: "Array of collected values", type: "array", example: [1, 2, 3] },
66
+ examples: ["WITH [1, 2, 3] AS nums UNWIND nums AS n RETURN collect(n)"]
67
+ })
68
+ ], Collect);
51
69
  exports.default = Collect;
52
70
  //# sourceMappingURL=collect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/parsing/functions/collect.ts"],"names":[],"mappings":";;;;;AAAA,8EAAqD;AACrD,wEAA+C;AAE/C,MAAM,qBAAsB,SAAQ,yBAAc;IAAlD;;QACY,WAAM,GAAU,EAAE,CAAC;IAO/B,CAAC;IANG,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,IAAW,KAAK,CAAC,KAAU;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACJ;AAED,MAAM,6BAA8B,SAAQ,yBAAc;IAA1D;;QACY,WAAM,GAAkB,IAAI,GAAG,EAAE,CAAC;IAU9C,CAAC;IATG,IAAW,KAAK;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAW,KAAK,CAAC,KAAU;QACvB,MAAM,GAAG,GAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;CACJ;AAED,MAAM,OAAQ,SAAQ,4BAAiB;IAEnC;QACI,KAAK,CAAC,SAAS,CAAC,CAAC;QAFb,cAAS,GAAY,KAAK,CAAC;QAG/B,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,OAA8B;QACxC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IACM,OAAO;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,6BAA6B,EAAE,CAAC,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC;IAC9F,CAAC;IACD,IAAW,QAAQ,CAAC,QAAiB;QACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;CACJ;AAED,kBAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/parsing/functions/collect.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,8EAAqD;AACrD,wEAA+C;AAC/C,2DAAkD;AAElD,MAAM,qBAAsB,SAAQ,yBAAc;IAAlD;;QACY,WAAM,GAAU,EAAE,CAAC;IAO/B,CAAC;IANG,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,IAAW,KAAK,CAAC,KAAU;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACJ;AAED,MAAM,6BAA8B,SAAQ,yBAAc;IAA1D;;QACY,WAAM,GAAkB,IAAI,GAAG,EAAE,CAAC;IAU9C,CAAC;IATG,IAAW,KAAK;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAW,KAAK,CAAC,KAAU;QACvB,MAAM,GAAG,GAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;CACJ;AAWD,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,4BAAiB;IAEnC;QACI,KAAK,CAAC,SAAS,CAAC,CAAC;QAFb,cAAS,GAAY,KAAK,CAAC;QAG/B,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,OAA8B;QACxC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IACM,OAAO;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,6BAA6B,EAAE,CAAC,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC;IAC9F,CAAC;IACD,IAAW,QAAQ,CAAC,QAAiB;QACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;CACJ,CAAA;AAfK,OAAO;IATZ,IAAA,+BAAW,EAAC;QACT,WAAW,EAAE,mDAAmD;QAChE,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE;YACR,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE;SAClE;QACD,MAAM,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;QACvF,QAAQ,EAAE,CAAC,2DAA2D,CAAC;KAC1E,CAAC;GACI,OAAO,CAeZ;AAED,kBAAe,OAAO,CAAC"}
@@ -1,17 +1,25 @@
1
1
  import Function from "./function";
2
- import { FunctionMetadata, RegisterFunctionOptions, RegisterAsyncProviderOptions } from "./function_metadata";
3
- /**
4
- * Type for synchronous function factories.
5
- */
6
- export type FunctionCreator = () => Function;
7
- /**
8
- * Type for async data provider functions used in LOAD operations.
9
- * These functions can yield data asynchronously.
10
- */
11
- export type AsyncDataProvider = (...args: any[]) => AsyncGenerator<any, void, unknown> | Promise<any>;
2
+ import PredicateFunction from "./predicate_function";
3
+ import "./sum";
4
+ import "./collect";
5
+ import "./avg";
6
+ import "./range";
7
+ import "./rand";
8
+ import "./round";
9
+ import "./split";
10
+ import "./join";
11
+ import "./to_json";
12
+ import "./replace";
13
+ import "./stringify";
14
+ import "./size";
15
+ import "./functions";
16
+ import "./predicate_sum";
17
+ import { FunctionMetadata, AsyncDataProvider } from "./function_metadata";
18
+ export { AsyncDataProvider };
12
19
  /**
13
20
  * Factory for creating function instances by name.
14
21
  *
22
+ * All functions are registered via the @FunctionDef decorator.
15
23
  * Maps function names (case-insensitive) to their corresponding implementation classes.
16
24
  * Supports built-in functions like sum, avg, collect, range, split, join, etc.
17
25
  *
@@ -22,74 +30,6 @@ export type AsyncDataProvider = (...args: any[]) => AsyncGenerator<any, void, un
22
30
  * ```
23
31
  */
24
32
  declare class FunctionFactory {
25
- /**
26
- * Registry for plugin functions (synchronous).
27
- */
28
- private static plugins;
29
- /**
30
- * Registry for async data provider functions used in LOAD operations.
31
- */
32
- private static asyncProviders;
33
- /**
34
- * Registry for function metadata (both sync and async).
35
- */
36
- private static metadata;
37
- /**
38
- * Registers a synchronous plugin function.
39
- *
40
- * @param name - The function name (will be lowercased)
41
- * @param factoryOrOptions - Factory function or options object with metadata
42
- */
43
- static register(name: string, factoryOrOptions: FunctionCreator | RegisterFunctionOptions): void;
44
- /**
45
- * Unregisters a synchronous plugin function.
46
- *
47
- * @param name - The function name to unregister
48
- */
49
- static unregister(name: string): void;
50
- /**
51
- * Registers an async data provider function for use in LOAD operations.
52
- *
53
- * @param name - The function name (will be lowercased)
54
- * @param providerOrOptions - Async provider or options object with metadata
55
- *
56
- * @example
57
- * ```typescript
58
- * // Register with metadata for LLM consumption
59
- * FunctionFactory.registerAsyncProvider("fetchUsers", {
60
- * provider: async function* (endpoint: string) {
61
- * const response = await fetch(endpoint);
62
- * const data = await response.json();
63
- * for (const item of data) {
64
- * yield item;
65
- * }
66
- * },
67
- * metadata: {
68
- * name: "fetchUsers",
69
- * description: "Fetches user data from an API endpoint",
70
- * parameters: [
71
- * { name: "endpoint", description: "API endpoint URL", type: "string" }
72
- * ],
73
- * output: {
74
- * description: "User objects",
75
- * type: "object",
76
- * properties: {
77
- * id: { description: "User ID", type: "number" },
78
- * name: { description: "User name", type: "string" }
79
- * }
80
- * },
81
- * examples: ["LOAD JSON FROM fetchUsers('https://api.example.com/users') AS user"]
82
- * }
83
- * });
84
- * ```
85
- */
86
- static registerAsyncProvider(name: string, providerOrOptions: AsyncDataProvider | RegisterAsyncProviderOptions): void;
87
- /**
88
- * Unregisters an async data provider function.
89
- *
90
- * @param name - The function name to unregister
91
- */
92
- static unregisterAsyncProvider(name: string): void;
93
33
  /**
94
34
  * Gets an async data provider by name.
95
35
  *
@@ -113,14 +53,12 @@ declare class FunctionFactory {
113
53
  static getMetadata(name: string): FunctionMetadata | undefined;
114
54
  /**
115
55
  * Lists all registered functions with their metadata.
116
- * Includes both built-in and plugin functions.
117
56
  *
118
57
  * @param options - Optional filter options
119
58
  * @returns Array of function metadata
120
59
  */
121
60
  static listFunctions(options?: {
122
61
  category?: string;
123
- includeBuiltins?: boolean;
124
62
  asyncOnly?: boolean;
125
63
  syncOnly?: boolean;
126
64
  }): FunctionMetadata[];
@@ -146,6 +84,14 @@ declare class FunctionFactory {
146
84
  * @returns A Function instance of the appropriate type
147
85
  */
148
86
  static create(name: string): Function;
87
+ /**
88
+ * Creates a predicate function instance by name.
89
+ * Predicate functions are used in WHERE clauses with quantifiers (e.g., ANY, ALL).
90
+ *
91
+ * @param name - The function name (case-insensitive)
92
+ * @returns A PredicateFunction instance of the appropriate type
93
+ */
94
+ static createPredicate(name: string): PredicateFunction;
149
95
  }
150
96
  export default FunctionFactory;
151
97
  //# sourceMappingURL=function_factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"function_factory.d.ts","sourceRoot":"","sources":["../../../src/parsing/functions/function_factory.ts"],"names":[],"mappings":"AAaA,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EACH,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAE/B,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEtG;;;;;;;;;;;GAWG;AACH,cAAM,eAAe;IACjB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO,CAA2C;IAEjE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6C;IAE1E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4C;IAEnE;;;;;OAKG;WACW,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,GAAG,uBAAuB,GAAG,IAAI;IAcvG;;;;OAIG;WACW,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;WACW,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,4BAA4B,GAAG,IAAI;IAc5H;;;;OAIG;WACW,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzD;;;;;OAKG;WACW,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI3E;;;;;OAKG;WACW,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpD;;;;;OAKG;WACW,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAUrE;;;;;;OAMG;WACW,aAAa,CAAC,OAAO,CAAC,EAAE;QAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,gBAAgB,EAAE;IAwBtB;;;;OAIG;WACW,iBAAiB,IAAI,MAAM,EAAE;IAO3C;;;;OAIG;WACW,MAAM,IAAI;QAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE;IAM/E;;;;;OAKG;WACW,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;CAuC/C;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"function_factory.d.ts","sourceRoot":"","sources":["../../../src/parsing/functions/function_factory.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAErD,OAAO,OAAO,CAAC;AACf,OAAO,WAAW,CAAC;AACnB,OAAO,OAAO,CAAC;AACf,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC;AAChB,OAAO,SAAS,CAAC;AACjB,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC;AAChB,OAAO,WAAW,CAAC;AACnB,OAAO,WAAW,CAAC;AACnB,OAAO,aAAa,CAAC;AACrB,OAAO,QAAQ,CAAC;AAChB,OAAO,aAAa,CAAC;AACrB,OAAO,iBAAiB,CAAC;AACzB,OAAO,EACH,gBAAgB,EAKhB,iBAAiB,EACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,cAAM,eAAe;IACjB;;;;;OAKG;WACW,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI3E;;;;;OAKG;WACW,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpD;;;;;OAKG;WACW,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIrE;;;;;OAKG;WACW,aAAa,CAAC,OAAO,CAAC,EAAE;QAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,gBAAgB,EAAE;IAatB;;;;OAIG;WACW,iBAAiB,IAAI,MAAM,EAAE;IAI3C;;;;OAIG;WACW,MAAM,IAAI;QAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE;IAM/E;;;;;OAKG;WACW,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAa5C;;;;;;OAMG;WACW,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB;CAYjE;AAED,eAAe,eAAe,CAAC"}
@@ -3,24 +3,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const sum_1 = __importDefault(require("./sum"));
7
- const collect_1 = __importDefault(require("./collect"));
8
- const avg_1 = __importDefault(require("./avg"));
9
- const range_1 = __importDefault(require("./range"));
10
- const rand_1 = __importDefault(require("./rand"));
11
- const round_1 = __importDefault(require("./round"));
12
- const split_1 = __importDefault(require("./split"));
13
- const join_1 = __importDefault(require("./join"));
14
- const to_json_1 = __importDefault(require("./to_json"));
15
- const replace_1 = __importDefault(require("./replace"));
16
- const stringify_1 = __importDefault(require("./stringify"));
17
- const size_1 = __importDefault(require("./size"));
18
- const functions_1 = __importDefault(require("./functions"));
19
6
  const function_1 = __importDefault(require("./function"));
7
+ const predicate_function_1 = __importDefault(require("./predicate_function"));
8
+ // Import built-in functions to ensure their @FunctionDef decorators run
9
+ require("./sum");
10
+ require("./collect");
11
+ require("./avg");
12
+ require("./range");
13
+ require("./rand");
14
+ require("./round");
15
+ require("./split");
16
+ require("./join");
17
+ require("./to_json");
18
+ require("./replace");
19
+ require("./stringify");
20
+ require("./size");
21
+ require("./functions");
22
+ require("./predicate_sum");
20
23
  const function_metadata_1 = require("./function_metadata");
21
24
  /**
22
25
  * Factory for creating function instances by name.
23
26
  *
27
+ * All functions are registered via the @FunctionDef decorator.
24
28
  * Maps function names (case-insensitive) to their corresponding implementation classes.
25
29
  * Supports built-in functions like sum, avg, collect, range, split, join, etc.
26
30
  *
@@ -31,88 +35,6 @@ const function_metadata_1 = require("./function_metadata");
31
35
  * ```
32
36
  */
33
37
  class FunctionFactory {
34
- /**
35
- * Registers a synchronous plugin function.
36
- *
37
- * @param name - The function name (will be lowercased)
38
- * @param factoryOrOptions - Factory function or options object with metadata
39
- */
40
- static register(name, factoryOrOptions) {
41
- const lowerName = name.toLowerCase();
42
- if (typeof factoryOrOptions === 'function') {
43
- FunctionFactory.plugins.set(lowerName, factoryOrOptions);
44
- }
45
- else {
46
- FunctionFactory.plugins.set(lowerName, factoryOrOptions.factory);
47
- FunctionFactory.metadata.set(lowerName, Object.assign(Object.assign({}, factoryOrOptions.metadata), { name: lowerName, isAsyncProvider: false }));
48
- }
49
- }
50
- /**
51
- * Unregisters a synchronous plugin function.
52
- *
53
- * @param name - The function name to unregister
54
- */
55
- static unregister(name) {
56
- const lowerName = name.toLowerCase();
57
- FunctionFactory.plugins.delete(lowerName);
58
- FunctionFactory.metadata.delete(lowerName);
59
- }
60
- /**
61
- * Registers an async data provider function for use in LOAD operations.
62
- *
63
- * @param name - The function name (will be lowercased)
64
- * @param providerOrOptions - Async provider or options object with metadata
65
- *
66
- * @example
67
- * ```typescript
68
- * // Register with metadata for LLM consumption
69
- * FunctionFactory.registerAsyncProvider("fetchUsers", {
70
- * provider: async function* (endpoint: string) {
71
- * const response = await fetch(endpoint);
72
- * const data = await response.json();
73
- * for (const item of data) {
74
- * yield item;
75
- * }
76
- * },
77
- * metadata: {
78
- * name: "fetchUsers",
79
- * description: "Fetches user data from an API endpoint",
80
- * parameters: [
81
- * { name: "endpoint", description: "API endpoint URL", type: "string" }
82
- * ],
83
- * output: {
84
- * description: "User objects",
85
- * type: "object",
86
- * properties: {
87
- * id: { description: "User ID", type: "number" },
88
- * name: { description: "User name", type: "string" }
89
- * }
90
- * },
91
- * examples: ["LOAD JSON FROM fetchUsers('https://api.example.com/users') AS user"]
92
- * }
93
- * });
94
- * ```
95
- */
96
- static registerAsyncProvider(name, providerOrOptions) {
97
- const lowerName = name.toLowerCase();
98
- if (typeof providerOrOptions === 'function') {
99
- FunctionFactory.asyncProviders.set(lowerName, providerOrOptions);
100
- }
101
- else {
102
- FunctionFactory.asyncProviders.set(lowerName, providerOrOptions.provider);
103
- FunctionFactory.metadata.set(lowerName, Object.assign(Object.assign({}, providerOrOptions.metadata), { name: lowerName, isAsyncProvider: true }));
104
- }
105
- }
106
- /**
107
- * Unregisters an async data provider function.
108
- *
109
- * @param name - The function name to unregister
110
- */
111
- static unregisterAsyncProvider(name) {
112
- const lowerName = name.toLowerCase();
113
- FunctionFactory.asyncProviders.delete(lowerName);
114
- FunctionFactory.metadata.delete(lowerName);
115
- }
116
38
  /**
117
39
  * Gets an async data provider by name.
118
40
  *
@@ -120,7 +42,7 @@ class FunctionFactory {
120
42
  * @returns The async data provider, or undefined if not found
121
43
  */
122
44
  static getAsyncProvider(name) {
123
- return FunctionFactory.asyncProviders.get(name.toLowerCase());
45
+ return (0, function_metadata_1.getRegisteredAsyncProvider)(name.toLowerCase());
124
46
  }
125
47
  /**
126
48
  * Checks if a function name is registered as an async data provider.
@@ -129,7 +51,7 @@ class FunctionFactory {
129
51
  * @returns True if the function is an async data provider
130
52
  */
131
53
  static isAsyncProvider(name) {
132
- return FunctionFactory.asyncProviders.has(name.toLowerCase());
54
+ return (0, function_metadata_1.getRegisteredAsyncProvider)(name.toLowerCase()) !== undefined;
133
55
  }
134
56
  /**
135
57
  * Gets metadata for a specific function.
@@ -138,41 +60,22 @@ class FunctionFactory {
138
60
  * @returns The function metadata, or undefined if not found
139
61
  */
140
62
  static getMetadata(name) {
141
- const lowerName = name.toLowerCase();
142
- // Check plugin metadata first
143
- if (FunctionFactory.metadata.has(lowerName)) {
144
- return FunctionFactory.metadata.get(lowerName);
145
- }
146
- // Fall back to built-in metadata
147
- return function_metadata_1.BUILTIN_FUNCTION_METADATA.find(m => m.name === lowerName);
63
+ return (0, function_metadata_1.getFunctionMetadata)(name.toLowerCase());
148
64
  }
149
65
  /**
150
66
  * Lists all registered functions with their metadata.
151
- * Includes both built-in and plugin functions.
152
67
  *
153
68
  * @param options - Optional filter options
154
69
  * @returns Array of function metadata
155
70
  */
156
71
  static listFunctions(options) {
157
72
  const result = [];
158
- const includeBuiltins = (options === null || options === void 0 ? void 0 : options.includeBuiltins) !== false;
159
- // Add built-in functions
160
- if (includeBuiltins) {
161
- for (const meta of function_metadata_1.BUILTIN_FUNCTION_METADATA) {
162
- if ((options === null || options === void 0 ? void 0 : options.category) && meta.category !== options.category)
163
- continue;
164
- if (options === null || options === void 0 ? void 0 : options.asyncOnly)
165
- continue; // Built-ins are sync
166
- result.push(meta);
167
- }
168
- }
169
- // Add plugin functions
170
- for (const [name, meta] of FunctionFactory.metadata) {
73
+ for (const meta of (0, function_metadata_1.getRegisteredFunctionMetadata)()) {
171
74
  if ((options === null || options === void 0 ? void 0 : options.category) && meta.category !== options.category)
172
75
  continue;
173
- if ((options === null || options === void 0 ? void 0 : options.asyncOnly) && !meta.isAsyncProvider)
76
+ if ((options === null || options === void 0 ? void 0 : options.asyncOnly) && meta.category !== 'async')
174
77
  continue;
175
- if ((options === null || options === void 0 ? void 0 : options.syncOnly) && meta.isAsyncProvider)
78
+ if ((options === null || options === void 0 ? void 0 : options.syncOnly) && meta.category === 'async')
176
79
  continue;
177
80
  result.push(meta);
178
81
  }
@@ -184,10 +87,7 @@ class FunctionFactory {
184
87
  * @returns Array of function names
185
88
  */
186
89
  static listFunctionNames() {
187
- const builtinNames = function_metadata_1.BUILTIN_FUNCTION_METADATA.map(m => m.name);
188
- const pluginNames = Array.from(FunctionFactory.plugins.keys());
189
- const asyncNames = Array.from(FunctionFactory.asyncProviders.keys());
190
- return [...new Set([...builtinNames, ...pluginNames, ...asyncNames])];
90
+ return (0, function_metadata_1.getRegisteredFunctionMetadata)().map(m => m.name);
191
91
  }
192
92
  /**
193
93
  * Gets all function metadata as a JSON-serializable object for LLM consumption.
@@ -207,53 +107,31 @@ class FunctionFactory {
207
107
  */
208
108
  static create(name) {
209
109
  const lowerName = name.toLowerCase();
210
- // Check plugin registry first (allows overriding built-ins)
211
- if (FunctionFactory.plugins.has(lowerName)) {
212
- return FunctionFactory.plugins.get(lowerName)();
110
+ // Check decorator-registered functions (built-ins use @FunctionDef)
111
+ const decoratorFactory = (0, function_metadata_1.getRegisteredFunctionFactory)(lowerName);
112
+ if (decoratorFactory) {
113
+ return decoratorFactory();
213
114
  }
214
- switch (lowerName) {
215
- case "sum":
216
- return new sum_1.default();
217
- case "collect":
218
- return new collect_1.default();
219
- case "avg":
220
- return new avg_1.default();
221
- case "range":
222
- return new range_1.default();
223
- case "rand":
224
- return new rand_1.default();
225
- case "round":
226
- return new round_1.default();
227
- case "split":
228
- return new split_1.default();
229
- case "join":
230
- return new join_1.default();
231
- case "tojson":
232
- return new to_json_1.default();
233
- case "replace":
234
- return new replace_1.default();
235
- case "stringify":
236
- return new stringify_1.default();
237
- case "size":
238
- return new size_1.default();
239
- case "functions":
240
- return new functions_1.default();
241
- default:
242
- return new function_1.default(name);
115
+ // Unknown function - return generic Function instance
116
+ return new function_1.default(name);
117
+ }
118
+ /**
119
+ * Creates a predicate function instance by name.
120
+ * Predicate functions are used in WHERE clauses with quantifiers (e.g., ANY, ALL).
121
+ *
122
+ * @param name - The function name (case-insensitive)
123
+ * @returns A PredicateFunction instance of the appropriate type
124
+ */
125
+ static createPredicate(name) {
126
+ const lowerName = name.toLowerCase();
127
+ // Check decorator-registered predicate functions
128
+ const decoratorFactory = (0, function_metadata_1.getRegisteredFunctionFactory)(lowerName, 'predicate');
129
+ if (decoratorFactory) {
130
+ return decoratorFactory();
243
131
  }
132
+ // Unknown predicate function - return generic PredicateFunction instance
133
+ return new predicate_function_1.default(name);
244
134
  }
245
135
  }
246
- /**
247
- * Registry for plugin functions (synchronous).
248
- */
249
- FunctionFactory.plugins = new Map();
250
- /**
251
- * Registry for async data provider functions used in LOAD operations.
252
- */
253
- FunctionFactory.asyncProviders = new Map();
254
- /**
255
- * Registry for function metadata (both sync and async).
256
- */
257
- FunctionFactory.metadata = new Map();
258
136
  exports.default = FunctionFactory;
259
137
  //# sourceMappingURL=function_factory.js.map