@oronts/vendure-data-hub-plugin 0.1.3 → 0.1.5

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 (491) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/README.md +30 -8
  3. package/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
  4. package/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
  5. package/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
  6. package/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
  7. package/dashboard/components/shared/CodeEditor.tsx +289 -0
  8. package/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
  9. package/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
  10. package/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
  11. package/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
  12. package/dashboard/components/shared/step-config/StepConfigPanel.tsx +37 -17
  13. package/dashboard/components/shared/step-config/ValidateConfigComponent.tsx +2 -2
  14. package/dashboard/constants/ui-dimensions.ts +2 -1
  15. package/dashboard/constants/ui-states.ts +1 -0
  16. package/dashboard/gql/graphql.ts +13 -1
  17. package/dashboard/hooks/use-adapter-catalog.ts +4 -32
  18. package/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
  19. package/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
  20. package/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
  21. package/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
  22. package/dashboard/utils/formatters.ts +6 -4
  23. package/dist/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
  24. package/dist/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
  25. package/dist/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
  26. package/dist/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
  27. package/dist/dashboard/components/shared/CodeEditor.tsx +289 -0
  28. package/dist/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
  29. package/dist/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
  30. package/dist/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
  31. package/dist/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
  32. package/dist/dashboard/components/shared/step-config/StepConfigPanel.tsx +37 -17
  33. package/dist/dashboard/components/shared/step-config/ValidateConfigComponent.tsx +2 -2
  34. package/dist/dashboard/constants/ui-dimensions.ts +2 -1
  35. package/dist/dashboard/constants/ui-states.ts +1 -0
  36. package/dist/dashboard/gql/graphql.ts +13 -1
  37. package/dist/dashboard/hooks/use-adapter-catalog.ts +4 -32
  38. package/dist/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
  39. package/dist/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
  40. package/dist/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
  41. package/dist/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
  42. package/dist/dashboard/utils/formatters.ts +6 -4
  43. package/dist/shared/types/adapter-config.types.d.ts +148 -4
  44. package/dist/shared/types/adapter-config.types.d.ts.map +1 -1
  45. package/dist/shared/types/index.d.ts +1 -1
  46. package/dist/shared/types/index.d.ts.map +1 -1
  47. package/dist/shared/types/index.js.map +1 -1
  48. package/dist/shared/types/loader.types.d.ts +4 -0
  49. package/dist/shared/types/loader.types.d.ts.map +1 -1
  50. package/dist/shared/types/step.types.d.ts +6 -0
  51. package/dist/shared/types/step.types.d.ts.map +1 -1
  52. package/dist/shared/types/trigger.types.d.ts +0 -4
  53. package/dist/shared/types/trigger.types.d.ts.map +1 -1
  54. package/dist/src/adapters/registry.d.ts.map +1 -1
  55. package/dist/src/adapters/registry.js +2 -1
  56. package/dist/src/adapters/registry.js.map +1 -1
  57. package/dist/src/api/controllers/webhook.controller.d.ts +10 -0
  58. package/dist/src/api/controllers/webhook.controller.d.ts.map +1 -1
  59. package/dist/src/api/controllers/webhook.controller.js +50 -10
  60. package/dist/src/api/controllers/webhook.controller.js.map +1 -1
  61. package/dist/src/api/resolvers/queue.resolver.d.ts +3 -1
  62. package/dist/src/api/resolvers/queue.resolver.d.ts.map +1 -1
  63. package/dist/src/api/resolvers/queue.resolver.js +6 -5
  64. package/dist/src/api/resolvers/queue.resolver.js.map +1 -1
  65. package/dist/src/api/schema/pipeline.schema.d.ts +1 -1
  66. package/dist/src/api/schema/pipeline.schema.d.ts.map +1 -1
  67. package/dist/src/api/schema/pipeline.schema.js +4 -0
  68. package/dist/src/api/schema/pipeline.schema.js.map +1 -1
  69. package/dist/src/api/schema/test.schema.d.ts +1 -1
  70. package/dist/src/api/schema/test.schema.d.ts.map +1 -1
  71. package/dist/src/api/schema/test.schema.js +5 -1
  72. package/dist/src/api/schema/test.schema.js.map +1 -1
  73. package/dist/src/bootstrap/seed-data.js +1 -1
  74. package/dist/src/bootstrap/seed-data.js.map +1 -1
  75. package/dist/src/constants/adapter-schema-options.d.ts +65 -0
  76. package/dist/src/constants/adapter-schema-options.d.ts.map +1 -1
  77. package/dist/src/constants/adapter-schema-options.js +91 -7
  78. package/dist/src/constants/adapter-schema-options.js.map +1 -1
  79. package/dist/src/constants/builtin-adapters.d.ts +1 -1
  80. package/dist/src/constants/builtin-adapters.d.ts.map +1 -1
  81. package/dist/src/constants/builtin-adapters.js +19 -1
  82. package/dist/src/constants/builtin-adapters.js.map +1 -1
  83. package/dist/src/constants/core.d.ts +10 -0
  84. package/dist/src/constants/core.d.ts.map +1 -1
  85. package/dist/src/constants/core.js +10 -0
  86. package/dist/src/constants/core.js.map +1 -1
  87. package/dist/src/constants/defaults/webhook-defaults.d.ts +2 -0
  88. package/dist/src/constants/defaults/webhook-defaults.d.ts.map +1 -1
  89. package/dist/src/constants/defaults/webhook-defaults.js +2 -0
  90. package/dist/src/constants/defaults/webhook-defaults.js.map +1 -1
  91. package/dist/src/constants/enum-metadata.d.ts.map +1 -1
  92. package/dist/src/constants/enum-metadata.js +3 -0
  93. package/dist/src/constants/enum-metadata.js.map +1 -1
  94. package/dist/src/constants/hook-stage-metadata.d.ts.map +1 -1
  95. package/dist/src/constants/hook-stage-metadata.js +42 -0
  96. package/dist/src/constants/hook-stage-metadata.js.map +1 -1
  97. package/dist/src/constants/services.d.ts.map +1 -1
  98. package/dist/src/constants/services.js +7 -0
  99. package/dist/src/constants/services.js.map +1 -1
  100. package/dist/src/constants/time.d.ts +2 -0
  101. package/dist/src/constants/time.d.ts.map +1 -1
  102. package/dist/src/constants/time.js +2 -0
  103. package/dist/src/constants/time.js.map +1 -1
  104. package/dist/src/data-hub.plugin.d.ts.map +1 -1
  105. package/dist/src/data-hub.plugin.js +2 -2
  106. package/dist/src/data-hub.plugin.js.map +1 -1
  107. package/dist/src/entities/pipeline/pipeline-run.entity.d.ts +4 -0
  108. package/dist/src/entities/pipeline/pipeline-run.entity.d.ts.map +1 -1
  109. package/dist/src/entities/pipeline/pipeline-run.entity.js +8 -0
  110. package/dist/src/entities/pipeline/pipeline-run.entity.js.map +1 -1
  111. package/dist/src/extractors/cdc/cdc.extractor.d.ts.map +1 -1
  112. package/dist/src/extractors/cdc/cdc.extractor.js +7 -2
  113. package/dist/src/extractors/cdc/cdc.extractor.js.map +1 -1
  114. package/dist/src/extractors/cdc/types.d.ts +1 -1
  115. package/dist/src/extractors/cdc/types.d.ts.map +1 -1
  116. package/dist/src/extractors/extractor-handler-registry.d.ts.map +1 -1
  117. package/dist/src/extractors/extractor-handler-registry.js +3 -0
  118. package/dist/src/extractors/extractor-handler-registry.js.map +1 -1
  119. package/dist/src/extractors/vendure-query/helpers.d.ts +9 -4
  120. package/dist/src/extractors/vendure-query/helpers.d.ts.map +1 -1
  121. package/dist/src/extractors/vendure-query/helpers.js +98 -32
  122. package/dist/src/extractors/vendure-query/helpers.js.map +1 -1
  123. package/dist/src/extractors/vendure-query/schema.d.ts.map +1 -1
  124. package/dist/src/extractors/vendure-query/schema.js +13 -0
  125. package/dist/src/extractors/vendure-query/schema.js.map +1 -1
  126. package/dist/src/feeds/generators/csv-feed.generator.d.ts.map +1 -1
  127. package/dist/src/feeds/generators/csv-feed.generator.js +5 -4
  128. package/dist/src/feeds/generators/csv-feed.generator.js.map +1 -1
  129. package/dist/src/feeds/generators/facebook-catalog.generator.d.ts.map +1 -1
  130. package/dist/src/feeds/generators/facebook-catalog.generator.js +83 -114
  131. package/dist/src/feeds/generators/facebook-catalog.generator.js.map +1 -1
  132. package/dist/src/feeds/generators/feed-constants.d.ts +1 -0
  133. package/dist/src/feeds/generators/feed-constants.d.ts.map +1 -1
  134. package/dist/src/feeds/generators/feed-constants.js +1 -0
  135. package/dist/src/feeds/generators/feed-constants.js.map +1 -1
  136. package/dist/src/feeds/generators/feed-helpers.d.ts +10 -8
  137. package/dist/src/feeds/generators/feed-helpers.d.ts.map +1 -1
  138. package/dist/src/feeds/generators/feed-helpers.js +24 -4
  139. package/dist/src/feeds/generators/feed-helpers.js.map +1 -1
  140. package/dist/src/feeds/generators/feed-item-builder.d.ts +59 -0
  141. package/dist/src/feeds/generators/feed-item-builder.d.ts.map +1 -0
  142. package/dist/src/feeds/generators/feed-item-builder.js +93 -0
  143. package/dist/src/feeds/generators/feed-item-builder.js.map +1 -0
  144. package/dist/src/feeds/generators/google-shopping.generator.d.ts.map +1 -1
  145. package/dist/src/feeds/generators/google-shopping.generator.js +52 -64
  146. package/dist/src/feeds/generators/google-shopping.generator.js.map +1 -1
  147. package/dist/src/feeds/generators/json-feed.generator.d.ts.map +1 -1
  148. package/dist/src/feeds/generators/json-feed.generator.js +4 -3
  149. package/dist/src/feeds/generators/json-feed.generator.js.map +1 -1
  150. package/dist/src/feeds/generators/xml-feed.generator.d.ts.map +1 -1
  151. package/dist/src/feeds/generators/xml-feed.generator.js +6 -5
  152. package/dist/src/feeds/generators/xml-feed.generator.js.map +1 -1
  153. package/dist/src/gql/generated.d.ts +13 -1
  154. package/dist/src/gql/generated.d.ts.map +1 -1
  155. package/dist/src/gql/generated.js.map +1 -1
  156. package/dist/src/index.d.ts +3 -1
  157. package/dist/src/index.d.ts.map +1 -1
  158. package/dist/src/index.js +7 -4
  159. package/dist/src/index.js.map +1 -1
  160. package/dist/src/loaders/asset/asset.loader.d.ts.map +1 -1
  161. package/dist/src/loaders/asset/asset.loader.js +5 -1
  162. package/dist/src/loaders/asset/asset.loader.js.map +1 -1
  163. package/dist/src/loaders/base/validation-builder.d.ts +128 -3
  164. package/dist/src/loaders/base/validation-builder.d.ts.map +1 -1
  165. package/dist/src/loaders/base/validation-builder.js +177 -6
  166. package/dist/src/loaders/base/validation-builder.js.map +1 -1
  167. package/dist/src/loaders/collection/collection.loader.d.ts.map +1 -1
  168. package/dist/src/loaders/collection/collection.loader.js +22 -1
  169. package/dist/src/loaders/collection/collection.loader.js.map +1 -1
  170. package/dist/src/loaders/collection/helpers.d.ts +16 -1
  171. package/dist/src/loaders/collection/helpers.d.ts.map +1 -1
  172. package/dist/src/loaders/collection/helpers.js +37 -0
  173. package/dist/src/loaders/collection/helpers.js.map +1 -1
  174. package/dist/src/loaders/customer/customer.loader.d.ts.map +1 -1
  175. package/dist/src/loaders/customer/customer.loader.js +13 -1
  176. package/dist/src/loaders/customer/customer.loader.js.map +1 -1
  177. package/dist/src/loaders/customer/helpers.d.ts +15 -3
  178. package/dist/src/loaders/customer/helpers.d.ts.map +1 -1
  179. package/dist/src/loaders/customer/helpers.js +188 -7
  180. package/dist/src/loaders/customer/helpers.js.map +1 -1
  181. package/dist/src/loaders/facet-value/facet-value.loader.d.ts.map +1 -1
  182. package/dist/src/loaders/facet-value/facet-value.loader.js +18 -0
  183. package/dist/src/loaders/facet-value/facet-value.loader.js.map +1 -1
  184. package/dist/src/loaders/facet-value/types.d.ts +1 -1
  185. package/dist/src/loaders/facet-value/types.js +1 -1
  186. package/dist/src/loaders/facet-value/types.js.map +1 -1
  187. package/dist/src/loaders/order/helpers.d.ts +16 -2
  188. package/dist/src/loaders/order/helpers.d.ts.map +1 -1
  189. package/dist/src/loaders/order/helpers.js +108 -0
  190. package/dist/src/loaders/order/helpers.js.map +1 -1
  191. package/dist/src/loaders/order/order.loader.d.ts +38 -0
  192. package/dist/src/loaders/order/order.loader.d.ts.map +1 -1
  193. package/dist/src/loaders/order/order.loader.js +238 -24
  194. package/dist/src/loaders/order/order.loader.js.map +1 -1
  195. package/dist/src/loaders/order/types.d.ts +10 -3
  196. package/dist/src/loaders/order/types.d.ts.map +1 -1
  197. package/dist/src/loaders/order/types.js +13 -2
  198. package/dist/src/loaders/order/types.js.map +1 -1
  199. package/dist/src/loaders/product/product.loader.d.ts.map +1 -1
  200. package/dist/src/loaders/product/product.loader.js +18 -2
  201. package/dist/src/loaders/product/product.loader.js.map +1 -1
  202. package/dist/src/loaders/product-variant/helpers.d.ts +20 -0
  203. package/dist/src/loaders/product-variant/helpers.d.ts.map +1 -0
  204. package/dist/src/loaders/product-variant/helpers.js +103 -0
  205. package/dist/src/loaders/product-variant/helpers.js.map +1 -0
  206. package/dist/src/loaders/product-variant/product-variant.loader.d.ts.map +1 -1
  207. package/dist/src/loaders/product-variant/product-variant.loader.js +76 -10
  208. package/dist/src/loaders/product-variant/product-variant.loader.js.map +1 -1
  209. package/dist/src/loaders/product-variant/types.d.ts +7 -0
  210. package/dist/src/loaders/product-variant/types.d.ts.map +1 -1
  211. package/dist/src/loaders/product-variant/types.js.map +1 -1
  212. package/dist/src/loaders/promotion/helpers.d.ts +29 -0
  213. package/dist/src/loaders/promotion/helpers.d.ts.map +1 -1
  214. package/dist/src/loaders/promotion/helpers.js +68 -0
  215. package/dist/src/loaders/promotion/helpers.js.map +1 -1
  216. package/dist/src/loaders/promotion/promotion.loader.d.ts.map +1 -1
  217. package/dist/src/loaders/promotion/promotion.loader.js +12 -2
  218. package/dist/src/loaders/promotion/promotion.loader.js.map +1 -1
  219. package/dist/src/loaders/shared-helpers.d.ts +42 -2
  220. package/dist/src/loaders/shared-helpers.d.ts.map +1 -1
  221. package/dist/src/loaders/shared-helpers.js +384 -5
  222. package/dist/src/loaders/shared-helpers.js.map +1 -1
  223. package/dist/src/operators/data/copy.operator.js +2 -2
  224. package/dist/src/operators/data/copy.operator.js.map +1 -1
  225. package/dist/src/operators/data/rename.operator.js +1 -1
  226. package/dist/src/operators/data/rename.operator.js.map +1 -1
  227. package/dist/src/operators/helpers.d.ts.map +1 -1
  228. package/dist/src/operators/helpers.js +11 -1
  229. package/dist/src/operators/helpers.js.map +1 -1
  230. package/dist/src/operators/operator-runtime-registry.d.ts +2 -2
  231. package/dist/src/operators/operator-runtime-registry.d.ts.map +1 -1
  232. package/dist/src/operators/operator-runtime-registry.js +1 -1
  233. package/dist/src/operators/operator-runtime-registry.js.map +1 -1
  234. package/dist/src/operators/script/script.operators.d.ts.map +1 -1
  235. package/dist/src/operators/script/script.operators.js +9 -3
  236. package/dist/src/operators/script/script.operators.js.map +1 -1
  237. package/dist/src/runtime/config-types.d.ts +6 -0
  238. package/dist/src/runtime/config-types.d.ts.map +1 -1
  239. package/dist/src/runtime/executor-helpers.d.ts +77 -0
  240. package/dist/src/runtime/executor-helpers.d.ts.map +1 -0
  241. package/dist/src/runtime/executor-helpers.js +143 -0
  242. package/dist/src/runtime/executor-helpers.js.map +1 -0
  243. package/dist/src/runtime/executors/export.executor.d.ts +3 -1
  244. package/dist/src/runtime/executors/export.executor.d.ts.map +1 -1
  245. package/dist/src/runtime/executors/export.executor.js +15 -3
  246. package/dist/src/runtime/executors/export.executor.js.map +1 -1
  247. package/dist/src/runtime/executors/exporters/export-handler-registry.d.ts.map +1 -1
  248. package/dist/src/runtime/executors/exporters/export-handler-registry.js +5 -0
  249. package/dist/src/runtime/executors/exporters/export-handler-registry.js.map +1 -1
  250. package/dist/src/runtime/executors/exporters/export-handler.types.d.ts +3 -0
  251. package/dist/src/runtime/executors/exporters/export-handler.types.d.ts.map +1 -1
  252. package/dist/src/runtime/executors/exporters/export-handler.types.js.map +1 -1
  253. package/dist/src/runtime/executors/exporters/export-helpers.d.ts +1 -0
  254. package/dist/src/runtime/executors/exporters/export-helpers.d.ts.map +1 -1
  255. package/dist/src/runtime/executors/exporters/export-helpers.js +32 -3
  256. package/dist/src/runtime/executors/exporters/export-helpers.js.map +1 -1
  257. package/dist/src/runtime/executors/exporters/http-export.handler.js +4 -4
  258. package/dist/src/runtime/executors/exporters/http-export.handler.js.map +1 -1
  259. package/dist/src/runtime/executors/extractors/file-extract.handler.d.ts.map +1 -1
  260. package/dist/src/runtime/executors/extractors/file-extract.handler.js +33 -13
  261. package/dist/src/runtime/executors/extractors/file-extract.handler.js.map +1 -1
  262. package/dist/src/runtime/executors/extractors/memory-extract.handler.d.ts.map +1 -1
  263. package/dist/src/runtime/executors/extractors/memory-extract.handler.js +17 -9
  264. package/dist/src/runtime/executors/extractors/memory-extract.handler.js.map +1 -1
  265. package/dist/src/runtime/executors/feed.executor.d.ts.map +1 -1
  266. package/dist/src/runtime/executors/feed.executor.js +11 -2
  267. package/dist/src/runtime/executors/feed.executor.js.map +1 -1
  268. package/dist/src/runtime/executors/feeds/feed-handler-registry.d.ts.map +1 -1
  269. package/dist/src/runtime/executors/feeds/feed-handler-registry.js +4 -0
  270. package/dist/src/runtime/executors/feeds/feed-handler-registry.js.map +1 -1
  271. package/dist/src/runtime/executors/gate.executor.d.ts +3 -1
  272. package/dist/src/runtime/executors/gate.executor.d.ts.map +1 -1
  273. package/dist/src/runtime/executors/gate.executor.js +47 -26
  274. package/dist/src/runtime/executors/gate.executor.js.map +1 -1
  275. package/dist/src/runtime/executors/loaders/channel-handler.d.ts +3 -1
  276. package/dist/src/runtime/executors/loaders/channel-handler.d.ts.map +1 -1
  277. package/dist/src/runtime/executors/loaders/channel-handler.js +14 -4
  278. package/dist/src/runtime/executors/loaders/channel-handler.js.map +1 -1
  279. package/dist/src/runtime/executors/loaders/collection-handler.d.ts +14 -2
  280. package/dist/src/runtime/executors/loaders/collection-handler.d.ts.map +1 -1
  281. package/dist/src/runtime/executors/loaders/collection-handler.js +93 -22
  282. package/dist/src/runtime/executors/loaders/collection-handler.js.map +1 -1
  283. package/dist/src/runtime/executors/loaders/customer-group-handler.d.ts.map +1 -1
  284. package/dist/src/runtime/executors/loaders/customer-group-handler.js +2 -27
  285. package/dist/src/runtime/executors/loaders/customer-group-handler.js.map +1 -1
  286. package/dist/src/runtime/executors/loaders/customer-handler.d.ts +6 -1
  287. package/dist/src/runtime/executors/loaders/customer-handler.d.ts.map +1 -1
  288. package/dist/src/runtime/executors/loaders/customer-handler.js +95 -13
  289. package/dist/src/runtime/executors/loaders/customer-handler.js.map +1 -1
  290. package/dist/src/runtime/executors/loaders/deletion-handler.d.ts +39 -0
  291. package/dist/src/runtime/executors/loaders/deletion-handler.d.ts.map +1 -0
  292. package/dist/src/runtime/executors/loaders/deletion-handler.js +414 -0
  293. package/dist/src/runtime/executors/loaders/deletion-handler.js.map +1 -0
  294. package/dist/src/runtime/executors/loaders/facet-handler.d.ts +18 -3
  295. package/dist/src/runtime/executors/loaders/facet-handler.d.ts.map +1 -1
  296. package/dist/src/runtime/executors/loaders/facet-handler.js +127 -26
  297. package/dist/src/runtime/executors/loaders/facet-handler.js.map +1 -1
  298. package/dist/src/runtime/executors/loaders/index.d.ts +2 -0
  299. package/dist/src/runtime/executors/loaders/index.d.ts.map +1 -1
  300. package/dist/src/runtime/executors/loaders/index.js +5 -1
  301. package/dist/src/runtime/executors/loaders/index.js.map +1 -1
  302. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.d.ts.map +1 -1
  303. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js +2 -28
  304. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js.map +1 -1
  305. package/dist/src/runtime/executors/loaders/inventory-handler.d.ts +2 -1
  306. package/dist/src/runtime/executors/loaders/inventory-handler.d.ts.map +1 -1
  307. package/dist/src/runtime/executors/loaders/inventory-handler.js +8 -6
  308. package/dist/src/runtime/executors/loaders/inventory-handler.js.map +1 -1
  309. package/dist/src/runtime/executors/loaders/loader-handler-registry.d.ts.map +1 -1
  310. package/dist/src/runtime/executors/loaders/loader-handler-registry.js +117 -3
  311. package/dist/src/runtime/executors/loaders/loader-handler-registry.js.map +1 -1
  312. package/dist/src/runtime/executors/loaders/order-handler.d.ts +31 -3
  313. package/dist/src/runtime/executors/loaders/order-handler.d.ts.map +1 -1
  314. package/dist/src/runtime/executors/loaders/order-handler.js +194 -14
  315. package/dist/src/runtime/executors/loaders/order-handler.js.map +1 -1
  316. package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts +15 -0
  317. package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts.map +1 -0
  318. package/dist/src/runtime/executors/loaders/order-upsert-handler.js +89 -0
  319. package/dist/src/runtime/executors/loaders/order-upsert-handler.js.map +1 -0
  320. package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts +11 -2
  321. package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts.map +1 -1
  322. package/dist/src/runtime/executors/loaders/payment-method-handler.js +78 -33
  323. package/dist/src/runtime/executors/loaders/payment-method-handler.js.map +1 -1
  324. package/dist/src/runtime/executors/loaders/product-handler.d.ts +14 -0
  325. package/dist/src/runtime/executors/loaders/product-handler.d.ts.map +1 -1
  326. package/dist/src/runtime/executors/loaders/product-handler.js +91 -19
  327. package/dist/src/runtime/executors/loaders/product-handler.js.map +1 -1
  328. package/dist/src/runtime/executors/loaders/promotion-handler.d.ts +9 -2
  329. package/dist/src/runtime/executors/loaders/promotion-handler.d.ts.map +1 -1
  330. package/dist/src/runtime/executors/loaders/promotion-handler.js +115 -68
  331. package/dist/src/runtime/executors/loaders/promotion-handler.js.map +1 -1
  332. package/dist/src/runtime/executors/loaders/shared-lookups.d.ts +35 -1
  333. package/dist/src/runtime/executors/loaders/shared-lookups.d.ts.map +1 -1
  334. package/dist/src/runtime/executors/loaders/shared-lookups.js +102 -0
  335. package/dist/src/runtime/executors/loaders/shared-lookups.js.map +1 -1
  336. package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts +11 -6
  337. package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts.map +1 -1
  338. package/dist/src/runtime/executors/loaders/shipping-method-handler.js +168 -61
  339. package/dist/src/runtime/executors/loaders/shipping-method-handler.js.map +1 -1
  340. package/dist/src/runtime/executors/loaders/stock-location-handler.d.ts.map +1 -1
  341. package/dist/src/runtime/executors/loaders/stock-location-handler.js +2 -27
  342. package/dist/src/runtime/executors/loaders/stock-location-handler.js.map +1 -1
  343. package/dist/src/runtime/executors/loaders/variant-handler.d.ts.map +1 -1
  344. package/dist/src/runtime/executors/loaders/variant-handler.js +85 -12
  345. package/dist/src/runtime/executors/loaders/variant-handler.js.map +1 -1
  346. package/dist/src/runtime/executors/sink-handler-registry.d.ts +7 -11
  347. package/dist/src/runtime/executors/sink-handler-registry.d.ts.map +1 -1
  348. package/dist/src/runtime/executors/sink-handler-registry.js +374 -8
  349. package/dist/src/runtime/executors/sink-handler-registry.js.map +1 -1
  350. package/dist/src/runtime/executors/sink.executor.d.ts +1 -0
  351. package/dist/src/runtime/executors/sink.executor.d.ts.map +1 -1
  352. package/dist/src/runtime/executors/sink.executor.js +82 -12
  353. package/dist/src/runtime/executors/sink.executor.js.map +1 -1
  354. package/dist/src/runtime/executors/transform.executor.d.ts.map +1 -1
  355. package/dist/src/runtime/executors/transform.executor.js +31 -2
  356. package/dist/src/runtime/executors/transform.executor.js.map +1 -1
  357. package/dist/src/runtime/orchestration/graph-executor.d.ts.map +1 -1
  358. package/dist/src/runtime/orchestration/graph-executor.js +3 -2
  359. package/dist/src/runtime/orchestration/graph-executor.js.map +1 -1
  360. package/dist/src/runtime/orchestration/helpers.d.ts +4 -1
  361. package/dist/src/runtime/orchestration/helpers.d.ts.map +1 -1
  362. package/dist/src/runtime/orchestration/helpers.js +7 -2
  363. package/dist/src/runtime/orchestration/helpers.js.map +1 -1
  364. package/dist/src/runtime/orchestration/linear-executor.d.ts.map +1 -1
  365. package/dist/src/runtime/orchestration/linear-executor.js +3 -2
  366. package/dist/src/runtime/orchestration/linear-executor.js.map +1 -1
  367. package/dist/src/runtime/orchestration/replay-executor.d.ts.map +1 -1
  368. package/dist/src/runtime/orchestration/replay-executor.js +3 -2
  369. package/dist/src/runtime/orchestration/replay-executor.js.map +1 -1
  370. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.d.ts.map +1 -1
  371. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js +12 -12
  372. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js.map +1 -1
  373. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.d.ts.map +1 -1
  374. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js +12 -12
  375. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js.map +1 -1
  376. package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js +2 -2
  377. package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js.map +1 -1
  378. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.d.ts.map +1 -1
  379. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js +12 -12
  380. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js.map +1 -1
  381. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.d.ts.map +1 -1
  382. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js +4 -3
  383. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js.map +1 -1
  384. package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js +4 -4
  385. package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js.map +1 -1
  386. package/dist/src/runtime/orchestration/types.d.ts +1 -0
  387. package/dist/src/runtime/orchestration/types.d.ts.map +1 -1
  388. package/dist/src/runtime/utils.d.ts.map +1 -1
  389. package/dist/src/runtime/utils.js +8 -1
  390. package/dist/src/runtime/utils.js.map +1 -1
  391. package/dist/src/sdk/adapters/queue/index.d.ts +1 -0
  392. package/dist/src/sdk/adapters/queue/index.d.ts.map +1 -1
  393. package/dist/src/sdk/adapters/queue/index.js +1 -0
  394. package/dist/src/sdk/adapters/queue/index.js.map +1 -1
  395. package/dist/src/sdk/adapters/queue/internal.adapter.d.ts +32 -0
  396. package/dist/src/sdk/adapters/queue/internal.adapter.d.ts.map +1 -0
  397. package/dist/src/sdk/adapters/queue/internal.adapter.js +68 -0
  398. package/dist/src/sdk/adapters/queue/internal.adapter.js.map +1 -0
  399. package/dist/src/sdk/adapters/queue/queue-adapter.registry.d.ts.map +1 -1
  400. package/dist/src/sdk/adapters/queue/queue-adapter.registry.js +3 -0
  401. package/dist/src/sdk/adapters/queue/queue-adapter.registry.js.map +1 -1
  402. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.d.ts.map +1 -1
  403. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js +2 -1
  404. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js.map +1 -1
  405. package/dist/src/sdk/constants.d.ts +2 -2
  406. package/dist/src/sdk/constants.d.ts.map +1 -1
  407. package/dist/src/sdk/dsl/pipeline-builder.d.ts +8 -2
  408. package/dist/src/sdk/dsl/pipeline-builder.d.ts.map +1 -1
  409. package/dist/src/sdk/dsl/pipeline-builder.js +115 -19
  410. package/dist/src/sdk/dsl/pipeline-builder.js.map +1 -1
  411. package/dist/src/sdk/dsl/step-configs.d.ts +73 -7
  412. package/dist/src/sdk/dsl/step-configs.d.ts.map +1 -1
  413. package/dist/src/services/events/consumer-discovery.d.ts.map +1 -1
  414. package/dist/src/services/events/consumer-discovery.js +13 -11
  415. package/dist/src/services/events/consumer-discovery.js.map +1 -1
  416. package/dist/src/services/events/consumer-lifecycle.d.ts.map +1 -1
  417. package/dist/src/services/events/consumer-lifecycle.js +19 -15
  418. package/dist/src/services/events/consumer-lifecycle.js.map +1 -1
  419. package/dist/src/services/events/event-trigger.service.d.ts.map +1 -1
  420. package/dist/src/services/events/event-trigger.service.js +8 -3
  421. package/dist/src/services/events/event-trigger.service.js.map +1 -1
  422. package/dist/src/services/events/hook.service.d.ts.map +1 -1
  423. package/dist/src/services/events/hook.service.js +7 -3
  424. package/dist/src/services/events/hook.service.js.map +1 -1
  425. package/dist/src/services/events/message-processing.d.ts.map +1 -1
  426. package/dist/src/services/events/message-processing.js +13 -8
  427. package/dist/src/services/events/message-processing.js.map +1 -1
  428. package/dist/src/services/logger/datahub-logger.d.ts +7 -0
  429. package/dist/src/services/logger/datahub-logger.d.ts.map +1 -1
  430. package/dist/src/services/logger/datahub-logger.js +9 -0
  431. package/dist/src/services/logger/datahub-logger.js.map +1 -1
  432. package/dist/src/services/pipeline/pipeline-runner.service.d.ts +3 -1
  433. package/dist/src/services/pipeline/pipeline-runner.service.d.ts.map +1 -1
  434. package/dist/src/services/pipeline/pipeline-runner.service.js +14 -4
  435. package/dist/src/services/pipeline/pipeline-runner.service.js.map +1 -1
  436. package/dist/src/services/pipeline/pipeline.service.d.ts.map +1 -1
  437. package/dist/src/services/pipeline/pipeline.service.js +8 -2
  438. package/dist/src/services/pipeline/pipeline.service.js.map +1 -1
  439. package/dist/src/services/storage/retention.service.d.ts.map +1 -1
  440. package/dist/src/services/storage/retention.service.js +22 -0
  441. package/dist/src/services/storage/retention.service.js.map +1 -1
  442. package/dist/src/services/testing/step-test.service.d.ts.map +1 -1
  443. package/dist/src/services/testing/step-test.service.js +17 -1
  444. package/dist/src/services/testing/step-test.service.js.map +1 -1
  445. package/dist/src/services/validation/definition-validation.service.d.ts.map +1 -1
  446. package/dist/src/services/validation/definition-validation.service.js +4 -1
  447. package/dist/src/services/validation/definition-validation.service.js.map +1 -1
  448. package/dist/src/services/validation/trigger-validation.d.ts.map +1 -1
  449. package/dist/src/services/validation/trigger-validation.js +79 -12
  450. package/dist/src/services/validation/trigger-validation.js.map +1 -1
  451. package/dist/src/types/index.d.ts +1 -0
  452. package/dist/src/types/index.d.ts.map +1 -1
  453. package/dist/src/types/index.js.map +1 -1
  454. package/dist/src/types/loader-configs.d.ts +1071 -0
  455. package/dist/src/types/loader-configs.d.ts.map +1 -0
  456. package/dist/src/types/loader-configs.js +54 -0
  457. package/dist/src/types/loader-configs.js.map +1 -0
  458. package/dist/src/types/step-configs.d.ts +14 -5
  459. package/dist/src/types/step-configs.d.ts.map +1 -1
  460. package/dist/src/types/step-configs.js +3 -0
  461. package/dist/src/types/step-configs.js.map +1 -1
  462. package/dist/src/utils/code-security.utils.d.ts +18 -0
  463. package/dist/src/utils/code-security.utils.d.ts.map +1 -1
  464. package/dist/src/utils/code-security.utils.js +125 -9
  465. package/dist/src/utils/code-security.utils.js.map +1 -1
  466. package/dist/src/validation/pipeline-definition.validator.js +2 -1
  467. package/dist/src/validation/pipeline-definition.validator.js.map +1 -1
  468. package/docs/developer-guide/README.md +2 -0
  469. package/docs/developer-guide/dsl/pipeline-builder.md +12 -0
  470. package/docs/developer-guide/extending/README.md +230 -10
  471. package/docs/developer-guide/extending/custom-sinks.md +87 -0
  472. package/docs/developer-guide/extending/events.md +4 -1
  473. package/docs/examples/validation-error-messages.md +246 -0
  474. package/docs/guides/multi-channel.md +1190 -0
  475. package/docs/guides/multi-currency.md +881 -0
  476. package/docs/guides/multi-entity.md +597 -0
  477. package/docs/guides/multi-language.md +957 -0
  478. package/docs/reference/README.md +11 -4
  479. package/docs/reference/extractors.md +30 -0
  480. package/docs/reference/loaders.md +359 -21
  481. package/docs/reference/operators-complete.md +1251 -0
  482. package/docs/reference/operators.md +36 -2
  483. package/docs/reference/sinks.md +7 -6
  484. package/docs/reference/step-types.md +12 -5
  485. package/docs/user-guide/pipelines.md +82 -13
  486. package/package.json +1 -1
  487. package/shared/types/adapter-config.types.ts +162 -2
  488. package/shared/types/index.ts +12 -0
  489. package/shared/types/loader.types.ts +4 -0
  490. package/shared/types/step.types.ts +6 -0
  491. package/shared/types/trigger.types.ts +0 -4
@@ -289,7 +289,7 @@ Enrich records by fetching data from external HTTP endpoints with caching, authe
289
289
  | `basicAuthSecretCode` | string | No | Secret code for Basic auth (username:password) |
290
290
  | `bodyField` | string | No | Field path for POST body (uses record value at this path) |
291
291
  | `body` | json | No | Static POST body (JSON object) |
292
- | `skipOn404` | boolean | No | Skip record if endpoint returns 404 |
292
+ | `skipOn404` | boolean | No | Remove record from pipeline if endpoint returns 404 (see note below) |
293
293
  | `failOnError` | boolean | No | Fail pipeline if HTTP request fails |
294
294
  | `maxRetries` | number | No | Maximum retry attempts on transient errors |
295
295
  | `batchSize` | number | No | Process this many records in parallel (default: 50) |
@@ -322,6 +322,8 @@ Enrich records by fetching data from external HTTP endpoints with caching, authe
322
322
  } }
323
323
  ```
324
324
 
325
+ > **`skipOn404` behavior:** When `skipOn404: true` and the enrichment HTTP lookup returns a 404, the record is **removed from the pipeline** (not passed through with original values). To preserve records when enrichment fails, use `default` to provide a fallback value instead.
326
+
325
327
  ---
326
328
 
327
329
  ## String Operators
@@ -697,6 +699,8 @@ Add or subtract time from a date.
697
699
  | `amount` | number | Yes | Amount (negative to subtract) |
698
700
  | `unit` | string | Yes | `seconds`, `minutes`, `hours`, `days`, `weeks`, `months`, `years` |
699
701
 
702
+ > **Important:** Unit strings must be plural: `"days"`, `"hours"`, `"minutes"`, `"seconds"`, `"weeks"`, `"months"`, `"years"`. Singular forms like `"day"` are not supported.
703
+
700
704
  ```typescript
701
705
  { op: 'dateAdd', args: { source: 'orderDate', target: 'expiresAt', amount: 30, unit: 'days' } }
702
706
  { op: 'dateAdd', args: { source: 'createdAt', target: 'previousDay', amount: -1, unit: 'days' } }
@@ -714,6 +718,8 @@ Calculate the difference between two dates.
714
718
  | `unit` | select | Yes | `seconds`, `minutes`, `hours`, `days`, `weeks`, `months`, `years` |
715
719
  | `absolute` | boolean | No | Return absolute value (no negative numbers) |
716
720
 
721
+ > **Important:** Unit strings must be plural: `"days"`, `"hours"`, `"minutes"`, `"seconds"`, `"weeks"`, `"months"`, `"years"`. Singular forms like `"day"` are not supported.
722
+
717
723
  ```typescript
718
724
  { op: 'dateDiff', args: { startDate: 'createdAt', endDate: 'completedAt', target: 'durationDays', unit: 'days' } }
719
725
  { op: 'dateDiff', args: { startDate: 'orderDate', endDate: 'deliveryDate', target: 'deliveryHours', unit: 'hours', absolute: true } }
@@ -748,7 +754,7 @@ Filter records by conditions.
748
754
  | `conditions` | array | Yes | Array of condition objects |
749
755
  | `action` | string | Yes | `keep` or `drop` |
750
756
 
751
- Condition operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `notIn`, `contains`, `notContains`, `startsWith`, `endsWith`, `regex`, `exists`, `isNull`
757
+ Condition operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `notIn`, `contains`, `notContains`, `startsWith`, `endsWith`, `regex`, `exists`, `notExists`, `isNull`, `isEmpty`, `isNotEmpty`, `matches` (glob)
752
758
 
753
759
  ```typescript
754
760
  { op: 'when', args: {
@@ -805,6 +811,34 @@ Set a value based on multiple conditions.
805
811
  }}
806
812
  ```
807
813
 
814
+ ### Comparison Operators
815
+
816
+ All 19 comparison operators used by `when`, `ifThenElse`, `switch`, and ROUTE step conditions:
817
+
818
+ | Operator | Description | Example |
819
+ |----------|-------------|---------|
820
+ | `eq` | Equal (strict `===`) | `{ field: 'status', cmp: 'eq', value: 'active' }` |
821
+ | `ne` | Not equal (strict `!==`) | `{ field: 'status', cmp: 'ne', value: 'deleted' }` |
822
+ | `gt` | Greater than (numeric) | `{ field: 'price', cmp: 'gt', value: 0 }` |
823
+ | `gte` | Greater than or equal (numeric) | `{ field: 'stock', cmp: 'gte', value: 10 }` |
824
+ | `lt` | Less than (numeric) | `{ field: 'price', cmp: 'lt', value: 1000 }` |
825
+ | `lte` | Less than or equal (numeric) | `{ field: 'weight', cmp: 'lte', value: 50 }` |
826
+ | `in` | Value in array | `{ field: 'status', cmp: 'in', value: ['active', 'pending'] }` |
827
+ | `notIn` | Value not in array | `{ field: 'status', cmp: 'notIn', value: ['deleted', 'archived'] }` |
828
+ | `contains` | String contains substring | `{ field: 'name', cmp: 'contains', value: 'widget' }` |
829
+ | `notContains` | String does not contain | `{ field: 'name', cmp: 'notContains', value: 'test' }` |
830
+ | `startsWith` | String starts with | `{ field: 'sku', cmp: 'startsWith', value: 'PRD-' }` |
831
+ | `endsWith` | String ends with | `{ field: 'email', cmp: 'endsWith', value: '@example.com' }` |
832
+ | `regex` | Regular expression match | `{ field: 'sku', cmp: 'regex', value: '^[A-Z]{3}-\\d+$' }` |
833
+ | `matches` | Glob pattern match | `{ field: 'path', cmp: 'matches', value: '/products/**/*.json' }` |
834
+ | `exists` | Value is not null/undefined | `{ field: 'email', cmp: 'exists', value: true }` |
835
+ | `notExists` | Value is null or undefined | `{ field: 'deletedAt', cmp: 'notExists', value: true }` |
836
+ | `isNull` | Value is null or undefined | `{ field: 'description', cmp: 'isNull', value: true }` |
837
+ | `isEmpty` | Empty string, null, undefined, or empty array | `{ field: 'tags', cmp: 'isEmpty', value: true }` |
838
+ | `isNotEmpty` | Non-empty value (string, array, etc.) | `{ field: 'name', cmp: 'isNotEmpty', value: true }` |
839
+
840
+ ---
841
+
808
842
  ### deltaFilter
809
843
 
810
844
  Filter out unchanged records using stable hashing.
@@ -352,14 +352,13 @@ Adjust batch size based on:
352
352
 
353
353
  ### Concurrency
354
354
 
355
- For large datasets, use multiple workers:
355
+ For large datasets, configure parallel processing per pipeline step:
356
356
 
357
357
  ```typescript
358
- DataHubPlugin.init({
359
- jobQueueOptions: {
360
- concurrency: 4,
361
- },
362
- })
358
+ {
359
+ batchSize: 500,
360
+ rateLimitPerSecond: 100, // Adjust based on target system capacity
361
+ }
363
362
  ```
364
363
 
365
364
  ### Refresh Strategy
@@ -469,6 +468,8 @@ Send records to an HTTP endpoint via POST requests.
469
468
  | `batchSize` | number | No | Records per request |
470
469
  | `timeoutMs` | number | No | Request timeout in milliseconds (default: 30000) |
471
470
  | `retries` | number | No | Maximum retry attempts on failure (default: 3) |
471
+ | `hmacSecretCode` | string | No | Secret code for HMAC signing. When set, each request includes an HMAC-SHA256 signature computed over the request body |
472
+ | `signatureHeaderName` | string | No | Header name for the HMAC signature (default: `X-DataHub-Signature`) |
472
473
 
473
474
  ### Example - Single Records with Bearer Auth
474
475
 
@@ -78,8 +78,15 @@ See [Pipeline Builder - enrich](../developer-guide/dsl/pipeline-builder.md#enric
78
78
 
79
79
  Splits data flow based on field conditions. Each branch defines a set of
80
80
  conditions using comparison operators (`eq`, `ne`, `gt`, `lt`, `in`,
81
- `contains`, `regex`, etc.). An optional `defaultTo` branch handles
82
- unmatched records.
81
+ `contains`, `regex`, etc.).
82
+
83
+ > **Unmatched records:** In graph execution mode, records that don't match any
84
+ > branch condition are collected into a `default` branch. In linear execution
85
+ > mode, if no branch matches any records, the step returns an empty result and
86
+ > unmatched records are silently dropped. A warning is logged when records are
87
+ > dropped. To ensure all records are handled, add a catch-all branch with
88
+ > `{ name: 'fallback', when: [] }` (no conditions = always matches) as the
89
+ > last branch.
83
90
 
84
91
  See [Pipeline Builder - route](../developer-guide/dsl/pipeline-builder.md#route) for configuration.
85
92
 
@@ -87,9 +94,9 @@ See [Pipeline Builder - route](../developer-guide/dsl/pipeline-builder.md#route)
87
94
 
88
95
  ## LOAD
89
96
 
90
- Creates, updates, or deletes Vendure entities. Supports 22 entity types
91
- including products, variants, customers, collections, facets, orders,
92
- promotions, assets, and more.
97
+ Creates, updates, or deletes Vendure entities. Supports 24 loader codes
98
+ including products, variants, customers, collections, facets, orders (upsert, notes, transitions, coupons),
99
+ promotions, assets, inventory, entity deletion, and more.
93
100
 
94
101
  **Strategies:** `CREATE`, `UPDATE`, `UPSERT`, `MERGE`, `SOFT_DELETE`, `HARD_DELETE`
95
102
 
@@ -217,19 +217,25 @@ Hooks allow you to execute custom code at specific stages of pipeline execution.
217
217
  | `AFTER_ENRICH` | After enrichment | Yes |
218
218
  | `BEFORE_ROUTE` | Before routing | Yes |
219
219
  | `AFTER_ROUTE` | After routing | Yes |
220
- | `BEFORE_LOAD` | Before loading | Yes |
221
- | `AFTER_LOAD` | After loading | No |
222
-
223
- **Lifecycle Stages:**
224
-
225
- | Stage | When It Runs |
226
- |-------|--------------|
227
- | `PIPELINE_STARTED` | Pipeline execution begins |
228
- | `PIPELINE_COMPLETED` | Pipeline finishes successfully |
229
- | `PIPELINE_FAILED` | Pipeline fails |
230
- | `ON_ERROR` | When an error occurs |
231
- | `ON_RETRY` | When a record is retried |
232
- | `ON_DEAD_LETTER` | When a record is sent to dead letter queue |
220
+ | `BEFORE_LOAD` | Before loading to Vendure | Yes |
221
+ | `AFTER_LOAD` | After loading | Yes |
222
+ | `BEFORE_EXPORT` | Before file export | Yes |
223
+ | `AFTER_EXPORT` | After file export | Yes |
224
+ | `BEFORE_FEED` | Before feed generation | Yes |
225
+ | `AFTER_FEED` | After feed generation | Yes |
226
+ | `BEFORE_SINK` | Before search indexing | Yes |
227
+ | `AFTER_SINK` | After search indexing | Yes |
228
+
229
+ **Lifecycle Stages** (observe-only WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE only, no INTERCEPTOR/SCRIPT):
230
+
231
+ | Stage | When It Runs | Supported Hook Types |
232
+ |-------|--------------|---------------------|
233
+ | `PIPELINE_STARTED` | Pipeline execution begins | WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE |
234
+ | `PIPELINE_COMPLETED` | Pipeline finishes successfully | WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE |
235
+ | `PIPELINE_FAILED` | Pipeline fails | WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE |
236
+ | `ON_ERROR` | When an error occurs | WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE |
237
+ | `ON_RETRY` | When a record is retried | WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE |
238
+ | `ON_DEAD_LETTER` | When a record is sent to dead letter queue | WEBHOOK, EMIT, LOG, TRIGGER_PIPELINE |
233
239
 
234
240
  ### Hook Types
235
241
 
@@ -262,6 +268,43 @@ Interceptors run JavaScript code that can modify the records array:
262
268
  })
263
269
  ```
264
270
 
271
+ **Modify records before search indexing (Meilisearch, Elasticsearch, etc.):**
272
+
273
+ ```typescript
274
+ .hooks({
275
+ BEFORE_SINK: [{
276
+ type: 'INTERCEPTOR',
277
+ name: 'Enrich for search',
278
+ code: `
279
+ return records.map(r => ({
280
+ ...r,
281
+ searchText: [r.name, r.sku, r.description].filter(Boolean).join(' ').toLowerCase(),
282
+ facetTags: (r.tags || '').split(',').map(t => t.trim()).filter(Boolean),
283
+ boostScore: r.featured ? 1.5 : 1.0,
284
+ }));
285
+ `,
286
+ }],
287
+ })
288
+ ```
289
+
290
+ **Transform records before CSV/JSON export:**
291
+
292
+ ```typescript
293
+ .hooks({
294
+ BEFORE_EXPORT: [{
295
+ type: 'INTERCEPTOR',
296
+ name: 'Format for export',
297
+ code: `
298
+ return records.map(r => ({
299
+ ...r,
300
+ price: (r.price / 100).toFixed(2),
301
+ createdAt: new Date(r.createdAt).toISOString(),
302
+ }));
303
+ `,
304
+ }],
305
+ })
306
+ ```
307
+
265
308
  **Available in interceptor code:**
266
309
  - `records` - The current records array
267
310
  - `context` - Hook context with `pipelineId`, `runId`, `stage`
@@ -319,6 +362,10 @@ export class MyPlugin implements OnModuleInit {
319
362
  }
320
363
  ```
321
364
 
365
+ > **Tip:** When registering scripts via `HookService.registerScript()` in a NestJS service,
366
+ > your scripts can access any injected service (database, external APIs, Vendure services)
367
+ > through JavaScript closures. See the [Developer Guide](../developer-guide/extending/README.md#hook-capabilities--limitations) for examples.
368
+
322
369
  **Use in pipeline:**
323
370
 
324
371
  ```typescript
@@ -335,6 +382,28 @@ export class MyPlugin implements OnModuleInit {
335
382
  })
336
383
  ```
337
384
 
385
+ **Register a script for search index enrichment:**
386
+
387
+ ```typescript
388
+ DataHubPlugin.init({
389
+ scripts: {
390
+ 'buildSearchAttributes': async (records, context) => {
391
+ return records.map(r => ({
392
+ ...r,
393
+ searchText: [r.name, r.sku, r.description]
394
+ .filter(Boolean).join(' ').toLowerCase(),
395
+ facetCategories: r.categories?.map(c => c.name) || [],
396
+ }));
397
+ },
398
+ },
399
+ })
400
+
401
+ // Use in pipeline:
402
+ .hooks({
403
+ BEFORE_SINK: [{ type: 'SCRIPT', scriptName: 'buildSearchAttributes' }],
404
+ })
405
+ ```
406
+
338
407
  #### Webhook Hooks
339
408
 
340
409
  Send HTTP notifications to external systems:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oronts/vendure-data-hub-plugin",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "ETL data integration plugin for Vendure e-commerce",
5
5
  "author": {
6
6
  "name": "Oronts Website",
@@ -338,6 +338,12 @@ export interface ProductUpsertLoaderConfig {
338
338
  descriptionField?: string;
339
339
  /** Field containing product enabled/published flag */
340
340
  enabledField?: string;
341
+ /** Record field containing channel codes (array or comma-separated) for dynamic per-record channel assignment */
342
+ channelsField?: string;
343
+ /** Record field containing translations array or object map for multi-language support.
344
+ * Array format: [{ languageCode: 'en', name: '...', slug?: '...', description?: '...' }, ...]
345
+ * Object map: { en: { name, slug?, description? }, de: { ... } } */
346
+ translationsField?: string;
341
347
  /** Field containing SKU */
342
348
  skuField?: string;
343
349
  /** Field containing price */
@@ -354,6 +360,12 @@ export interface ProductUpsertLoaderConfig {
354
360
  customFieldsField?: string;
355
361
  /** Whether to create/update variants alongside the product (default: true). Set to false when variants are handled by a separate variantUpsert step. */
356
362
  createVariants?: boolean;
363
+ /** How to handle product facet values on update */
364
+ facetValuesMode?: FacetValuesMode;
365
+ /** How to handle product assets on update */
366
+ assetsMode?: AssetsMode;
367
+ /** How to handle product featured asset on update */
368
+ featuredAssetMode?: FeaturedAssetMode;
357
369
  }
358
370
 
359
371
  /** Variant Upsert Loader */
@@ -365,6 +377,14 @@ export interface VariantUpsertLoaderConfig {
365
377
  skuField?: string;
366
378
  /** Field containing variant name */
367
379
  nameField?: string;
380
+ /** Field containing variant enabled/published flag (defaults to "enabled") */
381
+ enabledField?: string;
382
+ /** Record field containing channel codes (array or comma-separated) for dynamic per-record channel assignment */
383
+ channelsField?: string;
384
+ /** Record field containing translations array or object map for multi-language support.
385
+ * Array format: [{ languageCode: 'en', name: '...' }, ...]
386
+ * Object map: { en: { name: '...' }, de: { name: '...' } } */
387
+ translationsField?: string;
368
388
  /** Field containing price (major units, auto-converted to minor) */
369
389
  priceField?: string;
370
390
  /** Field containing price map by currency code (object, e.g. { USD: 19.99, EUR: 17.50 }) */
@@ -388,8 +408,48 @@ export interface VariantUpsertLoaderConfig {
388
408
  * CREATE: only create new variants, skip existing.
389
409
  * UPDATE: only update existing variants, skip missing. */
390
410
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
411
+ /** How to handle variant facet values on update */
412
+ facetValuesMode?: FacetValuesMode;
413
+ /** How to handle variant assets on update */
414
+ assetsMode?: AssetsMode;
415
+ /** How to handle variant featured asset on update */
416
+ featuredAssetMode?: FeaturedAssetMode;
417
+ /** How to handle variant options on update */
418
+ optionsMode?: OptionsMode;
391
419
  }
392
420
 
421
+ // NESTED ENTITY MODE TYPES
422
+
423
+ /** How to handle customer addresses on update */
424
+ export type AddressesMode = 'UPSERT_BY_MATCH' | 'REPLACE_ALL' | 'APPEND_ONLY' | 'UPDATE_BY_ID' | 'SKIP';
425
+
426
+ /** How to handle facet values on product/variant update */
427
+ export type FacetValuesMode = 'REPLACE_ALL' | 'MERGE' | 'REMOVE' | 'SKIP';
428
+
429
+ /** How to handle order lines on order update */
430
+ export type LinesMode = 'REPLACE_ALL' | 'MERGE_BY_SKU' | 'APPEND_ONLY' | 'UPDATE_BY_ID' | 'SKIP';
431
+
432
+ /** How to handle assets (product/variant/collection) */
433
+ export type AssetsMode = 'UPSERT_BY_URL' | 'REPLACE_ALL' | 'APPEND_ONLY' | 'SKIP';
434
+
435
+ /** How to handle featured asset (product/variant) */
436
+ export type FeaturedAssetMode = 'UPSERT_BY_URL' | 'REPLACE' | 'SKIP';
437
+
438
+ /** How to handle variant options */
439
+ export type OptionsMode = 'REPLACE_ALL' | 'MERGE' | 'SKIP';
440
+
441
+ /** How to handle collection filters */
442
+ export type FiltersMode = 'REPLACE_ALL' | 'MERGE' | 'SKIP';
443
+
444
+ /** How to handle promotion conditions */
445
+ export type ConditionsMode = 'REPLACE_ALL' | 'MERGE' | 'SKIP';
446
+
447
+ /** How to handle promotion actions */
448
+ export type ActionsMode = 'REPLACE_ALL' | 'MERGE' | 'SKIP';
449
+
450
+ /** How to handle customer groups */
451
+ export type GroupsMode = 'add' | 'set';
452
+
393
453
  /** Customer Upsert Loader */
394
454
  export interface CustomerUpsertLoaderConfig {
395
455
  adapterCode: 'customerUpsert';
@@ -403,10 +463,14 @@ export interface CustomerUpsertLoaderConfig {
403
463
  phoneNumberField?: string;
404
464
  /** Field containing addresses array */
405
465
  addressesField?: string;
466
+ /** How to handle customer addresses on update */
467
+ addressesMode?: AddressesMode;
468
+ /** Comma-separated fields to match existing addresses (for UPSERT_BY_MATCH mode) */
469
+ addressMatchFields?: string;
406
470
  /** Field containing group codes */
407
471
  groupsField?: string;
408
472
  /** Groups mode */
409
- groupsMode?: 'add' | 'set';
473
+ groupsMode?: GroupsMode;
410
474
  /** Field containing custom fields object */
411
475
  customFieldsField?: string;
412
476
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
@@ -457,6 +521,43 @@ export interface RestPostLoaderConfig {
457
521
  timeoutMs?: number;
458
522
  }
459
523
 
524
+ /** Order Upsert Loader */
525
+ export interface OrderUpsertLoaderConfig {
526
+ adapterCode: 'orderUpsert';
527
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
528
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
529
+ /** Lookup fields for matching existing orders */
530
+ lookupFields?: string;
531
+ /** Field containing order code */
532
+ codeField?: string;
533
+ /** Field containing customer email */
534
+ customerEmailField?: string;
535
+ /** Field containing order lines array */
536
+ linesField?: string;
537
+ /** How to handle order lines on update */
538
+ linesMode?: LinesMode;
539
+ /** Field to match order lines by (for MERGE_BY_SKU and UPDATE_BY_ID modes, default: 'sku') */
540
+ linesMatchBy?: string;
541
+ /** Field containing shipping address */
542
+ shippingAddressField?: string;
543
+ /** Field containing billing address */
544
+ billingAddressField?: string;
545
+ /** Field containing shipping method code */
546
+ shippingMethodCodeField?: string;
547
+ /** Payment method code */
548
+ paymentMethodCode?: string;
549
+ /** Field containing payment method code */
550
+ paymentMethodCodeField?: string;
551
+ /** Target state */
552
+ state?: string;
553
+ /** Field containing state */
554
+ stateField?: string;
555
+ /** Field containing order placed at date */
556
+ orderPlacedAtField?: string;
557
+ /** Field containing custom fields object */
558
+ customFieldsField?: string;
559
+ }
560
+
460
561
  /** Order Note Loader */
461
562
  export interface OrderNoteLoaderConfig {
462
563
  adapterCode: 'orderNote';
@@ -498,8 +599,18 @@ export interface CollectionUpsertLoaderConfig {
498
599
  parentSlugField?: string;
499
600
  /** Apply collection filters after upsert */
500
601
  applyFilters?: boolean;
602
+ /** Field containing multi-language translations (array or object map) */
603
+ translationsField?: string;
604
+ /** Field containing channel codes for per-record channel assignment */
605
+ channelsField?: string;
606
+ /** Field containing isPrivate flag */
607
+ isPrivateField?: string;
501
608
  /** Field containing custom fields object */
502
609
  customFieldsField?: string;
610
+ /** How to handle collection assets on update */
611
+ assetsMode?: AssetsMode;
612
+ /** How to handle collection filters on update */
613
+ filtersMode?: FiltersMode;
503
614
  }
504
615
 
505
616
  /** Asset Attach Loader */
@@ -541,14 +652,24 @@ export interface PromotionUpsertLoaderConfig {
541
652
  perCustomerUsageLimitField?: string;
542
653
  /** Field containing conditions */
543
654
  conditionsField?: string;
655
+ /** How to handle promotion conditions on update */
656
+ conditionsMode?: ConditionsMode;
544
657
  /** Field containing actions */
545
658
  actionsField?: string;
659
+ /** How to handle promotion actions on update */
660
+ actionsMode?: ActionsMode;
546
661
  /** Channel code */
547
662
  channel?: string;
548
663
  /** Field containing custom fields object */
549
664
  customFieldsField?: string;
550
665
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
551
666
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
667
+ /** Field containing multi-language translations (array or object map) */
668
+ translationsField?: string;
669
+ /** Field containing channel codes for per-record channel assignment */
670
+ channelsField?: string;
671
+ /** Field containing promotion description */
672
+ descriptionField?: string;
552
673
  }
553
674
 
554
675
  /** GraphQL Mutation Loader */
@@ -595,6 +716,10 @@ export interface FacetUpsertLoaderConfig {
595
716
  customFieldsField?: string;
596
717
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
597
718
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
719
+ /** Field containing multi-language translations (array or object map) */
720
+ translationsField?: string;
721
+ /** Field containing channel codes for per-record channel assignment */
722
+ channelsField?: string;
598
723
  }
599
724
 
600
725
  /** Facet Value Upsert Loader */
@@ -612,6 +737,10 @@ export interface FacetValueUpsertLoaderConfig {
612
737
  customFieldsField?: string;
613
738
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
614
739
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
740
+ /** Field containing multi-language translations (array or object map) */
741
+ translationsField?: string;
742
+ /** Field containing channel codes for per-record channel assignment */
743
+ channelsField?: string;
615
744
  }
616
745
 
617
746
  /** Asset Import Loader */
@@ -665,8 +794,14 @@ export interface PaymentMethodUpsertLoaderConfig {
665
794
  handlerField: string;
666
795
  /** Field containing eligibility checker config { code, args } */
667
796
  checkerField?: string;
797
+ /** Field containing custom fields object */
798
+ customFieldsField?: string;
668
799
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
669
800
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
801
+ /** Field containing multi-language translations (array or object map) */
802
+ translationsField?: string;
803
+ /** Field containing channel codes for per-record channel assignment */
804
+ channelsField?: string;
670
805
  }
671
806
 
672
807
  /** Channel Upsert Loader */
@@ -692,6 +827,8 @@ export interface ChannelUpsertLoaderConfig {
692
827
  defaultShippingZoneCodeField?: string;
693
828
  /** Field containing seller ID (for multi-vendor) */
694
829
  sellerIdField?: string;
830
+ /** Field containing custom fields object */
831
+ customFieldsField?: string;
695
832
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
696
833
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
697
834
  }
@@ -711,8 +848,14 @@ export interface ShippingMethodUpsertLoaderConfig {
711
848
  calculatorField: string;
712
849
  /** Field containing eligibility checker config { code, args } */
713
850
  checkerField?: string;
851
+ /** Field containing custom fields object */
852
+ customFieldsField?: string;
714
853
  /** Load strategy: UPSERT (default), CREATE, or UPDATE */
715
854
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
855
+ /** Field containing multi-language translations (array or object map) */
856
+ translationsField?: string;
857
+ /** Field containing channel codes for per-record channel assignment */
858
+ channelsField?: string;
716
859
  }
717
860
 
718
861
  /** Customer Group Upsert Loader */
@@ -754,6 +897,21 @@ export interface InventoryAdjustLoaderConfig {
754
897
  strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
755
898
  }
756
899
 
900
+ /** Entity Deletion Loader - Delete entities */
901
+ export interface EntityDeletionLoaderConfig {
902
+ adapterCode: 'entityDeletion';
903
+ /** Entity type to delete (default: 'product') */
904
+ entityType?: 'product' | 'variant' | 'collection' | 'promotion' | 'shipping-method' | 'customer' | 'payment-method' | 'facet' | 'facet-value' | 'customer-group' | 'tax-rate' | 'asset' | 'stock-location';
905
+ /** Record field containing the identifier to match (default depends on entity type) */
906
+ identifierField?: string;
907
+ /** How to match the entity (default depends on entity type) */
908
+ matchBy?: 'slug' | 'sku' | 'id' | 'code' | 'email' | 'name';
909
+ /** Delete variants when deleting a product (default: true) */
910
+ cascadeVariants?: boolean;
911
+ /** Channel code */
912
+ channel?: string;
913
+ }
914
+
757
915
  /** Generic config for custom loader adapters */
758
916
  export interface GenericLoaderConfig {
759
917
  adapterCode: string;
@@ -765,6 +923,7 @@ export type TypedLoaderConfig =
765
923
  | ProductUpsertLoaderConfig
766
924
  | VariantUpsertLoaderConfig
767
925
  | CustomerUpsertLoaderConfig
926
+ | OrderUpsertLoaderConfig
768
927
  | StockAdjustLoaderConfig
769
928
  | RestPostLoaderConfig
770
929
  | GraphqlMutationLoaderConfig
@@ -784,6 +943,7 @@ export type TypedLoaderConfig =
784
943
  | CustomerGroupUpsertLoaderConfig
785
944
  | StockLocationUpsertLoaderConfig
786
945
  | InventoryAdjustLoaderConfig
946
+ | EntityDeletionLoaderConfig
787
947
  | GenericLoaderConfig;
788
948
 
789
949
  // EXPORTER CONFIGS
@@ -972,7 +1132,7 @@ export interface RouteConfig {
972
1132
  // PERMISSION MAPPINGS
973
1133
 
974
1134
  /** Loader adapter codes that require UpdateCatalog permission */
975
- export type UpdateCatalogLoaders = 'productUpsert' | 'variantUpsert' | 'stockAdjust' | 'collectionUpsert' | 'assetAttach' | 'assetImport' | 'facetUpsert' | 'facetValueUpsert' | 'stockLocationUpsert' | 'inventoryAdjust';
1135
+ export type UpdateCatalogLoaders = 'productUpsert' | 'variantUpsert' | 'stockAdjust' | 'collectionUpsert' | 'assetAttach' | 'assetImport' | 'facetUpsert' | 'facetValueUpsert' | 'stockLocationUpsert' | 'inventoryAdjust' | 'entityDeletion';
976
1136
 
977
1137
  /** Loader adapter codes that require UpdateCustomer permission */
978
1138
  export type UpdateCustomerLoaders = 'customerUpsert' | 'customerGroupUpsert';
@@ -305,6 +305,16 @@ export type {
305
305
  } from './runtime-config.types';
306
306
 
307
307
  export type {
308
+ AddressesMode,
309
+ FacetValuesMode,
310
+ LinesMode,
311
+ AssetsMode,
312
+ FeaturedAssetMode,
313
+ OptionsMode,
314
+ FiltersMode,
315
+ ConditionsMode,
316
+ ActionsMode,
317
+ GroupsMode,
308
318
  CsvExtractorConfig,
309
319
  JsonExtractorConfig,
310
320
  ExcelExtractorConfig,
@@ -330,6 +340,7 @@ export type {
330
340
  ProductUpsertLoaderConfig,
331
341
  VariantUpsertLoaderConfig,
332
342
  CustomerUpsertLoaderConfig,
343
+ OrderUpsertLoaderConfig,
333
344
  StockAdjustLoaderConfig,
334
345
  RestPostLoaderConfig,
335
346
  GraphqlMutationLoaderConfig,
@@ -349,6 +360,7 @@ export type {
349
360
  CustomerGroupUpsertLoaderConfig,
350
361
  StockLocationUpsertLoaderConfig,
351
362
  InventoryAdjustLoaderConfig,
363
+ EntityDeletionLoaderConfig,
352
364
  GenericLoaderConfig,
353
365
  TypedLoaderConfig,
354
366
  CsvExportConfig,
@@ -23,6 +23,8 @@ export interface LoaderOptions {
23
23
  skipDuplicates?: boolean;
24
24
  /** Language code for translations */
25
25
  languageCode?: string;
26
+ /** Loader-specific configuration (e.g., nested entity modes) */
27
+ config?: Record<string, unknown>;
26
28
  }
27
29
 
28
30
  // LOAD RESULT (Entity-specific, distinct from pipeline LoadResult)
@@ -51,6 +53,8 @@ export interface EntityValidationResult {
51
53
  valid: boolean;
52
54
  errors: EntityValidationError[];
53
55
  warnings: EntityValidationWarning[];
56
+ /** Formatted error message with full context (only present when valid=false) */
57
+ errorMessage?: string;
54
58
  }
55
59
 
56
60
  export interface EntityValidationError {
@@ -192,6 +192,12 @@ export interface PipelineEdge {
192
192
  condition?: string;
193
193
  /** Display label for the edge */
194
194
  label?: string;
195
+ /**
196
+ * When true, this edge enforces execution ordering only — records
197
+ * from the source step are NOT passed as input to the target step.
198
+ * Useful for "must run after" semantics without data flow.
199
+ */
200
+ dependencyOnly?: boolean;
195
201
  }
196
202
 
197
203
  /**
@@ -253,8 +253,6 @@ export interface TriggerConfig {
253
253
  retryDelayMs?: number;
254
254
  /** Timeout for trigger execution in milliseconds */
255
255
  timeoutMs?: number;
256
- /** Event type for event triggers (shorthand) */
257
- eventType?: string;
258
256
  }
259
257
 
260
258
  /**
@@ -300,6 +298,4 @@ export interface PipelineTrigger extends TriggerConfig {
300
298
  rateLimit?: number;
301
299
  /** Require idempotency key (webhook triggers) */
302
300
  requireIdempotencyKey?: boolean;
303
- /** Event type (event triggers) */
304
- eventType?: string;
305
301
  }