@open-mercato/core 0.9.1-develop.7473.1.de5b22888f → 0.9.1-develop.7475.1.28ca93ed97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/dist/generated/entities/catalog_price_history_entry/index.js +53 -0
  3. package/dist/generated/entities/catalog_price_history_entry/index.js.map +7 -0
  4. package/dist/generated/entities/customer_group_terms/index.js +2 -0
  5. package/dist/generated/entities/customer_group_terms/index.js.map +2 -2
  6. package/dist/generated/entities/ecommerce_store/index.js +33 -0
  7. package/dist/generated/entities/ecommerce_store/index.js.map +7 -0
  8. package/dist/generated/entities/ecommerce_store_channel_binding/index.js +29 -0
  9. package/dist/generated/entities/ecommerce_store_channel_binding/index.js.map +7 -0
  10. package/dist/generated/entities/ecommerce_store_domain_binding/index.js +23 -0
  11. package/dist/generated/entities/ecommerce_store_domain_binding/index.js.map +7 -0
  12. package/dist/generated/entities.ids.generated.js +8 -1
  13. package/dist/generated/entities.ids.generated.js.map +2 -2
  14. package/dist/generated/entity-fields-registry.js +72 -0
  15. package/dist/generated/entity-fields-registry.js.map +2 -2
  16. package/dist/helpers/integration/customerGroupsFixtures.js.map +2 -2
  17. package/dist/modules/catalog/acl.js +8 -1
  18. package/dist/modules/catalog/acl.js.map +2 -2
  19. package/dist/modules/catalog/api/config/omnibus/route.js +184 -0
  20. package/dist/modules/catalog/api/config/omnibus/route.js.map +7 -0
  21. package/dist/modules/catalog/api/prices/history/route.js +131 -0
  22. package/dist/modules/catalog/api/prices/history/route.js.map +7 -0
  23. package/dist/modules/catalog/api/prices/omnibus-preview/route.js +184 -0
  24. package/dist/modules/catalog/api/prices/omnibus-preview/route.js.map +7 -0
  25. package/dist/modules/catalog/api/products/route.js +54 -245
  26. package/dist/modules/catalog/api/products/route.js.map +3 -3
  27. package/dist/modules/catalog/api/tags/route.js +6 -0
  28. package/dist/modules/catalog/api/tags/route.js.map +2 -2
  29. package/dist/modules/catalog/backend/config/catalog/page.js +3 -1
  30. package/dist/modules/catalog/backend/config/catalog/page.js.map +2 -2
  31. package/dist/modules/catalog/cli.js +80 -2
  32. package/dist/modules/catalog/cli.js.map +2 -2
  33. package/dist/modules/catalog/commands/categories.js +51 -2
  34. package/dist/modules/catalog/commands/categories.js.map +2 -2
  35. package/dist/modules/catalog/commands/prices.js +43 -1
  36. package/dist/modules/catalog/commands/prices.js.map +2 -2
  37. package/dist/modules/catalog/commands/products.js +71 -0
  38. package/dist/modules/catalog/commands/products.js.map +2 -2
  39. package/dist/modules/catalog/commands/variants.js +7 -0
  40. package/dist/modules/catalog/commands/variants.js.map +2 -2
  41. package/dist/modules/catalog/components/OmnibusSettings.js +703 -0
  42. package/dist/modules/catalog/components/OmnibusSettings.js.map +7 -0
  43. package/dist/modules/catalog/components/PriceEditorOmnibusRow.js +152 -0
  44. package/dist/modules/catalog/components/PriceEditorOmnibusRow.js.map +7 -0
  45. package/dist/modules/catalog/components/lookupSources.js +31 -0
  46. package/dist/modules/catalog/components/lookupSources.js.map +7 -0
  47. package/dist/modules/catalog/components/prices/PriceScopeSelectors.js +8 -2
  48. package/dist/modules/catalog/components/prices/PriceScopeSelectors.js.map +2 -2
  49. package/dist/modules/catalog/components/products/VariantBuilder.js +11 -1
  50. package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
  51. package/dist/modules/catalog/data/entities.js +122 -1
  52. package/dist/modules/catalog/data/entities.js.map +2 -2
  53. package/dist/modules/catalog/data/validators.js +78 -0
  54. package/dist/modules/catalog/data/validators.js.map +2 -2
  55. package/dist/modules/catalog/di.js +18 -0
  56. package/dist/modules/catalog/di.js.map +2 -2
  57. package/dist/modules/catalog/lib/omnibus.js +285 -0
  58. package/dist/modules/catalog/lib/omnibus.js.map +7 -0
  59. package/dist/modules/catalog/lib/omnibusBackfill.js +146 -0
  60. package/dist/modules/catalog/lib/omnibusBackfill.js.map +7 -0
  61. package/dist/modules/catalog/lib/omnibusCache.js +89 -0
  62. package/dist/modules/catalog/lib/omnibusCache.js.map +7 -0
  63. package/dist/modules/catalog/lib/omnibusConfig.js +64 -0
  64. package/dist/modules/catalog/lib/omnibusConfig.js.map +7 -0
  65. package/dist/modules/catalog/lib/omnibusHistoryQueries.js +191 -0
  66. package/dist/modules/catalog/lib/omnibusHistoryQueries.js.map +7 -0
  67. package/dist/modules/catalog/lib/omnibusPresentedEntry.js +73 -0
  68. package/dist/modules/catalog/lib/omnibusPresentedEntry.js.map +7 -0
  69. package/dist/modules/catalog/lib/omnibusProductListEnrichment.js +94 -0
  70. package/dist/modules/catalog/lib/omnibusProductListEnrichment.js.map +7 -0
  71. package/dist/modules/catalog/lib/omnibusTypes.js +115 -0
  72. package/dist/modules/catalog/lib/omnibusTypes.js.map +7 -0
  73. package/dist/modules/catalog/lib/optionSchemaTranslations.js +55 -0
  74. package/dist/modules/catalog/lib/optionSchemaTranslations.js.map +7 -0
  75. package/dist/modules/catalog/lib/priceHistoryQuery.js +103 -0
  76. package/dist/modules/catalog/lib/priceHistoryQuery.js.map +7 -0
  77. package/dist/modules/catalog/lib/pricing.js +26 -2
  78. package/dist/modules/catalog/lib/pricing.js.map +2 -2
  79. package/dist/modules/catalog/lib/productFilters.js +273 -0
  80. package/dist/modules/catalog/lib/productFilters.js.map +7 -0
  81. package/dist/modules/catalog/lib/productScopeKeys.js +105 -0
  82. package/dist/modules/catalog/lib/productScopeKeys.js.map +7 -0
  83. package/dist/modules/catalog/lib/productScopeReindex.js +73 -0
  84. package/dist/modules/catalog/lib/productScopeReindex.js.map +7 -0
  85. package/dist/modules/catalog/migrations/Migration20261005105352_catalog.js +39 -0
  86. package/dist/modules/catalog/migrations/Migration20261005105352_catalog.js.map +7 -0
  87. package/dist/modules/catalog/migrations/Migration20261005150824_catalog.js +39 -0
  88. package/dist/modules/catalog/migrations/Migration20261005150824_catalog.js.map +7 -0
  89. package/dist/modules/catalog/services/catalogOmnibusService.js +480 -0
  90. package/dist/modules/catalog/services/catalogOmnibusService.js.map +7 -0
  91. package/dist/modules/catalog/setup.js +3 -1
  92. package/dist/modules/catalog/setup.js.map +2 -2
  93. package/dist/modules/catalog/subscribers/product-scope-keys-category-deleted.js +16 -0
  94. package/dist/modules/catalog/subscribers/product-scope-keys-category-deleted.js.map +7 -0
  95. package/dist/modules/catalog/subscribers/product-scope-keys-category-updated.js +17 -0
  96. package/dist/modules/catalog/subscribers/product-scope-keys-category-updated.js.map +7 -0
  97. package/dist/modules/catalog/translations.js +10 -0
  98. package/dist/modules/catalog/translations.js.map +2 -2
  99. package/dist/modules/configs/lib/upgrade-actions.js +28 -0
  100. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  101. package/dist/modules/customer_groups/api/customer-groups/[id]/terms/route.js +5 -0
  102. package/dist/modules/customer_groups/api/customer-groups/[id]/terms/route.js.map +2 -2
  103. package/dist/modules/customer_groups/components/CustomerGroupTermsSection.js +111 -3
  104. package/dist/modules/customer_groups/components/CustomerGroupTermsSection.js.map +2 -2
  105. package/dist/modules/customer_groups/components/customerGroupAssortmentScope.js +43 -0
  106. package/dist/modules/customer_groups/components/customerGroupAssortmentScope.js.map +7 -0
  107. package/dist/modules/customer_groups/data/entities.js +3 -0
  108. package/dist/modules/customer_groups/data/entities.js.map +2 -2
  109. package/dist/modules/customer_groups/data/validators.js +9 -0
  110. package/dist/modules/customer_groups/data/validators.js.map +2 -2
  111. package/dist/modules/customer_groups/migrations/Migration20261005110250_customer_groups.js +17 -0
  112. package/dist/modules/customer_groups/migrations/Migration20261005110250_customer_groups.js.map +7 -0
  113. package/dist/modules/customer_groups/services/customerGroupsService.js +62 -15
  114. package/dist/modules/customer_groups/services/customerGroupsService.js.map +2 -2
  115. package/dist/modules/ecommerce/acl.js +13 -0
  116. package/dist/modules/ecommerce/acl.js.map +7 -0
  117. package/dist/modules/ecommerce/api/domain-mappings/route.js +72 -0
  118. package/dist/modules/ecommerce/api/domain-mappings/route.js.map +7 -0
  119. package/dist/modules/ecommerce/api/openapi.js +27 -0
  120. package/dist/modules/ecommerce/api/openapi.js.map +7 -0
  121. package/dist/modules/ecommerce/api/store-channel-bindings/[id]/assortment-count/route.js +109 -0
  122. package/dist/modules/ecommerce/api/store-channel-bindings/[id]/assortment-count/route.js.map +7 -0
  123. package/dist/modules/ecommerce/api/store-channel-bindings/crud.js +265 -0
  124. package/dist/modules/ecommerce/api/store-channel-bindings/crud.js.map +7 -0
  125. package/dist/modules/ecommerce/api/store-channel-bindings/route.js +67 -0
  126. package/dist/modules/ecommerce/api/store-channel-bindings/route.js.map +7 -0
  127. package/dist/modules/ecommerce/api/store-domain-bindings/crud.js +296 -0
  128. package/dist/modules/ecommerce/api/store-domain-bindings/crud.js.map +7 -0
  129. package/dist/modules/ecommerce/api/store-domain-bindings/route.js +73 -0
  130. package/dist/modules/ecommerce/api/store-domain-bindings/route.js.map +7 -0
  131. package/dist/modules/ecommerce/api/storefront/categories/[slug]/route.js +87 -0
  132. package/dist/modules/ecommerce/api/storefront/categories/[slug]/route.js.map +7 -0
  133. package/dist/modules/ecommerce/api/storefront/categories/openapiSchemas.js +50 -0
  134. package/dist/modules/ecommerce/api/storefront/categories/openapiSchemas.js.map +7 -0
  135. package/dist/modules/ecommerce/api/storefront/categories/route.js +75 -0
  136. package/dist/modules/ecommerce/api/storefront/categories/route.js.map +7 -0
  137. package/dist/modules/ecommerce/api/storefront/context/route.js +163 -0
  138. package/dist/modules/ecommerce/api/storefront/context/route.js.map +7 -0
  139. package/dist/modules/ecommerce/api/storefront/products/[idOrHandle]/route.js +87 -0
  140. package/dist/modules/ecommerce/api/storefront/products/[idOrHandle]/route.js.map +7 -0
  141. package/dist/modules/ecommerce/api/storefront/products/openapiSchemas.js +177 -0
  142. package/dist/modules/ecommerce/api/storefront/products/openapiSchemas.js.map +7 -0
  143. package/dist/modules/ecommerce/api/storefront/products/route.js +78 -0
  144. package/dist/modules/ecommerce/api/storefront/products/route.js.map +7 -0
  145. package/dist/modules/ecommerce/api/storefront/search/suggest/openapiSchemas.js +25 -0
  146. package/dist/modules/ecommerce/api/storefront/search/suggest/openapiSchemas.js.map +7 -0
  147. package/dist/modules/ecommerce/api/storefront/search/suggest/route.js +75 -0
  148. package/dist/modules/ecommerce/api/storefront/search/suggest/route.js.map +7 -0
  149. package/dist/modules/ecommerce/api/storefront/storefrontRouteSupport.js +58 -0
  150. package/dist/modules/ecommerce/api/storefront/storefrontRouteSupport.js.map +7 -0
  151. package/dist/modules/ecommerce/api/stores/[id]/branding/route.js +183 -0
  152. package/dist/modules/ecommerce/api/stores/[id]/branding/route.js.map +7 -0
  153. package/dist/modules/ecommerce/api/stores/[id]/preview-branding/route.js +92 -0
  154. package/dist/modules/ecommerce/api/stores/[id]/preview-branding/route.js.map +7 -0
  155. package/dist/modules/ecommerce/api/stores/crud.js +401 -0
  156. package/dist/modules/ecommerce/api/stores/crud.js.map +7 -0
  157. package/dist/modules/ecommerce/api/stores/route.js +64 -0
  158. package/dist/modules/ecommerce/api/stores/route.js.map +7 -0
  159. package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.js +9 -0
  160. package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.js.map +7 -0
  161. package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.meta.js +16 -0
  162. package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.meta.js.map +7 -0
  163. package/dist/modules/ecommerce/backend/config/ecommerce/page.js +9 -0
  164. package/dist/modules/ecommerce/backend/config/ecommerce/page.js.map +7 -0
  165. package/dist/modules/ecommerce/backend/config/ecommerce/page.meta.js +16 -0
  166. package/dist/modules/ecommerce/backend/config/ecommerce/page.meta.js.map +7 -0
  167. package/dist/modules/ecommerce/commands/stores.js +110 -0
  168. package/dist/modules/ecommerce/commands/stores.js.map +7 -0
  169. package/dist/modules/ecommerce/components/ChannelAssortmentCount.js +90 -0
  170. package/dist/modules/ecommerce/components/ChannelAssortmentCount.js.map +7 -0
  171. package/dist/modules/ecommerce/components/ChannelBindingFormSections.js +33 -0
  172. package/dist/modules/ecommerce/components/ChannelBindingFormSections.js.map +7 -0
  173. package/dist/modules/ecommerce/components/ChannelLookupPicker.js +11 -0
  174. package/dist/modules/ecommerce/components/ChannelLookupPicker.js.map +7 -0
  175. package/dist/modules/ecommerce/components/DomainStatusWarning.js +24 -0
  176. package/dist/modules/ecommerce/components/DomainStatusWarning.js.map +7 -0
  177. package/dist/modules/ecommerce/components/StoreAvailabilityDefaultsSection.js +190 -0
  178. package/dist/modules/ecommerce/components/StoreAvailabilityDefaultsSection.js.map +7 -0
  179. package/dist/modules/ecommerce/components/StoreBrandingControls.js +67 -0
  180. package/dist/modules/ecommerce/components/StoreBrandingControls.js.map +7 -0
  181. package/dist/modules/ecommerce/components/StoreBrandingPreview.js +69 -0
  182. package/dist/modules/ecommerce/components/StoreBrandingPreview.js.map +7 -0
  183. package/dist/modules/ecommerce/components/StoreBrandingTab.js +218 -0
  184. package/dist/modules/ecommerce/components/StoreBrandingTab.js.map +7 -0
  185. package/dist/modules/ecommerce/components/StoreChannelBindingDialog.js +270 -0
  186. package/dist/modules/ecommerce/components/StoreChannelBindingDialog.js.map +7 -0
  187. package/dist/modules/ecommerce/components/StoreChannelsTab.js +313 -0
  188. package/dist/modules/ecommerce/components/StoreChannelsTab.js.map +7 -0
  189. package/dist/modules/ecommerce/components/StoreCreateDialog.js +164 -0
  190. package/dist/modules/ecommerce/components/StoreCreateDialog.js.map +7 -0
  191. package/dist/modules/ecommerce/components/StoreDomainBindingDialog.js +162 -0
  192. package/dist/modules/ecommerce/components/StoreDomainBindingDialog.js.map +7 -0
  193. package/dist/modules/ecommerce/components/StoreDomainsTab.js +357 -0
  194. package/dist/modules/ecommerce/components/StoreDomainsTab.js.map +7 -0
  195. package/dist/modules/ecommerce/components/StoreEditPage.js +155 -0
  196. package/dist/modules/ecommerce/components/StoreEditPage.js.map +7 -0
  197. package/dist/modules/ecommerce/components/StoreGeneralTab.js +167 -0
  198. package/dist/modules/ecommerce/components/StoreGeneralTab.js.map +7 -0
  199. package/dist/modules/ecommerce/components/StoreListPage.js +290 -0
  200. package/dist/modules/ecommerce/components/StoreListPage.js.map +7 -0
  201. package/dist/modules/ecommerce/components/StoreSeoTab.js +132 -0
  202. package/dist/modules/ecommerce/components/StoreSeoTab.js.map +7 -0
  203. package/dist/modules/ecommerce/components/StoreStatusBadge.js +20 -0
  204. package/dist/modules/ecommerce/components/StoreStatusBadge.js.map +7 -0
  205. package/dist/modules/ecommerce/components/channelLookups.js +28 -0
  206. package/dist/modules/ecommerce/components/channelLookups.js.map +7 -0
  207. package/dist/modules/ecommerce/components/storeAdmin.js +41 -0
  208. package/dist/modules/ecommerce/components/storeAdmin.js.map +7 -0
  209. package/dist/modules/ecommerce/components/storeBrandingForm.js +197 -0
  210. package/dist/modules/ecommerce/components/storeBrandingForm.js.map +7 -0
  211. package/dist/modules/ecommerce/components/storeChannels.js +140 -0
  212. package/dist/modules/ecommerce/components/storeChannels.js.map +7 -0
  213. package/dist/modules/ecommerce/components/storeDomains.js +167 -0
  214. package/dist/modules/ecommerce/components/storeDomains.js.map +7 -0
  215. package/dist/modules/ecommerce/components/storeEditTabs.js +62 -0
  216. package/dist/modules/ecommerce/components/storeEditTabs.js.map +7 -0
  217. package/dist/modules/ecommerce/components/storeGeneral.js +95 -0
  218. package/dist/modules/ecommerce/components/storeGeneral.js.map +7 -0
  219. package/dist/modules/ecommerce/components/storeSeo.js +69 -0
  220. package/dist/modules/ecommerce/components/storeSeo.js.map +7 -0
  221. package/dist/modules/ecommerce/components/useChannelAssortmentCount.js +45 -0
  222. package/dist/modules/ecommerce/components/useChannelAssortmentCount.js.map +7 -0
  223. package/dist/modules/ecommerce/components/useStoreAccess.js +28 -0
  224. package/dist/modules/ecommerce/components/useStoreAccess.js.map +7 -0
  225. package/dist/modules/ecommerce/data/enrichers.js +157 -0
  226. package/dist/modules/ecommerce/data/enrichers.js.map +7 -0
  227. package/dist/modules/ecommerce/data/entities.js +197 -0
  228. package/dist/modules/ecommerce/data/entities.js.map +7 -0
  229. package/dist/modules/ecommerce/data/validators.js +406 -0
  230. package/dist/modules/ecommerce/data/validators.js.map +7 -0
  231. package/dist/modules/ecommerce/di.js +11 -0
  232. package/dist/modules/ecommerce/di.js.map +7 -0
  233. package/dist/modules/ecommerce/events.js +27 -0
  234. package/dist/modules/ecommerce/events.js.map +7 -0
  235. package/dist/modules/ecommerce/index.js +16 -0
  236. package/dist/modules/ecommerce/index.js.map +7 -0
  237. package/dist/modules/ecommerce/lib/assortmentCount.js +112 -0
  238. package/dist/modules/ecommerce/lib/assortmentCount.js.map +7 -0
  239. package/dist/modules/ecommerce/lib/brandingStyles.js +184 -0
  240. package/dist/modules/ecommerce/lib/brandingStyles.js.map +7 -0
  241. package/dist/modules/ecommerce/lib/buyerContext.js +284 -0
  242. package/dist/modules/ecommerce/lib/buyerContext.js.map +7 -0
  243. package/dist/modules/ecommerce/lib/cacheInvalidation.js +186 -0
  244. package/dist/modules/ecommerce/lib/cacheInvalidation.js.map +7 -0
  245. package/dist/modules/ecommerce/lib/cacheKeys.js +236 -0
  246. package/dist/modules/ecommerce/lib/cacheKeys.js.map +7 -0
  247. package/dist/modules/ecommerce/lib/createConflictRecheck.js +29 -0
  248. package/dist/modules/ecommerce/lib/createConflictRecheck.js.map +7 -0
  249. package/dist/modules/ecommerce/lib/crudEvents.js +94 -0
  250. package/dist/modules/ecommerce/lib/crudEvents.js.map +7 -0
  251. package/dist/modules/ecommerce/lib/crudSupport.js +64 -0
  252. package/dist/modules/ecommerce/lib/crudSupport.js.map +7 -0
  253. package/dist/modules/ecommerce/lib/domainBindingRebind.js +99 -0
  254. package/dist/modules/ecommerce/lib/domainBindingRebind.js.map +7 -0
  255. package/dist/modules/ecommerce/lib/domainMappingSummaries.js +39 -0
  256. package/dist/modules/ecommerce/lib/domainMappingSummaries.js.map +7 -0
  257. package/dist/modules/ecommerce/lib/exclusiveFlag.js +57 -0
  258. package/dist/modules/ecommerce/lib/exclusiveFlag.js.map +7 -0
  259. package/dist/modules/ecommerce/lib/references.js +70 -0
  260. package/dist/modules/ecommerce/lib/references.js.map +7 -0
  261. package/dist/modules/ecommerce/lib/seedDraftStore.js +99 -0
  262. package/dist/modules/ecommerce/lib/seedDraftStore.js.map +7 -0
  263. package/dist/modules/ecommerce/lib/storeBindingCascade.js +109 -0
  264. package/dist/modules/ecommerce/lib/storeBindingCascade.js.map +7 -0
  265. package/dist/modules/ecommerce/lib/storeBranding.js +40 -0
  266. package/dist/modules/ecommerce/lib/storeBranding.js.map +7 -0
  267. package/dist/modules/ecommerce/lib/storeBrandingRoute.js +76 -0
  268. package/dist/modules/ecommerce/lib/storeBrandingRoute.js.map +7 -0
  269. package/dist/modules/ecommerce/lib/storeContext.js +393 -0
  270. package/dist/modules/ecommerce/lib/storeContext.js.map +7 -0
  271. package/dist/modules/ecommerce/lib/storeContextService.js +43 -0
  272. package/dist/modules/ecommerce/lib/storeContextService.js.map +7 -0
  273. package/dist/modules/ecommerce/lib/storeLocale.js +60 -0
  274. package/dist/modules/ecommerce/lib/storeLocale.js.map +7 -0
  275. package/dist/modules/ecommerce/lib/storeNotifications.js +41 -0
  276. package/dist/modules/ecommerce/lib/storeNotifications.js.map +7 -0
  277. package/dist/modules/ecommerce/lib/storefrontCatalogSupport.js +248 -0
  278. package/dist/modules/ecommerce/lib/storefrontCatalogSupport.js.map +7 -0
  279. package/dist/modules/ecommerce/lib/storefrontCategories.js +241 -0
  280. package/dist/modules/ecommerce/lib/storefrontCategories.js.map +7 -0
  281. package/dist/modules/ecommerce/lib/storefrontCategoryCache.js +71 -0
  282. package/dist/modules/ecommerce/lib/storefrontCategoryCache.js.map +7 -0
  283. package/dist/modules/ecommerce/lib/storefrontDetail.js +447 -0
  284. package/dist/modules/ecommerce/lib/storefrontDetail.js.map +7 -0
  285. package/dist/modules/ecommerce/lib/storefrontFacets.js +441 -0
  286. package/dist/modules/ecommerce/lib/storefrontFacets.js.map +7 -0
  287. package/dist/modules/ecommerce/lib/storefrontOptionFilter.js +15 -0
  288. package/dist/modules/ecommerce/lib/storefrontOptionFilter.js.map +7 -0
  289. package/dist/modules/ecommerce/lib/storefrontPricing.js +393 -0
  290. package/dist/modules/ecommerce/lib/storefrontPricing.js.map +7 -0
  291. package/dist/modules/ecommerce/lib/storefrontProductCache.js +90 -0
  292. package/dist/modules/ecommerce/lib/storefrontProductCache.js.map +7 -0
  293. package/dist/modules/ecommerce/lib/storefrontProductScope.js +107 -0
  294. package/dist/modules/ecommerce/lib/storefrontProductScope.js.map +7 -0
  295. package/dist/modules/ecommerce/lib/storefrontProducts.js +670 -0
  296. package/dist/modules/ecommerce/lib/storefrontProducts.js.map +7 -0
  297. package/dist/modules/ecommerce/lib/storefrontQuery.js +156 -0
  298. package/dist/modules/ecommerce/lib/storefrontQuery.js.map +7 -0
  299. package/dist/modules/ecommerce/lib/storefrontRateLimit.js +99 -0
  300. package/dist/modules/ecommerce/lib/storefrontRateLimit.js.map +7 -0
  301. package/dist/modules/ecommerce/lib/storefrontSearch.js +303 -0
  302. package/dist/modules/ecommerce/lib/storefrontSearch.js.map +7 -0
  303. package/dist/modules/ecommerce/lib/storefrontSearchCache.js +35 -0
  304. package/dist/modules/ecommerce/lib/storefrontSearchCache.js.map +7 -0
  305. package/dist/modules/ecommerce/lib/subscriberSupport.js +33 -0
  306. package/dist/modules/ecommerce/lib/subscriberSupport.js.map +7 -0
  307. package/dist/modules/ecommerce/lib/types.js +1 -0
  308. package/dist/modules/ecommerce/lib/types.js.map +7 -0
  309. package/dist/modules/ecommerce/migrations/Migration20261005113233_ecommerce.js +32 -0
  310. package/dist/modules/ecommerce/migrations/Migration20261005113233_ecommerce.js.map +7 -0
  311. package/dist/modules/ecommerce/migrations/Migration20261006112733_ecommerce.js +17 -0
  312. package/dist/modules/ecommerce/migrations/Migration20261006112733_ecommerce.js.map +7 -0
  313. package/dist/modules/ecommerce/notifications.client.js +47 -0
  314. package/dist/modules/ecommerce/notifications.client.js.map +7 -0
  315. package/dist/modules/ecommerce/notifications.js +48 -0
  316. package/dist/modules/ecommerce/notifications.js.map +7 -0
  317. package/dist/modules/ecommerce/search.js +83 -0
  318. package/dist/modules/ecommerce/search.js.map +7 -0
  319. package/dist/modules/ecommerce/setup.js +17 -0
  320. package/dist/modules/ecommerce/setup.js.map +7 -0
  321. package/dist/modules/ecommerce/subscribers/assortment-empty-notifications.js +14 -0
  322. package/dist/modules/ecommerce/subscribers/assortment-empty-notifications.js.map +7 -0
  323. package/dist/modules/ecommerce/subscribers/availability-policy-cache-invalidation.js +14 -0
  324. package/dist/modules/ecommerce/subscribers/availability-policy-cache-invalidation.js.map +7 -0
  325. package/dist/modules/ecommerce/subscribers/catalog-category-cache-invalidation.js +14 -0
  326. package/dist/modules/ecommerce/subscribers/catalog-category-cache-invalidation.js.map +7 -0
  327. package/dist/modules/ecommerce/subscribers/catalog-price-cache-invalidation.js +14 -0
  328. package/dist/modules/ecommerce/subscribers/catalog-price-cache-invalidation.js.map +7 -0
  329. package/dist/modules/ecommerce/subscribers/catalog-product-cache-invalidation.js +14 -0
  330. package/dist/modules/ecommerce/subscribers/catalog-product-cache-invalidation.js.map +7 -0
  331. package/dist/modules/ecommerce/subscribers/catalog-variant-cache-invalidation.js +14 -0
  332. package/dist/modules/ecommerce/subscribers/catalog-variant-cache-invalidation.js.map +7 -0
  333. package/dist/modules/ecommerce/subscribers/customer-group-cache-invalidation.js +14 -0
  334. package/dist/modules/ecommerce/subscribers/customer-group-cache-invalidation.js.map +7 -0
  335. package/dist/modules/ecommerce/subscribers/customer-group-membership-cache-invalidation.js +14 -0
  336. package/dist/modules/ecommerce/subscribers/customer-group-membership-cache-invalidation.js.map +7 -0
  337. package/dist/modules/ecommerce/subscribers/customer-group-terms-cache-invalidation.js +14 -0
  338. package/dist/modules/ecommerce/subscribers/customer-group-terms-cache-invalidation.js.map +7 -0
  339. package/dist/modules/ecommerce/subscribers/customer-user-deleted-cache-invalidation.js +14 -0
  340. package/dist/modules/ecommerce/subscribers/customer-user-deleted-cache-invalidation.js.map +7 -0
  341. package/dist/modules/ecommerce/subscribers/customer-user-updated-cache-invalidation.js +14 -0
  342. package/dist/modules/ecommerce/subscribers/customer-user-updated-cache-invalidation.js.map +7 -0
  343. package/dist/modules/ecommerce/subscribers/domain-binding-rebind.js +16 -0
  344. package/dist/modules/ecommerce/subscribers/domain-binding-rebind.js.map +7 -0
  345. package/dist/modules/ecommerce/subscribers/domain-mapping-cache-invalidation.js +14 -0
  346. package/dist/modules/ecommerce/subscribers/domain-mapping-cache-invalidation.js.map +7 -0
  347. package/dist/modules/ecommerce/subscribers/store-cache-invalidation.js +14 -0
  348. package/dist/modules/ecommerce/subscribers/store-cache-invalidation.js.map +7 -0
  349. package/dist/modules/ecommerce/subscribers/store-channel-binding-cache-invalidation.js +14 -0
  350. package/dist/modules/ecommerce/subscribers/store-channel-binding-cache-invalidation.js.map +7 -0
  351. package/dist/modules/ecommerce/subscribers/store-domain-binding-cache-invalidation.js +14 -0
  352. package/dist/modules/ecommerce/subscribers/store-domain-binding-cache-invalidation.js.map +7 -0
  353. package/dist/modules/ecommerce/subscribers/store-notifications.js +14 -0
  354. package/dist/modules/ecommerce/subscribers/store-notifications.js.map +7 -0
  355. package/dist/modules/query_index/lib/batch.js +23 -9
  356. package/dist/modules/query_index/lib/batch.js.map +2 -2
  357. package/dist/modules/query_index/lib/doc-enrichers.js +212 -0
  358. package/dist/modules/query_index/lib/doc-enrichers.js.map +7 -0
  359. package/dist/modules/query_index/lib/document.js +2 -0
  360. package/dist/modules/query_index/lib/document.js.map +2 -2
  361. package/dist/modules/query_index/lib/engine.js +68 -1
  362. package/dist/modules/query_index/lib/engine.js.map +2 -2
  363. package/dist/modules/query_index/lib/indexer.js +7 -0
  364. package/dist/modules/query_index/lib/indexer.js.map +2 -2
  365. package/dist/modules/query_index/lib/search-tokens.js +2 -0
  366. package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
  367. package/dist/modules/query_index/migrations/Migration20261005201500_query_index.js +17 -0
  368. package/dist/modules/query_index/migrations/Migration20261005201500_query_index.js.map +7 -0
  369. package/dist/modules/translations/components/TranslationManager.js +3 -3
  370. package/dist/modules/translations/components/TranslationManager.js.map +2 -2
  371. package/dist/modules/translations/data/validators.js +1 -1
  372. package/dist/modules/translations/data/validators.js.map +1 -1
  373. package/dist/modules/translations/lib/batch.js +21 -1
  374. package/dist/modules/translations/lib/batch.js.map +2 -2
  375. package/dist/modules/translations/lib/helpers.js +3 -0
  376. package/dist/modules/translations/lib/helpers.js.map +2 -2
  377. package/dist/modules/translations/lib/resolve-field-list.js +14 -2
  378. package/dist/modules/translations/lib/resolve-field-list.js.map +2 -2
  379. package/generated/entities/catalog_price_history_entry/index.ts +25 -0
  380. package/generated/entities/customer_group_terms/index.ts +1 -0
  381. package/generated/entities/ecommerce_store/index.ts +15 -0
  382. package/generated/entities/ecommerce_store_channel_binding/index.ts +13 -0
  383. package/generated/entities/ecommerce_store_domain_binding/index.ts +10 -0
  384. package/generated/entities.ids.generated.ts +8 -1
  385. package/generated/entity-fields-registry.ts +72 -0
  386. package/package.json +7 -7
  387. package/src/helpers/integration/customerGroupsFixtures.ts +2 -0
  388. package/src/modules/auth/i18n/de.json +8 -0
  389. package/src/modules/auth/i18n/en.json +8 -0
  390. package/src/modules/auth/i18n/es.json +8 -0
  391. package/src/modules/auth/i18n/ko.json +8 -0
  392. package/src/modules/auth/i18n/pl.json +8 -0
  393. package/src/modules/catalog/AGENTS.md +5 -2
  394. package/src/modules/catalog/acl.ts +7 -0
  395. package/src/modules/catalog/api/config/omnibus/route.ts +204 -0
  396. package/src/modules/catalog/api/prices/history/route.ts +139 -0
  397. package/src/modules/catalog/api/prices/omnibus-preview/route.ts +202 -0
  398. package/src/modules/catalog/api/products/route.ts +53 -308
  399. package/src/modules/catalog/api/tags/route.ts +6 -0
  400. package/src/modules/catalog/backend/config/catalog/page.tsx +2 -0
  401. package/src/modules/catalog/cli.ts +84 -1
  402. package/src/modules/catalog/commands/categories.ts +54 -2
  403. package/src/modules/catalog/commands/prices.ts +43 -1
  404. package/src/modules/catalog/commands/products.ts +84 -1
  405. package/src/modules/catalog/commands/variants.ts +7 -0
  406. package/src/modules/catalog/components/OmnibusSettings.tsx +832 -0
  407. package/src/modules/catalog/components/PriceEditorOmnibusRow.tsx +219 -0
  408. package/src/modules/catalog/components/lookupSources.ts +29 -0
  409. package/src/modules/catalog/components/prices/PriceScopeSelectors.tsx +9 -0
  410. package/src/modules/catalog/components/products/VariantBuilder.tsx +9 -0
  411. package/src/modules/catalog/data/entities.ts +123 -1
  412. package/src/modules/catalog/data/validators.ts +118 -0
  413. package/src/modules/catalog/di.ts +23 -0
  414. package/src/modules/catalog/i18n/de.json +77 -0
  415. package/src/modules/catalog/i18n/en.json +77 -0
  416. package/src/modules/catalog/i18n/es.json +77 -0
  417. package/src/modules/catalog/i18n/ko.json +77 -0
  418. package/src/modules/catalog/i18n/pl.json +77 -0
  419. package/src/modules/catalog/lib/omnibus.ts +406 -0
  420. package/src/modules/catalog/lib/omnibusBackfill.ts +198 -0
  421. package/src/modules/catalog/lib/omnibusCache.ts +111 -0
  422. package/src/modules/catalog/lib/omnibusConfig.ts +73 -0
  423. package/src/modules/catalog/lib/omnibusHistoryQueries.ts +248 -0
  424. package/src/modules/catalog/lib/omnibusPresentedEntry.ts +76 -0
  425. package/src/modules/catalog/lib/omnibusProductListEnrichment.ts +125 -0
  426. package/src/modules/catalog/lib/omnibusTypes.ts +202 -0
  427. package/src/modules/catalog/lib/optionSchemaTranslations.ts +55 -0
  428. package/src/modules/catalog/lib/priceHistoryQuery.ts +155 -0
  429. package/src/modules/catalog/lib/pricing.ts +42 -4
  430. package/src/modules/catalog/lib/productFilters.ts +349 -0
  431. package/src/modules/catalog/lib/productScopeKeys.ts +162 -0
  432. package/src/modules/catalog/lib/productScopeReindex.ts +139 -0
  433. package/src/modules/catalog/migrations/.snapshot-open-mercato.json +572 -0
  434. package/src/modules/catalog/migrations/Migration20261005105352_catalog.ts +39 -0
  435. package/src/modules/catalog/migrations/Migration20261005150824_catalog.ts +39 -0
  436. package/src/modules/catalog/services/catalogOmnibusService.ts +642 -0
  437. package/src/modules/catalog/setup.ts +2 -0
  438. package/src/modules/catalog/subscribers/product-scope-keys-category-deleted.ts +18 -0
  439. package/src/modules/catalog/subscribers/product-scope-keys-category-updated.ts +19 -0
  440. package/src/modules/catalog/translations.ts +12 -0
  441. package/src/modules/configs/i18n/de.json +5 -1
  442. package/src/modules/configs/i18n/en.json +5 -1
  443. package/src/modules/configs/i18n/es.json +5 -1
  444. package/src/modules/configs/i18n/ko.json +5 -1
  445. package/src/modules/configs/i18n/pl.json +5 -1
  446. package/src/modules/configs/lib/upgrade-actions.ts +35 -0
  447. package/src/modules/customer_groups/api/customer-groups/[id]/terms/route.ts +7 -0
  448. package/src/modules/customer_groups/components/CustomerGroupTermsSection.tsx +124 -2
  449. package/src/modules/customer_groups/components/customerGroupAssortmentScope.ts +46 -0
  450. package/src/modules/customer_groups/data/entities.ts +4 -0
  451. package/src/modules/customer_groups/data/validators.ts +14 -0
  452. package/src/modules/customer_groups/i18n/de.json +12 -0
  453. package/src/modules/customer_groups/i18n/en.json +12 -0
  454. package/src/modules/customer_groups/i18n/es.json +12 -0
  455. package/src/modules/customer_groups/i18n/ko.json +12 -0
  456. package/src/modules/customer_groups/i18n/pl.json +12 -0
  457. package/src/modules/customer_groups/migrations/.snapshot-open-mercato.json +17 -0
  458. package/src/modules/customer_groups/migrations/Migration20261005110250_customer_groups.ts +15 -0
  459. package/src/modules/customer_groups/services/customerGroupsService.ts +74 -23
  460. package/src/modules/ecommerce/acl.ts +9 -0
  461. package/src/modules/ecommerce/api/domain-mappings/route.ts +76 -0
  462. package/src/modules/ecommerce/api/openapi.ts +28 -0
  463. package/src/modules/ecommerce/api/store-channel-bindings/[id]/assortment-count/route.ts +141 -0
  464. package/src/modules/ecommerce/api/store-channel-bindings/crud.ts +283 -0
  465. package/src/modules/ecommerce/api/store-channel-bindings/route.ts +67 -0
  466. package/src/modules/ecommerce/api/store-domain-bindings/crud.ts +324 -0
  467. package/src/modules/ecommerce/api/store-domain-bindings/route.ts +73 -0
  468. package/src/modules/ecommerce/api/storefront/categories/[slug]/route.ts +94 -0
  469. package/src/modules/ecommerce/api/storefront/categories/openapiSchemas.ts +63 -0
  470. package/src/modules/ecommerce/api/storefront/categories/route.ts +78 -0
  471. package/src/modules/ecommerce/api/storefront/context/route.ts +203 -0
  472. package/src/modules/ecommerce/api/storefront/products/[idOrHandle]/route.ts +94 -0
  473. package/src/modules/ecommerce/api/storefront/products/openapiSchemas.ts +193 -0
  474. package/src/modules/ecommerce/api/storefront/products/route.ts +81 -0
  475. package/src/modules/ecommerce/api/storefront/search/suggest/openapiSchemas.ts +25 -0
  476. package/src/modules/ecommerce/api/storefront/search/suggest/route.ts +78 -0
  477. package/src/modules/ecommerce/api/storefront/storefrontRouteSupport.ts +68 -0
  478. package/src/modules/ecommerce/api/stores/[id]/branding/route.ts +205 -0
  479. package/src/modules/ecommerce/api/stores/[id]/preview-branding/route.ts +99 -0
  480. package/src/modules/ecommerce/api/stores/crud.ts +457 -0
  481. package/src/modules/ecommerce/api/stores/route.ts +66 -0
  482. package/src/modules/ecommerce/backend/config/ecommerce/[id]/page.meta.ts +12 -0
  483. package/src/modules/ecommerce/backend/config/ecommerce/[id]/page.tsx +5 -0
  484. package/src/modules/ecommerce/backend/config/ecommerce/page.meta.ts +12 -0
  485. package/src/modules/ecommerce/backend/config/ecommerce/page.tsx +5 -0
  486. package/src/modules/ecommerce/commands/stores.ts +154 -0
  487. package/src/modules/ecommerce/components/ChannelAssortmentCount.tsx +138 -0
  488. package/src/modules/ecommerce/components/ChannelBindingFormSections.tsx +40 -0
  489. package/src/modules/ecommerce/components/ChannelLookupPicker.tsx +5 -0
  490. package/src/modules/ecommerce/components/DomainStatusWarning.tsx +32 -0
  491. package/src/modules/ecommerce/components/StoreAvailabilityDefaultsSection.tsx +219 -0
  492. package/src/modules/ecommerce/components/StoreBrandingControls.tsx +73 -0
  493. package/src/modules/ecommerce/components/StoreBrandingPreview.tsx +77 -0
  494. package/src/modules/ecommerce/components/StoreBrandingTab.tsx +242 -0
  495. package/src/modules/ecommerce/components/StoreChannelBindingDialog.tsx +306 -0
  496. package/src/modules/ecommerce/components/StoreChannelsTab.tsx +375 -0
  497. package/src/modules/ecommerce/components/StoreCreateDialog.tsx +204 -0
  498. package/src/modules/ecommerce/components/StoreDomainBindingDialog.tsx +198 -0
  499. package/src/modules/ecommerce/components/StoreDomainsTab.tsx +426 -0
  500. package/src/modules/ecommerce/components/StoreEditPage.tsx +193 -0
  501. package/src/modules/ecommerce/components/StoreGeneralTab.tsx +189 -0
  502. package/src/modules/ecommerce/components/StoreListPage.tsx +326 -0
  503. package/src/modules/ecommerce/components/StoreSeoTab.tsx +152 -0
  504. package/src/modules/ecommerce/components/StoreStatusBadge.tsx +22 -0
  505. package/src/modules/ecommerce/components/channelLookups.ts +24 -0
  506. package/src/modules/ecommerce/components/storeAdmin.ts +56 -0
  507. package/src/modules/ecommerce/components/storeBrandingForm.ts +230 -0
  508. package/src/modules/ecommerce/components/storeChannels.ts +210 -0
  509. package/src/modules/ecommerce/components/storeDomains.ts +221 -0
  510. package/src/modules/ecommerce/components/storeEditTabs.tsx +76 -0
  511. package/src/modules/ecommerce/components/storeGeneral.ts +155 -0
  512. package/src/modules/ecommerce/components/storeSeo.ts +78 -0
  513. package/src/modules/ecommerce/components/useChannelAssortmentCount.ts +67 -0
  514. package/src/modules/ecommerce/components/useStoreAccess.ts +36 -0
  515. package/src/modules/ecommerce/data/enrichers.ts +213 -0
  516. package/src/modules/ecommerce/data/entities.ts +168 -0
  517. package/src/modules/ecommerce/data/validators.ts +587 -0
  518. package/src/modules/ecommerce/di.ts +9 -0
  519. package/src/modules/ecommerce/events.ts +27 -0
  520. package/src/modules/ecommerce/i18n/de.json +341 -0
  521. package/src/modules/ecommerce/i18n/en.json +341 -0
  522. package/src/modules/ecommerce/i18n/es.json +341 -0
  523. package/src/modules/ecommerce/i18n/ko.json +341 -0
  524. package/src/modules/ecommerce/i18n/pl.json +341 -0
  525. package/src/modules/ecommerce/index.ts +14 -0
  526. package/src/modules/ecommerce/lib/assortmentCount.ts +175 -0
  527. package/src/modules/ecommerce/lib/brandingStyles.ts +215 -0
  528. package/src/modules/ecommerce/lib/buyerContext.ts +401 -0
  529. package/src/modules/ecommerce/lib/cacheInvalidation.ts +302 -0
  530. package/src/modules/ecommerce/lib/cacheKeys.ts +340 -0
  531. package/src/modules/ecommerce/lib/createConflictRecheck.ts +31 -0
  532. package/src/modules/ecommerce/lib/crudEvents.ts +128 -0
  533. package/src/modules/ecommerce/lib/crudSupport.ts +85 -0
  534. package/src/modules/ecommerce/lib/domainBindingRebind.ts +138 -0
  535. package/src/modules/ecommerce/lib/domainMappingSummaries.ts +71 -0
  536. package/src/modules/ecommerce/lib/exclusiveFlag.ts +90 -0
  537. package/src/modules/ecommerce/lib/references.ts +93 -0
  538. package/src/modules/ecommerce/lib/seedDraftStore.ts +125 -0
  539. package/src/modules/ecommerce/lib/storeBindingCascade.ts +138 -0
  540. package/src/modules/ecommerce/lib/storeBranding.ts +48 -0
  541. package/src/modules/ecommerce/lib/storeBrandingRoute.ts +91 -0
  542. package/src/modules/ecommerce/lib/storeContext.ts +669 -0
  543. package/src/modules/ecommerce/lib/storeContextService.ts +71 -0
  544. package/src/modules/ecommerce/lib/storeLocale.ts +88 -0
  545. package/src/modules/ecommerce/lib/storeNotifications.ts +55 -0
  546. package/src/modules/ecommerce/lib/storefrontCatalogSupport.ts +427 -0
  547. package/src/modules/ecommerce/lib/storefrontCategories.ts +419 -0
  548. package/src/modules/ecommerce/lib/storefrontCategoryCache.ts +113 -0
  549. package/src/modules/ecommerce/lib/storefrontDetail.ts +654 -0
  550. package/src/modules/ecommerce/lib/storefrontFacets.ts +697 -0
  551. package/src/modules/ecommerce/lib/storefrontOptionFilter.ts +44 -0
  552. package/src/modules/ecommerce/lib/storefrontPricing.ts +583 -0
  553. package/src/modules/ecommerce/lib/storefrontProductCache.ts +126 -0
  554. package/src/modules/ecommerce/lib/storefrontProductScope.ts +181 -0
  555. package/src/modules/ecommerce/lib/storefrontProducts.ts +963 -0
  556. package/src/modules/ecommerce/lib/storefrontQuery.ts +215 -0
  557. package/src/modules/ecommerce/lib/storefrontRateLimit.ts +126 -0
  558. package/src/modules/ecommerce/lib/storefrontSearch.ts +454 -0
  559. package/src/modules/ecommerce/lib/storefrontSearchCache.ts +49 -0
  560. package/src/modules/ecommerce/lib/subscriberSupport.ts +41 -0
  561. package/src/modules/ecommerce/lib/types.ts +69 -0
  562. package/src/modules/ecommerce/migrations/.snapshot-open-mercato.json +829 -0
  563. package/src/modules/ecommerce/migrations/Migration20261005113233_ecommerce.ts +32 -0
  564. package/src/modules/ecommerce/migrations/Migration20261006112733_ecommerce.ts +15 -0
  565. package/src/modules/ecommerce/notifications.client.ts +46 -0
  566. package/src/modules/ecommerce/notifications.ts +46 -0
  567. package/src/modules/ecommerce/search.ts +93 -0
  568. package/src/modules/ecommerce/setup.ts +15 -0
  569. package/src/modules/ecommerce/subscribers/assortment-empty-notifications.ts +12 -0
  570. package/src/modules/ecommerce/subscribers/availability-policy-cache-invalidation.ts +12 -0
  571. package/src/modules/ecommerce/subscribers/catalog-category-cache-invalidation.ts +12 -0
  572. package/src/modules/ecommerce/subscribers/catalog-price-cache-invalidation.ts +12 -0
  573. package/src/modules/ecommerce/subscribers/catalog-product-cache-invalidation.ts +12 -0
  574. package/src/modules/ecommerce/subscribers/catalog-variant-cache-invalidation.ts +12 -0
  575. package/src/modules/ecommerce/subscribers/customer-group-cache-invalidation.ts +12 -0
  576. package/src/modules/ecommerce/subscribers/customer-group-membership-cache-invalidation.ts +12 -0
  577. package/src/modules/ecommerce/subscribers/customer-group-terms-cache-invalidation.ts +12 -0
  578. package/src/modules/ecommerce/subscribers/customer-user-deleted-cache-invalidation.ts +12 -0
  579. package/src/modules/ecommerce/subscribers/customer-user-updated-cache-invalidation.ts +12 -0
  580. package/src/modules/ecommerce/subscribers/domain-binding-rebind.ts +14 -0
  581. package/src/modules/ecommerce/subscribers/domain-mapping-cache-invalidation.ts +12 -0
  582. package/src/modules/ecommerce/subscribers/store-cache-invalidation.ts +12 -0
  583. package/src/modules/ecommerce/subscribers/store-channel-binding-cache-invalidation.ts +12 -0
  584. package/src/modules/ecommerce/subscribers/store-domain-binding-cache-invalidation.ts +12 -0
  585. package/src/modules/ecommerce/subscribers/store-notifications.ts +12 -0
  586. package/src/modules/query_index/lib/batch.ts +25 -9
  587. package/src/modules/query_index/lib/doc-enrichers.ts +306 -0
  588. package/src/modules/query_index/lib/document.ts +2 -0
  589. package/src/modules/query_index/lib/engine.ts +58 -1
  590. package/src/modules/query_index/lib/indexer.ts +8 -0
  591. package/src/modules/query_index/lib/search-tokens.ts +2 -0
  592. package/src/modules/query_index/migrations/Migration20261005201500_query_index.ts +42 -0
  593. package/src/modules/translations/components/TranslationManager.tsx +3 -3
  594. package/src/modules/translations/data/validators.ts +1 -1
  595. package/src/modules/translations/lib/batch.ts +47 -0
  596. package/src/modules/translations/lib/helpers.ts +4 -0
  597. package/src/modules/translations/lib/resolve-field-list.ts +16 -2
@@ -0,0 +1,406 @@
1
+ import { z } from "zod";
2
+ import { CATALOG_PRODUCT_TYPES } from "@open-mercato/core/modules/catalog/data/types";
3
+ import {
4
+ ecommerceBrandingFontIds,
5
+ isValidBorderRadius,
6
+ isValidBrandingColor
7
+ } from "../lib/brandingStyles.js";
8
+ import {
9
+ ECOMMERCE_BRANDING_FONTS,
10
+ ecommerceBrandingFontIds as ecommerceBrandingFontIds2,
11
+ findEcommerceBrandingFont,
12
+ isValidBorderRadius as isValidBorderRadius2,
13
+ isValidBrandingColor as isValidBrandingColor2,
14
+ isValidOklchColor
15
+ } from "../lib/brandingStyles.js";
16
+ const uuid = () => z.string().uuid();
17
+ const emptyStringToNull = (value) => {
18
+ if (typeof value !== "string") return value;
19
+ const trimmed = value.trim();
20
+ return trimmed.length ? trimmed : null;
21
+ };
22
+ const emptyStringToUndefined = (value) => {
23
+ if (typeof value !== "string") return value;
24
+ const trimmed = value.trim();
25
+ return trimmed.length ? trimmed : void 0;
26
+ };
27
+ const ecommerceStoreStatusValues = ["draft", "active", "archived"];
28
+ const ecommerceStoreStatusSchema = z.enum(ecommerceStoreStatusValues);
29
+ const ecommercePriceSortFallbackValues = ["approximate", "unavailable"];
30
+ const ecommercePriceSortFallbackSchema = z.enum(ecommercePriceSortFallbackValues);
31
+ const ecommercePriceDisplayModeValues = ["gross", "net"];
32
+ const ecommercePriceDisplayModeSchema = z.enum(ecommercePriceDisplayModeValues);
33
+ const brandingColorSchema = z.preprocess(
34
+ emptyStringToUndefined,
35
+ z.string().max(64).refine(isValidBrandingColor, { message: "ecommerce.validation.colorInvalid" }).optional()
36
+ );
37
+ const brandingFontSchema = z.preprocess(
38
+ emptyStringToUndefined,
39
+ z.string().refine((value) => ecommerceBrandingFontIds.includes(value), { message: "ecommerce.validation.fontNotAllowed" }).optional()
40
+ );
41
+ const borderRadiusSchema = z.preprocess(
42
+ emptyStringToUndefined,
43
+ z.string().max(16).refine(isValidBorderRadius, { message: "ecommerce.validation.borderRadiusInvalid" }).optional()
44
+ );
45
+ const ROOT_RELATIVE_PATH_PATTERN = /^\/(?!\/)[A-Za-z0-9\-._~/%]*$/;
46
+ function isSafeAssetUrl(value) {
47
+ if (ROOT_RELATIVE_PATH_PATTERN.test(value)) return true;
48
+ try {
49
+ const parsed = new URL(value);
50
+ return parsed.protocol === "https:" || parsed.protocol === "http:";
51
+ } catch {
52
+ return false;
53
+ }
54
+ }
55
+ const assetUrlSchema = z.preprocess(
56
+ emptyStringToNull,
57
+ z.string().max(2048).refine(isSafeAssetUrl, { message: "ecommerce.validation.urlInvalid" }).nullable().optional()
58
+ );
59
+ const httpUrlSchema = z.string().trim().max(2048).refine(
60
+ (value) => {
61
+ try {
62
+ const parsed = new URL(value);
63
+ return parsed.protocol === "https:" || parsed.protocol === "http:";
64
+ } catch {
65
+ return false;
66
+ }
67
+ },
68
+ { message: "ecommerce.validation.urlInvalid" }
69
+ );
70
+ const clearableStringSchema = (max) => z.preprocess(emptyStringToNull, z.string().trim().max(max).nullable().optional());
71
+ const optionalStringSchema = (max) => z.preprocess(emptyStringToUndefined, z.string().trim().max(max).optional());
72
+ const ecommerceStoreBrandingSchema = z.object({
73
+ logoUrl: assetUrlSchema,
74
+ faviconUrl: assetUrlSchema,
75
+ primaryColor: brandingColorSchema,
76
+ primaryForeground: brandingColorSchema,
77
+ accentColor: brandingColorSchema,
78
+ accentForeground: brandingColorSchema,
79
+ backgroundColor: brandingColorSchema,
80
+ foregroundColor: brandingColorSchema,
81
+ borderRadius: borderRadiusSchema,
82
+ fontFamilyBase: brandingFontSchema,
83
+ fontFamilyHeading: brandingFontSchema
84
+ }).strict();
85
+ const SOCIAL_NETWORK_KEY_PATTERN = /^[a-z0-9_-]{1,32}$/;
86
+ const SOCIAL_LINKS_MAX = 20;
87
+ const ecommerceStoreContactSchema = z.object({
88
+ email: z.preprocess(emptyStringToNull, z.string().trim().email().max(320).nullable().optional()),
89
+ phone: clearableStringSchema(50),
90
+ address: clearableStringSchema(1e3),
91
+ social: z.record(z.string().regex(SOCIAL_NETWORK_KEY_PATTERN), httpUrlSchema).refine((value) => Object.keys(value).length <= SOCIAL_LINKS_MAX).optional()
92
+ }).strict();
93
+ const ecommerceStoreDisplayShape = {
94
+ priceDisplayModeDefault: ecommercePriceDisplayModeSchema,
95
+ enableSearch: z.boolean()
96
+ };
97
+ const ecommerceStoreDisplaySchema = z.object({
98
+ priceDisplayModeDefault: ecommercePriceDisplayModeSchema.default("gross"),
99
+ enableSearch: z.boolean().default(true)
100
+ }).strict();
101
+ const GOOGLE_SITE_VERIFICATION_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
102
+ const ECOMMERCE_SEO_SITE_NAME_MAX = 200;
103
+ const ECOMMERCE_SEO_META_DESCRIPTION_MAX = 500;
104
+ const ECOMMERCE_SEO_ROBOTS_TXT_MAX = 1e4;
105
+ const ECOMMERCE_SEO_GOOGLE_VERIFICATION_MAX = 128;
106
+ const ecommerceStoreSeoSchema = z.object({
107
+ siteName: optionalStringSchema(ECOMMERCE_SEO_SITE_NAME_MAX),
108
+ defaultMetaDescription: optionalStringSchema(ECOMMERCE_SEO_META_DESCRIPTION_MAX),
109
+ googleSiteVerification: z.preprocess(
110
+ emptyStringToUndefined,
111
+ z.string().regex(GOOGLE_SITE_VERIFICATION_PATTERN, { message: "ecommerce.validation.googleSiteVerificationInvalid" }).optional()
112
+ ),
113
+ robotsTxt: z.preprocess(emptyStringToUndefined, z.string().max(ECOMMERCE_SEO_ROBOTS_TXT_MAX).optional())
114
+ }).strict();
115
+ const ecommerceStoreSettingsSchema = z.object({
116
+ branding: ecommerceStoreBrandingSchema.prefault({}),
117
+ contact: ecommerceStoreContactSchema.prefault({}),
118
+ display: ecommerceStoreDisplaySchema.prefault({}),
119
+ seo: ecommerceStoreSeoSchema.prefault({})
120
+ }).strict();
121
+ const ecommerceStoreSettingsPatchSchema = z.object({
122
+ branding: ecommerceStoreBrandingSchema.optional(),
123
+ contact: ecommerceStoreContactSchema.optional(),
124
+ display: z.object(ecommerceStoreDisplayShape).partial().strict().optional(),
125
+ seo: ecommerceStoreSeoSchema.optional()
126
+ }).strict();
127
+ const ECOMMERCE_STORE_CODE_PATTERN = /^[a-z0-9_-]+$/;
128
+ const ECOMMERCE_STORE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
129
+ const ECOMMERCE_LOCALE_PATTERN = /^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-(?:[A-Z]{2}|\d{3}))?$/;
130
+ const codeSchema = z.string().trim().min(1).max(80).regex(ECOMMERCE_STORE_CODE_PATTERN, "ecommerce.validation.codeInvalid");
131
+ const slugSchema = z.string().trim().min(1).max(120).regex(ECOMMERCE_STORE_SLUG_PATTERN, "ecommerce.validation.slugInvalid");
132
+ const nameSchema = z.string().trim().min(1).max(200);
133
+ const localeSchema = z.string().trim().regex(ECOMMERCE_LOCALE_PATTERN, "ecommerce.validation.localeInvalid");
134
+ const supportedLocalesSchema = z.array(localeSchema).min(1).max(50).refine((locales) => new Set(locales).size === locales.length, {
135
+ message: "ecommerce.validation.localesDuplicate"
136
+ });
137
+ const currencyCodeSchema = z.string().trim().regex(/^[A-Z]{3}$/, "ecommerce.validation.currencyCodeInvalid");
138
+ function refineDefaultLocaleSupported(value, ctx) {
139
+ if (value.defaultLocale === void 0 || value.supportedLocales === void 0) return;
140
+ if (value.supportedLocales.includes(value.defaultLocale)) return;
141
+ ctx.addIssue({
142
+ code: "custom",
143
+ path: ["defaultLocale"],
144
+ message: "ecommerce.validation.defaultLocaleNotSupported"
145
+ });
146
+ }
147
+ const ecommerceStoreBaseShape = {
148
+ organizationId: uuid(),
149
+ tenantId: uuid(),
150
+ code: codeSchema,
151
+ name: nameSchema,
152
+ slug: slugSchema,
153
+ status: ecommerceStoreStatusSchema,
154
+ defaultLocale: localeSchema,
155
+ supportedLocales: supportedLocalesSchema,
156
+ defaultCurrencyCode: currencyCodeSchema,
157
+ isPrimary: z.boolean()
158
+ };
159
+ const ecommerceStoreCreateSchema = z.object({
160
+ ...ecommerceStoreBaseShape,
161
+ status: ecommerceStoreStatusSchema.optional().default("draft"),
162
+ isPrimary: z.boolean().optional().default(false),
163
+ settings: ecommerceStoreSettingsSchema.prefault({})
164
+ }).strict().superRefine(refineDefaultLocaleSupported);
165
+ const ecommerceStoreUpdateSchema = z.object({
166
+ id: uuid(),
167
+ ...z.object(ecommerceStoreBaseShape).partial().shape,
168
+ settings: ecommerceStoreSettingsPatchSchema.optional()
169
+ }).strict().superRefine(refineDefaultLocaleSupported);
170
+ const ecommerceStoreDeleteSchema = z.object({ id: uuid() }).strict();
171
+ const PATH_PREFIX_PATTERN = /^(?:\/[a-z0-9-]+)+$/;
172
+ const PATH_PREFIX_MAX = 200;
173
+ function normalizePathPrefix(value) {
174
+ if (value === void 0 || value === null) return value;
175
+ if (typeof value !== "string") return value;
176
+ const lowered = value.trim().toLowerCase();
177
+ const withoutTrailing = lowered.replace(/\/+$/, "");
178
+ if (!withoutTrailing.length) return null;
179
+ return withoutTrailing.startsWith("/") ? withoutTrailing : `/${withoutTrailing}`;
180
+ }
181
+ const pathPrefixSchema = z.preprocess(
182
+ normalizePathPrefix,
183
+ z.string().max(PATH_PREFIX_MAX).regex(PATH_PREFIX_PATTERN, "ecommerce.validation.pathPrefixInvalid").nullable().optional()
184
+ );
185
+ const ecommerceStoreDomainBindingBaseShape = {
186
+ organizationId: uuid(),
187
+ tenantId: uuid(),
188
+ storeId: uuid(),
189
+ domainMappingId: uuid(),
190
+ pathPrefix: pathPrefixSchema,
191
+ isPrimary: z.boolean()
192
+ };
193
+ const ecommerceStoreDomainBindingCreateSchema = z.object({
194
+ ...ecommerceStoreDomainBindingBaseShape,
195
+ isPrimary: z.boolean().optional().default(false)
196
+ }).strict();
197
+ const ecommerceStoreDomainBindingUpdateSchema = z.object({
198
+ id: uuid(),
199
+ ...z.object(ecommerceStoreDomainBindingBaseShape).partial().shape
200
+ }).strict();
201
+ const ecommerceStoreDomainBindingDeleteSchema = z.object({ id: uuid() }).strict();
202
+ const ecommerceAssortmentScopeSchema = z.object({
203
+ categoryIds: z.array(uuid()).optional(),
204
+ tagIds: z.array(uuid()).optional(),
205
+ excludeProductIds: z.array(uuid()).optional(),
206
+ excludeCategoryIds: z.array(uuid()).optional(),
207
+ excludeTagIds: z.array(uuid()).optional()
208
+ }).strict().nullable();
209
+ const clearableUuidSchema = z.preprocess(emptyStringToNull, uuid().nullable().optional());
210
+ const ecommerceStoreChannelBindingBaseShape = {
211
+ organizationId: uuid(),
212
+ tenantId: uuid(),
213
+ storeId: uuid(),
214
+ salesChannelId: uuid(),
215
+ priceKindId: clearableUuidSchema,
216
+ assortmentScope: ecommerceAssortmentScopeSchema.optional(),
217
+ priceSortFallback: ecommercePriceSortFallbackSchema,
218
+ isDefault: z.boolean(),
219
+ requireAuthentication: z.boolean()
220
+ };
221
+ const ecommerceStoreChannelBindingCreateSchema = z.object({
222
+ ...ecommerceStoreChannelBindingBaseShape,
223
+ priceSortFallback: ecommercePriceSortFallbackSchema.optional().default("approximate"),
224
+ isDefault: z.boolean().optional().default(false),
225
+ requireAuthentication: z.boolean().optional().default(false)
226
+ }).strict();
227
+ const ecommerceStoreChannelBindingUpdateSchema = z.object({
228
+ id: uuid(),
229
+ ...z.object(ecommerceStoreChannelBindingBaseShape).partial().shape
230
+ }).strict();
231
+ const ecommerceStoreChannelBindingDeleteSchema = z.object({ id: uuid() }).strict();
232
+ const ecommerceStorefrontContextQuerySchema = z.object({
233
+ storeSlug: z.string().max(120).optional(),
234
+ locale: z.string().max(35).optional(),
235
+ path: z.string().max(2048).optional()
236
+ }).strict();
237
+ const ecommerceStorefrontProductSortValues = [
238
+ "relevance",
239
+ "price_asc",
240
+ "price_desc",
241
+ "title_asc",
242
+ "title_desc",
243
+ "newest",
244
+ "featured"
245
+ ];
246
+ const ecommerceStorefrontProductSortSchema = z.enum(ecommerceStorefrontProductSortValues);
247
+ const ecommerceStorefrontAvailabilityFilterValues = ["in_stock", "available", "all"];
248
+ const ecommerceStorefrontAvailabilityFilterSchema = z.enum(ecommerceStorefrontAvailabilityFilterValues);
249
+ const ECOMMERCE_STOREFRONT_MAX_PAGE_SIZE = 100;
250
+ const ECOMMERCE_STOREFRONT_DEFAULT_PAGE_SIZE = 24;
251
+ const storefrontOptionCodeRegex = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
252
+ const commaSeparatedList = (maxItems, itemSchema) => z.preprocess(
253
+ (value) => {
254
+ if (typeof value !== "string") return value;
255
+ const items = value.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
256
+ return items.length ? Array.from(new Set(items)) : void 0;
257
+ },
258
+ z.array(itemSchema).min(1).max(maxItems).optional()
259
+ );
260
+ const optionalNonNegativeAmount = z.preprocess(
261
+ emptyStringToUndefined,
262
+ z.coerce.number().finite().min(0).max(1e9).optional()
263
+ );
264
+ const storefrontProductListFilterShape = {
265
+ page: z.preprocess(emptyStringToUndefined, z.coerce.number().int().min(1).max(1e4).optional().default(1)),
266
+ pageSize: z.preprocess(
267
+ emptyStringToUndefined,
268
+ z.coerce.number().int().min(1).max(ECOMMERCE_STOREFRONT_MAX_PAGE_SIZE).optional().default(ECOMMERCE_STOREFRONT_DEFAULT_PAGE_SIZE)
269
+ ),
270
+ search: z.preprocess(emptyStringToUndefined, z.string().max(200).optional()),
271
+ tagSlugs: commaSeparatedList(20, z.string().max(255)),
272
+ priceMin: optionalNonNegativeAmount,
273
+ priceMax: optionalNonNegativeAmount,
274
+ options: z.record(
275
+ z.string().regex(storefrontOptionCodeRegex),
276
+ z.array(z.string().min(1).max(255)).min(1).max(50)
277
+ ).refine((value) => Object.keys(value).length <= 20).optional(),
278
+ productType: z.preprocess(emptyStringToUndefined, z.enum(CATALOG_PRODUCT_TYPES).optional()),
279
+ availability: z.preprocess(
280
+ emptyStringToUndefined,
281
+ ecommerceStorefrontAvailabilityFilterSchema.optional().default("all")
282
+ ),
283
+ sort: z.preprocess(emptyStringToUndefined, ecommerceStorefrontProductSortSchema.optional()),
284
+ locale: z.string().max(35).optional(),
285
+ path: z.string().max(2048).optional(),
286
+ storeSlug: z.string().max(120).optional()
287
+ };
288
+ const storefrontProductListCategoryShape = {
289
+ categoryId: z.preprocess(emptyStringToUndefined, uuid().optional()),
290
+ categorySlug: z.preprocess(emptyStringToUndefined, z.string().max(255).optional())
291
+ };
292
+ const priceRangeIsOrdered = (value) => value.priceMin === void 0 || value.priceMax === void 0 || value.priceMin <= value.priceMax;
293
+ const ecommerceStorefrontProductListQuerySchema = z.object({ ...storefrontProductListFilterShape, ...storefrontProductListCategoryShape }).strict().refine((value) => !(value.categoryId && value.categorySlug), {
294
+ path: ["categorySlug"],
295
+ message: "categoryId and categorySlug are mutually exclusive"
296
+ }).refine(priceRangeIsOrdered, {
297
+ path: ["priceMax"],
298
+ message: "priceMax must not be lower than priceMin"
299
+ });
300
+ const ecommerceStorefrontCategoryLandingQuerySchema = z.object(storefrontProductListFilterShape).strict().refine(priceRangeIsOrdered, {
301
+ path: ["priceMax"],
302
+ message: "priceMax must not be lower than priceMin"
303
+ });
304
+ const ECOMMERCE_STOREFRONT_MAX_CATEGORY_DEPTH = 20;
305
+ const storefrontBooleanParameter = z.preprocess((value) => {
306
+ if (typeof value !== "string") return value;
307
+ const token = value.trim().toLowerCase();
308
+ if (token === "true" || token === "1") return true;
309
+ if (token === "false" || token === "0") return false;
310
+ return value;
311
+ }, z.boolean());
312
+ const ecommerceStorefrontCategoryTreeQuerySchema = z.object({
313
+ parentId: z.preprocess(emptyStringToUndefined, uuid().optional()),
314
+ depth: z.preprocess(
315
+ emptyStringToUndefined,
316
+ z.coerce.number().int().min(1).max(ECOMMERCE_STOREFRONT_MAX_CATEGORY_DEPTH).optional()
317
+ ),
318
+ includeEmpty: z.preprocess(emptyStringToUndefined, storefrontBooleanParameter.optional().default(false)),
319
+ locale: z.string().max(35).optional(),
320
+ path: z.string().max(2048).optional(),
321
+ storeSlug: z.string().max(120).optional()
322
+ }).strict();
323
+ const ecommerceStorefrontCategoryParamsSchema = z.object({
324
+ slug: z.string().trim().min(1).max(255)
325
+ });
326
+ const ecommerceStorefrontProductDetailQuerySchema = z.object({
327
+ variantId: z.preprocess(emptyStringToUndefined, uuid().optional()),
328
+ locale: z.string().max(35).optional(),
329
+ path: z.string().max(2048).optional(),
330
+ storeSlug: z.string().max(120).optional()
331
+ }).strict();
332
+ const ecommerceStorefrontProductParamsSchema = z.object({
333
+ idOrHandle: z.string().trim().min(1).max(255)
334
+ });
335
+ const ECOMMERCE_STOREFRONT_SUGGEST_MIN_QUERY_LENGTH = 2;
336
+ const ECOMMERCE_STOREFRONT_SUGGEST_DEFAULT_LIMIT = 8;
337
+ const ECOMMERCE_STOREFRONT_SUGGEST_MAX_LIMIT = 20;
338
+ const ecommerceStorefrontSearchSuggestQuerySchema = z.object({
339
+ q: z.string().max(200),
340
+ limit: z.preprocess(
341
+ emptyStringToUndefined,
342
+ z.coerce.number().int().min(1).max(ECOMMERCE_STOREFRONT_SUGGEST_MAX_LIMIT).optional().default(ECOMMERCE_STOREFRONT_SUGGEST_DEFAULT_LIMIT)
343
+ ),
344
+ locale: z.string().max(35).optional(),
345
+ path: z.string().max(2048).optional(),
346
+ storeSlug: z.string().max(120).optional()
347
+ }).strict();
348
+ export {
349
+ ECOMMERCE_BRANDING_FONTS,
350
+ ECOMMERCE_LOCALE_PATTERN,
351
+ ECOMMERCE_SEO_GOOGLE_VERIFICATION_MAX,
352
+ ECOMMERCE_SEO_META_DESCRIPTION_MAX,
353
+ ECOMMERCE_SEO_ROBOTS_TXT_MAX,
354
+ ECOMMERCE_SEO_SITE_NAME_MAX,
355
+ ECOMMERCE_STOREFRONT_DEFAULT_PAGE_SIZE,
356
+ ECOMMERCE_STOREFRONT_MAX_CATEGORY_DEPTH,
357
+ ECOMMERCE_STOREFRONT_MAX_PAGE_SIZE,
358
+ ECOMMERCE_STOREFRONT_SUGGEST_DEFAULT_LIMIT,
359
+ ECOMMERCE_STOREFRONT_SUGGEST_MAX_LIMIT,
360
+ ECOMMERCE_STOREFRONT_SUGGEST_MIN_QUERY_LENGTH,
361
+ ECOMMERCE_STORE_CODE_PATTERN,
362
+ ECOMMERCE_STORE_SLUG_PATTERN,
363
+ GOOGLE_SITE_VERIFICATION_PATTERN,
364
+ ecommerceAssortmentScopeSchema,
365
+ ecommerceBrandingFontIds2 as ecommerceBrandingFontIds,
366
+ ecommercePriceDisplayModeSchema,
367
+ ecommercePriceDisplayModeValues,
368
+ ecommercePriceSortFallbackSchema,
369
+ ecommercePriceSortFallbackValues,
370
+ ecommerceStoreBrandingSchema,
371
+ ecommerceStoreChannelBindingCreateSchema,
372
+ ecommerceStoreChannelBindingDeleteSchema,
373
+ ecommerceStoreChannelBindingUpdateSchema,
374
+ ecommerceStoreContactSchema,
375
+ ecommerceStoreCreateSchema,
376
+ ecommerceStoreDeleteSchema,
377
+ ecommerceStoreDisplaySchema,
378
+ ecommerceStoreDomainBindingCreateSchema,
379
+ ecommerceStoreDomainBindingDeleteSchema,
380
+ ecommerceStoreDomainBindingUpdateSchema,
381
+ ecommerceStoreSeoSchema,
382
+ ecommerceStoreSettingsPatchSchema,
383
+ ecommerceStoreSettingsSchema,
384
+ ecommerceStoreStatusSchema,
385
+ ecommerceStoreStatusValues,
386
+ ecommerceStoreUpdateSchema,
387
+ ecommerceStorefrontAvailabilityFilterSchema,
388
+ ecommerceStorefrontAvailabilityFilterValues,
389
+ ecommerceStorefrontCategoryLandingQuerySchema,
390
+ ecommerceStorefrontCategoryParamsSchema,
391
+ ecommerceStorefrontCategoryTreeQuerySchema,
392
+ ecommerceStorefrontContextQuerySchema,
393
+ ecommerceStorefrontProductDetailQuerySchema,
394
+ ecommerceStorefrontProductListQuerySchema,
395
+ ecommerceStorefrontProductParamsSchema,
396
+ ecommerceStorefrontProductSortSchema,
397
+ ecommerceStorefrontProductSortValues,
398
+ ecommerceStorefrontSearchSuggestQuerySchema,
399
+ findEcommerceBrandingFont,
400
+ isSafeAssetUrl,
401
+ isValidBorderRadius2 as isValidBorderRadius,
402
+ isValidBrandingColor2 as isValidBrandingColor,
403
+ isValidOklchColor,
404
+ normalizePathPrefix
405
+ };
406
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/ecommerce/data/validators.ts"],
4
+ "sourcesContent": ["import { z } from 'zod'\nimport { CATALOG_PRODUCT_TYPES } from '@open-mercato/core/modules/catalog/data/types'\nimport {\n ecommerceBrandingFontIds,\n isValidBorderRadius,\n isValidBrandingColor,\n} from '../lib/brandingStyles'\n\nexport {\n ECOMMERCE_BRANDING_FONTS,\n ecommerceBrandingFontIds,\n findEcommerceBrandingFont,\n isValidBorderRadius,\n isValidBrandingColor,\n isValidOklchColor,\n type EcommerceBrandingFont,\n} from '../lib/brandingStyles'\n\nconst uuid = () => z.string().uuid()\n\nconst emptyStringToNull = (value: unknown): unknown => {\n if (typeof value !== 'string') return value\n const trimmed = value.trim()\n return trimmed.length ? trimmed : null\n}\n\nconst emptyStringToUndefined = (value: unknown): unknown => {\n if (typeof value !== 'string') return value\n const trimmed = value.trim()\n return trimmed.length ? trimmed : undefined\n}\n\nexport const ecommerceStoreStatusValues = ['draft', 'active', 'archived'] as const\nexport const ecommerceStoreStatusSchema = z.enum(ecommerceStoreStatusValues)\nexport type EcommerceStoreStatus = z.infer<typeof ecommerceStoreStatusSchema>\n\nexport const ecommercePriceSortFallbackValues = ['approximate', 'unavailable'] as const\nexport const ecommercePriceSortFallbackSchema = z.enum(ecommercePriceSortFallbackValues)\nexport type EcommercePriceSortFallback = z.infer<typeof ecommercePriceSortFallbackSchema>\n\nexport const ecommercePriceDisplayModeValues = ['gross', 'net'] as const\nexport const ecommercePriceDisplayModeSchema = z.enum(ecommercePriceDisplayModeValues)\nexport type EcommercePriceDisplayMode = z.infer<typeof ecommercePriceDisplayModeSchema>\n\nconst brandingColorSchema = z.preprocess(\n emptyStringToUndefined,\n z\n .string()\n .max(64)\n .refine(isValidBrandingColor, { message: 'ecommerce.validation.colorInvalid' })\n .optional(),\n)\n\nconst brandingFontSchema = z.preprocess(\n emptyStringToUndefined,\n z\n .string()\n .refine((value) => ecommerceBrandingFontIds.includes(value), { message: 'ecommerce.validation.fontNotAllowed' })\n .optional(),\n)\n\nconst borderRadiusSchema = z.preprocess(\n emptyStringToUndefined,\n z\n .string()\n .max(16)\n .refine(isValidBorderRadius, { message: 'ecommerce.validation.borderRadiusInvalid' })\n .optional(),\n)\n\nconst ROOT_RELATIVE_PATH_PATTERN = /^\\/(?!\\/)[A-Za-z0-9\\-._~/%]*$/\n\nexport function isSafeAssetUrl(value: string): boolean {\n if (ROOT_RELATIVE_PATH_PATTERN.test(value)) return true\n try {\n const parsed = new URL(value)\n return parsed.protocol === 'https:' || parsed.protocol === 'http:'\n } catch {\n return false\n }\n}\n\nconst assetUrlSchema = z.preprocess(\n emptyStringToNull,\n z\n .string()\n .max(2048)\n .refine(isSafeAssetUrl, { message: 'ecommerce.validation.urlInvalid' })\n .nullable()\n .optional(),\n)\n\nconst httpUrlSchema = z\n .string()\n .trim()\n .max(2048)\n .refine(\n (value) => {\n try {\n const parsed = new URL(value)\n return parsed.protocol === 'https:' || parsed.protocol === 'http:'\n } catch {\n return false\n }\n },\n { message: 'ecommerce.validation.urlInvalid' },\n )\n\nconst clearableStringSchema = (max: number) =>\n z.preprocess(emptyStringToNull, z.string().trim().max(max).nullable().optional())\n\nconst optionalStringSchema = (max: number) =>\n z.preprocess(emptyStringToUndefined, z.string().trim().max(max).optional())\n\nexport const ecommerceStoreBrandingSchema = z\n .object({\n logoUrl: assetUrlSchema,\n faviconUrl: assetUrlSchema,\n primaryColor: brandingColorSchema,\n primaryForeground: brandingColorSchema,\n accentColor: brandingColorSchema,\n accentForeground: brandingColorSchema,\n backgroundColor: brandingColorSchema,\n foregroundColor: brandingColorSchema,\n borderRadius: borderRadiusSchema,\n fontFamilyBase: brandingFontSchema,\n fontFamilyHeading: brandingFontSchema,\n })\n .strict()\n\nexport type EcommerceStoreBranding = z.infer<typeof ecommerceStoreBrandingSchema>\n\nconst SOCIAL_NETWORK_KEY_PATTERN = /^[a-z0-9_-]{1,32}$/\nconst SOCIAL_LINKS_MAX = 20\n\nexport const ecommerceStoreContactSchema = z\n .object({\n email: z.preprocess(emptyStringToNull, z.string().trim().email().max(320).nullable().optional()),\n phone: clearableStringSchema(50),\n address: clearableStringSchema(1000),\n social: z\n .record(z.string().regex(SOCIAL_NETWORK_KEY_PATTERN), httpUrlSchema)\n .refine((value) => Object.keys(value).length <= SOCIAL_LINKS_MAX)\n .optional(),\n })\n .strict()\n\nexport type EcommerceStoreContact = z.infer<typeof ecommerceStoreContactSchema>\n\nconst ecommerceStoreDisplayShape = {\n priceDisplayModeDefault: ecommercePriceDisplayModeSchema,\n enableSearch: z.boolean(),\n}\n\nexport const ecommerceStoreDisplaySchema = z\n .object({\n priceDisplayModeDefault: ecommercePriceDisplayModeSchema.default('gross'),\n enableSearch: z.boolean().default(true),\n })\n .strict()\n\nexport type EcommerceStoreDisplay = z.infer<typeof ecommerceStoreDisplaySchema>\n\nexport const GOOGLE_SITE_VERIFICATION_PATTERN = /^[A-Za-z0-9_-]{1,128}$/\nexport const ECOMMERCE_SEO_SITE_NAME_MAX = 200\nexport const ECOMMERCE_SEO_META_DESCRIPTION_MAX = 500\nexport const ECOMMERCE_SEO_ROBOTS_TXT_MAX = 10000\nexport const ECOMMERCE_SEO_GOOGLE_VERIFICATION_MAX = 128\n\nexport const ecommerceStoreSeoSchema = z\n .object({\n siteName: optionalStringSchema(ECOMMERCE_SEO_SITE_NAME_MAX),\n defaultMetaDescription: optionalStringSchema(ECOMMERCE_SEO_META_DESCRIPTION_MAX),\n googleSiteVerification: z.preprocess(\n emptyStringToUndefined,\n z\n .string()\n .regex(GOOGLE_SITE_VERIFICATION_PATTERN, { message: 'ecommerce.validation.googleSiteVerificationInvalid' })\n .optional(),\n ),\n robotsTxt: z.preprocess(emptyStringToUndefined, z.string().max(ECOMMERCE_SEO_ROBOTS_TXT_MAX).optional()),\n })\n .strict()\n\nexport type EcommerceStoreSeo = z.infer<typeof ecommerceStoreSeoSchema>\n\nexport const ecommerceStoreSettingsSchema = z\n .object({\n branding: ecommerceStoreBrandingSchema.prefault({}),\n contact: ecommerceStoreContactSchema.prefault({}),\n display: ecommerceStoreDisplaySchema.prefault({}),\n seo: ecommerceStoreSeoSchema.prefault({}),\n })\n .strict()\n\nexport type EcommerceStoreSettings = z.infer<typeof ecommerceStoreSettingsSchema>\n\nexport const ecommerceStoreSettingsPatchSchema = z\n .object({\n branding: ecommerceStoreBrandingSchema.optional(),\n contact: ecommerceStoreContactSchema.optional(),\n display: z.object(ecommerceStoreDisplayShape).partial().strict().optional(),\n seo: ecommerceStoreSeoSchema.optional(),\n })\n .strict()\n\nexport type EcommerceStoreSettingsPatch = z.infer<typeof ecommerceStoreSettingsPatchSchema>\n\nexport const ECOMMERCE_STORE_CODE_PATTERN = /^[a-z0-9_-]+$/\nexport const ECOMMERCE_STORE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\nexport const ECOMMERCE_LOCALE_PATTERN = /^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-(?:[A-Z]{2}|\\d{3}))?$/\n\nconst codeSchema = z\n .string()\n .trim()\n .min(1)\n .max(80)\n .regex(ECOMMERCE_STORE_CODE_PATTERN, 'ecommerce.validation.codeInvalid')\n\nconst slugSchema = z\n .string()\n .trim()\n .min(1)\n .max(120)\n .regex(ECOMMERCE_STORE_SLUG_PATTERN, 'ecommerce.validation.slugInvalid')\n\nconst nameSchema = z.string().trim().min(1).max(200)\n\nconst localeSchema = z.string().trim().regex(ECOMMERCE_LOCALE_PATTERN, 'ecommerce.validation.localeInvalid')\n\nconst supportedLocalesSchema = z\n .array(localeSchema)\n .min(1)\n .max(50)\n .refine((locales) => new Set(locales).size === locales.length, {\n message: 'ecommerce.validation.localesDuplicate',\n })\n\nconst currencyCodeSchema = z\n .string()\n .trim()\n .regex(/^[A-Z]{3}$/, 'ecommerce.validation.currencyCodeInvalid')\n\ntype LocalePair = { defaultLocale?: string; supportedLocales?: string[] }\n\nfunction refineDefaultLocaleSupported(value: LocalePair, ctx: z.RefinementCtx): void {\n if (value.defaultLocale === undefined || value.supportedLocales === undefined) return\n if (value.supportedLocales.includes(value.defaultLocale)) return\n ctx.addIssue({\n code: 'custom',\n path: ['defaultLocale'],\n message: 'ecommerce.validation.defaultLocaleNotSupported',\n })\n}\n\nconst ecommerceStoreBaseShape = {\n organizationId: uuid(),\n tenantId: uuid(),\n code: codeSchema,\n name: nameSchema,\n slug: slugSchema,\n status: ecommerceStoreStatusSchema,\n defaultLocale: localeSchema,\n supportedLocales: supportedLocalesSchema,\n defaultCurrencyCode: currencyCodeSchema,\n isPrimary: z.boolean(),\n}\n\nexport const ecommerceStoreCreateSchema = z\n .object({\n ...ecommerceStoreBaseShape,\n status: ecommerceStoreStatusSchema.optional().default('draft'),\n isPrimary: z.boolean().optional().default(false),\n settings: ecommerceStoreSettingsSchema.prefault({}),\n })\n .strict()\n .superRefine(refineDefaultLocaleSupported)\n\nexport type EcommerceStoreCreateInput = z.infer<typeof ecommerceStoreCreateSchema>\n\nexport const ecommerceStoreUpdateSchema = z\n .object({\n id: uuid(),\n ...z.object(ecommerceStoreBaseShape).partial().shape,\n settings: ecommerceStoreSettingsPatchSchema.optional(),\n })\n .strict()\n .superRefine(refineDefaultLocaleSupported)\n\nexport type EcommerceStoreUpdateInput = z.infer<typeof ecommerceStoreUpdateSchema>\n\nexport const ecommerceStoreDeleteSchema = z.object({ id: uuid() }).strict()\n\nexport type EcommerceStoreDeleteInput = z.infer<typeof ecommerceStoreDeleteSchema>\n\nconst PATH_PREFIX_PATTERN = /^(?:\\/[a-z0-9-]+)+$/\nconst PATH_PREFIX_MAX = 200\n\nexport function normalizePathPrefix(value: unknown): unknown {\n if (value === undefined || value === null) return value\n if (typeof value !== 'string') return value\n const lowered = value.trim().toLowerCase()\n const withoutTrailing = lowered.replace(/\\/+$/, '')\n if (!withoutTrailing.length) return null\n return withoutTrailing.startsWith('/') ? withoutTrailing : `/${withoutTrailing}`\n}\n\nconst pathPrefixSchema = z.preprocess(\n normalizePathPrefix,\n z\n .string()\n .max(PATH_PREFIX_MAX)\n .regex(PATH_PREFIX_PATTERN, 'ecommerce.validation.pathPrefixInvalid')\n .nullable()\n .optional(),\n)\n\nconst ecommerceStoreDomainBindingBaseShape = {\n organizationId: uuid(),\n tenantId: uuid(),\n storeId: uuid(),\n domainMappingId: uuid(),\n pathPrefix: pathPrefixSchema,\n isPrimary: z.boolean(),\n}\n\nexport const ecommerceStoreDomainBindingCreateSchema = z\n .object({\n ...ecommerceStoreDomainBindingBaseShape,\n isPrimary: z.boolean().optional().default(false),\n })\n .strict()\n\nexport type EcommerceStoreDomainBindingCreateInput = z.infer<typeof ecommerceStoreDomainBindingCreateSchema>\n\nexport const ecommerceStoreDomainBindingUpdateSchema = z\n .object({\n id: uuid(),\n ...z.object(ecommerceStoreDomainBindingBaseShape).partial().shape,\n })\n .strict()\n\nexport type EcommerceStoreDomainBindingUpdateInput = z.infer<typeof ecommerceStoreDomainBindingUpdateSchema>\n\nexport const ecommerceStoreDomainBindingDeleteSchema = z.object({ id: uuid() }).strict()\n\nexport type EcommerceStoreDomainBindingDeleteInput = z.infer<typeof ecommerceStoreDomainBindingDeleteSchema>\n\nexport const ecommerceAssortmentScopeSchema = z\n .object({\n categoryIds: z.array(uuid()).optional(),\n tagIds: z.array(uuid()).optional(),\n excludeProductIds: z.array(uuid()).optional(),\n excludeCategoryIds: z.array(uuid()).optional(),\n excludeTagIds: z.array(uuid()).optional(),\n })\n .strict()\n .nullable()\n\nexport type EcommerceAssortmentScopeInput = z.infer<typeof ecommerceAssortmentScopeSchema>\n\nconst clearableUuidSchema = z.preprocess(emptyStringToNull, uuid().nullable().optional())\n\nconst ecommerceStoreChannelBindingBaseShape = {\n organizationId: uuid(),\n tenantId: uuid(),\n storeId: uuid(),\n salesChannelId: uuid(),\n priceKindId: clearableUuidSchema,\n assortmentScope: ecommerceAssortmentScopeSchema.optional(),\n priceSortFallback: ecommercePriceSortFallbackSchema,\n isDefault: z.boolean(),\n requireAuthentication: z.boolean(),\n}\n\nexport const ecommerceStoreChannelBindingCreateSchema = z\n .object({\n ...ecommerceStoreChannelBindingBaseShape,\n priceSortFallback: ecommercePriceSortFallbackSchema.optional().default('approximate'),\n isDefault: z.boolean().optional().default(false),\n requireAuthentication: z.boolean().optional().default(false),\n })\n .strict()\n\nexport type EcommerceStoreChannelBindingCreateInput = z.infer<typeof ecommerceStoreChannelBindingCreateSchema>\n\nexport const ecommerceStoreChannelBindingUpdateSchema = z\n .object({\n id: uuid(),\n ...z.object(ecommerceStoreChannelBindingBaseShape).partial().shape,\n })\n .strict()\n\nexport type EcommerceStoreChannelBindingUpdateInput = z.infer<typeof ecommerceStoreChannelBindingUpdateSchema>\n\nexport const ecommerceStoreChannelBindingDeleteSchema = z.object({ id: uuid() }).strict()\n\nexport type EcommerceStoreChannelBindingDeleteInput = z.infer<typeof ecommerceStoreChannelBindingDeleteSchema>\n\nexport const ecommerceStorefrontContextQuerySchema = z\n .object({\n storeSlug: z.string().max(120).optional(),\n locale: z.string().max(35).optional(),\n path: z.string().max(2048).optional(),\n })\n .strict()\n\nexport type EcommerceStorefrontContextQuery = z.infer<typeof ecommerceStorefrontContextQuerySchema>\n\nexport const ecommerceStorefrontProductSortValues = [\n 'relevance',\n 'price_asc',\n 'price_desc',\n 'title_asc',\n 'title_desc',\n 'newest',\n 'featured',\n] as const\nexport const ecommerceStorefrontProductSortSchema = z.enum(ecommerceStorefrontProductSortValues)\nexport type EcommerceStorefrontProductSort = z.infer<typeof ecommerceStorefrontProductSortSchema>\n\nexport const ecommerceStorefrontAvailabilityFilterValues = ['in_stock', 'available', 'all'] as const\nexport const ecommerceStorefrontAvailabilityFilterSchema = z.enum(ecommerceStorefrontAvailabilityFilterValues)\nexport type EcommerceStorefrontAvailabilityFilter = z.infer<typeof ecommerceStorefrontAvailabilityFilterSchema>\n\nexport const ECOMMERCE_STOREFRONT_MAX_PAGE_SIZE = 100\nexport const ECOMMERCE_STOREFRONT_DEFAULT_PAGE_SIZE = 24\n\nconst storefrontOptionCodeRegex = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/\n\nconst commaSeparatedList = (maxItems: number, itemSchema: z.ZodString) =>\n z.preprocess(\n (value) => {\n if (typeof value !== 'string') return value\n const items = value\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n return items.length ? Array.from(new Set(items)) : undefined\n },\n z.array(itemSchema).min(1).max(maxItems).optional(),\n )\n\nconst optionalNonNegativeAmount = z.preprocess(\n emptyStringToUndefined,\n z.coerce.number().finite().min(0).max(1_000_000_000).optional(),\n)\n\nconst storefrontProductListFilterShape = {\n page: z.preprocess(emptyStringToUndefined, z.coerce.number().int().min(1).max(10_000).optional().default(1)),\n pageSize: z.preprocess(\n emptyStringToUndefined,\n z.coerce\n .number()\n .int()\n .min(1)\n .max(ECOMMERCE_STOREFRONT_MAX_PAGE_SIZE)\n .optional()\n .default(ECOMMERCE_STOREFRONT_DEFAULT_PAGE_SIZE),\n ),\n search: z.preprocess(emptyStringToUndefined, z.string().max(200).optional()),\n tagSlugs: commaSeparatedList(20, z.string().max(255)),\n priceMin: optionalNonNegativeAmount,\n priceMax: optionalNonNegativeAmount,\n options: z\n .record(\n z.string().regex(storefrontOptionCodeRegex),\n z.array(z.string().min(1).max(255)).min(1).max(50),\n )\n .refine((value) => Object.keys(value).length <= 20)\n .optional(),\n productType: z.preprocess(emptyStringToUndefined, z.enum(CATALOG_PRODUCT_TYPES).optional()),\n availability: z.preprocess(\n emptyStringToUndefined,\n ecommerceStorefrontAvailabilityFilterSchema.optional().default('all'),\n ),\n sort: z.preprocess(emptyStringToUndefined, ecommerceStorefrontProductSortSchema.optional()),\n locale: z.string().max(35).optional(),\n path: z.string().max(2048).optional(),\n storeSlug: z.string().max(120).optional(),\n}\n\nconst storefrontProductListCategoryShape = {\n categoryId: z.preprocess(emptyStringToUndefined, uuid().optional()),\n categorySlug: z.preprocess(emptyStringToUndefined, z.string().max(255).optional()),\n}\n\nconst priceRangeIsOrdered = (value: { priceMin?: number; priceMax?: number }) =>\n value.priceMin === undefined || value.priceMax === undefined || value.priceMin <= value.priceMax\n\nexport const ecommerceStorefrontProductListQuerySchema = z\n .object({ ...storefrontProductListFilterShape, ...storefrontProductListCategoryShape })\n .strict()\n .refine((value) => !(value.categoryId && value.categorySlug), {\n path: ['categorySlug'],\n message: 'categoryId and categorySlug are mutually exclusive',\n })\n .refine(priceRangeIsOrdered, {\n path: ['priceMax'],\n message: 'priceMax must not be lower than priceMin',\n })\n\nexport type EcommerceStorefrontProductListQuery = z.infer<typeof ecommerceStorefrontProductListQuerySchema>\n\nexport const ecommerceStorefrontCategoryLandingQuerySchema = z\n .object(storefrontProductListFilterShape)\n .strict()\n .refine(priceRangeIsOrdered, {\n path: ['priceMax'],\n message: 'priceMax must not be lower than priceMin',\n })\n\nexport type EcommerceStorefrontCategoryLandingQuery = z.infer<typeof ecommerceStorefrontCategoryLandingQuerySchema>\n\nexport const ECOMMERCE_STOREFRONT_MAX_CATEGORY_DEPTH = 20\n\nconst storefrontBooleanParameter = z.preprocess((value) => {\n if (typeof value !== 'string') return value\n const token = value.trim().toLowerCase()\n if (token === 'true' || token === '1') return true\n if (token === 'false' || token === '0') return false\n return value\n}, z.boolean())\n\nexport const ecommerceStorefrontCategoryTreeQuerySchema = z\n .object({\n parentId: z.preprocess(emptyStringToUndefined, uuid().optional()),\n depth: z.preprocess(\n emptyStringToUndefined,\n z.coerce.number().int().min(1).max(ECOMMERCE_STOREFRONT_MAX_CATEGORY_DEPTH).optional(),\n ),\n includeEmpty: z.preprocess(emptyStringToUndefined, storefrontBooleanParameter.optional().default(false)),\n locale: z.string().max(35).optional(),\n path: z.string().max(2048).optional(),\n storeSlug: z.string().max(120).optional(),\n })\n .strict()\n\nexport type EcommerceStorefrontCategoryTreeQuery = z.infer<typeof ecommerceStorefrontCategoryTreeQuerySchema>\n\nexport const ecommerceStorefrontCategoryParamsSchema = z.object({\n slug: z.string().trim().min(1).max(255),\n})\n\nexport type EcommerceStorefrontCategoryParams = z.infer<typeof ecommerceStorefrontCategoryParamsSchema>\n\nexport const ecommerceStorefrontProductDetailQuerySchema = z\n .object({\n variantId: z.preprocess(emptyStringToUndefined, uuid().optional()),\n locale: z.string().max(35).optional(),\n path: z.string().max(2048).optional(),\n storeSlug: z.string().max(120).optional(),\n })\n .strict()\n\nexport type EcommerceStorefrontProductDetailQuery = z.infer<typeof ecommerceStorefrontProductDetailQuerySchema>\n\nexport const ecommerceStorefrontProductParamsSchema = z.object({\n idOrHandle: z.string().trim().min(1).max(255),\n})\n\nexport type EcommerceStorefrontProductParams = z.infer<typeof ecommerceStorefrontProductParamsSchema>\n\nexport const ECOMMERCE_STOREFRONT_SUGGEST_MIN_QUERY_LENGTH = 2\nexport const ECOMMERCE_STOREFRONT_SUGGEST_DEFAULT_LIMIT = 8\nexport const ECOMMERCE_STOREFRONT_SUGGEST_MAX_LIMIT = 20\n\nexport const ecommerceStorefrontSearchSuggestQuerySchema = z\n .object({\n q: z.string().max(200),\n limit: z.preprocess(\n emptyStringToUndefined,\n z.coerce\n .number()\n .int()\n .min(1)\n .max(ECOMMERCE_STOREFRONT_SUGGEST_MAX_LIMIT)\n .optional()\n .default(ECOMMERCE_STOREFRONT_SUGGEST_DEFAULT_LIMIT),\n ),\n locale: z.string().max(35).optional(),\n path: z.string().max(2048).optional(),\n storeSlug: z.string().max(120).optional(),\n })\n .strict()\n\nexport type EcommerceStorefrontSearchSuggestQuery = z.infer<typeof ecommerceStorefrontSearchSuggestQuerySchema>\n"],
5
+ "mappings": "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",
6
+ "names": ["ecommerceBrandingFontIds", "isValidBorderRadius", "isValidBrandingColor"]
7
+ }
@@ -0,0 +1,11 @@
1
+ import { asFunction } from "awilix";
2
+ import { createStoreContextService } from "./lib/storeContextService.js";
3
+ function register(container) {
4
+ container.register({
5
+ storeContextService: asFunction(() => createStoreContextService(container)).scoped()
6
+ });
7
+ }
8
+ export {
9
+ register
10
+ };
11
+ //# sourceMappingURL=di.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/ecommerce/di.ts"],
4
+ "sourcesContent": ["import { asFunction } from 'awilix'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport { createStoreContextService } from './lib/storeContextService'\n\nexport function register(container: AppContainer) {\n container.register({\n storeContextService: asFunction(() => createStoreContextService(container)).scoped(),\n })\n}\n"],
5
+ "mappings": "AAAA,SAAS,kBAAkB;AAE3B,SAAS,iCAAiC;AAEnC,SAAS,SAAS,WAAyB;AAChD,YAAU,SAAS;AAAA,IACjB,qBAAqB,WAAW,MAAM,0BAA0B,SAAS,CAAC,EAAE,OAAO;AAAA,EACrF,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ import { createModuleEvents } from "@open-mercato/shared/modules/events";
2
+ const events = [
3
+ { id: "ecommerce.store.created", label: "Store Created", entity: "store", category: "crud" },
4
+ { id: "ecommerce.store.updated", label: "Store Updated", entity: "store", category: "crud" },
5
+ { id: "ecommerce.store.deleted", label: "Store Deleted", entity: "store", category: "crud" },
6
+ { id: "ecommerce.store_domain_binding.created", label: "Store Domain Binding Created", entity: "store_domain_binding", category: "crud" },
7
+ { id: "ecommerce.store_domain_binding.updated", label: "Store Domain Binding Updated", entity: "store_domain_binding", category: "crud" },
8
+ { id: "ecommerce.store_domain_binding.deleted", label: "Store Domain Binding Deleted", entity: "store_domain_binding", category: "crud" },
9
+ { id: "ecommerce.store_channel_binding.created", label: "Store Channel Binding Created", entity: "store_channel_binding", category: "crud" },
10
+ { id: "ecommerce.store_channel_binding.updated", label: "Store Channel Binding Updated", entity: "store_channel_binding", category: "crud" },
11
+ { id: "ecommerce.store_channel_binding.deleted", label: "Store Channel Binding Deleted", entity: "store_channel_binding", category: "crud" },
12
+ { id: "ecommerce.store.branding_updated", label: "Store Branding Updated", entity: "store", category: "crud" },
13
+ { id: "ecommerce.store.misconfigured", label: "Store Misconfigured", entity: "store", category: "lifecycle" },
14
+ { id: "ecommerce.assortment.empty_detected", label: "Empty Store Assortment Detected", entity: "assortment", category: "lifecycle" }
15
+ ];
16
+ const eventsConfig = createModuleEvents({
17
+ moduleId: "ecommerce",
18
+ events
19
+ });
20
+ const emitEcommerceEvent = eventsConfig.emit;
21
+ var events_default = eventsConfig;
22
+ export {
23
+ events_default as default,
24
+ emitEcommerceEvent,
25
+ eventsConfig
26
+ };
27
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/ecommerce/events.ts"],
4
+ "sourcesContent": ["import { createModuleEvents } from '@open-mercato/shared/modules/events'\n\nconst events = [\n { id: 'ecommerce.store.created', label: 'Store Created', entity: 'store', category: 'crud' },\n { id: 'ecommerce.store.updated', label: 'Store Updated', entity: 'store', category: 'crud' },\n { id: 'ecommerce.store.deleted', label: 'Store Deleted', entity: 'store', category: 'crud' },\n { id: 'ecommerce.store_domain_binding.created', label: 'Store Domain Binding Created', entity: 'store_domain_binding', category: 'crud' },\n { id: 'ecommerce.store_domain_binding.updated', label: 'Store Domain Binding Updated', entity: 'store_domain_binding', category: 'crud' },\n { id: 'ecommerce.store_domain_binding.deleted', label: 'Store Domain Binding Deleted', entity: 'store_domain_binding', category: 'crud' },\n { id: 'ecommerce.store_channel_binding.created', label: 'Store Channel Binding Created', entity: 'store_channel_binding', category: 'crud' },\n { id: 'ecommerce.store_channel_binding.updated', label: 'Store Channel Binding Updated', entity: 'store_channel_binding', category: 'crud' },\n { id: 'ecommerce.store_channel_binding.deleted', label: 'Store Channel Binding Deleted', entity: 'store_channel_binding', category: 'crud' },\n { id: 'ecommerce.store.branding_updated', label: 'Store Branding Updated', entity: 'store', category: 'crud' },\n { id: 'ecommerce.store.misconfigured', label: 'Store Misconfigured', entity: 'store', category: 'lifecycle' },\n { id: 'ecommerce.assortment.empty_detected', label: 'Empty Store Assortment Detected', entity: 'assortment', category: 'lifecycle' },\n] as const\n\nexport const eventsConfig = createModuleEvents({\n moduleId: 'ecommerce',\n events,\n})\n\nexport const emitEcommerceEvent = eventsConfig.emit\n\nexport type EcommerceEventId = typeof events[number]['id']\n\nexport default eventsConfig\n"],
5
+ "mappings": "AAAA,SAAS,0BAA0B;AAEnC,MAAM,SAAS;AAAA,EACb,EAAE,IAAI,2BAA2B,OAAO,iBAAiB,QAAQ,SAAS,UAAU,OAAO;AAAA,EAC3F,EAAE,IAAI,2BAA2B,OAAO,iBAAiB,QAAQ,SAAS,UAAU,OAAO;AAAA,EAC3F,EAAE,IAAI,2BAA2B,OAAO,iBAAiB,QAAQ,SAAS,UAAU,OAAO;AAAA,EAC3F,EAAE,IAAI,0CAA0C,OAAO,gCAAgC,QAAQ,wBAAwB,UAAU,OAAO;AAAA,EACxI,EAAE,IAAI,0CAA0C,OAAO,gCAAgC,QAAQ,wBAAwB,UAAU,OAAO;AAAA,EACxI,EAAE,IAAI,0CAA0C,OAAO,gCAAgC,QAAQ,wBAAwB,UAAU,OAAO;AAAA,EACxI,EAAE,IAAI,2CAA2C,OAAO,iCAAiC,QAAQ,yBAAyB,UAAU,OAAO;AAAA,EAC3I,EAAE,IAAI,2CAA2C,OAAO,iCAAiC,QAAQ,yBAAyB,UAAU,OAAO;AAAA,EAC3I,EAAE,IAAI,2CAA2C,OAAO,iCAAiC,QAAQ,yBAAyB,UAAU,OAAO;AAAA,EAC3I,EAAE,IAAI,oCAAoC,OAAO,0BAA0B,QAAQ,SAAS,UAAU,OAAO;AAAA,EAC7G,EAAE,IAAI,iCAAiC,OAAO,uBAAuB,QAAQ,SAAS,UAAU,YAAY;AAAA,EAC5G,EAAE,IAAI,uCAAuC,OAAO,mCAAmC,QAAQ,cAAc,UAAU,YAAY;AACrI;AAEO,MAAM,eAAe,mBAAmB;AAAA,EAC7C,UAAU;AAAA,EACV;AACF,CAAC;AAEM,MAAM,qBAAqB,aAAa;AAI/C,IAAO,iBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ const metadata = {
2
+ name: "ecommerce",
3
+ title: "Ecommerce Stores",
4
+ version: "0.1.0",
5
+ description: "Storefront definition, hostname and sales-channel binding, buyer-context resolution and per-store branding for the public storefront API.",
6
+ author: "Open Mercato Team",
7
+ license: "MIT",
8
+ ejectable: true,
9
+ requires: ["catalog", "sales", "customer_accounts", "customer_groups"]
10
+ };
11
+ import { features } from "./acl.js";
12
+ export {
13
+ features,
14
+ metadata
15
+ };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/ecommerce/index.ts"],
4
+ "sourcesContent": ["import type { ModuleInfo } from '@open-mercato/shared/modules/registry'\n\nexport const metadata: ModuleInfo = {\n name: 'ecommerce',\n title: 'Ecommerce Stores',\n version: '0.1.0',\n description: 'Storefront definition, hostname and sales-channel binding, buyer-context resolution and per-store branding for the public storefront API.',\n author: 'Open Mercato Team',\n license: 'MIT',\n ejectable: true,\n requires: ['catalog', 'sales', 'customer_accounts', 'customer_groups'],\n}\n\nexport { features } from './acl'\n"],
5
+ "mappings": "AAEO,MAAM,WAAuB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU,CAAC,WAAW,SAAS,qBAAqB,iBAAiB;AACvE;AAEA,SAAS,gBAAgB;",
6
+ "names": []
7
+ }