@oronts/vendure-data-hub-plugin 0.1.2 → 0.1.4

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 (534) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +36 -10
  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 +24 -10
  13. package/dashboard/constants/ui-dimensions.ts +2 -1
  14. package/dashboard/constants/ui-states.ts +1 -0
  15. package/dashboard/gql/gql.ts +6 -6
  16. package/dashboard/gql/graphql.ts +9 -4
  17. package/dashboard/hooks/api/use-pipeline-runs.ts +1 -0
  18. package/dashboard/hooks/api/use-queues.ts +1 -0
  19. package/dashboard/hooks/use-adapter-catalog.ts +4 -32
  20. package/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
  21. package/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
  22. package/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
  23. package/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
  24. package/dashboard/utils/formatters.ts +6 -4
  25. package/dist/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
  26. package/dist/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
  27. package/dist/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
  28. package/dist/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
  29. package/dist/dashboard/components/shared/CodeEditor.tsx +289 -0
  30. package/dist/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
  31. package/dist/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
  32. package/dist/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
  33. package/dist/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
  34. package/dist/dashboard/components/shared/step-config/StepConfigPanel.tsx +24 -10
  35. package/dist/dashboard/constants/ui-dimensions.ts +2 -1
  36. package/dist/dashboard/constants/ui-states.ts +1 -0
  37. package/dist/dashboard/gql/gql.ts +6 -6
  38. package/dist/dashboard/gql/graphql.ts +9 -4
  39. package/dist/dashboard/hooks/api/use-pipeline-runs.ts +1 -0
  40. package/dist/dashboard/hooks/api/use-queues.ts +1 -0
  41. package/dist/dashboard/hooks/use-adapter-catalog.ts +4 -32
  42. package/dist/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
  43. package/dist/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
  44. package/dist/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
  45. package/dist/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
  46. package/dist/dashboard/utils/formatters.ts +6 -4
  47. package/dist/shared/types/adapter-config.types.d.ts +400 -13
  48. package/dist/shared/types/adapter-config.types.d.ts.map +1 -1
  49. package/dist/shared/types/index.d.ts +1 -1
  50. package/dist/shared/types/index.d.ts.map +1 -1
  51. package/dist/shared/types/index.js.map +1 -1
  52. package/dist/shared/types/loader.types.d.ts +4 -0
  53. package/dist/shared/types/loader.types.d.ts.map +1 -1
  54. package/dist/shared/types/step.types.d.ts +6 -0
  55. package/dist/shared/types/step.types.d.ts.map +1 -1
  56. package/dist/shared/utils/error.d.ts +5 -0
  57. package/dist/shared/utils/error.d.ts.map +1 -1
  58. package/dist/shared/utils/error.js +11 -0
  59. package/dist/shared/utils/error.js.map +1 -1
  60. package/dist/src/adapters/registry.d.ts.map +1 -1
  61. package/dist/src/adapters/registry.js +2 -1
  62. package/dist/src/adapters/registry.js.map +1 -1
  63. package/dist/src/api/controllers/webhook.controller.d.ts +10 -0
  64. package/dist/src/api/controllers/webhook.controller.d.ts.map +1 -1
  65. package/dist/src/api/controllers/webhook.controller.js +50 -10
  66. package/dist/src/api/controllers/webhook.controller.js.map +1 -1
  67. package/dist/src/api/resolvers/queue.resolver.d.ts +3 -1
  68. package/dist/src/api/resolvers/queue.resolver.d.ts.map +1 -1
  69. package/dist/src/api/resolvers/queue.resolver.js +6 -5
  70. package/dist/src/api/resolvers/queue.resolver.js.map +1 -1
  71. package/dist/src/api/schema/pipeline.schema.d.ts +1 -1
  72. package/dist/src/api/schema/pipeline.schema.d.ts.map +1 -1
  73. package/dist/src/api/schema/pipeline.schema.js +6 -0
  74. package/dist/src/api/schema/pipeline.schema.js.map +1 -1
  75. package/dist/src/api/schema/test.schema.d.ts +1 -1
  76. package/dist/src/api/schema/test.schema.d.ts.map +1 -1
  77. package/dist/src/api/schema/test.schema.js +5 -1
  78. package/dist/src/api/schema/test.schema.js.map +1 -1
  79. package/dist/src/bootstrap/initialization.d.ts.map +1 -1
  80. package/dist/src/bootstrap/initialization.js +6 -0
  81. package/dist/src/bootstrap/initialization.js.map +1 -1
  82. package/dist/src/constants/adapter-schema-options.d.ts +65 -0
  83. package/dist/src/constants/adapter-schema-options.d.ts.map +1 -1
  84. package/dist/src/constants/adapter-schema-options.js +79 -3
  85. package/dist/src/constants/adapter-schema-options.js.map +1 -1
  86. package/dist/src/constants/builtin-adapters.d.ts +1 -1
  87. package/dist/src/constants/builtin-adapters.d.ts.map +1 -1
  88. package/dist/src/constants/builtin-adapters.js +19 -1
  89. package/dist/src/constants/builtin-adapters.js.map +1 -1
  90. package/dist/src/constants/core.d.ts +10 -0
  91. package/dist/src/constants/core.d.ts.map +1 -1
  92. package/dist/src/constants/core.js +10 -0
  93. package/dist/src/constants/core.js.map +1 -1
  94. package/dist/src/constants/defaults/webhook-defaults.d.ts +2 -0
  95. package/dist/src/constants/defaults/webhook-defaults.d.ts.map +1 -1
  96. package/dist/src/constants/defaults/webhook-defaults.js +2 -0
  97. package/dist/src/constants/defaults/webhook-defaults.js.map +1 -1
  98. package/dist/src/constants/enum-metadata.d.ts.map +1 -1
  99. package/dist/src/constants/enum-metadata.js +3 -0
  100. package/dist/src/constants/enum-metadata.js.map +1 -1
  101. package/dist/src/constants/hook-stage-metadata.d.ts.map +1 -1
  102. package/dist/src/constants/hook-stage-metadata.js +42 -0
  103. package/dist/src/constants/hook-stage-metadata.js.map +1 -1
  104. package/dist/src/constants/services.d.ts.map +1 -1
  105. package/dist/src/constants/services.js +7 -0
  106. package/dist/src/constants/services.js.map +1 -1
  107. package/dist/src/constants/time.d.ts +2 -0
  108. package/dist/src/constants/time.d.ts.map +1 -1
  109. package/dist/src/constants/time.js +2 -0
  110. package/dist/src/constants/time.js.map +1 -1
  111. package/dist/src/entities/data/error-record.entity.d.ts +1 -0
  112. package/dist/src/entities/data/error-record.entity.d.ts.map +1 -1
  113. package/dist/src/entities/data/error-record.entity.js +4 -0
  114. package/dist/src/entities/data/error-record.entity.js.map +1 -1
  115. package/dist/src/entities/pipeline/pipeline-run.entity.d.ts +4 -0
  116. package/dist/src/entities/pipeline/pipeline-run.entity.d.ts.map +1 -1
  117. package/dist/src/entities/pipeline/pipeline-run.entity.js +8 -0
  118. package/dist/src/entities/pipeline/pipeline-run.entity.js.map +1 -1
  119. package/dist/src/extractors/cdc/cdc.extractor.d.ts.map +1 -1
  120. package/dist/src/extractors/cdc/cdc.extractor.js +7 -2
  121. package/dist/src/extractors/cdc/cdc.extractor.js.map +1 -1
  122. package/dist/src/extractors/cdc/types.d.ts +1 -1
  123. package/dist/src/extractors/cdc/types.d.ts.map +1 -1
  124. package/dist/src/extractors/extractor-handler-registry.d.ts.map +1 -1
  125. package/dist/src/extractors/extractor-handler-registry.js +3 -0
  126. package/dist/src/extractors/extractor-handler-registry.js.map +1 -1
  127. package/dist/src/extractors/vendure-query/helpers.d.ts +9 -4
  128. package/dist/src/extractors/vendure-query/helpers.d.ts.map +1 -1
  129. package/dist/src/extractors/vendure-query/helpers.js +98 -32
  130. package/dist/src/extractors/vendure-query/helpers.js.map +1 -1
  131. package/dist/src/extractors/vendure-query/schema.d.ts.map +1 -1
  132. package/dist/src/extractors/vendure-query/schema.js +13 -0
  133. package/dist/src/extractors/vendure-query/schema.js.map +1 -1
  134. package/dist/src/feeds/generators/csv-feed.generator.d.ts.map +1 -1
  135. package/dist/src/feeds/generators/csv-feed.generator.js +5 -4
  136. package/dist/src/feeds/generators/csv-feed.generator.js.map +1 -1
  137. package/dist/src/feeds/generators/facebook-catalog.generator.d.ts.map +1 -1
  138. package/dist/src/feeds/generators/facebook-catalog.generator.js +83 -114
  139. package/dist/src/feeds/generators/facebook-catalog.generator.js.map +1 -1
  140. package/dist/src/feeds/generators/feed-constants.d.ts +1 -0
  141. package/dist/src/feeds/generators/feed-constants.d.ts.map +1 -1
  142. package/dist/src/feeds/generators/feed-constants.js +1 -0
  143. package/dist/src/feeds/generators/feed-constants.js.map +1 -1
  144. package/dist/src/feeds/generators/feed-helpers.d.ts +10 -8
  145. package/dist/src/feeds/generators/feed-helpers.d.ts.map +1 -1
  146. package/dist/src/feeds/generators/feed-helpers.js +23 -3
  147. package/dist/src/feeds/generators/feed-helpers.js.map +1 -1
  148. package/dist/src/feeds/generators/feed-item-builder.d.ts +59 -0
  149. package/dist/src/feeds/generators/feed-item-builder.d.ts.map +1 -0
  150. package/dist/src/feeds/generators/feed-item-builder.js +93 -0
  151. package/dist/src/feeds/generators/feed-item-builder.js.map +1 -0
  152. package/dist/src/feeds/generators/google-shopping.generator.d.ts.map +1 -1
  153. package/dist/src/feeds/generators/google-shopping.generator.js +52 -64
  154. package/dist/src/feeds/generators/google-shopping.generator.js.map +1 -1
  155. package/dist/src/feeds/generators/json-feed.generator.d.ts.map +1 -1
  156. package/dist/src/feeds/generators/json-feed.generator.js +4 -3
  157. package/dist/src/feeds/generators/json-feed.generator.js.map +1 -1
  158. package/dist/src/feeds/generators/xml-feed.generator.d.ts.map +1 -1
  159. package/dist/src/feeds/generators/xml-feed.generator.js +6 -5
  160. package/dist/src/feeds/generators/xml-feed.generator.js.map +1 -1
  161. package/dist/src/gql/generated.d.ts +5 -0
  162. package/dist/src/gql/generated.d.ts.map +1 -1
  163. package/dist/src/gql/generated.js.map +1 -1
  164. package/dist/src/index.d.ts +3 -1
  165. package/dist/src/index.d.ts.map +1 -1
  166. package/dist/src/index.js +7 -4
  167. package/dist/src/index.js.map +1 -1
  168. package/dist/src/loaders/asset/asset.loader.d.ts.map +1 -1
  169. package/dist/src/loaders/asset/asset.loader.js +5 -1
  170. package/dist/src/loaders/asset/asset.loader.js.map +1 -1
  171. package/dist/src/loaders/base/validation-builder.d.ts +128 -3
  172. package/dist/src/loaders/base/validation-builder.d.ts.map +1 -1
  173. package/dist/src/loaders/base/validation-builder.js +177 -6
  174. package/dist/src/loaders/base/validation-builder.js.map +1 -1
  175. package/dist/src/loaders/collection/collection.loader.d.ts.map +1 -1
  176. package/dist/src/loaders/collection/collection.loader.js +22 -1
  177. package/dist/src/loaders/collection/collection.loader.js.map +1 -1
  178. package/dist/src/loaders/collection/helpers.d.ts +16 -1
  179. package/dist/src/loaders/collection/helpers.d.ts.map +1 -1
  180. package/dist/src/loaders/collection/helpers.js +37 -0
  181. package/dist/src/loaders/collection/helpers.js.map +1 -1
  182. package/dist/src/loaders/customer/customer.loader.d.ts.map +1 -1
  183. package/dist/src/loaders/customer/customer.loader.js +13 -1
  184. package/dist/src/loaders/customer/customer.loader.js.map +1 -1
  185. package/dist/src/loaders/customer/helpers.d.ts +15 -3
  186. package/dist/src/loaders/customer/helpers.d.ts.map +1 -1
  187. package/dist/src/loaders/customer/helpers.js +188 -7
  188. package/dist/src/loaders/customer/helpers.js.map +1 -1
  189. package/dist/src/loaders/facet-value/facet-value.loader.d.ts.map +1 -1
  190. package/dist/src/loaders/facet-value/facet-value.loader.js +18 -0
  191. package/dist/src/loaders/facet-value/facet-value.loader.js.map +1 -1
  192. package/dist/src/loaders/facet-value/types.d.ts +1 -1
  193. package/dist/src/loaders/facet-value/types.js +1 -1
  194. package/dist/src/loaders/facet-value/types.js.map +1 -1
  195. package/dist/src/loaders/inventory/inventory.loader.d.ts.map +1 -1
  196. package/dist/src/loaders/inventory/inventory.loader.js +1 -2
  197. package/dist/src/loaders/inventory/inventory.loader.js.map +1 -1
  198. package/dist/src/loaders/order/helpers.d.ts +16 -2
  199. package/dist/src/loaders/order/helpers.d.ts.map +1 -1
  200. package/dist/src/loaders/order/helpers.js +108 -0
  201. package/dist/src/loaders/order/helpers.js.map +1 -1
  202. package/dist/src/loaders/order/order.loader.d.ts +38 -0
  203. package/dist/src/loaders/order/order.loader.d.ts.map +1 -1
  204. package/dist/src/loaders/order/order.loader.js +238 -24
  205. package/dist/src/loaders/order/order.loader.js.map +1 -1
  206. package/dist/src/loaders/order/types.d.ts +10 -3
  207. package/dist/src/loaders/order/types.d.ts.map +1 -1
  208. package/dist/src/loaders/order/types.js +13 -2
  209. package/dist/src/loaders/order/types.js.map +1 -1
  210. package/dist/src/loaders/product/product.loader.d.ts.map +1 -1
  211. package/dist/src/loaders/product/product.loader.js +18 -2
  212. package/dist/src/loaders/product/product.loader.js.map +1 -1
  213. package/dist/src/loaders/product-variant/helpers.d.ts +20 -0
  214. package/dist/src/loaders/product-variant/helpers.d.ts.map +1 -0
  215. package/dist/src/loaders/product-variant/helpers.js +103 -0
  216. package/dist/src/loaders/product-variant/helpers.js.map +1 -0
  217. package/dist/src/loaders/product-variant/product-variant.loader.d.ts.map +1 -1
  218. package/dist/src/loaders/product-variant/product-variant.loader.js +76 -10
  219. package/dist/src/loaders/product-variant/product-variant.loader.js.map +1 -1
  220. package/dist/src/loaders/product-variant/types.d.ts +7 -0
  221. package/dist/src/loaders/product-variant/types.d.ts.map +1 -1
  222. package/dist/src/loaders/product-variant/types.js.map +1 -1
  223. package/dist/src/loaders/promotion/helpers.d.ts +29 -0
  224. package/dist/src/loaders/promotion/helpers.d.ts.map +1 -1
  225. package/dist/src/loaders/promotion/helpers.js +68 -0
  226. package/dist/src/loaders/promotion/helpers.js.map +1 -1
  227. package/dist/src/loaders/promotion/promotion.loader.d.ts.map +1 -1
  228. package/dist/src/loaders/promotion/promotion.loader.js +12 -2
  229. package/dist/src/loaders/promotion/promotion.loader.js.map +1 -1
  230. package/dist/src/loaders/shared-helpers.d.ts +42 -2
  231. package/dist/src/loaders/shared-helpers.d.ts.map +1 -1
  232. package/dist/src/loaders/shared-helpers.js +384 -5
  233. package/dist/src/loaders/shared-helpers.js.map +1 -1
  234. package/dist/src/operators/data/copy.operator.js +2 -2
  235. package/dist/src/operators/data/copy.operator.js.map +1 -1
  236. package/dist/src/operators/data/rename.operator.js +1 -1
  237. package/dist/src/operators/data/rename.operator.js.map +1 -1
  238. package/dist/src/operators/helpers.d.ts.map +1 -1
  239. package/dist/src/operators/helpers.js +11 -1
  240. package/dist/src/operators/helpers.js.map +1 -1
  241. package/dist/src/operators/operator-runtime-registry.d.ts +2 -2
  242. package/dist/src/operators/operator-runtime-registry.d.ts.map +1 -1
  243. package/dist/src/operators/operator-runtime-registry.js +1 -1
  244. package/dist/src/operators/operator-runtime-registry.js.map +1 -1
  245. package/dist/src/operators/script/script.operators.d.ts.map +1 -1
  246. package/dist/src/operators/script/script.operators.js +9 -3
  247. package/dist/src/operators/script/script.operators.js.map +1 -1
  248. package/dist/src/runtime/config-types.d.ts +6 -0
  249. package/dist/src/runtime/config-types.d.ts.map +1 -1
  250. package/dist/src/runtime/executor-helpers.d.ts +77 -0
  251. package/dist/src/runtime/executor-helpers.d.ts.map +1 -0
  252. package/dist/src/runtime/executor-helpers.js +143 -0
  253. package/dist/src/runtime/executor-helpers.js.map +1 -0
  254. package/dist/src/runtime/executor-types.d.ts +3 -2
  255. package/dist/src/runtime/executor-types.d.ts.map +1 -1
  256. package/dist/src/runtime/executors/export.executor.d.ts +3 -1
  257. package/dist/src/runtime/executors/export.executor.d.ts.map +1 -1
  258. package/dist/src/runtime/executors/export.executor.js +15 -3
  259. package/dist/src/runtime/executors/export.executor.js.map +1 -1
  260. package/dist/src/runtime/executors/exporters/export-handler-registry.d.ts.map +1 -1
  261. package/dist/src/runtime/executors/exporters/export-handler-registry.js +5 -0
  262. package/dist/src/runtime/executors/exporters/export-handler-registry.js.map +1 -1
  263. package/dist/src/runtime/executors/exporters/export-handler.types.d.ts +3 -0
  264. package/dist/src/runtime/executors/exporters/export-handler.types.d.ts.map +1 -1
  265. package/dist/src/runtime/executors/exporters/export-handler.types.js.map +1 -1
  266. package/dist/src/runtime/executors/exporters/export-helpers.d.ts +1 -0
  267. package/dist/src/runtime/executors/exporters/export-helpers.d.ts.map +1 -1
  268. package/dist/src/runtime/executors/exporters/export-helpers.js +33 -4
  269. package/dist/src/runtime/executors/exporters/export-helpers.js.map +1 -1
  270. package/dist/src/runtime/executors/exporters/http-export.handler.js +4 -4
  271. package/dist/src/runtime/executors/exporters/http-export.handler.js.map +1 -1
  272. package/dist/src/runtime/executors/extractors/file-extract.handler.d.ts.map +1 -1
  273. package/dist/src/runtime/executors/extractors/file-extract.handler.js +33 -13
  274. package/dist/src/runtime/executors/extractors/file-extract.handler.js.map +1 -1
  275. package/dist/src/runtime/executors/extractors/memory-extract.handler.d.ts.map +1 -1
  276. package/dist/src/runtime/executors/extractors/memory-extract.handler.js +17 -9
  277. package/dist/src/runtime/executors/extractors/memory-extract.handler.js.map +1 -1
  278. package/dist/src/runtime/executors/feed.executor.d.ts.map +1 -1
  279. package/dist/src/runtime/executors/feed.executor.js +11 -2
  280. package/dist/src/runtime/executors/feed.executor.js.map +1 -1
  281. package/dist/src/runtime/executors/feeds/feed-handler-registry.d.ts.map +1 -1
  282. package/dist/src/runtime/executors/feeds/feed-handler-registry.js +4 -0
  283. package/dist/src/runtime/executors/feeds/feed-handler-registry.js.map +1 -1
  284. package/dist/src/runtime/executors/gate.executor.d.ts +3 -1
  285. package/dist/src/runtime/executors/gate.executor.d.ts.map +1 -1
  286. package/dist/src/runtime/executors/gate.executor.js +47 -26
  287. package/dist/src/runtime/executors/gate.executor.js.map +1 -1
  288. package/dist/src/runtime/executors/loaders/asset-handler.js +1 -1
  289. package/dist/src/runtime/executors/loaders/asset-handler.js.map +1 -1
  290. package/dist/src/runtime/executors/loaders/asset-import-handler.js +1 -1
  291. package/dist/src/runtime/executors/loaders/asset-import-handler.js.map +1 -1
  292. package/dist/src/runtime/executors/loaders/channel-handler.d.ts +3 -1
  293. package/dist/src/runtime/executors/loaders/channel-handler.d.ts.map +1 -1
  294. package/dist/src/runtime/executors/loaders/channel-handler.js +28 -5
  295. package/dist/src/runtime/executors/loaders/channel-handler.js.map +1 -1
  296. package/dist/src/runtime/executors/loaders/collection-handler.d.ts +14 -2
  297. package/dist/src/runtime/executors/loaders/collection-handler.d.ts.map +1 -1
  298. package/dist/src/runtime/executors/loaders/collection-handler.js +113 -23
  299. package/dist/src/runtime/executors/loaders/collection-handler.js.map +1 -1
  300. package/dist/src/runtime/executors/loaders/customer-group-handler.d.ts.map +1 -1
  301. package/dist/src/runtime/executors/loaders/customer-group-handler.js +2 -20
  302. package/dist/src/runtime/executors/loaders/customer-group-handler.js.map +1 -1
  303. package/dist/src/runtime/executors/loaders/customer-handler.d.ts +6 -1
  304. package/dist/src/runtime/executors/loaders/customer-handler.d.ts.map +1 -1
  305. package/dist/src/runtime/executors/loaders/customer-handler.js +128 -15
  306. package/dist/src/runtime/executors/loaders/customer-handler.js.map +1 -1
  307. package/dist/src/runtime/executors/loaders/deletion-handler.d.ts +39 -0
  308. package/dist/src/runtime/executors/loaders/deletion-handler.d.ts.map +1 -0
  309. package/dist/src/runtime/executors/loaders/deletion-handler.js +414 -0
  310. package/dist/src/runtime/executors/loaders/deletion-handler.js.map +1 -0
  311. package/dist/src/runtime/executors/loaders/facet-handler.d.ts +18 -3
  312. package/dist/src/runtime/executors/loaders/facet-handler.d.ts.map +1 -1
  313. package/dist/src/runtime/executors/loaders/facet-handler.js +161 -28
  314. package/dist/src/runtime/executors/loaders/facet-handler.js.map +1 -1
  315. package/dist/src/runtime/executors/loaders/graphql-mutation-handler.js +1 -1
  316. package/dist/src/runtime/executors/loaders/graphql-mutation-handler.js.map +1 -1
  317. package/dist/src/runtime/executors/loaders/index.d.ts +2 -0
  318. package/dist/src/runtime/executors/loaders/index.d.ts.map +1 -1
  319. package/dist/src/runtime/executors/loaders/index.js +5 -1
  320. package/dist/src/runtime/executors/loaders/index.js.map +1 -1
  321. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.d.ts.map +1 -1
  322. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js +2 -21
  323. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js.map +1 -1
  324. package/dist/src/runtime/executors/loaders/inventory-handler.d.ts +2 -1
  325. package/dist/src/runtime/executors/loaders/inventory-handler.d.ts.map +1 -1
  326. package/dist/src/runtime/executors/loaders/inventory-handler.js +11 -9
  327. package/dist/src/runtime/executors/loaders/inventory-handler.js.map +1 -1
  328. package/dist/src/runtime/executors/loaders/loader-handler-registry.d.ts.map +1 -1
  329. package/dist/src/runtime/executors/loaders/loader-handler-registry.js +150 -11
  330. package/dist/src/runtime/executors/loaders/loader-handler-registry.js.map +1 -1
  331. package/dist/src/runtime/executors/loaders/order-handler.d.ts +32 -4
  332. package/dist/src/runtime/executors/loaders/order-handler.d.ts.map +1 -1
  333. package/dist/src/runtime/executors/loaders/order-handler.js +201 -18
  334. package/dist/src/runtime/executors/loaders/order-handler.js.map +1 -1
  335. package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts +15 -0
  336. package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts.map +1 -0
  337. package/dist/src/runtime/executors/loaders/order-upsert-handler.js +89 -0
  338. package/dist/src/runtime/executors/loaders/order-upsert-handler.js.map +1 -0
  339. package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts +11 -2
  340. package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts.map +1 -1
  341. package/dist/src/runtime/executors/loaders/payment-method-handler.js +92 -34
  342. package/dist/src/runtime/executors/loaders/payment-method-handler.js.map +1 -1
  343. package/dist/src/runtime/executors/loaders/product-handler.d.ts +20 -0
  344. package/dist/src/runtime/executors/loaders/product-handler.d.ts.map +1 -1
  345. package/dist/src/runtime/executors/loaders/product-handler.js +121 -31
  346. package/dist/src/runtime/executors/loaders/product-handler.js.map +1 -1
  347. package/dist/src/runtime/executors/loaders/promotion-handler.d.ts +9 -2
  348. package/dist/src/runtime/executors/loaders/promotion-handler.d.ts.map +1 -1
  349. package/dist/src/runtime/executors/loaders/promotion-handler.js +134 -68
  350. package/dist/src/runtime/executors/loaders/promotion-handler.js.map +1 -1
  351. package/dist/src/runtime/executors/loaders/rest-handler.js +1 -1
  352. package/dist/src/runtime/executors/loaders/rest-handler.js.map +1 -1
  353. package/dist/src/runtime/executors/loaders/shared-lookups.d.ts +62 -1
  354. package/dist/src/runtime/executors/loaders/shared-lookups.d.ts.map +1 -1
  355. package/dist/src/runtime/executors/loaders/shared-lookups.js +238 -0
  356. package/dist/src/runtime/executors/loaders/shared-lookups.js.map +1 -1
  357. package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts +11 -6
  358. package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts.map +1 -1
  359. package/dist/src/runtime/executors/loaders/shipping-method-handler.js +168 -54
  360. package/dist/src/runtime/executors/loaders/shipping-method-handler.js.map +1 -1
  361. package/dist/src/runtime/executors/loaders/stock-location-handler.d.ts.map +1 -1
  362. package/dist/src/runtime/executors/loaders/stock-location-handler.js +2 -20
  363. package/dist/src/runtime/executors/loaders/stock-location-handler.js.map +1 -1
  364. package/dist/src/runtime/executors/loaders/tax-rate-handler.d.ts.map +1 -1
  365. package/dist/src/runtime/executors/loaders/tax-rate-handler.js +14 -1
  366. package/dist/src/runtime/executors/loaders/tax-rate-handler.js.map +1 -1
  367. package/dist/src/runtime/executors/loaders/types.d.ts +2 -0
  368. package/dist/src/runtime/executors/loaders/types.d.ts.map +1 -1
  369. package/dist/src/runtime/executors/loaders/variant-handler.d.ts +24 -2
  370. package/dist/src/runtime/executors/loaders/variant-handler.d.ts.map +1 -1
  371. package/dist/src/runtime/executors/loaders/variant-handler.js +266 -47
  372. package/dist/src/runtime/executors/loaders/variant-handler.js.map +1 -1
  373. package/dist/src/runtime/executors/sink-handler-registry.d.ts +7 -11
  374. package/dist/src/runtime/executors/sink-handler-registry.d.ts.map +1 -1
  375. package/dist/src/runtime/executors/sink-handler-registry.js +376 -10
  376. package/dist/src/runtime/executors/sink-handler-registry.js.map +1 -1
  377. package/dist/src/runtime/executors/sink.executor.d.ts +1 -0
  378. package/dist/src/runtime/executors/sink.executor.d.ts.map +1 -1
  379. package/dist/src/runtime/executors/sink.executor.js +82 -12
  380. package/dist/src/runtime/executors/sink.executor.js.map +1 -1
  381. package/dist/src/runtime/executors/transform.executor.d.ts.map +1 -1
  382. package/dist/src/runtime/executors/transform.executor.js +31 -2
  383. package/dist/src/runtime/executors/transform.executor.js.map +1 -1
  384. package/dist/src/runtime/orchestration/graph-executor.d.ts.map +1 -1
  385. package/dist/src/runtime/orchestration/graph-executor.js +3 -2
  386. package/dist/src/runtime/orchestration/graph-executor.js.map +1 -1
  387. package/dist/src/runtime/orchestration/helpers.d.ts +4 -1
  388. package/dist/src/runtime/orchestration/helpers.d.ts.map +1 -1
  389. package/dist/src/runtime/orchestration/helpers.js +7 -2
  390. package/dist/src/runtime/orchestration/helpers.js.map +1 -1
  391. package/dist/src/runtime/orchestration/linear-executor.d.ts.map +1 -1
  392. package/dist/src/runtime/orchestration/linear-executor.js +3 -2
  393. package/dist/src/runtime/orchestration/linear-executor.js.map +1 -1
  394. package/dist/src/runtime/orchestration/replay-executor.d.ts.map +1 -1
  395. package/dist/src/runtime/orchestration/replay-executor.js +3 -2
  396. package/dist/src/runtime/orchestration/replay-executor.js.map +1 -1
  397. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.d.ts.map +1 -1
  398. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js +12 -12
  399. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js.map +1 -1
  400. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.d.ts.map +1 -1
  401. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js +12 -12
  402. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js.map +1 -1
  403. package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js +2 -2
  404. package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js.map +1 -1
  405. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.d.ts.map +1 -1
  406. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js +12 -12
  407. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js.map +1 -1
  408. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.d.ts.map +1 -1
  409. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js +4 -3
  410. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js.map +1 -1
  411. package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js +4 -4
  412. package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js.map +1 -1
  413. package/dist/src/runtime/orchestration/types.d.ts +1 -0
  414. package/dist/src/runtime/orchestration/types.d.ts.map +1 -1
  415. package/dist/src/runtime/utils.d.ts.map +1 -1
  416. package/dist/src/runtime/utils.js +8 -1
  417. package/dist/src/runtime/utils.js.map +1 -1
  418. package/dist/src/sdk/adapters/queue/index.d.ts +1 -0
  419. package/dist/src/sdk/adapters/queue/index.d.ts.map +1 -1
  420. package/dist/src/sdk/adapters/queue/index.js +1 -0
  421. package/dist/src/sdk/adapters/queue/index.js.map +1 -1
  422. package/dist/src/sdk/adapters/queue/internal.adapter.d.ts +32 -0
  423. package/dist/src/sdk/adapters/queue/internal.adapter.d.ts.map +1 -0
  424. package/dist/src/sdk/adapters/queue/internal.adapter.js +68 -0
  425. package/dist/src/sdk/adapters/queue/internal.adapter.js.map +1 -0
  426. package/dist/src/sdk/adapters/queue/queue-adapter.registry.d.ts.map +1 -1
  427. package/dist/src/sdk/adapters/queue/queue-adapter.registry.js +3 -0
  428. package/dist/src/sdk/adapters/queue/queue-adapter.registry.js.map +1 -1
  429. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.d.ts.map +1 -1
  430. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js +2 -1
  431. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js.map +1 -1
  432. package/dist/src/sdk/constants.d.ts +2 -2
  433. package/dist/src/sdk/constants.d.ts.map +1 -1
  434. package/dist/src/sdk/dsl/pipeline-builder.d.ts +8 -2
  435. package/dist/src/sdk/dsl/pipeline-builder.d.ts.map +1 -1
  436. package/dist/src/sdk/dsl/pipeline-builder.js +115 -19
  437. package/dist/src/sdk/dsl/pipeline-builder.js.map +1 -1
  438. package/dist/src/sdk/dsl/step-configs.d.ts +24 -0
  439. package/dist/src/sdk/dsl/step-configs.d.ts.map +1 -1
  440. package/dist/src/services/data/record-error.service.d.ts +1 -1
  441. package/dist/src/services/data/record-error.service.d.ts.map +1 -1
  442. package/dist/src/services/data/record-error.service.js +4 -1
  443. package/dist/src/services/data/record-error.service.js.map +1 -1
  444. package/dist/src/services/events/consumer-discovery.d.ts.map +1 -1
  445. package/dist/src/services/events/consumer-discovery.js +2 -1
  446. package/dist/src/services/events/consumer-discovery.js.map +1 -1
  447. package/dist/src/services/events/consumer-lifecycle.d.ts.map +1 -1
  448. package/dist/src/services/events/consumer-lifecycle.js +19 -15
  449. package/dist/src/services/events/consumer-lifecycle.js.map +1 -1
  450. package/dist/src/services/events/event-trigger.service.d.ts.map +1 -1
  451. package/dist/src/services/events/event-trigger.service.js +9 -3
  452. package/dist/src/services/events/event-trigger.service.js.map +1 -1
  453. package/dist/src/services/events/hook.service.d.ts.map +1 -1
  454. package/dist/src/services/events/hook.service.js +7 -3
  455. package/dist/src/services/events/hook.service.js.map +1 -1
  456. package/dist/src/services/events/message-processing.d.ts.map +1 -1
  457. package/dist/src/services/events/message-processing.js +13 -8
  458. package/dist/src/services/events/message-processing.js.map +1 -1
  459. package/dist/src/services/logger/datahub-logger.d.ts +7 -0
  460. package/dist/src/services/logger/datahub-logger.d.ts.map +1 -1
  461. package/dist/src/services/logger/datahub-logger.js +9 -0
  462. package/dist/src/services/logger/datahub-logger.js.map +1 -1
  463. package/dist/src/services/logger/execution-logger.d.ts +1 -1
  464. package/dist/src/services/logger/execution-logger.d.ts.map +1 -1
  465. package/dist/src/services/logger/execution-logger.js +8 -4
  466. package/dist/src/services/logger/execution-logger.js.map +1 -1
  467. package/dist/src/services/pipeline/pipeline-runner.service.d.ts +3 -1
  468. package/dist/src/services/pipeline/pipeline-runner.service.d.ts.map +1 -1
  469. package/dist/src/services/pipeline/pipeline-runner.service.js +17 -7
  470. package/dist/src/services/pipeline/pipeline-runner.service.js.map +1 -1
  471. package/dist/src/services/pipeline/pipeline.service.d.ts.map +1 -1
  472. package/dist/src/services/pipeline/pipeline.service.js +8 -2
  473. package/dist/src/services/pipeline/pipeline.service.js.map +1 -1
  474. package/dist/src/services/storage/retention.service.d.ts.map +1 -1
  475. package/dist/src/services/storage/retention.service.js +22 -0
  476. package/dist/src/services/storage/retention.service.js.map +1 -1
  477. package/dist/src/services/testing/step-test.service.d.ts.map +1 -1
  478. package/dist/src/services/testing/step-test.service.js +17 -1
  479. package/dist/src/services/testing/step-test.service.js.map +1 -1
  480. package/dist/src/services/validation/definition-validation.service.d.ts.map +1 -1
  481. package/dist/src/services/validation/definition-validation.service.js +4 -1
  482. package/dist/src/services/validation/definition-validation.service.js.map +1 -1
  483. package/dist/src/services/validation/trigger-validation.d.ts.map +1 -1
  484. package/dist/src/services/validation/trigger-validation.js +76 -2
  485. package/dist/src/services/validation/trigger-validation.js.map +1 -1
  486. package/dist/src/types/index.d.ts +1 -0
  487. package/dist/src/types/index.d.ts.map +1 -1
  488. package/dist/src/types/index.js.map +1 -1
  489. package/dist/src/types/loader-configs.d.ts +1071 -0
  490. package/dist/src/types/loader-configs.d.ts.map +1 -0
  491. package/dist/src/types/loader-configs.js +54 -0
  492. package/dist/src/types/loader-configs.js.map +1 -0
  493. package/dist/src/types/step-configs.d.ts +1 -0
  494. package/dist/src/types/step-configs.d.ts.map +1 -1
  495. package/dist/src/types/step-configs.js +3 -0
  496. package/dist/src/types/step-configs.js.map +1 -1
  497. package/dist/src/utils/code-security.utils.d.ts +18 -0
  498. package/dist/src/utils/code-security.utils.d.ts.map +1 -1
  499. package/dist/src/utils/code-security.utils.js +125 -9
  500. package/dist/src/utils/code-security.utils.js.map +1 -1
  501. package/dist/src/utils/error.utils.d.ts +1 -1
  502. package/dist/src/utils/error.utils.d.ts.map +1 -1
  503. package/dist/src/utils/error.utils.js +2 -1
  504. package/dist/src/utils/error.utils.js.map +1 -1
  505. package/dist/src/utils/url-security.utils.d.ts +5 -3
  506. package/dist/src/utils/url-security.utils.d.ts.map +1 -1
  507. package/dist/src/utils/url-security.utils.js +20 -4
  508. package/dist/src/utils/url-security.utils.js.map +1 -1
  509. package/dist/src/validation/pipeline-definition.validator.js +2 -1
  510. package/dist/src/validation/pipeline-definition.validator.js.map +1 -1
  511. package/docs/developer-guide/README.md +2 -0
  512. package/docs/developer-guide/dsl/pipeline-builder.md +12 -0
  513. package/docs/developer-guide/extending/README.md +230 -10
  514. package/docs/developer-guide/extending/custom-sinks.md +87 -0
  515. package/docs/developer-guide/extending/events.md +4 -1
  516. package/docs/examples/validation-error-messages.md +246 -0
  517. package/docs/guides/multi-channel.md +1190 -0
  518. package/docs/guides/multi-currency.md +881 -0
  519. package/docs/guides/multi-entity.md +597 -0
  520. package/docs/guides/multi-language.md +957 -0
  521. package/docs/reference/README.md +11 -4
  522. package/docs/reference/extractors.md +30 -0
  523. package/docs/reference/loaders.md +396 -21
  524. package/docs/reference/operators-complete.md +1251 -0
  525. package/docs/reference/operators.md +36 -2
  526. package/docs/reference/sinks.md +7 -6
  527. package/docs/reference/step-types.md +12 -5
  528. package/docs/user-guide/pipelines.md +82 -13
  529. package/package.json +1 -1
  530. package/shared/types/adapter-config.types.ts +439 -10
  531. package/shared/types/index.ts +25 -0
  532. package/shared/types/loader.types.ts +4 -0
  533. package/shared/types/step.types.ts +6 -0
  534. package/shared/utils/error.ts +11 -0
@@ -324,26 +324,48 @@ export type TypedOperatorConfig =
324
324
  /** Product Upsert Loader */
325
325
  export interface ProductUpsertLoaderConfig {
326
326
  adapterCode: 'productUpsert';
327
- /** Channel code (required) */
328
- channel: string;
329
- /** Merge strategy */
330
- strategy: 'CREATE_ONLY' | 'UPDATE_ONLY' | 'SOURCE_WINS' | 'TARGET_WINS' | 'MERGE';
327
+ /** Channel code */
328
+ channel?: string;
329
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
330
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
331
+ /** Conflict strategy: SOURCE_WINS (default), VENDURE_WINS, or MERGE */
332
+ conflictStrategy?: 'SOURCE_WINS' | 'VENDURE_WINS' | 'MERGE';
331
333
  /** Field containing product name */
332
334
  nameField?: string;
333
335
  /** Field containing slug */
334
336
  slugField?: string;
335
337
  /** Field containing description */
336
338
  descriptionField?: string;
339
+ /** Field containing product enabled/published flag */
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;
337
347
  /** Field containing SKU */
338
348
  skuField?: string;
339
349
  /** Field containing price */
340
350
  priceField?: string;
341
351
  /** Field containing stock quantity */
342
352
  stockField?: string;
353
+ /** Field containing stock by location map */
354
+ stockByLocationField?: string;
343
355
  /** Track inventory flag */
344
356
  trackInventory?: string | boolean;
345
357
  /** Tax category name */
346
358
  taxCategoryName?: string;
359
+ /** Field containing custom fields object */
360
+ customFieldsField?: string;
361
+ /** Whether to create/update variants alongside the product (default: true). Set to false when variants are handled by a separate variantUpsert step. */
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;
347
369
  }
348
370
 
349
371
  /** Variant Upsert Loader */
@@ -353,14 +375,81 @@ export interface VariantUpsertLoaderConfig {
353
375
  channel?: string;
354
376
  /** Field containing SKU */
355
377
  skuField?: string;
356
- /** Field containing price */
378
+ /** Field containing variant name */
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;
388
+ /** Field containing price (major units, auto-converted to minor) */
357
389
  priceField?: string;
358
- /** Field containing stock */
390
+ /** Field containing price map by currency code (object, e.g. { USD: 19.99, EUR: 17.50 }) */
391
+ priceByCurrencyField?: string;
392
+ /** Field containing stock on hand */
359
393
  stockField?: string;
394
+ /** Field containing stock by location map (object, e.g. { "Warehouse A": 100, "Warehouse B": 50 }) */
395
+ stockByLocationField?: string;
360
396
  /** Tax category name */
361
397
  taxCategoryName?: string;
398
+ /** Field containing custom fields object */
399
+ customFieldsField?: string;
400
+ /** Field containing option group→value pairs (object, e.g. { size: 'S', color: 'Blue' }). Auto-creates option groups and assigns them to the parent product. */
401
+ optionGroupsField?: string;
402
+ /** Field containing pre-existing Vendure option IDs (array, e.g. [1, 2, 3]). Passed directly without lookup. */
403
+ optionIdsField?: string;
404
+ /** Field containing option codes (array, e.g. ['size-s', 'color-blue']). Resolved to IDs by code lookup. */
405
+ optionCodesField?: string;
406
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE.
407
+ * UPSERT: update existing or create new (record must contain productSlug, productId, or productName for creation).
408
+ * CREATE: only create new variants, skip existing.
409
+ * UPDATE: only update existing variants, skip missing. */
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;
362
419
  }
363
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
+
364
453
  /** Customer Upsert Loader */
365
454
  export interface CustomerUpsertLoaderConfig {
366
455
  adapterCode: 'customerUpsert';
@@ -374,10 +463,18 @@ export interface CustomerUpsertLoaderConfig {
374
463
  phoneNumberField?: string;
375
464
  /** Field containing addresses array */
376
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;
377
470
  /** Field containing group codes */
378
471
  groupsField?: string;
379
472
  /** Groups mode */
380
- groupsMode?: 'add' | 'set';
473
+ groupsMode?: GroupsMode;
474
+ /** Field containing custom fields object */
475
+ customFieldsField?: string;
476
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
477
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
381
478
  }
382
479
 
383
480
  /** Stock Adjust Loader */
@@ -424,6 +521,43 @@ export interface RestPostLoaderConfig {
424
521
  timeoutMs?: number;
425
522
  }
426
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
+
427
561
  /** Order Note Loader */
428
562
  export interface OrderNoteLoaderConfig {
429
563
  adapterCode: 'orderNote';
@@ -453,6 +587,8 @@ export interface CollectionUpsertLoaderConfig {
453
587
  adapterCode: 'collectionUpsert';
454
588
  /** Channel code */
455
589
  channel?: string;
590
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
591
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
456
592
  /** Field containing name */
457
593
  nameField?: string;
458
594
  /** Field containing slug */
@@ -461,6 +597,20 @@ export interface CollectionUpsertLoaderConfig {
461
597
  descriptionField?: string;
462
598
  /** Field containing parent slug */
463
599
  parentSlugField?: string;
600
+ /** Apply collection filters after upsert */
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;
608
+ /** Field containing custom fields object */
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;
464
614
  }
465
615
 
466
616
  /** Asset Attach Loader */
@@ -492,6 +642,8 @@ export interface PromotionUpsertLoaderConfig {
492
642
  codeField: string;
493
643
  /** Field containing name */
494
644
  nameField?: string;
645
+ /** Field containing enabled flag */
646
+ enabledField?: string;
495
647
  /** Field containing starts at date */
496
648
  startsAtField?: string;
497
649
  /** Field containing ends at date */
@@ -500,8 +652,264 @@ export interface PromotionUpsertLoaderConfig {
500
652
  perCustomerUsageLimitField?: string;
501
653
  /** Field containing conditions */
502
654
  conditionsField?: string;
655
+ /** How to handle promotion conditions on update */
656
+ conditionsMode?: ConditionsMode;
503
657
  /** Field containing actions */
504
658
  actionsField?: string;
659
+ /** How to handle promotion actions on update */
660
+ actionsMode?: ActionsMode;
661
+ /** Channel code */
662
+ channel?: string;
663
+ /** Field containing custom fields object */
664
+ customFieldsField?: string;
665
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
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;
673
+ }
674
+
675
+ /** GraphQL Mutation Loader */
676
+ export interface GraphqlMutationLoaderConfig {
677
+ adapterCode: 'graphqlMutation';
678
+ /** GraphQL endpoint URL (required) */
679
+ endpoint: string;
680
+ /** GraphQL mutation string (required) */
681
+ mutation: string;
682
+ /** Variable mapping: { "input.name": "productName" } (required) */
683
+ variableMapping: Record<string, string>;
684
+ /** Request headers */
685
+ headers?: Record<string, string>;
686
+ /** Auth preset */
687
+ auth?: 'NONE' | 'BEARER' | 'BASIC';
688
+ /** Bearer token secret code */
689
+ bearerTokenSecretCode?: string;
690
+ /** Basic auth secret code */
691
+ basicSecretCode?: string;
692
+ /** Batch mode */
693
+ batchMode?: 'SINGLE' | 'BATCH';
694
+ /** Max records per batch */
695
+ maxBatchSize?: number;
696
+ /** Number of retries */
697
+ retries?: number;
698
+ /** Delay between retries (ms) */
699
+ retryDelayMs?: number;
700
+ /** Request timeout (ms) */
701
+ timeoutMs?: number;
702
+ }
703
+
704
+ /** Facet Upsert Loader */
705
+ export interface FacetUpsertLoaderConfig {
706
+ adapterCode: 'facetUpsert';
707
+ /** Field containing facet code (required) */
708
+ codeField: string;
709
+ /** Field containing facet name (required) */
710
+ nameField: string;
711
+ /** Field containing private flag */
712
+ privateField?: string;
713
+ /** Channel code */
714
+ channel?: string;
715
+ /** Field containing custom fields object */
716
+ customFieldsField?: string;
717
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
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;
723
+ }
724
+
725
+ /** Facet Value Upsert Loader */
726
+ export interface FacetValueUpsertLoaderConfig {
727
+ adapterCode: 'facetValueUpsert';
728
+ /** Field containing parent facet code (required) */
729
+ facetCodeField: string;
730
+ /** Field containing value code (required) */
731
+ codeField: string;
732
+ /** Field containing value name (required) */
733
+ nameField: string;
734
+ /** Channel code */
735
+ channel?: string;
736
+ /** Field containing custom fields object */
737
+ customFieldsField?: string;
738
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
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;
744
+ }
745
+
746
+ /** Asset Import Loader */
747
+ export interface AssetImportLoaderConfig {
748
+ adapterCode: 'assetImport';
749
+ /** Field containing source URL to download (required) */
750
+ sourceUrlField: string;
751
+ /** Field containing target filename */
752
+ filenameField?: string;
753
+ /** Field containing asset name */
754
+ nameField?: string;
755
+ /** Field containing tags (array) */
756
+ tagsField?: string;
757
+ /** Channel code */
758
+ channel?: string;
759
+ }
760
+
761
+ /** Tax Rate Upsert Loader */
762
+ export interface TaxRateUpsertLoaderConfig {
763
+ adapterCode: 'taxRateUpsert';
764
+ /** Field containing tax rate name (required) */
765
+ nameField: string;
766
+ /** Field containing tax rate percentage 0-100 (required) */
767
+ valueField: string;
768
+ /** Field containing enabled flag */
769
+ enabledField?: string;
770
+ /** Field containing tax category code/name (required) */
771
+ taxCategoryCodeField: string;
772
+ /** Field containing tax category ID (alternative) */
773
+ taxCategoryIdField?: string;
774
+ /** Field containing zone code/name (required) */
775
+ zoneCodeField: string;
776
+ /** Field containing zone ID (alternative) */
777
+ zoneIdField?: string;
778
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
779
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
780
+ }
781
+
782
+ /** Payment Method Upsert Loader */
783
+ export interface PaymentMethodUpsertLoaderConfig {
784
+ adapterCode: 'paymentMethodUpsert';
785
+ /** Field containing payment method name (required) */
786
+ nameField: string;
787
+ /** Field containing unique code (required) */
788
+ codeField: string;
789
+ /** Field containing description */
790
+ descriptionField?: string;
791
+ /** Field containing enabled flag */
792
+ enabledField?: string;
793
+ /** Field containing handler config { code, args } (required) */
794
+ handlerField: string;
795
+ /** Field containing eligibility checker config { code, args } */
796
+ checkerField?: string;
797
+ /** Field containing custom fields object */
798
+ customFieldsField?: string;
799
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
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;
805
+ }
806
+
807
+ /** Channel Upsert Loader */
808
+ export interface ChannelUpsertLoaderConfig {
809
+ adapterCode: 'channelUpsert';
810
+ /** Field containing unique channel code (required) */
811
+ codeField: string;
812
+ /** Field containing channel token */
813
+ tokenField?: string;
814
+ /** Field containing default language code (required) */
815
+ defaultLanguageCodeField: string;
816
+ /** Field containing available language codes (array) */
817
+ availableLanguageCodesField?: string;
818
+ /** Field containing default currency code (required) */
819
+ defaultCurrencyCodeField: string;
820
+ /** Field containing available currency codes (array) */
821
+ availableCurrencyCodesField?: string;
822
+ /** Field containing prices-include-tax flag */
823
+ pricesIncludeTaxField?: string;
824
+ /** Field containing default tax zone code */
825
+ defaultTaxZoneCodeField?: string;
826
+ /** Field containing default shipping zone code */
827
+ defaultShippingZoneCodeField?: string;
828
+ /** Field containing seller ID (for multi-vendor) */
829
+ sellerIdField?: string;
830
+ /** Field containing custom fields object */
831
+ customFieldsField?: string;
832
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
833
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
834
+ }
835
+
836
+ /** Shipping Method Upsert Loader */
837
+ export interface ShippingMethodUpsertLoaderConfig {
838
+ adapterCode: 'shippingMethodUpsert';
839
+ /** Field containing display name (required) */
840
+ nameField: string;
841
+ /** Field containing unique code (required) */
842
+ codeField: string;
843
+ /** Field containing description */
844
+ descriptionField?: string;
845
+ /** Field containing fulfillment handler code (required) */
846
+ fulfillmentHandlerField: string;
847
+ /** Field containing calculator config { code, args } (required) */
848
+ calculatorField: string;
849
+ /** Field containing eligibility checker config { code, args } */
850
+ checkerField?: string;
851
+ /** Field containing custom fields object */
852
+ customFieldsField?: string;
853
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
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;
859
+ }
860
+
861
+ /** Customer Group Upsert Loader */
862
+ export interface CustomerGroupUpsertLoaderConfig {
863
+ adapterCode: 'customerGroupUpsert';
864
+ /** Field containing group name (required) */
865
+ nameField: string;
866
+ /** Field containing customer email addresses (array) */
867
+ customerEmailsField?: string;
868
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
869
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
870
+ }
871
+
872
+ /** Stock Location Upsert Loader */
873
+ export interface StockLocationUpsertLoaderConfig {
874
+ adapterCode: 'stockLocationUpsert';
875
+ /** Field containing stock location name (required) */
876
+ nameField: string;
877
+ /** Field containing location description */
878
+ descriptionField?: string;
879
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
880
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
881
+ }
882
+
883
+ /** Inventory Adjust Loader */
884
+ export interface InventoryAdjustLoaderConfig {
885
+ adapterCode: 'inventoryAdjust';
886
+ /** Field containing variant SKU (required) */
887
+ skuField: string;
888
+ /** Field containing stock on hand quantity (required) */
889
+ stockOnHandField: string;
890
+ /** Field containing stock location name */
891
+ stockLocationNameField?: string;
892
+ /** Field containing stock location ID (alternative) */
893
+ stockLocationIdField?: string;
894
+ /** Field containing adjustment reason */
895
+ reasonField?: string;
896
+ /** Load strategy: UPSERT (default), CREATE, or UPDATE */
897
+ strategy?: 'UPSERT' | 'CREATE' | 'UPDATE';
898
+ }
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;
505
913
  }
506
914
 
507
915
  /** Generic config for custom loader adapters */
@@ -515,14 +923,27 @@ export type TypedLoaderConfig =
515
923
  | ProductUpsertLoaderConfig
516
924
  | VariantUpsertLoaderConfig
517
925
  | CustomerUpsertLoaderConfig
926
+ | OrderUpsertLoaderConfig
518
927
  | StockAdjustLoaderConfig
519
928
  | RestPostLoaderConfig
929
+ | GraphqlMutationLoaderConfig
520
930
  | OrderNoteLoaderConfig
521
931
  | OrderTransitionLoaderConfig
522
932
  | CollectionUpsertLoaderConfig
523
933
  | AssetAttachLoaderConfig
934
+ | AssetImportLoaderConfig
524
935
  | ApplyCouponLoaderConfig
525
936
  | PromotionUpsertLoaderConfig
937
+ | FacetUpsertLoaderConfig
938
+ | FacetValueUpsertLoaderConfig
939
+ | TaxRateUpsertLoaderConfig
940
+ | PaymentMethodUpsertLoaderConfig
941
+ | ChannelUpsertLoaderConfig
942
+ | ShippingMethodUpsertLoaderConfig
943
+ | CustomerGroupUpsertLoaderConfig
944
+ | StockLocationUpsertLoaderConfig
945
+ | InventoryAdjustLoaderConfig
946
+ | EntityDeletionLoaderConfig
526
947
  | GenericLoaderConfig;
527
948
 
528
949
  // EXPORTER CONFIGS
@@ -711,10 +1132,10 @@ export interface RouteConfig {
711
1132
  // PERMISSION MAPPINGS
712
1133
 
713
1134
  /** Loader adapter codes that require UpdateCatalog permission */
714
- export type UpdateCatalogLoaders = 'productUpsert' | 'variantUpsert' | 'stockAdjust' | 'collectionUpsert' | 'assetAttach';
1135
+ export type UpdateCatalogLoaders = 'productUpsert' | 'variantUpsert' | 'stockAdjust' | 'collectionUpsert' | 'assetAttach' | 'assetImport' | 'facetUpsert' | 'facetValueUpsert' | 'stockLocationUpsert' | 'inventoryAdjust' | 'entityDeletion';
715
1136
 
716
1137
  /** Loader adapter codes that require UpdateCustomer permission */
717
- export type UpdateCustomerLoaders = 'customerUpsert';
1138
+ export type UpdateCustomerLoaders = 'customerUpsert' | 'customerGroupUpsert';
718
1139
 
719
1140
  /** Loader adapter codes that require UpdateOrder permission */
720
1141
  export type UpdateOrderLoaders = 'orderNote' | 'orderTransition' | 'applyCoupon';
@@ -722,8 +1143,14 @@ export type UpdateOrderLoaders = 'orderNote' | 'orderTransition' | 'applyCoupon'
722
1143
  /** Loader adapter codes that require UpdatePromotion permission */
723
1144
  export type UpdatePromotionLoaders = 'promotionUpsert';
724
1145
 
1146
+ /** Loader adapter codes that require UpdateSettings permission */
1147
+ export type UpdateSettingsLoaders = 'taxRateUpsert' | 'paymentMethodUpsert' | 'channelUpsert';
1148
+
1149
+ /** Loader adapter codes that require UpdateShippingMethod permission */
1150
+ export type UpdateShippingMethodLoaders = 'shippingMethodUpsert';
1151
+
725
1152
  /** Loader adapter codes that require UpdateDataHubSettings permission */
726
- export type UpdateDataHubSettingsLoaders = 'restPost';
1153
+ export type UpdateDataHubSettingsLoaders = 'restPost' | 'graphqlMutation';
727
1154
 
728
1155
  /** All loader adapter codes */
729
1156
  export type LoaderAdapterCode =
@@ -731,5 +1158,7 @@ export type LoaderAdapterCode =
731
1158
  | UpdateCustomerLoaders
732
1159
  | UpdateOrderLoaders
733
1160
  | UpdatePromotionLoaders
1161
+ | UpdateSettingsLoaders
1162
+ | UpdateShippingMethodLoaders
734
1163
  | UpdateDataHubSettingsLoaders;
735
1164
 
@@ -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,14 +340,27 @@ export type {
330
340
  ProductUpsertLoaderConfig,
331
341
  VariantUpsertLoaderConfig,
332
342
  CustomerUpsertLoaderConfig,
343
+ OrderUpsertLoaderConfig,
333
344
  StockAdjustLoaderConfig,
334
345
  RestPostLoaderConfig,
346
+ GraphqlMutationLoaderConfig,
335
347
  OrderNoteLoaderConfig,
336
348
  OrderTransitionLoaderConfig,
337
349
  CollectionUpsertLoaderConfig,
338
350
  AssetAttachLoaderConfig,
351
+ AssetImportLoaderConfig,
339
352
  ApplyCouponLoaderConfig,
340
353
  PromotionUpsertLoaderConfig,
354
+ FacetUpsertLoaderConfig,
355
+ FacetValueUpsertLoaderConfig,
356
+ TaxRateUpsertLoaderConfig,
357
+ PaymentMethodUpsertLoaderConfig,
358
+ ChannelUpsertLoaderConfig,
359
+ ShippingMethodUpsertLoaderConfig,
360
+ CustomerGroupUpsertLoaderConfig,
361
+ StockLocationUpsertLoaderConfig,
362
+ InventoryAdjustLoaderConfig,
363
+ EntityDeletionLoaderConfig,
341
364
  GenericLoaderConfig,
342
365
  TypedLoaderConfig,
343
366
  CsvExportConfig,
@@ -357,6 +380,8 @@ export type {
357
380
  UpdateCustomerLoaders,
358
381
  UpdateOrderLoaders,
359
382
  UpdatePromotionLoaders,
383
+ UpdateSettingsLoaders,
384
+ UpdateShippingMethodLoaders,
360
385
  UpdateDataHubSettingsLoaders,
361
386
  LoaderAdapterCode,
362
387
  } from './adapter-config.types';
@@ -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
  /**
@@ -23,3 +23,14 @@ export function ensureError(error: unknown): Error {
23
23
  export function toErrorOrUndefined(error: unknown): Error | undefined {
24
24
  return error instanceof Error ? error : undefined;
25
25
  }
26
+
27
+ /**
28
+ * Extracts the stack trace from an unknown caught value.
29
+ * Returns undefined if the value is not an Error or has no stack.
30
+ */
31
+ export function getErrorStack(error: unknown): string | undefined {
32
+ if (error instanceof Error && error.stack) {
33
+ return error.stack;
34
+ }
35
+ return undefined;
36
+ }