@salla.sa/twilight-theme-engine 1.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -0
- package/dist/AddToCartForm-HOWNKCKX.js +304 -0
- package/dist/AddToCartForm-HOWNKCKX.js.map +1 -0
- package/dist/BlogAuthorPage-W3BZIJHJ.js +101 -0
- package/dist/BlogAuthorPage-W3BZIJHJ.js.map +1 -0
- package/dist/BlogCategoryPage-AIAJ5JBR.js +101 -0
- package/dist/BlogCategoryPage-AIAJ5JBR.js.map +1 -0
- package/dist/BlogPage-4BYF2EQW.js +190 -0
- package/dist/BlogPage-4BYF2EQW.js.map +1 -0
- package/dist/BlogSinglePage-AMNAUMWW.js +187 -0
- package/dist/BlogSinglePage-AMNAUMWW.js.map +1 -0
- package/dist/BlogTagPage-ELG2H5N5.js +101 -0
- package/dist/BlogTagPage-ELG2H5N5.js.map +1 -0
- package/dist/BrandsPage-ZSO3PYAV.js +127 -0
- package/dist/BrandsPage-ZSO3PYAV.js.map +1 -0
- package/dist/Breadcrumb-N32QFMVK.js +152 -0
- package/dist/Breadcrumb-N32QFMVK.js.map +1 -0
- package/dist/CartItem-SGTGOTEC.js +171 -0
- package/dist/CartItem-SGTGOTEC.js.map +1 -0
- package/dist/CartSummary-OKDGVSX2.js +236 -0
- package/dist/CartSummary-OKDGVSX2.js.map +1 -0
- package/dist/Copyright-F3HLYXFJ.js +9 -0
- package/dist/Copyright-F3HLYXFJ.js.map +1 -0
- package/dist/CurrencySymbol-TARAYUOT.js +11 -0
- package/dist/CurrencySymbol-TARAYUOT.js.map +1 -0
- package/dist/CustomerLayout-LB4E2LHT.js +68 -0
- package/dist/CustomerLayout-LB4E2LHT.js.map +1 -0
- package/dist/ErrorPage-TK4U3ENF.js +6 -0
- package/dist/ErrorPage-TK4U3ENF.js.map +1 -0
- package/dist/Footer-UVCSKTW3.js +39 -0
- package/dist/Footer-UVCSKTW3.js.map +1 -0
- package/dist/GoogleTag-4LHWC365.js +52 -0
- package/dist/GoogleTag-4LHWC365.js.map +1 -0
- package/dist/Header-BF6SPZJC.js +15 -0
- package/dist/Header-BF6SPZJC.js.map +1 -0
- package/dist/ImageModal-WLJM3WIE.js +41 -0
- package/dist/ImageModal-WLJM3WIE.js.map +1 -0
- package/dist/LoyaltyPage-X4PHPUFC.js +188 -0
- package/dist/LoyaltyPage-X4PHPUFC.js.map +1 -0
- package/dist/MainMenu-R3EWTNNC.js +91 -0
- package/dist/MainMenu-R3EWTNNC.js.map +1 -0
- package/dist/MasterLayout-5JLM7IMW.js +39 -0
- package/dist/MasterLayout-5JLM7IMW.js.map +1 -0
- package/dist/MobileMenu-QXESUQXC.js +175 -0
- package/dist/MobileMenu-QXESUQXC.js.map +1 -0
- package/dist/NoContent-PBGESHBJ.js +21 -0
- package/dist/NoContent-PBGESHBJ.js.map +1 -0
- package/dist/NotificationsPage-V6UIPDJD.js +84 -0
- package/dist/NotificationsPage-V6UIPDJD.js.map +1 -0
- package/dist/OrderSinglePage-ZMEKPLE3.js +441 -0
- package/dist/OrderSinglePage-ZMEKPLE3.js.map +1 -0
- package/dist/OrdersPage-EAATVPYK.js +184 -0
- package/dist/OrdersPage-EAATVPYK.js.map +1 -0
- package/dist/PageSingle-Y6ARZ5LS.js +28 -0
- package/dist/PageSingle-Y6ARZ5LS.js.map +1 -0
- package/dist/PreOrderNotification-ZVTGNV7K.js +23 -0
- package/dist/PreOrderNotification-ZVTGNV7K.js.map +1 -0
- package/dist/PriceQuoteButton-RAAPL4N4.js +26 -0
- package/dist/PriceQuoteButton-RAAPL4N4.js.map +1 -0
- package/dist/ProductDetails-KTY4ZSFM.js +194 -0
- package/dist/ProductDetails-KTY4ZSFM.js.map +1 -0
- package/dist/ProfilePage-6SK34MDJ.js +64 -0
- package/dist/ProfilePage-6SK34MDJ.js.map +1 -0
- package/dist/RenderWhenVisible-TR7G2KUC.js +50 -0
- package/dist/RenderWhenVisible-TR7G2KUC.js.map +1 -0
- package/dist/SeoCartWidget-XF4GEJK7.js +109 -0
- package/dist/SeoCartWidget-XF4GEJK7.js.map +1 -0
- package/dist/SettingsPage-DPYARBPO.js +51 -0
- package/dist/SettingsPage-DPYARBPO.js.map +1 -0
- package/dist/SiftSnippet-X74S5KDO.js +29 -0
- package/dist/SiftSnippet-X74S5KDO.js.map +1 -0
- package/dist/StoreClosedNotification-KSB2GPEZ.js +91 -0
- package/dist/StoreClosedNotification-KSB2GPEZ.js.map +1 -0
- package/dist/Testimonials-MZCVP66E.js +26 -0
- package/dist/Testimonials-MZCVP66E.js.map +1 -0
- package/dist/TestimonialsPage-4OFS5Z4V.js +77 -0
- package/dist/TestimonialsPage-4OFS5Z4V.js.map +1 -0
- package/dist/ThankYouPage-C7PA3RJP.js +236 -0
- package/dist/ThankYouPage-C7PA3RJP.js.map +1 -0
- package/dist/TwilightBundles-5F2H75VV.js +46 -0
- package/dist/TwilightBundles-5F2H75VV.js.map +1 -0
- package/dist/WalletPage-66XGZKO7.js +189 -0
- package/dist/WalletPage-66XGZKO7.js.map +1 -0
- package/dist/WidgetHead-FXEPCB23.js +7 -0
- package/dist/WidgetHead-FXEPCB23.js.map +1 -0
- package/dist/WishlistPage-7ZZYHBSZ.js +144 -0
- package/dist/WishlistPage-7ZZYHBSZ.js.map +1 -0
- package/dist/ambient/salla-components.d.ts +312 -0
- package/dist/ambient/virtual-modules.d.ts +22 -0
- package/dist/api/apps.d.ts +28 -0
- package/dist/api/apps.d.ts.map +1 -0
- package/dist/api/apps.js +26 -0
- package/dist/api/apps.js.map +1 -0
- package/dist/api/blog.d.ts +61 -0
- package/dist/api/blog.d.ts.map +1 -0
- package/dist/api/brands.d.ts +25 -0
- package/dist/api/brands.d.ts.map +1 -0
- package/dist/api/brands.js +40 -0
- package/dist/api/brands.js.map +1 -0
- package/dist/api/cart.d.ts +21 -0
- package/dist/api/cart.d.ts.map +1 -0
- package/dist/api/cart.js +40 -0
- package/dist/api/cart.js.map +1 -0
- package/dist/api/category.d.ts +31 -0
- package/dist/api/category.d.ts.map +1 -0
- package/dist/api/category.js +40 -0
- package/dist/api/category.js.map +1 -0
- package/dist/api/client.d.ts +17 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +7 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/home.d.ts +15 -0
- package/dist/api/home.d.ts.map +1 -0
- package/dist/api/home.js +8 -0
- package/dist/api/home.js.map +1 -0
- package/dist/api/loyalty.d.ts +25 -0
- package/dist/api/loyalty.d.ts.map +1 -0
- package/dist/api/loyalty.js +40 -0
- package/dist/api/loyalty.js.map +1 -0
- package/dist/api/menu.d.ts +16 -0
- package/dist/api/menu.d.ts.map +1 -0
- package/dist/api/menu.js +8 -0
- package/dist/api/menu.js.map +1 -0
- package/dist/api/notification.d.ts +26 -0
- package/dist/api/notification.d.ts.map +1 -0
- package/dist/api/order.d.ts +74 -0
- package/dist/api/order.d.ts.map +1 -0
- package/dist/api/order.js +40 -0
- package/dist/api/order.js.map +1 -0
- package/dist/api/page.d.ts +16 -0
- package/dist/api/page.d.ts.map +1 -0
- package/dist/api/page.js +40 -0
- package/dist/api/page.js.map +1 -0
- package/dist/api/product.d.ts +80 -0
- package/dist/api/product.d.ts.map +1 -0
- package/dist/api/product.js +40 -0
- package/dist/api/product.js.map +1 -0
- package/dist/api/profile.d.ts +9 -0
- package/dist/api/profile.d.ts.map +1 -0
- package/dist/api/profile.js +23 -0
- package/dist/api/profile.js.map +1 -0
- package/dist/api/store.d.ts +46 -0
- package/dist/api/store.d.ts.map +1 -0
- package/dist/api/store.js +8 -0
- package/dist/api/store.js.map +1 -0
- package/dist/api/translations.d.ts +15 -0
- package/dist/api/translations.d.ts.map +1 -0
- package/dist/api/translations.js +8 -0
- package/dist/api/translations.js.map +1 -0
- package/dist/api/types.d.ts +54 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +3 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/user.d.ts +15 -0
- package/dist/api/user.d.ts.map +1 -0
- package/dist/api/user.js +8 -0
- package/dist/api/user.js.map +1 -0
- package/dist/api/wallet.d.ts +30 -0
- package/dist/api/wallet.d.ts.map +1 -0
- package/dist/api/wishlist.d.ts +25 -0
- package/dist/api/wishlist.d.ts.map +1 -0
- package/dist/chunk-25SSLQAJ.js +67 -0
- package/dist/chunk-25SSLQAJ.js.map +1 -0
- package/dist/chunk-2FU6CVSB.js +18 -0
- package/dist/chunk-2FU6CVSB.js.map +1 -0
- package/dist/chunk-2KF5JJU6.js +169 -0
- package/dist/chunk-2KF5JJU6.js.map +1 -0
- package/dist/chunk-2TB2LTL2.js +103 -0
- package/dist/chunk-2TB2LTL2.js.map +1 -0
- package/dist/chunk-3DCZJDDK.js +10 -0
- package/dist/chunk-3DCZJDDK.js.map +1 -0
- package/dist/chunk-3UHSMGPY.js +145 -0
- package/dist/chunk-3UHSMGPY.js.map +1 -0
- package/dist/chunk-4EQEYRZ7.js +65 -0
- package/dist/chunk-4EQEYRZ7.js.map +1 -0
- package/dist/chunk-562ZMVI3.js +592 -0
- package/dist/chunk-562ZMVI3.js.map +1 -0
- package/dist/chunk-5Q6PFLDN.js +20 -0
- package/dist/chunk-5Q6PFLDN.js.map +1 -0
- package/dist/chunk-6B6VCCMC.js +28 -0
- package/dist/chunk-6B6VCCMC.js.map +1 -0
- package/dist/chunk-6BZ5TKEV.js +44 -0
- package/dist/chunk-6BZ5TKEV.js.map +1 -0
- package/dist/chunk-6NBBXERE.js +24 -0
- package/dist/chunk-6NBBXERE.js.map +1 -0
- package/dist/chunk-6Q5BFHFA.js +88 -0
- package/dist/chunk-6Q5BFHFA.js.map +1 -0
- package/dist/chunk-6YX4RS55.js +33 -0
- package/dist/chunk-6YX4RS55.js.map +1 -0
- package/dist/chunk-7LP7D75V.js +14 -0
- package/dist/chunk-7LP7D75V.js.map +1 -0
- package/dist/chunk-A5ZRUAMT.js +16 -0
- package/dist/chunk-A5ZRUAMT.js.map +1 -0
- package/dist/chunk-B3EFOE57.js +32 -0
- package/dist/chunk-B3EFOE57.js.map +1 -0
- package/dist/chunk-BT6HEEAP.js +31 -0
- package/dist/chunk-BT6HEEAP.js.map +1 -0
- package/dist/chunk-BVSJPBJ6.js +26 -0
- package/dist/chunk-BVSJPBJ6.js.map +1 -0
- package/dist/chunk-BWFBVXT3.js +13 -0
- package/dist/chunk-BWFBVXT3.js.map +1 -0
- package/dist/chunk-CW625T2E.js +62 -0
- package/dist/chunk-CW625T2E.js.map +1 -0
- package/dist/chunk-DFMO5KBU.js +67 -0
- package/dist/chunk-DFMO5KBU.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-EQ5ZGAVR.js +89 -0
- package/dist/chunk-EQ5ZGAVR.js.map +1 -0
- package/dist/chunk-FBFPH5BB.js +34 -0
- package/dist/chunk-FBFPH5BB.js.map +1 -0
- package/dist/chunk-G7ALL4BC.js +52 -0
- package/dist/chunk-G7ALL4BC.js.map +1 -0
- package/dist/chunk-GBWCXUPD.js +99 -0
- package/dist/chunk-GBWCXUPD.js.map +1 -0
- package/dist/chunk-GLM3RPCP.js +1167 -0
- package/dist/chunk-GLM3RPCP.js.map +1 -0
- package/dist/chunk-GN34LCTG.js +92 -0
- package/dist/chunk-GN34LCTG.js.map +1 -0
- package/dist/chunk-GO34DE35.js +247 -0
- package/dist/chunk-GO34DE35.js.map +1 -0
- package/dist/chunk-HOSHJBPS.js +52 -0
- package/dist/chunk-HOSHJBPS.js.map +1 -0
- package/dist/chunk-I5Z4NJBB.js +17 -0
- package/dist/chunk-I5Z4NJBB.js.map +1 -0
- package/dist/chunk-J37AYLWL.js +66 -0
- package/dist/chunk-J37AYLWL.js.map +1 -0
- package/dist/chunk-KCKHA75V.js +19 -0
- package/dist/chunk-KCKHA75V.js.map +1 -0
- package/dist/chunk-KIPZQN3Y.js +158 -0
- package/dist/chunk-KIPZQN3Y.js.map +1 -0
- package/dist/chunk-LBUMC5PB.js +34 -0
- package/dist/chunk-LBUMC5PB.js.map +1 -0
- package/dist/chunk-LSDIFHXZ.js +80 -0
- package/dist/chunk-LSDIFHXZ.js.map +1 -0
- package/dist/chunk-M6ICEIWY.js +25 -0
- package/dist/chunk-M6ICEIWY.js.map +1 -0
- package/dist/chunk-MTONGOJD.js +42 -0
- package/dist/chunk-MTONGOJD.js.map +1 -0
- package/dist/chunk-MXQCE3KA.js +173 -0
- package/dist/chunk-MXQCE3KA.js.map +1 -0
- package/dist/chunk-N5RSKJP4.js +65 -0
- package/dist/chunk-N5RSKJP4.js.map +1 -0
- package/dist/chunk-N7CCSGZF.js +3 -0
- package/dist/chunk-N7CCSGZF.js.map +1 -0
- package/dist/chunk-NBHI5X36.js +27 -0
- package/dist/chunk-NBHI5X36.js.map +1 -0
- package/dist/chunk-NSX6XPDU.js +673 -0
- package/dist/chunk-NSX6XPDU.js.map +1 -0
- package/dist/chunk-O2UOV5RK.js +32 -0
- package/dist/chunk-O2UOV5RK.js.map +1 -0
- package/dist/chunk-OZTGUF7K.js +66 -0
- package/dist/chunk-OZTGUF7K.js.map +1 -0
- package/dist/chunk-Q3VACSSR.js +21 -0
- package/dist/chunk-Q3VACSSR.js.map +1 -0
- package/dist/chunk-QTDGM2SO.js +123 -0
- package/dist/chunk-QTDGM2SO.js.map +1 -0
- package/dist/chunk-QYL5OHAV.js +70 -0
- package/dist/chunk-QYL5OHAV.js.map +1 -0
- package/dist/chunk-RH32IGQD.js +372 -0
- package/dist/chunk-RH32IGQD.js.map +1 -0
- package/dist/chunk-RUHSV4Z6.js +12 -0
- package/dist/chunk-RUHSV4Z6.js.map +1 -0
- package/dist/chunk-RYBA3JDM.js +33 -0
- package/dist/chunk-RYBA3JDM.js.map +1 -0
- package/dist/chunk-SBIXBX6J.js +29 -0
- package/dist/chunk-SBIXBX6J.js.map +1 -0
- package/dist/chunk-SSRNIBVV.js +75 -0
- package/dist/chunk-SSRNIBVV.js.map +1 -0
- package/dist/chunk-SVZOWI7E.js +51 -0
- package/dist/chunk-SVZOWI7E.js.map +1 -0
- package/dist/chunk-SYHTMNYF.js +89 -0
- package/dist/chunk-SYHTMNYF.js.map +1 -0
- package/dist/chunk-T72DAX7R.js +65 -0
- package/dist/chunk-T72DAX7R.js.map +1 -0
- package/dist/chunk-TCSNNCRH.js +23 -0
- package/dist/chunk-TCSNNCRH.js.map +1 -0
- package/dist/chunk-TQLEQSXE.js +48 -0
- package/dist/chunk-TQLEQSXE.js.map +1 -0
- package/dist/chunk-TRUQDEMI.js +14 -0
- package/dist/chunk-TRUQDEMI.js.map +1 -0
- package/dist/chunk-TZ3E5BN4.js +91 -0
- package/dist/chunk-TZ3E5BN4.js.map +1 -0
- package/dist/chunk-TZ4YD5CU.js +16 -0
- package/dist/chunk-TZ4YD5CU.js.map +1 -0
- package/dist/chunk-U7HAK5U7.js +105 -0
- package/dist/chunk-U7HAK5U7.js.map +1 -0
- package/dist/chunk-UE3BUFZI.js +16 -0
- package/dist/chunk-UE3BUFZI.js.map +1 -0
- package/dist/chunk-UIX3W2PN.js +56 -0
- package/dist/chunk-UIX3W2PN.js.map +1 -0
- package/dist/chunk-VVRYP6IL.js +61 -0
- package/dist/chunk-VVRYP6IL.js.map +1 -0
- package/dist/chunk-VVZNW5CB.js +49 -0
- package/dist/chunk-VVZNW5CB.js.map +1 -0
- package/dist/chunk-XHGF75TM.js +133 -0
- package/dist/chunk-XHGF75TM.js.map +1 -0
- package/dist/chunk-XUI3TRXF.js +26 -0
- package/dist/chunk-XUI3TRXF.js.map +1 -0
- package/dist/chunk-YCYTBRYB.js +30 -0
- package/dist/chunk-YCYTBRYB.js.map +1 -0
- package/dist/chunk-YMVLYYLU.js +25 -0
- package/dist/chunk-YMVLYYLU.js.map +1 -0
- package/dist/chunk-Z653O7MX.js +10 -0
- package/dist/chunk-Z653O7MX.js.map +1 -0
- package/dist/chunk-ZCH7W7DZ.js +30 -0
- package/dist/chunk-ZCH7W7DZ.js.map +1 -0
- package/dist/components/Component.d.ts +8 -0
- package/dist/components/Component.d.ts.map +1 -0
- package/dist/components/ComponentRegistry.d.ts +19 -0
- package/dist/components/ComponentRegistry.d.ts.map +1 -0
- package/dist/components/cart/CartItem.d.ts +8 -0
- package/dist/components/cart/CartItem.d.ts.map +1 -0
- package/dist/components/cart/CartSummary.d.ts +12 -0
- package/dist/components/cart/CartSummary.d.ts.map +1 -0
- package/dist/components/cart/PreOrderNotification.d.ts +2 -0
- package/dist/components/cart/PreOrderNotification.d.ts.map +1 -0
- package/dist/components/cart/PriceQuoteButton.d.ts +2 -0
- package/dist/components/cart/PriceQuoteButton.d.ts.map +1 -0
- package/dist/components/cart/SeoCartWidget.d.ts +34 -0
- package/dist/components/cart/SeoCartWidget.d.ts.map +1 -0
- package/dist/components/cart/index.d.ts +4 -0
- package/dist/components/cart/index.d.ts.map +1 -0
- package/dist/components/cart/index.js +4 -0
- package/dist/components/cart/index.js.map +1 -0
- package/dist/components/cart/lazy.d.ts +8 -0
- package/dist/components/cart/lazy.d.ts.map +1 -0
- package/dist/components/collapse/Collapse.d.ts +51 -0
- package/dist/components/collapse/Collapse.d.ts.map +1 -0
- package/dist/components/collapse/index.d.ts +36 -0
- package/dist/components/collapse/index.d.ts.map +1 -0
- package/dist/components/collapse/index.js +44 -0
- package/dist/components/collapse/index.js.map +1 -0
- package/dist/components/common/Breadcrumb.d.ts +7 -0
- package/dist/components/common/Breadcrumb.d.ts.map +1 -0
- package/dist/components/common/BreadcrumbJsonLd.d.ts +8 -0
- package/dist/components/common/BreadcrumbJsonLd.d.ts.map +1 -0
- package/dist/components/common/BreadcrumbTrail.d.ts +8 -0
- package/dist/components/common/BreadcrumbTrail.d.ts.map +1 -0
- package/dist/components/common/CurrencySymbol.d.ts +8 -0
- package/dist/components/common/CurrencySymbol.d.ts.map +1 -0
- package/dist/components/common/DeferredData.d.ts +20 -0
- package/dist/components/common/DeferredData.d.ts.map +1 -0
- package/dist/components/common/ErrorPage.d.ts +18 -0
- package/dist/components/common/ErrorPage.d.ts.map +1 -0
- package/dist/components/common/Image.d.ts +28 -0
- package/dist/components/common/Image.d.ts.map +1 -0
- package/dist/components/common/Link.d.ts +21 -0
- package/dist/components/common/Link.d.ts.map +1 -0
- package/dist/components/common/Link.types.d.ts +82 -0
- package/dist/components/common/Link.types.d.ts.map +1 -0
- package/dist/components/common/NoContent.d.ts +9 -0
- package/dist/components/common/NoContent.d.ts.map +1 -0
- package/dist/components/common/RenderWhenVisible.d.ts +23 -0
- package/dist/components/common/RenderWhenVisible.d.ts.map +1 -0
- package/dist/components/common/index.d.ts +11 -0
- package/dist/components/common/index.d.ts.map +1 -0
- package/dist/components/common/index.js +6 -0
- package/dist/components/common/index.js.map +1 -0
- package/dist/components/common/lazy.d.ts +13 -0
- package/dist/components/common/lazy.d.ts.map +1 -0
- package/dist/components/common/types.d.ts +7 -0
- package/dist/components/common/types.d.ts.map +1 -0
- package/dist/components/defineComponent.d.ts +11 -0
- package/dist/components/defineComponent.d.ts.map +1 -0
- package/dist/components/drawer/Drawer.d.ts +53 -0
- package/dist/components/drawer/Drawer.d.ts.map +1 -0
- package/dist/components/drawer/index.d.ts +32 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +40 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/dropdown/Dropdown.d.ts +63 -0
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/index.d.ts +34 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +67 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/home/BundleComponent.d.ts +9 -0
- package/dist/components/home/BundleComponent.d.ts.map +1 -0
- package/dist/components/home/ComponentErrorBoundary.d.ts +22 -0
- package/dist/components/home/ComponentErrorBoundary.d.ts.map +1 -0
- package/dist/components/home/FeaturedProductsStyle1.d.ts +26 -0
- package/dist/components/home/FeaturedProductsStyle1.d.ts.map +1 -0
- package/dist/components/home/FeaturedProductsStyle2.d.ts +25 -0
- package/dist/components/home/FeaturedProductsStyle2.d.ts.map +1 -0
- package/dist/components/home/FeaturedProductsStyle3.d.ts +20 -0
- package/dist/components/home/FeaturedProductsStyle3.d.ts.map +1 -0
- package/dist/components/home/FixedBanner.d.ts +16 -0
- package/dist/components/home/FixedBanner.d.ts.map +1 -0
- package/dist/components/home/FixedProducts.d.ts +18 -0
- package/dist/components/home/FixedProducts.d.ts.map +1 -0
- package/dist/components/home/HomePageRenderer.d.ts +37 -0
- package/dist/components/home/HomePageRenderer.d.ts.map +1 -0
- package/dist/components/home/ParallaxBackground.d.ts +17 -0
- package/dist/components/home/ParallaxBackground.d.ts.map +1 -0
- package/dist/components/home/PhotosSlider.d.ts +16 -0
- package/dist/components/home/PhotosSlider.d.ts.map +1 -0
- package/dist/components/home/ProductsSlider.d.ts +25 -0
- package/dist/components/home/ProductsSlider.d.ts.map +1 -0
- package/dist/components/home/SquarePhotos.d.ts +21 -0
- package/dist/components/home/SquarePhotos.d.ts.map +1 -0
- package/dist/components/home/StoreFeatures.d.ts +9 -0
- package/dist/components/home/StoreFeatures.d.ts.map +1 -0
- package/dist/components/home/Testimonials.d.ts +15 -0
- package/dist/components/home/Testimonials.d.ts.map +1 -0
- package/dist/components/home/Youtube.d.ts +9 -0
- package/dist/components/home/Youtube.d.ts.map +1 -0
- package/dist/components/home/index.d.ts +9 -0
- package/dist/components/home/index.d.ts.map +1 -0
- package/dist/components/home/index.js +43 -0
- package/dist/components/home/index.js.map +1 -0
- package/dist/components/home/lazy.d.ts +14 -0
- package/dist/components/home/lazy.d.ts.map +1 -0
- package/dist/components/home/register.d.ts +4 -0
- package/dist/components/home/register.d.ts.map +1 -0
- package/dist/components/home/types.d.ts +6 -0
- package/dist/components/home/types.d.ts.map +1 -0
- package/dist/components/layout/Copyright.d.ts +8 -0
- package/dist/components/layout/Copyright.d.ts.map +1 -0
- package/dist/components/layout/CustomerLayout.d.ts +8 -0
- package/dist/components/layout/CustomerLayout.d.ts.map +1 -0
- package/dist/components/layout/Footer.d.ts +2 -0
- package/dist/components/layout/Footer.d.ts.map +1 -0
- package/dist/components/layout/Header.d.ts +7 -0
- package/dist/components/layout/Header.d.ts.map +1 -0
- package/dist/components/layout/MasterLayout.d.ts +3 -0
- package/dist/components/layout/MasterLayout.d.ts.map +1 -0
- package/dist/components/layout/WidgetHead.d.ts +21 -0
- package/dist/components/layout/WidgetHead.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +5 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +25 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/layout/lazy.d.ts +11 -0
- package/dist/components/layout/lazy.d.ts.map +1 -0
- package/dist/components/layout/types.d.ts +10 -0
- package/dist/components/layout/types.d.ts.map +1 -0
- package/dist/components/modal/ImageModal.d.ts +37 -0
- package/dist/components/modal/ImageModal.d.ts.map +1 -0
- package/dist/components/modal/Modal.d.ts +78 -0
- package/dist/components/modal/Modal.d.ts.map +1 -0
- package/dist/components/modal/index.d.ts +30 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/index.js +5 -0
- package/dist/components/modal/index.js.map +1 -0
- package/dist/components/modal/lazy.d.ts +7 -0
- package/dist/components/modal/lazy.d.ts.map +1 -0
- package/dist/components/navigation/MainMenu.d.ts +2 -0
- package/dist/components/navigation/MainMenu.d.ts.map +1 -0
- package/dist/components/navigation/MobileMenu.d.ts +6 -0
- package/dist/components/navigation/MobileMenu.d.ts.map +1 -0
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/index.d.ts.map +1 -0
- package/dist/components/navigation/lazy.d.ts +7 -0
- package/dist/components/navigation/lazy.d.ts.map +1 -0
- package/dist/components/product/AddToCartForm.d.ts +12 -0
- package/dist/components/product/AddToCartForm.d.ts.map +1 -0
- package/dist/components/product/ProductCard.d.ts +16 -0
- package/dist/components/product/ProductCard.d.ts.map +1 -0
- package/dist/components/product/ProductDetails.d.ts +8 -0
- package/dist/components/product/ProductDetails.d.ts.map +1 -0
- package/dist/components/product/ProductGallery.d.ts +7 -0
- package/dist/components/product/ProductGallery.d.ts.map +1 -0
- package/dist/components/product/index.d.ts +8 -0
- package/dist/components/product/index.d.ts.map +1 -0
- package/dist/components/product/index.js +41 -0
- package/dist/components/product/index.js.map +1 -0
- package/dist/components/product/lazy.d.ts +3 -0
- package/dist/components/product/lazy.d.ts.map +1 -0
- package/dist/components/store/StoreClosedNotification.d.ts +17 -0
- package/dist/components/store/StoreClosedNotification.d.ts.map +1 -0
- package/dist/components/store/index.d.ts +3 -0
- package/dist/components/store/index.d.ts.map +1 -0
- package/dist/components/store/lazy.d.ts +3 -0
- package/dist/components/store/lazy.d.ts.map +1 -0
- package/dist/components/toast/Toaster.d.ts +8 -0
- package/dist/components/toast/Toaster.d.ts.map +1 -0
- package/dist/components/toast/index.d.ts +4 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +5 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/types.d.ts +27 -0
- package/dist/components/toast/types.d.ts.map +1 -0
- package/dist/components/toast/useToast.d.ts +5 -0
- package/dist/components/toast/useToast.d.ts.map +1 -0
- package/dist/components/tracking/GoogleTag.d.ts +13 -0
- package/dist/components/tracking/GoogleTag.d.ts.map +1 -0
- package/dist/components/tracking/SiftSnippet.d.ts +16 -0
- package/dist/components/tracking/SiftSnippet.d.ts.map +1 -0
- package/dist/components/tracking/TwilightBundles.d.ts +11 -0
- package/dist/components/tracking/TwilightBundles.d.ts.map +1 -0
- package/dist/components/tracking/index.d.ts +5 -0
- package/dist/components/tracking/index.d.ts.map +1 -0
- package/dist/components/tracking/lazy.d.ts +5 -0
- package/dist/components/tracking/lazy.d.ts.map +1 -0
- package/dist/components/useComponent.d.ts +4 -0
- package/dist/components/useComponent.d.ts.map +1 -0
- package/dist/contexts/CartContext.d.ts +34 -0
- package/dist/contexts/CartContext.d.ts.map +1 -0
- package/dist/contexts/ProductContext.d.ts +34 -0
- package/dist/contexts/ProductContext.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +3 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/document-class-PLK3HUM6.js +21 -0
- package/dist/document-class-PLK3HUM6.js.map +1 -0
- package/dist/dom/document.d.ts +26 -0
- package/dist/dom/document.d.ts.map +1 -0
- package/dist/dom/index.d.ts +24 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom.d.ts +1 -0
- package/dist/dom.js +18 -0
- package/dist/dom.js.map +1 -0
- package/dist/eslint/index.d.ts +17 -0
- package/dist/eslint/index.d.ts.map +1 -0
- package/dist/eslint/index.js +86 -0
- package/dist/eslint/index.js.map +1 -0
- package/dist/hooks/HookRegistry.d.ts +47 -0
- package/dist/hooks/HookRegistry.d.ts.map +1 -0
- package/dist/hooks/HookRegistry.js +4 -0
- package/dist/hooks/HookRegistry.js.map +1 -0
- package/dist/hooks/HookSlot.d.ts +96 -0
- package/dist/hooks/HookSlot.d.ts.map +1 -0
- package/dist/hooks/HookSlot.js +6 -0
- package/dist/hooks/HookSlot.js.map +1 -0
- package/dist/hooks/index.d.ts +27 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +39 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/registerDefaultHooks.d.ts +18 -0
- package/dist/hooks/registerDefaultHooks.d.ts.map +1 -0
- package/dist/hooks/types.d.ts +100 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/useAsset.d.ts +26 -0
- package/dist/hooks/useAsset.d.ts.map +1 -0
- package/dist/hooks/useAsset.js +5 -0
- package/dist/hooks/useAsset.js.map +1 -0
- package/dist/hooks/useAsyncFn.d.ts +68 -0
- package/dist/hooks/useAsyncFn.d.ts.map +1 -0
- package/dist/hooks/useAsyncFn.js +4 -0
- package/dist/hooks/useAsyncFn.js.map +1 -0
- package/dist/hooks/useBlogLike.d.ts +7 -0
- package/dist/hooks/useBlogLike.d.ts.map +1 -0
- package/dist/hooks/useBlogLike.js +7 -0
- package/dist/hooks/useBlogLike.js.map +1 -0
- package/dist/hooks/useBreadcrumbs.d.ts +3 -0
- package/dist/hooks/useBreadcrumbs.d.ts.map +1 -0
- package/dist/hooks/useComments.d.ts +36 -0
- package/dist/hooks/useComments.d.ts.map +1 -0
- package/dist/hooks/useComments.js +4 -0
- package/dist/hooks/useComments.js.map +1 -0
- package/dist/hooks/useCoupon.d.ts +66 -0
- package/dist/hooks/useCoupon.d.ts.map +1 -0
- package/dist/hooks/useCoupon.js +5 -0
- package/dist/hooks/useCoupon.js.map +1 -0
- package/dist/hooks/useDate.d.ts +24 -0
- package/dist/hooks/useDate.d.ts.map +1 -0
- package/dist/hooks/useDocumentClass.d.ts +42 -0
- package/dist/hooks/useDocumentClass.d.ts.map +1 -0
- package/dist/hooks/useDocumentClass.js +5 -0
- package/dist/hooks/useDocumentClass.js.map +1 -0
- package/dist/hooks/useGtm.d.ts +38 -0
- package/dist/hooks/useGtm.d.ts.map +1 -0
- package/dist/hooks/useHook.d.ts +24 -0
- package/dist/hooks/useHook.d.ts.map +1 -0
- package/dist/hooks/useHook.js +5 -0
- package/dist/hooks/useHook.js.map +1 -0
- package/dist/hooks/useIsClient.d.ts +7 -0
- package/dist/hooks/useIsClient.d.ts.map +1 -0
- package/dist/hooks/useMoney.d.ts +26 -0
- package/dist/hooks/useMoney.d.ts.map +1 -0
- package/dist/hooks/useMoney.js +39 -0
- package/dist/hooks/useMoney.js.map +1 -0
- package/dist/hooks/useNumber.d.ts +24 -0
- package/dist/hooks/useNumber.d.ts.map +1 -0
- package/dist/hooks/useOpeningHours.d.ts +28 -0
- package/dist/hooks/useOpeningHours.d.ts.map +1 -0
- package/dist/hooks/usePageConfig.d.ts +44 -0
- package/dist/hooks/usePageConfig.d.ts.map +1 -0
- package/dist/hooks/useProduct.d.ts +47 -0
- package/dist/hooks/useProduct.d.ts.map +1 -0
- package/dist/hooks/useProduct.js +4 -0
- package/dist/hooks/useProduct.js.map +1 -0
- package/dist/hooks/useStore.d.ts +36 -0
- package/dist/hooks/useStore.d.ts.map +1 -0
- package/dist/hooks/useStore.js +39 -0
- package/dist/hooks/useStore.js.map +1 -0
- package/dist/hooks/useTheme.d.ts +41 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +5 -0
- package/dist/hooks/useTheme.js.map +1 -0
- package/dist/hooks/useUser.d.ts +8 -0
- package/dist/hooks/useUser.d.ts.map +1 -0
- package/dist/hooks/useUser.js +9 -0
- package/dist/hooks/useUser.js.map +1 -0
- package/dist/hooks/useWishlist.d.ts +5 -0
- package/dist/hooks/useWishlist.d.ts.map +1 -0
- package/dist/hooks/useWishlist.js +5 -0
- package/dist/hooks/useWishlist.js.map +1 -0
- package/dist/i18n.d.ts +1 -0
- package/dist/i18n.js +5 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/analytics/gtm.d.ts +38 -0
- package/dist/lib/analytics/gtm.d.ts.map +1 -0
- package/dist/lib/services/index.d.ts +1 -0
- package/dist/lib/services/index.d.ts.map +1 -0
- package/dist/navigation-N4H65RUN.js +17 -0
- package/dist/navigation-N4H65RUN.js.map +1 -0
- package/dist/navigation-YCYHW4MK.js +10 -0
- package/dist/navigation-YCYHW4MK.js.map +1 -0
- package/dist/nextjs/document-class.d.ts +92 -0
- package/dist/nextjs/document-class.d.ts.map +1 -0
- package/dist/nextjs/head.d.ts +36 -0
- package/dist/nextjs/head.d.ts.map +1 -0
- package/dist/nextjs/index.d.ts +29 -0
- package/dist/nextjs/index.d.ts.map +1 -0
- package/dist/nextjs/link.d.ts +14 -0
- package/dist/nextjs/link.d.ts.map +1 -0
- package/dist/nextjs/navigation.d.ts +9 -0
- package/dist/nextjs/navigation.d.ts.map +1 -0
- package/dist/nextjs/router.d.ts +15 -0
- package/dist/nextjs/router.d.ts.map +1 -0
- package/dist/nextjs.d.ts +1 -0
- package/dist/nextjs.js +22 -0
- package/dist/nextjs.js.map +1 -0
- package/dist/not-found-BJ3VK5VJ.js +69 -0
- package/dist/not-found-BJ3VK5VJ.js.map +1 -0
- package/dist/providers/DocumentClassProvider.d.ts +56 -0
- package/dist/providers/DocumentClassProvider.d.ts.map +1 -0
- package/dist/providers/DocumentSyncRegistry.d.ts +20 -0
- package/dist/providers/DocumentSyncRegistry.d.ts.map +1 -0
- package/dist/providers/LinkProvider.d.ts +34 -0
- package/dist/providers/LinkProvider.d.ts.map +1 -0
- package/dist/providers/NavigationProvider.d.ts +223 -0
- package/dist/providers/NavigationProvider.d.ts.map +1 -0
- package/dist/providers/TwilightProvider.d.ts +7 -0
- package/dist/providers/TwilightProvider.d.ts.map +1 -0
- package/dist/providers/i18n-factory.d.ts +17 -0
- package/dist/providers/i18n-factory.d.ts.map +1 -0
- package/dist/providers/i18n.d.ts +31 -0
- package/dist/providers/i18n.d.ts.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/locale-constants.d.ts +17 -0
- package/dist/providers/locale-constants.d.ts.map +1 -0
- package/dist/providers/salla-sdk.types.d.ts +352 -0
- package/dist/providers/salla-sdk.types.d.ts.map +1 -0
- package/dist/providers/twilight-context.d.ts +4 -0
- package/dist/providers/twilight-context.d.ts.map +1 -0
- package/dist/providers/twilight-init.d.ts +24 -0
- package/dist/providers/twilight-init.d.ts.map +1 -0
- package/dist/providers/twilight-theme.d.ts +9 -0
- package/dist/providers/twilight-theme.d.ts.map +1 -0
- package/dist/providers/twilight.types.d.ts +95 -0
- package/dist/providers/twilight.types.d.ts.map +1 -0
- package/dist/router/context.d.ts +3 -0
- package/dist/router/context.d.ts.map +1 -0
- package/dist/router/index.d.ts +4 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/route-ids.d.ts +37 -0
- package/dist/router/route-ids.d.ts.map +1 -0
- package/dist/routes/account/index.d.ts +8 -0
- package/dist/routes/account/index.d.ts.map +1 -0
- package/dist/routes/account/notifications/NotificationsPage.d.ts +3 -0
- package/dist/routes/account/notifications/NotificationsPage.d.ts.map +1 -0
- package/dist/routes/account/notifications/index.d.ts +17 -0
- package/dist/routes/account/notifications/index.d.ts.map +1 -0
- package/dist/routes/account/notifications/loader.d.ts +5 -0
- package/dist/routes/account/notifications/loader.d.ts.map +1 -0
- package/dist/routes/account/notifications/types.d.ts +17 -0
- package/dist/routes/account/notifications/types.d.ts.map +1 -0
- package/dist/routes/account/orders/OrderSinglePage.d.ts +3 -0
- package/dist/routes/account/orders/OrderSinglePage.d.ts.map +1 -0
- package/dist/routes/account/orders/OrdersPage.d.ts +3 -0
- package/dist/routes/account/orders/OrdersPage.d.ts.map +1 -0
- package/dist/routes/account/orders/index.d.ts +35 -0
- package/dist/routes/account/orders/index.d.ts.map +1 -0
- package/dist/routes/account/orders/loader.d.ts +11 -0
- package/dist/routes/account/orders/loader.d.ts.map +1 -0
- package/dist/routes/account/orders/types.d.ts +22 -0
- package/dist/routes/account/orders/types.d.ts.map +1 -0
- package/dist/routes/account/orders.d.ts +1 -0
- package/dist/routes/account/orders.js +42 -0
- package/dist/routes/account/orders.js.map +1 -0
- package/dist/routes/account/profile/ProfilePage.d.ts +3 -0
- package/dist/routes/account/profile/ProfilePage.d.ts.map +1 -0
- package/dist/routes/account/profile/index.d.ts +17 -0
- package/dist/routes/account/profile/index.d.ts.map +1 -0
- package/dist/routes/account/profile/loader.d.ts +5 -0
- package/dist/routes/account/profile/loader.d.ts.map +1 -0
- package/dist/routes/account/profile/types.d.ts +5 -0
- package/dist/routes/account/profile/types.d.ts.map +1 -0
- package/dist/routes/account/settings/SettingsPage.d.ts +3 -0
- package/dist/routes/account/settings/SettingsPage.d.ts.map +1 -0
- package/dist/routes/account/settings/index.d.ts +17 -0
- package/dist/routes/account/settings/index.d.ts.map +1 -0
- package/dist/routes/account/settings/loader.d.ts +5 -0
- package/dist/routes/account/settings/loader.d.ts.map +1 -0
- package/dist/routes/account/settings/types.d.ts +5 -0
- package/dist/routes/account/settings/types.d.ts.map +1 -0
- package/dist/routes/account/types.d.ts +300 -0
- package/dist/routes/account/types.d.ts.map +1 -0
- package/dist/routes/account/wallet/WalletPage.d.ts +3 -0
- package/dist/routes/account/wallet/WalletPage.d.ts.map +1 -0
- package/dist/routes/account/wallet/index.d.ts +16 -0
- package/dist/routes/account/wallet/index.d.ts.map +1 -0
- package/dist/routes/account/wallet/loader.d.ts +4 -0
- package/dist/routes/account/wallet/loader.d.ts.map +1 -0
- package/dist/routes/account/wallet/types.d.ts +11 -0
- package/dist/routes/account/wallet/types.d.ts.map +1 -0
- package/dist/routes/account/wishlist/WishlistPage.d.ts +3 -0
- package/dist/routes/account/wishlist/WishlistPage.d.ts.map +1 -0
- package/dist/routes/account/wishlist/index.d.ts +16 -0
- package/dist/routes/account/wishlist/index.d.ts.map +1 -0
- package/dist/routes/account/wishlist/loader.d.ts +4 -0
- package/dist/routes/account/wishlist/loader.d.ts.map +1 -0
- package/dist/routes/account/wishlist/types.d.ts +9 -0
- package/dist/routes/account/wishlist/types.d.ts.map +1 -0
- package/dist/routes/account.d.ts +1 -0
- package/dist/routes/account.js +253 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/blog/BlogAuthorPage.d.ts +3 -0
- package/dist/routes/blog/BlogAuthorPage.d.ts.map +1 -0
- package/dist/routes/blog/BlogCategoryPage.d.ts +3 -0
- package/dist/routes/blog/BlogCategoryPage.d.ts.map +1 -0
- package/dist/routes/blog/BlogPage.d.ts +3 -0
- package/dist/routes/blog/BlogPage.d.ts.map +1 -0
- package/dist/routes/blog/BlogSinglePage.d.ts +3 -0
- package/dist/routes/blog/BlogSinglePage.d.ts.map +1 -0
- package/dist/routes/blog/BlogTagPage.d.ts +3 -0
- package/dist/routes/blog/BlogTagPage.d.ts.map +1 -0
- package/dist/routes/blog/components.d.ts +14 -0
- package/dist/routes/blog/components.d.ts.map +1 -0
- package/dist/routes/blog/index.d.ts +76 -0
- package/dist/routes/blog/index.d.ts.map +1 -0
- package/dist/routes/blog/loader.d.ts +16 -0
- package/dist/routes/blog/loader.d.ts.map +1 -0
- package/dist/routes/blog/types.d.ts +92 -0
- package/dist/routes/blog/types.d.ts.map +1 -0
- package/dist/routes/blog.d.ts +1 -0
- package/dist/routes/blog.js +303 -0
- package/dist/routes/blog.js.map +1 -0
- package/dist/routes/brands/BrandsPage.d.ts +5 -0
- package/dist/routes/brands/BrandsPage.d.ts.map +1 -0
- package/dist/routes/brands/index.d.ts +20 -0
- package/dist/routes/brands/index.d.ts.map +1 -0
- package/dist/routes/brands/loader.d.ts +3 -0
- package/dist/routes/brands/loader.d.ts.map +1 -0
- package/dist/routes/brands/types.d.ts +32 -0
- package/dist/routes/brands/types.d.ts.map +1 -0
- package/dist/routes/brands.d.ts +1 -0
- package/dist/routes/brands.js +92 -0
- package/dist/routes/brands.js.map +1 -0
- package/dist/routes/cart/CartPage.d.ts +3 -0
- package/dist/routes/cart/CartPage.d.ts.map +1 -0
- package/dist/routes/cart/index.d.ts +20 -0
- package/dist/routes/cart/index.d.ts.map +1 -0
- package/dist/routes/cart/loader.d.ts +8 -0
- package/dist/routes/cart/loader.d.ts.map +1 -0
- package/dist/routes/cart/types.d.ts +6 -0
- package/dist/routes/cart/types.d.ts.map +1 -0
- package/dist/routes/cart.d.ts +1 -0
- package/dist/routes/cart.js +168 -0
- package/dist/routes/cart.js.map +1 -0
- package/dist/routes/home/HomePage.d.ts +5 -0
- package/dist/routes/home/HomePage.d.ts.map +1 -0
- package/dist/routes/home/index.d.ts +22 -0
- package/dist/routes/home/index.d.ts.map +1 -0
- package/dist/routes/home/loader.d.ts +12 -0
- package/dist/routes/home/loader.d.ts.map +1 -0
- package/dist/routes/home/types.d.ts +10 -0
- package/dist/routes/home/types.d.ts.map +1 -0
- package/dist/routes/home.d.ts +1 -0
- package/dist/routes/home.js +46 -0
- package/dist/routes/home.js.map +1 -0
- package/dist/routes/index.d.ts +20 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +40 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/lazy.d.ts +23 -0
- package/dist/routes/lazy.d.ts.map +1 -0
- package/dist/routes/loyalty/LoyaltyPage.d.ts +3 -0
- package/dist/routes/loyalty/LoyaltyPage.d.ts.map +1 -0
- package/dist/routes/loyalty/index.d.ts +19 -0
- package/dist/routes/loyalty/index.d.ts.map +1 -0
- package/dist/routes/loyalty/loader.d.ts +3 -0
- package/dist/routes/loyalty/loader.d.ts.map +1 -0
- package/dist/routes/loyalty/types.d.ts +96 -0
- package/dist/routes/loyalty/types.d.ts.map +1 -0
- package/dist/routes/loyalty.d.ts +1 -0
- package/dist/routes/loyalty.js +73 -0
- package/dist/routes/loyalty.js.map +1 -0
- package/dist/routes/not-found.d.ts +15 -0
- package/dist/routes/not-found.d.ts.map +1 -0
- package/dist/routes/page/PageSingle.d.ts +3 -0
- package/dist/routes/page/PageSingle.d.ts.map +1 -0
- package/dist/routes/page/index.d.ts +21 -0
- package/dist/routes/page/index.d.ts.map +1 -0
- package/dist/routes/page/loader.d.ts +6 -0
- package/dist/routes/page/loader.d.ts.map +1 -0
- package/dist/routes/page/types.d.ts +32 -0
- package/dist/routes/page/types.d.ts.map +1 -0
- package/dist/routes/page.d.ts +1 -0
- package/dist/routes/page.js +97 -0
- package/dist/routes/page.js.map +1 -0
- package/dist/routes/product/ProductPage.d.ts +3 -0
- package/dist/routes/product/ProductPage.d.ts.map +1 -0
- package/dist/routes/product/index.d.ts +21 -0
- package/dist/routes/product/index.d.ts.map +1 -0
- package/dist/routes/product/loader.d.ts +6 -0
- package/dist/routes/product/loader.d.ts.map +1 -0
- package/dist/routes/product/types.d.ts +6 -0
- package/dist/routes/product/types.d.ts.map +1 -0
- package/dist/routes/product-listing/ProductListPage.d.ts +13 -0
- package/dist/routes/product-listing/ProductListPage.d.ts.map +1 -0
- package/dist/routes/product-listing/index.d.ts +16 -0
- package/dist/routes/product-listing/index.d.ts.map +1 -0
- package/dist/routes/product-listing/loader.d.ts +3 -0
- package/dist/routes/product-listing/loader.d.ts.map +1 -0
- package/dist/routes/product-listing/types.d.ts +71 -0
- package/dist/routes/product-listing/types.d.ts.map +1 -0
- package/dist/routes/product-listing.d.ts +1 -0
- package/dist/routes/product-listing.js +516 -0
- package/dist/routes/product-listing.js.map +1 -0
- package/dist/routes/product.d.ts +1 -0
- package/dist/routes/product.js +225 -0
- package/dist/routes/product.js.map +1 -0
- package/dist/routes/root/beforeLoad.d.ts +21 -0
- package/dist/routes/root/beforeLoad.d.ts.map +1 -0
- package/dist/routes/root/head.d.ts +5 -0
- package/dist/routes/root/head.d.ts.map +1 -0
- package/dist/routes/root/index.d.ts +3 -0
- package/dist/routes/root/index.d.ts.map +1 -0
- package/dist/routes/seo-redirects.d.ts +19 -0
- package/dist/routes/seo-redirects.d.ts.map +1 -0
- package/dist/routes/seo-redirects.js +40 -0
- package/dist/routes/seo-redirects.js.map +1 -0
- package/dist/routes/testimonials/TestimonialsPage.d.ts +3 -0
- package/dist/routes/testimonials/TestimonialsPage.d.ts.map +1 -0
- package/dist/routes/testimonials/index.d.ts +19 -0
- package/dist/routes/testimonials/index.d.ts.map +1 -0
- package/dist/routes/testimonials/loader.d.ts +5 -0
- package/dist/routes/testimonials/loader.d.ts.map +1 -0
- package/dist/routes/testimonials/types.d.ts +5 -0
- package/dist/routes/testimonials/types.d.ts.map +1 -0
- package/dist/routes/testimonials.d.ts +1 -0
- package/dist/routes/testimonials.js +49 -0
- package/dist/routes/testimonials.js.map +1 -0
- package/dist/routes/thank-you/ThankYouPage.d.ts +3 -0
- package/dist/routes/thank-you/ThankYouPage.d.ts.map +1 -0
- package/dist/routes/thank-you/index.d.ts +20 -0
- package/dist/routes/thank-you/index.d.ts.map +1 -0
- package/dist/routes/thank-you/loader.d.ts +5 -0
- package/dist/routes/thank-you/loader.d.ts.map +1 -0
- package/dist/routes/thank-you/types.d.ts +14 -0
- package/dist/routes/thank-you/types.d.ts.map +1 -0
- package/dist/routes/thank-you.d.ts +1 -0
- package/dist/routes/thank-you.js +95 -0
- package/dist/routes/thank-you.js.map +1 -0
- package/dist/routes/types.d.ts +36 -0
- package/dist/routes/types.d.ts.map +1 -0
- package/dist/sentry/client.d.ts +6 -0
- package/dist/sentry/client.d.ts.map +1 -0
- package/dist/sentry/client.js +17 -0
- package/dist/sentry/client.js.map +1 -0
- package/dist/sentry/server.d.ts +10 -0
- package/dist/sentry/server.d.ts.map +1 -0
- package/dist/sentry/server.js +16 -0
- package/dist/sentry/server.js.map +1 -0
- package/dist/skeleton.d.ts +4 -0
- package/dist/skeleton.d.ts.map +1 -0
- package/dist/skeleton.js +47 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/tanstack/document-class.d.ts +44 -0
- package/dist/tanstack/document-class.d.ts.map +1 -0
- package/dist/tanstack/head.d.ts +24 -0
- package/dist/tanstack/head.d.ts.map +1 -0
- package/dist/tanstack/index.d.ts +28 -0
- package/dist/tanstack/index.d.ts.map +1 -0
- package/dist/tanstack/link.d.ts +18 -0
- package/dist/tanstack/link.d.ts.map +1 -0
- package/dist/tanstack/middleware/earlyHints.d.ts +3 -0
- package/dist/tanstack/middleware/earlyHints.d.ts.map +1 -0
- package/dist/tanstack/middleware/twilight.d.ts +7 -0
- package/dist/tanstack/middleware/twilight.d.ts.map +1 -0
- package/dist/tanstack/navigation.d.ts +13 -0
- package/dist/tanstack/navigation.d.ts.map +1 -0
- package/dist/tanstack/router.d.ts +85 -0
- package/dist/tanstack/router.d.ts.map +1 -0
- package/dist/tanstack/templates/account-layout.d.ts +8 -0
- package/dist/tanstack/templates/account-layout.d.ts.map +1 -0
- package/dist/tanstack/templates/index.d.ts +4 -0
- package/dist/tanstack/templates/index.d.ts.map +1 -0
- package/dist/tanstack/templates/locale-wrapper.d.ts +15 -0
- package/dist/tanstack/templates/locale-wrapper.d.ts.map +1 -0
- package/dist/tanstack/templates/redirect.d.ts +6 -0
- package/dist/tanstack/templates/redirect.d.ts.map +1 -0
- package/dist/tanstack.d.ts +1 -0
- package/dist/tanstack.js +137 -0
- package/dist/tanstack.js.map +1 -0
- package/dist/twilight/context.d.ts +46 -0
- package/dist/twilight/context.d.ts.map +1 -0
- package/dist/twilight/index.d.ts +3 -0
- package/dist/twilight/index.d.ts.map +1 -0
- package/dist/types/hooks.d.ts +58 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +724 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/apply-theme.d.ts +3 -0
- package/dist/utils/apply-theme.d.ts.map +1 -0
- package/dist/utils/asset.d.ts +27 -0
- package/dist/utils/asset.d.ts.map +1 -0
- package/dist/utils/baseHead.d.ts +23 -0
- package/dist/utils/baseHead.d.ts.map +1 -0
- package/dist/utils/baseHead.js +5 -0
- package/dist/utils/baseHead.js.map +1 -0
- package/dist/utils/breadcrumb.d.ts +5 -0
- package/dist/utils/breadcrumb.d.ts.map +1 -0
- package/dist/utils/cdn-image.d.ts +5 -0
- package/dist/utils/cdn-image.d.ts.map +1 -0
- package/dist/utils/color.d.ts +34 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/cookies.d.ts +16 -0
- package/dist/utils/cookies.d.ts.map +1 -0
- package/dist/utils/device.d.ts +19 -0
- package/dist/utils/device.d.ts.map +1 -0
- package/dist/utils/document-class.d.ts +67 -0
- package/dist/utils/document-class.d.ts.map +1 -0
- package/dist/utils/errors.d.ts +4 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/head.d.ts +100 -0
- package/dist/utils/head.d.ts.map +1 -0
- package/dist/utils/head.js +4 -0
- package/dist/utils/head.js.map +1 -0
- package/dist/utils/index.d.ts +22 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +15 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/number.d.ts +21 -0
- package/dist/utils/number.d.ts.map +1 -0
- package/dist/utils/salla-plural.d.ts +14 -0
- package/dist/utils/salla-plural.d.ts.map +1 -0
- package/dist/utils/sanitize.d.ts +2 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sdk-events.d.ts +25 -0
- package/dist/utils/sdk-events.d.ts.map +1 -0
- package/dist/utils/sdk-helpers.d.ts +30 -0
- package/dist/utils/sdk-helpers.d.ts.map +1 -0
- package/dist/utils/sort-options.d.ts +8 -0
- package/dist/utils/sort-options.d.ts.map +1 -0
- package/dist/vite/adapters/index.d.ts +18 -0
- package/dist/vite/adapters/index.d.ts.map +1 -0
- package/dist/vite/adapters/nextjs.adapter.d.ts +12 -0
- package/dist/vite/adapters/nextjs.adapter.d.ts.map +1 -0
- package/dist/vite/adapters/tanstack.adapter.d.ts +71 -0
- package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -0
- package/dist/vite/index.d.ts +6 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +2193 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/plugins/best-practices/best-practices.plugin.d.ts +4 -0
- package/dist/vite/plugins/best-practices/best-practices.plugin.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/hooks-registry.d.ts +27 -0
- package/dist/vite/plugins/best-practices/hooks-registry.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/reporter.d.ts +4 -0
- package/dist/vite/plugins/best-practices/reporter.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/index.d.ts +4 -0
- package/dist/vite/plugins/best-practices/rules/index.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-deep-component-import.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-deep-component-import.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-direct-product-card-import.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-direct-product-card-import.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-img-without-dimensions.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-img-without-dimensions.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-manual-dom.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-manual-dom.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-window-location-reload.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-window-location-reload.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/require-page-hooks.d.ts +16 -0
- package/dist/vite/plugins/best-practices/rules/require-page-hooks.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/types.d.ts +34 -0
- package/dist/vite/plugins/best-practices/types.d.ts.map +1 -0
- package/dist/vite/plugins/package-aliases.plugin.d.ts +3 -0
- package/dist/vite/plugins/package-aliases.plugin.d.ts.map +1 -0
- package/dist/vite/plugins/salla-hydration.plugin.d.ts +12 -0
- package/dist/vite/plugins/salla-hydration.plugin.d.ts.map +1 -0
- package/dist/vite/plugins/theme-translations.plugin.d.ts +20 -0
- package/dist/vite/plugins/theme-translations.plugin.d.ts.map +1 -0
- package/dist/vite/twilight-react.d.ts +22 -0
- package/dist/vite/twilight-react.d.ts.map +1 -0
- package/dist/vite/types.d.ts +110 -0
- package/dist/vite/types.d.ts.map +1 -0
- package/package.json +474 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/vite/plugins/salla-hydration.plugin.ts","../../src/vite/plugins/theme-translations.plugin.ts","../../src/vite/plugins/best-practices/rules/no-deep-component-import.ts","../../src/vite/plugins/best-practices/rules/no-window-location-reload.ts","../../src/vite/plugins/best-practices/rules/no-manual-dom.ts","../../src/vite/plugins/best-practices/rules/no-img-without-dimensions.ts","../../src/vite/plugins/best-practices/rules/no-direct-product-card-import.ts","../../src/vite/plugins/best-practices/hooks-registry.ts","../../src/vite/plugins/best-practices/rules/require-page-hooks.ts","../../src/vite/plugins/best-practices/rules/index.ts","../../src/vite/plugins/best-practices/reporter.ts","../../src/vite/plugins/best-practices/best-practices.plugin.ts","../../src/vite/plugins/package-aliases.plugin.ts","../../src/tanstack/templates/locale-wrapper.ts","../../src/tanstack/templates/redirect.ts","../../src/tanstack/templates/account-layout.ts","../../src/vite/adapters/tanstack.adapter.ts","../../src/vite/adapters/nextjs.adapter.ts","../../src/vite/adapters/index.ts","../../src/vite/twilight-react.ts"],"names":["resolve","existsSync","dirname","readFileSync","basename","loaderCall","componentFn","returnType","fileURLToPath","join","relative","twilightRel"],"mappings":"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","file":"index.js","sourcesContent":["import type { Plugin } from 'vite';\n\n// Regex to match opening tags of salla-* or custom-* web components\nconst TAG_START_RE = /<(?:salla|custom)-[a-z][a-z0-9-]*/g;\n\n/**\n * Vite plugin that automatically adds `suppressHydrationWarning` to all Salla\n * web components (`salla-*` and `custom-*`) in JSX/TSX source files.\n *\n * All Salla web components are built with Stencil.js, which adds\n * `class=\"hydrated\"` and may inject light DOM content after the browser parses\n * the SSR HTML but before React's `hydrateRoot` runs. Without suppression,\n * React throws a hydration mismatch and regenerates the entire subtree.\n */\nexport function webHydrationPlugin(): Plugin {\n return {\n name: 'twilight:web-hydration',\n enforce: 'pre',\n transform(code, id) {\n if (!/\\.[jt]sx$/.test(id)) return null;\n if (!/<(?:salla|custom)-[a-z]/.test(code)) return null;\n\n let result = '';\n let lastIndex = 0;\n\n TAG_START_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = TAG_START_RE.exec(code)) !== null) {\n const tagStart = match.index;\n const afterTag = tagStart + match[0].length;\n\n // Walk forward from after the tag name, skipping JSX expression\n // braces { } so we don't mistake `>` inside `() =>` or generics\n // for the tag's closing bracket.\n let i = afterTag;\n let braceDepth = 0;\n let closingPos = -1;\n let isSelfClosing = false;\n\n while (i < code.length) {\n const ch = code[i];\n if (ch === '{') {\n braceDepth++;\n } else if (ch === '}') {\n braceDepth--;\n } else if (braceDepth === 0 && ch === '>') {\n isSelfClosing = i > 0 && code[i - 1] === '/';\n closingPos = i;\n break;\n }\n i++;\n }\n\n if (closingPos === -1) break; // malformed, bail out\n\n const propsSlice = code.slice(afterTag, isSelfClosing ? closingPos - 1 : closingPos);\n\n if (propsSlice.includes('suppressHydrationWarning')) {\n // Already present — skip past this tag\n TAG_START_RE.lastIndex = closingPos + 1;\n continue;\n }\n\n // Insert suppressHydrationWarning before the closing > or />\n const insertPos = isSelfClosing ? closingPos - 1 : closingPos;\n result += code.slice(lastIndex, insertPos) + ' suppressHydrationWarning';\n lastIndex = insertPos;\n TAG_START_RE.lastIndex = closingPos + 1;\n }\n\n if (lastIndex === 0) return null; // nothing changed\n result += code.slice(lastIndex);\n return { code: result };\n },\n };\n}\n","/**\n * Vite plugin that exposes a `virtual:twilight/theme-translations` module\n * built from all `*.json` files found in the configured `localesDir`.\n *\n * The virtual module exports a `TranslationMessages` object keyed by\n * `{locale}.trans` so it maps directly into the i18next `theme` namespace.\n *\n * @example\n * // vite.config.ts\n * twilightReact({ localesDir: './locales' })\n *\n * // virtual module output (auto-generated, never written to disk):\n * export default {\n * 'ar.trans': { \"key\": \"قيمة\" },\n * 'en.trans': { \"key\": \"value\" },\n * };\n */\n\nimport type { Plugin } from 'vite';\nimport { readdir, readFile } from 'fs/promises';\nimport { join, basename, resolve } from 'path';\n\nconst VIRTUAL_ID = 'virtual:twilight/theme-translations';\nconst RESOLVED_ID = '\\0' + VIRTUAL_ID;\n\nexport function themeTranslationsPlugin(localesDir?: string): Plugin {\n let resolvedLocalesDir: string | undefined;\n\n return {\n name: 'twilight:translations',\n\n configResolved(config) {\n if (localesDir) {\n resolvedLocalesDir = resolve(config.root, localesDir);\n }\n },\n\n resolveId(id) {\n if (id === VIRTUAL_ID) return RESOLVED_ID;\n },\n\n async load(id) {\n if (id !== RESOLVED_ID) return;\n if (!resolvedLocalesDir) return 'export default {};';\n\n try {\n const files = await readdir(resolvedLocalesDir);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n if (jsonFiles.length === 0) return 'export default {};';\n\n const entries: string[] = [];\n for (const file of jsonFiles) {\n const locale = basename(file, '.json');\n const content = await readFile(join(resolvedLocalesDir, file), 'utf-8');\n const data = JSON.parse(content);\n entries.push(` '${locale}.trans': ${JSON.stringify(data)}`);\n }\n\n return `export default {\\n${entries.join(',\\n')}\\n};\\n`;\n } catch {\n return 'export default {};';\n }\n },\n\n configureServer(server) {\n if (!resolvedLocalesDir) return;\n\n server.watcher.add(join(resolvedLocalesDir, '*.json'));\n\n server.watcher.on('change', (file) => {\n if (file.startsWith(resolvedLocalesDir!) && file.endsWith('.json')) {\n const mod = server.moduleGraph.getModuleById(RESOLVED_ID);\n if (mod) server.moduleGraph.invalidateModule(mod);\n }\n });\n\n server.watcher.on('add', (file) => {\n if (file.startsWith(resolvedLocalesDir!) && file.endsWith('.json')) {\n const mod = server.moduleGraph.getModuleById(RESOLVED_ID);\n if (mod) server.moduleGraph.invalidateModule(mod);\n }\n });\n },\n };\n}\n","import type { Rule, RuleContext, Violation } from '../types';\n\nconst COMPONENT_FOLDERS = [\n 'common',\n 'cart',\n 'product',\n 'layout',\n 'home',\n 'modal',\n 'drawer',\n 'dropdown',\n 'collapse',\n 'toast',\n 'navigation',\n];\n\n/**\n * Matches: import { X } from '../common/Link'\n * import { X } from '../../layout/Header'\n * import { X } from '../../../cart/CartItem'\n * Captures: (1) the folder name, (2) the deep path after it\n *\n * Allows: import { X } from '../common' (no trailing slash/file)\n */\nconst FOLDERS_PATTERN = COMPONENT_FOLDERS.join('|');\n\nconst DEEP_IMPORT_RE = new RegExp(\n `(?:import|from)\\\\s+.*['\"](?:\\\\.\\\\.\\\\/)+(${FOLDERS_PATTERN})\\\\/([^'\"]+)['\"]`,\n 'g'\n);\n\nexport const noDeepComponentImport: Rule = {\n name: 'no-deep-component-import',\n description: 'Enforce imports from barrel exports (index.ts) to preserve lazy loading.',\n severity: 'warn',\n\n check(context: RuleContext): Violation[] {\n const violations: Violation[] = [];\n const lines = context.code.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Quick guard — skip lines without import-like syntax\n if (!line.includes('import') && !line.includes('from')) continue;\n\n DEEP_IMPORT_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = DEEP_IMPORT_RE.exec(line)) !== null) {\n const folder = match[1];\n violations.push({\n rule: 'no-deep-component-import',\n message: `Deep import into '${folder}/' bypasses the barrel export and breaks lazy loading.`,\n line: i + 1,\n recommendation: `Import from '../${folder}' (barrel export) instead of '../${folder}/${match[2]}'.`,\n });\n }\n }\n\n return violations;\n },\n};\n","import type { Rule, RuleContext, Violation } from '../types';\n\nconst RELOAD_RE = /window\\s*\\.\\s*location\\s*\\.\\s*reload\\s*\\(/g;\n\nexport const noWindowLocationReload: Rule = {\n name: 'no-window-location-reload',\n description: 'Disallow window.location.reload() in React components.',\n severity: 'error',\n\n check(context: RuleContext): Violation[] {\n const violations: Violation[] = [];\n const lines = context.code.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n RELOAD_RE.lastIndex = 0;\n if (RELOAD_RE.test(line)) {\n violations.push({\n rule: 'no-window-location-reload',\n message: 'window.location.reload() forces a full page reload, discarding React state.',\n line: i + 1,\n recommendation:\n 'Use React state for empty-state handling, React key prop to remount components, or router.invalidate() to refetch loaders.',\n });\n }\n }\n\n return violations;\n },\n};\n","import type { Rule, RuleContext, Violation } from '../types';\n\nconst DOM_METHODS = [\n { pattern: /document\\s*\\.\\s*querySelector\\s*\\(/g, name: 'document.querySelector()' },\n { pattern: /document\\s*\\.\\s*querySelectorAll\\s*\\(/g, name: 'document.querySelectorAll()' },\n { pattern: /document\\s*\\.\\s*getElementById\\s*\\(/g, name: 'document.getElementById()' },\n {\n pattern: /document\\s*\\.\\s*getElementsByClassName\\s*\\(/g,\n name: 'document.getElementsByClassName()',\n },\n { pattern: /\\.classList\\s*\\.\\s*(?:add|remove|toggle)\\s*\\(/g, name: 'classList manipulation' },\n];\n\nexport const noManualDom: Rule = {\n name: 'no-manual-dom',\n description: 'Disallow direct DOM manipulation in React components.',\n severity: 'warn',\n\n check(context: RuleContext): Violation[] {\n const violations: Violation[] = [];\n const lines = context.code.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Quick guard\n if (!line.includes('document') && !line.includes('classList')) continue;\n\n for (const method of DOM_METHODS) {\n method.pattern.lastIndex = 0;\n if (method.pattern.test(line)) {\n violations.push({\n rule: 'no-manual-dom',\n message: `${method.name} performs direct DOM manipulation outside React's control.`,\n line: i + 1,\n recommendation:\n 'Use useRef() for element access and React state/clsx() for class toggling.',\n });\n }\n }\n }\n\n return violations;\n },\n};\n","import type { Rule, RuleContext, Violation } from '../types';\n\n/**\n * Matches <img ... > or <img ... /> tags (single line).\n * Captures the attributes portion to check for width/height.\n */\nconst IMG_TAG_RE = /<img\\s([^>]*?)\\/?>/gi;\n\nexport const noImgWithoutDimensions: Rule = {\n name: 'no-img-without-dimensions',\n description: 'Require width and height on <img> elements to prevent layout shifts (CLS).',\n severity: 'info',\n\n check(context: RuleContext): Violation[] {\n // Only check JSX/TSX files\n if (!/\\.[jt]sx$/.test(context.id)) return [];\n\n const violations: Violation[] = [];\n const lines = context.code.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line.includes('<img')) continue;\n\n IMG_TAG_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = IMG_TAG_RE.exec(line)) !== null) {\n const attrs = match[1];\n const hasWidth = /\\bwidth\\s*[={]/.test(attrs);\n const hasHeight = /\\bheight\\s*[={]/.test(attrs);\n\n if (!hasWidth || !hasHeight) {\n violations.push({\n rule: 'no-img-without-dimensions',\n message: '<img> without explicit width/height causes layout shifts (CLS).',\n line: i + 1,\n recommendation:\n 'Add width and height attributes, or use the <Image> component which handles this automatically.',\n });\n }\n }\n }\n\n return violations;\n },\n};\n","import type { Rule, RuleContext, Violation } from '../types';\n\n/**\n * Matches direct ProductCard imports from deep paths:\n * - import { ProductCard } from '../product/ProductCard'\n * - import ProductCard from '../../components/product/ProductCard'\n *\n * Allows:\n * - import { ProductCard } from '../product' (barrel export)\n * - import { ProductCard } from '@salla.sa/twilight-theme-engine/components/product'\n * - Files in test directories (tests/**)\n * - ProductCard.tsx itself\n */\nconst DIRECT_PRODUCT_CARD_IMPORT_RE =\n /(?:import|from)\\s+.*['\"](?:\\.\\.\\/)+product\\/ProductCard['\"]/g;\n\nconst ALLOWED_PATHS = ['/ProductCard.tsx', '/ProductCard.test.tsx', '.test.', '.spec.'];\n\nexport const noDirectProductCardImport: Rule = {\n name: 'no-direct-product-card-import',\n description: 'Prevent direct imports of ProductCard to ensure registry override works correctly.',\n severity: 'error',\n\n check(context: RuleContext): Violation[] {\n const violations: Violation[] = [];\n\n // Allow imports in test files and ProductCard itself\n if (ALLOWED_PATHS.some((path) => context.relativeId.includes(path))) {\n return violations;\n }\n\n const lines = context.code.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line.includes('import') && !line.includes('from')) continue;\n\n DIRECT_PRODUCT_CARD_IMPORT_RE.lastIndex = 0;\n if (DIRECT_PRODUCT_CARD_IMPORT_RE.test(line)) {\n violations.push({\n rule: 'no-direct-product-card-import',\n message: `Direct import of ProductCard bypasses the registry override mechanism.`,\n line: i + 1,\n recommendation: `Import ProductCard from barrel export '../product' or use registry override to customize.`,\n });\n }\n }\n\n return violations;\n },\n};\n","/**\n * Hook expectations registry for the require-page-hooks rule.\n *\n * Maps route file patterns to their expected HookSlot/hookRegistry entries.\n * Used by the Vite best-practices plugin to validate that theme developers\n * preserve customization points when overriding route pages.\n */\n\nexport interface ExpectedHook {\n hook: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface RouteHookEntry {\n pattern: RegExp;\n routeType: string;\n expectedHooks: ExpectedHook[];\n}\n\n/**\n * Registry of expected hooks per route type.\n * Each entry maps a file path pattern to the hooks that should be present.\n */\nexport const ROUTE_HOOK_MAP: RouteHookEntry[] = [\n // Product Page\n {\n pattern: /ProductPage|product\\.tsx$/,\n routeType: 'product',\n expectedHooks: [\n { hook: 'product:start', severity: 'warn' },\n { hook: 'product:details.start', severity: 'warn' },\n { hook: 'product:details.end', severity: 'warn' },\n { hook: 'product:single.description.start', severity: 'warn' },\n { hook: 'product:single.description', severity: 'warn' },\n { hook: 'product:single.description.end', severity: 'warn' },\n { hook: 'product:single.form.start', severity: 'warn' },\n { hook: 'product:single.form.end', severity: 'warn' },\n { hook: 'product:related.start', severity: 'warn' },\n { hook: 'product:related.end', severity: 'warn' },\n { hook: 'product:end', severity: 'warn' },\n ],\n },\n // Cart Page\n {\n pattern: /CartPage|cart\\.tsx$/,\n routeType: 'cart',\n expectedHooks: [\n { hook: 'cart:start', severity: 'warn' },\n { hook: 'cart:items.start', severity: 'warn' },\n { hook: 'cart:items.end', severity: 'warn' },\n { hook: 'cart:summary.start', severity: 'warn' },\n { hook: 'cart:summary.end', severity: 'warn' },\n { hook: 'cart:submit.start', severity: 'warn' },\n { hook: 'cart:submit.end', severity: 'warn' },\n { hook: 'cart:end', severity: 'warn' },\n ],\n },\n // Home Page\n {\n pattern: /routes\\/home\\/HomePage\\.tsx$/,\n routeType: 'home',\n expectedHooks: [\n { hook: 'home:start', severity: 'warn' },\n { hook: 'home:content', severity: 'warn' },\n { hook: 'home:end', severity: 'warn' },\n ],\n },\n // Blog Index\n {\n pattern: /BlogPage|blog\\.tsx$/,\n routeType: 'blog',\n expectedHooks: [\n { hook: 'blog:start', severity: 'warn' },\n { hook: 'blog:items.start', severity: 'warn' },\n { hook: 'blog:items.end', severity: 'warn' },\n { hook: 'blog:end', severity: 'warn' },\n ],\n },\n // Blog Single\n {\n pattern: /BlogSinglePage/,\n routeType: 'blog-single',\n expectedHooks: [\n { hook: 'blog:single.start', severity: 'warn' },\n { hook: 'blog:single.end', severity: 'warn' },\n { hook: 'blog:single.related.start', severity: 'warn' },\n { hook: 'blog:single.related.end', severity: 'warn' },\n ],\n },\n // Blog Category\n {\n pattern: /BlogCategoryPage/,\n routeType: 'blog-category',\n expectedHooks: [\n { hook: 'blog:category.start', severity: 'warn' },\n { hook: 'blog:category.end', severity: 'warn' },\n ],\n },\n // Blog Tag\n {\n pattern: /BlogTagPage/,\n routeType: 'blog-tag',\n expectedHooks: [\n { hook: 'blog:tag.start', severity: 'warn' },\n { hook: 'blog:tag.end', severity: 'warn' },\n ],\n },\n // Blog Author\n {\n pattern: /BlogAuthorPage/,\n routeType: 'blog-author',\n expectedHooks: [\n { hook: 'blog:author.start', severity: 'warn' },\n { hook: 'blog:author.end', severity: 'warn' },\n ],\n },\n // Product Listing\n {\n pattern: /ProductListPage\\.tsx$/,\n routeType: 'product-listing',\n expectedHooks: [\n { hook: 'product:list.start', severity: 'warn' },\n { hook: 'product:list.items.start', severity: 'warn' },\n { hook: 'product:list.items.end', severity: 'warn' },\n { hook: 'product:list.end', severity: 'warn' },\n ],\n },\n // Brands\n {\n pattern: /BrandsPage\\.tsx$/,\n routeType: 'brands',\n expectedHooks: [\n { hook: 'brands:index.items.start', severity: 'warn' },\n { hook: 'brands:index.items.end', severity: 'warn' },\n ],\n },\n // Thank You\n {\n pattern: /ThankYouPage\\.tsx$/,\n routeType: 'thank-you',\n expectedHooks: [\n { hook: 'thank-you:start', severity: 'warn' },\n { hook: 'thank-you:items.start', severity: 'warn' },\n { hook: 'thank-you:items.end', severity: 'warn' },\n { hook: 'thank-you:end', severity: 'warn' },\n ],\n },\n // Not Found\n {\n pattern: /not-found/,\n routeType: 'not-found',\n expectedHooks: [\n { hook: 'notfound:start', severity: 'warn' },\n { hook: 'notfound:content', severity: 'warn' },\n { hook: 'notfound:end', severity: 'warn' },\n ],\n },\n // Account - Profile\n {\n pattern: /ProfilePage\\.tsx$/,\n routeType: 'customer-profile',\n expectedHooks: [\n { hook: 'customer:profile.start', severity: 'warn' },\n { hook: 'customer:profile.form.start', severity: 'warn' },\n { hook: 'customer:profile.form.end', severity: 'warn' },\n { hook: 'customer:profile.end', severity: 'warn' },\n ],\n },\n // Account - Orders\n {\n pattern: /OrdersPage\\.tsx$/,\n routeType: 'customer-orders',\n expectedHooks: [\n { hook: 'customer:orders.index.items.start', severity: 'warn' },\n { hook: 'customer:orders.index.items.end', severity: 'warn' },\n ],\n },\n // Account - Order Single\n {\n pattern: /OrderSinglePage\\.tsx$/,\n routeType: 'customer-order-single',\n expectedHooks: [\n { hook: 'customer:orders.single.details.start', severity: 'warn' },\n { hook: 'customer:orders.single.details.end', severity: 'warn' },\n ],\n },\n // Account - Notifications\n {\n pattern: /NotificationsPage\\.tsx$/,\n routeType: 'customer-notifications',\n expectedHooks: [\n { hook: 'customer:notifications.items.start', severity: 'warn' },\n { hook: 'customer:notifications.items.end', severity: 'warn' },\n ],\n },\n // Account - Wallet\n {\n pattern: /WalletPage\\.tsx$/,\n routeType: 'customer-wallet',\n expectedHooks: [\n { hook: 'customer:wallet.transactions.start', severity: 'warn' },\n { hook: 'customer:wallet.transactions.end', severity: 'warn' },\n ],\n },\n // Account - Settings\n {\n pattern: /SettingsPage\\.tsx$/,\n routeType: 'customer-settings',\n expectedHooks: [\n { hook: 'customer:settings.start', severity: 'warn' },\n { hook: 'customer:settings.end', severity: 'warn' },\n ],\n },\n // Account - Wishlist\n {\n pattern: /WishlistPage\\.tsx$/,\n routeType: 'customer-wishlist',\n expectedHooks: [\n { hook: 'customer:wishlist.items.start', severity: 'warn' },\n { hook: 'customer:wishlist.items.end', severity: 'warn' },\n ],\n },\n];\n\n/**\n * Get expected hooks for a given file path.\n * Returns null if the file doesn't match any route pattern.\n */\nexport function getExpectedHooks(filePath: string): ExpectedHook[] | null {\n for (const entry of ROUTE_HOOK_MAP) {\n if (entry.pattern.test(filePath)) {\n return entry.expectedHooks;\n }\n }\n return null;\n}\n","/**\n * require-page-hooks rule for the best-practices Vite plugin.\n *\n * Validates that route files include expected HookSlot components or\n * hookRegistry.register() calls to preserve SDK customization points.\n *\n * Uses oxc-parser for AST-based detection to avoid false-positives\n * from comments and string literals.\n */\n\nimport { parseSync } from 'oxc-parser';\nimport { resolve, dirname } from 'path';\nimport { existsSync, readFileSync, statSync } from 'fs';\nimport type { Rule, RuleContext, Violation } from '../types';\nimport { getExpectedHooks } from '../hooks-registry';\n\n/** Map HookName enum constants to their string values */\nconst HOOK_NAME_ENUM_TO_STRING: Record<string, string> = {\n BODY_START: 'body:start',\n BODY_END: 'body:end',\n BODY_INNER: 'body:inner',\n HEAD_START: 'head:start',\n HEAD_END: 'head:end',\n HEAD_INNER: 'head:inner',\n HEADER_START: 'header:start',\n HEADER_END: 'header:end',\n FOOTER_START: 'footer:start',\n FOOTER_END: 'footer:end',\n PRODUCT_DESCRIPTION_START: 'product:single.description.start',\n PRODUCT_DESCRIPTION: 'product:single.description',\n PRODUCT_DESCRIPTION_END: 'product:single.description.end',\n PRODUCT_FORM_START: 'product:single.form.start',\n PRODUCT_FORM_END: 'product:single.form.end',\n CART_ITEMS_START: 'cart:items.start',\n CART_ITEMS_END: 'cart:items.end',\n CART_SUMMARY_START: 'cart:summary.start',\n CART_SUMMARY_END: 'cart:summary.end',\n SEARCH_START: 'search:start',\n SEARCH_ITEMS_START: 'search:items.start',\n SEARCH_ITEMS_END: 'search:items.end',\n SEARCH_END: 'search:end',\n HOMEPAGE_SLIDER: 'homepage:slider',\n HOMEPAGE_BANNERS: 'homepage:banners',\n HOMEPAGE_FEATURED: 'homepage:featured',\n};\n\n/** Check if path is in node_modules */\nfunction isNodeModules(path: string): boolean {\n return path.includes('node_modules');\n}\n\n/** Check if import is local (relative path) */\nfunction isLocalImport(importPath: string): boolean {\n return importPath.startsWith('.') || importPath.startsWith('/');\n}\n\n/** Check if file imports route components from theme-engine package */\nfunction importsThemeEngineRoutes(code: string): boolean {\n // Match imports like: import { Cart } from '@salla.sa/twilight-theme-engine/routes/cart'\n const importRegex =\n /import\\s+.*\\s+from\\s+['\"]@salla\\.sa\\/twilight-theme-engine\\/routes\\/[^'\"]+['\"]/;\n return importRegex.test(code);\n}\n\n/** Resolve import path to absolute file path */\nfunction resolveImportPath(importer: string, importPath: string): string | null {\n const dir = dirname(importer);\n const resolved = resolve(dir, importPath);\n\n // Try exact path first (must be a file, not a directory)\n if (existsSync(resolved)) {\n try {\n if (statSync(resolved).isFile()) {\n return resolved;\n }\n } catch {\n // Ignore stat errors\n }\n }\n\n // Try with extensions\n for (const ext of ['.ts', '.tsx', '.js', '.jsx']) {\n const withExt = resolved + ext;\n if (existsSync(withExt)) return withExt;\n }\n\n // Try index files\n for (const index of ['index.ts', 'index.tsx', 'index.js', 'index.jsx']) {\n const indexPath = resolve(resolved, index);\n if (existsSync(indexPath)) return indexPath;\n }\n\n return null;\n}\n\n/** Extract hook name from JSX attribute value */\nfunction extractHookNameFromAttrValue(attrValue: unknown): string | null {\n if (!attrValue || typeof attrValue !== 'object') return null;\n\n const value = attrValue as Record<string, unknown>;\n\n // String literal: name=\"product:start\" (oxc uses 'Literal' type)\n if (\n (value.type === 'Literal' || value.type === 'StringLiteral') &&\n typeof value.value === 'string'\n ) {\n return value.value;\n }\n\n // JSX expression container: name={HookName.BODY_END}\n if (value.type === 'JSXExpressionContainer') {\n const expr = value.expression as Record<string, unknown>;\n if (expr?.type === 'MemberExpression') {\n const object = expr.object as Record<string, unknown>;\n const property = expr.property as Record<string, unknown>;\n if (\n object?.type === 'Identifier' &&\n object.name === 'HookName' &&\n property?.type === 'Identifier' &&\n typeof property.name === 'string'\n ) {\n return HOOK_NAME_ENUM_TO_STRING[property.name] || null;\n }\n }\n }\n\n return null;\n}\n\n/** Extract hooks from AST node recursively */\nexport function extractHooksFromAst(node: unknown, hooks: Set<string>): void {\n if (!node || typeof node !== 'object') return;\n\n const obj = node as Record<string, unknown>;\n\n // Check for JSXElement with HookSlot\n if (obj.type === 'JSXElement') {\n const opening = obj.openingElement as Record<string, unknown>;\n if (opening && typeof opening === 'object') {\n const name = opening.name as Record<string, unknown>;\n if (name?.type === 'JSXIdentifier' && name.name === 'HookSlot') {\n const attributes = opening.attributes as unknown[];\n if (Array.isArray(attributes)) {\n for (const attr of attributes) {\n if (attr && typeof attr === 'object') {\n const attrObj = attr as Record<string, unknown>;\n if (attrObj.type === 'JSXAttribute') {\n const attrName = attrObj.name as Record<string, unknown>;\n if (attrName?.type === 'JSXIdentifier' && attrName.name === 'name') {\n const hookName = extractHookNameFromAttrValue(attrObj.value);\n if (hookName) hooks.add(hookName);\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Check for hookRegistry.register() calls\n if (obj.type === 'CallExpression') {\n const callee = obj.callee as Record<string, unknown>;\n if (callee?.type === 'MemberExpression') {\n const object = callee.object as Record<string, unknown>;\n const property = callee.property as Record<string, unknown>;\n if (\n object?.type === 'Identifier' &&\n object.name === 'hookRegistry' &&\n property?.type === 'Identifier' &&\n property.name === 'register'\n ) {\n const args = obj.arguments as unknown[];\n if (Array.isArray(args) && args.length > 0) {\n const firstArg = args[0] as Record<string, unknown>;\n // Handle both direct expression and wrapped argument\n const expr = (firstArg.expression || firstArg) as Record<string, unknown>;\n if (\n (expr?.type === 'Literal' || expr?.type === 'StringLiteral') &&\n typeof expr.value === 'string'\n ) {\n hooks.add(expr.value);\n } else if (expr?.type === 'MemberExpression') {\n const argObject = expr.object as Record<string, unknown>;\n const argProperty = expr.property as Record<string, unknown>;\n if (\n argObject?.type === 'Identifier' &&\n argObject.name === 'HookName' &&\n argProperty?.type === 'Identifier' &&\n typeof argProperty.name === 'string'\n ) {\n const hookName = HOOK_NAME_ENUM_TO_STRING[argProperty.name];\n if (hookName) hooks.add(hookName);\n }\n }\n }\n }\n }\n }\n\n // Recurse into children\n for (const key of Object.keys(obj)) {\n if (key === 'loc' || key === 'range' || key === 'start' || key === 'end') continue;\n const child = obj[key];\n if (Array.isArray(child)) {\n for (const item of child) {\n extractHooksFromAst(item, hooks);\n }\n } else if (typeof child === 'object' && child !== null) {\n extractHooksFromAst(child, hooks);\n }\n }\n}\n\n/** Recursively find dynamic import() calls in AST node */\nfunction findDynamicImportsInNode(\n node: unknown,\n filePath: string,\n visited: Set<string>,\n hooks: Set<string>\n): void {\n if (!node || typeof node !== 'object') return;\n\n const obj = node as Record<string, unknown>;\n\n // Check for ImportExpression (oxc-parser uses this for dynamic import())\n if (obj.type === 'ImportExpression') {\n const source = obj.source as Record<string, unknown>;\n if (\n (source?.type === 'Literal' || source?.type === 'StringLiteral') &&\n typeof source.value === 'string'\n ) {\n const importPath = source.value;\n if (isLocalImport(importPath)) {\n const resolved = resolveImportPath(filePath, importPath);\n if (resolved) {\n const nestedHooks = findHooksInFile(resolved, visited);\n for (const hook of nestedHooks) {\n hooks.add(hook);\n }\n }\n }\n }\n }\n\n // Recurse into children (skip location metadata)\n for (const key of Object.keys(obj)) {\n if (key === 'loc' || key === 'range' || key === 'start' || key === 'end') continue;\n const child = obj[key];\n if (Array.isArray(child)) {\n for (const item of child) {\n findDynamicImportsInNode(item, filePath, visited, hooks);\n }\n } else if (typeof child === 'object' && child !== null) {\n findDynamicImportsInNode(child, filePath, visited, hooks);\n }\n }\n}\n\n/** Find all hooks in a file using oxc-parser, tracing local imports */\nexport function findHooksInFile(filePath: string, visited: Set<string> = new Set()): Set<string> {\n if (visited.has(filePath)) return new Set();\n if (isNodeModules(filePath)) return new Set();\n\n visited.add(filePath);\n const hooks = new Set<string>();\n\n try {\n const code = readFileSync(filePath, 'utf-8');\n const ast = parseSync(filePath, code, {\n sourceType: 'module',\n preserveParens: false,\n });\n\n // Extract hooks from this file\n extractHooksFromAst(ast.program, hooks);\n\n // Trace local imports (static and dynamic)\n const body = (ast.program as unknown as Record<string, unknown>)?.body;\n if (Array.isArray(body)) {\n for (const stmt of body) {\n if (stmt && typeof stmt === 'object') {\n const stmtObj = stmt as Record<string, unknown>;\n\n // Handle static imports: import X from './file'\n if (stmtObj.type === 'ImportDeclaration') {\n const source = stmtObj.source as Record<string, unknown>;\n if (\n (source?.type === 'Literal' || source?.type === 'StringLiteral') &&\n typeof source.value === 'string'\n ) {\n const importPath = source.value;\n if (isLocalImport(importPath)) {\n const resolved = resolveImportPath(filePath, importPath);\n if (resolved) {\n const nestedHooks = findHooksInFile(resolved, visited);\n for (const hook of nestedHooks) {\n hooks.add(hook);\n }\n }\n }\n }\n }\n\n // Handle re-exports: export { X } from './file'\n if (stmtObj.type === 'ExportNamedDeclaration') {\n const source = stmtObj.source as Record<string, unknown>;\n if (\n source &&\n (source.type === 'Literal' || source.type === 'StringLiteral') &&\n typeof source.value === 'string'\n ) {\n const importPath = source.value;\n if (isLocalImport(importPath)) {\n const resolved = resolveImportPath(filePath, importPath);\n if (resolved) {\n const nestedHooks = findHooksInFile(resolved, visited);\n for (const hook of nestedHooks) {\n hooks.add(hook);\n }\n }\n }\n }\n }\n\n // Handle dynamic imports: lazy(() => import('./file'))\n // Walk the entire statement to find CallExpression with import()\n findDynamicImportsInNode(stmtObj, filePath, visited, hooks);\n }\n }\n }\n } catch {\n // Skip files that can't be parsed\n }\n\n return hooks;\n}\n\n/** Get line number for violation reporting */\nfunction getLineForHook(code: string, hookName: string): number {\n const lines = code.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].includes(hookName)) {\n return i + 1;\n }\n }\n return 1;\n}\n\nexport const requirePageHooks: Rule = {\n name: 'require-page-hooks',\n description:\n 'Ensure route files include expected HookSlot or hookRegistry entries for customization.',\n severity: 'warn',\n\n check(context: RuleContext): Violation[] {\n const violations: Violation[] = [];\n const expectedHooks = getExpectedHooks(context.relativeId);\n\n if (!expectedHooks) return violations;\n\n // Skip validation for theme-custom route files that import from theme-engine\n // These files use pre-built route components that already have hooks\n if (importsThemeEngineRoutes(context.code)) {\n return violations;\n }\n\n // Find all hooks in this file and its local imports\n // Try file-based detection first, fall back to code-based detection\n let foundHooks: Set<string>;\n try {\n foundHooks = findHooksInFile(context.id);\n } catch {\n foundHooks = new Set();\n }\n\n // If file-based detection found nothing, parse the code directly\n if (foundHooks.size === 0) {\n try {\n const ast = parseSync(context.id, context.code, {\n sourceType: 'module',\n preserveParens: false,\n });\n extractHooksFromAst(ast.program, foundHooks);\n } catch {\n // If parsing fails, continue with empty set\n }\n }\n\n // Check for missing hooks\n for (const expected of expectedHooks) {\n if (!foundHooks.has(expected.hook)) {\n violations.push({\n rule: 'require-page-hooks',\n message: `Missing expected hook '${expected.hook}' in ${context.relativeId}`,\n line: getLineForHook(context.code, 'HookSlot') || 1,\n recommendation: `Add <HookSlot name=\"${expected.hook}\" /> or hookRegistry.register('${expected.hook}', ...) to enable theme customization.`,\n });\n }\n }\n\n return violations;\n },\n};\n","import type { Rule } from '../types';\nimport { noDeepComponentImport } from './no-deep-component-import';\nimport { noWindowLocationReload } from './no-window-location-reload';\nimport { noManualDom } from './no-manual-dom';\nimport { noImgWithoutDimensions } from './no-img-without-dimensions';\nimport { noDirectProductCardImport } from './no-direct-product-card-import';\nimport { requirePageHooks } from './require-page-hooks';\n\n/** All built-in rules. Add new rules to this array. */\nexport const builtinRules: Rule[] = [\n noDeepComponentImport,\n noWindowLocationReload,\n noManualDom,\n noImgWithoutDimensions,\n noDirectProductCardImport,\n requirePageHooks,\n];\n","import type { Severity, Violation } from './types';\n\nconst COLORS = {\n reset: '\\x1b[0m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n cyan: '\\x1b[36m',\n dim: '\\x1b[2m',\n bold: '\\x1b[1m',\n green: '\\x1b[32m',\n};\n\nconst SEVERITY_LABEL: Record<Severity, string> = {\n error: `${COLORS.red}ERROR${COLORS.reset}`,\n warn: `${COLORS.yellow}WARN${COLORS.reset}`,\n info: `${COLORS.cyan}INFO${COLORS.reset}`,\n};\n\nconst SEVERITY_ICON: Record<Severity, string> = {\n error: `${COLORS.red}\\u2718${COLORS.reset}`,\n warn: `${COLORS.yellow}\\u26A0${COLORS.reset}`,\n info: `${COLORS.cyan}\\u2139${COLORS.reset}`,\n};\n\nexport function formatViolation(\n violation: Violation,\n severity: Severity,\n relativeId: string\n): string {\n const loc = `${COLORS.dim}${relativeId}:${violation.line}${COLORS.reset}`;\n const icon = SEVERITY_ICON[severity];\n const label = SEVERITY_LABEL[severity];\n const rule = `${COLORS.dim}(${violation.rule})${COLORS.reset}`;\n\n return [\n ` ${icon} ${label} ${rule}`,\n ` ${loc}`,\n ` ${violation.message}`,\n ` ${COLORS.green}\\u2192 ${violation.recommendation}${COLORS.reset}`,\n ].join('\\n');\n}\n\nexport function formatSummary(errors: number, warnings: number, infos: number): string {\n const parts: string[] = [];\n if (errors > 0) parts.push(`${COLORS.red}${errors} error(s)${COLORS.reset}`);\n if (warnings > 0) parts.push(`${COLORS.yellow}${warnings} warning(s)${COLORS.reset}`);\n if (infos > 0) parts.push(`${COLORS.cyan}${infos} info(s)${COLORS.reset}`);\n return `${COLORS.bold}[twilight:best-practices]${COLORS.reset} ${parts.join(', ')}`;\n}\n","import type { Plugin } from 'vite';\nimport type { BestPracticesOptions, Severity, Violation } from './types';\nimport { builtinRules } from './rules';\nimport { formatViolation, formatSummary } from './reporter';\nimport { createHash } from 'crypto';\nimport { relative } from 'path';\n\n/** Hash of the last-seen source per file — skip unchanged files. */\nconst fileHashCache = new Map<string, string>();\n\nfunction hash(content: string): string {\n return createHash('md5').update(content).digest('hex');\n}\n\nfunction matchesGlob(id: string, patterns: string[]): boolean {\n return patterns.some((p) => {\n if (/[\\\\^$|+?(){}[\\]\\\\\\\\]/.test(p)) return false;\n const regex = new RegExp(\n '^' +\n p\n .replace(/\\./g, '\\\\.')\n .replace(/\\*\\*/g, '\\0GLOBSTAR\\0')\n .replace(/\\*/g, '[^/]*')\n .replace(/\\0GLOBSTAR\\0/g, '.*') +\n '$'\n );\n return regex.test(id);\n });\n}\n\nexport function bestPracticesPlugin(options: BestPracticesOptions = {}): Plugin {\n const {\n include = ['**/*.ts', '**/*.tsx'],\n exclude = ['**/node_modules/**', '**/dist/**', '**/*.d.ts', '**/.twilight/**'],\n disabledRules = [],\n severityOverrides = {},\n browserConsole = false,\n } = options;\n\n const enabledRules = builtinRules.filter((r) => !disabledRules.includes(r.name));\n let projectRoot = '';\n\n return {\n name: 'twilight:best-practices',\n apply: 'build',\n enforce: 'pre',\n\n configResolved(config) {\n projectRoot = config.root;\n },\n\n transform(code, id) {\n if (!/\\.[jt]sx?$/.test(id)) return null;\n\n const relativeId = relative(projectRoot, id);\n\n // Include/exclude filtering\n if (!matchesGlob(relativeId, include)) return null;\n if (matchesGlob(relativeId, exclude)) return null;\n\n // Skip unchanged files\n const h = hash(code);\n if (fileHashCache.get(id) === h) return null;\n fileHashCache.set(id, h);\n\n const context = { code, id, relativeId };\n const allViolations: Array<{ violation: Violation; severity: Severity }> = [];\n\n for (const rule of enabledRules) {\n const severity = severityOverrides[rule.name] ?? rule.severity;\n const violations = rule.check(context);\n for (const v of violations) {\n allViolations.push({ violation: v, severity });\n }\n }\n\n if (allViolations.length === 0) return null;\n\n // Print to Vite terminal\n const counts = { error: 0, warn: 0, info: 0 };\n const lines: string[] = [];\n for (const { violation, severity } of allViolations) {\n counts[severity]++;\n lines.push(formatViolation(violation, severity, relativeId));\n }\n\n console.error('\\n' + lines.join('\\n'));\n console.error(formatSummary(counts.error, counts.warn, counts.info) + '\\n');\n\n // Optionally inject browser console warnings\n if (browserConsole && allViolations.length > 0) {\n const consoleStatements = allViolations\n .map(({ violation, severity }) => {\n const method = severity === 'error' ? 'error' : severity === 'warn' ? 'warn' : 'info';\n const msg = `[twilight:${violation.rule}] ${violation.message}\\\\n → ${violation.recommendation}\\\\n at ${relativeId}:${violation.line}`;\n return `console.${method}(${JSON.stringify(msg)});`;\n })\n .join('\\n');\n\n return {\n code: code + '\\n' + consoleStatements,\n map: null,\n };\n }\n\n return null;\n },\n };\n}\n","import type { Plugin, AliasOptions } from 'vite';\nimport { fileURLToPath } from 'url';\nimport { existsSync } from 'node:fs';\nimport { dirname, resolve } from 'path';\n\n// Only the monorepo checkout has src/ next to dist/ — a registry install ships\n// dist/ alone, and there the package.json exports map already resolves every\n// subpath, so no aliasing is needed (null disables the plugin).\nfunction findEngineSrc(startDir: string): string | null {\n let dir = startDir;\n for (let i = 0; i < 6; i++) {\n const candidate = resolve(dir, 'src');\n if (existsSync(resolve(candidate, 'index.ts'))) return candidate;\n dir = resolve(dir, '..');\n }\n return null;\n}\n\nconst engineSrc = findEngineSrc(dirname(fileURLToPath(import.meta.url)));\n\nconst PKG = '@salla.sa/twilight-theme-engine';\nconst ESCAPED_PKG = PKG.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst SAFE_SUBPATH = /^[a-zA-Z0-9/_-]+$/;\n\nfunction pkgPattern(subpath: string): RegExp {\n if (subpath && !SAFE_SUBPATH.test(subpath))\n throw new Error(`Invalid package subpath: ${subpath}`);\n return new RegExp(`^${ESCAPED_PKG}${subpath ? '/' + subpath : ''}$`);\n}\n\nconst ALIASES: AliasOptions = !engineSrc\n ? []\n : [\n { find: pkgPattern('i18n'), replacement: resolve(engineSrc, 'providers/i18n.ts') },\n { find: pkgPattern('hooks'), replacement: resolve(engineSrc, 'hooks/index.ts') },\n {\n find: pkgPattern('hooks/useAsyncFn'),\n replacement: resolve(engineSrc, 'hooks/useAsyncFn.ts'),\n },\n { find: pkgPattern('hooks/useStore'), replacement: resolve(engineSrc, 'hooks/useStore.ts') },\n { find: pkgPattern('hooks/useTheme'), replacement: resolve(engineSrc, 'hooks/useTheme.ts') },\n { find: pkgPattern('hooks/useMoney'), replacement: resolve(engineSrc, 'hooks/useMoney.tsx') },\n { find: pkgPattern('hooks/useAsset'), replacement: resolve(engineSrc, 'hooks/useAsset.ts') },\n {\n find: pkgPattern('hooks/useProduct'),\n replacement: resolve(engineSrc, 'hooks/useProduct.ts'),\n },\n {\n find: pkgPattern('hooks/useDocumentClass'),\n replacement: resolve(engineSrc, 'hooks/useDocumentClass.ts'),\n },\n {\n find: pkgPattern('hooks/useCoupon'),\n replacement: resolve(engineSrc, 'hooks/useCoupon.ts'),\n },\n {\n find: pkgPattern('hooks/useWishlist'),\n replacement: resolve(engineSrc, 'hooks/useWishlist.ts'),\n },\n {\n find: pkgPattern('hooks/useBlogLike'),\n replacement: resolve(engineSrc, 'hooks/useBlogLike.ts'),\n },\n {\n find: pkgPattern('hooks/useComments'),\n replacement: resolve(engineSrc, 'hooks/useComments.ts'),\n },\n {\n find: pkgPattern('hooks/HookRegistry'),\n replacement: resolve(engineSrc, 'hooks/HookRegistry.ts'),\n },\n { find: pkgPattern('hooks/HookSlot'), replacement: resolve(engineSrc, 'hooks/HookSlot.tsx') },\n { find: pkgPattern('hooks/useHook'), replacement: resolve(engineSrc, 'hooks/useHook.ts') },\n { find: pkgPattern('hooks/useGtm'), replacement: resolve(engineSrc, 'hooks/useGtm.ts') },\n { find: pkgPattern('contexts'), replacement: resolve(engineSrc, 'contexts/index.ts') },\n { find: pkgPattern('utils'), replacement: resolve(engineSrc, 'utils/index.ts') },\n { find: pkgPattern('utils/baseHead'), replacement: resolve(engineSrc, 'utils/baseHead.ts') },\n { find: pkgPattern('utils/head'), replacement: resolve(engineSrc, 'utils/head.ts') },\n { find: pkgPattern('types'), replacement: resolve(engineSrc, 'types/index.ts') },\n { find: pkgPattern('types/hooks'), replacement: resolve(engineSrc, 'types/hooks.ts') },\n { find: pkgPattern('eslint'), replacement: resolve(engineSrc, 'eslint/index.ts') },\n { find: pkgPattern('vite'), replacement: resolve(engineSrc, 'vite/index.ts') },\n { find: pkgPattern('routes'), replacement: resolve(engineSrc, 'routes/index.ts') },\n { find: pkgPattern('routes/home'), replacement: resolve(engineSrc, 'routes/home/index.tsx') },\n { find: pkgPattern('routes/cart'), replacement: resolve(engineSrc, 'routes/cart/index.tsx') },\n {\n find: pkgPattern('routes/product'),\n replacement: resolve(engineSrc, 'routes/product/index.tsx'),\n },\n {\n find: pkgPattern('routes/product-listing'),\n replacement: resolve(engineSrc, 'routes/product-listing/index.tsx'),\n },\n { find: pkgPattern('routes/blog'), replacement: resolve(engineSrc, 'routes/blog/index.tsx') },\n {\n find: pkgPattern('routes/brands'),\n replacement: resolve(engineSrc, 'routes/brands/index.tsx'),\n },\n {\n find: pkgPattern('routes/account'),\n replacement: resolve(engineSrc, 'routes/account/index.tsx'),\n },\n {\n find: pkgPattern('routes/account/orders'),\n replacement: resolve(engineSrc, 'routes/account/orders/index.tsx'),\n },\n {\n find: pkgPattern('routes/loyalty'),\n replacement: resolve(engineSrc, 'routes/loyalty/index.tsx'),\n },\n { find: pkgPattern('routes/page'), replacement: resolve(engineSrc, 'routes/page/index.tsx') },\n {\n find: pkgPattern('routes/testimonials'),\n replacement: resolve(engineSrc, 'routes/testimonials/index.tsx'),\n },\n {\n find: pkgPattern('routes/thank-you'),\n replacement: resolve(engineSrc, 'routes/thank-you/index.tsx'),\n },\n {\n find: pkgPattern('routes/seo-redirects'),\n replacement: resolve(engineSrc, 'routes/seo-redirects.ts'),\n },\n { find: pkgPattern('skeleton'), replacement: resolve(engineSrc, 'skeleton.ts') },\n { find: pkgPattern('tanstack'), replacement: resolve(engineSrc, 'tanstack/index.ts') },\n { find: pkgPattern('nextjs'), replacement: resolve(engineSrc, 'nextjs/index.ts') },\n { find: pkgPattern('dom'), replacement: resolve(engineSrc, 'dom/index.ts') },\n {\n find: pkgPattern('components/modal'),\n replacement: resolve(engineSrc, 'components/modal/index.ts'),\n },\n {\n find: pkgPattern('components/drawer'),\n replacement: resolve(engineSrc, 'components/drawer/index.ts'),\n },\n {\n find: pkgPattern('components/dropdown'),\n replacement: resolve(engineSrc, 'components/dropdown/index.ts'),\n },\n {\n find: pkgPattern('components/collapse'),\n replacement: resolve(engineSrc, 'components/collapse/index.ts'),\n },\n {\n find: pkgPattern('components/toast'),\n replacement: resolve(engineSrc, 'components/toast/index.ts'),\n },\n {\n find: pkgPattern('components/cart'),\n replacement: resolve(engineSrc, 'components/cart/index.ts'),\n },\n {\n find: pkgPattern('components/product'),\n replacement: resolve(engineSrc, 'components/product/index.ts'),\n },\n {\n find: pkgPattern('components/layout'),\n replacement: resolve(engineSrc, 'components/layout/index.ts'),\n },\n {\n find: pkgPattern('components/home'),\n replacement: resolve(engineSrc, 'components/home/index.ts'),\n },\n {\n find: pkgPattern('components/common'),\n replacement: resolve(engineSrc, 'components/common/index.ts'),\n },\n { find: pkgPattern('modal'), replacement: resolve(engineSrc, 'components/modal/index.ts') },\n { find: pkgPattern('drawer'), replacement: resolve(engineSrc, 'components/drawer/index.ts') },\n {\n find: pkgPattern('dropdown'),\n replacement: resolve(engineSrc, 'components/dropdown/index.ts'),\n },\n {\n find: pkgPattern('collapse'),\n replacement: resolve(engineSrc, 'components/collapse/index.ts'),\n },\n { find: pkgPattern('toast'), replacement: resolve(engineSrc, 'components/toast/index.ts') },\n { find: pkgPattern('cart'), replacement: resolve(engineSrc, 'components/cart/index.ts') },\n {\n find: pkgPattern('product'),\n replacement: resolve(engineSrc, 'components/product/index.ts'),\n },\n { find: pkgPattern('layout'), replacement: resolve(engineSrc, 'components/layout/index.ts') },\n { find: pkgPattern('home'), replacement: resolve(engineSrc, 'components/home/index.ts') },\n { find: pkgPattern('common'), replacement: resolve(engineSrc, 'components/common/index.ts') },\n { find: pkgPattern('providers'), replacement: resolve(engineSrc, 'providers/index.ts') },\n { find: pkgPattern('api/types'), replacement: resolve(engineSrc, 'api/types.ts') },\n { find: pkgPattern('api/client'), replacement: resolve(engineSrc, 'api/client.ts') },\n { find: pkgPattern('api/store'), replacement: resolve(engineSrc, 'api/store.ts') },\n {\n find: pkgPattern('api/translations'),\n replacement: resolve(engineSrc, 'api/translations.ts'),\n },\n { find: pkgPattern('api/cart'), replacement: resolve(engineSrc, 'api/cart.ts') },\n { find: pkgPattern('api/product'), replacement: resolve(engineSrc, 'api/product.ts') },\n { find: pkgPattern('api/home'), replacement: resolve(engineSrc, 'api/home.ts') },\n { find: pkgPattern('api/brands'), replacement: resolve(engineSrc, 'api/brands.ts') },\n { find: pkgPattern('api/loyalty'), replacement: resolve(engineSrc, 'api/loyalty.ts') },\n { find: pkgPattern('api/order'), replacement: resolve(engineSrc, 'api/order.ts') },\n { find: pkgPattern('api/category'), replacement: resolve(engineSrc, 'api/category.ts') },\n { find: pkgPattern('api/page'), replacement: resolve(engineSrc, 'api/page.ts') },\n { find: pkgPattern('api/menu'), replacement: resolve(engineSrc, 'api/menu.ts') },\n {\n find: pkgPattern('api/notification'),\n replacement: resolve(engineSrc, 'api/notification.ts'),\n },\n { find: pkgPattern('api/wishlist'), replacement: resolve(engineSrc, 'api/wishlist.ts') },\n { find: pkgPattern('api/profile'), replacement: resolve(engineSrc, 'api/profile.ts') },\n {\n find: pkgPattern('tracking'),\n replacement: resolve(engineSrc, 'components/tracking/index.ts'),\n },\n { find: pkgPattern('store'), replacement: resolve(engineSrc, 'components/store/index.ts') },\n { find: pkgPattern(''), replacement: resolve(engineSrc, 'index.ts') },\n ];\n\nexport function packageAliasesPlugin(): Plugin {\n return {\n name: 'twilight:package-aliases',\n enforce: 'pre',\n config() {\n return {\n resolve: {\n alias: ALIASES,\n },\n };\n },\n };\n}\n","/**\n * Template for $locale.tsx route file\n * Locale wrapper — validates optional locale prefix and gates on is_multilingual.\n *\n * Uses TanStack Router's optional path parameter syntax /{-$locale}:\n * - /{-$locale}/cart matches both /cart and /ar/cart\n *\n * beforeLoad: validates the locale format when present.\n * loader: checks store.settings.is_multilingual and redirects accordingly.\n *\n * Note: loader and head are in __root.tsx for better SSR support.\n * Note: RouteDocumentSync is now in TwilightProvider for automatic route class syncing.\n */\nexport function getLocaleWrapperTemplate(baseRoutesImport: string): string {\n const mainPkg = baseRoutesImport.replace(/\\/routes$/, '');\n return `// @auto-generated\n// @ts-nocheck — params types are generated by TanStack Router on pnpm dev\nimport { createFileRoute, Outlet, redirect } from '@tanstack/react-router';\nimport { FALLBACK_LOCALE, isLocale } from '${baseRoutesImport}';\nimport { store } from '${mainPkg}/api/store';\n\nexport const Route = createFileRoute('/{-$locale}')({\n beforeLoad: ({ params, location }) => {\n const { locale } = params;\n if (!locale) return;\n if (!isLocale(locale)) {\n throw redirect({ to: \\`/\\${FALLBACK_LOCALE}\\${location.pathname}\\`, replace: true });\n }\n },\n loader: async ({ params, context, location }) => {\n const settings = await context.queryClient.ensureQueryData(store.queries.settings());\n const isMultilingual = settings?.store?.settings?.is_multilingual ?? true;\n\n if (!isMultilingual && params.locale) {\n throw redirect({\n to: location.pathname.slice(\\`/\\${params.locale}\\`.length) || '/',\n replace: true,\n });\n }\n if (isMultilingual && !params.locale) {\n throw redirect({ to: \\`/\\${FALLBACK_LOCALE}\\${location.pathname}\\`, replace: true });\n }\n },\n component: () => <Outlet />,\n});\n`;\n}\n","/**\n * Template for redirect.$type.$id.tsx route file (/{-$locale}/redirect/$type/$id)\n * Handles custom link redirects from backend. Works with and without locale prefix.\n */\nexport function getRedirectTemplate(baseRoutesImport: string): string {\n return `// @auto-generated\n// @ts-nocheck — params types are generated by TanStack Router on pnpm dev\nimport { createFileRoute, redirect } from '@tanstack/react-router';\nimport { FALLBACK_LOCALE } from '${baseRoutesImport}';\n\ntype RedirectType =\n | 'products'\n | 'categories'\n | 'brands'\n | 'pages'\n | 'blog_articles'\n | 'blog_categories'\n | 'products_tags'\n | 'reviews_link'\n | 'book_now';\n\nexport const Route = createFileRoute('/{-$locale}/redirect/$type/$id')({\n loader: async ({ params }) => {\n const { type, id } = params;\n const locale = params.locale || FALLBACK_LOCALE;\n\n let redirectPath: string;\n const slug = '-';\n\n switch (type as RedirectType) {\n case 'products':\n redirectPath = \\`/\\${locale}/\\${slug}/p\\${id}\\`;\n break;\n case 'categories':\n redirectPath = \\`/\\${locale}/\\${slug}/c\\${id}\\`;\n break;\n case 'brands':\n redirectPath = \\`/\\${locale}/brands/\\${id}\\`;\n break;\n case 'pages':\n redirectPath = \\`/\\${locale}/page-\\${id}\\`;\n break;\n case 'blog_articles':\n redirectPath = \\`/\\${locale}/blog/\\${slug}/a-\\${id}\\`;\n break;\n case 'blog_categories':\n redirectPath = \\`/\\${locale}/blog/\\${slug}/c-\\${id}\\`;\n break;\n case 'products_tags':\n redirectPath = \\`/\\${locale}/\\${slug}/tag-\\${id}\\`;\n break;\n case 'book_now':\n redirectPath = \\`/\\${locale}/landing/\\${id}\\`;\n break;\n case 'reviews_link':\n default:\n redirectPath = \\`/\\${locale}\\`;\n }\n\n throw redirect({ to: redirectPath });\n },\n});\n`;\n}\n","/**\n * Template for account.tsx layout route file (/{-$locale}/account)\n * Renders CustomerLayout with sidebar, breadcrumb, and user menu.\n * Child account routes render their content via <Outlet />.\n * The `page` data is read from the active child route's loader data.\n */\nexport function getAccountLayoutTemplate(baseRoutesImport: string): string {\n const mainPkg = baseRoutesImport.replace(/\\/routes$/, '');\n return `// @auto-generated\n// @ts-nocheck — params types are generated by TanStack Router on pnpm dev\nimport { createFileRoute, Outlet, useMatches } from '@tanstack/react-router';\nimport { useComponent } from '${mainPkg}';\nimport { CustomerLayout } from '${mainPkg}/components/layout';\nimport { CustomerLayoutSkeleton } from '${mainPkg}/skeleton';\n\nconst ACCOUNT_LAYOUT_PENDING_KEY = 'account:layout-pending';\n\nfunction AccountLayoutComponent() {\n const matches = useMatches();\n const page = matches.reduceRight(\n (found, m) => found ?? (m.loaderData?.page ? m.loaderData.page : null),\n null,\n );\n\n return (\n <CustomerLayout page={page}>\n <Outlet />\n </CustomerLayout>\n );\n}\n\nfunction AccountLayoutPendingComponent() {\n const AccountLayoutPending = useComponent(ACCOUNT_LAYOUT_PENDING_KEY);\n return AccountLayoutPending ? <AccountLayoutPending /> : <CustomerLayoutSkeleton />;\n}\n\nexport const Route = createFileRoute('/{-$locale}/account')({\n component: AccountLayoutComponent,\n pendingComponent: AccountLayoutPendingComponent,\n});\n`;\n}\n","/**\n * @fileoverview TanStack Router framework adapter\n *\n * This adapter provides integration with TanStack Router and React.\n * It handles plugin injection, route file generation, and custom routes\n * loading for TanStack Router.\n *\n * The virtual route config is built inline from the resolved routes,\n * eliminating the need for a physical `app/routes.ts` file in the theme project.\n *\n * =============================================================================\n * PRETTIER FORMATTING RULES - DO NOT MODIFY WITHOUT TESTING\n * =============================================================================\n *\n * Generated route files MUST match Prettier output to avoid format conflicts.\n * The formatting is built into the templates below - no runtime Prettier is used.\n *\n * The project uses these Prettier settings (.prettierrc):\n * - printWidth: 100\n * - tabWidth: 2\n * - singleQuote: true\n * - trailingComma: 'es5'\n *\n * CRITICAL FORMATTING RULES (ENCODED IN TEMPLATES):\n *\n * 1. LOADER CALL FORMATTING:\n * - If the full loader line fits within printWidth (100 chars), use INLINE format:\n * `loader: ({ params }): Promise<Type> => Module.loader({ ... })`\n *\n * - If the line exceeds printWidth, use MULTI-LINE format with 4-space indent:\n * ```\n * loader: ({ params }): Promise<Type> =>\n * Module.loader({ ... })\n * ```\n * IMPORTANT: The 4-space indent is computed as: 2 (object property) + 2 (arrow continuation)\n *\n * - For static params (offers, latest-products, most-sales-products), the object\n * properties must be expanded to multiple lines:\n * ```\n * loader: ({ params }): Promise<Type> =>\n * Module.loader({\n * params: {\n * source: '...',\n * title: '...',\n * slug: '...',\n * },\n * locale: params.locale,\n * })\n * ```\n *\n * 2. INDENTATION CALCULATION:\n * - Object property inside route config: 2 spaces\n * - Arrow function continuation: +2 spaces (total 4)\n * - Inside loader args object: +2 from continuation (total 6)\n *\n * 3. REDIRECT ROUTES:\n * - Same multi-line format with 4-space indent for arrow continuation\n *\n * WHEN MODIFYING THIS FILE:\n * 1. Run `pnpm build` after changes\n * 2. Run `pnpm dev` to regenerate routes\n * 3. Run `pnpm format` to verify no changes\n * 4. Check `git status` - should show no modifications to route files\n *\n * =============================================================================\n */\n\nimport type { Plugin, PluginOption } from 'vite';\nimport { webHydrationPlugin } from '../plugins/salla-hydration.plugin';\nimport { themeTranslationsPlugin } from '../plugins/theme-translations.plugin';\nimport { bestPracticesPlugin } from '../plugins/best-practices/best-practices.plugin';\nimport { packageAliasesPlugin } from '../plugins/package-aliases.plugin';\nimport type {\n FrameworkAdapter,\n GenerateRoutesOptions,\n TwilightReactOptions,\n TwilightRoute,\n} from '../types';\nimport { RouteId } from '../../router/route-ids';\nimport { createRequire } from 'module';\nimport Module from 'module';\nimport { resolve, basename, dirname, join, relative, sep } from 'path';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { transformSync } from 'esbuild';\nimport { fileURLToPath, pathToFileURL } from 'url';\nimport {\n getLocaleWrapperTemplate,\n getRedirectTemplate,\n getAccountLayoutTemplate,\n} from '../../tanstack/templates';\n\nconst DEFAULT_ROUTES_DIR = './app/routes';\nconst DEFAULT_ROUTES_FILE = './app/routes.ts';\nconst DEFAULT_ROOT_ROUTE = '__root.tsx';\n\nexport const DEFAULT_BASE_ROUTES: TwilightRoute[] = [\n // Core routes\n {\n path: '/',\n file: 'index.tsx',\n factory: 'createHomeRouteConfig',\n id: RouteId.INDEX,\n isIndex: true,\n },\n { path: '/cart', file: 'cart.tsx', factory: 'createCartRouteConfig', id: RouteId.CART },\n { path: '/search', file: 'search.tsx', factory: 'createSearchRouteConfig', id: RouteId.SEARCH },\n\n // Product listing routes\n {\n path: '/latest-products',\n file: 'latest-products.tsx',\n factory: 'createLatestProductsRouteConfig',\n id: RouteId.PRODUCT_INDEX_LATEST,\n },\n {\n path: '/most-sales-products',\n file: 'most-sales-products.tsx',\n factory: 'createMostSalesProductsRouteConfig',\n id: RouteId.PRODUCT_INDEX_SALES,\n },\n {\n path: '/offers',\n file: 'offers.tsx',\n factory: 'createOffersRouteConfig',\n id: RouteId.PRODUCT_INDEX_OFFERS,\n },\n\n // Blog routes\n { path: '/blog', file: 'blog.tsx', factory: 'createBlogRouteConfig', id: RouteId.BLOG_INDEX },\n {\n path: '/blog/author/$id',\n file: 'blog_.author.$id.tsx',\n factory: 'createBlogAuthorRouteConfig',\n id: RouteId.BLOG_INDEX_AUTHOR,\n },\n {\n path: '/blog/$slug/a-{$id}',\n file: 'blog_.$slug.a-$id.tsx',\n factory: 'createBlogSingleRouteConfig',\n id: RouteId.BLOG_SINGLE,\n },\n {\n path: '/blog/$slug/c-{$id}',\n file: 'blog_.$slug.c-$id.tsx',\n factory: 'createBlogCategoryRouteConfig',\n id: RouteId.BLOG_INDEX_CATEGORY,\n },\n {\n path: '/blog/$slug/tag-{$id}',\n file: 'blog_.$slug.tag-$id.tsx',\n factory: 'createBlogTagRouteConfig',\n id: RouteId.BLOG_INDEX_TAG,\n },\n\n // Brands routes\n {\n path: '/brands',\n file: 'brands.tsx',\n factory: 'createBrandsRouteConfig',\n id: RouteId.BRANDS_INDEX,\n },\n {\n path: '/brands/$id',\n file: 'brands.$id.tsx',\n factory: 'createBrandSingleRouteConfig',\n id: RouteId.BRANDS_SINGLE,\n },\n\n // Tag routes\n {\n path: '/tags/$id',\n file: 'tags.$id.tsx',\n factory: 'createTagRouteConfig',\n id: RouteId.PRODUCT_INDEX_TAG,\n },\n\n // Customer routes\n {\n path: '/account',\n file: 'account.tsx',\n factory: 'createAccountLayoutConfig',\n id: RouteId.CUSTOMER_LAYOUT,\n isLayout: true,\n },\n {\n path: '/account/profile',\n file: 'account.profile.tsx',\n factory: 'createProfileRouteConfig',\n id: RouteId.CUSTOMER_PROFILE,\n },\n {\n path: '/account/wishlist',\n file: 'account.wishlist.tsx',\n factory: 'createWishlistRouteConfig',\n id: RouteId.CUSTOMER_WISHLIST,\n },\n {\n path: '/account/wallet',\n file: 'account.wallet.tsx',\n factory: 'createWalletRouteConfig',\n id: RouteId.CUSTOMER_WALLET,\n },\n {\n path: '/account/notifications',\n file: 'account.notifications.tsx',\n factory: 'createNotificationsRouteConfig',\n id: RouteId.CUSTOMER_NOTIFICATIONS,\n },\n {\n path: '/account/settings',\n file: 'account.settings.tsx',\n factory: 'createSettingsRouteConfig',\n id: RouteId.CUSTOMER_SETTINGS,\n },\n {\n path: '/account/orders',\n file: 'account.orders.tsx',\n factory: 'createOrdersRouteConfig',\n id: RouteId.CUSTOMER_ORDERS_INDEX,\n },\n {\n path: '/account/orders/$id',\n file: 'account.orders.$id.tsx',\n factory: 'createOrderSingleRouteConfig',\n id: RouteId.CUSTOMER_ORDERS_SINGLE,\n },\n {\n path: '/pending-orders',\n file: 'pending-orders.tsx',\n factory: 'createPendingOrdersRedirectConfig',\n id: RouteId.CUSTOMER_ORDERS_INDEX_PENDING,\n },\n\n // Other routes\n {\n path: '/loyalty',\n file: 'loyalty.tsx',\n factory: 'createLoyaltyRouteConfig',\n id: RouteId.LOYALTY,\n },\n {\n path: '/testimonials',\n file: 'testimonials.tsx',\n factory: 'createTestimonialsRouteConfig',\n id: RouteId.TESTIMONIALS,\n },\n {\n path: '/thank-you/$orderId',\n file: 'thank-you.$orderId.tsx',\n factory: 'createThankYouRouteConfig',\n id: RouteId.THANK_YOU,\n },\n\n // SEO-friendly slug routes\n {\n path: '/$slug/c{$id}',\n file: '$slug.c$id.tsx',\n factory: 'createSlugCategoryRouteConfig',\n id: RouteId.PRODUCT_INDEX,\n },\n {\n path: '/$slug/p{$id}',\n file: '$slug.p$id.tsx',\n factory: 'createSlugProductRouteConfig',\n id: RouteId.PRODUCT_SINGLE,\n },\n {\n path: '/$slug/brand-{$id}',\n file: '$slug.brand-$id.tsx',\n factory: 'createSlugBrandRedirectConfig',\n id: RouteId.BRANDS_SINGLE,\n },\n {\n path: '/$slug/tag-{$id}',\n file: '$slug.tag-$id.tsx',\n factory: 'createSlugTagRouteConfig',\n id: RouteId.PRODUCT_INDEX_TAG,\n },\n {\n path: '/$slug/page-{$id}',\n file: '$slug.page-$id.tsx',\n factory: 'createSlugPageRouteConfig',\n id: RouteId.PAGE_SINGLE,\n },\n];\n\ninterface VirtualRouteNode {\n type: 'index' | 'route' | 'layout' | 'physical';\n file?: string;\n path?: string;\n}\n\n/**\n * Load the developer's `app/routes.ts` and read the exported `routes` array.\n */\nfunction loadRoutesFile(filePath: string): TwilightRoute[] {\n if (!existsSync(filePath)) return [];\n\n const raw = readFileSync(filePath, 'utf-8');\n\n let code: string;\n try {\n const result = transformSync(raw, {\n loader: 'ts',\n format: 'cjs',\n target: 'node18',\n });\n code = result.code;\n } catch (err) {\n console.warn(`[twilight-react:tanstack] Failed to transpile ${basename(filePath)}:`, err);\n return [];\n }\n\n const projectRequire = createRequire(resolve(process.cwd(), 'package.json'));\n\n let exported: { routes?: VirtualRouteNode[] };\n try {\n const m = new Module(filePath) as any;\n m.filename = filePath;\n m.paths = (Module as any)._nodeModulePaths(dirname(filePath));\n m.require = projectRequire;\n m._compile(code, filePath);\n exported = m.exports;\n } catch (err) {\n console.warn(`[twilight-react:tanstack] Failed to evaluate ${basename(filePath)}:`, err);\n return [];\n }\n\n if (!Array.isArray(exported.routes)) return [];\n\n const routes: TwilightRoute[] = [];\n for (const node of exported.routes) {\n if (!node || typeof node !== 'object' || !node.file) continue;\n\n if (node.type === 'index') {\n routes.push({\n path: '/',\n file: node.file,\n factory: `createCustomRoute_${node.file.replace(/[^a-zA-Z0-9]/g, '_')}`,\n isIndex: true,\n });\n } else if (node.type === 'route' && node.path) {\n routes.push({\n path: node.path,\n file: node.file,\n factory: `createCustomRoute_${node.file.replace(/[^a-zA-Z0-9]/g, '_')}`,\n });\n }\n }\n\n if (routes.length > 0) {\n console.log(\n `[twilight-react:tanstack] Loaded ${routes.length} custom route(s) from ${basename(filePath)}`\n );\n }\n\n return routes;\n}\n\nconst FACTORY_TO_MODULE: Record<string, string> = {\n createHomeRouteConfig: 'Home',\n createCartRouteConfig: 'Cart',\n // All product listing routes use the unified ProductListing module\n createSearchRouteConfig: 'ProductListing',\n createLatestProductsRouteConfig: 'ProductListing',\n createMostSalesProductsRouteConfig: 'ProductListing',\n createOffersRouteConfig: 'ProductListing',\n createSlugCategoryRouteConfig: 'ProductListing',\n createSlugTagRouteConfig: 'ProductListing',\n createTagRouteConfig: 'ProductListing',\n createBrandSingleRouteConfig: 'ProductListing',\n createBlogRouteConfig: 'Blog',\n createBlogSingleRouteConfig: 'BlogSingle',\n createBlogAuthorRouteConfig: 'BlogAuthorRoute',\n createBlogCategoryRouteConfig: 'BlogCategoryRoute',\n createBlogTagRouteConfig: 'BlogTagRoute',\n createBrandsRouteConfig: 'Brands',\n createProfileRouteConfig: 'Profile',\n createWishlistRouteConfig: 'Wishlist',\n createWalletRouteConfig: 'Wallet',\n createNotificationsRouteConfig: 'Notifications',\n createSettingsRouteConfig: 'Settings',\n createOrdersRouteConfig: 'Orders',\n createOrderSingleRouteConfig: 'OrderSingle',\n createAccountLayoutConfig: 'AccountLayout',\n createLoyaltyRouteConfig: 'Loyalty',\n createTestimonialsRouteConfig: 'Testimonials',\n createThankYouRouteConfig: 'ThankYou',\n // Other routes\n createSlugProductRouteConfig: 'Product',\n createSlugPageRouteConfig: 'PageSingle',\n // SEO slug redirect (redirect-only, no component)\n createSlugBrandRedirectConfig: 'slugBrandRedirect',\n // Pending orders redirect\n createPendingOrdersRedirectConfig: 'pendingOrdersRedirect',\n};\n\nconst REDIRECT_ONLY_MODULES = new Set(['slugBrandRedirect', 'pendingOrdersRedirect']);\n\n/**\n * Maps module name → sub-path under the routes directory.\n * Used to generate granular imports instead of barrel imports.\n * e.g. 'Cart' → 'cart' → `import { Cart } from '…/routes/cart'`\n */\nconst MODULE_SUBPATH: Record<string, string> = {\n Home: 'home',\n Cart: 'cart',\n ProductListing: 'product-listing',\n Blog: 'blog',\n BlogSingle: 'blog',\n BlogAuthorRoute: 'blog',\n BlogCategoryRoute: 'blog',\n BlogTagRoute: 'blog',\n Brands: 'brands',\n BrandSingle: 'brands',\n Profile: 'account',\n Wishlist: 'account',\n Wallet: 'account',\n Notifications: 'account',\n Settings: 'account',\n Orders: 'account/orders',\n OrderSingle: 'account/orders',\n Loyalty: 'loyalty',\n PageSingle: 'page',\n Testimonials: 'testimonials',\n ThankYou: 'thank-you',\n Product: 'product',\n slugBrandRedirect: 'seo-redirects',\n pendingOrdersRedirect: 'seo-redirects',\n};\n\n/**\n * Maps module name → exported LoaderData type name from '@salla.sa/twilight-theme-engine/routes'.\n * Used to generate explicit type annotations in route files for better DX.\n */\nconst MODULE_LOADER_TYPE: Record<string, string> = {\n Home: 'HomeLoaderData',\n Cart: 'CartPageProps',\n ProductListing: 'ProductListLoaderData',\n Blog: 'BlogPageProps',\n BlogSingle: 'BlogSinglePageProps',\n BlogAuthorRoute: 'BlogAuthorLoaderData',\n BlogCategoryRoute: 'BlogCategoryLoaderData',\n BlogTagRoute: 'BlogTagLoaderData',\n Brands: 'BrandsPageProps',\n BrandSingle: 'ProductListLoaderData',\n Profile: 'ProfilePageProps',\n Wishlist: 'WishlistPageProps',\n Wallet: 'WalletPageProps',\n Notifications: 'NotificationsPageProps',\n Settings: 'SettingsPageProps',\n Orders: 'OrdersPageProps',\n OrderSingle: 'OrderSinglePageProps',\n Loyalty: 'LoyaltyPageProps',\n PageSingle: 'PageSingleProps',\n Testimonials: 'TestimonialsPageProps',\n ThankYou: 'ThankYouPageProps',\n Product: 'ProductPageProps',\n};\n\n/**\n * Routes that support URL-based pagination via ?page= query param.\n * These routes get validateSearch + loaderDeps to forward the page param to the loader.\n */\nconst PAGINATED_MODULES = new Set(['Wishlist']);\n\n/**\n * Paginated routes that don't require locale in their loader context.\n */\nconst PAGINATED_NO_LOCALE = new Set(['Wallet']);\n\n/**\n * Routes that support both ?page= and ?sort= search params.\n * These routes get validateSearch + loaderDeps to forward both to the loader.\n */\nconst SORT_PAGINATED_MODULES = new Set(['ProductListing']);\n\n/**\n * Route factories that need sort pagination support.\n * Used when the module name doesn't match (e.g., Tag routes use ProductListing module).\n */\nconst SORT_PAGINATED_FACTORIES = new Set([\n 'createSearchRouteConfig',\n 'createSlugTagRouteConfig',\n 'createTagRouteConfig',\n 'createBrandSingleRouteConfig',\n]);\n\n/**\n * Routes that use deferred data loading.\n * These routes return promises that are resolved in the component via <Await>.\n * This allows the page to render immediately while data loads in background.\n */\nconst DEFERRED_ROUTES = new Set<string>();\n\n/**\n * Routes that support ?status= search param.\n * These routes get validateSearch + loaderDeps to forward status to the loader.\n */\nconst STATUS_FILTERED_MODULES = new Set(['Orders']);\n\n/**\n * Maps module name → skeleton component name from '@salla.sa/twilight-theme-engine/components'.\n * When present, the generated route file adds a `pendingComponent` that renders\n * the page-specific skeleton instead of the generic default.\n */\nconst MODULE_PENDING_SKELETON: Record<string, string> = {\n Home: 'HomeSkeleton',\n Product: 'ProductDetailSkeleton',\n Blog: 'BlogSkeleton',\n BlogSingle: 'BlogSkeleton',\n BlogAuthorRoute: 'BlogSkeleton',\n BlogCategoryRoute: 'BlogSkeleton',\n BlogTagRoute: 'BlogSkeleton',\n Cart: 'CartSkeleton',\n Profile: 'CustomerPageSkeleton',\n Wishlist: 'CustomerPageSkeleton',\n Wallet: 'CustomerPageSkeleton',\n Notifications: 'CustomerPageSkeleton',\n Settings: 'CustomerPageSkeleton',\n Orders: 'CustomerPageSkeleton',\n OrderSingle: 'CustomerPageSkeleton',\n};\n\n/**\n * Explicit mapping from factory → loader params.\n * Maps loader param names to URL param names (from TanStack route path).\n * Only needed for routes where URL params differ from loader params.\n * If a factory is not listed, all URL params are forwarded as-is.\n */\nconst FACTORY_LOADER_PARAMS: Record<string, Record<string, string>> = {\n // /$slug/c{$id} → category.loader({ id }) — slug is SEO-only, not used by loader\n createSlugCategoryRouteConfig: { id: 'id' },\n // /$slug/p{$id} → product.loader({ id })\n createSlugProductRouteConfig: { id: 'id' },\n // /$slug/tag-{$id} → productListLoader({ source: 'tags', id })\n createSlugTagRouteConfig: { id: 'id' },\n // /$slug/page-{$id} → pageSingle.loader({ id }) — slug is SEO-only, not used by loader\n createSlugPageRouteConfig: { id: 'id' },\n // /tags/$id → productListLoader({ source: 'tags', id })\n createTagRouteConfig: { id: 'id' },\n // /brands/$id → productListLoader({ source: 'brands', id })\n createBrandSingleRouteConfig: { id: 'id' },\n};\n\n/**\n * Static loader params for routes that don't use URL params.\n * These params are hardcoded in the generated route file.\n */\nconst FACTORY_STATIC_PARAMS: Record<string, Record<string, string>> = {\n createLatestProductsRouteConfig: {\n source: 'latest',\n title: 'Latest Products',\n slug: 'latest-products',\n },\n createMostSalesProductsRouteConfig: {\n source: 'sales',\n title: 'Most Sales Products',\n slug: 'most-sales-products',\n },\n createOffersRouteConfig: {\n source: 'offers',\n title: 'Offers',\n slug: 'offers',\n },\n};\n\nfunction getParamMapping(routePath: string, factory?: string): string {\n // Use explicit mapping if available\n if (factory && FACTORY_LOADER_PARAMS[factory]) {\n const mapping = FACTORY_LOADER_PARAMS[factory];\n const entries = Object.entries(mapping).map(\n ([loaderParam, urlParam]) => `${loaderParam}: params.${urlParam}`\n );\n // Add source param for tag routes\n if (factory === 'createTagRouteConfig' || factory === 'createSlugTagRouteConfig') {\n return `{ source: 'tags', ${entries.join(', ')} }`;\n }\n // Add source param for brand routes\n if (factory === 'createBrandSingleRouteConfig') {\n return `{ source: 'brands', ${entries.join(', ')} }`;\n }\n return `{ ${entries.join(', ')} }`;\n }\n\n // Default: forward all URL params as-is\n const paramMatches = routePath.match(/\\$([a-zA-Z]+)/g);\n if (!paramMatches || paramMatches.length === 0) return '';\n\n const params = paramMatches.map((match) => {\n const paramName = match.slice(1);\n return `${paramName}: params.${paramName}`;\n });\n\n return `{ ${params.join(', ')} }`;\n}\n\n/** Path shown in `createFileRoute(...)` — always includes the `/{-$locale}` optional prefix.\n * Index routes use trailing slash to indicate they're the index child of the locale layout.\n */\nfunction toTanstackRoutePath(route: TwilightRoute): string {\n if (route.isIndex) return '/{-$locale}/';\n return `/{-$locale}${route.path}`;\n}\n\nfunction generateRouteFileContent(route: TwilightRoute, baseImport: string): string {\n // `routePath` is the original engine path (e.g. '/cart', '/$slug/p{$id}').\n // Used only for param extraction / loader call generation — NOT for createFileRoute.\n const routePath = route.isIndex ? '/' : route.path;\n // `tanstackRoutePath` is the full path registered with TanStack Router.\n const tanstackRoutePath = toTanstackRoutePath(route);\n const moduleName = FACTORY_TO_MODULE[route.factory];\n\n if (moduleName) {\n const hasParams = routePath.includes('$');\n const paramMapping = getParamMapping(routePath, route.factory);\n const isRedirectOnly = REDIRECT_ONLY_MODULES.has(moduleName);\n\n // Granular import path: e.g. '@salla.sa/twilight-theme-engine/routes/cart'\n // Falls back to the barrel import if no subpath mapping exists.\n const subpath = MODULE_SUBPATH[moduleName];\n const moduleImport = subpath ? `${baseImport}/${subpath}` : baseImport;\n\n // Redirect-only routes using standalone loader functions\n if (route.factory === 'createSlugBrandRedirectConfig') {\n const loaderImport = 'slugBrandRedirectLoader';\n // Remove trailing space before } and add locale param\n const redirectParamMapping = paramMapping\n ? paramMapping.replace(/\\s*}$/, ', locale: params.locale }')\n : '{ locale: params.locale }';\n // Format loader call with 4-space indent for Prettier compatibility\n // 4 spaces = 2 (object property) + 2 (arrow continuation)\n const loaderCall = `({ params }) =>\n ${loaderImport}({\n params: ${redirectParamMapping},\n })`;\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${loaderImport} } from '${baseImport}/seo-redirects';\n\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n loader: ${loaderCall},\n});\n`;\n }\n\n // Pending orders redirect route\n if (route.factory === 'createPendingOrdersRedirectConfig') {\n const loaderImport = 'pendingOrdersRedirectLoader';\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${loaderImport} } from '${baseImport}/seo-redirects';\n\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n loader: ({ params }) =>\n ${loaderImport}({\n params: { locale: params.locale },\n }),\n});\n`;\n }\n\n // Resolve the LoaderData type for this module\n const loaderType = MODULE_LOADER_TYPE[moduleName];\n // Type imports come from the same granular module as the value import.\n // Import from main package entry to avoid barrel routes import.\n const typeImport = loaderType ? `\\nimport type { ${loaderType} } from '${moduleImport}';` : '';\n const extraTypeImport = '';\n\n // Standard module pattern (Module.loader, Module.Component, Module.head)\n const importName = moduleName;\n\n // Check for static params (used by product listing routes)\n const staticParams = route.factory ? FACTORY_STATIC_PARAMS[route.factory] : undefined;\n const loaderCall = staticParams\n ? `({ params }) => ${importName}.loader({ params: ${JSON.stringify(staticParams)}, locale: params.locale })`\n : hasParams\n ? `({ params }) => ${importName}.loader({ params: ${paramMapping}, locale: params.locale })`\n : `({ params }) => ${importName}.loader({ locale: params.locale })`;\n\n if (isRedirectOnly) {\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${importName} } from '${moduleImport}';\n\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n loader: ${loaderCall},\n});\n`;\n }\n\n // Search route needs search params\n if (route.factory === 'createSearchRouteConfig') {\n const componentFn = loaderType\n ? `function ${importName}Component() {\\n const data: ${loaderType} = Route.useLoaderData();\\n return <${importName}.Component {...data} />;\\n}`\n : `function ${importName}Component() {\\n const data = Route.useLoaderData();\\n return <${importName}.Component {...data} />;\\n}`;\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${importName} } from '${moduleImport}';${typeImport}${extraTypeImport}\nimport { withHead } from '${baseImport.replace('/routes', '')}/tanstack';\n\n/**\n * Search route configuration with URL query parameter support.\n * Uses validateSearch for type-safe search params and loaderDeps to pass\n * them to the loader.\n */\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n validateSearch: (search: Record<string, unknown>) => ({ q: (search.q as string) || '' }),\n loaderDeps: ({ search }) => ({ q: search.q }),\n loader: ({ deps, params }): Promise<${loaderType}> =>\n ${importName}.loader({\n params: { source: 'search' },\n search: { q: deps.q },\n locale: params.locale,\n }),\n head: withHead(${importName}),\n component: ${importName}Component,\n});\n\n/**\n * Search page component.\n * Uses Route.useLoaderData() to access the data loaded by the route loader,\n * following React best practices for data fetching in route components.\n */\n${componentFn}\n`;\n }\n\n // Typed loader call — always passes locale from $locale route param for SSR compatibility\n // FORMAT RULE: See file header for Prettier formatting rules\n const isDeferred = DEFERRED_ROUTES.has(moduleName);\n\n // ============================================================================\n // PRETTIER FORMAT HELPER - DO NOT MODIFY INDENTATION VALUES\n // ============================================================================\n // Prettier settings: printWidth: 100, tabWidth: 2\n // The loader line is prefixed with \" loader: \" (10 chars) in the route object\n // Plus trailing comma (1 char) = 11 chars overhead\n //\n // CRITICAL INDENTATION RULE:\n // When an arrow function body breaks to a new line, Prettier uses 4-space indent:\n // loader: ({ params }): Type =>\n // Module.loader(args) <-- 4 spaces (2 for object + 2 for continuation)\n //\n // This is because:\n // 1. Object properties are indented 2 spaces from the object start\n // 2. Arrow function continuation adds another 2-space indent\n // ============================================================================\n const PRETTIER_INDENT = 10; // \" loader: \" prefix length\n const PRETTIER_PRINT_WIDTH = 100;\n\n const getTypedLoaderCall = (returnType: string, name: string, args: string) => {\n const inline = `({ params }): ${returnType} => ${name}.loader(${args})`;\n const lineLength = PRETTIER_INDENT + inline.length + 1;\n if (lineLength <= PRETTIER_PRINT_WIDTH) {\n // Fits on one line - use inline format (Prettier prefers this for short lines)\n return inline;\n }\n // Exceeds printWidth - use multi-line format with 4-space indent\n // The 4 spaces = 2 (object property) + 2 (arrow continuation)\n return `({ params }): ${returnType} =>\n ${name}.loader(${args})`;\n };\n\n const returnType = isDeferred ? loaderType : `Promise<${loaderType}>`;\n\n const typedLoaderCall = loaderType\n ? staticParams\n ? // Static params routes - expanded object format for Prettier\n // Each param on its own line with proper nesting\n `({ params }): ${returnType} =>\n ${importName}.loader({\n params: {\n source: '${staticParams.source}',\n title: '${staticParams.title}',\n slug: '${staticParams.slug}',\n },\n locale: params.locale,\n })`\n : hasParams\n ? // Routes with URL params - check if inline fits\n getTypedLoaderCall(\n returnType,\n importName,\n `{ params: ${paramMapping}, locale: params.locale }`\n )\n : // Routes without params - check if inline fits\n getTypedLoaderCall(returnType, importName, '{ locale: params.locale }')\n : loaderCall;\n\n // Resolve per-page skeleton if available\n const skeletonName = MODULE_PENDING_SKELETON[moduleName];\n const skeletonModulePath = baseImport.replace(/\\/routes$/, '/skeleton');\n const skeletonImport = skeletonName\n ? `\\nimport { ${skeletonName} } from '${skeletonModulePath}';`\n : '';\n const pendingLine = skeletonName ? `\\n pendingComponent: () => <${skeletonName} />,` : '';\n\n // Import withHead helper for simplified head callback\n const headImport = `import { withHead } from '${baseImport.replace('/routes', '')}/tanstack';`;\n\n // Head callback uses withHead for clean DX\n const headCallback = route.isIndex ? `withHead(${importName})` : `withHead(${importName})`;\n\n // Generate named component function\n // For deferred routes, the component uses Await to handle promises\n const componentFn = isDeferred\n ? `function ${importName}Component() {\\n const data: ${loaderType} = Route.useLoaderData();\\n return <${importName}.Component components={data.components} />;\\n}`\n : loaderType\n ? `function ${importName}Component() {\\n const data: ${loaderType} = Route.useLoaderData();\\n return <${importName}.Component {...data} />;\\n}`\n : `function ${importName}Component() {\\n const data = Route.useLoaderData();\\n return <${importName}.Component {...data} />;\\n}`;\n\n // Route description for JSDoc\n const routeDescription = route.isIndex\n ? 'Home (index) route configuration.'\n : `${importName} route configuration.`;\n\n // Sort + paginated routes — forward ?sort= and ?page= to the loader (e.g. ProductListing)\n if (SORT_PAGINATED_MODULES.has(moduleName) || SORT_PAGINATED_FACTORIES.has(route.factory)) {\n const sortLoaderCall = staticParams\n ? `({ deps, params }): ${returnType} =>\n ${importName}.loader({\n params: {\n source: '${staticParams?.source}',\n title: '${staticParams?.title}',\n slug: '${staticParams?.slug}',\n },\n search: { page: deps.page, sort: deps.sort },\n locale: params.locale,\n })`\n : hasParams\n ? `({ deps, params }): ${returnType} =>\n ${importName}.loader({\n params: ${paramMapping},\n search: { page: deps.page, sort: deps.sort },\n locale: params.locale,\n })`\n : `({ deps, params }): ${returnType} =>\n ${importName}.loader({\n search: { page: deps.page, sort: deps.sort },\n locale: params.locale,\n })`;\n\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${importName} } from '${moduleImport}';${typeImport}${skeletonImport}\n${headImport}\n\n/**\n * ${routeDescription}\n * Loads page data via loader and renders the ${importName} component.\n */\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n validateSearch: (search: Record<string, unknown>) => {\n const page = Number(search.page) || 1;\n const sort = (search.sort as string) || undefined;\n return { ...(page > 1 ? { page } : {}), ...(sort ? { sort } : {}) };\n },\n loaderDeps: ({ search }) => ({ page: search.page, sort: search.sort }),\n loader: ${sortLoaderCall},\n head: ${headCallback},${pendingLine}\n component: ${importName}Component,\n});\n\n/**\n * ${importName} page component.\n * Uses Route.useLoaderData() to access the data loaded by the route loader,\n * following React best practices for data fetching in route components.\n */\n${componentFn}\n`;\n }\n\n // Paginated routes — forward ?page= query param to the loader\n if (PAGINATED_MODULES.has(moduleName) || PAGINATED_NO_LOCALE.has(moduleName)) {\n const isNoLocale = PAGINATED_NO_LOCALE.has(moduleName);\n const loaderArgs = isNoLocale\n ? `{ search: { page: deps.page ?? 1 } }`\n : `{ search: { page: deps.page ?? 1 }, locale: params.locale }`;\n const loaderDestructuring = isNoLocale ? '{ deps }' : '{ deps, params }';\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${importName} } from '${moduleImport}';${typeImport}${skeletonImport}\n${headImport}\n\n/**\n * ${routeDescription}\n * Loads page data via loader and renders the ${importName} component.\n */\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n validateSearch: (search: Record<string, unknown>) => {\n const page = Number(search.page) || 1;\n return page > 1 ? { page } : {};\n },\n loaderDeps: ({ search }) => ({ page: search.page }),\n loader: (${loaderDestructuring}): ${returnType} =>\n ${importName}.loader(${loaderArgs}),\n head: ${headCallback},${pendingLine}\n component: ${importName}Component,\n});\n\n/**\n * ${importName} page component.\n * Uses Route.useLoaderData() to access the data loaded by the route loader,\n * following React best practices for data fetching in route components.\n */\n${componentFn}\n`;\n }\n\n // Status-filtered routes — forward ?status= to the loader (e.g. Orders)\n if (STATUS_FILTERED_MODULES.has(moduleName)) {\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${importName} } from '${moduleImport}';${typeImport}${skeletonImport}\n${headImport}\n\n/**\n * ${routeDescription}\n * Loads page data via loader and renders the ${importName} component.\n */\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n validateSearch: (search: Record<string, unknown>) => {\n const status = (search.status as string) || undefined;\n return status ? { status } : {};\n },\n loaderDeps: ({ search }) => ({ status: search.status }),\n loader: ({ deps, params }): ${returnType} =>\n ${importName}.loader({ search: { status: deps.status }, locale: params.locale }),\n head: ${headCallback},${pendingLine}\n component: ${importName}Component,\n});\n\n/**\n * ${importName} page component.\n * Uses Route.useLoaderData() to access the data loaded by the route loader,\n * following React best practices for data fetching in route components.\n */\n${componentFn}\n`;\n }\n\n // Standard route with loader, head, and component\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${importName} } from '${moduleImport}';${typeImport}${extraTypeImport}${skeletonImport}\n${headImport}\n\n/**\n * ${routeDescription}\n * Loads page data via loader and renders the ${importName} component.\n */\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n loader: ${typedLoaderCall},\n head: ${headCallback},${pendingLine}\n component: ${importName}Component,\n});\n\n/**\n * ${importName} page component.\n * Uses Route.useLoaderData() to access the data loaded by the route loader,\n * following React best practices for data fetching in route components.\n */\n${componentFn}\n`;\n }\n\n // Fallback for custom routes\n return `// @auto-generated\nimport { createFileRoute } from '@tanstack/react-router';\nimport { ${route.factory} } from '${baseImport}';\n\nconst config = ${route.factory}();\nexport const Route = createFileRoute('${tanstackRoutePath}')({\n loader: config.Loader,\n component: () => { const data = Route.useLoaderData(); return <config.Component {...data} />; },\n});\n`;\n}\n\n/**\n * Resolve the engine's .twilight directory path relative to the project's routes directory.\n * This lets TanStack Router's generator find the engine-owned route files.\n */\nfunction getEngineTwilightRelPath(routesDir: string): string {\n // Find engine package root from this file's location\n let dir = dirname(fileURLToPath(import.meta.url));\n while (dir !== dirname(dir)) {\n if (existsSync(join(dir, 'package.json'))) break;\n dir = dirname(dir);\n }\n const twilightDir = join(dir, '.twilight');\n const absRoutes = resolve(routesDir);\n return relative(absRoutes, twilightDir).split(sep).join('/');\n}\n\nfunction resolveProjectPkg(projectRoot: string, pkg: string, subpath?: string): string {\n const pkgJsonPath = join(projectRoot, 'node_modules', pkg, 'package.json');\n const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));\n const key = subpath ? `./${subpath}` : '.';\n const exportEntry = pkgJson.exports?.[key];\n const rel =\n typeof exportEntry === 'string'\n ? exportEntry\n : (exportEntry?.import?.default ??\n exportEntry?.default ??\n exportEntry?.require?.default ??\n pkgJson.main);\n if (!rel)\n throw new Error(`[twilight-react] Cannot resolve ${pkg}${subpath ? `/${subpath}` : ''}`);\n return join(projectRoot, 'node_modules', pkg, rel);\n}\n\nexport function buildVirtualRouteConfig(\n routes: TwilightRoute[],\n rootRouteFile: string,\n routesDir: string\n): unknown {\n try {\n const projectRequire = createRequire(resolve(process.cwd(), 'package.json'));\n const { rootRoute, index, route } = projectRequire('@tanstack/virtual-file-routes');\n\n const accountPrefix = '/account/';\n const accountLayout = routes.find((r) => r.isLayout && r.path === '/account');\n const accountChildren = routes.filter((r) => !r.isLayout && r.path.startsWith(accountPrefix));\n const nonAccountRoutes = routes.filter((r) => !r.isLayout && !r.path.startsWith(accountPrefix));\n\n const langChildren = nonAccountRoutes.map((r) => {\n if (r.isIndex) return index(r.file);\n const relativePath = r.path.replace(/^\\//, '');\n return route(relativePath, r.file);\n });\n\n if (accountLayout) {\n const twilightRel = getEngineTwilightRelPath(routesDir);\n const accChildren = accountChildren.map((r) => {\n const relativePath = r.path.replace(/^\\/account\\/?/, '');\n return route(relativePath, r.file);\n });\n langChildren.push(route('account', `${twilightRel}/account.tsx`, accChildren));\n }\n\n const twilightRel = getEngineTwilightRelPath(routesDir);\n\n return rootRoute(rootRouteFile, [\n route('{-$locale}', `${twilightRel}/$locale.tsx`, [\n ...langChildren,\n // Redirect route - handles /{-$locale}/redirect/{type}/{id} URLs\n route('redirect/$type/$id', `${twilightRel}/redirect.$type.$id.tsx`),\n ]),\n ]);\n } catch (_error) {\n console.warn(\n '[twilight-react:tanstack] @tanstack/virtual-file-routes not found. Please install it.'\n );\n return undefined;\n }\n}\n\nexport const tanstackAdapter: FrameworkAdapter = {\n name: 'tanstack',\n\n generateRouteFiles({\n projectRoot,\n baseRoutes,\n baseRoutesImport,\n }: GenerateRoutesOptions): TwilightRoute[] {\n const routesDir = DEFAULT_ROUTES_DIR;\n const routesFilePath = resolve(projectRoot, DEFAULT_ROUTES_FILE);\n\n const customRoutes = loadRoutesFile(routesFilePath);\n\n const routeMap = new Map<string, TwilightRoute>();\n (baseRoutes ?? DEFAULT_BASE_ROUTES).forEach((r) => routeMap.set(r.path, r));\n customRoutes.forEach((r) => routeMap.set(r.path, r));\n const allRoutes = Array.from(routeMap.values());\n\n const routesDirPath = resolve(projectRoot, routesDir);\n if (!existsSync(routesDirPath)) {\n mkdirSync(routesDirPath, { recursive: true });\n }\n\n // Generate minimal wiring files for the locale layout and root redirect.\n // TanStack Router's generator requires `createFileRoute` in each file.\n // All actual logic is delegated to functions exported from the engine.\n const engineRouteFiles: Array<{ name: string; content: string }> = [\n {\n name: '$locale.tsx',\n content: getLocaleWrapperTemplate(baseRoutesImport),\n },\n {\n name: 'redirect.$type.$id.tsx',\n content: getRedirectTemplate(baseRoutesImport),\n },\n {\n name: 'account.tsx',\n content: getAccountLayoutTemplate(baseRoutesImport),\n },\n ];\n\n // Write into the engine package's .twilight/ dir — NOT the theme project.\n let engineRoot = dirname(fileURLToPath(import.meta.url));\n while (engineRoot !== dirname(engineRoot)) {\n if (existsSync(join(engineRoot, 'package.json'))) break;\n engineRoot = dirname(engineRoot);\n }\n const twilightDir = join(engineRoot, '.twilight');\n if (!existsSync(twilightDir)) {\n mkdirSync(twilightDir, { recursive: true });\n }\n\n for (const { name, content } of engineRouteFiles) {\n const filePath = join(twilightDir, name);\n if (!existsSync(filePath)) {\n writeFileSync(filePath, content);\n } else {\n const existing = readFileSync(filePath, 'utf-8');\n if (existing !== content) {\n writeFileSync(filePath, content);\n }\n }\n }\n\n // Generate all page route files at the flat routes/ level.\n // createFileRoute paths inside these files include the /$locale prefix\n // (e.g. /$locale/cart) so TanStack Router validates the virtual nesting.\n for (const route of allRoutes) {\n if (route.isLayout) continue;\n const filePath = join(routesDirPath, route.file);\n const content = generateRouteFileContent(route, baseRoutesImport);\n\n if (!existsSync(filePath)) {\n writeFileSync(filePath, content);\n console.log(`[twilight-react:tanstack] Created: ${route.file}`);\n } else {\n const existing = readFileSync(filePath, 'utf-8');\n if (existing.startsWith('// @auto-generated') && existing !== content) {\n writeFileSync(filePath, content);\n console.log(`[twilight-react:tanstack] Updated: ${route.file}`);\n }\n }\n }\n\n return allRoutes;\n },\n\n async createPlugins(options: TwilightReactOptions): Promise<PluginOption[]> {\n const {\n srcDirectory = 'app',\n baseRoutesImport = '@salla.sa/twilight-theme-engine/routes',\n localesDir,\n } = options;\n\n const projectRoot = process.cwd();\n\n const allRoutes = tanstackAdapter.generateRouteFiles({ projectRoot, baseRoutesImport });\n const virtualRouteConfig = buildVirtualRouteConfig(\n allRoutes,\n DEFAULT_ROOT_ROUTE,\n resolve(projectRoot, srcDirectory, 'routes')\n );\n\n const routeGeneratorPlugin: Plugin = {\n name: 'twilight:react',\n enforce: 'pre',\n config(config) {\n tanstackAdapter.generateRouteFiles({\n projectRoot: config.root || projectRoot,\n baseRoutesImport,\n });\n return config;\n },\n // configureServer(server) {\n // // Proactively warm up the Cloudflare Worker module graph so the user's\n // // first browser request is served promptly. Without this, Worker\n // // compilation is triggered lazily on the first navigation request,\n // // causing a ~10-15 second blank-page window on cold starts.\n // server.httpServer?.on('listening', () => {\n // const address = server.httpServer?.address();\n // const port =\n // address && typeof address === 'object' && 'port' in address\n // ? (address as { port: number }).port\n // : null;\n // if (!port) return;\n\n // void (async () => {\n // // Give TanStack Start + Cloudflare plugin time to finish registering\n // // their middleware before we make the warmup request.\n // await new Promise<void>((r) => setTimeout(r, 1500));\n\n // for (let attempt = 0; attempt < 10; attempt++) {\n // try {\n // const ctrl = new AbortController();\n // const tid = setTimeout(() => ctrl.abort(), 12000);\n // const resp = await fetch(`http://localhost:${port}/ar`, {\n // signal: ctrl.signal,\n // });\n // clearTimeout(tid);\n // const text = await resp.text();\n // // A substantial response means the Worker is compiled and SSR works.\n // if (text.length > 500) return;\n // } catch {\n // // Worker not ready yet — retry\n // }\n // await new Promise<void>((r) => setTimeout(r, 2000));\n // }\n // })();\n // });\n // },\n };\n\n const { tanstackStart } = (await import(\n pathToFileURL(resolveProjectPkg(projectRoot, '@tanstack/react-start', 'plugin/vite')).href\n )) as { tanstackStart: (opts: unknown) => PluginOption };\n\n const reactMod = (await import(\n pathToFileURL(resolveProjectPkg(projectRoot, '@vitejs/plugin-react')).href\n )) as { default: (opts?: unknown) => PluginOption };\n\n return [\n tanstackStart({ srcDirectory, router: { virtualRouteConfig } }),\n reactMod.default(),\n packageAliasesPlugin(),\n routeGeneratorPlugin,\n webHydrationPlugin(),\n themeTranslationsPlugin(localesDir),\n bestPracticesPlugin(),\n ];\n },\n};\n","/**\n * @fileoverview Next.js framework adapter (placeholder for future implementation)\n *\n * This adapter will provide integration with Next.js App Router.\n * Currently not implemented - coming soon.\n */\n\nimport type { PluginOption } from 'vite';\nimport type {\n FrameworkAdapter,\n GenerateRoutesOptions,\n TwilightReactOptions,\n TwilightRoute,\n} from '../types';\n\n/**\n * Next.js framework adapter (placeholder for future implementation)\n */\nexport const nextjsAdapter: FrameworkAdapter = {\n name: 'nextjs',\n\n generateRouteFiles(_options: GenerateRoutesOptions): TwilightRoute[] {\n throw new Error('[twilight-react:nextjs] Next.js framework support is not yet implemented');\n },\n\n async createPlugins(_options: TwilightReactOptions): Promise<PluginOption[]> {\n throw new Error('[twilight-react:nextjs] Next.js framework support is not yet implemented');\n },\n};\n","/**\n * @fileoverview Framework adapters registry\n *\n * This file exports all available framework adapters and provides\n * a registry for looking up adapters by framework name.\n */\n\nimport type { Framework, FrameworkAdapter } from '../types';\nimport { tanstackAdapter } from './tanstack.adapter';\nimport { nextjsAdapter } from './nextjs.adapter';\n\n/**\n * Framework adapters registry\n */\nexport const frameworkAdapters: Record<Framework, FrameworkAdapter> = {\n tanstack: tanstackAdapter,\n nextjs: nextjsAdapter,\n};\n\n/**\n * Get framework adapter by name\n */\nexport function getFrameworkAdapter(framework: Framework): FrameworkAdapter {\n const adapter = frameworkAdapters[framework];\n if (!adapter) {\n throw new Error(`[twilight-react] Unsupported framework: ${framework}`);\n }\n return adapter;\n}\n\n// Export individual adapters for direct use\nexport { tanstackAdapter } from './tanstack.adapter';\nexport { nextjsAdapter } from './nextjs.adapter';\n","/**\n * @fileoverview twilightReact — entry point for the Twilight Vite plugin.\n *\n * Framework-specific setup is fully delegated to the adapter for that framework.\n * Developers can optionally create `app/routes.ts` to add or override routes.\n */\n\nimport type { PluginOption } from 'vite';\nimport type { TwilightReactOptions } from './types';\nimport { getFrameworkAdapter } from './adapters';\nimport { setHeadAdapter } from '../utils/head';\nimport { tanstackHeadAdapter } from '../tanstack/head';\nimport { nextjsHeadAdapter } from '../nextjs/head';\n\n// Re-export types for convenience\nexport type {\n TwilightRoute,\n Framework,\n ReactPluginOptions,\n TanStackRouterOptions,\n NextJsRouterOptions,\n RouterOptions,\n TwilightReactOptions,\n FrameworkAdapter,\n} from './types';\n\n/**\n * Main Twilight Vite plugin.\n *\n * For TanStack Start + Cloudflare Workers (default):\n * ```ts\n * export default defineConfig(async () => ({\n * plugins: [cloudflare({ viteEnvironment: { name: 'ssr' } }), ...(await twilightReact())],\n * }));\n * ```\n */\nexport async function twilightReact(options: TwilightReactOptions = {}): Promise<PluginOption[]> {\n const { framework = 'tanstack' } = options;\n\n if (framework === 'tanstack') setHeadAdapter(tanstackHeadAdapter);\n else if (framework === 'nextjs') setHeadAdapter(nextjsHeadAdapter);\n\n return getFrameworkAdapter(framework).createPlugins(options);\n}\n\nexport default twilightReact;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"best-practices.plugin.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/best-practices/best-practices.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAuB,MAAM,SAAS,CAAC;AA6BzE,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CA8E9E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook expectations registry for the require-page-hooks rule.
|
|
3
|
+
*
|
|
4
|
+
* Maps route file patterns to their expected HookSlot/hookRegistry entries.
|
|
5
|
+
* Used by the Vite best-practices plugin to validate that theme developers
|
|
6
|
+
* preserve customization points when overriding route pages.
|
|
7
|
+
*/
|
|
8
|
+
export interface ExpectedHook {
|
|
9
|
+
hook: string;
|
|
10
|
+
severity: 'error' | 'warn' | 'info';
|
|
11
|
+
}
|
|
12
|
+
export interface RouteHookEntry {
|
|
13
|
+
pattern: RegExp;
|
|
14
|
+
routeType: string;
|
|
15
|
+
expectedHooks: ExpectedHook[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Registry of expected hooks per route type.
|
|
19
|
+
* Each entry maps a file path pattern to the hooks that should be present.
|
|
20
|
+
*/
|
|
21
|
+
export declare const ROUTE_HOOK_MAP: RouteHookEntry[];
|
|
22
|
+
/**
|
|
23
|
+
* Get expected hooks for a given file path.
|
|
24
|
+
* Returns null if the file doesn't match any route pattern.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getExpectedHooks(filePath: string): ExpectedHook[] | null;
|
|
27
|
+
//# sourceMappingURL=hooks-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-registry.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/best-practices/hooks-registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,EAuM1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,CAOxE"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Severity, Violation } from './types';
|
|
2
|
+
export declare function formatViolation(violation: Violation, severity: Severity, relativeId: string): string;
|
|
3
|
+
export declare function formatSummary(errors: number, warnings: number, infos: number): string;
|
|
4
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/best-practices/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAwBnD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMrF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAQrC,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,IAAI,EAO9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-deep-component-import.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/no-deep-component-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,UAAU,CAAC;AA+B7D,eAAO,MAAM,qBAAqB,EAAE,IA6BnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-direct-product-card-import.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/no-direct-product-card-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,UAAU,CAAC;AAkB7D,eAAO,MAAM,yBAAyB,EAAE,IAgCvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-img-without-dimensions.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/no-img-without-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,UAAU,CAAC;AAQ7D,eAAO,MAAM,sBAAsB,EAAE,IAqCpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-manual-dom.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/no-manual-dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,UAAU,CAAC;AAa7D,eAAO,MAAM,WAAW,EAAE,IA8BzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-window-location-reload.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/no-window-location-reload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,UAAU,CAAC;AAI7D,eAAO,MAAM,sBAAsB,EAAE,IAyBpC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* require-page-hooks rule for the best-practices Vite plugin.
|
|
3
|
+
*
|
|
4
|
+
* Validates that route files include expected HookSlot components or
|
|
5
|
+
* hookRegistry.register() calls to preserve SDK customization points.
|
|
6
|
+
*
|
|
7
|
+
* Uses oxc-parser for AST-based detection to avoid false-positives
|
|
8
|
+
* from comments and string literals.
|
|
9
|
+
*/
|
|
10
|
+
import type { Rule } from '../types';
|
|
11
|
+
/** Extract hooks from AST node recursively */
|
|
12
|
+
export declare function extractHooksFromAst(node: unknown, hooks: Set<string>): void;
|
|
13
|
+
/** Find all hooks in a file using oxc-parser, tracing local imports */
|
|
14
|
+
export declare function findHooksInFile(filePath: string, visited?: Set<string>): Set<string>;
|
|
15
|
+
export declare const requirePageHooks: Rule;
|
|
16
|
+
//# sourceMappingURL=require-page-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-page-hooks.d.ts","sourceRoot":"","sources":["../../../../../src/vite/plugins/best-practices/rules/require-page-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,UAAU,CAAC;AAoH7D,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAkF3E;AA+CD,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CA4E/F;AAaD,eAAO,MAAM,gBAAgB,EAAE,IAsD9B,CAAC"}
|