@endora-commerce/mod-catalog 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
- package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
- package/dist/admin/components/PackagingUnitsEditor.js +99 -0
- package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
- package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
- package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
- package/dist/admin/components/ProductAttributesTab.js +140 -0
- package/dist/admin/components/ProductAttributesTab.js.map +1 -0
- package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
- package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
- package/dist/admin/components/ProductInventoryTab.js +284 -0
- package/dist/admin/components/ProductInventoryTab.js.map +1 -0
- package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
- package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
- package/dist/admin/components/ProductScopeEditor.js +395 -0
- package/dist/admin/components/ProductScopeEditor.js.map +1 -0
- package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
- package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
- package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
- package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
- package/dist/admin/index.d.ts +45 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +184 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
- package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
- package/dist/admin/lib/resolve-product-selection.js +25 -0
- package/dist/admin/lib/resolve-product-selection.js.map +1 -0
- package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
- package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
- package/dist/admin/pages/AttachmentTypesPage.js +92 -0
- package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
- package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
- package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
- package/dist/admin/pages/AttributeSetsPage.js +158 -0
- package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
- package/dist/admin/pages/AttributesManager.d.ts +9 -0
- package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
- package/dist/admin/pages/AttributesManager.js +305 -0
- package/dist/admin/pages/AttributesManager.js.map +1 -0
- package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
- package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
- package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
- package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
- package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
- package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
- package/dist/admin/pages/BulkOperationsPage.js +98 -0
- package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
- package/dist/admin/pages/CategoriesTree.d.ts +9 -0
- package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
- package/dist/admin/pages/CategoriesTree.js +176 -0
- package/dist/admin/pages/CategoriesTree.js.map +1 -0
- package/dist/admin/pages/ProductEditor.d.ts +13 -0
- package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
- package/dist/admin/pages/ProductEditor.js +1050 -0
- package/dist/admin/pages/ProductEditor.js.map +1 -0
- package/dist/admin/pages/ProductsList.d.ts +9 -0
- package/dist/admin/pages/ProductsList.d.ts.map +1 -0
- package/dist/admin/pages/ProductsList.js +399 -0
- package/dist/admin/pages/ProductsList.js.map +1 -0
- package/dist/backend/commands/attribute-commands.d.ts +111 -0
- package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
- package/dist/backend/commands/attribute-commands.js +482 -0
- package/dist/backend/commands/attribute-commands.js.map +1 -0
- package/dist/backend/demo/reset.d.ts +23 -0
- package/dist/backend/demo/reset.d.ts.map +1 -0
- package/dist/backend/demo/reset.js +41 -0
- package/dist/backend/demo/reset.js.map +1 -0
- package/dist/backend/demo/rows.d.ts +103 -0
- package/dist/backend/demo/rows.d.ts.map +1 -0
- package/dist/backend/demo/rows.js +162 -0
- package/dist/backend/demo/rows.js.map +1 -0
- package/dist/backend/demo/seed.d.ts +35 -0
- package/dist/backend/demo/seed.d.ts.map +1 -0
- package/dist/backend/demo/seed.js +177 -0
- package/dist/backend/demo/seed.js.map +1 -0
- package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
- package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
- package/dist/backend/entities/attachment-type.entity.js +57 -0
- package/dist/backend/entities/attachment-type.entity.js.map +1 -0
- package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
- package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
- package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
- package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
- package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
- package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
- package/dist/backend/entities/attribute-set.entity.js +67 -0
- package/dist/backend/entities/attribute-set.entity.js.map +1 -0
- package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
- package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
- package/dist/backend/entities/bulk-operation.entity.js +138 -0
- package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
- package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
- package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
- package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
- package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
- package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
- package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
- package/dist/backend/entities/bundle-slot.entity.js +74 -0
- package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
- package/dist/backend/entities/category.entity.d.ts +26 -0
- package/dist/backend/entities/category.entity.d.ts.map +1 -0
- package/dist/backend/entities/category.entity.js +119 -0
- package/dist/backend/entities/category.entity.js.map +1 -0
- package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
- package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
- package/dist/backend/entities/gallery-item-label.entity.js +50 -0
- package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
- package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
- package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/gallery-item.entity.js +58 -0
- package/dist/backend/entities/gallery-item.entity.js.map +1 -0
- package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
- package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/grouped-item.entity.js +68 -0
- package/dist/backend/entities/grouped-item.entity.js.map +1 -0
- package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
- package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-attachment.entity.js +77 -0
- package/dist/backend/entities/product-attachment.entity.js.map +1 -0
- package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
- package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-attribute.entity.js +161 -0
- package/dist/backend/entities/product-attribute.entity.js.map +1 -0
- package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
- package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-editor-preference.entity.js +63 -0
- package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
- package/dist/backend/entities/product-link.entity.d.ts +25 -0
- package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-link.entity.js +70 -0
- package/dist/backend/entities/product-link.entity.js.map +1 -0
- package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
- package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
- package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
- package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
- package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-value-override.entity.js +90 -0
- package/dist/backend/entities/product-value-override.entity.js.map +1 -0
- package/dist/backend/entities/product-variant.entity.d.ts +18 -0
- package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-variant.entity.js +68 -0
- package/dist/backend/entities/product-variant.entity.js.map +1 -0
- package/dist/backend/entities/product.entity.d.ts +108 -0
- package/dist/backend/entities/product.entity.d.ts.map +1 -0
- package/dist/backend/entities/product.entity.js +230 -0
- package/dist/backend/entities/product.entity.js.map +1 -0
- package/dist/backend/index.d.ts +262 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +642 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +216 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +223 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/prompt-tools.d.ts +47 -0
- package/dist/backend/prompt-tools.d.ts.map +1 -0
- package/dist/backend/prompt-tools.js +284 -0
- package/dist/backend/prompt-tools.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +105 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +1162 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.api-key.d.ts +33 -0
- package/dist/backend/routes.api-key.d.ts.map +1 -0
- package/dist/backend/routes.api-key.js +43 -0
- package/dist/backend/routes.api-key.js.map +1 -0
- package/dist/backend/routes.external.d.ts +32 -0
- package/dist/backend/routes.external.d.ts.map +1 -0
- package/dist/backend/routes.external.js +115 -0
- package/dist/backend/routes.external.js.map +1 -0
- package/dist/backend/routes.public.d.ts +46 -0
- package/dist/backend/routes.public.d.ts.map +1 -0
- package/dist/backend/routes.public.js +318 -0
- package/dist/backend/routes.public.js.map +1 -0
- package/dist/backend/services/asset-references.d.ts +4 -0
- package/dist/backend/services/asset-references.d.ts.map +1 -0
- package/dist/backend/services/asset-references.js +104 -0
- package/dist/backend/services/asset-references.js.map +1 -0
- package/dist/backend/services/attachment.service.d.ts +45 -0
- package/dist/backend/services/attachment.service.d.ts.map +1 -0
- package/dist/backend/services/attachment.service.js +268 -0
- package/dist/backend/services/attachment.service.js.map +1 -0
- package/dist/backend/services/attribute-option-validator.d.ts +47 -0
- package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
- package/dist/backend/services/attribute-option-validator.js +69 -0
- package/dist/backend/services/attribute-option-validator.js.map +1 -0
- package/dist/backend/services/attribute-set-validations.d.ts +65 -0
- package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
- package/dist/backend/services/attribute-set-validations.js +89 -0
- package/dist/backend/services/attribute-set-validations.js.map +1 -0
- package/dist/backend/services/attribute-set.service.d.ts +50 -0
- package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
- package/dist/backend/services/attribute-set.service.js +401 -0
- package/dist/backend/services/attribute-set.service.js.map +1 -0
- package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
- package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
- package/dist/backend/services/attribute-type-mapping.js +121 -0
- package/dist/backend/services/attribute-type-mapping.js.map +1 -0
- package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
- package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
- package/dist/backend/services/attribute-value-key.service.js +118 -0
- package/dist/backend/services/attribute-value-key.service.js.map +1 -0
- package/dist/backend/services/audit-references.d.ts +13 -0
- package/dist/backend/services/audit-references.d.ts.map +1 -0
- package/dist/backend/services/audit-references.js +51 -0
- package/dist/backend/services/audit-references.js.map +1 -0
- package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
- package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
- package/dist/backend/services/bulk-operation-queue.js +34 -0
- package/dist/backend/services/bulk-operation-queue.js.map +1 -0
- package/dist/backend/services/bulk-operation.service.d.ts +195 -0
- package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
- package/dist/backend/services/bulk-operation.service.js +510 -0
- package/dist/backend/services/bulk-operation.service.js.map +1 -0
- package/dist/backend/services/bundle.service.d.ts +87 -0
- package/dist/backend/services/bundle.service.d.ts.map +1 -0
- package/dist/backend/services/bundle.service.js +286 -0
- package/dist/backend/services/bundle.service.js.map +1 -0
- package/dist/backend/services/catalog-admin.service.d.ts +398 -0
- package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-admin.service.js +1516 -0
- package/dist/backend/services/catalog-admin.service.js.map +1 -0
- package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
- package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-attribute-read.service.js +216 -0
- package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
- package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
- package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-bulk-import.service.js +136 -0
- package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
- package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
- package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-bulk-update.service.js +330 -0
- package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
- package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
- package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-category-read.service.js +248 -0
- package/dist/backend/services/catalog-category-read.service.js.map +1 -0
- package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
- package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
- package/dist/backend/services/catalog-org-price-decorator.js +184 -0
- package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
- package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
- package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-product-filter.service.js +275 -0
- package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
- package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
- package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-product-read.service.js +197 -0
- package/dist/backend/services/catalog-product-read.service.js.map +1 -0
- package/dist/backend/services/catalog-query.service.d.ts +444 -0
- package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-query.service.js +1633 -0
- package/dist/backend/services/catalog-query.service.js.map +1 -0
- package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
- package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-quick-search.service.js +159 -0
- package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
- package/dist/backend/services/catalog-write-ports.d.ts +25 -0
- package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
- package/dist/backend/services/catalog-write-ports.js +63 -0
- package/dist/backend/services/catalog-write-ports.js.map +1 -0
- package/dist/backend/services/category-admin.service.d.ts +102 -0
- package/dist/backend/services/category-admin.service.d.ts.map +1 -0
- package/dist/backend/services/category-admin.service.js +271 -0
- package/dist/backend/services/category-admin.service.js.map +1 -0
- package/dist/backend/services/gallery.service.d.ts +85 -0
- package/dist/backend/services/gallery.service.d.ts.map +1 -0
- package/dist/backend/services/gallery.service.js +326 -0
- package/dist/backend/services/gallery.service.js.map +1 -0
- package/dist/backend/services/grouped.service.d.ts +39 -0
- package/dist/backend/services/grouped.service.d.ts.map +1 -0
- package/dist/backend/services/grouped.service.js +136 -0
- package/dist/backend/services/grouped.service.js.map +1 -0
- package/dist/backend/services/label-resolver.d.ts +16 -0
- package/dist/backend/services/label-resolver.d.ts.map +1 -0
- package/dist/backend/services/label-resolver.js +43 -0
- package/dist/backend/services/label-resolver.js.map +1 -0
- package/dist/backend/services/packaging-unit.service.d.ts +28 -0
- package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
- package/dist/backend/services/packaging-unit.service.js +197 -0
- package/dist/backend/services/packaging-unit.service.js.map +1 -0
- package/dist/backend/services/primary-asset-url.d.ts +4 -0
- package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
- package/dist/backend/services/primary-asset-url.js +55 -0
- package/dist/backend/services/primary-asset-url.js.map +1 -0
- package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
- package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
- package/dist/backend/services/product-editor-preferences.service.js +44 -0
- package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
- package/dist/backend/services/product-link.service.d.ts +169 -0
- package/dist/backend/services/product-link.service.d.ts.map +1 -0
- package/dist/backend/services/product-link.service.js +297 -0
- package/dist/backend/services/product-link.service.js.map +1 -0
- package/dist/backend/services/product-overrides.service.d.ts +77 -0
- package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
- package/dist/backend/services/product-overrides.service.js +204 -0
- package/dist/backend/services/product-overrides.service.js.map +1 -0
- package/dist/backend/services/product-scope-context.service.d.ts +36 -0
- package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
- package/dist/backend/services/product-scope-context.service.js +106 -0
- package/dist/backend/services/product-scope-context.service.js.map +1 -0
- package/dist/backend/services/product-type-validations.d.ts +42 -0
- package/dist/backend/services/product-type-validations.d.ts.map +1 -0
- package/dist/backend/services/product-type-validations.js +55 -0
- package/dist/backend/services/product-type-validations.js.map +1 -0
- package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
- package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
- package/dist/backend/services/product-value-resolver.service.js +111 -0
- package/dist/backend/services/product-value-resolver.service.js.map +1 -0
- package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
- package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
- package/dist/backend/services/system-attribute-scopes.js +18 -0
- package/dist/backend/services/system-attribute-scopes.js.map +1 -0
- package/dist/backend/services/viewer-organization.d.ts +25 -0
- package/dist/backend/services/viewer-organization.d.ts.map +1 -0
- package/dist/backend/services/viewer-organization.js +31 -0
- package/dist/backend/services/viewer-organization.js.map +1 -0
- package/dist/manifest.d.ts +204 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +686 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
- package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
- package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
- package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
- package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
- package/dist/migrations/index.d.ts +55 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +80 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/ports/index.d.ts +96 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/docs/catalog/attachments.md +69 -0
- package/docs/catalog/attribute-sets.md +63 -0
- package/docs/catalog/attributes.md +244 -0
- package/docs/catalog/composite-products.md +115 -0
- package/docs/catalog/gallery-and-labels.md +73 -0
- package/docs/catalog/packaging-units.md +67 -0
- package/docs/catalog/per-channel-per-language-overrides.md +234 -0
- package/docs/catalog/product-links.md +79 -0
- package/docs/catalog.md +207 -0
- package/i18n/en.json +649 -0
- package/i18n/pl.json +649 -0
- package/package.json +109 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql';
|
|
2
|
+
import { type CatalogAdminAuditContext, type CreateAttributeRequest, type CreateProductRequest, type CreateVariantRequest, type UpdateAttributeRequest, type UpdateProductRequest, type UpdateVariantRequest } from '@endora-commerce/contracts';
|
|
3
|
+
import type { EventBase, EventBus } from '@endora-commerce/platform/events';
|
|
4
|
+
export interface CatalogEvents extends Record<string, EventBase> {
|
|
5
|
+
'product.created.v1': EventBase & {
|
|
6
|
+
productId: string;
|
|
7
|
+
sku: string;
|
|
8
|
+
};
|
|
9
|
+
'product.updated.v1': EventBase & {
|
|
10
|
+
productId: string;
|
|
11
|
+
changedFields: string[];
|
|
12
|
+
};
|
|
13
|
+
'product.archived.v1': EventBase & {
|
|
14
|
+
productId: string;
|
|
15
|
+
};
|
|
16
|
+
'product.deleted.v1': EventBase & {
|
|
17
|
+
productId: string;
|
|
18
|
+
};
|
|
19
|
+
'attribute.updated.v1': EventBase & {
|
|
20
|
+
attributeKey: string;
|
|
21
|
+
isSearchable: boolean;
|
|
22
|
+
isFilterable: boolean;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export type CatalogEventBus = EventBus<CatalogEvents>;
|
|
26
|
+
/**
|
|
27
|
+
* How a duplicate inherits the source's per-warehouse low-stock thresholds
|
|
28
|
+
* (issue #185).
|
|
29
|
+
*
|
|
30
|
+
* The rows live in `inventory`'s `product_warehouse_low_stock_thresholds`, and
|
|
31
|
+
* this service used to write them with an `insert … select` of its own — no
|
|
32
|
+
* import specifier for the boundary check to see, no gate, and no audit row on
|
|
33
|
+
* the owner's side. `inventory` publishes the copy now.
|
|
34
|
+
*
|
|
35
|
+
* `'not-present'` rather than a throw or a `catch`: `inventory` is
|
|
36
|
+
* deactivatable and this module declares the edge `degrades-without`, so
|
|
37
|
+
* absence is **decided** in front of the gate by the wiring in `backend.ts` and
|
|
38
|
+
* arrives here in the return type. A duplicate made while the module is off
|
|
39
|
+
* carries no per-warehouse thresholds and falls back to the product-level and
|
|
40
|
+
* warehouse-level chain — which is what a duplicate looks like on a deployment
|
|
41
|
+
* that never installed `inventory`.
|
|
42
|
+
*/
|
|
43
|
+
export type CatalogWarehouseThresholdCopy = (input: {
|
|
44
|
+
sourceProductId: string;
|
|
45
|
+
targetProductId: string;
|
|
46
|
+
}) => Promise<{
|
|
47
|
+
copied: number;
|
|
48
|
+
} | 'not-present'>;
|
|
49
|
+
import { Product } from '../entities/product.entity.js';
|
|
50
|
+
import { ProductVariant } from '../entities/product-variant.entity.js';
|
|
51
|
+
import type { AuditPort } from '@endora-commerce/platform/kernel';
|
|
52
|
+
import type { SalesChannelMembershipPort } from '@endora-commerce/platform/kernel';
|
|
53
|
+
import type { CommandBus } from '@endora-commerce/platform/commands';
|
|
54
|
+
import type { CustomFieldDefinitionApplyApi } from '../commands/attribute-commands.js';
|
|
55
|
+
import type { CatalogAttributeReadService, CatalogAttributeView } from './catalog-attribute-read.service.js';
|
|
56
|
+
import { type AttributeOptionResult } from '../commands/attribute-commands.js';
|
|
57
|
+
export { dbToApiAttributeType, resolveAttributeApiType } from './attribute-type-mapping.js';
|
|
58
|
+
/**
|
|
59
|
+
* Optional metadata used to attach audit entries to admin mutations.
|
|
60
|
+
*
|
|
61
|
+
* Published as `CatalogAdminAuditContext` in feature 075's Phase P — the
|
|
62
|
+
* write port's two audited methods take it — and aliased back here so the two
|
|
63
|
+
* cannot drift.
|
|
64
|
+
*/
|
|
65
|
+
export type AdminAuditContext = CatalogAdminAuditContext;
|
|
66
|
+
/**
|
|
67
|
+
* Catalog write-path service (admin write surface).
|
|
68
|
+
* Every mutation emits a typed event on the shared bus so the search indexer
|
|
69
|
+
* (T067) and webhook bridge (Phase 2 T037) can react.
|
|
70
|
+
*/
|
|
71
|
+
export declare class CatalogAdminService {
|
|
72
|
+
#private;
|
|
73
|
+
private readonly emFactory;
|
|
74
|
+
private readonly events;
|
|
75
|
+
private readonly auditLog?;
|
|
76
|
+
/**
|
|
77
|
+
* Feature 005 / T027 — when injected, every newly-created Product
|
|
78
|
+
* that does not declare explicit channel membership lands in the
|
|
79
|
+
* system-default Sales Channel automatically (FR-011). Optional so
|
|
80
|
+
* existing tests that construct this service without sales-channels
|
|
81
|
+
* keep compiling; production composition.ts always provides it.
|
|
82
|
+
*/
|
|
83
|
+
private readonly salesChannelMembership?;
|
|
84
|
+
/**
|
|
85
|
+
* Feature 054 — when injected, `updateProductAudited` records the admin
|
|
86
|
+
* single-update through the Command Bus (co-transactional audit + event).
|
|
87
|
+
*/
|
|
88
|
+
private readonly commandBus?;
|
|
89
|
+
/**
|
|
90
|
+
* Feature 061 — composed attribute read model. Required for every
|
|
91
|
+
* attribute/option method; optional in the signature so legacy product-only
|
|
92
|
+
* fixtures keep constructing the service without attribute wiring.
|
|
93
|
+
*/
|
|
94
|
+
private readonly attributeRead?;
|
|
95
|
+
/**
|
|
96
|
+
* Feature 061 — the custom_fields transactional apply seam. Required for
|
|
97
|
+
* attribute/option mutations. The committed-state definition read it used
|
|
98
|
+
* to carry alongside them is `attributeRead`'s since T053(b).
|
|
99
|
+
*/
|
|
100
|
+
private readonly customFields?;
|
|
101
|
+
/**
|
|
102
|
+
* Issue #185 — `inventory`'s per-warehouse threshold copy, presence-decided
|
|
103
|
+
* by the wiring. Optional for the same reason every collaborator above it
|
|
104
|
+
* is: fixtures that duplicate a product without an inventory composition
|
|
105
|
+
* keep constructing this service, and a duplicate with no thresholds copied
|
|
106
|
+
* is the module's declared degrade rather than a failure.
|
|
107
|
+
*/
|
|
108
|
+
private readonly copyWarehouseThresholds?;
|
|
109
|
+
constructor(emFactory: () => EntityManager, events: CatalogEventBus, auditLog?: AuditPort | undefined,
|
|
110
|
+
/**
|
|
111
|
+
* Feature 005 / T027 — when injected, every newly-created Product
|
|
112
|
+
* that does not declare explicit channel membership lands in the
|
|
113
|
+
* system-default Sales Channel automatically (FR-011). Optional so
|
|
114
|
+
* existing tests that construct this service without sales-channels
|
|
115
|
+
* keep compiling; production composition.ts always provides it.
|
|
116
|
+
*/
|
|
117
|
+
salesChannelMembership?: SalesChannelMembershipPort | undefined,
|
|
118
|
+
/**
|
|
119
|
+
* Feature 054 — when injected, `updateProductAudited` records the admin
|
|
120
|
+
* single-update through the Command Bus (co-transactional audit + event).
|
|
121
|
+
*/
|
|
122
|
+
commandBus?: CommandBus | undefined,
|
|
123
|
+
/**
|
|
124
|
+
* Feature 061 — composed attribute read model. Required for every
|
|
125
|
+
* attribute/option method; optional in the signature so legacy product-only
|
|
126
|
+
* fixtures keep constructing the service without attribute wiring.
|
|
127
|
+
*/
|
|
128
|
+
attributeRead?: CatalogAttributeReadService | undefined,
|
|
129
|
+
/**
|
|
130
|
+
* Feature 061 — the custom_fields transactional apply seam. Required for
|
|
131
|
+
* attribute/option mutations. The committed-state definition read it used
|
|
132
|
+
* to carry alongside them is `attributeRead`'s since T053(b).
|
|
133
|
+
*/
|
|
134
|
+
customFields?: CustomFieldDefinitionApplyApi | undefined,
|
|
135
|
+
/**
|
|
136
|
+
* Issue #185 — `inventory`'s per-warehouse threshold copy, presence-decided
|
|
137
|
+
* by the wiring. Optional for the same reason every collaborator above it
|
|
138
|
+
* is: fixtures that duplicate a product without an inventory composition
|
|
139
|
+
* keep constructing this service, and a duplicate with no thresholds copied
|
|
140
|
+
* is the module's declared degrade rather than a failure.
|
|
141
|
+
*/
|
|
142
|
+
copyWarehouseThresholds?: CatalogWarehouseThresholdCopy | undefined);
|
|
143
|
+
/**
|
|
144
|
+
* Enqueues a full Meilisearch reindex (a `search_reindex` bulk operation)
|
|
145
|
+
* when an attribute's `searchable` flag flips. Set by the catalog plugin
|
|
146
|
+
* once the BulkOperationService exists (it is constructed after this
|
|
147
|
+
* service). When unset, a flag change still emits `attribute.updated.v1`
|
|
148
|
+
* (the lightweight settings refresh) but no reindex is queued.
|
|
149
|
+
*/
|
|
150
|
+
private enqueueSearchReindex?;
|
|
151
|
+
setSearchReindexEnqueuer(fn: (ctx: {
|
|
152
|
+
actorAdminUserId: string | null;
|
|
153
|
+
attributeKey: string;
|
|
154
|
+
}) => Promise<void>): void;
|
|
155
|
+
/**
|
|
156
|
+
* Feature 068 — product creation runs as the `product.create` Command, so the
|
|
157
|
+
* audit entry, the domain event and the row commit or roll back as one unit
|
|
158
|
+
* (Principle XIII). This closed the gap that made every worker-created product
|
|
159
|
+
* unaudited: the audit used to be a hand-written post-commit call that only
|
|
160
|
+
* fired when the caller supplied `auditCtx`, which no background caller has.
|
|
161
|
+
*
|
|
162
|
+
* `_auditCtx` is retained so the long-standing admin call site keeps compiling;
|
|
163
|
+
* the actor is now derived server-side from the ambient TenantContext.
|
|
164
|
+
*/
|
|
165
|
+
createProduct(req: CreateProductRequest, _auditCtx?: AdminAuditContext): Promise<Product>;
|
|
166
|
+
updateProduct(id: string, req: UpdateProductRequest, auditCtx?: AdminAuditContext): Promise<Product>;
|
|
167
|
+
/**
|
|
168
|
+
* Feature 054 — admin single-update path, audited co-transactionally via the
|
|
169
|
+
* Command Bus (one audit row + the event on commit, none on rollback). Falls
|
|
170
|
+
* back to the legacy `updateProduct` when no bus is injected (bus-less tests).
|
|
171
|
+
*/
|
|
172
|
+
updateProductAudited(id: string, req: UpdateProductRequest): Promise<Product>;
|
|
173
|
+
duplicateProduct(id: string): Promise<Product>;
|
|
174
|
+
/**
|
|
175
|
+
* Find a free SKU derived from `baseSku` by appending `-copy`,
|
|
176
|
+
* `-copy-2`, `-copy-3`, … until both Product and ProductVariant tables
|
|
177
|
+
* are clear (SKUs share a global namespace per `createVariant`).
|
|
178
|
+
* Bounded by 1000 attempts so a pathological collision can't hang.
|
|
179
|
+
*
|
|
180
|
+
* Feature 068 — the result must fit `SKU_MAX_LENGTH`. It is the *base* that
|
|
181
|
+
* gets shortened to make room, never the suffix: cutting the suffix would
|
|
182
|
+
* collapse every attempt onto the same string, so a long-SKU product could
|
|
183
|
+
* never be duplicated at all.
|
|
184
|
+
*/
|
|
185
|
+
private allocateCopySku;
|
|
186
|
+
private allocateCopySlug;
|
|
187
|
+
/**
|
|
188
|
+
* Find a free slug derived from `source`: the slugified value itself, then
|
|
189
|
+
* `-2`, `-3`, … until `products.slug` (which is `@Unique()`) is clear.
|
|
190
|
+
* Bounded by 1000 attempts so a pathological collision can't hang.
|
|
191
|
+
*
|
|
192
|
+
* Feature 068 — used by the create path as well as the duplication path; a
|
|
193
|
+
* name collision on create used to reach the database and be reported as a
|
|
194
|
+
* SKU conflict.
|
|
195
|
+
*/
|
|
196
|
+
private allocateUniqueSlug;
|
|
197
|
+
/**
|
|
198
|
+
* Multilingual `name`: tag every locale with a "(copy)" suffix so the
|
|
199
|
+
* duplicated product is obviously a clone in lists. Empty locales are
|
|
200
|
+
* left untouched.
|
|
201
|
+
*/
|
|
202
|
+
private suffixCopyNames;
|
|
203
|
+
/**
|
|
204
|
+
* @deprecated Use `updateProduct` with `status: 'inactive'` instead.
|
|
205
|
+
* Kept for internal callers that still emit `product.archived.v1`.
|
|
206
|
+
*/
|
|
207
|
+
archiveProduct(id: string, auditCtx?: AdminAuditContext): Promise<void>;
|
|
208
|
+
assertProductDeletable(em: EntityManager, productId: string): Promise<void>;
|
|
209
|
+
/**
|
|
210
|
+
* Feature 068 — soft-delete runs as the `product.delete` Command: the write,
|
|
211
|
+
* the audit entry and `product.deleted.v1` share one transaction. `_auditCtx`
|
|
212
|
+
* is retained for the existing admin call site; the actor is server-derived.
|
|
213
|
+
*/
|
|
214
|
+
deleteProduct(id: string, _auditCtx?: AdminAuditContext): Promise<void>;
|
|
215
|
+
createAttribute(req: CreateAttributeRequest): Promise<CatalogAttributeView>;
|
|
216
|
+
updateAttributeByIdOrKey(idOrKey: string, req: UpdateAttributeRequest, auditCtx?: AdminAuditContext): Promise<CatalogAttributeView>;
|
|
217
|
+
updateAttribute(key: string, req: UpdateAttributeRequest, auditCtx?: AdminAuditContext): Promise<CatalogAttributeView>;
|
|
218
|
+
private applyAttributeUpdate;
|
|
219
|
+
listProducts(options?: {
|
|
220
|
+
includeArchived?: boolean;
|
|
221
|
+
status?: 'active' | 'draft' | 'inactive';
|
|
222
|
+
type?: 'simple' | 'configurable' | 'grouped' | 'bundle' | 'virtual';
|
|
223
|
+
q?: string;
|
|
224
|
+
/** When set, restrict to products in this category or any descendant. */
|
|
225
|
+
categorySlug?: string;
|
|
226
|
+
page?: number;
|
|
227
|
+
pageSize?: number;
|
|
228
|
+
}): Promise<{
|
|
229
|
+
items: Product[];
|
|
230
|
+
page: number;
|
|
231
|
+
pageSize: number;
|
|
232
|
+
total: number;
|
|
233
|
+
counts: {
|
|
234
|
+
all: number;
|
|
235
|
+
active: number;
|
|
236
|
+
draft: number;
|
|
237
|
+
inactive: number;
|
|
238
|
+
};
|
|
239
|
+
}>;
|
|
240
|
+
/**
|
|
241
|
+
* Feature 033 — return all product ids matching list filters (no pagination).
|
|
242
|
+
* Reuses the same filter semantics as {@link listProducts}.
|
|
243
|
+
*/
|
|
244
|
+
resolveProductIds(options?: {
|
|
245
|
+
includeArchived?: boolean;
|
|
246
|
+
status?: 'active' | 'draft' | 'inactive';
|
|
247
|
+
type?: 'simple' | 'configurable' | 'grouped' | 'bundle' | 'virtual';
|
|
248
|
+
q?: string;
|
|
249
|
+
}): Promise<{
|
|
250
|
+
productIds: string[];
|
|
251
|
+
total: number;
|
|
252
|
+
}>;
|
|
253
|
+
getProductById(id: string): Promise<Product>;
|
|
254
|
+
/** Category membership ids for admin product editor (feature 031). */
|
|
255
|
+
getProductCategoryIds(productId: string): Promise<string[]>;
|
|
256
|
+
/** Product ids in a category tree (root + descendants), for admin list filters. */
|
|
257
|
+
private productIdsInCategoryTree;
|
|
258
|
+
/**
|
|
259
|
+
* Batch-by-id read. Returns matching products for the given id set,
|
|
260
|
+
* deduped server-side. Includes archived rows so callers can resolve
|
|
261
|
+
* names for already-attached references (e.g. ProductEditor's link
|
|
262
|
+
* tables) regardless of current status. Paginated for callers that
|
|
263
|
+
* stream large id sets across multiple requests.
|
|
264
|
+
*/
|
|
265
|
+
listProductsByIds(input: {
|
|
266
|
+
ids: string[];
|
|
267
|
+
page?: number;
|
|
268
|
+
pageSize?: number;
|
|
269
|
+
}): Promise<{
|
|
270
|
+
items: Product[];
|
|
271
|
+
page: number;
|
|
272
|
+
pageSize: number;
|
|
273
|
+
total: number;
|
|
274
|
+
}>;
|
|
275
|
+
listAttributes(): Promise<CatalogAttributeView[]>;
|
|
276
|
+
/**
|
|
277
|
+
* Feature 012 — read every attribute carrying a given boolean flag.
|
|
278
|
+
* Used by the Promotion Rule editor's criterion picker
|
|
279
|
+
* (`flag = isPromoRule`) and the Compare-page column picker
|
|
280
|
+
* (`flag = isComparable`). Other flags are surfaced for symmetry.
|
|
281
|
+
*/
|
|
282
|
+
listAttributesByFlag(flag: 'isSearchable' | 'isFilterable' | 'isComparable' | 'isVariantAxis' | 'isPromoRule' | 'isVisibleOnProductPage' | 'isRequired' | 'isMassEditable'): Promise<CatalogAttributeView[]>;
|
|
283
|
+
/**
|
|
284
|
+
* Feature 012 / US4 — list every option for one attribute, ordered
|
|
285
|
+
* by sortOrder ASC then value ASC. Backed by `custom_field_options`
|
|
286
|
+
* through the composed view (feature 061); `attributeId` on the result
|
|
287
|
+
* is the attribute (extension) id the admin API has always exposed.
|
|
288
|
+
*/
|
|
289
|
+
listAttributeOptions(attributeId: string): Promise<AttributeOptionResult[]>;
|
|
290
|
+
/** Feature 012 / US4 — append an option (validated cross-list). */
|
|
291
|
+
addAttributeOption(attributeIdOrKey: string, input: {
|
|
292
|
+
value: string;
|
|
293
|
+
label?: Record<string, string>;
|
|
294
|
+
labelDefault: string;
|
|
295
|
+
isDefault?: boolean;
|
|
296
|
+
sortOrder?: number;
|
|
297
|
+
}): Promise<AttributeOptionResult>;
|
|
298
|
+
/** Feature 012 / US4 — patch one option (value is immutable per FR-026). */
|
|
299
|
+
patchAttributeOption(optionId: string, input: {
|
|
300
|
+
label?: Record<string, string>;
|
|
301
|
+
labelDefault?: string;
|
|
302
|
+
isDefault?: boolean;
|
|
303
|
+
sortOrder?: number;
|
|
304
|
+
}): Promise<AttributeOptionResult>;
|
|
305
|
+
/** Feature 012 / US4 — remove one option. Refused while products carry it (FR-025). */
|
|
306
|
+
removeAttributeOption(optionId: string): Promise<void>;
|
|
307
|
+
/**
|
|
308
|
+
* Feature 012 — projection of the legacy `enumValues: string[]` shape
|
|
309
|
+
* from the option rows for one attribute. Returns `null` when the
|
|
310
|
+
* attribute has no options.
|
|
311
|
+
*/
|
|
312
|
+
getAttributeOptionValues(attributeId: string): Promise<string[] | null>;
|
|
313
|
+
/** Feature 012 — bulk variant of getAttributeOptionValues for the list endpoint. */
|
|
314
|
+
getAttributeOptionValuesByIds(attributeIds: readonly string[]): Promise<Map<string, string[]>>;
|
|
315
|
+
/** Feature 012 — read a single attribute by UUID or snake_case key. */
|
|
316
|
+
getAttributeByIdOrKey(idOrKey: string): Promise<CatalogAttributeView>;
|
|
317
|
+
/**
|
|
318
|
+
* Feature 012 — delete an attribute. Refused while any Attribute Set or
|
|
319
|
+
* product still references it (FR-006). The structured error names the
|
|
320
|
+
* dependent rows so the admin UI can guide the operator. Deletes the
|
|
321
|
+
* extension AND the backing definition (+ options cascade) in one
|
|
322
|
+
* transaction (feature 061).
|
|
323
|
+
*/
|
|
324
|
+
deleteAttribute(idOrKey: string): Promise<void>;
|
|
325
|
+
createVariant(parentProductId: string, req: CreateVariantRequest): Promise<ProductVariant>;
|
|
326
|
+
updateVariant(parentProductId: string, variantId: string, req: UpdateVariantRequest): Promise<ProductVariant>;
|
|
327
|
+
deleteVariant(parentProductId: string, variantId: string): Promise<void>;
|
|
328
|
+
/**
|
|
329
|
+
* Feature 002 (T023) — reject unknown keys in `attributeValues` against
|
|
330
|
+
* the Product's AttributeSet. Empty input is a no-op (a Product with
|
|
331
|
+
* zero attribute values is always valid).
|
|
332
|
+
*
|
|
333
|
+
* Throws 400 ATTRIBUTE_VALUE_REJECTED with `details: [{ path, issue }]`
|
|
334
|
+
* listing the rejected keys.
|
|
335
|
+
*/
|
|
336
|
+
private assertAttributeValueKeysAllowed;
|
|
337
|
+
/**
|
|
338
|
+
* Feature 012 / FR-013 — refuse a product save that leaves any
|
|
339
|
+
* required attribute (from the assigned set) without a value. Called
|
|
340
|
+
* after `assertAttributeValueKeysAllowed`; uses the merged
|
|
341
|
+
* (existing + patched) value map so a previously-set value satisfies
|
|
342
|
+
* the requirement even when the current patch omits it.
|
|
343
|
+
*/
|
|
344
|
+
assertRequiredAttributesPresent(em: EntityManager, attributeSetId: string, mergedAttributeValues: Record<string, unknown>): Promise<void>;
|
|
345
|
+
/**
|
|
346
|
+
* Feature 012 / US2 — preview a Set swap on a Product. Returns the
|
|
347
|
+
* shape documented in `contracts/attribute-sets.contract.md` —
|
|
348
|
+
* attributesAdded, attributesRemoved, valuesPreserved (R-7),
|
|
349
|
+
* requiredButMissing.
|
|
350
|
+
*/
|
|
351
|
+
previewAttributeSetSwap(productId: string, targetSetId: string | null): Promise<{
|
|
352
|
+
attributesAdded: Array<{
|
|
353
|
+
key: string;
|
|
354
|
+
labelDefault: string;
|
|
355
|
+
isRequired: boolean;
|
|
356
|
+
}>;
|
|
357
|
+
attributesRemoved: Array<{
|
|
358
|
+
key: string;
|
|
359
|
+
labelDefault: string;
|
|
360
|
+
}>;
|
|
361
|
+
valuesPreserved: Array<{
|
|
362
|
+
key: string;
|
|
363
|
+
valueSample: unknown;
|
|
364
|
+
}>;
|
|
365
|
+
requiredButMissing: Array<{
|
|
366
|
+
key: string;
|
|
367
|
+
labelDefault: string;
|
|
368
|
+
}>;
|
|
369
|
+
}>;
|
|
370
|
+
/**
|
|
371
|
+
* A product slug — the value that becomes a storefront URL and sits under
|
|
372
|
+
* `products.slug`'s unique index. Callers go through `allocateUniqueSlug`,
|
|
373
|
+
* which allocates against the live table rather than trusting this to be free.
|
|
374
|
+
*
|
|
375
|
+
* The fold is `slugify` from `@endora-commerce/contracts`, **imported, never
|
|
376
|
+
* re-implemented** (issue #245). The private chain this carried normalised
|
|
377
|
+
* with `NFKD` and stripped the combining marks, which does nothing to `ł` —
|
|
378
|
+
* U+0142 has no canonical decomposition — so the `[^a-z0-9]+` collapse
|
|
379
|
+
* deleted it: `Łączniki` produced `aczniki` and `Wiertła` produced `wiert-a`.
|
|
380
|
+
* Every Polish product name reached the storefront a letter short.
|
|
381
|
+
*
|
|
382
|
+
* **The shared fold is NFD, so this gives up NFKD's compatibility mappings**,
|
|
383
|
+
* and here that is worth stating precisely because the slug is
|
|
384
|
+
* unique-constrained: two names `NFKD` kept apart can now fold together
|
|
385
|
+
* (`Kabel²` and `Kabel³` both give `kabel`). It cannot become a constraint
|
|
386
|
+
* violation — `allocateUniqueSlug` probes the table and suffixes `-2`, `-3`,
|
|
387
|
+
* … exactly as it already does for two products sharing a plain name — and
|
|
388
|
+
* the characters that can cause it (`fi`, superscripts, full-width forms) are
|
|
389
|
+
* not typed into product names, while `ł` is in most of them.
|
|
390
|
+
*
|
|
391
|
+
* Slugs already stored are **not** migrated (owner's ruling, 2026-08-19).
|
|
392
|
+
* Nothing re-derives a slug to find an existing product: this runs on create
|
|
393
|
+
* and on duplicate, and duplicate re-slugs an already-slugged string.
|
|
394
|
+
*/
|
|
395
|
+
private slugify;
|
|
396
|
+
private anyValue;
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=catalog-admin.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-admin.service.d.ts","sourceRoot":"","sources":["../../../src/backend/services/catalog-admin.service.ts"],"names":[],"mappings":"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"}
|