@ozdao/martyrs 0.2.510 → 0.2.512
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/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/auth.server.cjs +1 -2
- package/dist/auth.server.js +1 -2
- package/dist/builder.cjs +105 -19
- package/dist/builder.js +107 -20
- package/dist/{main-XJQJFmgj.cjs → main-B1XN9Zjg.cjs} +7 -7
- package/dist/{main-DrpgUZcn.js → main-u7zgfMGL.js} +1850 -1856
- package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue2.cjs → Chips.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue2.js → Chips.vue.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Select/{Select.vue.cjs → Select.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Select/{Select.vue.js → Select.vue2.js} +2 -2
- package/dist/martyrs/src/components/Select/{Select.vue.cjs.map → Select.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs → Tab.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs.map → Tab.vue2.js.map} +1 -1
- package/dist/martyrs/src/modules/auth/locales/ru.cjs +2 -0
- package/dist/martyrs/src/modules/auth/locales/ru.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/locales/ru.js +2 -0
- package/dist/martyrs/src/modules/auth/locales/ru.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/globals.client.cjs +4 -1
- package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.js +23 -20
- package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +27 -27
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +28 -28
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +308 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +308 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js.map +1 -0
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +2 -2
- package/dist/martyrs/src/modules/music/router/music.js +2 -2
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.cjs +101 -32
- package/dist/martyrs/src/modules/notifications/notifications.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +101 -32
- package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/store/notifications.store.cjs +45 -12
- package/dist/martyrs/src/modules/notifications/store/notifications.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/store/notifications.store.js +38 -5
- package/dist/martyrs/src/modules/notifications/store/notifications.store.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.cjs +33 -23
- package/dist/martyrs/src/modules/orders/store/shopcart.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.js +31 -21
- package/dist/martyrs/src/modules/orders/store/shopcart.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +64 -63
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +64 -63
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +3 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +3 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +2 -2
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.cjs +8 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js +8 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.cjs +13 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.cjs.map +1 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js +13 -0
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.2.0/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.cjs +43 -0
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.cjs.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js +43 -0
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel-vue@8.6.0_vue@3.5.13_typescript@5.8.3_/node_modules/embla-carousel-vue/esm/embla-carousel-vue.esm.cjs +43 -0
- package/dist/node_modules/.pnpm/embla-carousel-vue@8.6.0_vue@3.5.13_typescript@5.8.3_/node_modules/embla-carousel-vue/esm/embla-carousel-vue.esm.cjs.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel-vue@8.6.0_vue@3.5.13_typescript@5.8.3_/node_modules/embla-carousel-vue/esm/embla-carousel-vue.esm.js +43 -0
- package/dist/node_modules/.pnpm/embla-carousel-vue@8.6.0_vue@3.5.13_typescript@5.8.3_/node_modules/embla-carousel-vue/esm/embla-carousel-vue.esm.js.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.cjs +1630 -0
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.cjs.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js +1630 -0
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map +1 -0
- package/dist/notifications.server.cjs +205 -11
- package/dist/notifications.server.js +205 -11
- package/dist/orders.server.cjs +3 -0
- package/dist/orders.server.js +3 -0
- package/dist/products.server.cjs +9 -36
- package/dist/products.server.js +9 -36
- package/dist/style.css +199 -190
- package/dist/{web-C5cmb1FH.js → web--8-wgr6b.js} +1 -1
- package/dist/{web-d40xcY_Y.cjs → web-BS6utuAZ.cjs} +1 -1
- package/package.json +1 -1
- package/src/builder/CLAUDE.MD +405 -0
- package/src/builder/builder.js +3 -0
- package/src/builder/modes/spa.dev.js +35 -15
- package/src/builder/modes/spa.prod.js +5 -6
- package/src/builder/modes/spa.rspack.dev.js +110 -0
- package/src/components/Button/Button.vue +2 -2
- package/src/modules/auth/controllers/services/twofa.service.js +1 -1
- package/src/modules/auth/locales/ru.js +2 -0
- package/src/modules/auth/views/components/pages/EnterCode.vue +2 -2
- package/src/modules/globals/globals.client.js +4 -0
- package/src/modules/globals/views/components/layouts/Client.vue +1 -0
- package/src/modules/globals/views/components/sections/Filters.vue +26 -17
- package/src/modules/globals/views/components/sections/Walkthrough.vue +245 -57
- package/src/modules/notifications/FIXES.md +1 -0
- package/src/modules/notifications/controllers/notifications.controller.js +147 -7
- package/src/modules/notifications/models/user-device.model.js +10 -2
- package/src/modules/notifications/notifications.client.js +127 -41
- package/src/modules/notifications/routes/notifications.routes.js +4 -0
- package/src/modules/notifications/services/notification.service.js +93 -0
- package/src/modules/notifications/store/notifications.store.js +47 -7
- package/src/modules/orders/models/application.model.js +3 -0
- package/src/modules/orders/store/shopcart.js +34 -23
- package/src/modules/products/components/pages/Products.vue +12 -10
- package/src/modules/products/controllers/configs/products.lookup.config.js +0 -26
- package/src/modules/products/controllers/products.controller.js +3 -7
- package/src/modules/products/controllers/queries/products.queries.js +10 -5
- package/src/modules/products/migrations/categories-to-materialized-path.js +0 -3
- package/src/styles/base/backgrounds.scss +1 -0
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/components/Select/Select.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
# Builder Module - Техническая документация
|
|
2
|
+
|
|
3
|
+
## Архитектура
|
|
4
|
+
|
|
5
|
+
Builder - это модульная система сборки, поддерживающая 3 бандлера (Webpack, Rspack, Vite) и 2 режима рендеринга (SPA, SSR). Система построена для тестирования и публикации npm библиотеки с различными бандлерами.
|
|
6
|
+
|
|
7
|
+
## Файловая структура
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
builder/
|
|
11
|
+
├── builder.js # Главный экспорт всех модулей
|
|
12
|
+
├── modes/ # Режимы работы серверов
|
|
13
|
+
│ ├── spa.dev.js # SPA development server (Webpack)
|
|
14
|
+
│ ├── spa.rspack.dev.js # SPA development server (Rspack)
|
|
15
|
+
│ ├── spa.prod.js # SPA production server
|
|
16
|
+
│ ├── ssr.dev.js # SSR development (default Webpack)
|
|
17
|
+
│ ├── ssr.prod.js # SSR production server
|
|
18
|
+
│ ├── ssr.rspack.dev.js # SSR development с Rspack
|
|
19
|
+
│ └── ssr.vite.dev.js # SSR development с Vite
|
|
20
|
+
├── webpack/ # Конфигурации Webpack
|
|
21
|
+
│ ├── index.js # Экспорт всех webpack конфигов
|
|
22
|
+
│ ├── webpack.config.base.js # Базовая конфигурация
|
|
23
|
+
│ ├── webpack.config.api.js # API server конфигурация
|
|
24
|
+
│ ├── webpack.config.spa.client.js # SPA клиент
|
|
25
|
+
│ ├── webpack.config.ssr.client.js # SSR клиент
|
|
26
|
+
│ └── webpack.config.ssr.server.js # SSR сервер
|
|
27
|
+
├── rspack/ # Конфигурации Rspack
|
|
28
|
+
│ ├── index.js # Экспорт всех rspack конфигов
|
|
29
|
+
│ ├── rspack.config.base.js # Базовая конфигурация
|
|
30
|
+
│ ├── rspack.config.api.js # API server конфигурация
|
|
31
|
+
│ ├── rspack.config.spa.client.js # SPA клиент
|
|
32
|
+
│ ├── rspack.config.ssr.client.js # SSR клиент
|
|
33
|
+
│ └── rspack.config.ssr.server.js # SSR сервер
|
|
34
|
+
├── vite/ # Конфигурации Vite
|
|
35
|
+
│ ├── index.js # Экспорт всех vite конфигов
|
|
36
|
+
│ ├── vite.config.base.js # Базовая конфигурация
|
|
37
|
+
│ ├── vite.config.api.js # API server конфигурация
|
|
38
|
+
│ ├── vite.config.spa.client.js # SPA клиент
|
|
39
|
+
│ ├── vite.config.ssr.client.js # SSR клиент
|
|
40
|
+
│ └── vite.config.ssr.server.js # SSR сервер
|
|
41
|
+
├── ssr/ # SSR утилиты
|
|
42
|
+
│ ├── ssr-render-html.js # HTML рендеринг с отслеживанием обновлений
|
|
43
|
+
│ ├── ssr-render-html.vite.js # HTML рендеринг для Vite (без polling)
|
|
44
|
+
│ ├── ssr-transform-webpack-stats.js # Обработка webpack статистик
|
|
45
|
+
│ └── utils.js # Утилиты для работы с модулями
|
|
46
|
+
├── templates/ # HTML шаблоны
|
|
47
|
+
│ ├── page.js # Полный HTML шаблон с аналитикой
|
|
48
|
+
│ └── screen.js # Упрощенный HTML шаблон
|
|
49
|
+
└── utils/
|
|
50
|
+
└── hot-reload.js # Утилиты для горячей перезагрузки
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Режимы работы (modes/)
|
|
54
|
+
|
|
55
|
+
### Паттерн функций
|
|
56
|
+
|
|
57
|
+
Все файлы режимов экспортируют функции со структурой:
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
export default function createServer(projectRoot, configs) {
|
|
61
|
+
// настройка компиляторов и middleware
|
|
62
|
+
// динамический импорт серверного модуля через ESM
|
|
63
|
+
|
|
64
|
+
const startServer = async () => {
|
|
65
|
+
// запуск сервера на порту process.env.PORT || 8080
|
|
66
|
+
console.log(`Server started at localhost:${port}`);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return startServer;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### spa.dev.js
|
|
74
|
+
|
|
75
|
+
**Параметры:**
|
|
76
|
+
- `projectRoot` - корневая папка проекта
|
|
77
|
+
- `{ spaConfig, apiConfig }` - конфигурации webpack
|
|
78
|
+
|
|
79
|
+
**Функциональность:**
|
|
80
|
+
- Создает 2 webpack компилятора (SPA client + API server)
|
|
81
|
+
- Динамический импорт серверного модуля через ESM с cache busting
|
|
82
|
+
- Использует `webpack-dev-middleware` для горячей перекомпиляции
|
|
83
|
+
- Настраивает `connect-history-api-fallback` для SPA роутинга
|
|
84
|
+
- Обслуживает index.html из памяти компилятора
|
|
85
|
+
- Автоматический перезапуск при изменениях серверного кода
|
|
86
|
+
|
|
87
|
+
### spa.rspack.dev.js
|
|
88
|
+
|
|
89
|
+
**Параметры:**
|
|
90
|
+
- `projectRoot` - корневая папка проекта
|
|
91
|
+
- `{ spaConfig, apiConfig }` - конфигурации rspack
|
|
92
|
+
|
|
93
|
+
**Функциональность:**
|
|
94
|
+
- Аналогичен spa.dev.js но использует Rspack вместо Webpack
|
|
95
|
+
- Более быстрая компиляция благодаря Rust-основе Rspack
|
|
96
|
+
- Встроенный SWC для трансформации JavaScript
|
|
97
|
+
|
|
98
|
+
### spa.prod.js
|
|
99
|
+
|
|
100
|
+
**Параметры:**
|
|
101
|
+
- `projectRoot` - корневая папка
|
|
102
|
+
|
|
103
|
+
**Функциональность:**
|
|
104
|
+
- Обслуживает готовые файлы из `builds/web/spa/`
|
|
105
|
+
- Читает index.html с диска
|
|
106
|
+
- Настраивает кэширование на 1 день
|
|
107
|
+
|
|
108
|
+
### ssr.dev.js
|
|
109
|
+
|
|
110
|
+
**Параметры:**
|
|
111
|
+
- `projectRoot` - корневая папка
|
|
112
|
+
- `{ clientConfig, apiConfig, ssrConfig }`
|
|
113
|
+
|
|
114
|
+
**Функциональность:**
|
|
115
|
+
- Использует @rspack/core по умолчанию
|
|
116
|
+
- Настраивает 3 компилятора (client, ssr, server)
|
|
117
|
+
- Динамический импорт SSR модулей через ESM
|
|
118
|
+
- Интеграция с `createHtmlRenderer` для финального HTML
|
|
119
|
+
|
|
120
|
+
### ssr.rspack.dev.js
|
|
121
|
+
|
|
122
|
+
**Особенности:**
|
|
123
|
+
- Тройная компиляция с Rspack
|
|
124
|
+
- `fork` для изоляции процессов
|
|
125
|
+
- Watch mode с автоперезапуском сервера
|
|
126
|
+
- Импорт с временными метками для сброса кэша
|
|
127
|
+
|
|
128
|
+
### ssr.vite.dev.js
|
|
129
|
+
|
|
130
|
+
**Особенности:**
|
|
131
|
+
- `createViteServer` в middleware режиме
|
|
132
|
+
- `vite.ssrLoadModule()` для динамической загрузки
|
|
133
|
+
- Встроенный HMR Vite
|
|
134
|
+
- File watching с debounce 500ms
|
|
135
|
+
|
|
136
|
+
### ssr.prod.js
|
|
137
|
+
|
|
138
|
+
**Функциональность:**
|
|
139
|
+
- Читает готовые `stats.json` и `manifest.json`
|
|
140
|
+
- Импортирует готовый SSR модуль
|
|
141
|
+
- Обслуживает статические файлы с кэшированием
|
|
142
|
+
|
|
143
|
+
## Конфигурации бандлеров
|
|
144
|
+
|
|
145
|
+
### Общие алиасы
|
|
146
|
+
|
|
147
|
+
Все бандлеры используют одинаковые алиасы:
|
|
148
|
+
```javascript
|
|
149
|
+
alias: {
|
|
150
|
+
'@': path.resolve(projectRoot, 'src'),
|
|
151
|
+
'@martyrs': path.resolve(projectRoot, 'martyrs'),
|
|
152
|
+
vue: path.resolve(projectRoot, 'node_modules/vue'),
|
|
153
|
+
'vue-router': path.resolve(projectRoot, 'node_modules/vue-router'),
|
|
154
|
+
'vue-i18n': path.resolve(projectRoot, 'node_modules/vue-i18n'),
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Webpack конфигурации
|
|
159
|
+
|
|
160
|
+
#### webpack.config.base.js
|
|
161
|
+
|
|
162
|
+
**Параметры:** `(projectRoot)`
|
|
163
|
+
|
|
164
|
+
**Ключевые лоадеры:**
|
|
165
|
+
- `babel-loader` - JS/ESM с поддержкой `modules: false`
|
|
166
|
+
- `vue-loader` - Vue SFC файлы
|
|
167
|
+
- `css-loader` + `sass-loader` - CSS/SCSS обработка
|
|
168
|
+
- `url-loader` - статические ресурсы с `emitFile: false`
|
|
169
|
+
|
|
170
|
+
**Плагины:**
|
|
171
|
+
- `VueLoaderPlugin`, `CleanWebpackPlugin`, `MiniCssExtractPlugin`
|
|
172
|
+
- `dotenv` для переменных окружения
|
|
173
|
+
- Условный `BundleAnalyzerPlugin`
|
|
174
|
+
|
|
175
|
+
#### webpack.config.api.js
|
|
176
|
+
|
|
177
|
+
**Особенности:**
|
|
178
|
+
- `target: 'node'` для серверной среды
|
|
179
|
+
- `libraryTarget: 'module'` + `outputModule: true` для ESM
|
|
180
|
+
- `webpack-node-externals` с `importType: 'module'`
|
|
181
|
+
- Entry: `src/server.js`
|
|
182
|
+
|
|
183
|
+
#### webpack.config.spa.client.js
|
|
184
|
+
|
|
185
|
+
**Наследует:** ssr.client.js
|
|
186
|
+
**Дополнительно:**
|
|
187
|
+
- `HtmlWebpackPlugin` с Mustache шаблоном
|
|
188
|
+
- `LimitChunkCountPlugin` (1 chunk)
|
|
189
|
+
- `TerserPlugin` + `CssMinimizerPlugin` оптимизация
|
|
190
|
+
|
|
191
|
+
#### webpack.config.ssr.client.js
|
|
192
|
+
|
|
193
|
+
**Наследует:** base.js
|
|
194
|
+
**Особенности:**
|
|
195
|
+
- Hot reload entry в development
|
|
196
|
+
- `PurgeCSSPlugin` с safelist для Vue scoped styles
|
|
197
|
+
- Code splitting для vendor chunks
|
|
198
|
+
- `StatsWriterPlugin` для статистики
|
|
199
|
+
|
|
200
|
+
#### webpack.config.ssr.server.js
|
|
201
|
+
|
|
202
|
+
**Особенности:**
|
|
203
|
+
- `target: 'node'` + ESM модули
|
|
204
|
+
- `null-loader` для CSS файлов
|
|
205
|
+
- `LimitChunkCountPlugin` (1 chunk)
|
|
206
|
+
- `WebpackManifestPlugin` в production
|
|
207
|
+
|
|
208
|
+
### Rspack конфигурации
|
|
209
|
+
|
|
210
|
+
#### Ключевые отличия от Webpack:
|
|
211
|
+
|
|
212
|
+
**builtin:swc-loader вместо babel:**
|
|
213
|
+
```javascript
|
|
214
|
+
{
|
|
215
|
+
test: /\.m?js$/,
|
|
216
|
+
use: {
|
|
217
|
+
loader: 'builtin:swc-loader',
|
|
218
|
+
options: {
|
|
219
|
+
jsc: {
|
|
220
|
+
parser: { syntax: 'ecmascript' },
|
|
221
|
+
target: 'es2020'
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Встроенные минификаторы:**
|
|
229
|
+
```javascript
|
|
230
|
+
optimization: {
|
|
231
|
+
minimizer: [
|
|
232
|
+
new rspack.SwcJsMinimizerRspackPlugin(),
|
|
233
|
+
new rspack.LightningCssMinimizerRspackPlugin()
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Кастомная обработка Vue шаблонов:**
|
|
239
|
+
- Поддержка сокращенного v-slot синтаксиса
|
|
240
|
+
- Regex трансформации для `#slotname`
|
|
241
|
+
|
|
242
|
+
### Vite конфигурации
|
|
243
|
+
|
|
244
|
+
#### Ключевые отличия:
|
|
245
|
+
|
|
246
|
+
**Автоматическая обработка:**
|
|
247
|
+
- Нет необходимости в лоадерах для большинства файлов
|
|
248
|
+
- Автоматическая экстракция CSS в production
|
|
249
|
+
- `emptyOutDir: true` заменяет CleanWebpackPlugin
|
|
250
|
+
|
|
251
|
+
**Кастомные плагины:**
|
|
252
|
+
```javascript
|
|
253
|
+
// PurgeCSS плагин
|
|
254
|
+
{
|
|
255
|
+
name: 'vite-plugin-purge-css',
|
|
256
|
+
apply: 'build',
|
|
257
|
+
enforce: 'post',
|
|
258
|
+
async generateBundle(options, bundle) {
|
|
259
|
+
// Логика очистки CSS
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Умное разделение кода:**
|
|
265
|
+
```javascript
|
|
266
|
+
manualChunks(id) {
|
|
267
|
+
if (id.includes('node_modules')) {
|
|
268
|
+
if (id.includes('vue')) return 'vue-vendor';
|
|
269
|
+
if (id.includes('@martyrs')) return 'martyrs-vendor';
|
|
270
|
+
}
|
|
271
|
+
if (id.includes('src/modules/')) {
|
|
272
|
+
const match = id.match(/src\/modules\/([^\/]+)/);
|
|
273
|
+
return `module-${match[1]}`;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## SSR утилиты
|
|
279
|
+
|
|
280
|
+
### ssr-render-html.js
|
|
281
|
+
|
|
282
|
+
**Экспорт:**
|
|
283
|
+
- `renderHtml(stuff)` - рендеринг HTML с Mustache
|
|
284
|
+
- `createHtmlRenderer(onTemplateUpdate)` - фабрика с отслеживанием обновлений
|
|
285
|
+
|
|
286
|
+
**Функциональность:**
|
|
287
|
+
- Объединяет входные данные с переменными окружения
|
|
288
|
+
- `setInterval(1000ms)` для отслеживания изменений шаблонов
|
|
289
|
+
- Автоматическое внедрение ключей аналитики
|
|
290
|
+
|
|
291
|
+
### ssr-render-html.vite.js
|
|
292
|
+
|
|
293
|
+
**Отличия:** Убран `setInterval` - Vite сам обрабатывает HMR
|
|
294
|
+
|
|
295
|
+
### ssr-transform-webpack-stats.js
|
|
296
|
+
|
|
297
|
+
**Функции:**
|
|
298
|
+
- `extractAssets(stats, publicPath)` - извлечение JS/CSS из статистик
|
|
299
|
+
- `transformDevStats(stats, outputFileSystem)` - dev режим с inline CSS
|
|
300
|
+
- `transformProdStats({stats, publicPath})` - prod режим с файлами
|
|
301
|
+
|
|
302
|
+
**Dev vs Prod:**
|
|
303
|
+
- **Dev:** CSS встраивается в `<style>` теги через `outputFileSystem`
|
|
304
|
+
- **Prod:** CSS подключается через `<link>` теги
|
|
305
|
+
|
|
306
|
+
### utils.js
|
|
307
|
+
|
|
308
|
+
**Утилиты:**
|
|
309
|
+
- `normalizeAssets(assets)` - приведение к массиву
|
|
310
|
+
- `hash(str)` - MD5 хеш
|
|
311
|
+
- `requireFromString(src, filename)` - выполнение модуля из строки
|
|
312
|
+
|
|
313
|
+
## HTML шаблоны
|
|
314
|
+
|
|
315
|
+
### page.js
|
|
316
|
+
|
|
317
|
+
**Полный HTML шаблон с:**
|
|
318
|
+
- Facebook Pixel и Domain Verification
|
|
319
|
+
- Google Analytics
|
|
320
|
+
- PWA манифест и иконки
|
|
321
|
+
- Мета-теги через `{{{ meta.* }}}`
|
|
322
|
+
- Встроенное состояние: `data-user-state` и `data-state`
|
|
323
|
+
|
|
324
|
+
### screen.js
|
|
325
|
+
|
|
326
|
+
**Упрощенный шаблон:**
|
|
327
|
+
- Без Facebook интеграции
|
|
328
|
+
- Google Analytics в body
|
|
329
|
+
- Жестко установлен `lang="en"`
|
|
330
|
+
|
|
331
|
+
## Переменные окружения
|
|
332
|
+
|
|
333
|
+
### Выбор бандлера
|
|
334
|
+
```bash
|
|
335
|
+
BUNDLER=RSPACK|VITE|WEBPACK # Default: WEBPACK
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Режим приложения
|
|
339
|
+
```bash
|
|
340
|
+
MODE=SSR|SPA # Default: SSR
|
|
341
|
+
NODE_ENV=development|production
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Аналитика
|
|
345
|
+
```bash
|
|
346
|
+
GOOGLE_TAG_ID=GA_MEASUREMENT_ID
|
|
347
|
+
FACEBOOK_PIXEL_ID=FB_PIXEL_ID
|
|
348
|
+
FACEBOOK_DOMAIN_VERIFICATION=VERIFICATION_CODE
|
|
349
|
+
GOOGLE_MAPS_API_KEY=MAPS_KEY
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Специальные режимы
|
|
353
|
+
```bash
|
|
354
|
+
MOBILE_APP=true # Для Capacitor сборок
|
|
355
|
+
BUNDLE_ANALYZER=true # Анализ размера бандла
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Выбор конфигурации в index.js
|
|
359
|
+
|
|
360
|
+
```javascript
|
|
361
|
+
const configs =
|
|
362
|
+
process.env.BUNDLER === 'RSPACK'
|
|
363
|
+
? {
|
|
364
|
+
api: rspackConfigs.apiConfig(projectRoot),
|
|
365
|
+
spa: rspackConfigs.spaConfig(projectRoot),
|
|
366
|
+
client: rspackConfigs.clientConfig(projectRoot),
|
|
367
|
+
ssr: rspackConfigs.ssrConfig(projectRoot),
|
|
368
|
+
}
|
|
369
|
+
: process.env.BUNDLER === 'VITE'
|
|
370
|
+
? {
|
|
371
|
+
api: viteConfigs.apiConfig(projectRoot),
|
|
372
|
+
spa: viteConfigs.spaClientConfig(projectRoot),
|
|
373
|
+
client: viteConfigs.ssrClientConfig(projectRoot),
|
|
374
|
+
ssr: viteConfigs.ssrServerConfig(projectRoot),
|
|
375
|
+
}
|
|
376
|
+
: {
|
|
377
|
+
api: webpackConfigs.apiConfig(projectRoot),
|
|
378
|
+
spa: webpackConfigs.spaClientConfig(projectRoot),
|
|
379
|
+
client: webpackConfigs.ssrClientConfig(projectRoot),
|
|
380
|
+
ssr: webpackConfigs.ssrServerConfig(projectRoot),
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
// Выбор функций создания серверов
|
|
384
|
+
const serverCreators = {
|
|
385
|
+
ssr: {
|
|
386
|
+
dev: bundler === 'RSPACK' ? createSsrRspackDevServer :
|
|
387
|
+
bundler === 'VITE' ? createSsrViteDevServer : createSsrDevServer,
|
|
388
|
+
prod: createSsrProdServer,
|
|
389
|
+
},
|
|
390
|
+
spa: {
|
|
391
|
+
dev: bundler === 'RSPACK' ? createSpaRspackDevServer : createSpaDevServer,
|
|
392
|
+
prod: createSpaProdServer,
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
## Архитектурные принципы
|
|
398
|
+
|
|
399
|
+
1. **Модульность** - каждый бандлер изолирован в своей папке
|
|
400
|
+
2. **Единый интерфейс** - все конфигурации принимают `projectRoot`
|
|
401
|
+
3. **ESM First** - нативная поддержка ES модулей
|
|
402
|
+
4. **Hot Reload** - различные стратегии для каждого бандлера
|
|
403
|
+
5. **Тестируемость** - поддержка 3 бандлеров для npm публикации
|
|
404
|
+
6. **Производительность** - Rspack как основной для SSR dev
|
|
405
|
+
7. **Совместимость** - сохранение функциональности между бандлерами
|
package/src/builder/builder.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import createSpaDevServer from './modes/spa.dev.js';
|
|
2
2
|
import createSpaProdServer from './modes/spa.prod.js';
|
|
3
|
+
import createSpaRspackDevServer from './modes/spa.rspack.dev.js';
|
|
3
4
|
import createSsrDevServer from './modes/ssr.dev.js';
|
|
4
5
|
import createSsrProdServer from './modes/ssr.prod.js';
|
|
5
6
|
import createSsrRspackDevServer from './modes/ssr.rspack.dev.js';
|
|
@@ -17,6 +18,7 @@ export {
|
|
|
17
18
|
createSsrViteDevServer,
|
|
18
19
|
createSsrProdServer,
|
|
19
20
|
createSpaDevServer,
|
|
21
|
+
createSpaRspackDevServer,
|
|
20
22
|
createSpaProdServer,
|
|
21
23
|
};
|
|
22
24
|
|
|
@@ -29,6 +31,7 @@ export default {
|
|
|
29
31
|
createSsrViteDevServer,
|
|
30
32
|
createSsrProdServer,
|
|
31
33
|
createSpaDevServer,
|
|
34
|
+
createSpaRspackDevServer,
|
|
32
35
|
createSpaProdServer,
|
|
33
36
|
};
|
|
34
37
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import history from 'connect-history-api-fallback';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import webpack from 'webpack';
|
|
4
4
|
import devMiddleware from 'webpack-dev-middleware';
|
|
5
|
-
export default
|
|
5
|
+
export default function createSpaDevServer(projectRoot, { spaConfig, apiConfig }) {
|
|
6
6
|
const spaCompiler = webpack(spaConfig);
|
|
7
7
|
const serverCompiler = webpack(apiConfig);
|
|
8
8
|
const createDevRenderer = () => {
|
|
@@ -23,26 +23,28 @@ export default (function createSpaDevServer(projectRoot, { spaConfig, apiConfig,
|
|
|
23
23
|
spaConfig.plugins.push(progressPlugin);
|
|
24
24
|
};
|
|
25
25
|
let serverInstance;
|
|
26
|
+
let serverModule;
|
|
27
|
+
|
|
26
28
|
const clientDevMiddleware = devMiddleware(spaCompiler, {
|
|
27
29
|
publicPath: spaConfig.output.publicPath,
|
|
28
30
|
stats: false,
|
|
29
31
|
});
|
|
30
|
-
|
|
31
|
-
// heartbeat: 5000,
|
|
32
|
-
// log: false
|
|
33
|
-
// });
|
|
32
|
+
|
|
34
33
|
const port = process.env.PORT || 8080;
|
|
34
|
+
|
|
35
35
|
// Функция для запуска сервера
|
|
36
36
|
const startServer = async () => {
|
|
37
37
|
if (serverInstance) {
|
|
38
38
|
serverInstance.close();
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
|
|
41
|
+
// Проверяем, что серверный модуль загружен
|
|
42
|
+
if (!serverModule) {
|
|
43
|
+
console.error("Серверный модуль еще не скомпилирован");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let { app, server, env } = await serverModule.createServer();
|
|
46
48
|
// Используем connect-history-api-fallback перед другими middleware
|
|
47
49
|
app.use(history());
|
|
48
50
|
app.use(clientDevMiddleware);
|
|
@@ -77,10 +79,28 @@ export default (function createSpaDevServer(projectRoot, { spaConfig, apiConfig,
|
|
|
77
79
|
console.error(err);
|
|
78
80
|
return;
|
|
79
81
|
}
|
|
82
|
+
|
|
80
83
|
console.log(stats.toString(apiConfig.stats));
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
// Получаем путь к скомпилированному файлу
|
|
87
|
+
const { outputPath } = stats.toJson();
|
|
88
|
+
const entryName = Object.keys(stats.toJson().entrypoints)[0];
|
|
89
|
+
const assetName = stats.toJson().entrypoints[entryName].assets[0].name;
|
|
90
|
+
|
|
91
|
+
// Импортируем с уникальным параметром для сброса кэша
|
|
92
|
+
serverModule = await import(`file://${path.resolve(outputPath, assetName)}?t=${Date.now()}`);
|
|
93
|
+
|
|
94
|
+
if (typeof serverModule.createServer !== 'function') {
|
|
95
|
+
throw new Error("Экспорт createServer не найден");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
console.log("Сервер скомпилирован, перезапуск...");
|
|
99
|
+
await startServer();
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error("Ошибка при загрузке серверного модуля:", error);
|
|
102
|
+
}
|
|
83
103
|
});
|
|
84
104
|
createDevRenderer();
|
|
85
105
|
return startServer;
|
|
86
|
-
}
|
|
106
|
+
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import history from 'connect-history-api-fallback';
|
|
2
|
+
import express from 'express';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
|
-
export default
|
|
5
|
+
export default function createSpaProdServer(projectRoot, config, createServer) {
|
|
6
6
|
let serverInstance;
|
|
7
7
|
const port = process.env.PORT || 8080;
|
|
8
8
|
// Функция для запуска сервера
|
|
9
9
|
const startServer = async () => {
|
|
10
|
-
|
|
11
|
-
let { app, server } = await createServer();
|
|
10
|
+
let { app, server } = await createServer.createServer();
|
|
12
11
|
// Включаем сжатие ответов
|
|
13
12
|
// app.use(compression());
|
|
14
13
|
// Статическое обслуживание сбилженных файлов
|
|
@@ -45,4 +44,4 @@ export default (function createSpaProdServer(projectRoot, { createServer }) {
|
|
|
45
44
|
}
|
|
46
45
|
};
|
|
47
46
|
return startServer;
|
|
48
|
-
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as history from 'connect-history-api-fallback';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { rspack, ProgressPlugin } from '@rspack/core';
|
|
5
|
+
import devMiddleware from 'webpack-dev-middleware';
|
|
6
|
+
|
|
7
|
+
export default function createSpaDevServer(projectRoot, { spaConfig, apiConfig }) {
|
|
8
|
+
const spaCompiler = rspack(spaConfig);
|
|
9
|
+
const serverCompiler = rspack(apiConfig);
|
|
10
|
+
|
|
11
|
+
const createDevRenderer = () => {
|
|
12
|
+
const progressPlugin = new ProgressPlugin((percentage, message, ...args) => {
|
|
13
|
+
console.log(
|
|
14
|
+
chalk.greenBright(`${(percentage * 100).toFixed(2)}% `) +
|
|
15
|
+
chalk.blueBright(message) +
|
|
16
|
+
" " +
|
|
17
|
+
args.map((arg) => chalk.yellow(arg)).join(" ")
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
spaConfig.plugins = spaConfig.plugins || [];
|
|
22
|
+
spaConfig.plugins.push(progressPlugin);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
let serverInstance;
|
|
26
|
+
let serverModule;
|
|
27
|
+
|
|
28
|
+
const clientDevMiddleware = devMiddleware(spaCompiler, {
|
|
29
|
+
publicPath: spaConfig.output.publicPath,
|
|
30
|
+
stats: false,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const port = process.env.PORT || 8080;
|
|
34
|
+
|
|
35
|
+
// Function to start the server
|
|
36
|
+
const startServer = async () => {
|
|
37
|
+
if (serverInstance) {
|
|
38
|
+
serverInstance.close();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Проверяем, что серверный модуль загружен
|
|
42
|
+
if (!serverModule) {
|
|
43
|
+
console.error("Серверный модуль еще не скомпилирован");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let { app, server, env } = await serverModule.createServer();
|
|
48
|
+
|
|
49
|
+
// Используем connect-history-api-fallback перед другими middleware
|
|
50
|
+
app.use(history());
|
|
51
|
+
|
|
52
|
+
app.use(clientDevMiddleware);
|
|
53
|
+
|
|
54
|
+
// Обрабатываем все маршруты
|
|
55
|
+
app.get('*', (req, res, next) => {
|
|
56
|
+
const filename = path.join(spaCompiler.outputPath, 'index.html');
|
|
57
|
+
spaCompiler.outputFileSystem.readFile(filename, (err, result) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
return next(err);
|
|
60
|
+
}
|
|
61
|
+
res.set('content-type', 'text/html');
|
|
62
|
+
res.send(result);
|
|
63
|
+
res.end();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
serverInstance = server;
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
await server.listen(port);
|
|
71
|
+
console.log(`Server started at http://localhost:${port}\n`);
|
|
72
|
+
} catch (err) {
|
|
73
|
+
console.error(err);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// Настройка наблюдения за изменениями
|
|
79
|
+
serverCompiler.watch({}, async (err, stats) => {
|
|
80
|
+
if (err) {
|
|
81
|
+
console.error(err);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
console.log(stats.toString(apiConfig.stats));
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
// Получаем путь к скомпилированному файлу
|
|
89
|
+
const { outputPath } = stats.toJson();
|
|
90
|
+
const entryName = Object.keys(stats.toJson().entrypoints)[0];
|
|
91
|
+
const assetName = stats.toJson().entrypoints[entryName].assets[0].name;
|
|
92
|
+
|
|
93
|
+
// Импортируем с уникальным параметром для сброса кэша
|
|
94
|
+
serverModule = await import(`file://${path.resolve(outputPath, assetName)}?t=${Date.now()}`);
|
|
95
|
+
|
|
96
|
+
if (typeof serverModule.createServer !== 'function') {
|
|
97
|
+
throw new Error("Экспорт createServer не найден");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
console.log("Сервер скомпилирован, перезапуск...");
|
|
101
|
+
await startServer();
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error("Ошибка при загрузке серверного модуля:", error);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
createDevRenderer();
|
|
108
|
+
|
|
109
|
+
return startServer;
|
|
110
|
+
}
|
|
@@ -14,7 +14,7 @@ const controllerFactory = db => {
|
|
|
14
14
|
res.status(500).send('Failed to send email');
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
if (type === 'phone') {
|
|
17
|
+
else if (type === 'phone') {
|
|
18
18
|
const smsSent = await sendSms(req.body.phone, `Your ${process.env.APP_NAME} verification code: ${code}`);
|
|
19
19
|
if (smsSent) {
|
|
20
20
|
res.send({ code, type, method });
|
|
@@ -30,7 +30,9 @@ export default {
|
|
|
30
30
|
},
|
|
31
31
|
enterCode: {
|
|
32
32
|
verifyNumberTitle: "Подтвердите номер",
|
|
33
|
+
verifyEmailTitle: "Подтвердите email",
|
|
33
34
|
instructions: "Мы отправили код регистрации на ваш номер телефона. Введите его в поле ниже:",
|
|
35
|
+
instructionsEmail: "Мы отправили код регистрации на ваш email. Введите его в поле ниже:",
|
|
34
36
|
resendCode: "Отправить код еще раз",
|
|
35
37
|
secondsResend: "секунд до возможности отправить код еще раз."
|
|
36
38
|
},
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
<!-- <img loading="lazy" src="@/assets/icons/message1.png" class="i-extra mn-b-small"> -->
|
|
4
4
|
|
|
5
5
|
<h3 class="mn-b-medium">
|
|
6
|
-
{{ t('auth.enterCode.verifyNumberTitle') }}
|
|
6
|
+
{{ route.query.type === 'email' ? t('auth.enterCode.verifyEmailTitle') : t('auth.enterCode.verifyNumberTitle') }}
|
|
7
7
|
</h3>
|
|
8
8
|
|
|
9
|
-
<p class="mn-b-big t-transp">{{ t('auth.enterCode.instructions') }}</p>
|
|
9
|
+
<p class="mn-b-big t-transp">{{ route.query.type === 'email' ? t('auth.enterCode.instructionsEmail') : t('auth.enterCode.instructions') }}</p>
|
|
10
10
|
|
|
11
11
|
<div class="w-100 mn-b-big flex-nowrap flex">
|
|
12
12
|
<input
|