@mohasinac/appkit 4.57.0 → 4.59.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.
Files changed (574) hide show
  1. package/dist/.build-stamp.json +4 -4
  2. package/dist/_internal/server/features/beys/data.d.ts +44 -0
  3. package/dist/_internal/server/features/beys/data.js +107 -0
  4. package/dist/_internal/server/features/beys/og.d.ts +42 -0
  5. package/dist/_internal/server/features/beys/og.js +89 -0
  6. package/dist/_internal/server/features/parts/data.js +3 -2
  7. package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
  8. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  9. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  10. package/dist/_internal/shared/actions/action-registry.js +86 -0
  11. package/dist/_internal/shared/types/base-document.d.ts +1 -1
  12. package/dist/client.d.ts +2 -0
  13. package/dist/client.js +1 -0
  14. package/dist/constants/api-endpoints.d.ts +12 -0
  15. package/dist/constants/api-endpoints.js +10 -0
  16. package/dist/constants/field-names.d.ts +46 -0
  17. package/dist/constants/field-names.js +46 -0
  18. package/dist/constants/seed-meta.d.ts +113 -0
  19. package/dist/constants/seed-meta.js +91 -0
  20. package/dist/features/admin/components/AdminBeysView.d.ts +27 -0
  21. package/dist/features/admin/components/AdminBeysView.js +178 -0
  22. package/dist/features/admin/components/AdminPartsView.d.ts +27 -0
  23. package/dist/features/admin/components/AdminPartsView.js +160 -0
  24. package/dist/features/admin/components/OwnerQuickActions.d.ts +19 -2
  25. package/dist/features/admin/components/OwnerQuickActions.js +31 -3
  26. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +31 -0
  27. package/dist/features/admin/components/RecordOwnerQuickActions.js +128 -0
  28. package/dist/features/admin/components/ReferenceRecordEditor.d.ts +45 -0
  29. package/dist/features/admin/components/ReferenceRecordEditor.js +153 -0
  30. package/dist/features/admin/schemas/firestore.d.ts +1 -1
  31. package/dist/features/auctions/components/MarketplaceAuctionCard.js +15 -2
  32. package/dist/features/auth/permissions/constants.d.ts +1 -1
  33. package/dist/features/auth/permissions/constants.js +12 -1
  34. package/dist/features/beys/components/BeyDetailPageView.d.ts +50 -0
  35. package/dist/features/beys/components/BeyDetailPageView.js +98 -0
  36. package/dist/features/beys/schemas/firestore.d.ts +417 -0
  37. package/dist/features/beys/schemas/firestore.js +65 -0
  38. package/dist/features/blog/components/BlogFeaturedCard.js +15 -2
  39. package/dist/features/blog/components/BlogPostView.js +2 -2
  40. package/dist/features/categories/components/BrandDetailPageView.js +4 -2
  41. package/dist/features/categories/components/BundleDetailView.js +2 -2
  42. package/dist/features/categories/components/CategoryDetailPageView.js +36 -3
  43. package/dist/features/categories/components/CategoryGrid.js +24 -2
  44. package/dist/features/categories/components/FranchiseDetailPageView.js +2 -3
  45. package/dist/features/events/components/EventCard.js +15 -2
  46. package/dist/features/grouped/components/GroupedListingDetailView.js +2 -3
  47. package/dist/features/homepage/components/CustomCardsSection.js +67 -50
  48. package/dist/features/homepage/components/ShopByCategorySection.js +23 -10
  49. package/dist/features/homepage/schemas/index.d.ts +10 -10
  50. package/dist/features/parts/components/PartDetailPageView.js +5 -3
  51. package/dist/features/parts/components/PartsSearchBox.js +79 -4
  52. package/dist/features/parts/schemas/admin-edit.d.ts +81 -0
  53. package/dist/features/parts/schemas/admin-edit.js +89 -0
  54. package/dist/features/parts/schemas/firestore.d.ts +2 -1
  55. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +15 -2
  56. package/dist/features/products/components/MarketplaceBundleCard.js +15 -2
  57. package/dist/features/products/components/MarketplacePrizeDrawCard.js +15 -2
  58. package/dist/features/products/components/ProductGrid.js +18 -2
  59. package/dist/features/products/schemas/firestore.d.ts +18 -0
  60. package/dist/features/seller/components/CategoryInlineSelect.d.ts +10 -1
  61. package/dist/features/seller/components/CategoryInlineSelect.js +53 -5
  62. package/dist/features/seller/components/SellerProductShell.d.ts +39 -0
  63. package/dist/features/seller/components/SellerProductShell.js +31 -3
  64. package/dist/index.d.ts +6 -129
  65. package/dist/index.js +61 -292
  66. package/dist/next/routing/route-map.d.ts +13 -1
  67. package/dist/next/routing/route-map.js +37 -0
  68. package/dist/schemas/registry.d.ts +6 -6
  69. package/dist/server.d.ts +2 -69
  70. package/dist/server.js +8 -69
  71. package/dist/styles.css +468 -1
  72. package/dist/tailwind-utilities.css +1 -1
  73. package/dist/ui/components/PosterCard.d.ts +99 -0
  74. package/dist/ui/components/PosterCard.js +109 -0
  75. package/dist/ui/components/PosterCard.style.css +466 -0
  76. package/dist/ui/components/index.style.css +1 -0
  77. package/dist/ui/index.d.ts +2 -0
  78. package/dist/ui/index.js +2 -0
  79. package/package.json +4 -2
  80. package/scripts/seed-cli.mjs +177 -2
  81. package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
  82. package/dist/features/tester/seed-data/_happy-path.js +0 -710
  83. package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
  84. package/dist/features/tester/seed-data/_money-flows.js +0 -610
  85. package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
  86. package/dist/features/tester/seed-data/authored/_types.js +0 -35
  87. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
  88. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
  89. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
  90. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
  91. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
  92. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
  93. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
  94. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
  95. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
  96. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
  97. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
  98. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
  99. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
  100. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
  101. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
  102. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
  103. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
  104. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
  105. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
  106. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
  107. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
  108. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
  109. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
  110. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
  111. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
  112. package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
  113. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
  114. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
  115. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
  116. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
  117. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
  118. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
  119. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
  120. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
  121. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
  122. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
  123. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
  124. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
  125. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
  126. package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
  127. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
  128. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
  129. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
  130. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
  131. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
  132. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
  133. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
  134. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
  135. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
  136. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
  137. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
  138. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
  139. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
  140. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
  141. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
  142. package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
  143. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
  144. package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
  145. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
  146. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
  147. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
  148. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
  149. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
  150. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
  151. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
  152. package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
  153. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
  154. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
  155. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
  156. package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
  157. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
  158. package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
  159. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
  160. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
  161. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
  162. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
  163. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
  164. package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
  165. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
  166. package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
  167. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
  168. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
  169. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
  170. package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
  171. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
  172. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
  173. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
  174. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
  175. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
  176. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
  177. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
  178. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
  179. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
  180. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
  181. package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
  182. package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
  183. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
  184. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
  185. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
  186. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
  187. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
  188. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
  189. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
  190. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
  191. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
  192. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
  193. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
  194. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
  195. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
  196. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
  197. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
  198. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
  199. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
  200. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
  201. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
  202. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
  203. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
  204. package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
  205. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
  206. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
  207. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
  208. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
  209. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
  210. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
  211. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
  212. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
  213. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
  214. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
  215. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
  216. package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
  217. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
  218. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
  219. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
  220. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
  221. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
  222. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
  223. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
  224. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
  225. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
  226. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
  227. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
  228. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
  229. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
  230. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
  231. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
  232. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
  233. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
  234. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
  235. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
  236. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
  237. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
  238. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
  239. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
  240. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
  241. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
  242. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
  243. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
  244. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
  245. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
  246. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
  247. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
  248. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
  249. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
  250. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
  251. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
  252. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
  253. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
  254. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
  255. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
  256. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
  257. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
  258. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
  259. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
  260. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
  261. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
  262. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
  263. package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
  264. package/dist/features/tester/seed-data/authored/index.js +0 -301
  265. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
  266. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
  267. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
  268. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
  269. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
  270. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
  271. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
  272. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
  273. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
  274. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
  275. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
  276. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
  277. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
  278. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
  279. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
  280. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
  281. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
  282. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
  283. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
  284. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
  285. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
  286. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
  287. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
  288. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
  289. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
  290. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
  291. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
  292. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
  293. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
  294. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
  295. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
  296. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
  297. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
  298. package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
  299. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
  300. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
  301. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
  302. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
  303. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
  304. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
  305. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
  306. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
  307. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
  308. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
  309. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
  310. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
  311. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
  312. package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
  313. package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
  314. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
  315. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
  316. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
  317. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
  318. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
  319. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
  320. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
  321. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
  322. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
  323. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
  324. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
  325. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
  326. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
  327. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
  328. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
  329. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
  330. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
  331. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
  332. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
  333. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
  334. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
  335. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
  336. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
  337. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
  338. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
  339. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
  340. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
  341. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
  342. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
  343. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
  344. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
  345. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
  346. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
  347. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
  348. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
  349. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
  350. package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
  351. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
  352. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
  353. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
  354. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
  355. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
  356. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
  357. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
  358. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
  359. package/dist/features/tester/seed-data/index.d.ts +0 -2
  360. package/dist/features/tester/seed-data/index.js +0 -2
  361. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
  362. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
  363. package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
  364. package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
  365. package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
  366. package/dist/features/tester/seed-data/tester-window.js +0 -66
  367. package/dist/seed/_helpers/brand-rows.d.ts +0 -35
  368. package/dist/seed/_helpers/brand-rows.js +0 -600
  369. package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
  370. package/dist/seed/_helpers/category-content-generated.js +0 -1853
  371. package/dist/seed/_helpers/category-content.d.ts +0 -68
  372. package/dist/seed/_helpers/category-content.js +0 -731
  373. package/dist/seed/_helpers/category-forest.d.ts +0 -4
  374. package/dist/seed/_helpers/category-forest.js +0 -824
  375. package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
  376. package/dist/seed/_helpers/category-images-generated.js +0 -618
  377. package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
  378. package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
  379. package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
  380. package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
  381. package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
  382. package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
  383. package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
  384. package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
  385. package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
  386. package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
  387. package/dist/seed/_helpers/category-models.d.ts +0 -12
  388. package/dist/seed/_helpers/category-models.js +0 -45
  389. package/dist/seed/_helpers/category-names.d.ts +0 -54
  390. package/dist/seed/_helpers/category-names.js +0 -118
  391. package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
  392. package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
  393. package/dist/seed/_helpers/category-parts.d.ts +0 -9
  394. package/dist/seed/_helpers/category-parts.js +0 -15022
  395. package/dist/seed/_helpers/category-tree.d.ts +0 -27
  396. package/dist/seed/_helpers/category-tree.js +0 -119
  397. package/dist/seed/_helpers/character-features.d.ts +0 -10
  398. package/dist/seed/_helpers/character-features.js +0 -120
  399. package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
  400. package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
  401. package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
  402. package/dist/seed/_helpers/franchise-rows.js +0 -189
  403. package/dist/seed/_helpers/media.d.ts +0 -67
  404. package/dist/seed/_helpers/media.js +0 -172
  405. package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
  406. package/dist/seed/_helpers/part-colours-generated.js +0 -273
  407. package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
  408. package/dist/seed/_helpers/product-search-txt.js +0 -23
  409. package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
  410. package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
  411. package/dist/seed/addresses-seed-data.d.ts +0 -2
  412. package/dist/seed/addresses-seed-data.js +0 -78
  413. package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
  414. package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
  415. package/dist/seed/bids-seed-data.d.ts +0 -2
  416. package/dist/seed/bids-seed-data.js +0 -206
  417. package/dist/seed/blog-posts-seed-data.d.ts +0 -6
  418. package/dist/seed/blog-posts-seed-data.js +0 -442
  419. package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
  420. package/dist/seed/carousel-slides-seed-data.js +0 -411
  421. package/dist/seed/carousels-seed-data.d.ts +0 -2
  422. package/dist/seed/carousels-seed-data.js +0 -36
  423. package/dist/seed/cart-seed-data.d.ts +0 -2
  424. package/dist/seed/cart-seed-data.js +0 -241
  425. package/dist/seed/catalogue-seed-data.d.ts +0 -2
  426. package/dist/seed/catalogue-seed-data.js +0 -112
  427. package/dist/seed/categories-seed-data.d.ts +0 -3
  428. package/dist/seed/categories-seed-data.js +0 -816
  429. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
  430. package/dist/seed/claimed-coupons-seed-data.js +0 -85
  431. package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
  432. package/dist/seed/coupon-usage-seed-data.js +0 -55
  433. package/dist/seed/coupons-seed-data.d.ts +0 -2
  434. package/dist/seed/coupons-seed-data.js +0 -226
  435. package/dist/seed/defaults/categories.d.ts +0 -2
  436. package/dist/seed/defaults/categories.js +0 -12
  437. package/dist/seed/defaults/faqs.d.ts +0 -2
  438. package/dist/seed/defaults/faqs.js +0 -40
  439. package/dist/seed/events-seed-data.d.ts +0 -7
  440. package/dist/seed/events-seed-data.js +0 -482
  441. package/dist/seed/factories/address.factory.d.ts +0 -21
  442. package/dist/seed/factories/address.factory.js +0 -44
  443. package/dist/seed/factories/bid.factory.d.ts +0 -15
  444. package/dist/seed/factories/bid.factory.js +0 -33
  445. package/dist/seed/factories/blog-post.factory.d.ts +0 -15
  446. package/dist/seed/factories/blog-post.factory.js +0 -22
  447. package/dist/seed/factories/carousel.factory.d.ts +0 -11
  448. package/dist/seed/factories/carousel.factory.js +0 -17
  449. package/dist/seed/factories/cart.factory.d.ts +0 -25
  450. package/dist/seed/factories/cart.factory.js +0 -35
  451. package/dist/seed/factories/category.factory.d.ts +0 -11
  452. package/dist/seed/factories/category.factory.js +0 -16
  453. package/dist/seed/factories/coupon.factory.d.ts +0 -21
  454. package/dist/seed/factories/coupon.factory.js +0 -43
  455. package/dist/seed/factories/faq.factory.d.ts +0 -10
  456. package/dist/seed/factories/faq.factory.js +0 -15
  457. package/dist/seed/factories/notification.factory.d.ts +0 -18
  458. package/dist/seed/factories/notification.factory.js +0 -39
  459. package/dist/seed/factories/order.factory.d.ts +0 -20
  460. package/dist/seed/factories/order.factory.js +0 -20
  461. package/dist/seed/factories/payout.factory.d.ts +0 -21
  462. package/dist/seed/factories/payout.factory.js +0 -38
  463. package/dist/seed/factories/product.factory.d.ts +0 -27
  464. package/dist/seed/factories/product.factory.js +0 -80
  465. package/dist/seed/factories/review.factory.d.ts +0 -14
  466. package/dist/seed/factories/review.factory.js +0 -52
  467. package/dist/seed/factories/session.factory.d.ts +0 -15
  468. package/dist/seed/factories/session.factory.js +0 -31
  469. package/dist/seed/factories/store.factory.d.ts +0 -23
  470. package/dist/seed/factories/store.factory.js +0 -47
  471. package/dist/seed/factories/user.factory.d.ts +0 -19
  472. package/dist/seed/factories/user.factory.js +0 -56
  473. package/dist/seed/faq-seed-data.d.ts +0 -18
  474. package/dist/seed/faq-seed-data.js +0 -1956
  475. package/dist/seed/firestore-indexes.d.ts +0 -12
  476. package/dist/seed/firestore-indexes.js +0 -31
  477. package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
  478. package/dist/seed/grouped-listings-seed-data.js +0 -283
  479. package/dist/seed/history-seed-data.d.ts +0 -12
  480. package/dist/seed/history-seed-data.js +0 -70
  481. package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
  482. package/dist/seed/homepage-sections-seed-data.js +0 -1018
  483. package/dist/seed/index.d.ts +0 -98
  484. package/dist/seed/index.js +0 -112
  485. package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
  486. package/dist/seed/lottery-entries-seed-data.js +0 -108
  487. package/dist/seed/manifest.d.ts +0 -16
  488. package/dist/seed/manifest.js +0 -235
  489. package/dist/seed/media-assets-seed-data.d.ts +0 -22
  490. package/dist/seed/media-assets-seed-data.js +0 -5593
  491. package/dist/seed/model-composition-seed-data.d.ts +0 -15
  492. package/dist/seed/model-composition-seed-data.js +0 -9032
  493. package/dist/seed/notifications-seed-data.d.ts +0 -2
  494. package/dist/seed/notifications-seed-data.js +0 -606
  495. package/dist/seed/offers-seed-data.d.ts +0 -2
  496. package/dist/seed/offers-seed-data.js +0 -398
  497. package/dist/seed/orders-seed-data.d.ts +0 -2
  498. package/dist/seed/orders-seed-data.js +0 -845
  499. package/dist/seed/part-glossary/chunk0.d.ts +0 -9
  500. package/dist/seed/part-glossary/chunk0.js +0 -35448
  501. package/dist/seed/part-glossary/chunk1.d.ts +0 -9
  502. package/dist/seed/part-glossary/chunk1.js +0 -40494
  503. package/dist/seed/part-glossary/chunk2.d.ts +0 -9
  504. package/dist/seed/part-glossary/chunk2.js +0 -51242
  505. package/dist/seed/part-glossary/chunk3.d.ts +0 -9
  506. package/dist/seed/part-glossary/chunk3.js +0 -53337
  507. package/dist/seed/part-glossary/chunk4.d.ts +0 -9
  508. package/dist/seed/part-glossary/chunk4.js +0 -51454
  509. package/dist/seed/part-glossary-seed-data.d.ts +0 -15
  510. package/dist/seed/part-glossary-seed-data.js +0 -25
  511. package/dist/seed/payouts-seed-data.d.ts +0 -2
  512. package/dist/seed/payouts-seed-data.js +0 -302
  513. package/dist/seed/product-features-seed-data.d.ts +0 -3
  514. package/dist/seed/product-features-seed-data.js +0 -366
  515. package/dist/seed/products-art-seed-data.d.ts +0 -2
  516. package/dist/seed/products-art-seed-data.js +0 -289
  517. package/dist/seed/products-auctions-seed-data.d.ts +0 -2
  518. package/dist/seed/products-auctions-seed-data.js +0 -475
  519. package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
  520. package/dist/seed/products-beyblade-x-seed-data.js +0 -476
  521. package/dist/seed/products-catalogue-seed-data.d.ts +0 -22
  522. package/dist/seed/products-catalogue-seed-data.js +0 -86384
  523. package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
  524. package/dist/seed/products-classifieds-seed-data.js +0 -435
  525. package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
  526. package/dist/seed/products-digital-codes-seed-data.js +0 -395
  527. package/dist/seed/products-live-items-seed-data.d.ts +0 -7
  528. package/dist/seed/products-live-items-seed-data.js +0 -269
  529. package/dist/seed/products-preorders-seed-data.d.ts +0 -2
  530. package/dist/seed/products-preorders-seed-data.js +0 -360
  531. package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
  532. package/dist/seed/products-prize-draws-seed-data.js +0 -427
  533. package/dist/seed/products-spares-seed-data.d.ts +0 -2
  534. package/dist/seed/products-spares-seed-data.js +0 -368
  535. package/dist/seed/products-standard-seed-data.d.ts +0 -2
  536. package/dist/seed/products-standard-seed-data.js +0 -632
  537. package/dist/seed/products-stickers-seed-data.d.ts +0 -2
  538. package/dist/seed/products-stickers-seed-data.js +0 -319
  539. package/dist/seed/reviews-seed-data.d.ts +0 -1
  540. package/dist/seed/reviews-seed-data.js +0 -185
  541. package/dist/seed/runner.d.ts +0 -2
  542. package/dist/seed/runner.js +0 -125
  543. package/dist/seed/scammers-seed-data.d.ts +0 -2
  544. package/dist/seed/scammers-seed-data.js +0 -235
  545. package/dist/seed/seed-market-config.d.ts +0 -48
  546. package/dist/seed/seed-market-config.js +0 -199
  547. package/dist/seed/seed-purpose.d.ts +0 -299
  548. package/dist/seed/seed-purpose.js +0 -431
  549. package/dist/seed/sessions-seed-data.d.ts +0 -3
  550. package/dist/seed/sessions-seed-data.js +0 -116
  551. package/dist/seed/shipments-seed-data.d.ts +0 -5
  552. package/dist/seed/shipments-seed-data.js +0 -185
  553. package/dist/seed/site-settings-seed-data.d.ts +0 -2
  554. package/dist/seed/site-settings-seed-data.js +0 -1069
  555. package/dist/seed/store-addresses-seed-data.d.ts +0 -18
  556. package/dist/seed/store-addresses-seed-data.js +0 -71
  557. package/dist/seed/store-extensions-seed-data.d.ts +0 -11
  558. package/dist/seed/store-extensions-seed-data.js +0 -292
  559. package/dist/seed/stores-seed-data.d.ts +0 -6
  560. package/dist/seed/stores-seed-data.js +0 -242
  561. package/dist/seed/support-tickets-seed-data.d.ts +0 -16
  562. package/dist/seed/support-tickets-seed-data.js +0 -239
  563. package/dist/seed/tax-codes-seed-data.d.ts +0 -34
  564. package/dist/seed/tax-codes-seed-data.js +0 -100
  565. package/dist/seed/test-data-ttl.d.ts +0 -29
  566. package/dist/seed/test-data-ttl.js +0 -31
  567. package/dist/seed/test-utils.d.ts +0 -49
  568. package/dist/seed/test-utils.js +0 -110
  569. package/dist/seed/types.d.ts +0 -89
  570. package/dist/seed/types.js +0 -15
  571. package/dist/seed/users-seed-data.d.ts +0 -2
  572. package/dist/seed/users-seed-data.js +0 -597
  573. package/dist/seed/wishlists-seed-data.d.ts +0 -12
  574. package/dist/seed/wishlists-seed-data.js +0 -54
@@ -1,27 +0,0 @@
1
- import type { CategoryDocument } from "../../features/categories/schemas";
2
- /** The authoring shape — only the fields a human should have to write. */
3
- export interface CategoryTreeNode {
4
- /** Doc id AND slug; they are always equal for categories (`id === slug`). */
5
- id: string;
6
- name: string;
7
- description: string;
8
- /** Per-row extras: display, seo, highlights, faqs, isFeatured, … */
9
- extra?: Partial<CategoryDocument>;
10
- children?: CategoryTreeNode[];
11
- }
12
- export interface BuildCategoryTreeOptions {
13
- createdBy: string;
14
- createdAt: Date;
15
- updatedAt: Date;
16
- /** Applied to every row unless the node's own `extra` overrides it. */
17
- defaults?: Partial<CategoryDocument>;
18
- }
19
- /**
20
- * Flatten a forest of nested nodes into seed rows with every structural field
21
- * computed.
22
- *
23
- * Traversal is DFS pre-order, and `position` is a single counter running across
24
- * ALL roots — the numbering is global to the collection, not per-tree, which is
25
- * what `onCategoryWrite`'s range shifting assumes.
26
- */
27
- export declare function buildCategoryTree(roots: CategoryTreeNode[], opts: BuildCategoryTreeOptions): Partial<CategoryDocument>[];
@@ -1,119 +0,0 @@
1
- /*
2
- * WHY: `CategoryDocument` requires nine interlocking structural fields on every
3
- * row — rootId, parentIds (the FULL ancestor chain), childrenIds, tier,
4
- * path, isLeaf, ancestors, position and subtreeSize. Hand-writing those
5
- * across a real tree guarantees mistakes, and the seed already had them:
6
- * the old root claimed `subtreeSize: 4` at `position: 0` while all four of
7
- * its children ALSO sat at positions 0-3, which is not a valid DFS
8
- * pre-order numbering.
9
- * WHAT: Declare the tree once as a nested literal; derive every structural
10
- * field from it. Purely deterministic — no Math.random, no Date.now — so
11
- * reseeding is idempotent (Root Cause #25).
12
- *
13
- * EXPORTS:
14
- * CategoryTreeNode — the authoring shape (id/name/... plus `children`)
15
- * buildCategoryTree — nested literal -> flat Partial<CategoryDocument>[]
16
- *
17
- * `position`/`subtreeSize` are DFS pre-order coordinates: a node's subtree
18
- * occupies exactly `[position, position + subtreeSize - 1]`, which is what lets
19
- * `onCategoryWrite` shift ranges on insert/delete. Seeding them correctly means
20
- * that Function has nothing to repair on first write.
21
- *
22
- * @tag domain:categories
23
- * @tag layer:seed
24
- * @tag pattern:derived
25
- * @tag access:server-only
26
- * @tag consumers:seed/categories-seed-data.ts
27
- * @tag sideEffects:none
28
- */
29
- /**
30
- * Flatten a forest of nested nodes into seed rows with every structural field
31
- * computed.
32
- *
33
- * Traversal is DFS pre-order, and `position` is a single counter running across
34
- * ALL roots — the numbering is global to the collection, not per-tree, which is
35
- * what `onCategoryWrite`'s range shifting assumes.
36
- */
37
- export function buildCategoryTree(roots, opts) {
38
- const rows = [];
39
- /*
40
- * 🛑 1-BASED, and that is not cosmetic — it must match `positionsReconcile`,
41
- * which starts its own DFS at `let counter = 1`.
42
- *
43
- * This counter started at 0 until 2026-10-10. The nightly reconcile then
44
- * found every row off by one (`current.position !== position`) and rewrote
45
- * the entire collection on the first run after any reseed — 58 writes then,
46
- * ~330 once the catalogue grows, each re-entering `onCategoryWrite` as a
47
- * no-op invocation. Measured in production before the change: seed emits
48
- * 0..57, live data reads 1..58, i.e. the reconcile had already corrected
49
- * all of it.
50
- *
51
- * It also makes position 0 UNAMBIGUOUS, which `handleCategoryWrite` now
52
- * relies on: a document arriving with `position >= 1` was numbered by this
53
- * builder, and one with 0/absent was not.
54
- */
55
- let position = 1;
56
- function visit(node, rootId,
57
- /** Ancestors nearest-last, matching how `parentIds` is read elsewhere. */
58
- ancestors, tier, parentPath, order) {
59
- const myPosition = position++;
60
- // The slug segment is the id minus its `category-` prefix, so
61
- // `spinning-tops/beyblade-burst/burst-parts` reads as a real path.
62
- const segment = node.id.replace(/^category-/, "");
63
- const path = parentPath ? `${parentPath}/${segment}` : segment;
64
- const children = node.children ?? [];
65
- // `seo` and `display` are REQUIRED on CategoryDocument, so synthesise
66
- // sensible ones rather than make every row hand-write a block. A node that
67
- // wants a real icon/cover/keywords overrides via `extra`, which is spread
68
- // last.
69
- const seo = {
70
- title: `${node.name} | LetItRip`,
71
- description: node.description,
72
- keywords: node.name.toLowerCase().split(/\s+/).filter(Boolean),
73
- };
74
- const display = {
75
- // Deeper rows are navigational, not menu-worthy: showing all four tiers
76
- // in the header menu would drown it.
77
- showInMenu: tier <= 1,
78
- showInFooter: false,
79
- };
80
- const row = {
81
- ...opts.defaults,
82
- seo,
83
- display,
84
- id: node.id,
85
- slug: node.id,
86
- name: node.name,
87
- description: node.description,
88
- rootId,
89
- parentIds: ancestors.map((a) => a.id),
90
- childrenIds: children.map((c) => c.id),
91
- ancestors: ancestors.map((a) => ({ ...a })),
92
- tier,
93
- path,
94
- order,
95
- isLeaf: children.length === 0,
96
- position: myPosition,
97
- createdBy: opts.createdBy,
98
- createdAt: opts.createdAt,
99
- updatedAt: opts.updatedAt,
100
- ...node.extra,
101
- };
102
- rows.push(row);
103
- const nextAncestors = [
104
- ...ancestors,
105
- { id: node.id, name: node.name, tier },
106
- ];
107
- let descendants = 0;
108
- children.forEach((child, index) => {
109
- descendants += visit(child, rootId, nextAncestors, tier + 1, path, index + 1);
110
- });
111
- // A node's subtree spans itself plus everything beneath it.
112
- row.subtreeSize = descendants + 1;
113
- return row.subtreeSize;
114
- }
115
- for (const [index, root] of roots.entries()) {
116
- visit(root, root.id, [], 0, "", index + 1);
117
- }
118
- return rows;
119
- }
@@ -1,10 +0,0 @@
1
- /** A blader, and how many canonical beys the corpus attributes to them. */
2
- export interface CharacterSeed {
3
- /** Without the `feature-` prefix — the factory prepends it. */
4
- slug: string;
5
- name: string;
6
- /** Canonical beys owned. Drives display order; not stored on the row. */
7
- beyCount: number;
8
- }
9
- export declare const CHARACTER_SEEDS: CharacterSeed[];
10
- export declare const CHARACTER_SEED_COUNT = 95;
@@ -1,120 +0,0 @@
1
- /*
2
- * GENERATED by scripts/gen-category-models.mjs — do not edit by hand.
3
- *
4
- * WHY: the clickable owner linkage. `Owner (Anime)` is 100% populated in the
5
- * corpus but it is a SENTENCE — "Tyson Granger (Tyson's 9th and final
6
- * bey)" — so it renders as prose and filters nothing. These are the
7
- * normalised names as `character`-group features, which makes
8
- * "show me every Tyson Granger bey" one click from any listing page.
9
- *
10
- * 🛑 A FEATURE and never a category node. A blader crosses every generation —
11
- * Tyson owns nine beys spanning Spin Gear, Magnacore, Engine Gear and HMS —
12
- * so a tree node would duplicate all nine under a second parent and break
13
- * the one-chain-per-product invariant. As a feature it COMPOSES with the
14
- * generation tree instead of competing with it: browse Beyblade Original,
15
- * then narrow to Tyson's.
16
- *
17
- * @tag domain:products
18
- * @tag layer:seed
19
- * @tag pattern:generated
20
- * @tag access:server-only
21
- * @tag sideEffects:none
22
- */
23
- export const CHARACTER_SEEDS = [
24
- { slug: "blader-tyson-granger", name: "Tyson Granger", beyCount: 9 },
25
- { slug: "blader-kai-hiwatari", name: "Kai Hiwatari", beyCount: 8 },
26
- { slug: "blader-shu-kurenai", name: "Shu Kurenai", beyCount: 7 },
27
- { slug: "blader-daichi-sumeragi", name: "Daichi Sumeragi", beyCount: 6 },
28
- { slug: "blader-max-tate", name: "Max Tate", beyCount: 6 },
29
- { slug: "blader-ray-kon", name: "Ray Kon", beyCount: 6 },
30
- { slug: "blader-gingka-hagane", name: "Gingka Hagane", beyCount: 5 },
31
- { slug: "blader-lui-shirosagi", name: "Lui Shirosagi", beyCount: 5 },
32
- { slug: "blader-tala", name: "Tala", beyCount: 5 },
33
- { slug: "blader-valt-aoi", name: "Valt Aoi", beyCount: 5 },
34
- { slug: "blader-free-de-la-hoya", name: "Free De La Hoya", beyCount: 4 },
35
- { slug: "blader-aiger-akabane", name: "Aiger Akabane", beyCount: 3 },
36
- { slug: "blader-dante-koryu", name: "Dante Koryu", beyCount: 3 },
37
- { slug: "blader-jaxon-cross", name: "Jaxon Cross", beyCount: 3 },
38
- { slug: "blader-kenta-yumiya", name: "Kenta Yumiya", beyCount: 3 },
39
- { slug: "blader-kyoya-tategami", name: "Kyoya Tategami", beyCount: 3 },
40
- { slug: "blader-multi-nana-iro", name: "Multi Nana-iro", beyCount: 3 },
41
- { slug: "blader-ryuga", name: "Ryuga", beyCount: 3 },
42
- { slug: "blader-benkei-hanawa", name: "Benkei Hanawa", beyCount: 2 },
43
- { slug: "blader-daigo-kurogami", name: "Daigo Kurogami", beyCount: 2 },
44
- { slug: "blader-damian-hart", name: "Damian Hart", beyCount: 2 },
45
- { slug: "blader-dashan-wang", name: "Dashan Wang", beyCount: 2 },
46
- { slug: "blader-delta-zakuro", name: "Delta Zakuro", beyCount: 2 },
47
- { slug: "blader-dunga", name: "Dunga", beyCount: 2 },
48
- { slug: "blader-eddy", name: "Eddy", beyCount: 2 },
49
- { slug: "blader-fumiya-kindo", name: "Fumiya Kindo", beyCount: 2 },
50
- { slug: "blader-hikaru-hizashi", name: "Hikaru Hizashi", beyCount: 2 },
51
- { slug: "blader-hyde", name: "Hyde", beyCount: 2 },
52
- { slug: "blader-jin-of-the-gale", name: "Jin of the Gale", beyCount: 2 },
53
- { slug: "blader-kira-hayama", name: "Kira Hayama", beyCount: 2 },
54
- { slug: "blader-lee", name: "Lee", beyCount: 2 },
55
- { slug: "blader-masamune-kadoya", name: "Masamune Kadoya", beyCount: 2 },
56
- { slug: "blader-michael-summers", name: "Michael Summers", beyCount: 2 },
57
- { slug: "blader-miguel", name: "Miguel", beyCount: 2 },
58
- { slug: "blader-ozuma", name: "Ozuma", beyCount: 2 },
59
- { slug: "blader-rago", name: "Rago", beyCount: 2 },
60
- { slug: "blader-robin-kazami", name: "Robin Kazami", beyCount: 2 },
61
- { slug: "blader-tsubasa-otori", name: "Tsubasa Otori", beyCount: 2 },
62
- { slug: "blader-wakiya-murasaki", name: "Wakiya Murasaki", beyCount: 2 },
63
- { slug: "blader-xander-shakadera", name: "Xander Shakadera", beyCount: 2 },
64
- { slug: "blader-yu-tendo", name: "Yu Tendo", beyCount: 2 },
65
- { slug: "blader-aguma", name: "Aguma", beyCount: 1 },
66
- { slug: "blader-akuya-onizaki", name: "Akuya Onizaki", beyCount: 1 },
67
- { slug: "blader-anime", name: "Anime", beyCount: 1 },
68
- { slug: "blader-anime-secondary", name: "Anime-secondary", beyCount: 1 },
69
- { slug: "blader-blader-dj", name: "Blader DJ", beyCount: 1 },
70
- { slug: "blader-brooklyn", name: "Brooklyn", beyCount: 1 },
71
- { slug: "blader-burn-fujiwara", name: "Burn Fujiwara", beyCount: 1 },
72
- { slug: "blader-chris", name: "Chris", beyCount: 1 },
73
- { slug: "blader-claude", name: "Claude", beyCount: 1 },
74
- { slug: "blader-clio-delon", name: "Clio Delon", beyCount: 1 },
75
- { slug: "blader-crusher", name: "Crusher", beyCount: 1 },
76
- { slug: "blader-cycnus", name: "Cycnus", beyCount: 1 },
77
- { slug: "blader-dan-sodo-and-reiki-sodo", name: "Dan Sodo and Reiki Sodo", beyCount: 1 },
78
- { slug: "blader-doji", name: "Doji", beyCount: 1 },
79
- { slug: "blader-faust", name: "Faust", beyCount: 1 },
80
- { slug: "blader-fubuki-sumiye", name: "Fubuki Sumiye", beyCount: 1 },
81
- { slug: "blader-garland-siebald", name: "Garland Siebald", beyCount: 1 },
82
- { slug: "blader-gary", name: "Gary", beyCount: 1 },
83
- { slug: "blader-ginro", name: "Ginro", beyCount: 1 },
84
- { slug: "blader-hikaru-hasama", name: "Hikaru Hasama", beyCount: 1 },
85
- { slug: "blader-hokuto", name: "Hokuto", beyCount: 1 },
86
- { slug: "blader-hyoma", name: "Hyoma", beyCount: 1 },
87
- { slug: "blader-hyuga-hizashi", name: "Hyuga Hizashi", beyCount: 1 },
88
- { slug: "blader-ian-papov", name: "Ian Papov", beyCount: 1 },
89
- { slug: "blader-johnny-mcgregor", name: "Johnny McGregor", beyCount: 1 },
90
- { slug: "blader-joseph-burton", name: "Joseph Burton", beyCount: 1 },
91
- { slug: "blader-julia-fernandez", name: "Julia Fernandez", beyCount: 1 },
92
- { slug: "blader-julian-konzern", name: "Julian Konzern", beyCount: 1 },
93
- { slug: "blader-karla-konjiki", name: "Karla Konjiki", beyCount: 1 },
94
- { slug: "blader-ken-midori", name: "Ken Midori", beyCount: 1 },
95
- { slug: "blader-kenny", name: "Kenny", beyCount: 1 },
96
- { slug: "blader-kevin", name: "Kevin", beyCount: 1 },
97
- { slug: "blader-kite-unabara", name: "Kite Unabara", beyCount: 1 },
98
- { slug: "blader-lain-valhalla", name: "Lain Valhalla", beyCount: 1 },
99
- { slug: "blader-meiko-myoden", name: "Meiko Myoden", beyCount: 1 },
100
- { slug: "blader-nile", name: "Nile", beyCount: 1 },
101
- { slug: "blader-nine-kurosu", name: "Nine Kurosu", beyCount: 1 },
102
- { slug: "blader-omega-shiroboshi", name: "Omega Shiroboshi", beyCount: 1 },
103
- { slug: "blader-phi", name: "Phi", beyCount: 1 },
104
- { slug: "blader-reiji-mizuchi", name: "Reiji Mizuchi", beyCount: 1 },
105
- { slug: "blader-reiyu-kuwabara", name: "Reiyu Kuwabara", beyCount: 1 },
106
- { slug: "blader-rex-jura", name: "Rex Jura", beyCount: 1 },
107
- { slug: "blader-rick-anderson", name: "Rick Anderson", beyCount: 1 },
108
- { slug: "blader-robert-jurgens", name: "Robert Jurgens", beyCount: 1 },
109
- { slug: "blader-sakyo-kurayami", name: "Sakyo Kurayami", beyCount: 1 },
110
- { slug: "blader-silas-karlisle", name: "Silas Karlisle", beyCount: 1 },
111
- { slug: "blader-spencer", name: "Spencer", beyCount: 1 },
112
- { slug: "blader-teru-saotome", name: "Teru Saotome", beyCount: 1 },
113
- { slug: "blader-tobio-oike", name: "Tobio Oike", beyCount: 1 },
114
- { slug: "blader-toby", name: "Toby", beyCount: 1 },
115
- { slug: "blader-toguro-okunaga", name: "Toguro Okunaga", beyCount: 1 },
116
- { slug: "blader-yuki-mizusawa", name: "Yuki Mizusawa", beyCount: 1 },
117
- { slug: "blader-yuni-naniwa", name: "Yuni Naniwa", beyCount: 1 },
118
- { slug: "blader-zyro-kurogane", name: "Zyro Kurogane", beyCount: 1 },
119
- ];
120
- export const CHARACTER_SEED_COUNT = 95;
@@ -1,35 +0,0 @@
1
- import type { ProductDocument } from "../../features/products/schemas";
2
- /**
3
- * Seeded listings that explicitly ACCEPT change-of-mind returns.
4
- *
5
- * `finalSale` is absent on every other fixture, and absent means final sale —
6
- * so the default path is exercised by the bulk of the catalogue exactly as it
7
- * will be in production, where the field did not exist until now and no
8
- * pre-existing document carries it.
9
- *
10
- * One per listing type, deliberately. The "Final Sale" badge and the refund
11
- * gate both branch on this, and a badge that renders identically on every row
12
- * proves nothing: without at least one opted-out fixture per type there is no
13
- * way to tell "the predicate works" from "the predicate returns a constant".
14
- * That is the same reason the availability work seeded one unavailable row per
15
- * type rather than trusting the shared checks.
16
- *
17
- * Ids are listed rather than a `finalSale: false` written inline at each
18
- * record because the records live in nine files with five different export
19
- * wrappers, and a per-record edit is invisible to review — this set can be
20
- * read in one glance and cross-checked against the badge.
21
- */
22
- export declare const RETURNABLE_FIXTURE_IDS: ReadonlySet<string>;
23
- /**
24
- * Set `finalSale: false` on the opted-out fixtures and leave it ABSENT on
25
- * every other record.
26
- *
27
- * Absent rather than `finalSale: true`, on purpose: writing the default
28
- * explicitly would mean the seed never produces the shape that production data
29
- * actually has, so `isFinalSale`'s handling of `undefined` — the only part of
30
- * it that can be got wrong — would go untested by the entire fixture set.
31
- *
32
- * Pure and deterministic, so it does not reintroduce the `appkit-seed`
33
- * idempotency problem of Root Cause #25.
34
- */
35
- export declare function withFinalSale(p: Partial<ProductDocument>): Partial<ProductDocument>;
@@ -1,61 +0,0 @@
1
- /**
2
- * Seeded listings that explicitly ACCEPT change-of-mind returns.
3
- *
4
- * `finalSale` is absent on every other fixture, and absent means final sale —
5
- * so the default path is exercised by the bulk of the catalogue exactly as it
6
- * will be in production, where the field did not exist until now and no
7
- * pre-existing document carries it.
8
- *
9
- * One per listing type, deliberately. The "Final Sale" badge and the refund
10
- * gate both branch on this, and a badge that renders identically on every row
11
- * proves nothing: without at least one opted-out fixture per type there is no
12
- * way to tell "the predicate works" from "the predicate returns a constant".
13
- * That is the same reason the availability work seeded one unavailable row per
14
- * type rather than trusting the shared checks.
15
- *
16
- * Ids are listed rather than a `finalSale: false` written inline at each
17
- * record because the records live in nine files with five different export
18
- * wrappers, and a per-record edit is invisible to review — this set can be
19
- * read in one glance and cross-checked against the badge.
20
- */
21
- export const RETURNABLE_FIXTURE_IDS = new Set([
22
- // standard
23
- "product-beyblade-burst-valkyrie",
24
- // auction
25
- "auction-beyblade-x-shark-edge",
26
- // pre-order
27
- "preorder-beyblade-x-bx-09-glide-ring",
28
- // prize-draw
29
- "prizedraw-beyblade-scheduled-demo",
30
- // classified
31
- "classified-beyblade-x-starter-pune",
32
- // digital-code
33
- "digitalcode-beyblade-x-app-legendary-pack",
34
- // live
35
- "live-bonsai-juniper-10yr",
36
- // art
37
- "art-valkyrie-holographic-print",
38
- // stickers
39
- "sticker-beyblade-x-holographic-pack",
40
- ]);
41
- /**
42
- * Set `finalSale: false` on the opted-out fixtures and leave it ABSENT on
43
- * every other record.
44
- *
45
- * Absent rather than `finalSale: true`, on purpose: writing the default
46
- * explicitly would mean the seed never produces the shape that production data
47
- * actually has, so `isFinalSale`'s handling of `undefined` — the only part of
48
- * it that can be got wrong — would go untested by the entire fixture set.
49
- *
50
- * Pure and deterministic, so it does not reintroduce the `appkit-seed`
51
- * idempotency problem of Root Cause #25.
52
- */
53
- export function withFinalSale(p) {
54
- // Spread FIRST so a record that sets `finalSale` itself keeps its own value;
55
- // this helper only fills in the opt-outs it owns.
56
- const next = { ...p };
57
- if (typeof next.finalSale === "undefined" && next.id && RETURNABLE_FIXTURE_IDS.has(next.id)) {
58
- next.finalSale = false;
59
- }
60
- return next;
61
- }
@@ -1,43 +0,0 @@
1
- import type { CategoryDocument } from "../../features/categories/schemas";
2
- export interface FranchiseSeedInput {
3
- /** Without the `franchise-` prefix. Products match on this, never the name. */
4
- slug: string;
5
- name: string;
6
- description: string;
7
- /** Live only when real stock exists — see the dead-facet rule above. */
8
- active: boolean;
9
- featured?: boolean;
10
- keywords: string[];
11
- seoDescription: string;
12
- }
13
- export declare function franchiseRow(input: FranchiseSeedInput, order: number, stamps: {
14
- createdBy: string;
15
- createdAt: Date;
16
- updatedAt: Date;
17
- }): Partial<CategoryDocument>;
18
- export declare function buildFranchiseRows(stamps: {
19
- createdBy: string;
20
- createdAt: Date;
21
- updatedAt: Date;
22
- }): Partial<CategoryDocument>[];
23
- export declare const FRANCHISE_ROW_COUNT: number;
24
- /** The slugs a product's `franchiseSlug` may point at. */
25
- export declare const FRANCHISE_SLUGS: readonly string[];
26
- /**
27
- * Category ROOT -> the franchise everything beneath it belongs to.
28
- *
29
- * Derived rather than stamped per product: a product already carries its full
30
- * ancestor chain, so the root is free and cannot drift from the taxonomy the
31
- * way a hand-written field would (Root Cause #42).
32
- *
33
- * 🛑 Deliberately PARTIAL. `category-living-collectibles` is absent because a
34
- * juniper bonsai and a leucistic axolotl are not from an IP — they are living
35
- * things. Mapping every root for completeness' sake would assert a franchise
36
- * that does not exist, and "no franchise" is the correct answer for 4 of the
37
- * 1,308 seeded products. A root with no entry yields no franchise, not a
38
- * fallback.
39
- */
40
- export declare const FRANCHISE_BY_CATEGORY_ROOT: Readonly<Record<string, {
41
- slug: string;
42
- name: string;
43
- }>>;
@@ -1,189 +0,0 @@
1
- /*
2
- * WHY: a product's BRAND is who made it (Takara-Tomy); its FRANCHISE is what
3
- * it is from (Beyblade). The site had no way to express the second, while
4
- * `CharacterHotspot` shipped eighteen `/franchise/*` links to a route that
5
- * did not exist. This is that unit, modelled on brands per the explicit
6
- * instruction — "like brands make franchise its own separate unit".
7
- *
8
- * WHAT: one factory plus eight declarations.
9
- *
10
- * EXPORTS:
11
- * FRANCHISE_ROWS — Partial<CategoryDocument>[], categoryType:"franchise"
12
- * FRANCHISE_ROW_COUNT — asserted by the seed so a silent drop is loud
13
- *
14
- * ── 🛑 THE DEAD-FACET RULE, AND HOW THESE OBEY IT ─────────────────────────
15
- *
16
- * `brand-rows.ts` trap 3 states it exactly: *"A brand row with no product is a
17
- * DEAD FACET, and worse than absent — it renders as a card in the grid that
18
- * opens an empty page."* Seven of the eight rows below have no stock today,
19
- * because this catalogue sells Beyblade.
20
- *
21
- * So they are seeded **`isActive: false`**. That is not a soft delete — the row
22
- * exists, it is editable in the admin category editor, its page resolves, and
23
- * `/franchise/marvel` stops being a 404. It is excluded from the grid and from
24
- * search until it has something to sell, at which point one flag flips.
25
- *
26
- * The alternative readings were both worse: omitting them leaves eighteen links
27
- * broken, and seeding them active puts seven empty shopfronts on a live grid.
28
- *
29
- * 🛑 `isActive` is therefore load-bearing here, not boilerplate. A future
30
- * franchise row should be `false` until a product carries its `franchiseSlug`.
31
- *
32
- * ── Why tier-0 and outside the forest ─────────────────────────────────────
33
- *
34
- * Same as brands: `position` is NOT set, because these live outside the
35
- * category forest's DFS numbering and a position inside it would corrupt the
36
- * ranges `onCategoryWrite` shifts on insert.
37
- *
38
- * @tag domain:categories
39
- * @tag layer:seed
40
- * @tag pattern:shared-literal
41
- * @tag access:server-only
42
- * @tag consumers:seed/categories-seed-data.ts
43
- * @tag sideEffects:none
44
- */
45
- /* 🛑 `constants/field-names`, NOT the schema copy — there are two
46
- * `CATEGORY_FIELDS` and only this one carries `CATEGORY_TYPE_VALUES`.
47
- * `categories-seed-data.ts` imports this one; matching it is what keeps the
48
- * discriminator a single spelling. Same reasoning as `brand-rows.ts`. */
49
- import { CATEGORY_FIELDS } from "../../constants/field-names.js";
50
- import { seedPhoto } from "./media.js";
51
- export function franchiseRow(input, order, stamps) {
52
- const id = `franchise-${input.slug}`;
53
- return {
54
- id,
55
- slug: id,
56
- name: input.name,
57
- categoryType: CATEGORY_FIELDS.CATEGORY_TYPE_VALUES.FRANCHISE,
58
- description: input.description,
59
- rootId: id,
60
- parentIds: [],
61
- childrenIds: [],
62
- ancestors: [],
63
- tier: 0,
64
- path: id,
65
- isLeaf: true,
66
- order,
67
- /*
68
- * A placeholder tile that a real wordmark OVERRIDES — same rule as
69
- * `brand-rows.ts`: `withGeneratedCoverImage` treats a `/images/seed-tiles/`
70
- * path as a default rather than a hand-authored decision. Only
71
- * `franchise-beyblade` resolves a real one today; the other seven are the
72
- * inactive dead-facet rows and keep the tile.
73
- *
74
- * `icon` stays unset — the brands grid reads `display.icon` first and an
75
- * emoji there would beat a real cover image (brand-rows trap 2).
76
- */
77
- display: {
78
- coverImage: seedPhoto(`franchise-cover-${input.slug}-20261014`, 800, 800),
79
- showInMenu: false,
80
- showInFooter: false,
81
- },
82
- isFeatured: input.featured ?? false,
83
- isActive: input.active,
84
- isSearchable: input.active,
85
- createdBy: stamps.createdBy,
86
- createdAt: stamps.createdAt,
87
- updatedAt: stamps.updatedAt,
88
- seo: {
89
- title: `${input.name} | LetItRip`,
90
- description: input.seoDescription,
91
- keywords: input.keywords,
92
- },
93
- };
94
- }
95
- /*
96
- * The eight. Beyblade is the catalogue; the other seven are the IPs
97
- * `CharacterHotspot` already links to, seeded inactive so those links resolve
98
- * without advertising an empty shop.
99
- */
100
- const INPUTS = [
101
- {
102
- slug: "beyblade",
103
- name: "Beyblade",
104
- description: "The spinning-top battling franchise — every generation from the original Spin Gear tops through Metal Fight, Burst and Beyblade X. Complete tops, loose parts, stadiums and accessories.",
105
- active: true,
106
- featured: true,
107
- keywords: ["beyblade", "spinning tops", "burst", "metal fight", "beyblade x"],
108
- seoDescription: "Shop Beyblade across every generation — tops, parts, stadiums and spares, new and pre-owned.",
109
- },
110
- {
111
- slug: "marvel",
112
- name: "Marvel",
113
- description: "Figures, collectibles and merchandise from the Marvel universe.",
114
- active: false,
115
- keywords: ["marvel", "comics", "superhero", "figures"],
116
- seoDescription: "Marvel collectibles and figures.",
117
- },
118
- {
119
- slug: "dc-comics",
120
- name: "DC Comics",
121
- description: "Figures, collectibles and merchandise from the DC universe.",
122
- active: false,
123
- keywords: ["dc", "dc comics", "superhero", "figures"],
124
- seoDescription: "DC Comics collectibles and figures.",
125
- },
126
- {
127
- slug: "dragon-ball",
128
- name: "Dragon Ball",
129
- description: "Figures and collectibles from the Dragon Ball series.",
130
- active: false,
131
- keywords: ["dragon ball", "anime", "figures", "shonen"],
132
- seoDescription: "Dragon Ball collectibles and figures.",
133
- },
134
- {
135
- slug: "naruto",
136
- name: "Naruto",
137
- description: "Figures and collectibles from the Naruto series.",
138
- active: false,
139
- keywords: ["naruto", "anime", "figures", "shonen"],
140
- seoDescription: "Naruto collectibles and figures.",
141
- },
142
- {
143
- slug: "bleach",
144
- name: "Bleach",
145
- description: "Figures and collectibles from the Bleach series.",
146
- active: false,
147
- keywords: ["bleach", "anime", "figures", "shonen"],
148
- seoDescription: "Bleach collectibles and figures.",
149
- },
150
- {
151
- slug: "one-piece",
152
- name: "One Piece",
153
- description: "Figures and collectibles from the One Piece series.",
154
- active: false,
155
- keywords: ["one piece", "anime", "figures", "shonen"],
156
- seoDescription: "One Piece collectibles and figures.",
157
- },
158
- {
159
- slug: "one-punch-man",
160
- name: "One Punch Man",
161
- description: "Figures and collectibles from the One Punch Man series.",
162
- active: false,
163
- keywords: ["one punch man", "anime", "figures"],
164
- seoDescription: "One Punch Man collectibles and figures.",
165
- },
166
- ];
167
- export function buildFranchiseRows(stamps) {
168
- return INPUTS.map((input, i) => franchiseRow(input, i + 1, stamps));
169
- }
170
- export const FRANCHISE_ROW_COUNT = INPUTS.length;
171
- /** The slugs a product's `franchiseSlug` may point at. */
172
- export const FRANCHISE_SLUGS = INPUTS.map((i) => `franchise-${i.slug}`);
173
- /**
174
- * Category ROOT -> the franchise everything beneath it belongs to.
175
- *
176
- * Derived rather than stamped per product: a product already carries its full
177
- * ancestor chain, so the root is free and cannot drift from the taxonomy the
178
- * way a hand-written field would (Root Cause #42).
179
- *
180
- * 🛑 Deliberately PARTIAL. `category-living-collectibles` is absent because a
181
- * juniper bonsai and a leucistic axolotl are not from an IP — they are living
182
- * things. Mapping every root for completeness' sake would assert a franchise
183
- * that does not exist, and "no franchise" is the correct answer for 4 of the
184
- * 1,308 seeded products. A root with no entry yields no franchise, not a
185
- * fallback.
186
- */
187
- export const FRANCHISE_BY_CATEGORY_ROOT = {
188
- "category-spinning-tops": { slug: "franchise-beyblade", name: "Beyblade" },
189
- };