@akinon/projectzero 2.0.0-beta.2 → 2.0.0-beta.21

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 (300) hide show
  1. package/CHANGELOG.md +155 -6
  2. package/app-template/.env.example +8 -0
  3. package/app-template/.github/instructions/account.instructions.md +749 -0
  4. package/app-template/.github/instructions/checkout.instructions.md +678 -0
  5. package/app-template/.github/instructions/default.instructions.md +279 -0
  6. package/app-template/.github/instructions/edge-cases.instructions.md +73 -0
  7. package/app-template/.github/instructions/routing.instructions.md +603 -0
  8. package/app-template/.github/instructions/settings.instructions.md +338 -0
  9. package/app-template/.gitignore +5 -0
  10. package/app-template/AGENTS.md +7 -0
  11. package/app-template/CHANGELOG.md +1783 -61
  12. package/app-template/Procfile +1 -1
  13. package/app-template/README.md +6 -0
  14. package/app-template/akinon.json +1 -4
  15. package/app-template/build.sh +10 -0
  16. package/app-template/config/prebuild-tests.json +5 -0
  17. package/app-template/docs/advanced-usage.md +111 -0
  18. package/app-template/docs/plugins.md +60 -25
  19. package/app-template/docs/sentry-usage.md +35 -0
  20. package/app-template/jest.config.ts +2 -2
  21. package/app-template/next-env.d.ts +1 -0
  22. package/app-template/next.config.mjs +8 -6
  23. package/app-template/package.json +61 -50
  24. package/app-template/postcss.config.mjs +5 -0
  25. package/app-template/public/amex.svg +12 -0
  26. package/app-template/public/apple-pay.svg +16 -0
  27. package/app-template/public/assets/images/product-placeholder-1.jpg +0 -0
  28. package/app-template/public/assets/images/product-placeholder-2.jpg +0 -0
  29. package/app-template/public/assets/images/product-placeholder-3.jpg +0 -0
  30. package/app-template/public/assets/images/product-placeholder-4.jpg +0 -0
  31. package/app-template/public/google-pay.svg +16 -0
  32. package/app-template/public/locales/en/account.json +13 -4
  33. package/app-template/public/locales/en/auth.json +6 -7
  34. package/app-template/public/locales/en/basket.json +6 -6
  35. package/app-template/public/locales/en/blog.json +7 -0
  36. package/app-template/public/locales/en/category.json +3 -1
  37. package/app-template/public/locales/en/checkout.json +17 -4
  38. package/app-template/public/locales/en/common.json +71 -3
  39. package/app-template/public/locales/en/forgot_password.json +6 -7
  40. package/app-template/public/locales/en/product.json +84 -4
  41. package/app-template/public/locales/tr/account.json +13 -4
  42. package/app-template/public/locales/tr/auth.json +16 -17
  43. package/app-template/public/locales/tr/basket.json +4 -4
  44. package/app-template/public/locales/tr/blog.json +7 -0
  45. package/app-template/public/locales/tr/category.json +3 -1
  46. package/app-template/public/locales/tr/checkout.json +48 -36
  47. package/app-template/public/locales/tr/common.json +70 -2
  48. package/app-template/public/locales/tr/forgot_password.json +12 -13
  49. package/app-template/public/locales/tr/product.json +82 -0
  50. package/app-template/public/logo.svg +3 -27
  51. package/app-template/public/mastercard.svg +14 -0
  52. package/app-template/public/masterpass-javascript-sdk-web.min.js +1 -0
  53. package/app-template/public/promotion-banner.jpg +0 -0
  54. package/app-template/public/shop-pay.svg +12 -0
  55. package/app-template/public/visa.svg +12 -0
  56. package/app-template/src/__tests__/middleware-matcher.test.ts +135 -0
  57. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/[...prettyurl]/page.tsx +11 -11
  58. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/layout.tsx +4 -3
  59. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/cancellation/page.tsx +105 -13
  60. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/page.tsx +136 -52
  61. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/profile/page.tsx +2 -2
  62. package/app-template/src/app/[pz]/blog/[slug]/page.tsx +120 -0
  63. package/app-template/src/app/[pz]/category/[pk]/page.tsx +37 -0
  64. package/app-template/src/app/[pz]/error.tsx +17 -0
  65. package/app-template/src/app/[pz]/flat-page/[pk]/page.tsx +23 -0
  66. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/forms/[pk]/generate/page.tsx +1 -2
  67. package/app-template/src/app/[pz]/group-product/[pk]/page.tsx +93 -0
  68. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/landing-page/[pk]/page.tsx +2 -4
  69. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/layout.tsx +6 -11
  70. package/app-template/src/app/[pz]/list/page.tsx +26 -0
  71. package/app-template/src/app/{[commerce]/[locale]/[currency]/pz-not-found/page.tsx → [pz]/not-found.tsx} +5 -7
  72. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/checkout/page.tsx +7 -4
  73. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/completed/[token]/page.tsx +6 -4
  74. package/app-template/src/app/[pz]/page.tsx +28 -0
  75. package/app-template/src/app/[pz]/pages/[slug]/page.tsx +19 -0
  76. package/app-template/src/app/[pz]/product/[pk]/page.tsx +102 -0
  77. package/app-template/src/app/[pz]/special-page/[pk]/page.tsx +35 -0
  78. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/email-set-primary/[[...id]]/page.tsx +3 -4
  79. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/registration/account-confirm-email/[[...id]]/page.tsx +3 -3
  80. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/reset/[[...id]]/page.tsx +41 -5
  81. package/app-template/src/app/[pz]/xml-sitemap/[node]/route.ts +73 -0
  82. package/app-template/src/app/api/auth/[...nextauth]/route.ts +3 -0
  83. package/app-template/src/app/api/barcode-search/route.ts +1 -0
  84. package/app-template/src/app/api/cache/route.ts +1 -1
  85. package/app-template/src/app/api/form/[...id]/route.ts +1 -7
  86. package/app-template/src/app/api/image-proxy/route.ts +1 -0
  87. package/app-template/src/app/api/logout/route.ts +1 -1
  88. package/app-template/src/app/api/product-categories/route.ts +1 -0
  89. package/app-template/src/app/api/similar-product-list/route.ts +1 -0
  90. package/app-template/src/app/api/similar-products/route.ts +1 -0
  91. package/app-template/src/app/api/theme-settings/route.ts +12 -0
  92. package/app-template/src/app/api/virtual-try-on/limited-categories/route.ts +1 -0
  93. package/app-template/src/app/api/virtual-try-on/route.ts +1 -0
  94. package/app-template/src/app/api/web-vitals/route.ts +1 -1
  95. package/app-template/src/assets/fonts/pz-icon.css +211 -49
  96. package/app-template/src/assets/fonts/pz-icon.eot +0 -0
  97. package/app-template/src/assets/fonts/pz-icon.html +486 -0
  98. package/app-template/src/assets/fonts/pz-icon.scss +373 -49
  99. package/app-template/src/assets/fonts/pz-icon.svg +215 -53
  100. package/app-template/src/assets/fonts/pz-icon.ttf +0 -0
  101. package/app-template/src/assets/fonts/pz-icon.woff +0 -0
  102. package/app-template/src/assets/fonts/pz-icon.woff2 +0 -0
  103. package/app-template/src/assets/globals.scss +37 -34
  104. package/app-template/src/assets/icons/arrow-right.svg +3 -0
  105. package/app-template/src/assets/icons/cart.svg +4 -12
  106. package/app-template/src/assets/icons/check.svg +2 -18
  107. package/app-template/src/assets/icons/chevron-down.svg +2 -7
  108. package/app-template/src/assets/icons/delete.svg +3 -0
  109. package/app-template/src/assets/icons/facebook.svg +2 -8
  110. package/app-template/src/assets/icons/fav-off.svg +5 -0
  111. package/app-template/src/assets/icons/fav-on.svg +5 -0
  112. package/app-template/src/assets/icons/filter-and-sort.svg +3 -0
  113. package/app-template/src/assets/icons/heart.svg +3 -0
  114. package/app-template/src/assets/icons/instagram.svg +2 -13
  115. package/app-template/src/assets/icons/materials.svg +3 -0
  116. package/app-template/src/assets/icons/person.svg +4 -0
  117. package/app-template/src/assets/icons/pinterest.svg +5 -11
  118. package/app-template/src/assets/icons/ruler.svg +3 -0
  119. package/app-template/src/assets/icons/search.svg +8 -11
  120. package/app-template/src/assets/icons/share.svg +2 -9
  121. package/app-template/src/assets/icons/snapchat.svg +3 -0
  122. package/app-template/src/assets/icons/tiktok.svg +3 -0
  123. package/app-template/src/assets/icons/tumblr.svg +6 -0
  124. package/app-template/src/assets/icons/twitter.svg +2 -10
  125. package/app-template/src/assets/icons/vimeo.svg +3 -0
  126. package/app-template/src/assets/icons/youtube.svg +3 -0
  127. package/app-template/src/assets/icons/zoom.svg +8 -0
  128. package/app-template/src/auth.ts +3 -0
  129. package/app-template/src/components/__tests__/link.test.tsx +2 -0
  130. package/app-template/src/components/accordion.tsx +48 -23
  131. package/app-template/src/components/action-tooltip.tsx +160 -0
  132. package/app-template/src/components/button.tsx +50 -35
  133. package/app-template/src/components/carousel-core.tsx +4 -11
  134. package/app-template/src/components/checkbox.tsx +2 -1
  135. package/app-template/src/components/currency-select.tsx +150 -4
  136. package/app-template/src/components/file-input.tsx +64 -2
  137. package/app-template/src/components/generate-form-fields.tsx +49 -10
  138. package/app-template/src/components/icon.tsx +5 -6
  139. package/app-template/src/components/index.ts +4 -1
  140. package/app-template/src/components/input.tsx +8 -2
  141. package/app-template/src/components/language-select.tsx +88 -2
  142. package/app-template/src/components/modal.tsx +34 -16
  143. package/app-template/src/components/pagination.tsx +133 -20
  144. package/app-template/src/components/price.tsx +1 -1
  145. package/app-template/src/components/pwa-tags.tsx +1 -0
  146. package/app-template/src/components/quantity-input.tsx +63 -0
  147. package/app-template/src/components/quantity-selector.tsx +215 -0
  148. package/app-template/src/components/route-handler.tsx +50 -0
  149. package/app-template/src/components/select.tsx +86 -54
  150. package/app-template/src/components/tabs.tsx +2 -2
  151. package/app-template/src/components/types/index.ts +55 -2
  152. package/app-template/src/components/widget-content.tsx +323 -0
  153. package/app-template/src/data/server/theme.ts +70 -0
  154. package/app-template/src/hooks/use-fav-button.tsx +9 -10
  155. package/app-template/src/hooks/use-product-cart.ts +80 -0
  156. package/app-template/src/hooks/use-stock-alert.ts +74 -0
  157. package/app-template/src/hooks/use-theme-settings.ts +42 -0
  158. package/app-template/src/lib/fonts.ts +149 -0
  159. package/app-template/src/middleware.ts +1 -0
  160. package/app-template/src/plugins.js +13 -2
  161. package/app-template/src/redux/middlewares/category.ts +6 -5
  162. package/app-template/src/redux/reducers/category.ts +1 -1
  163. package/app-template/src/redux/store.ts +21 -1
  164. package/app-template/src/routes/index.ts +8 -7
  165. package/app-template/src/settings.js +5 -3
  166. package/app-template/src/types/hookform-resolvers-yup.d.ts +28 -0
  167. package/app-template/src/types/index.ts +74 -3
  168. package/app-template/src/types/next-auth.d.ts +2 -2
  169. package/app-template/src/types/widget.ts +169 -0
  170. package/app-template/src/utils/__tests__/theme-page-context.test.ts +145 -0
  171. package/app-template/src/utils/convert-facet-search-params.ts +1 -1
  172. package/app-template/src/utils/formatDate.ts +48 -0
  173. package/app-template/src/utils/styles.ts +71 -0
  174. package/app-template/src/utils/theme-page-context.ts +309 -0
  175. package/app-template/src/utils/variant-validation.ts +41 -0
  176. package/app-template/src/views/account/address-form.tsx +8 -4
  177. package/app-template/src/views/account/contact-form.tsx +148 -136
  178. package/app-template/src/views/account/content-header.tsx +2 -2
  179. package/app-template/src/views/account/faq/faq-tabs.tsx +8 -2
  180. package/app-template/src/views/account/favorite-item.tsx +1 -1
  181. package/app-template/src/views/account/order.tsx +10 -8
  182. package/app-template/src/views/account/orders/order-cancellation-item.tsx +4 -3
  183. package/app-template/src/views/account/orders/order-detail-header.tsx +1 -1
  184. package/app-template/src/views/anonymous-tracking/order-detail/index.tsx +44 -37
  185. package/app-template/src/views/basket/basket-item.tsx +7 -1
  186. package/app-template/src/views/basket/summary.tsx +16 -0
  187. package/app-template/src/views/breadcrumb.tsx +2 -2
  188. package/app-template/src/views/category/category-active-filters.tsx +1 -1
  189. package/app-template/src/views/category/category-banner.tsx +4 -23
  190. package/app-template/src/views/category/category-header.tsx +12 -6
  191. package/app-template/src/views/category/category-info.tsx +4 -3
  192. package/app-template/src/views/category/filters/filter-item.tsx +138 -42
  193. package/app-template/src/views/category/filters/index.tsx +3 -3
  194. package/app-template/src/views/category/layout.tsx +1 -0
  195. package/app-template/src/views/checkout/auth.tsx +64 -40
  196. package/app-template/src/views/checkout/layout/header.tsx +9 -5
  197. package/app-template/src/views/checkout/steps/payment/index.tsx +1 -1
  198. package/app-template/src/views/checkout/steps/payment/options/credit-card/index.tsx +21 -5
  199. package/app-template/src/views/checkout/steps/payment/options/funds-transfer.tsx +25 -5
  200. package/app-template/src/views/checkout/steps/payment/options/loyalty.tsx +21 -2
  201. package/app-template/src/views/checkout/steps/payment/options/redirection.tsx +27 -5
  202. package/app-template/src/views/checkout/steps/payment/options/store-credit.tsx +464 -0
  203. package/app-template/src/views/checkout/steps/shipping/address-box.tsx +30 -17
  204. package/app-template/src/views/checkout/steps/shipping/addresses.tsx +1 -1
  205. package/app-template/src/views/checkout/summary.tsx +10 -0
  206. package/app-template/src/views/find-in-store/index.tsx +2 -2
  207. package/app-template/src/views/guest-login/index.tsx +62 -58
  208. package/app-template/src/views/header/action-menu.tsx +7 -4
  209. package/app-template/src/views/header/index.tsx +1 -1
  210. package/app-template/src/views/header/mini-basket.tsx +14 -3
  211. package/app-template/src/views/header/mobile-hamburger-button.tsx +5 -8
  212. package/app-template/src/views/header/mobile-menu.tsx +12 -0
  213. package/app-template/src/views/header/search/index.tsx +23 -1
  214. package/app-template/src/views/installment-options/index.tsx +1 -1
  215. package/app-template/src/views/login/index.tsx +89 -56
  216. package/app-template/src/views/otp-login/index.tsx +23 -20
  217. package/app-template/src/views/product/index.ts +1 -0
  218. package/app-template/src/views/product/layout.tsx +26 -6
  219. package/app-template/src/views/product/price-wrapper.tsx +3 -24
  220. package/app-template/src/views/product/product-actions.tsx +165 -0
  221. package/app-template/src/views/product/product-info.tsx +75 -237
  222. package/app-template/src/views/product/product-share.tsx +58 -0
  223. package/app-template/src/views/product/product-variants.tsx +26 -0
  224. package/app-template/src/views/product/slider.tsx +21 -0
  225. package/app-template/src/views/product/variant.tsx +69 -41
  226. package/app-template/src/views/register/index.tsx +54 -44
  227. package/app-template/src/views/share/index.tsx +9 -6
  228. package/app-template/src/views/widgets/home-hero-slider-content.tsx +41 -39
  229. package/app-template/src/widgets/flatpages/about-us/index.tsx +78 -0
  230. package/app-template/src/widgets/flatpages/blog-list/index.tsx +129 -0
  231. package/app-template/src/widgets/footer-menu.tsx +6 -2
  232. package/app-template/src/widgets/footer-subscription/footer-subscription-form.tsx +17 -14
  233. package/app-template/src/widgets/home-stories-eng.tsx +42 -34
  234. package/app-template/src/widgets/index.ts +7 -0
  235. package/app-template/src/widgets/schemas/about-us.json +46 -0
  236. package/app-template/src/widgets/schemas/blog-list.json +37 -0
  237. package/app-template/src/widgets/schemas/blog.json +29 -0
  238. package/app-template/tailwind.config.js +19 -7
  239. package/app-template/tsconfig.json +29 -11
  240. package/codemods/migrate-segments/index.js +591 -0
  241. package/codemods/sentry-9/index.js +30 -0
  242. package/codemods/sentry-9/remove-sentry-configs.js +14 -0
  243. package/codemods/sentry-9/remove-sentry-dependency.js +25 -0
  244. package/codemods/sentry-9/replace-error-page.js +32 -0
  245. package/codemods/update-tailwind-config/index.js +30 -0
  246. package/codemods/update-tailwind-config/transform.js +102 -0
  247. package/commands/codemod.ts +17 -0
  248. package/commands/index.ts +3 -1
  249. package/commands/plugins.ts +115 -46
  250. package/dist/codemods/sentry-9/templates/error.js +14 -0
  251. package/dist/commands/codemod.js +15 -0
  252. package/dist/commands/index.js +3 -1
  253. package/dist/commands/plugins.js +108 -36
  254. package/package.json +3 -2
  255. package/app-template/postcss.config.js +0 -6
  256. package/app-template/sentry.client.config.ts +0 -16
  257. package/app-template/sentry.edge.config.ts +0 -3
  258. package/app-template/sentry.properties +0 -4
  259. package/app-template/sentry.server.config.ts +0 -3
  260. package/app-template/src/app/[commerce]/[locale]/[currency]/category/[pk]/page.tsx +0 -22
  261. package/app-template/src/app/[commerce]/[locale]/[currency]/error.tsx +0 -20
  262. package/app-template/src/app/[commerce]/[locale]/[currency]/flat-page/[pk]/page.tsx +0 -20
  263. package/app-template/src/app/[commerce]/[locale]/[currency]/group-product/[pk]/page.tsx +0 -74
  264. package/app-template/src/app/[commerce]/[locale]/[currency]/list/page.tsx +0 -18
  265. package/app-template/src/app/[commerce]/[locale]/[currency]/page.tsx +0 -50
  266. package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/loading.tsx +0 -67
  267. package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/page.tsx +0 -84
  268. package/app-template/src/app/[commerce]/[locale]/[currency]/special-page/[pk]/page.tsx +0 -27
  269. package/app-template/src/app/[commerce]/[locale]/[currency]/xml-sitemap/[node]/route.ts +0 -25
  270. package/app-template/src/pages/api/auth/[...nextauth].ts +0 -3
  271. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/address/page.tsx +0 -0
  272. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/change-email/page.tsx +0 -0
  273. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/change-password/page.tsx +0 -0
  274. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/contact/page.tsx +0 -0
  275. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/coupons/page.tsx +0 -0
  276. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/email-verification/page.tsx +0 -0
  277. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/faq/page.tsx +0 -0
  278. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/favourite-products/page.tsx +0 -0
  279. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/my-quotations/page.tsx +0 -0
  280. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/layout.tsx +0 -0
  281. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/page.tsx +0 -0
  282. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/page.tsx +0 -0
  283. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/address/stores/page.tsx +0 -0
  284. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/anonymous-tracking/page.tsx +0 -0
  285. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/auth/oauth-login/page.tsx +0 -0
  286. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/auth/page.tsx +0 -0
  287. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/basket/page.tsx +0 -0
  288. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/basket-b2b/page.tsx +0 -0
  289. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/category/[pk]/loading.tsx +0 -0
  290. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/client-root.tsx +0 -0
  291. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/contact-us/page.tsx +0 -0
  292. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/flat-page/[pk]/loading.tsx +0 -0
  293. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/group-product/[pk]/loading.tsx +0 -0
  294. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/landing-page/[pk]/loading.tsx +0 -0
  295. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/list/loading.tsx +0 -0
  296. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/completed/[token]/layout.tsx +0 -0
  297. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/special-page/[pk]/loading.tsx +0 -0
  298. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/template.tsx +0 -0
  299. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/password/reset/page.tsx +0 -0
  300. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/xml-sitemap/route.ts +0 -0
@@ -1,16 +0,0 @@
1
- import { initSentry } from '@akinon/next/sentry';
2
-
3
- async function initializeSentry() {
4
- const response = await fetch('/api/sentry', { next: { revalidate: 0 } });
5
- const data = await response.json();
6
-
7
- const options = {
8
- dsn: data.dsn,
9
- integrations: [],
10
- tracesSampleRate: 1.0
11
- };
12
-
13
- initSentry('Client', options);
14
- }
15
-
16
- initializeSentry();
@@ -1,3 +0,0 @@
1
- import { initSentry } from '@akinon/next/sentry';
2
-
3
- initSentry('Edge');
@@ -1,4 +0,0 @@
1
- defaults.url=https://sentry.io/
2
- defaults.org=akinon
3
- defaults.project=console--zero-pwa
4
- cli.executable=node_modules/@sentry/cli/bin/sentry-cli
@@ -1,3 +0,0 @@
1
- import { initSentry } from '@akinon/next/sentry';
2
-
3
- initSentry('Server');
@@ -1,22 +0,0 @@
1
- import { getCategoryData } from '@akinon/next/data/server';
2
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
- import { PageProps } from '@akinon/next/types';
4
- import CategoryLayout from '@theme/views/category/layout';
5
-
6
- async function Page(props: PageProps<{ pk: number }>) {
7
- const params = await props.params;
8
- const searchParams = await props.searchParams;
9
-
10
- const { data, breadcrumbData } = await getCategoryData({
11
- pk: params.pk,
12
- searchParams
13
- });
14
-
15
- return (
16
- <>
17
- <CategoryLayout data={data} breadcrumbData={breadcrumbData} />
18
- </>
19
- );
20
- }
21
-
22
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,20 +0,0 @@
1
- 'use client';
2
-
3
- import { useLocalization } from '@akinon/next/hooks';
4
- import { Link } from '@theme/components';
5
- import { ROUTES } from '@theme/routes';
6
-
7
- export default function Error() {
8
- const { t } = useLocalization();
9
-
10
- return (
11
- <section className="text-center px-6 my-14 md:px-0 md:m-14">
12
- <div className="text-7xl font-bold md:text-8xl">500</div>
13
- <h1 className="text-lg md:text-xl"> {t('common.page_500.title')} </h1>
14
- <p className="text-lg md:text-xl"> {t('common.page_500.description')} </p>
15
- <Link href={ROUTES.HOME} className="text-lg underline">
16
- {t('common.page_500.link_text')}
17
- </Link>
18
- </section>
19
- );
20
- }
@@ -1,20 +0,0 @@
1
- import { getFlatPageData } from '@akinon/next/data/server';
2
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
- import { PageProps } from '@akinon/next/types';
4
-
5
- async function Page(props: PageProps<{ pk: number }>) {
6
- const params = await props.params;
7
-
8
- const data = await getFlatPageData({ pk: params.pk });
9
-
10
- return (
11
- <div className="container mx-auto py-6">
12
- <div
13
- className="mx-auto prose prose-headings:text-primary"
14
- dangerouslySetInnerHTML={{ __html: data.flat_page.content }}
15
- />
16
- </div>
17
- );
18
- }
19
-
20
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,74 +0,0 @@
1
- import ProductLayout from '@theme/views/product/layout';
2
- import { ProductGroupInfo } from '@theme/views/product';
3
- import { getProductData, getWidgetData } from '@akinon/next/data/server';
4
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
5
- import { PageProps, Metadata } from '@akinon/next/types';
6
- import { generateJsonLd } from '@theme/utils/generate-jsonld';
7
-
8
- export async function generateMetadata(props: PageProps): Promise<Metadata> {
9
- let result: Metadata = {};
10
- const searchParams = await props.searchParams;
11
- const params = await props.params;
12
-
13
- try {
14
- const {
15
- data: { product }
16
- } = await getProductData({
17
- pk: params.pk,
18
- searchParams,
19
- groupProduct: true
20
- });
21
-
22
- result = {
23
- title: product.name,
24
- description: String(product.attributes.description),
25
- twitter: {
26
- title: product.name,
27
- description: String(product.attributes.description)
28
- },
29
- openGraph: {
30
- title: product.name,
31
- description: String(product.attributes.description),
32
- images: product.productimage_set?.map((item) => ({
33
- url: item.image
34
- }))
35
- }
36
- };
37
- // eslint-disable-next-line no-empty
38
- } catch (error) {}
39
-
40
- return result;
41
- }
42
-
43
- async function Page(props: PageProps<{ pk: number }>) {
44
- const params = await props.params;
45
- const searchParams = await props.searchParams;
46
-
47
- const [{ data, breadcrumbData }, deliveryReturn] = await Promise.all([
48
- getProductData({
49
- pk: params.pk,
50
- searchParams,
51
- groupProduct: true
52
- }),
53
- getWidgetData({ slug: 'product-delivery-returns' })
54
- ]);
55
-
56
- const jsonLd = generateJsonLd(data.product);
57
-
58
- return (
59
- <>
60
- <ProductLayout data={data} breadcrumbData={breadcrumbData}>
61
- <ProductGroupInfo
62
- data={data}
63
- deliveryReturn={deliveryReturn?.attributes}
64
- />
65
- </ProductLayout>
66
- <script
67
- type="application/ld+json"
68
- dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
69
- />
70
- </>
71
- );
72
- }
73
-
74
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,18 +0,0 @@
1
- import { getListData } from '@akinon/next/data/server';
2
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
- import { PageProps } from '@akinon/next/types';
4
- import CategoryLayout from '@theme/views/category/layout';
5
-
6
- async function Page(props: PageProps) {
7
- const searchParams = await props.searchParams;
8
-
9
- const data = await getListData({ searchParams });
10
-
11
- return (
12
- <>
13
- <CategoryLayout data={data} />
14
- </>
15
- );
16
- }
17
-
18
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,50 +0,0 @@
1
- import 'server-only';
2
-
3
- import { HOME_WIDGETS } from '@theme/widgets';
4
- import { getWidgetData } from '@akinon/next/data/server';
5
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
6
- import LazyComponent from '@akinon/next/components/lazy-component';
7
-
8
- type HomeWidgetOrderType = {
9
- widget_order: Array<{
10
- value: { item_slug: string };
11
- kwargs: { value: object; data_type: string };
12
- }>;
13
- };
14
-
15
- export const dynamic = 'force-static';
16
- export const revalidate = 600;
17
-
18
- async function Page() {
19
- const data = await getWidgetData<HomeWidgetOrderType>({
20
- slug: 'home-widget-order'
21
- });
22
-
23
- if (!data?.attributes?.widget_order) {
24
- return null;
25
- }
26
-
27
- return data.attributes.widget_order.map((widget, index) => {
28
- const Widget = HOME_WIDGETS[widget.value.item_slug];
29
-
30
- if (Widget) {
31
- if (index > 2) {
32
- return (
33
- <LazyComponent key={widget.value.item_slug} className="min-h-[150px]">
34
- <Widget />
35
- </LazyComponent>
36
- );
37
- }
38
-
39
- return <Widget key={widget.value.item_slug} />;
40
- }
41
-
42
- return null;
43
- });
44
- }
45
-
46
- export async function generateStaticParams() {
47
- return [];
48
- }
49
-
50
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,67 +0,0 @@
1
- import { Skeleton, SkeletonWrapper } from 'components';
2
-
3
- export default function Loading() {
4
- return (
5
- <div className="container mx-auto">
6
- <div className="max-w-5xl mx-auto my-5 px-7">
7
- <SkeletonWrapper className="md:mb-7">
8
- <Skeleton className="w-[17.25rem] h-4 lg:w-64" />
9
- </SkeletonWrapper>
10
- </div>
11
- <div className="grid max-w-5xl grid-cols-2 lg:gap-8 mx-auto px-7">
12
- <div className="col-span-2 mb-7 md:mb-0 lg:col-span-1">
13
- <div className="flex gap-1">
14
- <SkeletonWrapper className="hidden md:block md:mb-7">
15
- {Array(5)
16
- .fill(null)
17
- .map((_, index) => (
18
- <Skeleton key={index} className="w-20 h-24 mb-2" />
19
- ))}
20
- </SkeletonWrapper>
21
-
22
- <div className="flex-1">
23
- <SkeletonWrapper className="md:mb-7">
24
- <Skeleton className="w-full h-[30.375rem] md:h-[36.375rem]" />
25
- </SkeletonWrapper>
26
- </div>
27
- </div>
28
- </div>
29
- <div className="flex flex-col items-center col-span-2 lg:col-span-1">
30
- <div className="w-full">
31
- <SkeletonWrapper className="w-full md:mb-7 flex justify-center items-center">
32
- <Skeleton className="w-96 h-16 mb-9" />
33
- <Skeleton className="hidden w-36 h-14 mb-9 md:block" />
34
-
35
- <div className="flex flex-col justify-center items-center mb-9">
36
- <Skeleton className="w-36 h-4 mb-2" />
37
- <div className="flex items-center gap-2">
38
- {Array(3)
39
- .fill(null)
40
- .map((_, index) => (
41
- <Skeleton key={index} className="w-24 h-10" />
42
- ))}
43
- </div>
44
- </div>
45
-
46
- <div className="flex flex-col justify-center items-center mb-4">
47
- <Skeleton className="w-36 h-4 mb-2" />
48
- <div className="flex items-center gap-2">
49
- {Array(5)
50
- .fill(null)
51
- .map((_, index) => (
52
- <Skeleton key={index} className="w-11 h-11" />
53
- ))}
54
- </div>
55
- </div>
56
-
57
- <Skeleton className="hidden w-full h-14 mb-6 md:block" />
58
- <Skeleton className="w-40 h-10 mb-9 md:w-72" />
59
- <Skeleton className="w-24 h-10 mb-7" />
60
- <Skeleton className="w-full h-36" />
61
- </SkeletonWrapper>
62
- </div>
63
- </div>
64
- </div>
65
- </div>
66
- );
67
- }
@@ -1,84 +0,0 @@
1
- import { getProductData, getWidgetData } from '@akinon/next/data/server';
2
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
- import { PageProps, Metadata } from '@akinon/next/types';
4
- import { generateJsonLd } from '@theme/utils/generate-jsonld';
5
- import { AccordionWrapper, ProductInfo } from '@theme/views/product';
6
- import ProductLayout from '@theme/views/product/layout';
7
-
8
- export async function generateMetadata(props: PageProps): Promise<Metadata> {
9
- let result: Metadata = {};
10
-
11
- const params = await props.params;
12
- const searchParams = await props.searchParams;
13
-
14
- try {
15
- const {
16
- data: { product }
17
- } = await getProductData({
18
- pk: params.pk,
19
- searchParams
20
- });
21
-
22
- result = {
23
- title: product.name,
24
- description: String(product.attributes.description),
25
- twitter: {
26
- title: product.name,
27
- description: String(product.attributes.description)
28
- },
29
- openGraph: {
30
- title: product.name,
31
- description: String(product.attributes.description),
32
- images: product.productimage_set?.map((item) => ({
33
- url: item.image
34
- }))
35
- }
36
- };
37
- // eslint-disable-next-line no-empty
38
- } catch (error) {}
39
-
40
- return result;
41
- }
42
-
43
- async function Page(props: PageProps<{ pk: number }>) {
44
- const params = await props.params;
45
- const searchParams = await props.searchParams;
46
-
47
- const [{ data, breadcrumbData }, deliveryReturn] = await Promise.all([
48
- getProductData({
49
- pk: params.pk,
50
- searchParams
51
- }),
52
- getWidgetData({ slug: 'product-delivery-returns' })
53
- ]);
54
-
55
- const jsonLd = generateJsonLd(data.product);
56
-
57
- return (
58
- <>
59
- <ProductLayout data={data} breadcrumbData={breadcrumbData}>
60
- <div className="flex flex-col items-center">
61
- <h1
62
- className="mt-4 text-2xl text-center md:mt-0"
63
- data-testid="product-name"
64
- >
65
- {data.product.name}
66
- </h1>
67
-
68
- <ProductInfo data={data} />
69
-
70
- <AccordionWrapper
71
- data={data}
72
- deliveryReturn={deliveryReturn?.attributes}
73
- />
74
- </div>
75
- </ProductLayout>
76
- <script
77
- type="application/ld+json"
78
- dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
79
- />
80
- </>
81
- );
82
- }
83
-
84
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,27 +0,0 @@
1
- import { getSpecialPageData } from '@akinon/next/data/server';
2
- import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
- import { PageProps } from '@akinon/next/types';
4
- import CategoryLayout from '@theme/views/category/layout';
5
- import SpecialPageBanner from '@theme/widgets/special-page-banner';
6
- import SpecialPageCarousel from '@theme/widgets/special-page-carousel';
7
-
8
- async function Page(props: PageProps<{ pk: number }>) {
9
- const params = await props.params;
10
- const searchParams = await props.searchParams;
11
- const data = await getSpecialPageData({ pk: params.pk, searchParams });
12
-
13
- return (
14
- <>
15
- <CategoryLayout data={data}>
16
- {data.special_page && (
17
- <>
18
- <SpecialPageBanner data={data.special_page} />
19
- <SpecialPageCarousel slug={data.special_page.video_embedded_code} />
20
- </>
21
- )}
22
- </CategoryLayout>
23
- </>
24
- );
25
- }
26
-
27
- export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,25 +0,0 @@
1
- import { urlLocaleMatcherRegex } from '@akinon/next/utils';
2
-
3
- export const dynamic = 'force-dynamic';
4
-
5
- export async function GET(request: Request, context: { params }) {
6
- const node = (await context.params).node;
7
- const url = new URL(request.url);
8
- const matchedLocale = url.pathname.match(urlLocaleMatcherRegex);
9
-
10
- const sitemap = await fetch(
11
- `https://s3.eu-central-1.amazonaws.com/0fb534/sitemaps/sitemaps/sitemap-${node}.xml.gz`
12
- );
13
- let sitemapContent = await sitemap.text();
14
-
15
- sitemapContent = sitemapContent.replace(
16
- /\.com/g,
17
- `.com${matchedLocale?.[0] ?? ''}`
18
- );
19
-
20
- return new Response(sitemapContent, {
21
- headers: {
22
- 'Content-Type': 'application/xml'
23
- }
24
- });
25
- }
@@ -1,3 +0,0 @@
1
- import Auth from '@akinon/next/api/auth';
2
-
3
- export default Auth;