@mohasinac/appkit 4.58.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 (556) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
  3. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  4. package/dist/_internal/shared/types/base-document.d.ts +1 -1
  5. package/dist/constants/seed-meta.d.ts +113 -0
  6. package/dist/constants/seed-meta.js +91 -0
  7. package/dist/index.d.ts +0 -131
  8. package/dist/index.js +50 -294
  9. package/dist/server.d.ts +0 -69
  10. package/dist/server.js +0 -69
  11. package/package.json +4 -2
  12. package/scripts/seed-cli.mjs +69 -1
  13. package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
  14. package/dist/features/tester/seed-data/_happy-path.js +0 -710
  15. package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
  16. package/dist/features/tester/seed-data/_money-flows.js +0 -610
  17. package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
  18. package/dist/features/tester/seed-data/authored/_types.js +0 -35
  19. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
  20. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
  21. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
  22. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
  23. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
  24. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
  25. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
  26. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
  27. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
  28. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
  29. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
  30. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
  31. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
  32. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
  33. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
  34. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
  35. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
  36. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
  37. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
  38. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
  39. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
  40. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
  41. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
  42. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
  43. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
  44. package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
  45. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
  46. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
  47. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
  48. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
  49. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
  50. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
  51. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
  52. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
  53. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
  54. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
  55. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
  56. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
  57. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
  58. package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
  59. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
  60. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
  61. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
  62. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
  63. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
  64. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
  65. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
  66. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
  67. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
  68. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
  69. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
  70. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
  71. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
  72. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
  73. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
  74. package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
  75. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
  76. package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
  77. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
  78. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
  79. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
  80. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
  81. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
  82. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
  83. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
  84. package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
  85. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
  86. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
  87. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
  88. package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
  89. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
  90. package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
  91. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
  92. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
  93. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
  94. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
  95. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
  96. package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
  97. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
  98. package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
  99. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
  100. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
  101. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
  102. package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
  103. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
  104. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
  105. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
  106. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
  107. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
  108. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
  109. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
  110. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
  111. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
  112. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
  113. package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
  114. package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
  115. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
  116. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
  117. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
  118. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
  119. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
  120. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
  121. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
  122. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
  123. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
  124. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
  125. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
  126. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
  127. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
  128. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
  129. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
  130. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
  131. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
  132. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
  133. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
  134. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
  135. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
  136. package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
  137. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
  138. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
  139. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
  140. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
  141. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
  142. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
  143. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
  144. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
  145. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
  146. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
  147. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
  148. package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
  149. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
  150. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
  151. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
  152. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
  153. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
  154. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
  155. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
  156. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
  157. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
  158. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
  159. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
  160. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
  161. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
  162. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
  163. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
  164. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
  165. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
  166. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
  167. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
  168. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
  169. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
  170. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
  171. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
  172. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
  173. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
  174. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
  175. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
  176. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
  177. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
  178. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
  179. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
  180. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
  181. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
  182. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
  183. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
  184. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
  185. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
  186. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
  187. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
  188. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
  189. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
  190. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
  191. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
  192. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
  193. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
  194. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
  195. package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
  196. package/dist/features/tester/seed-data/authored/index.js +0 -301
  197. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
  198. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
  199. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
  200. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
  201. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
  202. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
  203. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
  204. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
  205. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
  206. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
  207. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
  208. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
  209. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
  210. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
  211. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
  212. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
  213. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
  214. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
  215. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
  216. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
  217. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
  218. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
  219. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
  220. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
  221. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
  222. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
  223. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
  224. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
  225. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
  226. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
  227. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
  228. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
  229. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
  230. package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
  231. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
  232. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
  233. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
  234. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
  235. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
  236. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
  237. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
  238. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
  239. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
  240. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
  241. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
  242. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
  243. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
  244. package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
  245. package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
  246. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
  247. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
  248. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
  249. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
  250. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
  251. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
  252. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
  253. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
  254. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
  255. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
  256. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
  257. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
  258. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
  259. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
  260. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
  261. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
  262. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
  263. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
  264. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
  265. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
  266. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
  267. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
  268. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
  269. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
  270. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
  271. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
  272. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
  273. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
  274. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
  275. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
  276. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
  277. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
  278. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
  279. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
  280. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
  281. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
  282. package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
  283. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
  284. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
  285. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
  286. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
  287. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
  288. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
  289. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
  290. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
  291. package/dist/features/tester/seed-data/index.d.ts +0 -2
  292. package/dist/features/tester/seed-data/index.js +0 -2
  293. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
  294. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
  295. package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
  296. package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
  297. package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
  298. package/dist/features/tester/seed-data/tester-window.js +0 -66
  299. package/dist/seed/_helpers/brand-rows.d.ts +0 -35
  300. package/dist/seed/_helpers/brand-rows.js +0 -600
  301. package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
  302. package/dist/seed/_helpers/category-content-generated.js +0 -1853
  303. package/dist/seed/_helpers/category-content.d.ts +0 -68
  304. package/dist/seed/_helpers/category-content.js +0 -731
  305. package/dist/seed/_helpers/category-forest.d.ts +0 -4
  306. package/dist/seed/_helpers/category-forest.js +0 -824
  307. package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
  308. package/dist/seed/_helpers/category-images-generated.js +0 -618
  309. package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
  310. package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
  311. package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
  312. package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
  313. package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
  314. package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
  315. package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
  316. package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
  317. package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
  318. package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
  319. package/dist/seed/_helpers/category-models.d.ts +0 -12
  320. package/dist/seed/_helpers/category-models.js +0 -45
  321. package/dist/seed/_helpers/category-names.d.ts +0 -54
  322. package/dist/seed/_helpers/category-names.js +0 -118
  323. package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
  324. package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
  325. package/dist/seed/_helpers/category-parts.d.ts +0 -9
  326. package/dist/seed/_helpers/category-parts.js +0 -15022
  327. package/dist/seed/_helpers/category-tree.d.ts +0 -27
  328. package/dist/seed/_helpers/category-tree.js +0 -119
  329. package/dist/seed/_helpers/character-features.d.ts +0 -10
  330. package/dist/seed/_helpers/character-features.js +0 -120
  331. package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
  332. package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
  333. package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
  334. package/dist/seed/_helpers/franchise-rows.js +0 -189
  335. package/dist/seed/_helpers/media.d.ts +0 -67
  336. package/dist/seed/_helpers/media.js +0 -172
  337. package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
  338. package/dist/seed/_helpers/part-colours-generated.js +0 -273
  339. package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
  340. package/dist/seed/_helpers/product-search-txt.js +0 -23
  341. package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
  342. package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
  343. package/dist/seed/addresses-seed-data.d.ts +0 -2
  344. package/dist/seed/addresses-seed-data.js +0 -78
  345. package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
  346. package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
  347. package/dist/seed/bey-products-seed-data.d.ts +0 -18
  348. package/dist/seed/bey-products-seed-data.js +0 -18011
  349. package/dist/seed/beys/chunk0.d.ts +0 -17
  350. package/dist/seed/beys/chunk0.js +0 -36733
  351. package/dist/seed/beys/chunk1.d.ts +0 -17
  352. package/dist/seed/beys/chunk1.js +0 -35728
  353. package/dist/seed/beys/chunk2.d.ts +0 -17
  354. package/dist/seed/beys/chunk2.js +0 -35857
  355. package/dist/seed/beys/chunk3.d.ts +0 -17
  356. package/dist/seed/beys/chunk3.js +0 -34476
  357. package/dist/seed/beys-seed-data.d.ts +0 -18
  358. package/dist/seed/beys-seed-data.js +0 -11
  359. package/dist/seed/bids-seed-data.d.ts +0 -2
  360. package/dist/seed/bids-seed-data.js +0 -206
  361. package/dist/seed/blog-posts-seed-data.d.ts +0 -6
  362. package/dist/seed/blog-posts-seed-data.js +0 -442
  363. package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
  364. package/dist/seed/carousel-slides-seed-data.js +0 -411
  365. package/dist/seed/carousels-seed-data.d.ts +0 -2
  366. package/dist/seed/carousels-seed-data.js +0 -36
  367. package/dist/seed/cart-seed-data.d.ts +0 -2
  368. package/dist/seed/cart-seed-data.js +0 -241
  369. package/dist/seed/catalogue-seed-data.d.ts +0 -2
  370. package/dist/seed/catalogue-seed-data.js +0 -112
  371. package/dist/seed/categories-seed-data.d.ts +0 -3
  372. package/dist/seed/categories-seed-data.js +0 -816
  373. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
  374. package/dist/seed/claimed-coupons-seed-data.js +0 -85
  375. package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
  376. package/dist/seed/coupon-usage-seed-data.js +0 -55
  377. package/dist/seed/coupons-seed-data.d.ts +0 -2
  378. package/dist/seed/coupons-seed-data.js +0 -226
  379. package/dist/seed/defaults/categories.d.ts +0 -2
  380. package/dist/seed/defaults/categories.js +0 -12
  381. package/dist/seed/defaults/faqs.d.ts +0 -2
  382. package/dist/seed/defaults/faqs.js +0 -40
  383. package/dist/seed/events-seed-data.d.ts +0 -7
  384. package/dist/seed/events-seed-data.js +0 -482
  385. package/dist/seed/factories/address.factory.d.ts +0 -21
  386. package/dist/seed/factories/address.factory.js +0 -44
  387. package/dist/seed/factories/bid.factory.d.ts +0 -15
  388. package/dist/seed/factories/bid.factory.js +0 -33
  389. package/dist/seed/factories/blog-post.factory.d.ts +0 -15
  390. package/dist/seed/factories/blog-post.factory.js +0 -22
  391. package/dist/seed/factories/carousel.factory.d.ts +0 -11
  392. package/dist/seed/factories/carousel.factory.js +0 -17
  393. package/dist/seed/factories/cart.factory.d.ts +0 -25
  394. package/dist/seed/factories/cart.factory.js +0 -35
  395. package/dist/seed/factories/category.factory.d.ts +0 -11
  396. package/dist/seed/factories/category.factory.js +0 -16
  397. package/dist/seed/factories/coupon.factory.d.ts +0 -21
  398. package/dist/seed/factories/coupon.factory.js +0 -43
  399. package/dist/seed/factories/faq.factory.d.ts +0 -10
  400. package/dist/seed/factories/faq.factory.js +0 -15
  401. package/dist/seed/factories/notification.factory.d.ts +0 -18
  402. package/dist/seed/factories/notification.factory.js +0 -39
  403. package/dist/seed/factories/order.factory.d.ts +0 -20
  404. package/dist/seed/factories/order.factory.js +0 -20
  405. package/dist/seed/factories/payout.factory.d.ts +0 -21
  406. package/dist/seed/factories/payout.factory.js +0 -38
  407. package/dist/seed/factories/product.factory.d.ts +0 -27
  408. package/dist/seed/factories/product.factory.js +0 -80
  409. package/dist/seed/factories/review.factory.d.ts +0 -14
  410. package/dist/seed/factories/review.factory.js +0 -52
  411. package/dist/seed/factories/session.factory.d.ts +0 -15
  412. package/dist/seed/factories/session.factory.js +0 -31
  413. package/dist/seed/factories/store.factory.d.ts +0 -23
  414. package/dist/seed/factories/store.factory.js +0 -47
  415. package/dist/seed/factories/user.factory.d.ts +0 -19
  416. package/dist/seed/factories/user.factory.js +0 -56
  417. package/dist/seed/faq-seed-data.d.ts +0 -18
  418. package/dist/seed/faq-seed-data.js +0 -1956
  419. package/dist/seed/firestore-indexes.d.ts +0 -12
  420. package/dist/seed/firestore-indexes.js +0 -31
  421. package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
  422. package/dist/seed/grouped-listings-seed-data.js +0 -283
  423. package/dist/seed/history-seed-data.d.ts +0 -12
  424. package/dist/seed/history-seed-data.js +0 -70
  425. package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
  426. package/dist/seed/homepage-sections-seed-data.js +0 -1034
  427. package/dist/seed/index.d.ts +0 -100
  428. package/dist/seed/index.js +0 -115
  429. package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
  430. package/dist/seed/lottery-entries-seed-data.js +0 -108
  431. package/dist/seed/manifest.d.ts +0 -16
  432. package/dist/seed/manifest.js +0 -235
  433. package/dist/seed/media-assets-seed-data.d.ts +0 -22
  434. package/dist/seed/media-assets-seed-data.js +0 -5593
  435. package/dist/seed/model-composition-seed-data.d.ts +0 -15
  436. package/dist/seed/model-composition-seed-data.js +0 -9032
  437. package/dist/seed/notifications-seed-data.d.ts +0 -2
  438. package/dist/seed/notifications-seed-data.js +0 -606
  439. package/dist/seed/offers-seed-data.d.ts +0 -2
  440. package/dist/seed/offers-seed-data.js +0 -398
  441. package/dist/seed/orders-seed-data.d.ts +0 -2
  442. package/dist/seed/orders-seed-data.js +0 -845
  443. package/dist/seed/part-glossary/chunk0.d.ts +0 -9
  444. package/dist/seed/part-glossary/chunk0.js +0 -35448
  445. package/dist/seed/part-glossary/chunk1.d.ts +0 -9
  446. package/dist/seed/part-glossary/chunk1.js +0 -40494
  447. package/dist/seed/part-glossary/chunk2.d.ts +0 -9
  448. package/dist/seed/part-glossary/chunk2.js +0 -51242
  449. package/dist/seed/part-glossary/chunk3.d.ts +0 -9
  450. package/dist/seed/part-glossary/chunk3.js +0 -53337
  451. package/dist/seed/part-glossary/chunk4.d.ts +0 -9
  452. package/dist/seed/part-glossary/chunk4.js +0 -51454
  453. package/dist/seed/part-glossary-seed-data.d.ts +0 -15
  454. package/dist/seed/part-glossary-seed-data.js +0 -25
  455. package/dist/seed/payouts-seed-data.d.ts +0 -2
  456. package/dist/seed/payouts-seed-data.js +0 -302
  457. package/dist/seed/product-features-seed-data.d.ts +0 -3
  458. package/dist/seed/product-features-seed-data.js +0 -366
  459. package/dist/seed/products-art-seed-data.d.ts +0 -2
  460. package/dist/seed/products-art-seed-data.js +0 -289
  461. package/dist/seed/products-auctions-seed-data.d.ts +0 -2
  462. package/dist/seed/products-auctions-seed-data.js +0 -475
  463. package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
  464. package/dist/seed/products-beyblade-x-seed-data.js +0 -476
  465. package/dist/seed/products-catalogue/chunk0.d.ts +0 -12
  466. package/dist/seed/products-catalogue/chunk0.js +0 -7262
  467. package/dist/seed/products-catalogue/chunk1.d.ts +0 -12
  468. package/dist/seed/products-catalogue/chunk1.js +0 -7290
  469. package/dist/seed/products-catalogue/chunk10.d.ts +0 -12
  470. package/dist/seed/products-catalogue/chunk10.js +0 -7290
  471. package/dist/seed/products-catalogue/chunk11.d.ts +0 -12
  472. package/dist/seed/products-catalogue/chunk11.js +0 -7005
  473. package/dist/seed/products-catalogue/chunk12.d.ts +0 -12
  474. package/dist/seed/products-catalogue/chunk12.js +0 -7002
  475. package/dist/seed/products-catalogue/chunk13.d.ts +0 -12
  476. package/dist/seed/products-catalogue/chunk13.js +0 -7002
  477. package/dist/seed/products-catalogue/chunk14.d.ts +0 -12
  478. package/dist/seed/products-catalogue/chunk14.js +0 -7002
  479. package/dist/seed/products-catalogue/chunk15.d.ts +0 -12
  480. package/dist/seed/products-catalogue/chunk15.js +0 -7002
  481. package/dist/seed/products-catalogue/chunk16.d.ts +0 -12
  482. package/dist/seed/products-catalogue/chunk16.js +0 -7002
  483. package/dist/seed/products-catalogue/chunk17.d.ts +0 -12
  484. package/dist/seed/products-catalogue/chunk17.js +0 -7002
  485. package/dist/seed/products-catalogue/chunk18.d.ts +0 -12
  486. package/dist/seed/products-catalogue/chunk18.js +0 -4398
  487. package/dist/seed/products-catalogue/chunk2.d.ts +0 -12
  488. package/dist/seed/products-catalogue/chunk2.js +0 -7268
  489. package/dist/seed/products-catalogue/chunk3.d.ts +0 -12
  490. package/dist/seed/products-catalogue/chunk3.js +0 -7264
  491. package/dist/seed/products-catalogue/chunk4.d.ts +0 -12
  492. package/dist/seed/products-catalogue/chunk4.js +0 -7268
  493. package/dist/seed/products-catalogue/chunk5.d.ts +0 -12
  494. package/dist/seed/products-catalogue/chunk5.js +0 -7258
  495. package/dist/seed/products-catalogue/chunk6.d.ts +0 -12
  496. package/dist/seed/products-catalogue/chunk6.js +0 -7268
  497. package/dist/seed/products-catalogue/chunk7.d.ts +0 -12
  498. package/dist/seed/products-catalogue/chunk7.js +0 -7311
  499. package/dist/seed/products-catalogue/chunk8.d.ts +0 -12
  500. package/dist/seed/products-catalogue/chunk8.js +0 -7304
  501. package/dist/seed/products-catalogue/chunk9.d.ts +0 -12
  502. package/dist/seed/products-catalogue/chunk9.js +0 -7309
  503. package/dist/seed/products-catalogue-seed-data.d.ts +0 -2
  504. package/dist/seed/products-catalogue-seed-data.js +0 -60
  505. package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
  506. package/dist/seed/products-classifieds-seed-data.js +0 -435
  507. package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
  508. package/dist/seed/products-digital-codes-seed-data.js +0 -395
  509. package/dist/seed/products-live-items-seed-data.d.ts +0 -7
  510. package/dist/seed/products-live-items-seed-data.js +0 -269
  511. package/dist/seed/products-preorders-seed-data.d.ts +0 -2
  512. package/dist/seed/products-preorders-seed-data.js +0 -360
  513. package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
  514. package/dist/seed/products-prize-draws-seed-data.js +0 -427
  515. package/dist/seed/products-spares-seed-data.d.ts +0 -2
  516. package/dist/seed/products-spares-seed-data.js +0 -368
  517. package/dist/seed/products-standard-seed-data.d.ts +0 -2
  518. package/dist/seed/products-standard-seed-data.js +0 -632
  519. package/dist/seed/products-stickers-seed-data.d.ts +0 -2
  520. package/dist/seed/products-stickers-seed-data.js +0 -319
  521. package/dist/seed/reviews-seed-data.d.ts +0 -1
  522. package/dist/seed/reviews-seed-data.js +0 -185
  523. package/dist/seed/runner.d.ts +0 -2
  524. package/dist/seed/runner.js +0 -125
  525. package/dist/seed/scammers-seed-data.d.ts +0 -2
  526. package/dist/seed/scammers-seed-data.js +0 -235
  527. package/dist/seed/seed-market-config.d.ts +0 -48
  528. package/dist/seed/seed-market-config.js +0 -199
  529. package/dist/seed/seed-purpose.d.ts +0 -299
  530. package/dist/seed/seed-purpose.js +0 -440
  531. package/dist/seed/sessions-seed-data.d.ts +0 -3
  532. package/dist/seed/sessions-seed-data.js +0 -116
  533. package/dist/seed/shipments-seed-data.d.ts +0 -5
  534. package/dist/seed/shipments-seed-data.js +0 -185
  535. package/dist/seed/site-settings-seed-data.d.ts +0 -2
  536. package/dist/seed/site-settings-seed-data.js +0 -1069
  537. package/dist/seed/store-addresses-seed-data.d.ts +0 -18
  538. package/dist/seed/store-addresses-seed-data.js +0 -71
  539. package/dist/seed/store-extensions-seed-data.d.ts +0 -11
  540. package/dist/seed/store-extensions-seed-data.js +0 -292
  541. package/dist/seed/stores-seed-data.d.ts +0 -6
  542. package/dist/seed/stores-seed-data.js +0 -242
  543. package/dist/seed/support-tickets-seed-data.d.ts +0 -16
  544. package/dist/seed/support-tickets-seed-data.js +0 -239
  545. package/dist/seed/tax-codes-seed-data.d.ts +0 -34
  546. package/dist/seed/tax-codes-seed-data.js +0 -100
  547. package/dist/seed/test-data-ttl.d.ts +0 -29
  548. package/dist/seed/test-data-ttl.js +0 -31
  549. package/dist/seed/test-utils.d.ts +0 -49
  550. package/dist/seed/test-utils.js +0 -110
  551. package/dist/seed/types.d.ts +0 -89
  552. package/dist/seed/types.js +0 -15
  553. package/dist/seed/users-seed-data.d.ts +0 -2
  554. package/dist/seed/users-seed-data.js +0 -597
  555. package/dist/seed/wishlists-seed-data.d.ts +0 -12
  556. 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
- };