@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.
- package/CHANGELOG.md +33 -1
- package/README.md +36 -10
- package/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
- package/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
- package/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
- package/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
- package/dashboard/components/shared/CodeEditor.tsx +289 -0
- package/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
- package/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
- package/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
- package/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
- package/dashboard/components/shared/step-config/StepConfigPanel.tsx +24 -10
- package/dashboard/constants/ui-dimensions.ts +2 -1
- package/dashboard/constants/ui-states.ts +1 -0
- package/dashboard/gql/gql.ts +6 -6
- package/dashboard/gql/graphql.ts +9 -4
- package/dashboard/hooks/api/use-pipeline-runs.ts +1 -0
- package/dashboard/hooks/api/use-queues.ts +1 -0
- package/dashboard/hooks/use-adapter-catalog.ts +4 -32
- package/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
- package/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
- package/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
- package/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
- package/dashboard/utils/formatters.ts +6 -4
- package/dist/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
- package/dist/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
- package/dist/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
- package/dist/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
- package/dist/dashboard/components/shared/CodeEditor.tsx +289 -0
- package/dist/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
- package/dist/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
- package/dist/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
- package/dist/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
- package/dist/dashboard/components/shared/step-config/StepConfigPanel.tsx +24 -10
- package/dist/dashboard/constants/ui-dimensions.ts +2 -1
- package/dist/dashboard/constants/ui-states.ts +1 -0
- package/dist/dashboard/gql/gql.ts +6 -6
- package/dist/dashboard/gql/graphql.ts +9 -4
- package/dist/dashboard/hooks/api/use-pipeline-runs.ts +1 -0
- package/dist/dashboard/hooks/api/use-queues.ts +1 -0
- package/dist/dashboard/hooks/use-adapter-catalog.ts +4 -32
- package/dist/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
- package/dist/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
- package/dist/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
- package/dist/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
- package/dist/dashboard/utils/formatters.ts +6 -4
- package/dist/shared/types/adapter-config.types.d.ts +400 -13
- package/dist/shared/types/adapter-config.types.d.ts.map +1 -1
- package/dist/shared/types/index.d.ts +1 -1
- package/dist/shared/types/index.d.ts.map +1 -1
- package/dist/shared/types/index.js.map +1 -1
- package/dist/shared/types/loader.types.d.ts +4 -0
- package/dist/shared/types/loader.types.d.ts.map +1 -1
- package/dist/shared/types/step.types.d.ts +6 -0
- package/dist/shared/types/step.types.d.ts.map +1 -1
- package/dist/shared/utils/error.d.ts +5 -0
- package/dist/shared/utils/error.d.ts.map +1 -1
- package/dist/shared/utils/error.js +11 -0
- package/dist/shared/utils/error.js.map +1 -1
- package/dist/src/adapters/registry.d.ts.map +1 -1
- package/dist/src/adapters/registry.js +2 -1
- package/dist/src/adapters/registry.js.map +1 -1
- package/dist/src/api/controllers/webhook.controller.d.ts +10 -0
- package/dist/src/api/controllers/webhook.controller.d.ts.map +1 -1
- package/dist/src/api/controllers/webhook.controller.js +50 -10
- package/dist/src/api/controllers/webhook.controller.js.map +1 -1
- package/dist/src/api/resolvers/queue.resolver.d.ts +3 -1
- package/dist/src/api/resolvers/queue.resolver.d.ts.map +1 -1
- package/dist/src/api/resolvers/queue.resolver.js +6 -5
- package/dist/src/api/resolvers/queue.resolver.js.map +1 -1
- package/dist/src/api/schema/pipeline.schema.d.ts +1 -1
- package/dist/src/api/schema/pipeline.schema.d.ts.map +1 -1
- package/dist/src/api/schema/pipeline.schema.js +6 -0
- package/dist/src/api/schema/pipeline.schema.js.map +1 -1
- package/dist/src/api/schema/test.schema.d.ts +1 -1
- package/dist/src/api/schema/test.schema.d.ts.map +1 -1
- package/dist/src/api/schema/test.schema.js +5 -1
- package/dist/src/api/schema/test.schema.js.map +1 -1
- package/dist/src/bootstrap/initialization.d.ts.map +1 -1
- package/dist/src/bootstrap/initialization.js +6 -0
- package/dist/src/bootstrap/initialization.js.map +1 -1
- package/dist/src/constants/adapter-schema-options.d.ts +65 -0
- package/dist/src/constants/adapter-schema-options.d.ts.map +1 -1
- package/dist/src/constants/adapter-schema-options.js +79 -3
- package/dist/src/constants/adapter-schema-options.js.map +1 -1
- package/dist/src/constants/builtin-adapters.d.ts +1 -1
- package/dist/src/constants/builtin-adapters.d.ts.map +1 -1
- package/dist/src/constants/builtin-adapters.js +19 -1
- package/dist/src/constants/builtin-adapters.js.map +1 -1
- package/dist/src/constants/core.d.ts +10 -0
- package/dist/src/constants/core.d.ts.map +1 -1
- package/dist/src/constants/core.js +10 -0
- package/dist/src/constants/core.js.map +1 -1
- package/dist/src/constants/defaults/webhook-defaults.d.ts +2 -0
- package/dist/src/constants/defaults/webhook-defaults.d.ts.map +1 -1
- package/dist/src/constants/defaults/webhook-defaults.js +2 -0
- package/dist/src/constants/defaults/webhook-defaults.js.map +1 -1
- package/dist/src/constants/enum-metadata.d.ts.map +1 -1
- package/dist/src/constants/enum-metadata.js +3 -0
- package/dist/src/constants/enum-metadata.js.map +1 -1
- package/dist/src/constants/hook-stage-metadata.d.ts.map +1 -1
- package/dist/src/constants/hook-stage-metadata.js +42 -0
- package/dist/src/constants/hook-stage-metadata.js.map +1 -1
- package/dist/src/constants/services.d.ts.map +1 -1
- package/dist/src/constants/services.js +7 -0
- package/dist/src/constants/services.js.map +1 -1
- package/dist/src/constants/time.d.ts +2 -0
- package/dist/src/constants/time.d.ts.map +1 -1
- package/dist/src/constants/time.js +2 -0
- package/dist/src/constants/time.js.map +1 -1
- package/dist/src/entities/data/error-record.entity.d.ts +1 -0
- package/dist/src/entities/data/error-record.entity.d.ts.map +1 -1
- package/dist/src/entities/data/error-record.entity.js +4 -0
- package/dist/src/entities/data/error-record.entity.js.map +1 -1
- package/dist/src/entities/pipeline/pipeline-run.entity.d.ts +4 -0
- package/dist/src/entities/pipeline/pipeline-run.entity.d.ts.map +1 -1
- package/dist/src/entities/pipeline/pipeline-run.entity.js +8 -0
- package/dist/src/entities/pipeline/pipeline-run.entity.js.map +1 -1
- package/dist/src/extractors/cdc/cdc.extractor.d.ts.map +1 -1
- package/dist/src/extractors/cdc/cdc.extractor.js +7 -2
- package/dist/src/extractors/cdc/cdc.extractor.js.map +1 -1
- package/dist/src/extractors/cdc/types.d.ts +1 -1
- package/dist/src/extractors/cdc/types.d.ts.map +1 -1
- package/dist/src/extractors/extractor-handler-registry.d.ts.map +1 -1
- package/dist/src/extractors/extractor-handler-registry.js +3 -0
- package/dist/src/extractors/extractor-handler-registry.js.map +1 -1
- package/dist/src/extractors/vendure-query/helpers.d.ts +9 -4
- package/dist/src/extractors/vendure-query/helpers.d.ts.map +1 -1
- package/dist/src/extractors/vendure-query/helpers.js +98 -32
- package/dist/src/extractors/vendure-query/helpers.js.map +1 -1
- package/dist/src/extractors/vendure-query/schema.d.ts.map +1 -1
- package/dist/src/extractors/vendure-query/schema.js +13 -0
- package/dist/src/extractors/vendure-query/schema.js.map +1 -1
- package/dist/src/feeds/generators/csv-feed.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/csv-feed.generator.js +5 -4
- package/dist/src/feeds/generators/csv-feed.generator.js.map +1 -1
- package/dist/src/feeds/generators/facebook-catalog.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/facebook-catalog.generator.js +83 -114
- package/dist/src/feeds/generators/facebook-catalog.generator.js.map +1 -1
- package/dist/src/feeds/generators/feed-constants.d.ts +1 -0
- package/dist/src/feeds/generators/feed-constants.d.ts.map +1 -1
- package/dist/src/feeds/generators/feed-constants.js +1 -0
- package/dist/src/feeds/generators/feed-constants.js.map +1 -1
- package/dist/src/feeds/generators/feed-helpers.d.ts +10 -8
- package/dist/src/feeds/generators/feed-helpers.d.ts.map +1 -1
- package/dist/src/feeds/generators/feed-helpers.js +23 -3
- package/dist/src/feeds/generators/feed-helpers.js.map +1 -1
- package/dist/src/feeds/generators/feed-item-builder.d.ts +59 -0
- package/dist/src/feeds/generators/feed-item-builder.d.ts.map +1 -0
- package/dist/src/feeds/generators/feed-item-builder.js +93 -0
- package/dist/src/feeds/generators/feed-item-builder.js.map +1 -0
- package/dist/src/feeds/generators/google-shopping.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/google-shopping.generator.js +52 -64
- package/dist/src/feeds/generators/google-shopping.generator.js.map +1 -1
- package/dist/src/feeds/generators/json-feed.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/json-feed.generator.js +4 -3
- package/dist/src/feeds/generators/json-feed.generator.js.map +1 -1
- package/dist/src/feeds/generators/xml-feed.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/xml-feed.generator.js +6 -5
- package/dist/src/feeds/generators/xml-feed.generator.js.map +1 -1
- package/dist/src/gql/generated.d.ts +5 -0
- package/dist/src/gql/generated.d.ts.map +1 -1
- package/dist/src/gql/generated.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/loaders/asset/asset.loader.d.ts.map +1 -1
- package/dist/src/loaders/asset/asset.loader.js +5 -1
- package/dist/src/loaders/asset/asset.loader.js.map +1 -1
- package/dist/src/loaders/base/validation-builder.d.ts +128 -3
- package/dist/src/loaders/base/validation-builder.d.ts.map +1 -1
- package/dist/src/loaders/base/validation-builder.js +177 -6
- package/dist/src/loaders/base/validation-builder.js.map +1 -1
- package/dist/src/loaders/collection/collection.loader.d.ts.map +1 -1
- package/dist/src/loaders/collection/collection.loader.js +22 -1
- package/dist/src/loaders/collection/collection.loader.js.map +1 -1
- package/dist/src/loaders/collection/helpers.d.ts +16 -1
- package/dist/src/loaders/collection/helpers.d.ts.map +1 -1
- package/dist/src/loaders/collection/helpers.js +37 -0
- package/dist/src/loaders/collection/helpers.js.map +1 -1
- package/dist/src/loaders/customer/customer.loader.d.ts.map +1 -1
- package/dist/src/loaders/customer/customer.loader.js +13 -1
- package/dist/src/loaders/customer/customer.loader.js.map +1 -1
- package/dist/src/loaders/customer/helpers.d.ts +15 -3
- package/dist/src/loaders/customer/helpers.d.ts.map +1 -1
- package/dist/src/loaders/customer/helpers.js +188 -7
- package/dist/src/loaders/customer/helpers.js.map +1 -1
- package/dist/src/loaders/facet-value/facet-value.loader.d.ts.map +1 -1
- package/dist/src/loaders/facet-value/facet-value.loader.js +18 -0
- package/dist/src/loaders/facet-value/facet-value.loader.js.map +1 -1
- package/dist/src/loaders/facet-value/types.d.ts +1 -1
- package/dist/src/loaders/facet-value/types.js +1 -1
- package/dist/src/loaders/facet-value/types.js.map +1 -1
- package/dist/src/loaders/inventory/inventory.loader.d.ts.map +1 -1
- package/dist/src/loaders/inventory/inventory.loader.js +1 -2
- package/dist/src/loaders/inventory/inventory.loader.js.map +1 -1
- package/dist/src/loaders/order/helpers.d.ts +16 -2
- package/dist/src/loaders/order/helpers.d.ts.map +1 -1
- package/dist/src/loaders/order/helpers.js +108 -0
- package/dist/src/loaders/order/helpers.js.map +1 -1
- package/dist/src/loaders/order/order.loader.d.ts +38 -0
- package/dist/src/loaders/order/order.loader.d.ts.map +1 -1
- package/dist/src/loaders/order/order.loader.js +238 -24
- package/dist/src/loaders/order/order.loader.js.map +1 -1
- package/dist/src/loaders/order/types.d.ts +10 -3
- package/dist/src/loaders/order/types.d.ts.map +1 -1
- package/dist/src/loaders/order/types.js +13 -2
- package/dist/src/loaders/order/types.js.map +1 -1
- package/dist/src/loaders/product/product.loader.d.ts.map +1 -1
- package/dist/src/loaders/product/product.loader.js +18 -2
- package/dist/src/loaders/product/product.loader.js.map +1 -1
- package/dist/src/loaders/product-variant/helpers.d.ts +20 -0
- package/dist/src/loaders/product-variant/helpers.d.ts.map +1 -0
- package/dist/src/loaders/product-variant/helpers.js +103 -0
- package/dist/src/loaders/product-variant/helpers.js.map +1 -0
- package/dist/src/loaders/product-variant/product-variant.loader.d.ts.map +1 -1
- package/dist/src/loaders/product-variant/product-variant.loader.js +76 -10
- package/dist/src/loaders/product-variant/product-variant.loader.js.map +1 -1
- package/dist/src/loaders/product-variant/types.d.ts +7 -0
- package/dist/src/loaders/product-variant/types.d.ts.map +1 -1
- package/dist/src/loaders/product-variant/types.js.map +1 -1
- package/dist/src/loaders/promotion/helpers.d.ts +29 -0
- package/dist/src/loaders/promotion/helpers.d.ts.map +1 -1
- package/dist/src/loaders/promotion/helpers.js +68 -0
- package/dist/src/loaders/promotion/helpers.js.map +1 -1
- package/dist/src/loaders/promotion/promotion.loader.d.ts.map +1 -1
- package/dist/src/loaders/promotion/promotion.loader.js +12 -2
- package/dist/src/loaders/promotion/promotion.loader.js.map +1 -1
- package/dist/src/loaders/shared-helpers.d.ts +42 -2
- package/dist/src/loaders/shared-helpers.d.ts.map +1 -1
- package/dist/src/loaders/shared-helpers.js +384 -5
- package/dist/src/loaders/shared-helpers.js.map +1 -1
- package/dist/src/operators/data/copy.operator.js +2 -2
- package/dist/src/operators/data/copy.operator.js.map +1 -1
- package/dist/src/operators/data/rename.operator.js +1 -1
- package/dist/src/operators/data/rename.operator.js.map +1 -1
- package/dist/src/operators/helpers.d.ts.map +1 -1
- package/dist/src/operators/helpers.js +11 -1
- package/dist/src/operators/helpers.js.map +1 -1
- package/dist/src/operators/operator-runtime-registry.d.ts +2 -2
- package/dist/src/operators/operator-runtime-registry.d.ts.map +1 -1
- package/dist/src/operators/operator-runtime-registry.js +1 -1
- package/dist/src/operators/operator-runtime-registry.js.map +1 -1
- package/dist/src/operators/script/script.operators.d.ts.map +1 -1
- package/dist/src/operators/script/script.operators.js +9 -3
- package/dist/src/operators/script/script.operators.js.map +1 -1
- package/dist/src/runtime/config-types.d.ts +6 -0
- package/dist/src/runtime/config-types.d.ts.map +1 -1
- package/dist/src/runtime/executor-helpers.d.ts +77 -0
- package/dist/src/runtime/executor-helpers.d.ts.map +1 -0
- package/dist/src/runtime/executor-helpers.js +143 -0
- package/dist/src/runtime/executor-helpers.js.map +1 -0
- package/dist/src/runtime/executor-types.d.ts +3 -2
- package/dist/src/runtime/executor-types.d.ts.map +1 -1
- package/dist/src/runtime/executors/export.executor.d.ts +3 -1
- package/dist/src/runtime/executors/export.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/export.executor.js +15 -3
- package/dist/src/runtime/executors/export.executor.js.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler-registry.js +5 -0
- package/dist/src/runtime/executors/exporters/export-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler.types.d.ts +3 -0
- package/dist/src/runtime/executors/exporters/export-handler.types.d.ts.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler.types.js.map +1 -1
- package/dist/src/runtime/executors/exporters/export-helpers.d.ts +1 -0
- package/dist/src/runtime/executors/exporters/export-helpers.d.ts.map +1 -1
- package/dist/src/runtime/executors/exporters/export-helpers.js +33 -4
- package/dist/src/runtime/executors/exporters/export-helpers.js.map +1 -1
- package/dist/src/runtime/executors/exporters/http-export.handler.js +4 -4
- package/dist/src/runtime/executors/exporters/http-export.handler.js.map +1 -1
- package/dist/src/runtime/executors/extractors/file-extract.handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/extractors/file-extract.handler.js +33 -13
- package/dist/src/runtime/executors/extractors/file-extract.handler.js.map +1 -1
- package/dist/src/runtime/executors/extractors/memory-extract.handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/extractors/memory-extract.handler.js +17 -9
- package/dist/src/runtime/executors/extractors/memory-extract.handler.js.map +1 -1
- package/dist/src/runtime/executors/feed.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/feed.executor.js +11 -2
- package/dist/src/runtime/executors/feed.executor.js.map +1 -1
- package/dist/src/runtime/executors/feeds/feed-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/feeds/feed-handler-registry.js +4 -0
- package/dist/src/runtime/executors/feeds/feed-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/gate.executor.d.ts +3 -1
- package/dist/src/runtime/executors/gate.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/gate.executor.js +47 -26
- package/dist/src/runtime/executors/gate.executor.js.map +1 -1
- package/dist/src/runtime/executors/loaders/asset-handler.js +1 -1
- package/dist/src/runtime/executors/loaders/asset-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/asset-import-handler.js +1 -1
- package/dist/src/runtime/executors/loaders/asset-import-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/channel-handler.d.ts +3 -1
- package/dist/src/runtime/executors/loaders/channel-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/channel-handler.js +28 -5
- package/dist/src/runtime/executors/loaders/channel-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/collection-handler.d.ts +14 -2
- package/dist/src/runtime/executors/loaders/collection-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/collection-handler.js +113 -23
- package/dist/src/runtime/executors/loaders/collection-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-group-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-group-handler.js +2 -20
- package/dist/src/runtime/executors/loaders/customer-group-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-handler.d.ts +6 -1
- package/dist/src/runtime/executors/loaders/customer-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-handler.js +128 -15
- package/dist/src/runtime/executors/loaders/customer-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/deletion-handler.d.ts +39 -0
- package/dist/src/runtime/executors/loaders/deletion-handler.d.ts.map +1 -0
- package/dist/src/runtime/executors/loaders/deletion-handler.js +414 -0
- package/dist/src/runtime/executors/loaders/deletion-handler.js.map +1 -0
- package/dist/src/runtime/executors/loaders/facet-handler.d.ts +18 -3
- package/dist/src/runtime/executors/loaders/facet-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/facet-handler.js +161 -28
- package/dist/src/runtime/executors/loaders/facet-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/graphql-mutation-handler.js +1 -1
- package/dist/src/runtime/executors/loaders/graphql-mutation-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/index.d.ts +2 -0
- package/dist/src/runtime/executors/loaders/index.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/index.js +5 -1
- package/dist/src/runtime/executors/loaders/index.js.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-adjust-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js +2 -21
- package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-handler.d.ts +2 -1
- package/dist/src/runtime/executors/loaders/inventory-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-handler.js +11 -9
- package/dist/src/runtime/executors/loaders/inventory-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/loader-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/loader-handler-registry.js +150 -11
- package/dist/src/runtime/executors/loaders/loader-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/loaders/order-handler.d.ts +32 -4
- package/dist/src/runtime/executors/loaders/order-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/order-handler.js +201 -18
- package/dist/src/runtime/executors/loaders/order-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts +15 -0
- package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts.map +1 -0
- package/dist/src/runtime/executors/loaders/order-upsert-handler.js +89 -0
- package/dist/src/runtime/executors/loaders/order-upsert-handler.js.map +1 -0
- package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts +11 -2
- package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/payment-method-handler.js +92 -34
- package/dist/src/runtime/executors/loaders/payment-method-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/product-handler.d.ts +20 -0
- package/dist/src/runtime/executors/loaders/product-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/product-handler.js +121 -31
- package/dist/src/runtime/executors/loaders/product-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/promotion-handler.d.ts +9 -2
- package/dist/src/runtime/executors/loaders/promotion-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/promotion-handler.js +134 -68
- package/dist/src/runtime/executors/loaders/promotion-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/rest-handler.js +1 -1
- package/dist/src/runtime/executors/loaders/rest-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/shared-lookups.d.ts +62 -1
- package/dist/src/runtime/executors/loaders/shared-lookups.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/shared-lookups.js +238 -0
- package/dist/src/runtime/executors/loaders/shared-lookups.js.map +1 -1
- package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts +11 -6
- package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/shipping-method-handler.js +168 -54
- package/dist/src/runtime/executors/loaders/shipping-method-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/stock-location-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/stock-location-handler.js +2 -20
- package/dist/src/runtime/executors/loaders/stock-location-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/tax-rate-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/tax-rate-handler.js +14 -1
- package/dist/src/runtime/executors/loaders/tax-rate-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/types.d.ts +2 -0
- package/dist/src/runtime/executors/loaders/types.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/variant-handler.d.ts +24 -2
- package/dist/src/runtime/executors/loaders/variant-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/variant-handler.js +266 -47
- package/dist/src/runtime/executors/loaders/variant-handler.js.map +1 -1
- package/dist/src/runtime/executors/sink-handler-registry.d.ts +7 -11
- package/dist/src/runtime/executors/sink-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/sink-handler-registry.js +376 -10
- package/dist/src/runtime/executors/sink-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/sink.executor.d.ts +1 -0
- package/dist/src/runtime/executors/sink.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/sink.executor.js +82 -12
- package/dist/src/runtime/executors/sink.executor.js.map +1 -1
- package/dist/src/runtime/executors/transform.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/transform.executor.js +31 -2
- package/dist/src/runtime/executors/transform.executor.js.map +1 -1
- package/dist/src/runtime/orchestration/graph-executor.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/graph-executor.js +3 -2
- package/dist/src/runtime/orchestration/graph-executor.js.map +1 -1
- package/dist/src/runtime/orchestration/helpers.d.ts +4 -1
- package/dist/src/runtime/orchestration/helpers.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/helpers.js +7 -2
- package/dist/src/runtime/orchestration/helpers.js.map +1 -1
- package/dist/src/runtime/orchestration/linear-executor.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/linear-executor.js +3 -2
- package/dist/src/runtime/orchestration/linear-executor.js.map +1 -1
- package/dist/src/runtime/orchestration/replay-executor.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/replay-executor.js +3 -2
- package/dist/src/runtime/orchestration/replay-executor.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js +12 -12
- package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js +12 -12
- package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js +2 -2
- package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js +12 -12
- package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js +4 -3
- package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js +4 -4
- package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/types.d.ts +1 -0
- package/dist/src/runtime/orchestration/types.d.ts.map +1 -1
- package/dist/src/runtime/utils.d.ts.map +1 -1
- package/dist/src/runtime/utils.js +8 -1
- package/dist/src/runtime/utils.js.map +1 -1
- package/dist/src/sdk/adapters/queue/index.d.ts +1 -0
- package/dist/src/sdk/adapters/queue/index.d.ts.map +1 -1
- package/dist/src/sdk/adapters/queue/index.js +1 -0
- package/dist/src/sdk/adapters/queue/index.js.map +1 -1
- package/dist/src/sdk/adapters/queue/internal.adapter.d.ts +32 -0
- package/dist/src/sdk/adapters/queue/internal.adapter.d.ts.map +1 -0
- package/dist/src/sdk/adapters/queue/internal.adapter.js +68 -0
- package/dist/src/sdk/adapters/queue/internal.adapter.js.map +1 -0
- package/dist/src/sdk/adapters/queue/queue-adapter.registry.d.ts.map +1 -1
- package/dist/src/sdk/adapters/queue/queue-adapter.registry.js +3 -0
- package/dist/src/sdk/adapters/queue/queue-adapter.registry.js.map +1 -1
- package/dist/src/sdk/adapters/queue/rabbitmq.adapter.d.ts.map +1 -1
- package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js +2 -1
- package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js.map +1 -1
- package/dist/src/sdk/constants.d.ts +2 -2
- package/dist/src/sdk/constants.d.ts.map +1 -1
- package/dist/src/sdk/dsl/pipeline-builder.d.ts +8 -2
- package/dist/src/sdk/dsl/pipeline-builder.d.ts.map +1 -1
- package/dist/src/sdk/dsl/pipeline-builder.js +115 -19
- package/dist/src/sdk/dsl/pipeline-builder.js.map +1 -1
- package/dist/src/sdk/dsl/step-configs.d.ts +24 -0
- package/dist/src/sdk/dsl/step-configs.d.ts.map +1 -1
- package/dist/src/services/data/record-error.service.d.ts +1 -1
- package/dist/src/services/data/record-error.service.d.ts.map +1 -1
- package/dist/src/services/data/record-error.service.js +4 -1
- package/dist/src/services/data/record-error.service.js.map +1 -1
- package/dist/src/services/events/consumer-discovery.d.ts.map +1 -1
- package/dist/src/services/events/consumer-discovery.js +2 -1
- package/dist/src/services/events/consumer-discovery.js.map +1 -1
- package/dist/src/services/events/consumer-lifecycle.d.ts.map +1 -1
- package/dist/src/services/events/consumer-lifecycle.js +19 -15
- package/dist/src/services/events/consumer-lifecycle.js.map +1 -1
- package/dist/src/services/events/event-trigger.service.d.ts.map +1 -1
- package/dist/src/services/events/event-trigger.service.js +9 -3
- package/dist/src/services/events/event-trigger.service.js.map +1 -1
- package/dist/src/services/events/hook.service.d.ts.map +1 -1
- package/dist/src/services/events/hook.service.js +7 -3
- package/dist/src/services/events/hook.service.js.map +1 -1
- package/dist/src/services/events/message-processing.d.ts.map +1 -1
- package/dist/src/services/events/message-processing.js +13 -8
- package/dist/src/services/events/message-processing.js.map +1 -1
- package/dist/src/services/logger/datahub-logger.d.ts +7 -0
- package/dist/src/services/logger/datahub-logger.d.ts.map +1 -1
- package/dist/src/services/logger/datahub-logger.js +9 -0
- package/dist/src/services/logger/datahub-logger.js.map +1 -1
- package/dist/src/services/logger/execution-logger.d.ts +1 -1
- package/dist/src/services/logger/execution-logger.d.ts.map +1 -1
- package/dist/src/services/logger/execution-logger.js +8 -4
- package/dist/src/services/logger/execution-logger.js.map +1 -1
- package/dist/src/services/pipeline/pipeline-runner.service.d.ts +3 -1
- package/dist/src/services/pipeline/pipeline-runner.service.d.ts.map +1 -1
- package/dist/src/services/pipeline/pipeline-runner.service.js +17 -7
- package/dist/src/services/pipeline/pipeline-runner.service.js.map +1 -1
- package/dist/src/services/pipeline/pipeline.service.d.ts.map +1 -1
- package/dist/src/services/pipeline/pipeline.service.js +8 -2
- package/dist/src/services/pipeline/pipeline.service.js.map +1 -1
- package/dist/src/services/storage/retention.service.d.ts.map +1 -1
- package/dist/src/services/storage/retention.service.js +22 -0
- package/dist/src/services/storage/retention.service.js.map +1 -1
- package/dist/src/services/testing/step-test.service.d.ts.map +1 -1
- package/dist/src/services/testing/step-test.service.js +17 -1
- package/dist/src/services/testing/step-test.service.js.map +1 -1
- package/dist/src/services/validation/definition-validation.service.d.ts.map +1 -1
- package/dist/src/services/validation/definition-validation.service.js +4 -1
- package/dist/src/services/validation/definition-validation.service.js.map +1 -1
- package/dist/src/services/validation/trigger-validation.d.ts.map +1 -1
- package/dist/src/services/validation/trigger-validation.js +76 -2
- package/dist/src/services/validation/trigger-validation.js.map +1 -1
- package/dist/src/types/index.d.ts +1 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/loader-configs.d.ts +1071 -0
- package/dist/src/types/loader-configs.d.ts.map +1 -0
- package/dist/src/types/loader-configs.js +54 -0
- package/dist/src/types/loader-configs.js.map +1 -0
- package/dist/src/types/step-configs.d.ts +1 -0
- package/dist/src/types/step-configs.d.ts.map +1 -1
- package/dist/src/types/step-configs.js +3 -0
- package/dist/src/types/step-configs.js.map +1 -1
- package/dist/src/utils/code-security.utils.d.ts +18 -0
- package/dist/src/utils/code-security.utils.d.ts.map +1 -1
- package/dist/src/utils/code-security.utils.js +125 -9
- package/dist/src/utils/code-security.utils.js.map +1 -1
- package/dist/src/utils/error.utils.d.ts +1 -1
- package/dist/src/utils/error.utils.d.ts.map +1 -1
- package/dist/src/utils/error.utils.js +2 -1
- package/dist/src/utils/error.utils.js.map +1 -1
- package/dist/src/utils/url-security.utils.d.ts +5 -3
- package/dist/src/utils/url-security.utils.d.ts.map +1 -1
- package/dist/src/utils/url-security.utils.js +20 -4
- package/dist/src/utils/url-security.utils.js.map +1 -1
- package/dist/src/validation/pipeline-definition.validator.js +2 -1
- package/dist/src/validation/pipeline-definition.validator.js.map +1 -1
- package/docs/developer-guide/README.md +2 -0
- package/docs/developer-guide/dsl/pipeline-builder.md +12 -0
- package/docs/developer-guide/extending/README.md +230 -10
- package/docs/developer-guide/extending/custom-sinks.md +87 -0
- package/docs/developer-guide/extending/events.md +4 -1
- package/docs/examples/validation-error-messages.md +246 -0
- package/docs/guides/multi-channel.md +1190 -0
- package/docs/guides/multi-currency.md +881 -0
- package/docs/guides/multi-entity.md +597 -0
- package/docs/guides/multi-language.md +957 -0
- package/docs/reference/README.md +11 -4
- package/docs/reference/extractors.md +30 -0
- package/docs/reference/loaders.md +396 -21
- package/docs/reference/operators-complete.md +1251 -0
- package/docs/reference/operators.md +36 -2
- package/docs/reference/sinks.md +7 -6
- package/docs/reference/step-types.md +12 -5
- package/docs/user-guide/pipelines.md +82 -13
- package/package.json +1 -1
- package/shared/types/adapter-config.types.ts +439 -10
- package/shared/types/index.ts +25 -0
- package/shared/types/loader.types.ts +4 -0
- package/shared/types/step.types.ts +6 -0
- package/shared/utils/error.ts +11 -0
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
# Multi-Entity Mode Guide
|
|
2
|
+
|
|
3
|
+
Complete guide to configurable nested entity modes in the Data Hub plugin.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Introduction
|
|
8
|
+
|
|
9
|
+
### What Are Nested Entity Modes?
|
|
10
|
+
|
|
11
|
+
Nested entity modes control how arrays of related entities are handled during imports:
|
|
12
|
+
- **Customer addresses** - array of address objects
|
|
13
|
+
- **Product facet values** - array of facet assignments
|
|
14
|
+
- **Order line items** - array of products in the order
|
|
15
|
+
- **Product assets** - array of images
|
|
16
|
+
- And more...
|
|
17
|
+
|
|
18
|
+
### The Problem
|
|
19
|
+
|
|
20
|
+
**Without explicit modes**, re-running import pipelines can cause data corruption:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// Import customer with 2 addresses
|
|
24
|
+
.load('import-customers', {
|
|
25
|
+
addressesField: 'addresses'
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
// Run 1: Customer has 2 addresses ✅
|
|
29
|
+
// Run 2: Customer has 4 addresses ❌ (duplicates!)
|
|
30
|
+
// Run 3: Customer has 6 addresses ❌ (more duplicates!)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The root cause: The loader always created new nested entities without checking for existing ones.
|
|
34
|
+
|
|
35
|
+
### The Solution
|
|
36
|
+
|
|
37
|
+
**Configurable modes** give you full control over how nested entities are managed:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
.load('import-customers', {
|
|
41
|
+
addressesMode: 'UPSERT_BY_MATCH', // ← Smart matching prevents duplicates
|
|
42
|
+
addressMatchFields: 'streetLine1,city,postalCode,countryCode'
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
// Run 1-10: Customer always has exactly 2 addresses ✅
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Mode Categories
|
|
51
|
+
|
|
52
|
+
### 1. Matching Modes (Smart Upsert)
|
|
53
|
+
|
|
54
|
+
**Pattern**: Match by specific fields, update if exists, create if not
|
|
55
|
+
|
|
56
|
+
**Modes**: `UPSERT_BY_MATCH`, `UPSERT_BY_URL`, `UPSERT_BY_NAME`, `MERGE_BY_SKU`, `UPDATE_BY_ID`
|
|
57
|
+
|
|
58
|
+
**When to use**:
|
|
59
|
+
- Source system doesn't track Vendure IDs
|
|
60
|
+
- Want to prevent duplicates automatically
|
|
61
|
+
- Data can be uniquely identified by business fields
|
|
62
|
+
- **Most common use case** - recommended default
|
|
63
|
+
|
|
64
|
+
**Example - Customer addresses:**
|
|
65
|
+
```typescript
|
|
66
|
+
.load('import-customers', {
|
|
67
|
+
addressesMode: 'UPSERT_BY_MATCH', // ← Prevents duplicate addresses
|
|
68
|
+
addressMatchFields: 'streetLine1,city,countryCode'
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
// Without addressesMode: Run 1 = 2 addresses, Run 2 = 4 addresses (duplicates)
|
|
72
|
+
// With addressesMode: Run 1-100 = always 2 addresses
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**How it works**:
|
|
76
|
+
1. For each new address, check existing addresses
|
|
77
|
+
2. Match by specified fields (e.g., street + city + country)
|
|
78
|
+
3. If match found → update existing address
|
|
79
|
+
4. If no match → create new address
|
|
80
|
+
5. Result: No duplicates!
|
|
81
|
+
|
|
82
|
+
**Customizable matching**:
|
|
83
|
+
```typescript
|
|
84
|
+
// Match by street + city + country (default)
|
|
85
|
+
addressMatchFields: 'streetLine1,city,countryCode'
|
|
86
|
+
|
|
87
|
+
// Match by street + city + postal code + country (more specific)
|
|
88
|
+
addressMatchFields: 'streetLine1,city,postalCode,countryCode'
|
|
89
|
+
|
|
90
|
+
// Match by street only (less specific - may incorrectly match)
|
|
91
|
+
addressMatchFields: 'streetLine1' // ⚠️ Too broad
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 2. Replacement Modes (Full Control)
|
|
97
|
+
|
|
98
|
+
**Pattern**: Remove all existing, create new from source data
|
|
99
|
+
|
|
100
|
+
**Modes**: `REPLACE_ALL`
|
|
101
|
+
|
|
102
|
+
**When to use**:
|
|
103
|
+
- Source system is single source of truth
|
|
104
|
+
- Want complete control over nested entities
|
|
105
|
+
- Cleaning up old/stale data
|
|
106
|
+
|
|
107
|
+
**Example - Product facets:**
|
|
108
|
+
```typescript
|
|
109
|
+
.load('sync-products-from-pim', {
|
|
110
|
+
adapterCode: 'productUpsert',
|
|
111
|
+
strategy: 'UPSERT',
|
|
112
|
+
facetValuesMode: 'REPLACE_ALL' // PIM controls all facet assignments
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
// PIM says: [color-red, size-large]
|
|
116
|
+
// Result: Vendure has exactly [color-red, size-large]
|
|
117
|
+
// Old facets removed, new facets added
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Supported by**: All modes support `REPLACE_ALL`
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### 2. Merge Modes (Additive)
|
|
125
|
+
|
|
126
|
+
**Pattern**: Add new items, keep existing ones
|
|
127
|
+
|
|
128
|
+
**Modes**: `MERGE`, `APPEND_ONLY`, `MERGE_BY_SKU`
|
|
129
|
+
|
|
130
|
+
**When to use**:
|
|
131
|
+
- Multiple data sources contribute to same entity
|
|
132
|
+
- Never want to lose existing data
|
|
133
|
+
- Incremental updates only
|
|
134
|
+
|
|
135
|
+
**Example - Facet values from multiple sources:**
|
|
136
|
+
```typescript
|
|
137
|
+
// Run 1: PIM imports base facets
|
|
138
|
+
.load('import-from-pim', {
|
|
139
|
+
facetValuesMode: 'MERGE'
|
|
140
|
+
})
|
|
141
|
+
// Input: [color-red, size-large]
|
|
142
|
+
// Result: [color-red, size-large]
|
|
143
|
+
|
|
144
|
+
// Run 2: Admin adds manual facets
|
|
145
|
+
.load('enrich-from-admin', {
|
|
146
|
+
facetValuesMode: 'MERGE'
|
|
147
|
+
})
|
|
148
|
+
// Input: [material-cotton, eco-friendly]
|
|
149
|
+
// Result: [color-red, size-large, material-cotton, eco-friendly] ✅
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Example - Order lines smart merging:**
|
|
153
|
+
```typescript
|
|
154
|
+
.load('add-order-items', {
|
|
155
|
+
adapterCode: 'orderUpsert',
|
|
156
|
+
linesMode: 'MERGE_BY_SKU' // Update quantities, add new SKUs
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
// Existing order: PROD-A qty:2
|
|
160
|
+
// Input: PROD-A qty:5, PROD-B qty:1
|
|
161
|
+
// Result: PROD-A qty:5 (updated), PROD-B qty:1 (added) ✅
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Difference between MERGE and APPEND_ONLY**:
|
|
165
|
+
- `MERGE`: Deduplicates (same facet won't be added twice)
|
|
166
|
+
- `APPEND_ONLY`: Allows duplicates (useful for history tracking)
|
|
167
|
+
- `MERGE_BY_SKU`: Smart merging based on SKU match (order lines only)
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### 3. Removal Modes
|
|
172
|
+
|
|
173
|
+
**Pattern**: Remove specified items from entity
|
|
174
|
+
|
|
175
|
+
**Modes**: `REMOVE`
|
|
176
|
+
|
|
177
|
+
**When to use**:
|
|
178
|
+
- Removing discontinued or incorrect assignments
|
|
179
|
+
- Cleaning up specific facets/groups
|
|
180
|
+
|
|
181
|
+
**Example - Remove discontinued facets:**
|
|
182
|
+
```typescript
|
|
183
|
+
.load('remove-old-facets', {
|
|
184
|
+
adapterCode: 'productUpsert',
|
|
185
|
+
strategy: 'UPDATE',
|
|
186
|
+
facetValuesMode: 'REMOVE'
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
// Existing facets: [color-red, size-large, season-2023]
|
|
190
|
+
// Input: [season-2023] // Remove this facet
|
|
191
|
+
// Result: [color-red, size-large] ✅
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### 4. Skip Mode
|
|
197
|
+
|
|
198
|
+
**Pattern**: Don't touch nested entities at all
|
|
199
|
+
|
|
200
|
+
**Modes**: `SKIP`
|
|
201
|
+
|
|
202
|
+
**When to use**:
|
|
203
|
+
- Partial updates - only modifying specific fields
|
|
204
|
+
- Want to leave nested entities completely unchanged
|
|
205
|
+
|
|
206
|
+
**Example - Update prices without touching facets:**
|
|
207
|
+
```typescript
|
|
208
|
+
.load('update-prices-only', {
|
|
209
|
+
adapterCode: 'productUpsert',
|
|
210
|
+
strategy: 'UPDATE',
|
|
211
|
+
priceField: 'newPrice',
|
|
212
|
+
facetValuesMode: 'SKIP', // Don't modify facets
|
|
213
|
+
assetsMode: 'SKIP' // Don't modify images
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
// Only updates price field, everything else unchanged ✅
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## All Implemented Modes Reference
|
|
222
|
+
|
|
223
|
+
### Customer Loader
|
|
224
|
+
|
|
225
|
+
**addressesMode** - Control customer address management
|
|
226
|
+
|
|
227
|
+
| Mode | Behavior |
|
|
228
|
+
|------|----------|
|
|
229
|
+
| `UPSERT_BY_MATCH` | Match by fields, update existing or create new (default, **recommended**) |
|
|
230
|
+
| `REPLACE_ALL` | Delete all addresses, create new from source |
|
|
231
|
+
| `APPEND_ONLY` | Always create new (allows duplicates - rare) |
|
|
232
|
+
| `UPDATE_BY_ID` | Update by Vendure ID, create if no ID |
|
|
233
|
+
| `SKIP` | Don't modify addresses |
|
|
234
|
+
|
|
235
|
+
**Configuration:**
|
|
236
|
+
```typescript
|
|
237
|
+
.load('import-customers', {
|
|
238
|
+
adapterCode: 'customerUpsert',
|
|
239
|
+
addressesMode: 'UPSERT_BY_MATCH', // Default
|
|
240
|
+
addressMatchFields: 'streetLine1,city,countryCode' // Customizable
|
|
241
|
+
})
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**This mode prevents duplicate addresses** by matching existing addresses before creating new ones. Without it, every pipeline run would create duplicate addresses.
|
|
245
|
+
|
|
246
|
+
**groupsMode** - Control customer group assignments
|
|
247
|
+
|
|
248
|
+
| Mode | Behavior |
|
|
249
|
+
|------|----------|
|
|
250
|
+
| `REPLACE_ALL` | Remove all groups, assign new (default) |
|
|
251
|
+
| `MERGE` | Add new groups, keep existing |
|
|
252
|
+
| `REMOVE` | Remove specified groups |
|
|
253
|
+
| `SKIP` | Don't modify groups |
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
### Product Loader
|
|
258
|
+
|
|
259
|
+
**facetValuesMode** - Control facet value assignments
|
|
260
|
+
|
|
261
|
+
| Mode | Behavior |
|
|
262
|
+
|------|----------|
|
|
263
|
+
| `REPLACE_ALL` | Replace all facets (default) |
|
|
264
|
+
| `MERGE` | Add new, keep existing |
|
|
265
|
+
| `REMOVE` | Remove specified facets |
|
|
266
|
+
| `SKIP` | Don't touch facets |
|
|
267
|
+
|
|
268
|
+
**Configuration:**
|
|
269
|
+
```typescript
|
|
270
|
+
.load('upsert-products', {
|
|
271
|
+
adapterCode: 'productUpsert',
|
|
272
|
+
facetValuesMode: 'MERGE'
|
|
273
|
+
})
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
### Product Variant Loader
|
|
279
|
+
|
|
280
|
+
**facetValuesMode** - Control facet value assignments (same as Product)
|
|
281
|
+
|
|
282
|
+
| Mode | Behavior |
|
|
283
|
+
|------|----------|
|
|
284
|
+
| `REPLACE_ALL` | Replace all facets (default) |
|
|
285
|
+
| `MERGE` | Add new, keep existing |
|
|
286
|
+
| `REMOVE` | Remove specified facets |
|
|
287
|
+
| `SKIP` | Don't touch facets |
|
|
288
|
+
|
|
289
|
+
**Configuration:**
|
|
290
|
+
```typescript
|
|
291
|
+
.load('upsert-variants', {
|
|
292
|
+
adapterCode: 'variantUpsert',
|
|
293
|
+
skuField: 'sku',
|
|
294
|
+
facetValuesMode: 'SKIP' // Don't modify facets
|
|
295
|
+
})
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
### Order Loader
|
|
301
|
+
|
|
302
|
+
**linesMode** - Control order line item management
|
|
303
|
+
|
|
304
|
+
| Mode | Behavior |
|
|
305
|
+
|------|----------|
|
|
306
|
+
| `REPLACE_ALL` | Remove all lines, add new (default) |
|
|
307
|
+
| `MERGE_BY_SKU` | Update quantities for existing SKUs, add new |
|
|
308
|
+
| `APPEND_ONLY` | Always add new lines (allows duplicates) |
|
|
309
|
+
| `SKIP` | Don't modify order lines |
|
|
310
|
+
|
|
311
|
+
**Configuration:**
|
|
312
|
+
```typescript
|
|
313
|
+
.load('update-orders', {
|
|
314
|
+
adapterCode: 'orderUpsert',
|
|
315
|
+
codeField: 'orderCode',
|
|
316
|
+
linesMode: 'MERGE_BY_SKU'
|
|
317
|
+
})
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Decision Guide: Which Mode to Use?
|
|
323
|
+
|
|
324
|
+
### For Facet Values (Product/Variant)
|
|
325
|
+
|
|
326
|
+
| Scenario | Recommended Mode |
|
|
327
|
+
|----------|-----------------|
|
|
328
|
+
| PIM is single source of truth | `REPLACE_ALL` |
|
|
329
|
+
| Multiple sources add facets | `MERGE` |
|
|
330
|
+
| Removing specific facets | `REMOVE` |
|
|
331
|
+
| Only updating prices/stock | `SKIP` |
|
|
332
|
+
|
|
333
|
+
### For Order Lines
|
|
334
|
+
|
|
335
|
+
| Scenario | Recommended Mode |
|
|
336
|
+
|----------|-----------------|
|
|
337
|
+
| Full order import/migration | `REPLACE_ALL` |
|
|
338
|
+
| Adding items to existing order | `MERGE_BY_SKU` |
|
|
339
|
+
| Order modification history | `APPEND_ONLY` |
|
|
340
|
+
| Only updating order state | `SKIP` |
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Best Practices
|
|
345
|
+
|
|
346
|
+
### 1. Always Specify Modes Explicitly
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
// ❌ Bad: Relies on defaults
|
|
350
|
+
.load('upsert-products', {})
|
|
351
|
+
|
|
352
|
+
// ✅ Good: Explicit configuration
|
|
353
|
+
.load('upsert-products', {
|
|
354
|
+
facetValuesMode: 'REPLACE_ALL'
|
|
355
|
+
})
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Why**: Defaults may change in future versions, explicit config prevents surprises.
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
### 2. Use SKIP for Partial Updates
|
|
363
|
+
|
|
364
|
+
When updating only specific fields, explicitly skip nested entities:
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
// Updating product descriptions only
|
|
368
|
+
.load('update-descriptions', {
|
|
369
|
+
strategy: 'UPDATE',
|
|
370
|
+
descriptionField: 'newDescription',
|
|
371
|
+
facetValuesMode: 'SKIP', // ← Don't accidentally clear facets
|
|
372
|
+
})
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
### 3. Document Your Mode Choices
|
|
378
|
+
|
|
379
|
+
Add comments explaining why you chose each mode:
|
|
380
|
+
|
|
381
|
+
```typescript
|
|
382
|
+
.load('import-products', {
|
|
383
|
+
// PIM controls all facet assignments - replace completely
|
|
384
|
+
facetValuesMode: 'REPLACE_ALL',
|
|
385
|
+
|
|
386
|
+
// Images come from multiple sources - merge them
|
|
387
|
+
assetsMode: 'MERGE',
|
|
388
|
+
})
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
### 4. Test with Dry Run First
|
|
394
|
+
|
|
395
|
+
Always test mode configuration before production:
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
npm run pipeline:run my-pipeline --dry-run
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
### 5. Choose the Right Merge Strategy
|
|
404
|
+
|
|
405
|
+
**For deduplication**: Use `MERGE`
|
|
406
|
+
```typescript
|
|
407
|
+
facetValuesMode: 'MERGE' // Won't add duplicate facets
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
**For history tracking**: Use `APPEND_ONLY`
|
|
411
|
+
```typescript
|
|
412
|
+
addressesMode: 'APPEND_ONLY' // Keeps address history (rare)
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
**For smart updates**: Use SKU-based merging
|
|
416
|
+
```typescript
|
|
417
|
+
linesMode: 'MERGE_BY_SKU' // Updates quantities intelligently
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## Complete Examples
|
|
423
|
+
|
|
424
|
+
### Example 1: Product Catalog from Multiple Sources
|
|
425
|
+
|
|
426
|
+
```typescript
|
|
427
|
+
// Step 1: Import base products from PIM
|
|
428
|
+
PipelineBuilder.create('import-from-pim')
|
|
429
|
+
.extract('pim-products', {
|
|
430
|
+
adapterCode: 'httpApi',
|
|
431
|
+
url: 'https://pim.example.com/api/products'
|
|
432
|
+
})
|
|
433
|
+
.load('create-products', {
|
|
434
|
+
adapterCode: 'productUpsert',
|
|
435
|
+
strategy: 'UPSERT',
|
|
436
|
+
facetValuesMode: 'REPLACE_ALL', // PIM controls facets
|
|
437
|
+
assetsMode: 'REPLACE_ALL' // PIM controls images
|
|
438
|
+
})
|
|
439
|
+
|
|
440
|
+
// Step 2: Enrich with additional facets from admin
|
|
441
|
+
PipelineBuilder.create('enrich-from-admin')
|
|
442
|
+
.extract('admin-enrichment', {
|
|
443
|
+
adapterCode: 'csv',
|
|
444
|
+
filePath: 'admin-facets.csv'
|
|
445
|
+
})
|
|
446
|
+
.load('add-facets', {
|
|
447
|
+
adapterCode: 'productUpsert',
|
|
448
|
+
strategy: 'UPDATE',
|
|
449
|
+
facetValuesMode: 'MERGE', // Add to existing facets
|
|
450
|
+
assetsMode: 'SKIP' // Don't touch images
|
|
451
|
+
})
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
### Example 2: Order Migration with Line Management
|
|
457
|
+
|
|
458
|
+
```typescript
|
|
459
|
+
PipelineBuilder.create('migrate-legacy-orders')
|
|
460
|
+
.extract('legacy-orders', {
|
|
461
|
+
adapterCode: 'database',
|
|
462
|
+
query: 'SELECT * FROM legacy_orders'
|
|
463
|
+
})
|
|
464
|
+
.transform('map-fields', {
|
|
465
|
+
operators: [
|
|
466
|
+
{ op: 'copy', args: { source: 'order_id', target: 'code' } },
|
|
467
|
+
{ op: 'copy', args: { source: 'customer_email', target: 'customerEmail' } },
|
|
468
|
+
]
|
|
469
|
+
})
|
|
470
|
+
.load('create-orders', {
|
|
471
|
+
adapterCode: 'orderUpsert',
|
|
472
|
+
strategy: 'CREATE',
|
|
473
|
+
codeField: 'code',
|
|
474
|
+
linesMode: 'REPLACE_ALL', // Complete order import
|
|
475
|
+
stateField: 'finalState',
|
|
476
|
+
orderPlacedAtField: 'originalDate'
|
|
477
|
+
})
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
### Example 3: Incremental Product Updates
|
|
483
|
+
|
|
484
|
+
```typescript
|
|
485
|
+
// Daily price updates - don't touch anything else
|
|
486
|
+
PipelineBuilder.create('update-prices-daily')
|
|
487
|
+
.extract('price-feed', {
|
|
488
|
+
adapterCode: 'ftp',
|
|
489
|
+
host: 'ftp.supplier.com',
|
|
490
|
+
path: '/prices/daily.csv'
|
|
491
|
+
})
|
|
492
|
+
.load('update-prices', {
|
|
493
|
+
adapterCode: 'variantUpsert',
|
|
494
|
+
strategy: 'UPDATE',
|
|
495
|
+
skuField: 'sku',
|
|
496
|
+
priceField: 'newPrice',
|
|
497
|
+
facetValuesMode: 'SKIP', // Don't modify facets
|
|
498
|
+
assetsMode: 'SKIP' // Don't modify images
|
|
499
|
+
})
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
## Troubleshooting
|
|
505
|
+
|
|
506
|
+
### "I'm still getting duplicates!"
|
|
507
|
+
|
|
508
|
+
**Check**:
|
|
509
|
+
1. Is the mode explicitly set? Defaults may not match your expectation
|
|
510
|
+
2. Using `MERGE` instead of `APPEND_ONLY`? MERGE deduplicates
|
|
511
|
+
3. For order lines: Using `MERGE_BY_SKU` instead of `APPEND_ONLY`?
|
|
512
|
+
|
|
513
|
+
**Solution**: Set explicit mode
|
|
514
|
+
```typescript
|
|
515
|
+
facetValuesMode: 'REPLACE_ALL' // or MERGE, never APPEND_ONLY for facets
|
|
516
|
+
linesMode: 'MERGE_BY_SKU' // for smart order line merging
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
### "My nested entities aren't updating"
|
|
522
|
+
|
|
523
|
+
**Check**:
|
|
524
|
+
1. Mode set to `SKIP`? Change to `REPLACE_ALL` or `MERGE`
|
|
525
|
+
2. Field name correct? (`linesField`, not `lineItems`)
|
|
526
|
+
3. Strategy allows updates? Must be `UPDATE` or `UPSERT`
|
|
527
|
+
|
|
528
|
+
**Solution**:
|
|
529
|
+
```typescript
|
|
530
|
+
.load('update-entity', {
|
|
531
|
+
strategy: 'UPDATE', // ← Allow updates
|
|
532
|
+
facetValuesMode: 'MERGE', // ← Not SKIP
|
|
533
|
+
facetValueCodesField: 'facets' // ← Correct field name
|
|
534
|
+
})
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
### "MERGE_BY_SKU isn't working for my order lines"
|
|
540
|
+
|
|
541
|
+
**Requirements**:
|
|
542
|
+
- Order must exist (use `UPDATE` or `UPSERT` strategy)
|
|
543
|
+
- SKU field must be correctly mapped
|
|
544
|
+
- Variants must exist in Vendure
|
|
545
|
+
|
|
546
|
+
**Correct configuration**:
|
|
547
|
+
```typescript
|
|
548
|
+
.load('update-order-lines', {
|
|
549
|
+
adapterCode: 'orderUpsert',
|
|
550
|
+
strategy: 'UPDATE', // ← Order must exist
|
|
551
|
+
codeField: 'orderCode',
|
|
552
|
+
linesField: 'items',
|
|
553
|
+
linesMode: 'MERGE_BY_SKU'
|
|
554
|
+
})
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
## Migration Guide
|
|
560
|
+
|
|
561
|
+
### Adding Explicit Modes to Existing Pipelines
|
|
562
|
+
|
|
563
|
+
**Step 1**: Update pipeline configuration with explicit modes
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
// Without explicit mode
|
|
567
|
+
.load('import-products', {
|
|
568
|
+
facetValueCodesField: 'facets'
|
|
569
|
+
})
|
|
570
|
+
|
|
571
|
+
// With explicit mode
|
|
572
|
+
.load('import-products', {
|
|
573
|
+
facetValueCodesField: 'facets',
|
|
574
|
+
facetValuesMode: 'REPLACE_ALL' // ← Add this
|
|
575
|
+
})
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
**Step 2**: Test with dry run
|
|
579
|
+
|
|
580
|
+
```bash
|
|
581
|
+
npm run pipeline:run my-pipeline --dry-run
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
**Step 3**: Deploy to production
|
|
585
|
+
|
|
586
|
+
The default modes are chosen to be safe and match most use cases:
|
|
587
|
+
- `facetValuesMode` → `REPLACE_ALL`
|
|
588
|
+
- `linesMode` → `REPLACE_ALL`
|
|
589
|
+
|
|
590
|
+
---
|
|
591
|
+
|
|
592
|
+
## Related Documentation
|
|
593
|
+
|
|
594
|
+
- [Loaders Reference](../reference/loaders.md) - Complete API reference
|
|
595
|
+
- [Production Standards](../../PIPELINE-PRODUCTION-STANDARDS.md) - Best practices
|
|
596
|
+
- [Multi-Language Guide](./multi-language.md) - Translation handling
|
|
597
|
+
- [Multi-Channel Guide](./multi-channel.md) - Channel assignment
|