@loopstack/core 0.8.1 → 0.9.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 (263) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +43 -21
  3. package/dist/index.d.ts +0 -1
  4. package/dist/index.js +0 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/loop-core.module.d.ts +1 -4
  7. package/dist/loop-core.module.js +27 -46
  8. package/dist/loop-core.module.js.map +1 -1
  9. package/dist/modules/common/services/expression-handler/object-expression.handler.d.ts +2 -27
  10. package/dist/modules/common/services/expression-handler/object-expression.handler.js +26 -542
  11. package/dist/modules/common/services/expression-handler/object-expression.handler.js.map +1 -1
  12. package/dist/modules/common/services/template.service.d.ts +3 -2
  13. package/dist/modules/common/services/template.service.js +6 -6
  14. package/dist/modules/common/services/template.service.js.map +1 -1
  15. package/dist/modules/configuration/configuration.module.js +3 -8
  16. package/dist/modules/configuration/configuration.module.js.map +1 -1
  17. package/dist/modules/configuration/errors/config-trace.error.d.ts +2 -2
  18. package/dist/modules/configuration/errors/config-trace.error.js +2 -2
  19. package/dist/modules/configuration/errors/config-trace.error.js.map +1 -1
  20. package/dist/modules/configuration/services/block-registry.service.d.ts +25 -0
  21. package/dist/modules/configuration/services/block-registry.service.js +91 -0
  22. package/dist/modules/configuration/services/block-registry.service.js.map +1 -0
  23. package/dist/modules/configuration/services/config-loader.service.d.ts +4 -0
  24. package/dist/modules/configuration/services/config-loader.service.js +46 -0
  25. package/dist/modules/configuration/services/config-loader.service.js.map +1 -0
  26. package/dist/modules/configuration/services/dynamic-schema-generator.service.d.ts +0 -3
  27. package/dist/modules/configuration/services/dynamic-schema-generator.service.js +2 -17
  28. package/dist/modules/configuration/services/dynamic-schema-generator.service.js.map +1 -1
  29. package/dist/modules/configuration/services/index.d.ts +2 -4
  30. package/dist/modules/configuration/services/index.js +2 -4
  31. package/dist/modules/configuration/services/index.js.map +1 -1
  32. package/dist/modules/persistence/blocks/services/create-entity.service.d.ts +12 -0
  33. package/dist/modules/persistence/blocks/services/create-entity.service.js +46 -0
  34. package/dist/modules/persistence/blocks/services/create-entity.service.js.map +1 -0
  35. package/dist/modules/persistence/blocks/tools/batch-create-entity-tool.d.ts +20 -0
  36. package/dist/modules/persistence/blocks/tools/batch-create-entity-tool.js +40 -0
  37. package/dist/modules/persistence/blocks/tools/batch-create-entity-tool.js.map +1 -0
  38. package/dist/modules/persistence/blocks/tools/create-entity-tool.d.ts +23 -0
  39. package/dist/modules/persistence/blocks/tools/create-entity-tool.js +42 -0
  40. package/dist/modules/persistence/blocks/tools/create-entity-tool.js.map +1 -0
  41. package/dist/modules/persistence/blocks/tools/index.d.ts +3 -0
  42. package/dist/modules/persistence/blocks/tools/index.js +20 -0
  43. package/dist/modules/persistence/blocks/tools/index.js.map +1 -0
  44. package/dist/modules/persistence/blocks/tools/sql-query-tool.d.ts +26 -0
  45. package/dist/modules/persistence/blocks/tools/sql-query-tool.js +65 -0
  46. package/dist/modules/persistence/blocks/tools/sql-query-tool.js.map +1 -0
  47. package/dist/modules/persistence/handlers/create-entity.handler.d.ts +2 -2
  48. package/dist/modules/persistence/handlers/create-entity.handler.js +0 -1
  49. package/dist/modules/persistence/handlers/create-entity.handler.js.map +1 -1
  50. package/dist/modules/persistence/persistence.module.js +1 -0
  51. package/dist/modules/persistence/persistence.module.js.map +1 -1
  52. package/dist/modules/persistence/services/document.service.d.ts +1 -2
  53. package/dist/modules/persistence/services/document.service.js +4 -3
  54. package/dist/modules/persistence/services/document.service.js.map +1 -1
  55. package/dist/modules/persistence/services/pipeline.service.d.ts +1 -0
  56. package/dist/modules/persistence/services/pipeline.service.js +13 -0
  57. package/dist/modules/persistence/services/pipeline.service.js.map +1 -1
  58. package/dist/modules/persistence/subscriber/document.subscriber.d.ts +4 -1
  59. package/dist/modules/persistence/subscriber/document.subscriber.js +9 -2
  60. package/dist/modules/persistence/subscriber/document.subscriber.js.map +1 -1
  61. package/dist/modules/persistence/subscriber/workflow.subscriber.d.ts +4 -1
  62. package/dist/modules/persistence/subscriber/workflow.subscriber.js +10 -2
  63. package/dist/modules/persistence/subscriber/workflow.subscriber.js.map +1 -1
  64. package/dist/modules/scheduler/services/task-initialization.service.d.ts +4 -5
  65. package/dist/modules/scheduler/services/task-initialization.service.js +4 -14
  66. package/dist/modules/scheduler/services/task-initialization.service.js.map +1 -1
  67. package/dist/modules/scheduler/services/task-processor/cleanup-pipeline-task-processor.service.d.ts +0 -9
  68. package/dist/modules/scheduler/services/task-processor/cleanup-pipeline-task-processor.service.js +1 -65
  69. package/dist/modules/scheduler/services/task-processor/cleanup-pipeline-task-processor.service.js.map +1 -1
  70. package/dist/modules/scheduler/services/task-processor/create-run-pipeline-task-processor.service.d.ts +1 -6
  71. package/dist/modules/scheduler/services/task-processor/create-run-pipeline-task-processor.service.js +2 -24
  72. package/dist/modules/scheduler/services/task-processor/create-run-pipeline-task-processor.service.js.map +1 -1
  73. package/dist/modules/scheduler/services/task-processor/create-workspace-task-processor.service.d.ts +1 -6
  74. package/dist/modules/scheduler/services/task-processor/create-workspace-task-processor.service.js +2 -27
  75. package/dist/modules/scheduler/services/task-processor/create-workspace-task-processor.service.js.map +1 -1
  76. package/dist/modules/scheduler/services/task-processor.service.d.ts +1 -7
  77. package/dist/modules/scheduler/services/task-processor.service.js +2 -23
  78. package/dist/modules/scheduler/services/task-processor.service.js.map +1 -1
  79. package/dist/modules/workflow-processor/abstract/block.abstract.d.ts +35 -0
  80. package/dist/modules/workflow-processor/abstract/block.abstract.js +40 -0
  81. package/dist/modules/workflow-processor/abstract/block.abstract.js.map +1 -0
  82. package/dist/modules/workflow-processor/abstract/document.abstract.d.ts +8 -0
  83. package/dist/modules/workflow-processor/abstract/document.abstract.js +15 -0
  84. package/dist/modules/workflow-processor/abstract/document.abstract.js.map +1 -0
  85. package/dist/modules/workflow-processor/abstract/index.d.ts +5 -0
  86. package/dist/modules/workflow-processor/abstract/index.js +22 -0
  87. package/dist/modules/workflow-processor/abstract/index.js.map +1 -0
  88. package/dist/modules/workflow-processor/abstract/pipeline.abstract.d.ts +8 -0
  89. package/dist/modules/workflow-processor/abstract/pipeline.abstract.js +15 -0
  90. package/dist/modules/workflow-processor/abstract/pipeline.abstract.js.map +1 -0
  91. package/dist/modules/workflow-processor/abstract/tool.abstract.d.ts +13 -0
  92. package/dist/modules/workflow-processor/abstract/tool.abstract.js +26 -0
  93. package/dist/modules/workflow-processor/abstract/tool.abstract.js.map +1 -0
  94. package/dist/modules/workflow-processor/abstract/workflow.abstract.d.ts +11 -0
  95. package/dist/modules/workflow-processor/abstract/workflow.abstract.js +37 -0
  96. package/dist/modules/workflow-processor/abstract/workflow.abstract.js.map +1 -0
  97. package/dist/modules/workflow-processor/abstract/workspace.abstract.d.ts +7 -0
  98. package/dist/modules/workflow-processor/abstract/workspace.abstract.js +15 -0
  99. package/dist/modules/workflow-processor/abstract/workspace.abstract.js.map +1 -0
  100. package/dist/modules/workflow-processor/blocks/documents/error-message-document.d.ts +3 -0
  101. package/dist/modules/workflow-processor/blocks/documents/error-message-document.js +30 -0
  102. package/dist/modules/workflow-processor/blocks/documents/error-message-document.js.map +1 -0
  103. package/dist/modules/workflow-processor/blocks/documents/error-message-document.yaml +13 -0
  104. package/dist/modules/workflow-processor/blocks/documents/index.d.ts +4 -0
  105. package/dist/modules/workflow-processor/blocks/documents/index.js +21 -0
  106. package/dist/modules/workflow-processor/blocks/documents/index.js.map +1 -0
  107. package/dist/modules/workflow-processor/blocks/documents/markdown-message-document.d.ts +3 -0
  108. package/dist/modules/workflow-processor/blocks/documents/markdown-message-document.js +31 -0
  109. package/dist/modules/workflow-processor/blocks/documents/markdown-message-document.js.map +1 -0
  110. package/dist/modules/workflow-processor/blocks/documents/markdown-message-document.yaml +16 -0
  111. package/dist/modules/workflow-processor/blocks/documents/message-document.d.ts +3 -0
  112. package/dist/modules/workflow-processor/blocks/documents/message-document.js +31 -0
  113. package/dist/modules/workflow-processor/blocks/documents/message-document.js.map +1 -0
  114. package/dist/modules/workflow-processor/blocks/documents/message-document.yaml +15 -0
  115. package/dist/modules/workflow-processor/blocks/documents/plain-message-document.d.ts +3 -0
  116. package/dist/modules/workflow-processor/blocks/documents/plain-message-document.js +31 -0
  117. package/dist/modules/workflow-processor/blocks/documents/plain-message-document.js.map +1 -0
  118. package/dist/modules/workflow-processor/blocks/documents/plain-message-document.yaml +16 -0
  119. package/dist/modules/workflow-processor/blocks/index.d.ts +2 -0
  120. package/dist/{utils → modules/workflow-processor/blocks}/index.js +2 -1
  121. package/dist/modules/workflow-processor/blocks/index.js.map +1 -0
  122. package/dist/modules/workflow-processor/blocks/services/batch-create-documents.service.d.ts +13 -0
  123. package/dist/modules/workflow-processor/blocks/services/batch-create-documents.service.js +40 -0
  124. package/dist/modules/workflow-processor/blocks/services/batch-create-documents.service.js.map +1 -0
  125. package/dist/modules/workflow-processor/{handlers/create-document.handler.d.ts → blocks/services/create-document.service.d.ts} +109 -24
  126. package/dist/modules/workflow-processor/{handlers/create-document.handler.js → blocks/services/create-document.service.js} +47 -54
  127. package/dist/modules/workflow-processor/blocks/services/create-document.service.js.map +1 -0
  128. package/dist/modules/workflow-processor/blocks/services/mock.service.d.ts +16 -0
  129. package/dist/modules/workflow-processor/blocks/services/mock.service.js +61 -0
  130. package/dist/modules/workflow-processor/blocks/services/mock.service.js.map +1 -0
  131. package/dist/modules/workflow-processor/blocks/tools/batch-create-messages-tool.d.ts +35 -0
  132. package/dist/modules/workflow-processor/blocks/tools/batch-create-messages-tool.js +65 -0
  133. package/dist/modules/workflow-processor/blocks/tools/batch-create-messages-tool.js.map +1 -0
  134. package/dist/modules/workflow-processor/blocks/tools/create-chat-message-tool.d.ts +53 -0
  135. package/dist/modules/workflow-processor/blocks/tools/create-chat-message-tool.js +99 -0
  136. package/dist/modules/workflow-processor/blocks/tools/create-chat-message-tool.js.map +1 -0
  137. package/dist/modules/workflow-processor/blocks/tools/create-document-tool.d.ts +10 -0
  138. package/dist/modules/workflow-processor/blocks/tools/create-document-tool.js +41 -0
  139. package/dist/modules/workflow-processor/blocks/tools/create-document-tool.js.map +1 -0
  140. package/dist/modules/workflow-processor/blocks/tools/create-error-message-tool.d.ts +20 -0
  141. package/dist/modules/workflow-processor/blocks/tools/create-error-message-tool.js +57 -0
  142. package/dist/modules/workflow-processor/blocks/tools/create-error-message-tool.js.map +1 -0
  143. package/dist/modules/workflow-processor/blocks/tools/create-markdown-message-tool.d.ts +23 -0
  144. package/dist/modules/workflow-processor/blocks/tools/create-markdown-message-tool.js +60 -0
  145. package/dist/modules/workflow-processor/blocks/tools/create-markdown-message-tool.js.map +1 -0
  146. package/dist/modules/workflow-processor/blocks/tools/create-mock-tool.d.ts +26 -0
  147. package/dist/modules/workflow-processor/blocks/tools/create-mock-tool.js +57 -0
  148. package/dist/modules/workflow-processor/blocks/tools/create-mock-tool.js.map +1 -0
  149. package/dist/modules/workflow-processor/blocks/tools/create-plain-message-tool.d.ts +23 -0
  150. package/dist/modules/workflow-processor/blocks/tools/create-plain-message-tool.js +60 -0
  151. package/dist/modules/workflow-processor/blocks/tools/create-plain-message-tool.js.map +1 -0
  152. package/dist/modules/workflow-processor/blocks/tools/create-response-tool.d.ts +20 -0
  153. package/dist/modules/workflow-processor/blocks/tools/create-response-tool.js +55 -0
  154. package/dist/modules/workflow-processor/blocks/tools/create-response-tool.js.map +1 -0
  155. package/dist/modules/workflow-processor/blocks/tools/create-template-tool.d.ts +20 -0
  156. package/dist/modules/workflow-processor/blocks/tools/create-template-tool.js +51 -0
  157. package/dist/modules/workflow-processor/blocks/tools/create-template-tool.js.map +1 -0
  158. package/dist/modules/workflow-processor/blocks/tools/debug-tool.d.ts +20 -0
  159. package/dist/modules/workflow-processor/blocks/tools/debug-tool.js +48 -0
  160. package/dist/modules/workflow-processor/blocks/tools/debug-tool.js.map +1 -0
  161. package/dist/modules/workflow-processor/blocks/tools/index.d.ts +18 -0
  162. package/dist/modules/workflow-processor/blocks/tools/index.js +35 -0
  163. package/dist/modules/workflow-processor/blocks/tools/index.js.map +1 -0
  164. package/dist/modules/workflow-processor/blocks/tools/load-document-tool.d.ts +44 -0
  165. package/dist/modules/workflow-processor/blocks/tools/load-document-tool.js +130 -0
  166. package/dist/modules/workflow-processor/blocks/tools/load-document-tool.js.map +1 -0
  167. package/dist/modules/workflow-processor/blocks/tools/reset-error-tool.d.ts +12 -0
  168. package/dist/modules/workflow-processor/blocks/tools/reset-error-tool.js +48 -0
  169. package/dist/modules/workflow-processor/blocks/tools/reset-error-tool.js.map +1 -0
  170. package/dist/modules/workflow-processor/blocks/tools/set-context-tool.d.ts +23 -0
  171. package/dist/modules/workflow-processor/blocks/tools/set-context-tool.js +55 -0
  172. package/dist/modules/workflow-processor/blocks/tools/set-context-tool.js.map +1 -0
  173. package/dist/modules/workflow-processor/blocks/tools/switch-target-tool.d.ts +18 -0
  174. package/dist/modules/workflow-processor/blocks/tools/switch-target-tool.js +59 -0
  175. package/dist/modules/workflow-processor/blocks/tools/switch-target-tool.js.map +1 -0
  176. package/dist/modules/workflow-processor/blocks/tools/validate-document-tool.d.ts +22 -0
  177. package/dist/modules/workflow-processor/blocks/tools/validate-document-tool.js +79 -0
  178. package/dist/modules/workflow-processor/blocks/tools/validate-document-tool.js.map +1 -0
  179. package/dist/modules/workflow-processor/blocks/tools/validate-tool.d.ts +25 -0
  180. package/dist/modules/workflow-processor/blocks/tools/validate-tool.js +74 -0
  181. package/dist/modules/workflow-processor/blocks/tools/validate-tool.js.map +1 -0
  182. package/dist/modules/workflow-processor/handlers/index.d.ts +0 -4
  183. package/dist/modules/workflow-processor/handlers/index.js +0 -4
  184. package/dist/modules/workflow-processor/handlers/index.js.map +1 -1
  185. package/dist/modules/workflow-processor/handlers/validate.handler.d.ts +2 -2
  186. package/dist/modules/workflow-processor/index.d.ts +2 -0
  187. package/dist/modules/workflow-processor/index.js +2 -0
  188. package/dist/modules/workflow-processor/index.js.map +1 -1
  189. package/dist/modules/workflow-processor/services/block-helper.service.d.ts +8 -0
  190. package/dist/modules/workflow-processor/services/block-helper.service.js +51 -0
  191. package/dist/modules/workflow-processor/services/block-helper.service.js.map +1 -0
  192. package/dist/modules/workflow-processor/services/index.d.ts +1 -2
  193. package/dist/modules/workflow-processor/services/index.js +1 -2
  194. package/dist/modules/workflow-processor/services/index.js.map +1 -1
  195. package/dist/modules/workflow-processor/services/namespace-processor.service.d.ts +4 -3
  196. package/dist/modules/workflow-processor/services/namespace-processor.service.js +9 -12
  197. package/dist/modules/workflow-processor/services/namespace-processor.service.js.map +1 -1
  198. package/dist/modules/workflow-processor/services/pipeline-processor.service.d.ts +16 -11
  199. package/dist/modules/workflow-processor/services/pipeline-processor.service.js +121 -99
  200. package/dist/modules/workflow-processor/services/pipeline-processor.service.js.map +1 -1
  201. package/dist/modules/workflow-processor/services/root-processor.service.d.ts +8 -5
  202. package/dist/modules/workflow-processor/services/root-processor.service.js +33 -22
  203. package/dist/modules/workflow-processor/services/root-processor.service.js.map +1 -1
  204. package/dist/modules/workflow-processor/services/service-state-factory.service.d.ts +14 -0
  205. package/dist/modules/workflow-processor/services/service-state-factory.service.js +65 -0
  206. package/dist/modules/workflow-processor/services/service-state-factory.service.js.map +1 -0
  207. package/dist/modules/workflow-processor/services/state-machine-processor.service.d.ts +9 -5
  208. package/dist/modules/workflow-processor/services/state-machine-processor.service.js +37 -49
  209. package/dist/modules/workflow-processor/services/state-machine-processor.service.js.map +1 -1
  210. package/dist/modules/workflow-processor/services/template-expression-evaluator.service.d.ts +3 -12
  211. package/dist/modules/workflow-processor/services/template-expression-evaluator.service.js +4 -28
  212. package/dist/modules/workflow-processor/services/template-expression-evaluator.service.js.map +1 -1
  213. package/dist/modules/workflow-processor/services/tool-execution.service.d.ts +10 -13
  214. package/dist/modules/workflow-processor/services/tool-execution.service.js +32 -57
  215. package/dist/modules/workflow-processor/services/tool-execution.service.js.map +1 -1
  216. package/dist/modules/workflow-processor/services/workflow-processor.service.d.ts +3 -7
  217. package/dist/modules/workflow-processor/services/workflow-processor.service.js +9 -30
  218. package/dist/modules/workflow-processor/services/workflow-processor.service.js.map +1 -1
  219. package/dist/modules/workflow-processor/services/workflow-state.service.d.ts +4 -2
  220. package/dist/modules/workflow-processor/services/workflow-state.service.js +16 -12
  221. package/dist/modules/workflow-processor/services/workflow-state.service.js.map +1 -1
  222. package/dist/modules/workflow-processor/workflow-processor.module.js +32 -15
  223. package/dist/modules/workflow-processor/workflow-processor.module.js.map +1 -1
  224. package/package.json +3 -3
  225. package/dist/config-provider.service.d.ts +0 -6
  226. package/dist/config-provider.service.js +0 -36
  227. package/dist/config-provider.service.js.map +0 -1
  228. package/dist/modules/configuration/services/config-provider.registry.d.ts +0 -12
  229. package/dist/modules/configuration/services/config-provider.registry.js +0 -56
  230. package/dist/modules/configuration/services/config-provider.registry.js.map +0 -1
  231. package/dist/modules/configuration/services/configuration.service.d.ts +0 -33
  232. package/dist/modules/configuration/services/configuration.service.js +0 -215
  233. package/dist/modules/configuration/services/configuration.service.js.map +0 -1
  234. package/dist/modules/configuration/services/handler-registry.service.d.ts +0 -20
  235. package/dist/modules/configuration/services/handler-registry.service.js +0 -71
  236. package/dist/modules/configuration/services/handler-registry.service.js.map +0 -1
  237. package/dist/modules/configuration/services/schema-registry.service.d.ts +0 -11
  238. package/dist/modules/configuration/services/schema-registry.service.js +0 -44
  239. package/dist/modules/configuration/services/schema-registry.service.js.map +0 -1
  240. package/dist/modules/configuration/services/yaml-locator.service.d.ts +0 -17
  241. package/dist/modules/configuration/services/yaml-locator.service.js +0 -52
  242. package/dist/modules/configuration/services/yaml-locator.service.js.map +0 -1
  243. package/dist/modules/workflow-processor/handlers/batch-create-documents.handler.d.ts +0 -29
  244. package/dist/modules/workflow-processor/handlers/batch-create-documents.handler.js +0 -110
  245. package/dist/modules/workflow-processor/handlers/batch-create-documents.handler.js.map +0 -1
  246. package/dist/modules/workflow-processor/handlers/create-document.handler.js.map +0 -1
  247. package/dist/modules/workflow-processor/handlers/mock.handler.d.ts +0 -23
  248. package/dist/modules/workflow-processor/handlers/mock.handler.js +0 -79
  249. package/dist/modules/workflow-processor/handlers/mock.handler.js.map +0 -1
  250. package/dist/modules/workflow-processor/handlers/update-document.handler.d.ts +0 -87
  251. package/dist/modules/workflow-processor/handlers/update-document.handler.js +0 -149
  252. package/dist/modules/workflow-processor/handlers/update-document.handler.js.map +0 -1
  253. package/dist/modules/workflow-processor/services/handler-execution.service.d.ts +0 -12
  254. package/dist/modules/workflow-processor/services/handler-execution.service.js +0 -53
  255. package/dist/modules/workflow-processor/services/handler-execution.service.js.map +0 -1
  256. package/dist/modules/workflow-processor/services/state-machine-config.service.d.ts +0 -7
  257. package/dist/modules/workflow-processor/services/state-machine-config.service.js +0 -69
  258. package/dist/modules/workflow-processor/services/state-machine-config.service.js.map +0 -1
  259. package/dist/utils/index.d.ts +0 -1
  260. package/dist/utils/index.js.map +0 -1
  261. package/dist/utils/load-configuration.d.ts +0 -2
  262. package/dist/utils/load-configuration.js +0 -43
  263. package/dist/utils/load-configuration.js.map +0 -1
@@ -5,9 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
8
  var ObjectExpressionHandler_1;
12
9
  Object.defineProperty(exports, "__esModule", { value: true });
13
10
  exports.ObjectExpressionHandler = void 0;
@@ -16,581 +13,68 @@ const lodash_1 = require("lodash");
16
13
  const object_expression_error_1 = require("../../errors/object-expression.error");
17
14
  let ObjectExpressionHandler = ObjectExpressionHandler_1 = class ObjectExpressionHandler {
18
15
  logger = new common_1.Logger(ObjectExpressionHandler_1.name);
19
- DEFAULT_MAX_DEPTH = 10;
20
- DEFAULT_MAX_LENGTH = 1000;
21
- RESOURCE_LIMITS = {
22
- maxIterations: 1000,
23
- maxMemoryMB: 128,
24
- timeoutMs: 5000,
25
- maxDataSize: 1024 * 1024,
26
- maxObjectDepth: 10,
27
- };
28
16
  EXPRESSION_PATTERN = /^\$\{(.+)\}$/;
29
- FUNCTION_PATTERN = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)$/;
30
- VALID_SEGMENT_PATTERN = /^[a-zA-Z0-9_-]+(\[\d+\])?$/;
17
+ MAX_EXPRESSION_LENGTH = 1000;
18
+ MAX_DEPTH = 10;
31
19
  FORBIDDEN_PROPERTIES = new Set([
32
20
  '__proto__',
33
21
  'constructor',
34
22
  'prototype',
35
- '__defineGetter__',
36
- '__defineSetter__',
37
- '__lookupGetter__',
38
- '__lookupSetter__',
39
- 'hasOwnProperty',
40
- 'isPrototypeOf',
41
- 'propertyIsEnumerable',
42
- 'toString',
43
- 'valueOf',
44
- 'console',
45
- 'Buffer',
46
- 'window',
47
- 'global',
48
- 'process',
49
- 'import',
50
- 'require',
51
- 'function',
52
- 'eval',
53
23
  ]);
54
- functions = new Map();
55
- constructor() {
56
- this.registerBuiltInFunctions();
57
- }
58
24
  canHandle(value) {
59
- if (typeof value !== 'string') {
60
- return false;
61
- }
62
- const trimmed = value.trim();
63
- return this.EXPRESSION_PATTERN.test(trimmed);
25
+ return typeof value === 'string' && this.EXPRESSION_PATTERN.test(value.trim());
64
26
  }
65
27
  process(content, variables) {
66
28
  try {
67
- const context = {
68
- variables,
69
- depth: 0,
70
- };
71
- return this.processExpression(content, context);
29
+ const expression = this.extractExpression(content);
30
+ this.validateExpression(expression);
31
+ return this.evaluateExpression(expression, variables);
72
32
  }
73
33
  catch (error) {
74
- this.logger.error(`Failed to process object expression: ${error.message}`);
75
- this.logger.debug('Expression processing failed', {
76
- expression: content.substring(0, 100),
77
- errorType: error.constructor.name,
78
- errorCode: error instanceof object_expression_error_1.ObjectExpressionError ? error.code : 'UNKNOWN',
79
- variableKeys: Object.keys(variables).slice(0, 10),
80
- expressionLength: content.length,
81
- timestamp: new Date().toISOString(),
82
- });
83
34
  if (error instanceof object_expression_error_1.ObjectExpressionError) {
84
35
  throw error;
85
36
  }
37
+ this.logger.error(`Expression processing failed: ${error.message}`);
86
38
  throw new object_expression_error_1.ObjectExpressionError('Object expression evaluation failed', 'EVALUATION_ERROR');
87
39
  }
88
40
  }
89
- processExpression(content, context) {
90
- const expression = this.extractExpression(content);
91
- this.validateExpression(expression);
92
- return this.evaluateExpression(expression, context.variables);
93
- }
94
41
  extractExpression(content) {
95
- const trimmed = content.trim();
96
- const match = trimmed.match(this.EXPRESSION_PATTERN);
97
- if (!match || !match[1]) {
98
- this.logger.debug('Expression format validation failed', {
99
- content: trimmed.substring(0, 50),
100
- patternUsed: this.EXPRESSION_PATTERN.source,
101
- });
42
+ const match = content.trim().match(this.EXPRESSION_PATTERN);
43
+ if (!match?.[1]?.trim()) {
102
44
  throw new object_expression_error_1.ObjectExpressionError('Invalid expression format', 'INVALID_FORMAT');
103
45
  }
104
- const expression = match[1].trim();
105
- if (!expression) {
106
- this.logger.debug('Empty expression detected', {
107
- originalContent: trimmed,
108
- });
109
- throw new object_expression_error_1.ObjectExpressionError('Empty expression not allowed', 'EMPTY_EXPRESSION');
110
- }
111
- return expression;
46
+ return match[1].trim();
112
47
  }
113
- validateExpression(expression, options = {}) {
114
- const { maxDepth = this.DEFAULT_MAX_DEPTH, maxLength = this.DEFAULT_MAX_LENGTH, } = options;
115
- if (expression.length > maxLength) {
116
- this.logger.debug('Expression length exceeded', {
117
- expressionLength: expression.length,
118
- maxLength,
119
- expressionPrefix: expression.substring(0, 50),
120
- });
121
- throw new object_expression_error_1.ObjectExpressionError(`Expression too long (max: ${maxLength} characters)`, 'EXPRESSION_TOO_LONG');
48
+ validateExpression(expression) {
49
+ if (expression.length > this.MAX_EXPRESSION_LENGTH) {
50
+ throw new object_expression_error_1.ObjectExpressionError(`Expression too long (max: ${this.MAX_EXPRESSION_LENGTH} characters)`, 'EXPRESSION_TOO_LONG');
122
51
  }
123
- if (this.isFunctionCall(expression)) {
124
- this.validateFunctionCall(expression);
52
+ const segments = expression.split('.').filter(s => s.length > 0);
53
+ if (segments.length > this.MAX_DEPTH) {
54
+ throw new object_expression_error_1.ObjectExpressionError(`Expression depth too high (max: ${this.MAX_DEPTH} levels)`, 'DEPTH_EXCEEDED');
125
55
  }
126
- else {
127
- const segments = this.parseExpressionSegments(expression);
128
- if (segments.length > maxDepth) {
129
- this.logger.debug('Expression depth exceeded', {
130
- segmentCount: segments.length,
131
- maxDepth,
132
- segments: segments.slice(0, 5),
133
- });
134
- throw new object_expression_error_1.ObjectExpressionError(`Expression depth too high (max: ${maxDepth} levels)`, 'DEPTH_EXCEEDED');
56
+ for (const segment of segments) {
57
+ const cleanSegment = segment.replace(/\[\d+\]$/, '');
58
+ if (this.FORBIDDEN_PROPERTIES.has(cleanSegment)) {
59
+ throw new object_expression_error_1.ObjectExpressionError('Expression contains forbidden property access', 'FORBIDDEN_PROPERTY');
135
60
  }
136
- this.validateSegmentsSecurity(segments);
137
61
  }
138
62
  }
139
- evaluateExpression(expression, variables) {
140
- const resourceMonitor = {
141
- iterations: 0,
142
- startTime: Date.now(),
143
- memoryBaseline: process.memoryUsage().heapUsed,
144
- operationMemory: 0,
145
- };
146
- this.checkResourceLimits(resourceMonitor);
63
+ evaluateExpression(expression, ctx) {
147
64
  try {
148
- if (this.isFunctionCall(expression)) {
149
- return this.evaluateFunctionCall(expression, variables, resourceMonitor);
65
+ const value = (0, lodash_1.get)(ctx, expression);
66
+ if (typeof value === 'function') {
67
+ return value.call(ctx);
150
68
  }
151
- return (0, lodash_1.get)(variables, expression);
69
+ return value;
152
70
  }
153
71
  catch (error) {
154
- this.logger.debug('Expression evaluation failed', {
155
- expression: expression.substring(0, 100),
156
- errorMessage: error.message,
157
- iterations: resourceMonitor.iterations,
158
- timeElapsed: Date.now() - resourceMonitor.startTime,
159
- });
160
72
  throw new object_expression_error_1.ObjectExpressionError('Failed to evaluate expression', 'EVALUATION_FAILED');
161
73
  }
162
74
  }
163
- evaluateFunctionCall(expression, variables, resourceMonitor) {
164
- const functionCall = this.parseFunctionCall(expression);
165
- const func = this.functions.get(functionCall.name);
166
- const resolvedArgs = functionCall.args.map((arg) => {
167
- if (this.isPropertyAccess(arg)) {
168
- this.checkResourceLimits(resourceMonitor);
169
- return (0, lodash_1.get)(variables, arg);
170
- }
171
- else {
172
- return this.parseLiteral(arg);
173
- }
174
- });
175
- this.checkResourceLimits(resourceMonitor);
176
- return this.wrapFunctionWithLimits(func, resourceMonitor)(resolvedArgs, variables);
177
- }
178
- parseLiteral(arg) {
179
- if ((arg.startsWith('"') && arg.endsWith('"')) ||
180
- (arg.startsWith("'") && arg.endsWith("'"))) {
181
- return arg.slice(1, -1);
182
- }
183
- return arg;
184
- }
185
- wrapFunctionWithLimits(func, resourceMonitor) {
186
- return (args, variables) => {
187
- if (func.minArgs !== undefined && args.length < func.minArgs) {
188
- this.logger.debug('Function argument count insufficient', {
189
- functionName: func.name,
190
- providedArgs: args.length,
191
- minArgs: func.minArgs,
192
- });
193
- throw new object_expression_error_1.ObjectExpressionError(`Function ${func.name} requires at least ${func.minArgs} arguments`, 'INSUFFICIENT_ARGS');
194
- }
195
- if (func.maxArgs !== undefined && args.length > func.maxArgs) {
196
- this.logger.debug('Function argument count exceeded', {
197
- functionName: func.name,
198
- providedArgs: args.length,
199
- maxArgs: func.maxArgs,
200
- });
201
- throw new object_expression_error_1.ObjectExpressionError(`Function ${func.name} accepts at most ${func.maxArgs} arguments`, 'TOO_MANY_ARGS');
202
- }
203
- return func.handler(args, variables);
204
- };
205
- }
206
- checkResourceLimits(resourceMonitor) {
207
- const currentTime = Date.now();
208
- const timeElapsed = currentTime - resourceMonitor.startTime;
209
- if (timeElapsed > this.RESOURCE_LIMITS.timeoutMs) {
210
- this.logger.debug('Resource timeout exceeded', {
211
- timeElapsed,
212
- timeoutMs: this.RESOURCE_LIMITS.timeoutMs,
213
- iterations: resourceMonitor.iterations,
214
- });
215
- throw new object_expression_error_1.ObjectExpressionError('Resource timeout exceeded', 'TIMEOUT_EXCEEDED');
216
- }
217
- resourceMonitor.iterations++;
218
- if (resourceMonitor.iterations > this.RESOURCE_LIMITS.maxIterations) {
219
- this.logger.debug('Iteration limit exceeded', {
220
- iterations: resourceMonitor.iterations,
221
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
222
- timeElapsed,
223
- });
224
- throw new object_expression_error_1.ObjectExpressionError('Iteration limit exceeded', 'ITERATION_LIMIT_EXCEEDED');
225
- }
226
- const currentMemory = process.memoryUsage().heapUsed;
227
- const memoryDiff = (currentMemory - resourceMonitor.memoryBaseline) / 1024 / 1024;
228
- if (memoryDiff > this.RESOURCE_LIMITS.maxMemoryMB) {
229
- this.logger.debug('Memory limit exceeded', {
230
- memoryDiff: memoryDiff.toFixed(2),
231
- maxMemoryMB: this.RESOURCE_LIMITS.maxMemoryMB,
232
- iterations: resourceMonitor.iterations,
233
- timeElapsed,
234
- });
235
- throw new object_expression_error_1.ObjectExpressionError('Memory limit exceeded', 'MEMORY_LIMIT_EXCEEDED');
236
- }
237
- }
238
- isFunctionCall(expression) {
239
- const maxLength = 1000;
240
- if (expression.length > maxLength) {
241
- return false;
242
- }
243
- return this.FUNCTION_PATTERN.test(expression);
244
- }
245
- validateFunctionCall(expression) {
246
- const functionCall = this.parseFunctionCall(expression);
247
- if (!this.functions.has(functionCall.name)) {
248
- this.logger.debug('Unknown function called', {
249
- functionName: functionCall.name,
250
- availableFunctions: Array.from(this.functions.keys()),
251
- });
252
- throw new object_expression_error_1.ObjectExpressionError(`Unknown function: ${functionCall.name}`, 'UNKNOWN_FUNCTION');
253
- }
254
- const func = this.functions.get(functionCall.name);
255
- if (func.minArgs !== undefined && functionCall.args.length < func.minArgs) {
256
- this.logger.debug('Function validation failed - insufficient arguments', {
257
- functionName: functionCall.name,
258
- providedArgs: functionCall.args.length,
259
- minArgs: func.minArgs,
260
- args: functionCall.args,
261
- });
262
- throw new object_expression_error_1.ObjectExpressionError(`Function ${functionCall.name} requires at least ${func.minArgs} arguments`, 'INSUFFICIENT_ARGS');
263
- }
264
- if (func.maxArgs !== undefined && functionCall.args.length > func.maxArgs) {
265
- this.logger.debug('Function validation failed - too many arguments', {
266
- functionName: functionCall.name,
267
- providedArgs: functionCall.args.length,
268
- maxArgs: func.maxArgs,
269
- args: functionCall.args,
270
- });
271
- throw new object_expression_error_1.ObjectExpressionError(`Function ${functionCall.name} accepts at most ${func.maxArgs} arguments`, 'TOO_MANY_ARGS');
272
- }
273
- for (const arg of functionCall.args) {
274
- if (this.isPropertyAccess(arg)) {
275
- const segments = this.parseExpressionSegments(arg);
276
- this.validateSegmentsSecurity(segments);
277
- }
278
- }
279
- }
280
- parseFunctionCall(expression) {
281
- const match = expression.match(this.FUNCTION_PATTERN);
282
- if (!match) {
283
- this.logger.debug('Function call parsing failed', {
284
- expression: expression.substring(0, 100),
285
- patternUsed: this.FUNCTION_PATTERN.source,
286
- });
287
- throw new object_expression_error_1.ObjectExpressionError('Invalid function call format', 'INVALID_FUNCTION_FORMAT');
288
- }
289
- const name = match[1];
290
- const argsString = match[2];
291
- const args = argsString
292
- ? argsString
293
- .split(',')
294
- .map((arg) => arg.trim())
295
- .filter((arg) => arg)
296
- : [];
297
- return { name, args };
298
- }
299
- isPropertyAccess(arg) {
300
- return /^[a-zA-Z_][a-zA-Z0-9_.-]*$/.test(arg);
301
- }
302
- parseExpressionSegments(expression) {
303
- return expression.split('.').filter((segment) => segment.length > 0);
304
- }
305
- validateSegmentsSecurity(segments) {
306
- for (const segment of segments) {
307
- if (this.FORBIDDEN_PROPERTIES.has(segment)) {
308
- this.logger.debug('Forbidden property access attempt', {
309
- segment,
310
- allSegments: segments,
311
- forbiddenProperties: Array.from(this.FORBIDDEN_PROPERTIES),
312
- });
313
- throw new object_expression_error_1.ObjectExpressionError('Expression contains forbidden property access', 'FORBIDDEN_PROPERTY');
314
- }
315
- if (!this.VALID_SEGMENT_PATTERN.test(segment)) {
316
- this.logger.debug('Invalid segment detected', {
317
- segment,
318
- allSegments: segments,
319
- patternUsed: this.VALID_SEGMENT_PATTERN.source,
320
- });
321
- throw new object_expression_error_1.ObjectExpressionError('Expression contains invalid characters or format', 'INVALID_SEGMENT');
322
- }
323
- }
324
- }
325
- registerBuiltInFunctions() {
326
- this.registerFunction({
327
- name: 'concat',
328
- handler: (args) => {
329
- return args.reduce((result, arg) => {
330
- if (typeof arg === 'string') {
331
- return result + arg;
332
- }
333
- this.logger.debug('concat function type error', {
334
- argType: typeof arg,
335
- argValue: String(arg).substring(0, 50),
336
- });
337
- throw new object_expression_error_1.ObjectExpressionError('concat() function only accepts strings', 'INVALID_ARGUMENT_TYPE');
338
- }, '');
339
- },
340
- minArgs: 2,
341
- });
342
- this.registerFunction({
343
- name: 'map',
344
- handler: (args) => {
345
- const array = args[0];
346
- const propertyPath = args[1];
347
- return (0, lodash_1.map)(array, propertyPath);
348
- },
349
- minArgs: 2,
350
- });
351
- this.registerFunction({
352
- name: 'difference',
353
- handler: (args) => {
354
- return (0, lodash_1.difference)(args[0], args[1]);
355
- },
356
- minArgs: 2,
357
- });
358
- this.registerFunction({
359
- name: 'or',
360
- handler: (args) => {
361
- return !!args[0] || !!args[1];
362
- },
363
- minArgs: 2,
364
- });
365
- this.registerFunction({
366
- name: 'flatMap',
367
- handler: (args, variables) => {
368
- const array = args[0];
369
- const propertyPath = args[1];
370
- if (!Array.isArray(array)) {
371
- this.logger.debug('flatMap function type error - not array', {
372
- argType: typeof array,
373
- argValue: String(array).substring(0, 50),
374
- });
375
- throw new object_expression_error_1.ObjectExpressionError('flatMap() function first argument must be an array', 'INVALID_ARGUMENT_TYPE');
376
- }
377
- if (typeof propertyPath !== 'string') {
378
- this.logger.debug('flatMap function type error - property path not string', {
379
- propertyPathType: typeof propertyPath,
380
- propertyPath: String(propertyPath),
381
- });
382
- throw new object_expression_error_1.ObjectExpressionError('flatMap() function second argument must be a property path string', 'INVALID_ARGUMENT_TYPE');
383
- }
384
- if (array.length > this.RESOURCE_LIMITS.maxIterations) {
385
- this.logger.debug('flatMap array too large', {
386
- arrayLength: array.length,
387
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
388
- });
389
- throw new object_expression_error_1.ObjectExpressionError(`Array too large for flatMap (max: ${this.RESOURCE_LIMITS.maxIterations})`, 'ARRAY_TOO_LARGE');
390
- }
391
- const result = [];
392
- let iterations = 0;
393
- for (const item of array) {
394
- if (++iterations > this.RESOURCE_LIMITS.maxIterations) {
395
- this.logger.debug('flatMap iteration limit exceeded', {
396
- iterations,
397
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
398
- resultLength: result.length,
399
- });
400
- throw new object_expression_error_1.ObjectExpressionError('Iteration limit exceeded in flatMap', 'ITERATION_LIMIT_EXCEEDED');
401
- }
402
- if (typeof item === 'object' && item !== null) {
403
- const value = (0, lodash_1.get)(item, propertyPath);
404
- if (Array.isArray(value)) {
405
- for (const valueItem of value) {
406
- if (result.length >= this.RESOURCE_LIMITS.maxIterations) {
407
- this.logger.debug('flatMap result too large', {
408
- resultLength: result.length,
409
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
410
- });
411
- throw new object_expression_error_1.ObjectExpressionError('Result array too large in flatMap', 'RESULT_TOO_LARGE');
412
- }
413
- result.push(valueItem);
414
- }
415
- }
416
- else if (value !== undefined) {
417
- if (result.length >= this.RESOURCE_LIMITS.maxIterations) {
418
- this.logger.debug('flatMap result too large', {
419
- resultLength: result.length,
420
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
421
- });
422
- throw new object_expression_error_1.ObjectExpressionError('Result array too large in flatMap', 'RESULT_TOO_LARGE');
423
- }
424
- result.push(value);
425
- }
426
- }
427
- }
428
- return result;
429
- },
430
- minArgs: 2,
431
- maxArgs: 2,
432
- });
433
- this.registerFunction({
434
- name: 'length',
435
- handler: (args) => {
436
- const value = args[0];
437
- if (Array.isArray(value) || typeof value === 'string') {
438
- return value.length;
439
- }
440
- this.logger.debug('length function type error', {
441
- argType: typeof value,
442
- isArray: Array.isArray(value),
443
- argValue: String(value).substring(0, 50),
444
- });
445
- throw new object_expression_error_1.ObjectExpressionError('length() function only accepts arrays or strings', 'INVALID_ARGUMENT_TYPE');
446
- },
447
- minArgs: 1,
448
- maxArgs: 1,
449
- });
450
- this.registerFunction({
451
- name: 'first',
452
- handler: (args) => {
453
- const array = args[0];
454
- if (!Array.isArray(array)) {
455
- this.logger.debug('first function type error', {
456
- argType: typeof array,
457
- argValue: String(array).substring(0, 50),
458
- });
459
- throw new object_expression_error_1.ObjectExpressionError('first() function only accepts arrays', 'INVALID_ARGUMENT_TYPE');
460
- }
461
- return array[0];
462
- },
463
- minArgs: 1,
464
- maxArgs: 1,
465
- });
466
- this.registerFunction({
467
- name: 'last',
468
- handler: (args) => {
469
- const array = args[0];
470
- if (!Array.isArray(array)) {
471
- this.logger.debug('last function type error', {
472
- argType: typeof array,
473
- argValue: String(array).substring(0, 50),
474
- });
475
- throw new object_expression_error_1.ObjectExpressionError('last() function only accepts arrays', 'INVALID_ARGUMENT_TYPE');
476
- }
477
- return array[array.length - 1];
478
- },
479
- minArgs: 1,
480
- maxArgs: 1,
481
- });
482
- this.registerFunction({
483
- name: 'merge',
484
- handler: (args) => {
485
- const obj1 = args[0];
486
- const obj2 = args[1];
487
- if (typeof obj1 !== 'object' || obj1 === null || Array.isArray(obj1)) {
488
- this.logger.debug('merge function type error - first arg not object', {
489
- argType: typeof obj1,
490
- argValue: String(obj1).substring(0, 50),
491
- });
492
- throw new object_expression_error_1.ObjectExpressionError('merge() function first argument must be an object', 'INVALID_ARGUMENT_TYPE');
493
- }
494
- if (typeof obj2 !== 'object' || obj2 === null || Array.isArray(obj2)) {
495
- this.logger.debug('merge function type error - second arg not object', {
496
- argType: typeof obj2,
497
- argValue: String(obj2).substring(0, 50),
498
- });
499
- throw new object_expression_error_1.ObjectExpressionError('merge() function second argument must be an object', 'INVALID_ARGUMENT_TYPE');
500
- }
501
- const combinedKeys = new Set([
502
- ...Object.keys(obj1),
503
- ...Object.keys(obj2),
504
- ]);
505
- if (combinedKeys.size > this.RESOURCE_LIMITS.maxIterations) {
506
- this.logger.debug('merge result too large', {
507
- combinedKeyCount: combinedKeys.size,
508
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
509
- });
510
- throw new object_expression_error_1.ObjectExpressionError(`Merged object too large (max keys: ${this.RESOURCE_LIMITS.maxIterations})`, 'OBJECT_TOO_LARGE');
511
- }
512
- return { ...obj1, ...obj2 };
513
- },
514
- minArgs: 2,
515
- maxArgs: 2,
516
- });
517
- this.registerFunction({
518
- name: 'mergeWith',
519
- handler: (args) => {
520
- const array = args[0];
521
- const commonObject = args[1];
522
- if (!Array.isArray(array)) {
523
- this.logger.debug('mergeWith function type error - not array', {
524
- argType: typeof array,
525
- argValue: String(array).substring(0, 50),
526
- });
527
- throw new object_expression_error_1.ObjectExpressionError('mergeWith() function first argument must be an array', 'INVALID_ARGUMENT_TYPE');
528
- }
529
- if (typeof commonObject !== 'object' ||
530
- commonObject === null ||
531
- Array.isArray(commonObject)) {
532
- this.logger.debug('mergeWith function type error - common object not object', {
533
- argType: typeof commonObject,
534
- argValue: String(commonObject).substring(0, 50),
535
- });
536
- throw new object_expression_error_1.ObjectExpressionError('mergeWith() function second argument must be an object', 'INVALID_ARGUMENT_TYPE');
537
- }
538
- if (array.length > this.RESOURCE_LIMITS.maxIterations) {
539
- this.logger.debug('mergeWith array too large', {
540
- arrayLength: array.length,
541
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
542
- });
543
- throw new object_expression_error_1.ObjectExpressionError(`Array too large for mergeWith (max: ${this.RESOURCE_LIMITS.maxIterations})`, 'ARRAY_TOO_LARGE');
544
- }
545
- const result = [];
546
- let iterations = 0;
547
- for (const item of array) {
548
- if (++iterations > this.RESOURCE_LIMITS.maxIterations) {
549
- this.logger.debug('mergeWith iteration limit exceeded', {
550
- iterations,
551
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
552
- });
553
- throw new object_expression_error_1.ObjectExpressionError('Iteration limit exceeded in mergeWith', 'ITERATION_LIMIT_EXCEEDED');
554
- }
555
- if (typeof item === 'object' &&
556
- item !== null &&
557
- !Array.isArray(item)) {
558
- const combinedKeys = new Set([
559
- ...Object.keys(item),
560
- ...Object.keys(commonObject),
561
- ]);
562
- if (combinedKeys.size > this.RESOURCE_LIMITS.maxIterations) {
563
- this.logger.debug('mergeWith merged item too large', {
564
- combinedKeyCount: combinedKeys.size,
565
- maxIterations: this.RESOURCE_LIMITS.maxIterations,
566
- itemIndex: iterations - 1,
567
- });
568
- throw new object_expression_error_1.ObjectExpressionError('Merged item too large in mergeWith', 'OBJECT_TOO_LARGE');
569
- }
570
- result.push({ ...item, ...commonObject });
571
- }
572
- else {
573
- this.logger.debug('mergeWith skipping non-object item', {
574
- itemType: typeof item,
575
- itemValue: String(item).substring(0, 50),
576
- itemIndex: iterations - 1,
577
- });
578
- result.push(item);
579
- }
580
- }
581
- return result;
582
- },
583
- minArgs: 2,
584
- maxArgs: 2,
585
- });
586
- }
587
- registerFunction(func) {
588
- this.functions.set(func.name, func);
589
- }
590
75
  };
591
76
  exports.ObjectExpressionHandler = ObjectExpressionHandler;
592
77
  exports.ObjectExpressionHandler = ObjectExpressionHandler = ObjectExpressionHandler_1 = __decorate([
593
- (0, common_1.Injectable)(),
594
- __metadata("design:paramtypes", [])
78
+ (0, common_1.Injectable)()
595
79
  ], ObjectExpressionHandler);
596
80
  //# sourceMappingURL=object-expression.handler.js.map