@ozdao/martyrs 0.2.539 → 0.2.541

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/{globals.verifier-CJ1lr-NW.cjs → globals.verifier-Bi-XLEi9.cjs} +24 -23
  2. package/dist/{globals.verifier-BhqUrneb.js → globals.verifier-gPPX_jhf.js} +24 -23
  3. package/dist/inventory.server.cjs +1 -1
  4. package/dist/inventory.server.js +1 -1
  5. package/dist/{main-Zhs0EqRp.cjs → main-7IA3UHca.cjs} +6 -6
  6. package/dist/{main-gOfhekZG.js → main-BpBtIUcJ.js} +549 -549
  7. package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
  8. package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
  9. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
  10. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
  11. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
  12. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
  13. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
  14. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
  15. package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
  16. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
  17. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
  18. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
  19. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
  20. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
  21. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +1 -1
  22. package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
  23. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +3 -3
  24. package/dist/martyrs/src/components/Feed/Feed.vue.js +3 -3
  25. package/dist/martyrs/src/components/FieldTags/create-tags.cjs +11 -2
  26. package/dist/martyrs/src/components/FieldTags/create-tags.cjs.map +1 -1
  27. package/dist/martyrs/src/components/FieldTags/create-tags.js +11 -2
  28. package/dist/martyrs/src/components/FieldTags/create-tags.js.map +1 -1
  29. package/dist/martyrs/src/components/Loader/{Loader.vue.cjs → Loader.vue2.cjs} +2 -2
  30. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -0
  31. package/dist/martyrs/src/components/Loader/{Loader.vue.js → Loader.vue2.js} +2 -2
  32. package/dist/martyrs/src/components/Loader/{Loader.vue.cjs.map → Loader.vue2.js.map} +1 -1
  33. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.cjs +1 -1
  34. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
  35. package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
  36. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
  37. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  38. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  39. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +1 -1
  40. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  41. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +3 -3
  42. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
  43. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  45. package/dist/martyrs/src/modules/auth/views/store/auth.cjs +0 -2
  46. package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
  47. package/dist/martyrs/src/modules/auth/views/store/auth.js +0 -2
  48. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  49. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  51. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
  52. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  53. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +3 -3
  54. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +3 -3
  55. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  57. package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  59. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  61. package/dist/martyrs/src/modules/globals/globals.client.cjs +0 -3
  62. package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
  63. package/dist/martyrs/src/modules/globals/globals.client.js +0 -3
  64. package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
  65. package/dist/martyrs/src/modules/globals/views/classes/globals.app.cjs +31 -41
  66. package/dist/martyrs/src/modules/globals/views/classes/globals.app.cjs.map +1 -1
  67. package/dist/martyrs/src/modules/globals/views/classes/globals.app.js +31 -41
  68. package/dist/martyrs/src/modules/globals/views/classes/globals.app.js.map +1 -1
  69. package/dist/martyrs/src/modules/globals/views/classes/module-registry.cjs +0 -3
  70. package/dist/martyrs/src/modules/globals/views/classes/module-registry.cjs.map +1 -1
  71. package/dist/martyrs/src/modules/globals/views/classes/module-registry.js +0 -3
  72. package/dist/martyrs/src/modules/globals/views/classes/module-registry.js.map +1 -1
  73. package/dist/martyrs/src/modules/globals/views/classes/store.cjs +0 -5
  74. package/dist/martyrs/src/modules/globals/views/classes/store.cjs.map +1 -1
  75. package/dist/martyrs/src/modules/globals/views/classes/store.js +0 -5
  76. package/dist/martyrs/src/modules/globals/views/classes/store.js.map +1 -1
  77. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
  78. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
  79. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  80. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  81. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
  83. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  84. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  85. package/dist/martyrs/src/modules/globals/views/components/sections/{Filters.vue.cjs → Filters.vue2.cjs} +2 -2
  86. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -0
  87. package/dist/martyrs/src/modules/globals/views/components/sections/{Filters.vue.js → Filters.vue2.js} +2 -2
  88. package/dist/martyrs/src/modules/globals/views/components/sections/{Filters.vue.cjs.map → Filters.vue2.js.map} +1 -1
  89. package/dist/martyrs/src/modules/globals/views/store/globals.cjs +2 -2
  90. package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
  91. package/dist/martyrs/src/modules/globals/views/store/globals.js +2 -2
  92. package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
  93. package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.cjs +7 -3
  94. package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.cjs.map +1 -1
  95. package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.js +7 -3
  96. package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.js.map +1 -1
  97. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +2 -2
  98. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +1 -1
  99. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  100. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  101. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +1 -1
  102. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  103. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  105. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +2 -2
  106. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
  107. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  108. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  109. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +2 -2
  110. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +2 -2
  111. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +2 -2
  114. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
  115. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  116. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  117. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  119. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -3
  120. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -3
  121. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +4 -4
  122. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +4 -4
  123. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +4 -4
  124. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +4 -4
  125. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +4 -4
  126. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +4 -4
  127. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +4 -4
  128. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +4 -4
  129. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  131. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  132. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  133. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  134. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  135. package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
  136. package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
  137. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  139. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
  141. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
  142. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  143. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +19 -3
  144. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  145. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +19 -3
  146. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  147. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
  148. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  149. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  150. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  151. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
  153. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
  154. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  155. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  156. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  157. package/dist/martyrs/src/modules/products/store/categories.cjs +4 -0
  158. package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
  159. package/dist/martyrs/src/modules/products/store/categories.js +4 -0
  160. package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
  161. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  162. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  163. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  164. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  165. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  166. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
  167. package/dist/martyrs.cjs.js +1 -1
  168. package/dist/martyrs.es.js +1 -1
  169. package/dist/music.server.cjs +1 -1
  170. package/dist/music.server.js +1 -1
  171. package/dist/orders.server.cjs +1 -1
  172. package/dist/orders.server.js +1 -1
  173. package/dist/organizations.server.cjs +1 -1
  174. package/dist/organizations.server.js +1 -1
  175. package/dist/products.server.cjs +10 -2
  176. package/dist/products.server.js +10 -2
  177. package/dist/rents.server.cjs +1 -1
  178. package/dist/rents.server.js +1 -1
  179. package/dist/{web-bMa0DMyG.cjs → web-C9bVm6Nw.cjs} +1 -1
  180. package/dist/{web-DxxU2bwy.js → web-DsdyXC8n.js} +1 -1
  181. package/package.json +1 -1
  182. package/src/components/FieldTags/FieldTagsNew.vue +366 -0
  183. package/src/components/FieldTags/README.md +513 -0
  184. package/src/components/FieldTags/create-tags.js +15 -2
  185. package/src/modules/auth/views/store/auth.js +0 -2
  186. package/src/modules/globals/controllers/classes/globals.validator.js +24 -23
  187. package/src/modules/globals/globals.client.js +0 -3
  188. package/src/modules/globals/views/classes/globals.app.js +21 -34
  189. package/src/modules/globals/views/classes/module-registry.js +0 -3
  190. package/src/modules/globals/views/classes/store.js +0 -7
  191. package/src/modules/globals/views/store/globals.js +2 -2
  192. package/src/modules/globals/views/utils/vue-app-renderer.js +11 -3
  193. package/src/modules/products/components/pages/CategoryEdit.vue +20 -0
  194. package/src/modules/products/middlewares/categories.verifier.js +9 -1
  195. package/src/modules/products/store/categories.js +5 -0
  196. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
  197. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +0 -1
  198. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
  199. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  200. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"globals.client.cjs","sources":["../../../../../src/modules/globals/globals.client.js"],"sourcesContent":["// Functional imports (needed for initialize function)\nimport getBrowserLocale from './views/localization/get-browser-locale.js';\nimport scrollBehavior from './views/router/scrollBehavior.js';\n\nimport * as mixins from './views/mixins/mixins.js';\nimport * as storeGlobals from './views/store/globals.js';\nimport * as appRenderer from './views/utils/vue-app-renderer.js';\nimport './views/utils/polyfills.js'; // Auto-apply polyfills\n\nimport alertPlugin from './views/plugins/alert.plugin.js';\nimport popupAuthPlugin from './views/plugins/popup.auth.plugin.js';\nimport datePickerPlugin from './views/plugins/date-picker.plugin.js';\nimport storeDebuggerPlugin from './views/plugins/store-debugger/store-debugger.plugin.js';\n\nimport store from './views/classes/store.js';\nimport websockets from './views/classes/globals.websocket.js';\nimport { i18nManager } from '@martyrs/src/modules/globals/views/classes/globals.i18n.js';\nimport { moduleRegistry } from './views/classes/module-registry.js';\n\nimport en from './locales/en.js';\nimport ru from './locales/ru.js';\n\n\n// Пример функции инициализации для модуля заказов\nfunction initializeGlobals(app, store, router, config, options = {}) {\n const route = options.route || 'Home';\n\n const locales = {\n en: en,\n ru: ru,\n es: {} // или es: undefined\n };\n\n i18nManager.register('globals', locales);\n\n const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];\n\n app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;\n app.config.globalProperties.API_URL = process.env.API_URL;\n app.config.globalProperties.WSS_URL = process.env.WSS_URL;\n app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;\n app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;\n app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;\n\n app.mixin(mixins.globalMixins);\n\n app.use(alertPlugin);\n app.use(popupAuthPlugin);\n app.use(datePickerPlugin);\n // app.use(storeDebuggerPlugin, store);\n\n\n // WebSocket инициализируется в client.js после гидратации\n // чтобы не блокировать главный поток\n\n // Change Locale to Route Locale if available\n router.beforeEach((to, from, next) => {\n const locale = to.params.locale;\n\n if (locale) {\n if (!app.config.globalProperties.$i18n.availableLocales.includes(locale)) {\n return next({ path: '/404' });\n } else {\n app.config.globalProperties.$i18n.locale = locale;\n return next();\n }\n }\n\n return next();\n });\n\n if (config && config.modules) storeGlobals.state.options = config.modules;\n\n console.log('[DEBUG] initializeGlobals called with store:', !!store);\n console.log('[DEBUG] Adding globals to store...');\n store.addStore('globals', storeGlobals);\n console.log('[DEBUG] globals added to store:', !!store.globals);\n\n router.addRoute(route, {\n path: '404',\n name: 'notfound',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/404.vue'),\n });\n router.addRoute(route, {\n path: '401',\n name: 'unauthorized',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/401.vue'),\n });\n router.addRoute(route, {\n path: ':pathMatch(.*)*',\n name: 'NotFound',\n redirect: { name: 'notfound' },\n });\n}\n\nconst ModuleGlobals = {\n initialize: initializeGlobals,\n views: {\n store: {\n storeGlobals,\n },\n router: {\n // routerOrders\n },\n },\n};\n\n// Component re-exports (enables tree shaking)\nexport { default as layoutApp } from './views/components/layouts/App.vue';\nexport { default as layoutClient } from './views/components/layouts/Client.vue';\nexport { default as BlockSearch } from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue';\nexport { default as BottomNavigationBar } from '@martyrs/src/modules/globals/views/components/partials/BottomNavigationBar.vue';\nexport { default as Header } from '@martyrs/src/modules/globals/views/components/partials/Header.vue';\nexport { default as Navigation } from '@martyrs/src/modules/globals/views/components/partials/Navigation.vue';\nexport { default as NavigationBar } from '@martyrs/src/modules/globals/views/components/partials/NavigationBar.vue';\nexport { default as Sidebar } from '@martyrs/src/modules/globals/views/components/partials/Sidebar.vue';\nexport { default as Footer } from '@martyrs/src/modules/globals/views/components/partials/Footer.vue';\nexport { default as Walkthrough } from '@martyrs/src/modules/globals/views/components/sections/Walkthrough.vue';\n\n// Functional exports\nexport {\n appRenderer,\n getBrowserLocale,\n mixins,\n moduleRegistry,\n scrollBehavior,\n store,\n i18nManager,\n storeGlobals,\n websockets,\n};\n\n// Export client factory\nexport { createUniversalApp } from './views/classes/globals.app.js';\n\n// Re-export polyfills for documentation\nexport * from './views/utils/polyfills.js';\n\nexport default ModuleGlobals;\n"],"names":["store","en","ru","i18nManager","mixins.globalMixins","alertPlugin","popupAuthPlugin","datePickerPlugin","storeGlobals.state","storeGlobals"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAS,kBAAkB,KAAKA,QAAO,QAAQ,QAAQ,UAAU,IAAI;AACnE,QAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAM,UAAU;AAAA,IACd,IAAIC,GAAAA;AAAAA,IACJ,IAAIC,GAAAA;AAAAA,IACJ,IAAI,CAAA;AAAA;AAAA,EACR;AAEEC,2BAAY,SAAS,WAAW,OAAO;AAIvC,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,kBAAkB,QAAQ,IAAI;AAC1D,MAAI,OAAO,iBAAiB,sBAAsB,QAAQ,IAAI;AAE9D,MAAI,MAAMC,mBAAmB;AAE7B,MAAI,IAAIC,oBAAW;AACnB,MAAI,IAAIC,yBAAe;AACvB,MAAI,IAAIC,yBAAgB;AAQxB,SAAO,WAAW,CAAC,IAAI,MAAM,SAAS;AACpC,UAAM,SAAS,GAAG,OAAO;AAEzB,QAAI,QAAQ;AACV,UAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM,iBAAiB,SAAS,MAAM,GAAG;AACxE,eAAO,KAAK,EAAE,MAAM,QAAQ;AAAA,MAC9B,OAAO;AACL,YAAI,OAAO,iBAAiB,MAAM,SAAS;AAC3C,eAAO,KAAI;AAAA,MACb;AAAA,IACF;AAEA,WAAO,KAAI;AAAA,EACb,CAAC;AAED,MAAI,UAAU,OAAO,QAASC,SAAAA,MAAmB,UAAU,OAAO;AAElE,UAAQ,IAAI,gDAAgD,CAAC,CAACR,MAAK;AACnE,UAAQ,IAAI,oCAAoC;AAChD,EAAAA,OAAM,SAAS,WAAWS,OAAY;AACtC,UAAQ,IAAI,mCAAmC,CAAC,CAACT,OAAM,OAAO;AAE9D,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,sCAA6D,CAAA;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,sCAA6D,CAAA;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,WAAU;AAAA,EAChC,CAAG;AACH;AAEK,MAAC,gBAAgB;AAAA,EACpB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,cAAMS;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA;AAAA,IAEZ;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"globals.client.cjs","sources":["../../../../../src/modules/globals/globals.client.js"],"sourcesContent":["// Functional imports (needed for initialize function)\nimport getBrowserLocale from './views/localization/get-browser-locale.js';\nimport scrollBehavior from './views/router/scrollBehavior.js';\n\nimport * as mixins from './views/mixins/mixins.js';\nimport * as storeGlobals from './views/store/globals.js';\nimport * as appRenderer from './views/utils/vue-app-renderer.js';\nimport './views/utils/polyfills.js'; // Auto-apply polyfills\n\nimport alertPlugin from './views/plugins/alert.plugin.js';\nimport popupAuthPlugin from './views/plugins/popup.auth.plugin.js';\nimport datePickerPlugin from './views/plugins/date-picker.plugin.js';\nimport storeDebuggerPlugin from './views/plugins/store-debugger/store-debugger.plugin.js';\n\nimport store from './views/classes/store.js';\nimport websockets from './views/classes/globals.websocket.js';\nimport { i18nManager } from '@martyrs/src/modules/globals/views/classes/globals.i18n.js';\nimport { moduleRegistry } from './views/classes/module-registry.js';\n\nimport en from './locales/en.js';\nimport ru from './locales/ru.js';\n\n\n// Пример функции инициализации для модуля заказов\nfunction initializeGlobals(app, store, router, config, options = {}) {\n const route = options.route || 'Home';\n\n const locales = {\n en: en,\n ru: ru,\n es: {} // или es: undefined\n };\n\n i18nManager.register('globals', locales);\n\n const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];\n\n app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;\n app.config.globalProperties.API_URL = process.env.API_URL;\n app.config.globalProperties.WSS_URL = process.env.WSS_URL;\n app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;\n app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;\n app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;\n\n app.mixin(mixins.globalMixins);\n\n app.use(alertPlugin);\n app.use(popupAuthPlugin);\n app.use(datePickerPlugin);\n // app.use(storeDebuggerPlugin, store);\n\n\n // WebSocket инициализируется в client.js после гидратации\n // чтобы не блокировать главный поток\n\n // Change Locale to Route Locale if available\n router.beforeEach((to, from, next) => {\n const locale = to.params.locale;\n\n if (locale) {\n if (!app.config.globalProperties.$i18n.availableLocales.includes(locale)) {\n return next({ path: '/404' });\n } else {\n app.config.globalProperties.$i18n.locale = locale;\n return next();\n }\n }\n\n return next();\n });\n\n if (config && config.modules) storeGlobals.state.options = config.modules;\n\n store.addStore('globals', storeGlobals);\n\n router.addRoute(route, {\n path: '404',\n name: 'notfound',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/404.vue'),\n });\n router.addRoute(route, {\n path: '401',\n name: 'unauthorized',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/401.vue'),\n });\n router.addRoute(route, {\n path: ':pathMatch(.*)*',\n name: 'NotFound',\n redirect: { name: 'notfound' },\n });\n}\n\nconst ModuleGlobals = {\n initialize: initializeGlobals,\n views: {\n store: {\n storeGlobals,\n },\n router: {\n // routerOrders\n },\n },\n};\n\n// Component re-exports (enables tree shaking)\nexport { default as layoutApp } from './views/components/layouts/App.vue';\nexport { default as layoutClient } from './views/components/layouts/Client.vue';\nexport { default as BlockSearch } from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue';\nexport { default as BottomNavigationBar } from '@martyrs/src/modules/globals/views/components/partials/BottomNavigationBar.vue';\nexport { default as Header } from '@martyrs/src/modules/globals/views/components/partials/Header.vue';\nexport { default as Navigation } from '@martyrs/src/modules/globals/views/components/partials/Navigation.vue';\nexport { default as NavigationBar } from '@martyrs/src/modules/globals/views/components/partials/NavigationBar.vue';\nexport { default as Sidebar } from '@martyrs/src/modules/globals/views/components/partials/Sidebar.vue';\nexport { default as Footer } from '@martyrs/src/modules/globals/views/components/partials/Footer.vue';\nexport { default as Walkthrough } from '@martyrs/src/modules/globals/views/components/sections/Walkthrough.vue';\n\n// Functional exports\nexport {\n appRenderer,\n getBrowserLocale,\n mixins,\n moduleRegistry,\n scrollBehavior,\n store,\n i18nManager,\n storeGlobals,\n websockets,\n};\n\n// Export client factory\nexport { createUniversalApp } from './views/classes/globals.app.js';\n\n// Re-export polyfills for documentation\nexport * from './views/utils/polyfills.js';\n\nexport default ModuleGlobals;\n"],"names":["store","en","ru","i18nManager","mixins.globalMixins","alertPlugin","popupAuthPlugin","datePickerPlugin","storeGlobals.state","storeGlobals"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAS,kBAAkB,KAAKA,QAAO,QAAQ,QAAQ,UAAU,IAAI;AACnE,QAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAM,UAAU;AAAA,IACd,IAAIC,GAAAA;AAAAA,IACJ,IAAIC,GAAAA;AAAAA,IACJ,IAAI,CAAA;AAAA;AAAA,EACR;AAEEC,2BAAY,SAAS,WAAW,OAAO;AAIvC,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,kBAAkB,QAAQ,IAAI;AAC1D,MAAI,OAAO,iBAAiB,sBAAsB,QAAQ,IAAI;AAE9D,MAAI,MAAMC,mBAAmB;AAE7B,MAAI,IAAIC,oBAAW;AACnB,MAAI,IAAIC,yBAAe;AACvB,MAAI,IAAIC,yBAAgB;AAQxB,SAAO,WAAW,CAAC,IAAI,MAAM,SAAS;AACpC,UAAM,SAAS,GAAG,OAAO;AAEzB,QAAI,QAAQ;AACV,UAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM,iBAAiB,SAAS,MAAM,GAAG;AACxE,eAAO,KAAK,EAAE,MAAM,QAAQ;AAAA,MAC9B,OAAO;AACL,YAAI,OAAO,iBAAiB,MAAM,SAAS;AAC3C,eAAO,KAAI;AAAA,MACb;AAAA,IACF;AAEA,WAAO,KAAI;AAAA,EACb,CAAC;AAED,MAAI,UAAU,OAAO,QAASC,SAAAA,MAAmB,UAAU,OAAO;AAElE,EAAAR,OAAM,SAAS,WAAWS,OAAY;AAEtC,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,sCAA6D,CAAA;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,sCAA6D,CAAA;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,WAAU;AAAA,EAChC,CAAG;AACH;AAEK,MAAC,gBAAgB;AAAA,EACpB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,cAAMA;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA;AAAA,IAEZ;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -58,10 +58,7 @@ function initializeGlobals(app, store, router, config, options = {}) {
58
58
  return next();
59
59
  });
60
60
  if (config && config.modules) state.options = config.modules;
61
- console.log("[DEBUG] initializeGlobals called with store:", !!store);
62
- console.log("[DEBUG] Adding globals to store...");
63
61
  store.addStore("globals", globals);
64
- console.log("[DEBUG] globals added to store:", !!store.globals);
65
62
  router.addRoute(route, {
66
63
  path: "404",
67
64
  name: "notfound",
@@ -1 +1 @@
1
- {"version":3,"file":"globals.client.js","sources":["../../../../../src/modules/globals/globals.client.js"],"sourcesContent":["// Functional imports (needed for initialize function)\nimport getBrowserLocale from './views/localization/get-browser-locale.js';\nimport scrollBehavior from './views/router/scrollBehavior.js';\n\nimport * as mixins from './views/mixins/mixins.js';\nimport * as storeGlobals from './views/store/globals.js';\nimport * as appRenderer from './views/utils/vue-app-renderer.js';\nimport './views/utils/polyfills.js'; // Auto-apply polyfills\n\nimport alertPlugin from './views/plugins/alert.plugin.js';\nimport popupAuthPlugin from './views/plugins/popup.auth.plugin.js';\nimport datePickerPlugin from './views/plugins/date-picker.plugin.js';\nimport storeDebuggerPlugin from './views/plugins/store-debugger/store-debugger.plugin.js';\n\nimport store from './views/classes/store.js';\nimport websockets from './views/classes/globals.websocket.js';\nimport { i18nManager } from '@martyrs/src/modules/globals/views/classes/globals.i18n.js';\nimport { moduleRegistry } from './views/classes/module-registry.js';\n\nimport en from './locales/en.js';\nimport ru from './locales/ru.js';\n\n\n// Пример функции инициализации для модуля заказов\nfunction initializeGlobals(app, store, router, config, options = {}) {\n const route = options.route || 'Home';\n\n const locales = {\n en: en,\n ru: ru,\n es: {} // или es: undefined\n };\n\n i18nManager.register('globals', locales);\n\n const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];\n\n app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;\n app.config.globalProperties.API_URL = process.env.API_URL;\n app.config.globalProperties.WSS_URL = process.env.WSS_URL;\n app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;\n app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;\n app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;\n\n app.mixin(mixins.globalMixins);\n\n app.use(alertPlugin);\n app.use(popupAuthPlugin);\n app.use(datePickerPlugin);\n // app.use(storeDebuggerPlugin, store);\n\n\n // WebSocket инициализируется в client.js после гидратации\n // чтобы не блокировать главный поток\n\n // Change Locale to Route Locale if available\n router.beforeEach((to, from, next) => {\n const locale = to.params.locale;\n\n if (locale) {\n if (!app.config.globalProperties.$i18n.availableLocales.includes(locale)) {\n return next({ path: '/404' });\n } else {\n app.config.globalProperties.$i18n.locale = locale;\n return next();\n }\n }\n\n return next();\n });\n\n if (config && config.modules) storeGlobals.state.options = config.modules;\n\n console.log('[DEBUG] initializeGlobals called with store:', !!store);\n console.log('[DEBUG] Adding globals to store...');\n store.addStore('globals', storeGlobals);\n console.log('[DEBUG] globals added to store:', !!store.globals);\n\n router.addRoute(route, {\n path: '404',\n name: 'notfound',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/404.vue'),\n });\n router.addRoute(route, {\n path: '401',\n name: 'unauthorized',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/401.vue'),\n });\n router.addRoute(route, {\n path: ':pathMatch(.*)*',\n name: 'NotFound',\n redirect: { name: 'notfound' },\n });\n}\n\nconst ModuleGlobals = {\n initialize: initializeGlobals,\n views: {\n store: {\n storeGlobals,\n },\n router: {\n // routerOrders\n },\n },\n};\n\n// Component re-exports (enables tree shaking)\nexport { default as layoutApp } from './views/components/layouts/App.vue';\nexport { default as layoutClient } from './views/components/layouts/Client.vue';\nexport { default as BlockSearch } from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue';\nexport { default as BottomNavigationBar } from '@martyrs/src/modules/globals/views/components/partials/BottomNavigationBar.vue';\nexport { default as Header } from '@martyrs/src/modules/globals/views/components/partials/Header.vue';\nexport { default as Navigation } from '@martyrs/src/modules/globals/views/components/partials/Navigation.vue';\nexport { default as NavigationBar } from '@martyrs/src/modules/globals/views/components/partials/NavigationBar.vue';\nexport { default as Sidebar } from '@martyrs/src/modules/globals/views/components/partials/Sidebar.vue';\nexport { default as Footer } from '@martyrs/src/modules/globals/views/components/partials/Footer.vue';\nexport { default as Walkthrough } from '@martyrs/src/modules/globals/views/components/sections/Walkthrough.vue';\n\n// Functional exports\nexport {\n appRenderer,\n getBrowserLocale,\n mixins,\n moduleRegistry,\n scrollBehavior,\n store,\n i18nManager,\n storeGlobals,\n websockets,\n};\n\n// Export client factory\nexport { createUniversalApp } from './views/classes/globals.app.js';\n\n// Re-export polyfills for documentation\nexport * from './views/utils/polyfills.js';\n\nexport default ModuleGlobals;\n"],"names":["mixins.globalMixins","storeGlobals.state","storeGlobals"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAS,kBAAkB,KAAK,OAAO,QAAQ,QAAQ,UAAU,IAAI;AACnE,QAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,IAAI,CAAA;AAAA;AAAA,EACR;AAEE,cAAY,SAAS,WAAW,OAAO;AAIvC,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,kBAAkB,QAAQ,IAAI;AAC1D,MAAI,OAAO,iBAAiB,sBAAsB,QAAQ,IAAI;AAE9D,MAAI,MAAMA,YAAmB;AAE7B,MAAI,IAAI,WAAW;AACnB,MAAI,IAAI,eAAe;AACvB,MAAI,IAAI,gBAAgB;AAQxB,SAAO,WAAW,CAAC,IAAI,MAAM,SAAS;AACpC,UAAM,SAAS,GAAG,OAAO;AAEzB,QAAI,QAAQ;AACV,UAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM,iBAAiB,SAAS,MAAM,GAAG;AACxE,eAAO,KAAK,EAAE,MAAM,QAAQ;AAAA,MAC9B,OAAO;AACL,YAAI,OAAO,iBAAiB,MAAM,SAAS;AAC3C,eAAO,KAAI;AAAA,MACb;AAAA,IACF;AAEA,WAAO,KAAI;AAAA,EACb,CAAC;AAED,MAAI,UAAU,OAAO,QAASC,OAAmB,UAAU,OAAO;AAElE,UAAQ,IAAI,gDAAgD,CAAC,CAAC,KAAK;AACnE,UAAQ,IAAI,oCAAoC;AAChD,QAAM,SAAS,WAAWC,OAAY;AACtC,UAAQ,IAAI,mCAAmC,CAAC,CAAC,MAAM,OAAO;AAE9D,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA6D;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA6D;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,WAAU;AAAA,EAChC,CAAG;AACH;AAEK,MAAC,gBAAgB;AAAA,EACpB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,cAAMA;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA;AAAA,IAEZ;AAAA,EACA;AACA;"}
1
+ {"version":3,"file":"globals.client.js","sources":["../../../../../src/modules/globals/globals.client.js"],"sourcesContent":["// Functional imports (needed for initialize function)\nimport getBrowserLocale from './views/localization/get-browser-locale.js';\nimport scrollBehavior from './views/router/scrollBehavior.js';\n\nimport * as mixins from './views/mixins/mixins.js';\nimport * as storeGlobals from './views/store/globals.js';\nimport * as appRenderer from './views/utils/vue-app-renderer.js';\nimport './views/utils/polyfills.js'; // Auto-apply polyfills\n\nimport alertPlugin from './views/plugins/alert.plugin.js';\nimport popupAuthPlugin from './views/plugins/popup.auth.plugin.js';\nimport datePickerPlugin from './views/plugins/date-picker.plugin.js';\nimport storeDebuggerPlugin from './views/plugins/store-debugger/store-debugger.plugin.js';\n\nimport store from './views/classes/store.js';\nimport websockets from './views/classes/globals.websocket.js';\nimport { i18nManager } from '@martyrs/src/modules/globals/views/classes/globals.i18n.js';\nimport { moduleRegistry } from './views/classes/module-registry.js';\n\nimport en from './locales/en.js';\nimport ru from './locales/ru.js';\n\n\n// Пример функции инициализации для модуля заказов\nfunction initializeGlobals(app, store, router, config, options = {}) {\n const route = options.route || 'Home';\n\n const locales = {\n en: en,\n ru: ru,\n es: {} // или es: undefined\n };\n\n i18nManager.register('globals', locales);\n\n const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];\n\n app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;\n app.config.globalProperties.API_URL = process.env.API_URL;\n app.config.globalProperties.WSS_URL = process.env.WSS_URL;\n app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;\n app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;\n app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;\n\n app.mixin(mixins.globalMixins);\n\n app.use(alertPlugin);\n app.use(popupAuthPlugin);\n app.use(datePickerPlugin);\n // app.use(storeDebuggerPlugin, store);\n\n\n // WebSocket инициализируется в client.js после гидратации\n // чтобы не блокировать главный поток\n\n // Change Locale to Route Locale if available\n router.beforeEach((to, from, next) => {\n const locale = to.params.locale;\n\n if (locale) {\n if (!app.config.globalProperties.$i18n.availableLocales.includes(locale)) {\n return next({ path: '/404' });\n } else {\n app.config.globalProperties.$i18n.locale = locale;\n return next();\n }\n }\n\n return next();\n });\n\n if (config && config.modules) storeGlobals.state.options = config.modules;\n\n store.addStore('globals', storeGlobals);\n\n router.addRoute(route, {\n path: '404',\n name: 'notfound',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/404.vue'),\n });\n router.addRoute(route, {\n path: '401',\n name: 'unauthorized',\n component: () => import('@martyrs/src/modules/globals/views/components/pages/401.vue'),\n });\n router.addRoute(route, {\n path: ':pathMatch(.*)*',\n name: 'NotFound',\n redirect: { name: 'notfound' },\n });\n}\n\nconst ModuleGlobals = {\n initialize: initializeGlobals,\n views: {\n store: {\n storeGlobals,\n },\n router: {\n // routerOrders\n },\n },\n};\n\n// Component re-exports (enables tree shaking)\nexport { default as layoutApp } from './views/components/layouts/App.vue';\nexport { default as layoutClient } from './views/components/layouts/Client.vue';\nexport { default as BlockSearch } from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue';\nexport { default as BottomNavigationBar } from '@martyrs/src/modules/globals/views/components/partials/BottomNavigationBar.vue';\nexport { default as Header } from '@martyrs/src/modules/globals/views/components/partials/Header.vue';\nexport { default as Navigation } from '@martyrs/src/modules/globals/views/components/partials/Navigation.vue';\nexport { default as NavigationBar } from '@martyrs/src/modules/globals/views/components/partials/NavigationBar.vue';\nexport { default as Sidebar } from '@martyrs/src/modules/globals/views/components/partials/Sidebar.vue';\nexport { default as Footer } from '@martyrs/src/modules/globals/views/components/partials/Footer.vue';\nexport { default as Walkthrough } from '@martyrs/src/modules/globals/views/components/sections/Walkthrough.vue';\n\n// Functional exports\nexport {\n appRenderer,\n getBrowserLocale,\n mixins,\n moduleRegistry,\n scrollBehavior,\n store,\n i18nManager,\n storeGlobals,\n websockets,\n};\n\n// Export client factory\nexport { createUniversalApp } from './views/classes/globals.app.js';\n\n// Re-export polyfills for documentation\nexport * from './views/utils/polyfills.js';\n\nexport default ModuleGlobals;\n"],"names":["mixins.globalMixins","storeGlobals.state","storeGlobals"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAS,kBAAkB,KAAK,OAAO,QAAQ,QAAQ,UAAU,IAAI;AACnE,QAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,IAAI,CAAA;AAAA;AAAA,EACR;AAEE,cAAY,SAAS,WAAW,OAAO;AAIvC,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,UAAU,QAAQ,IAAI;AAClD,MAAI,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACrD,MAAI,OAAO,iBAAiB,kBAAkB,QAAQ,IAAI;AAC1D,MAAI,OAAO,iBAAiB,sBAAsB,QAAQ,IAAI;AAE9D,MAAI,MAAMA,YAAmB;AAE7B,MAAI,IAAI,WAAW;AACnB,MAAI,IAAI,eAAe;AACvB,MAAI,IAAI,gBAAgB;AAQxB,SAAO,WAAW,CAAC,IAAI,MAAM,SAAS;AACpC,UAAM,SAAS,GAAG,OAAO;AAEzB,QAAI,QAAQ;AACV,UAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM,iBAAiB,SAAS,MAAM,GAAG;AACxE,eAAO,KAAK,EAAE,MAAM,QAAQ;AAAA,MAC9B,OAAO;AACL,YAAI,OAAO,iBAAiB,MAAM,SAAS;AAC3C,eAAO,KAAI;AAAA,MACb;AAAA,IACF;AAEA,WAAO,KAAI;AAAA,EACb,CAAC;AAED,MAAI,UAAU,OAAO,QAASC,OAAmB,UAAU,OAAO;AAElE,QAAM,SAAS,WAAWC,OAAY;AAEtC,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA6D;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW,MAAM,OAAO,qCAA6D;AAAA,EACzF,CAAG;AACD,SAAO,SAAS,OAAO;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,WAAU;AAAA,EAChC,CAAG;AACH;AAEK,MAAC,gBAAgB;AAAA,EACpB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,OAAO;AAAA,MACX,cAAMA;AAAAA,IACN;AAAA,IACI,QAAQ;AAAA;AAAA,IAEZ;AAAA,EACA;AACA;"}
@@ -39,13 +39,8 @@ function createUniversalApp({
39
39
  });
40
40
  }
41
41
  });
42
- async function createApp() {
42
+ function createApp() {
43
43
  const store = getStore();
44
- console.log("[DEBUG createApp] store created:", !!store);
45
- if (typeof window === "undefined") {
46
- const { setSSRStore } = await Promise.resolve().then(() => require("./store.cjs"));
47
- setSSRStore(store);
48
- }
49
44
  const app = process.env.MOBILE_APP ? vue.createApp(layoutApp, config) : vue.createSSRApp(layoutApp, config);
50
45
  const meta = vue_ziyDaVMR.c();
51
46
  const i18n = getLocales();
@@ -61,10 +56,8 @@ function createUniversalApp({
61
56
  const criticalModules = ["globals", "auth", "organizations", "backoffice"];
62
57
  for (const moduleName of criticalModules) {
63
58
  try {
64
- console.log(`[DEBUG] Loading module ${moduleName}, context.store:`, !!context.store);
65
59
  await moduleRegistry.load(moduleName, context);
66
60
  await moduleRegistry.initialize(moduleName, context);
67
- console.log(`[DEBUG] Module ${moduleName} initialized, store.${moduleName}:`, !!context.store[moduleName]);
68
61
  } catch (error) {
69
62
  console.error(`Failed to load critical module ${moduleName}:`, error);
70
63
  }
@@ -138,7 +131,10 @@ function createUniversalApp({
138
131
  }
139
132
  async function renderApp({ url, cookies, languages, ssrContext }) {
140
133
  const { app, router, store, i18n, meta, moduleRegistry: moduleRegistry2 } = await createApp();
141
- console.log("[DEBUG SSR] After createApp - store.globals:", !!store.globals);
134
+ if (typeof window === "undefined") {
135
+ const { setSSRStore } = await Promise.resolve().then(() => require("./store.cjs"));
136
+ setSSRStore(store);
137
+ }
142
138
  const context = {
143
139
  app,
144
140
  store,
@@ -173,40 +169,34 @@ function createUniversalApp({
173
169
  createApp();
174
170
  }
175
171
  if (typeof window !== "undefined" && !process.env.MOBILE_APP) {
176
- createApp().then(({ app, router, store, moduleRegistry: moduleRegistry2 }) => {
177
- router.isReady().then(() => {
178
- if (hooks.beforeHydration) {
179
- hooks.beforeHydration({ app, router, store, moduleRegistry: moduleRegistry2 });
180
- }
181
- app.mount("#app");
182
- if (hooks.afterHydration) {
183
- hooks.afterHydration({ app, router, store, moduleRegistry: moduleRegistry2 });
184
- }
185
- const context = { app, store, router, config };
186
- moduleRegistry2.load("auth", context).then(() => {
187
- setTimeout(async () => {
188
- try {
189
- await Promise.all([
190
- moduleRegistry2.load("organizations", context),
191
- moduleRegistry2.load("backoffice", context)
192
- ]);
193
- } catch (error) {
194
- console.error("Error loading core modules:", error);
195
- }
196
- }, 0);
197
- requestIdleCallback(async () => {
198
- try {
199
- await moduleRegistry2.load("notifications", context);
200
- if (typeof window !== "undefined") {
201
- window.performance.mark("client-ready");
202
- }
203
- } catch (error) {
204
- console.error("Error loading non-critical modules:", error);
172
+ appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleRegistry: moduleRegistry2 }) => {
173
+ if (hooks.afterHydration) {
174
+ hooks.afterHydration({ app, router, store, moduleRegistry: moduleRegistry2 });
175
+ }
176
+ const context = { app, store, router, config };
177
+ moduleRegistry2.load("auth", context).then(() => {
178
+ setTimeout(async () => {
179
+ try {
180
+ await Promise.all([
181
+ moduleRegistry2.load("organizations", context),
182
+ moduleRegistry2.load("backoffice", context)
183
+ ]);
184
+ } catch (error) {
185
+ console.error("Error loading core modules:", error);
186
+ }
187
+ }, 0);
188
+ requestIdleCallback(async () => {
189
+ try {
190
+ await moduleRegistry2.load("notifications", context);
191
+ if (typeof window !== "undefined") {
192
+ window.performance.mark("client-ready");
205
193
  }
206
- });
207
- }).catch((error) => {
208
- console.error("Error loading auth module:", error);
194
+ } catch (error) {
195
+ console.error("Error loading non-critical modules:", error);
196
+ }
209
197
  });
198
+ }).catch((error) => {
199
+ console.error("Error loading auth module:", error);
210
200
  });
211
201
  }).catch((error) => {
212
202
  console.error("Hydration failed:", error);
@@ -1 +1 @@
1
- {"version":3,"file":"globals.app.cjs","sources":["../../../../../../../src/modules/globals/views/classes/globals.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module-registry.js').then(m => m.moduleRegistry);\n const getWebsockets = () => import('./globals.websocket.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n \n const [layoutApp, moduleRegistry, globalWebSocket, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n \n // Регистрация модуля globals первым\n moduleRegistry.register('globals', {\n loader: () => import('../../globals.client.js'),\n critical: true,\n priority: 'critical'\n });\n \n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleRegistry.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n \n // Основная функция создания приложения\n async function createApp() {\n const store = getStore();\n console.log('[DEBUG createApp] store created:', !!store);\n \n // Установить SSR store для useStore\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('./store.js');\n setSSRStore(store);\n }\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n \n // Загружаем только критические модули синхронно\n const initCriticalModules = async () => {\n // Критические модули одинаковые для всех проектов\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n \n for (const moduleName of criticalModules) {\n try {\n console.log(`[DEBUG] Loading module ${moduleName}, context.store:`, !!context.store);\n await moduleRegistry.load(moduleName, context);\n await moduleRegistry.initialize(moduleName, context);\n console.log(`[DEBUG] Module ${moduleName} initialized, store.${moduleName}:`, !!context.store[moduleName]);\n } catch (error) {\n console.error(`Failed to load critical module ${moduleName}:`, error);\n }\n }\n };\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем модули для маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(to.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleRegistry.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Показываем глобальный лоадер\n if (store.globals && store.globals.state) {\n store.globals.state.loading = true;\n }\n \n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n \n // Лоадер остается включенным - страница сама выключит через globals.state.loading = false\n \n // После загрузки модулей и регистрации их роутов,\n // возвращаем тот же путь для повторной навигации с новыми роутами\n return to.fullPath;\n }\n });\n }\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n \n // 1. Критические модули\n await initCriticalModules();\n \n // 2. WebSocket (отложим после гидратации)\n if (typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n globalWebSocket.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n \n // 3. Предзагрузка важных модулей в фоне\n requestIdleCallback(() => {\n moduleRegistry.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n \n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleRegistry,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleRegistry } = await createApp();\n console.log('[DEBUG SSR] After createApp - store.globals:', !!store.globals);\n \n \n // if (typeof window === 'undefined') {\n // moduleRegistry.initialized.clear();\n // moduleRegistry.modules.clear();\n // moduleRegistry.loadingPromises.clear();\n \n // // На сервере загружаем auth для SSR рендеринга (vue-app-renderer требует его)\n // const context = { app, store, router, config };\n // await moduleRegistry.load('globals', context);\n // await moduleRegistry.initialize('globals', context);\n // await moduleRegistry.load('auth', context);\n // await moduleRegistry.initialize('auth', context);\n // }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n \n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(url);\n \n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n \n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута + критические модули\n // Это не реальные модули а метаданные для дегидратации\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n const allModulesForRoute = [...new Set([...criticalModules, ...currentRouteModules])];\n \n result.loadedModules = allModulesForRoute;\n \n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n createApp().then(({ app, router, store, moduleRegistry }) => {\n // Ждем когда роутер будет готов\n router.isReady().then(() => {\n // Хук ДО гидратации\n if (hooks.beforeHydration) {\n hooks.beforeHydration({ app, router, store, moduleRegistry });\n }\n \n app.mount('#app');\n \n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleRegistry });\n }\n \n // Создаем context для загрузки модулей\n const context = { app, store, router, config };\n \n // Загружаем auth модуль сразу - он критичен\n moduleRegistry.load('auth', context).then(() => {\n // Загружаем важные модули в следующем тике\n setTimeout(async () => {\n try {\n await Promise.all([\n moduleRegistry.load('organizations', context),\n moduleRegistry.load('backoffice', context),\n ]);\n } catch (error) {\n console.error('Error loading core modules:', error);\n }\n }, 0);\n \n // Загружаем некритичные модули когда браузер idle\n requestIdleCallback(async () => {\n try {\n await moduleRegistry.load('notifications', context);\n // Маркер для тестов\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n } catch (error) {\n console.error('Error loading non-critical modules:', error);\n }\n });\n }).catch(error => {\n console.error('Error loading auth module:', error);\n });\n });\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["module","createVueApp","createVueSSRApp","createHead","moduleRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"globals.app.cjs","sources":["../../../../../../../src/modules/globals/views/classes/globals.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module-registry.js').then(m => m.moduleRegistry);\n const getWebsockets = () => import('./globals.websocket.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n \n const [layoutApp, moduleRegistry, globalWebSocket, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n \n // Регистрация модуля globals первым\n moduleRegistry.register('globals', {\n loader: () => import('../../globals.client.js'),\n critical: true,\n priority: 'critical'\n });\n \n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleRegistry.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n \n // Основная функция создания приложения\n function createApp() {\n const store = getStore();\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n \n // Загружаем только критические модули синхронно\n const initCriticalModules = async () => {\n // Критические модули одинаковые для всех проектов\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n \n for (const moduleName of criticalModules) {\n try {\n await moduleRegistry.load(moduleName, context);\n await moduleRegistry.initialize(moduleName, context);\n } catch (error) {\n console.error(`Failed to load critical module ${moduleName}:`, error);\n }\n }\n };\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем модули для маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(to.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleRegistry.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Показываем глобальный лоадер\n if (store.globals && store.globals.state) {\n store.globals.state.loading = true;\n }\n \n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n \n // Лоадер остается включенным - страница сама выключит через globals.state.loading = false\n \n // После загрузки модулей и регистрации их роутов,\n // возвращаем тот же путь для повторной навигации с новыми роутами\n return to.fullPath;\n }\n });\n }\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n \n // 1. Критические модули\n await initCriticalModules();\n \n // 2. WebSocket (отложим после гидратации)\n if (typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n globalWebSocket.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n \n // 3. Предзагрузка важных модулей в фоне\n requestIdleCallback(() => {\n moduleRegistry.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n \n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleRegistry,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleRegistry } = await createApp();\n \n // Set SSR store for useStore calls\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('./store.js');\n setSSRStore(store);\n }\n \n \n // if (typeof window === 'undefined') {\n // moduleRegistry.initialized.clear();\n // moduleRegistry.modules.clear();\n // moduleRegistry.loadingPromises.clear();\n \n // // На сервере загружаем auth для SSR рендеринга (vue-app-renderer требует его)\n // const context = { app, store, router, config };\n // await moduleRegistry.load('globals', context);\n // await moduleRegistry.initialize('globals', context);\n // await moduleRegistry.load('auth', context);\n // await moduleRegistry.initialize('auth', context);\n // }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n \n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(url);\n \n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n \n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута + критические модули\n // Это не реальные модули а метаданные для дегидратации\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n const allModulesForRoute = [...new Set([...criticalModules, ...currentRouteModules])];\n \n result.loadedModules = allModulesForRoute;\n \n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n // Используем renderAndMountApp для правильной гидратации со state\n appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleRegistry }) => {\n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleRegistry });\n }\n \n // Создаем context для загрузки модулей\n const context = { app, store, router, config };\n \n // Загружаем auth модуль сразу - он критичен\n moduleRegistry.load('auth', context).then(() => {\n // Загружаем важные модули в следующем тике\n setTimeout(async () => {\n try {\n await Promise.all([\n moduleRegistry.load('organizations', context),\n moduleRegistry.load('backoffice', context),\n ]);\n } catch (error) {\n console.error('Error loading core modules:', error);\n }\n }, 0);\n \n // Загружаем некритичные модули когда браузер idle\n requestIdleCallback(async () => {\n try {\n await moduleRegistry.load('notifications', context);\n // Маркер для тестов\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n } catch (error) {\n console.error('Error loading non-critical modules:', error);\n }\n });\n }).catch(error => {\n console.error('Error loading auth module:', error);\n });\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["module","createVueApp","createVueSSRApp","createHead","moduleRegistry"],"mappings":";;;;AAIO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,CAAA;AACb,GAAG;AAED,QAAM,eAAe,MAAM,qCAAO,mCAA+B,CAAA,EAAE,KAAK,OAAK,EAAE,OAAO;AACtF,QAAM,oBAAoB,MAAM,qCAAO,uBAAsB,CAAA,EAAE,KAAK,OAAK,EAAE,cAAc;AACzF,QAAM,gBAAgB,MAAM,qCAAO,yBAAwB,CAAA,EAAE,KAAK,OAAK,EAAE,OAAO;AAChF,QAAM,iBAAiB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,+BAA8B,CAAA;AAGlE,iBAAe,gBAAgB;AAE7B,UAAM,SAAS,MAAM,UAAS;AAC9B,UAAM,QAAQ;AAEd,UAAM,CAAC,WAAW,gBAAgB,iBAAiB,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,MAClF,aAAY;AAAA,MACZ,kBAAiB;AAAA,MACjB,cAAa;AAAA,MACb,eAAc;AAAA,IACpB,CAAK;AAGD,mBAAe,SAAS,WAAW;AAAA,MACjC,QAAQ,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,0BAAyB,CAAA;AAAA,MAC9C,UAAU;AAAA,MACV,UAAU;AAAA,IAChB,CAAK;AAGD,WAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAMA,OAAM,MAAM;AACzD,UAAIA,QAAO,QAAQ;AACjB,uBAAe,SAAS,MAAM;AAAA,UAC5B,QAAQA,QAAO;AAAA,UACf,QAAQA,QAAO,UAAU,CAAA;AAAA,UACzB,UAAUA,QAAO,YAAY;AAAA,UAC7B,UAAUA,QAAO,YAAY;AAAA,UAC7B,cAAcA,QAAO,gBAAgB,CAAA;AAAA,UACrC,SAASA,QAAO,WAAW;AAAA,QACrC,CAAS;AAAA,MACH;AAAA,IACF,CAAC;AAGD,aAAS,YAAY;AACnB,YAAM,QAAQ,SAAQ;AACtB,YAAM,MAAM,QAAQ,IAAI,aACpBC,IAAAA,UAAa,WAAW,MAAM,IAC9BC,IAAAA,aAAgB,WAAW,MAAM;AAErC,YAAM,OAAOC,aAAAA,EAAU;AACvB,YAAM,OAAO,WAAU;AAEvB,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACR;AAGM,YAAM,SAAS,UAAU,OAAO;AAChC,cAAQ,SAAS;AAGjB,YAAM,sBAAsB,YAAY;AAEtC,cAAM,kBAAkB,CAAC,WAAW,QAAQ,iBAAiB,YAAY;AAEzE,mBAAW,cAAc,iBAAiB;AACxC,cAAI;AACF,kBAAM,eAAe,KAAK,YAAY,OAAO;AAC7C,kBAAM,eAAe,WAAW,YAAY,OAAO;AAAA,UACrD,SAAS,OAAO;AACd,oBAAQ,MAAM,kCAAkC,UAAU,KAAK,KAAK;AAAA,UACtE;AAAA,QACF;AAAA,MACF;AAGA,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,WAAW,OAAO,IAAI,SAAS;AAEpC,gBAAM,kBAAkB,eAAe,mBAAmB,GAAG,IAAI;AAGjE,gBAAM,gBAAgB,gBAAgB,OAAO,OAAK,CAAC,eAAe,YAAY,IAAI,EAAE,IAAI,CAAC;AAEzF,cAAI,cAAc,SAAS,GAAG;AAE5B,gBAAI,MAAM,WAAW,MAAM,QAAQ,OAAO;AACxC,oBAAM,QAAQ,MAAM,UAAU;AAAA,YAChC;AAGA,uBAAWH,WAAU,eAAe;AAClC,kBAAI;AACF,sBAAM,eAAe,KAAKA,QAAO,MAAM,OAAO;AAC9C,sBAAM,eAAe,WAAWA,QAAO,MAAM,OAAO;AAAA,cACtD,SAAS,OAAO;AACd,wBAAQ,MAAM,yBAAyBA,QAAO,IAAI,KAAK,KAAK;AAAA,cAC9D;AAAA,YACF;AAMA,mBAAO,GAAG;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAGA,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,cAAI,EAAE,WAAW,EAAE,QAAQ,SAAS,eAAe,GAAG;AACpD,oBAAQ,MAAM,yBAAyB,CAAC;AAAA,UAG1C;AAAA,QACF,CAAC;AAAA,MACH;AAGA,YAAM,aAAa,YAAY;AAE7B,YAAI,MAAM,kBAAkB;AAC1B,gBAAM,MAAM,iBAAiB,OAAO;AAAA,QACtC;AAGA,cAAM,oBAAmB;AAGzB,YAAI,OAAO,WAAW,aAAa;AAEjC,8BAAoB,MAAM;AACxB,4BAAgB,WAAW;AAAA,cACzB,OAAO,QAAQ,IAAI,WAAW;AAAA,cAC9B,sBAAsB;AAAA,cACtB,gBAAgB;AAAA,cAChB,cAAc;AAAA,YAC5B,CAAa;AAAA,UACH,CAAC;AAGD,8BAAoB,MAAM;AACxB,2BAAe,eAAe,OAAO;AAAA,UACvC,CAAC;AAAA,QACH;AAGA,YAAI,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI;AAGlC,YAAI,QAAQ,IAAI,YAAY;AAC1B,cAAI,MAAM,MAAM;AAAA,QAClB;AAGA,YAAI,MAAM,iBAAiB;AACzB,gBAAM,MAAM,gBAAgB,OAAO;AAAA,QACrC;AAEA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACV;AAAA,MACM;AAGA,UAAI,CAAC,QAAQ,IAAI,YAAY;AAC3B,eAAO,WAAU;AAAA,MACnB;AAGA,iBAAU;AAAA,IACZ;AAGA,mBAAe,UAAU,EAAE,KAAK,SAAS,WAAW,WAAU,GAAI;AAChE,YAAM,EAAE,KAAK,QAAQ,OAAO,MAAM,MAAM,gBAAAI,oBAAmB,MAAM,UAAS;AAG1E,UAAI,OAAO,WAAW,aAAa;AACjC,cAAM,EAAE,YAAW,IAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,aAAY,CAAA;AACjD,oBAAY,KAAK;AAAA,MACnB;AAgBA,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACb;AAGM,YAAM,kBAAkBA,gBAAe,mBAAmB,GAAG;AAG7D,YAAM,sBAAsB,CAAA;AAG5B,iBAAWJ,WAAU,iBAAiB;AACpC,cAAMI,gBAAe,KAAKJ,QAAO,MAAM,OAAO;AAC9C,cAAMI,gBAAe,WAAWJ,QAAO,MAAM,OAAO;AACpD,4BAAoB,KAAKA,QAAO,IAAI;AAAA,MACtC;AAGA,YAAM,OAAO,KAAK,GAAG;AACrB,YAAM,OAAO,QAAO;AAEpB,YAAM,SAAS,MAAM,YAAY,OAAO;AAAA,QACtC;AAAA,QACA;AAAA,QACA,WAAW,OAAO,EAAE,KAAK,QAAQ,OAAO,MAAM;QAC9C;AAAA,MACR,CAAO;AAED,UAAI,YAAY,SAAS;AACvB,eAAO,cAAc,MAAM,KAAK,WAAW,OAAO;AAAA,MACpD;AAIA,YAAM,kBAAkB,CAAC,WAAW,QAAQ,iBAAiB,YAAY;AACzE,YAAM,qBAAqB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,iBAAiB,GAAG,mBAAmB,CAAC,CAAC;AAEpF,aAAO,gBAAgB;AAEvB,aAAO;AAAA,IACT;AAGA,QAAI,OAAO,WAAW,eAAe,QAAQ,IAAI,YAAY;AAC3D,gBAAS;AAAA,IACX;AAGA,QAAI,OAAO,WAAW,eAAe,CAAC,QAAQ,IAAI,YAAY;AAE5D,kBAAY,kBAAkB,EAAE,WAAW,MAAK,CAAE,EAAE,KAAK,CAAC,EAAE,KAAK,QAAQ,OAAO,gBAAAI,gBAAc,MAAO;AAEnG,YAAI,MAAM,gBAAgB;AACxB,gBAAM,eAAe,EAAE,KAAK,QAAQ,OAAO,gBAAAA,iBAAgB;AAAA,QAC7D;AAGA,cAAM,UAAU,EAAE,KAAK,OAAO,QAAQ,OAAM;AAG5C,QAAAA,gBAAe,KAAK,QAAQ,OAAO,EAAE,KAAK,MAAM;AAE5C,qBAAW,YAAY;AACrB,gBAAI;AACF,oBAAM,QAAQ,IAAI;AAAA,gBAChBA,gBAAe,KAAK,iBAAiB,OAAO;AAAA,gBAC5CA,gBAAe,KAAK,cAAc,OAAO;AAAA,cAC3D,CAAiB;AAAA,YACH,SAAS,OAAO;AACd,sBAAQ,MAAM,+BAA+B,KAAK;AAAA,YACpD;AAAA,UACF,GAAG,CAAC;AAGJ,8BAAoB,YAAY;AAC9B,gBAAI;AACF,oBAAMA,gBAAe,KAAK,iBAAiB,OAAO;AAElD,kBAAI,OAAO,WAAW,aAAa;AACjC,uBAAO,YAAY,KAAK,cAAc;AAAA,cACxC;AAAA,YACF,SAAS,OAAO;AACd,sBAAQ,MAAM,uCAAuC,KAAK;AAAA,YAC5D;AAAA,UACF,CAAC;AAAA,QACL,CAAC,EAAE,MAAM,WAAS;AAChB,kBAAQ,MAAM,8BAA8B,KAAK;AAAA,QACnD,CAAC;AAAA,MACH,CAAC,EAAE,MAAM,WAAS;AAChB,gBAAQ,MAAM,qBAAqB,KAAK;AAAA,MAC1C,CAAC;AAAA,IACH;AAEA,WAAO,EAAE,WAAW,UAAS;AAAA,EAC/B;AAGA,SAAO,cAAa;AACtB;;"}
@@ -37,13 +37,8 @@ function createUniversalApp({
37
37
  });
38
38
  }
39
39
  });
40
- async function createApp$1() {
40
+ function createApp$1() {
41
41
  const store = getStore();
42
- console.log("[DEBUG createApp] store created:", !!store);
43
- if (typeof window === "undefined") {
44
- const { setSSRStore } = await import("./store.js");
45
- setSSRStore(store);
46
- }
47
42
  const app = process.env.MOBILE_APP ? createApp(layoutApp, config) : createSSRApp(layoutApp, config);
48
43
  const meta = createHead();
49
44
  const i18n = getLocales();
@@ -59,10 +54,8 @@ function createUniversalApp({
59
54
  const criticalModules = ["globals", "auth", "organizations", "backoffice"];
60
55
  for (const moduleName of criticalModules) {
61
56
  try {
62
- console.log(`[DEBUG] Loading module ${moduleName}, context.store:`, !!context.store);
63
57
  await moduleRegistry.load(moduleName, context);
64
58
  await moduleRegistry.initialize(moduleName, context);
65
- console.log(`[DEBUG] Module ${moduleName} initialized, store.${moduleName}:`, !!context.store[moduleName]);
66
59
  } catch (error) {
67
60
  console.error(`Failed to load critical module ${moduleName}:`, error);
68
61
  }
@@ -136,7 +129,10 @@ function createUniversalApp({
136
129
  }
137
130
  async function renderApp({ url, cookies, languages, ssrContext }) {
138
131
  const { app, router, store, i18n, meta, moduleRegistry: moduleRegistry2 } = await createApp$1();
139
- console.log("[DEBUG SSR] After createApp - store.globals:", !!store.globals);
132
+ if (typeof window === "undefined") {
133
+ const { setSSRStore } = await import("./store.js");
134
+ setSSRStore(store);
135
+ }
140
136
  const context = {
141
137
  app,
142
138
  store,
@@ -171,40 +167,34 @@ function createUniversalApp({
171
167
  createApp$1();
172
168
  }
173
169
  if (typeof window !== "undefined" && !process.env.MOBILE_APP) {
174
- createApp$1().then(({ app, router, store, moduleRegistry: moduleRegistry2 }) => {
175
- router.isReady().then(() => {
176
- if (hooks.beforeHydration) {
177
- hooks.beforeHydration({ app, router, store, moduleRegistry: moduleRegistry2 });
178
- }
179
- app.mount("#app");
180
- if (hooks.afterHydration) {
181
- hooks.afterHydration({ app, router, store, moduleRegistry: moduleRegistry2 });
182
- }
183
- const context = { app, store, router, config };
184
- moduleRegistry2.load("auth", context).then(() => {
185
- setTimeout(async () => {
186
- try {
187
- await Promise.all([
188
- moduleRegistry2.load("organizations", context),
189
- moduleRegistry2.load("backoffice", context)
190
- ]);
191
- } catch (error) {
192
- console.error("Error loading core modules:", error);
193
- }
194
- }, 0);
195
- requestIdleCallback(async () => {
196
- try {
197
- await moduleRegistry2.load("notifications", context);
198
- if (typeof window !== "undefined") {
199
- window.performance.mark("client-ready");
200
- }
201
- } catch (error) {
202
- console.error("Error loading non-critical modules:", error);
170
+ appRenderer.renderAndMountApp({ createApp: createApp$1, hooks }).then(({ app, router, store, moduleRegistry: moduleRegistry2 }) => {
171
+ if (hooks.afterHydration) {
172
+ hooks.afterHydration({ app, router, store, moduleRegistry: moduleRegistry2 });
173
+ }
174
+ const context = { app, store, router, config };
175
+ moduleRegistry2.load("auth", context).then(() => {
176
+ setTimeout(async () => {
177
+ try {
178
+ await Promise.all([
179
+ moduleRegistry2.load("organizations", context),
180
+ moduleRegistry2.load("backoffice", context)
181
+ ]);
182
+ } catch (error) {
183
+ console.error("Error loading core modules:", error);
184
+ }
185
+ }, 0);
186
+ requestIdleCallback(async () => {
187
+ try {
188
+ await moduleRegistry2.load("notifications", context);
189
+ if (typeof window !== "undefined") {
190
+ window.performance.mark("client-ready");
203
191
  }
204
- });
205
- }).catch((error) => {
206
- console.error("Error loading auth module:", error);
192
+ } catch (error) {
193
+ console.error("Error loading non-critical modules:", error);
194
+ }
207
195
  });
196
+ }).catch((error) => {
197
+ console.error("Error loading auth module:", error);
208
198
  });
209
199
  }).catch((error) => {
210
200
  console.error("Hydration failed:", error);
@@ -1 +1 @@
1
- {"version":3,"file":"globals.app.js","sources":["../../../../../../../src/modules/globals/views/classes/globals.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module-registry.js').then(m => m.moduleRegistry);\n const getWebsockets = () => import('./globals.websocket.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n \n const [layoutApp, moduleRegistry, globalWebSocket, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n \n // Регистрация модуля globals первым\n moduleRegistry.register('globals', {\n loader: () => import('../../globals.client.js'),\n critical: true,\n priority: 'critical'\n });\n \n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleRegistry.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n \n // Основная функция создания приложения\n async function createApp() {\n const store = getStore();\n console.log('[DEBUG createApp] store created:', !!store);\n \n // Установить SSR store для useStore\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('./store.js');\n setSSRStore(store);\n }\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n \n // Загружаем только критические модули синхронно\n const initCriticalModules = async () => {\n // Критические модули одинаковые для всех проектов\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n \n for (const moduleName of criticalModules) {\n try {\n console.log(`[DEBUG] Loading module ${moduleName}, context.store:`, !!context.store);\n await moduleRegistry.load(moduleName, context);\n await moduleRegistry.initialize(moduleName, context);\n console.log(`[DEBUG] Module ${moduleName} initialized, store.${moduleName}:`, !!context.store[moduleName]);\n } catch (error) {\n console.error(`Failed to load critical module ${moduleName}:`, error);\n }\n }\n };\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем модули для маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(to.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleRegistry.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Показываем глобальный лоадер\n if (store.globals && store.globals.state) {\n store.globals.state.loading = true;\n }\n \n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n \n // Лоадер остается включенным - страница сама выключит через globals.state.loading = false\n \n // После загрузки модулей и регистрации их роутов,\n // возвращаем тот же путь для повторной навигации с новыми роутами\n return to.fullPath;\n }\n });\n }\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n \n // 1. Критические модули\n await initCriticalModules();\n \n // 2. WebSocket (отложим после гидратации)\n if (typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n globalWebSocket.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n \n // 3. Предзагрузка важных модулей в фоне\n requestIdleCallback(() => {\n moduleRegistry.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n \n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleRegistry,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleRegistry } = await createApp();\n console.log('[DEBUG SSR] After createApp - store.globals:', !!store.globals);\n \n \n // if (typeof window === 'undefined') {\n // moduleRegistry.initialized.clear();\n // moduleRegistry.modules.clear();\n // moduleRegistry.loadingPromises.clear();\n \n // // На сервере загружаем auth для SSR рендеринга (vue-app-renderer требует его)\n // const context = { app, store, router, config };\n // await moduleRegistry.load('globals', context);\n // await moduleRegistry.initialize('globals', context);\n // await moduleRegistry.load('auth', context);\n // await moduleRegistry.initialize('auth', context);\n // }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n \n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(url);\n \n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n \n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута + критические модули\n // Это не реальные модули а метаданные для дегидратации\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n const allModulesForRoute = [...new Set([...criticalModules, ...currentRouteModules])];\n \n result.loadedModules = allModulesForRoute;\n \n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n createApp().then(({ app, router, store, moduleRegistry }) => {\n // Ждем когда роутер будет готов\n router.isReady().then(() => {\n // Хук ДО гидратации\n if (hooks.beforeHydration) {\n hooks.beforeHydration({ app, router, store, moduleRegistry });\n }\n \n app.mount('#app');\n \n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleRegistry });\n }\n \n // Создаем context для загрузки модулей\n const context = { app, store, router, config };\n \n // Загружаем auth модуль сразу - он критичен\n moduleRegistry.load('auth', context).then(() => {\n // Загружаем важные модули в следующем тике\n setTimeout(async () => {\n try {\n await Promise.all([\n moduleRegistry.load('organizations', context),\n moduleRegistry.load('backoffice', context),\n ]);\n } catch (error) {\n console.error('Error loading core modules:', error);\n }\n }, 0);\n \n // Загружаем некритичные модули когда браузер idle\n requestIdleCallback(async () => {\n try {\n await moduleRegistry.load('notifications', context);\n // Маркер для тестов\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n } catch (error) {\n console.error('Error loading non-critical modules:', error);\n }\n });\n }).catch(error => {\n console.error('Error loading auth module:', error);\n });\n });\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["createApp","createVueApp","createVueSSRApp","moduleRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"globals.app.js","sources":["../../../../../../../src/modules/globals/views/classes/globals.app.js"],"sourcesContent":["// client-factory.js - фабрика для создания клиентского приложения\nimport { createApp as createVueApp, createSSRApp as createVueSSRApp } from 'vue';\nimport { createHead } from '@unhead/vue';\n\nexport function createUniversalApp({\n getConfig,\n getRouter,\n getLocales,\n getStore,\n getHooks = {}\n}) {\n // Lazy imports to avoid circular dependencies\n const getLayoutApp = () => import('../components/layouts/App.vue').then(m => m.default);\n const getModuleRegistry = () => import('./module-registry.js').then(m => m.moduleRegistry);\n const getWebsockets = () => import('./globals.websocket.js').then(m => m.default);\n const getAppRenderer = () => import('../utils/vue-app-renderer.js');\n \n // Асинхронная инициализация для избежания циклических зависимостей\n async function initializeApp() {\n // Создаем конфигурацию\n const config = await getConfig();\n const hooks = getHooks;\n \n const [layoutApp, moduleRegistry, globalWebSocket, appRenderer] = await Promise.all([\n getLayoutApp(),\n getModuleRegistry(),\n getWebsockets(),\n getAppRenderer()\n ]);\n \n // Регистрация модуля globals первым\n moduleRegistry.register('globals', {\n loader: () => import('../../globals.client.js'),\n critical: true,\n priority: 'critical'\n });\n \n // Регистрация модулей из config\n Object.entries(config.modules).forEach(([name, module]) => {\n if (module.loader) {\n moduleRegistry.register(name, {\n loader: module.loader,\n routes: module.routes || [],\n priority: module.priority || 'normal',\n critical: module.critical || false,\n dependencies: module.dependencies || [],\n preload: module.preload || false\n });\n }\n });\n \n // Основная функция создания приложения\n function createApp() {\n const store = getStore();\n const app = process.env.MOBILE_APP \n ? createVueApp(layoutApp, config) \n : createVueSSRApp(layoutApp, config);\n \n const meta = createHead();\n const i18n = getLocales();\n \n const context = {\n app,\n store,\n router: null,\n config,\n };\n \n // Создаем роутер с контекстом\n const router = getRouter(context);\n context.router = router;\n \n // Загружаем только критические модули синхронно\n const initCriticalModules = async () => {\n // Критические модули одинаковые для всех проектов\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n \n for (const moduleName of criticalModules) {\n try {\n await moduleRegistry.load(moduleName, context);\n await moduleRegistry.initialize(moduleName, context);\n } catch (error) {\n console.error(`Failed to load critical module ${moduleName}:`, error);\n }\n }\n };\n \n // Router guard для загрузки модулей ДО навигации (только на клиенте)\n if (typeof window !== 'undefined') {\n router.beforeEach(async (to, from) => {\n // Получаем модули для маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(to.path);\n \n // Проверяем, какие модули еще не загружены\n const modulesToLoad = requiredModules.filter(m => !moduleRegistry.initialized.has(m.name));\n \n if (modulesToLoad.length > 0) {\n // Показываем глобальный лоадер\n if (store.globals && store.globals.state) {\n store.globals.state.loading = true;\n }\n \n // Загружаем и инициализируем модули\n for (const module of modulesToLoad) {\n try {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n } catch (error) {\n console.error(`Failed to load module ${module.name}:`, error);\n }\n }\n \n // Лоадер остается включенным - страница сама выключит через globals.state.loading = false\n \n // После загрузки модулей и регистрации их роутов,\n // возвращаем тот же путь для повторной навигации с новыми роутами\n return to.fullPath;\n }\n });\n }\n \n // Error handler для lazy loaded chunks\n if (typeof window !== 'undefined') {\n window.addEventListener('error', (e) => {\n if (e.message && e.message.includes('Loading chunk')) {\n console.error('Chunk loading failed:', e);\n // Можно показать уведомление пользователю\n // или попытаться перезагрузить\n }\n });\n }\n \n // Инициализация в правильном порядке\n const initialize = async () => {\n // Хук ДО инициализации\n if (hooks.beforeInitialize) {\n await hooks.beforeInitialize(context);\n }\n \n // 1. Критические модули\n await initCriticalModules();\n \n // 2. WebSocket (отложим после гидратации)\n if (typeof window !== 'undefined') {\n // Откладываем инициализацию WebSocket после гидратации\n requestIdleCallback(() => {\n globalWebSocket.initialize({\n wsUrl: process.env.WSS_URL || undefined,\n maxReconnectAttempts: 5,\n reconnectDelay: 3000,\n pingInterval: 30000,\n });\n });\n \n // 3. Предзагрузка важных модулей в фоне\n requestIdleCallback(() => {\n moduleRegistry.preloadModules(context);\n });\n }\n \n // 5. Подключаем Vue плагины\n app.use(router).use(i18n).use(meta);\n \n // 6. Монтируем приложение\n if (process.env.MOBILE_APP) {\n app.mount('#app');\n }\n\n // Хук ПОСЛЕ инициализации\n if (hooks.afterInitialize) {\n await hooks.afterInitialize(context);\n }\n \n return {\n app,\n router,\n store,\n i18n,\n meta,\n moduleRegistry,\n };\n };\n \n // Возвращаем промис для SSR\n if (!process.env.MOBILE_APP) {\n return initialize();\n }\n \n // Для SPA инициализируем сразу\n initialize();\n }\n \n // FOR SSR / SERVER ENTRY\n async function renderApp({ url, cookies, languages, ssrContext }) {\n const { app, router, store, i18n, meta, moduleRegistry } = await createApp();\n \n // Set SSR store for useStore calls\n if (typeof window === 'undefined') {\n const { setSSRStore } = await import('./store.js');\n setSSRStore(store);\n }\n \n \n // if (typeof window === 'undefined') {\n // moduleRegistry.initialized.clear();\n // moduleRegistry.modules.clear();\n // moduleRegistry.loadingPromises.clear();\n \n // // На сервере загружаем auth для SSR рендеринга (vue-app-renderer требует его)\n // const context = { app, store, router, config };\n // await moduleRegistry.load('globals', context);\n // await moduleRegistry.initialize('globals', context);\n // await moduleRegistry.load('auth', context);\n // await moduleRegistry.initialize('auth', context);\n // }\n \n const context = {\n app,\n store,\n router,\n config,\n ssr: true,\n };\n \n // Для SSR загружаем модули для текущего маршрута\n const requiredModules = moduleRegistry.getModulesForRoute(url);\n \n // Собираем имена модулей которые нужны для текущего роута\n const currentRouteModules = [];\n \n // Загружаем необходимые модули для SSR\n for (const module of requiredModules) {\n await moduleRegistry.load(module.name, context);\n await moduleRegistry.initialize(module.name, context);\n currentRouteModules.push(module.name);\n }\n \n // После загрузки модулей и регистрации роутов, выполняем навигацию\n await router.push(url);\n await router.isReady();\n \n const result = await appRenderer.render({\n url,\n cookies,\n createApp: () => ({ app, router, store, i18n, meta }),\n ssrContext\n });\n \n if (ssrContext?.modules) {\n result.usedModules = Array.from(ssrContext.modules);\n }\n \n // Передаем только модули текущего роута + критические модули\n // Это не реальные модули а метаданные для дегидратации\n const criticalModules = ['globals', 'auth', 'organizations', 'backoffice'];\n const allModulesForRoute = [...new Set([...criticalModules, ...currentRouteModules])];\n \n result.loadedModules = allModulesForRoute;\n \n return result;\n }\n \n // FOR SPA\n if (typeof window !== 'undefined' && process.env.MOBILE_APP) {\n createApp();\n }\n \n // FOR SSR / CLIENT ENTRY\n if (typeof window !== 'undefined' && !process.env.MOBILE_APP) {\n // Используем renderAndMountApp для правильной гидратации со state\n appRenderer.renderAndMountApp({ createApp, hooks }).then(({ app, router, store, moduleRegistry }) => {\n // Хук ПОСЛЕ гидратации\n if (hooks.afterHydration) {\n hooks.afterHydration({ app, router, store, moduleRegistry });\n }\n \n // Создаем context для загрузки модулей\n const context = { app, store, router, config };\n \n // Загружаем auth модуль сразу - он критичен\n moduleRegistry.load('auth', context).then(() => {\n // Загружаем важные модули в следующем тике\n setTimeout(async () => {\n try {\n await Promise.all([\n moduleRegistry.load('organizations', context),\n moduleRegistry.load('backoffice', context),\n ]);\n } catch (error) {\n console.error('Error loading core modules:', error);\n }\n }, 0);\n \n // Загружаем некритичные модули когда браузер idle\n requestIdleCallback(async () => {\n try {\n await moduleRegistry.load('notifications', context);\n // Маркер для тестов\n if (typeof window !== 'undefined') {\n window.performance.mark('client-ready');\n }\n } catch (error) {\n console.error('Error loading non-critical modules:', error);\n }\n });\n }).catch(error => {\n console.error('Error loading auth module:', error);\n });\n }).catch(error => {\n console.error('Hydration failed:', error);\n });\n }\n \n return { createApp, renderApp };\n }\n \n // Возвращаем промис, который резолвится с функциями\n return initializeApp();\n}"],"names":["createApp","createVueApp","createVueSSRApp","moduleRegistry"],"mappings":"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"}
@@ -71,11 +71,8 @@ class ModuleRegistry {
71
71
  }
72
72
  }
73
73
  const initFunc = module2.initialize || module2.default && module2.default.initialize;
74
- console.log(`[DEBUG registry] Module ${name} initFunc found:`, !!initFunc);
75
74
  if (initFunc) {
76
- console.log(`[DEBUG registry] Calling initialize for ${name}`);
77
75
  await initFunc(app, store, router, config);
78
- console.log(`[DEBUG registry] Module ${name} initialize completed`);
79
76
  }
80
77
  this.initialized.set(name, true);
81
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module-registry.cjs","sources":["../../../../../../../src/modules/globals/views/classes/module-registry.js"],"sourcesContent":["// module-registry.js - централизованный регистр модулей\nimport { ref, readonly } from 'vue';\n\nexport class ModuleRegistry {\n constructor() {\n this.modules = new Map();\n this.loaders = new Map();\n this.initialized = new Map();\n this.dependencies = new Map();\n this.loadingPromises = new Map(); // Для предотвращения дублирования загрузки\n }\n\n // Регистрация модуля с ленивой загрузкой\n register(name, config) {\n this.loaders.set(name, {\n loader: config.loader,\n routes: config.routes || [],\n dependencies: config.dependencies || [],\n priority: config.priority || 'normal',\n preload: config.preload || false,\n critical: config.critical || false,\n });\n }\n\n // Загрузка модуля\n async load(name, context = {}) {\n // Если модуль уже загружен\n if (this.modules.has(name)) {\n return this.modules.get(name);\n }\n\n // Если модуль уже загружается, вернуть существующий промис\n if (this.loadingPromises.has(name)) {\n return this.loadingPromises.get(name);\n }\n\n const config = this.loaders.get(name);\n if (!config) {\n throw new Error(`Module ${name} not registered`);\n }\n\n // Создаем промис загрузки и сохраняем его\n const loadPromise = this._loadModule(name, context, config);\n this.loadingPromises.set(name, loadPromise);\n\n try {\n const module = await loadPromise;\n this.loadingPromises.delete(name);\n return module;\n } catch (error) {\n this.loadingPromises.delete(name);\n throw error;\n }\n }\n\n // Внутренний метод для загрузки модуля\n async _loadModule(name, context, config) {\n const loadStart = Date.now();\n\n // Загружаем зависимости\n if (config.dependencies.length > 0) {\n await Promise.all(\n config.dependencies.map(dep => this.load(dep, context))\n );\n }\n\n // Загружаем сам модуль\n const module = await config.loader();\n \n const mod = module.default || module;\n \n this.modules.set(name, mod);\n \n // Инициализируем если есть контекст\n if (context.app && !this.initialized.has(name)) {\n await this.initialize(name, context);\n }\n\n return mod;\n }\n\n // Инициализация модуля\n async initialize(name, { app, store, router, config }) {\n const module = this.modules.get(name);\n if (!module || this.initialized.has(name)) {\n return;\n }\n\n // Инициализируем зависимости\n const moduleConfig = this.loaders.get(name);\n if (moduleConfig.dependencies.length > 0) {\n for (const dep of moduleConfig.dependencies) {\n await this.initialize(dep, { app, store, router, config });\n }\n }\n\n // Инициализируем модуль\n // Поддерживаем оба варианта: module.initialize и module.default.initialize для обратной совместимости\n const initFunc = module.initialize || (module.default && module.default.initialize);\n console.log(`[DEBUG registry] Module ${name} initFunc found:`, !!initFunc);\n if (initFunc) {\n console.log(`[DEBUG registry] Calling initialize for ${name}`);\n await initFunc(app, store, router, config);\n console.log(`[DEBUG registry] Module ${name} initialize completed`);\n }\n \n this.initialized.set(name, true);\n }\n\n // Получить модули для маршрута\n getModulesForRoute(path) {\n const modules = [];\n \n // Нормализуем путь - убираем trailing slash если это не корень\n const normalizedPath = path === '/' ? '/' : path.replace(/\\/$/, '');\n \n for (const [name, config] of this.loaders) {\n if (config.routes.some(route => {\n if (typeof route === 'string') {\n // Для корневого роута матчим все пути\n if (route === '/') {\n return true;\n }\n // Для остальных роутов проверяем начало пути\n // но учитываем границы сегментов (не /events должен матчить /event)\n const normalizedRoute = route.replace(/\\/$/, '');\n return normalizedPath === normalizedRoute || \n normalizedPath.startsWith(normalizedRoute + '/');\n }\n if (route instanceof RegExp) {\n return route.test(normalizedPath);\n }\n return false;\n })) {\n modules.push({ name, ...config });\n }\n }\n\n // Сортируем по приоритету\n return modules.sort((a, b) => {\n const priorities = { critical: 0, high: 1, normal: 2, low: 3 };\n return (priorities[a.priority] || 2) - (priorities[b.priority] || 2);\n });\n }\n \n // Получить критические модули для маршрута (для SSR)\n getCriticalModulesForRoute(path) {\n const allModules = this.getModulesForRoute(path);\n \n // Фильтруем только критические модули и модули с высоким приоритетом\n const criticalModules = allModules.filter(m => \n m.critical || m.priority === 'critical' || m.priority === 'high'\n );\n \n // Добавляем базовые модули, которые всегда критические\n const baseModules = ['globals', 'auth'];\n const moduleNames = new Set([...baseModules, ...criticalModules.map(m => m.name)]);\n \n // Добавляем зависимости критических модулей\n for (const moduleName of moduleNames) {\n const config = this.loaders.get(moduleName);\n if (config && config.dependencies) {\n for (const dep of config.dependencies) {\n moduleNames.add(dep);\n }\n }\n }\n \n return Array.from(moduleNames);\n }\n\n // Предзагрузка модулей\n async preloadModules(context) {\n const toPreload = [];\n \n for (const [name, config] of this.loaders) {\n if (config.preload || config.critical) {\n toPreload.push({ name, ...config });\n }\n }\n\n // Сортируем по приоритету\n toPreload.sort((a, b) => {\n if (a.critical && !b.critical) return -1;\n if (!a.critical && b.critical) return 1;\n const priorities = { critical: 0, high: 1, normal: 2, low: 3 };\n return (priorities[a.priority] || 2) - (priorities[b.priority] || 2);\n });\n\n // Загружаем критические синхронно\n const critical = toPreload.filter(m => m.critical);\n for (const module of critical) {\n await this.load(module.name, context);\n }\n\n // Остальные в фоне\n const normal = toPreload.filter(m => !m.critical);\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(() => {\n normal.forEach(module => this.load(module.name, context));\n });\n } else {\n setTimeout(() => {\n normal.forEach(module => this.load(module.name, context));\n }, 100);\n }\n }\n\n}\n\n// Создаем глобальный регистр\nexport const moduleRegistry = new ModuleRegistry();\n\n// Утилита для использования в компонентах\nexport async function useModule(name) {\n return moduleRegistry.load(name);\n}\n\n// Composable для Vue\nexport function useModuleLoader() {\n const loading = ref(false);\n const error = ref(null);\n\n const loadModule = async (name) => {\n loading.value = true;\n error.value = null;\n \n try {\n const module = await moduleRegistry.load(name);\n return module;\n } catch (e) {\n error.value = e;\n throw e;\n } finally {\n loading.value = false;\n }\n };\n\n return {\n loadModule,\n loading: readonly(loading),\n error: readonly(error),\n };\n}"],"names":["module"],"mappings":"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"}
1
+ {"version":3,"file":"module-registry.cjs","sources":["../../../../../../../src/modules/globals/views/classes/module-registry.js"],"sourcesContent":["// module-registry.js - централизованный регистр модулей\nimport { ref, readonly } from 'vue';\n\nexport class ModuleRegistry {\n constructor() {\n this.modules = new Map();\n this.loaders = new Map();\n this.initialized = new Map();\n this.dependencies = new Map();\n this.loadingPromises = new Map(); // Для предотвращения дублирования загрузки\n }\n\n // Регистрация модуля с ленивой загрузкой\n register(name, config) {\n this.loaders.set(name, {\n loader: config.loader,\n routes: config.routes || [],\n dependencies: config.dependencies || [],\n priority: config.priority || 'normal',\n preload: config.preload || false,\n critical: config.critical || false,\n });\n }\n\n // Загрузка модуля\n async load(name, context = {}) {\n // Если модуль уже загружен\n if (this.modules.has(name)) {\n return this.modules.get(name);\n }\n\n // Если модуль уже загружается, вернуть существующий промис\n if (this.loadingPromises.has(name)) {\n return this.loadingPromises.get(name);\n }\n\n const config = this.loaders.get(name);\n if (!config) {\n throw new Error(`Module ${name} not registered`);\n }\n\n // Создаем промис загрузки и сохраняем его\n const loadPromise = this._loadModule(name, context, config);\n this.loadingPromises.set(name, loadPromise);\n\n try {\n const module = await loadPromise;\n this.loadingPromises.delete(name);\n return module;\n } catch (error) {\n this.loadingPromises.delete(name);\n throw error;\n }\n }\n\n // Внутренний метод для загрузки модуля\n async _loadModule(name, context, config) {\n const loadStart = Date.now();\n\n // Загружаем зависимости\n if (config.dependencies.length > 0) {\n await Promise.all(\n config.dependencies.map(dep => this.load(dep, context))\n );\n }\n\n // Загружаем сам модуль\n const module = await config.loader();\n \n const mod = module.default || module;\n \n this.modules.set(name, mod);\n \n // Инициализируем если есть контекст\n if (context.app && !this.initialized.has(name)) {\n await this.initialize(name, context);\n }\n\n return mod;\n }\n\n // Инициализация модуля\n async initialize(name, { app, store, router, config }) {\n const module = this.modules.get(name);\n if (!module || this.initialized.has(name)) {\n return;\n }\n\n // Инициализируем зависимости\n const moduleConfig = this.loaders.get(name);\n if (moduleConfig.dependencies.length > 0) {\n for (const dep of moduleConfig.dependencies) {\n await this.initialize(dep, { app, store, router, config });\n }\n }\n\n // Инициализируем модуль\n // Поддерживаем оба варианта: module.initialize и module.default.initialize для обратной совместимости\n const initFunc = module.initialize || (module.default && module.default.initialize);\n if (initFunc) {\n await initFunc(app, store, router, config);\n }\n \n this.initialized.set(name, true);\n }\n\n // Получить модули для маршрута\n getModulesForRoute(path) {\n const modules = [];\n \n // Нормализуем путь - убираем trailing slash если это не корень\n const normalizedPath = path === '/' ? '/' : path.replace(/\\/$/, '');\n \n for (const [name, config] of this.loaders) {\n if (config.routes.some(route => {\n if (typeof route === 'string') {\n // Для корневого роута матчим все пути\n if (route === '/') {\n return true;\n }\n // Для остальных роутов проверяем начало пути\n // но учитываем границы сегментов (не /events должен матчить /event)\n const normalizedRoute = route.replace(/\\/$/, '');\n return normalizedPath === normalizedRoute || \n normalizedPath.startsWith(normalizedRoute + '/');\n }\n if (route instanceof RegExp) {\n return route.test(normalizedPath);\n }\n return false;\n })) {\n modules.push({ name, ...config });\n }\n }\n\n // Сортируем по приоритету\n return modules.sort((a, b) => {\n const priorities = { critical: 0, high: 1, normal: 2, low: 3 };\n return (priorities[a.priority] || 2) - (priorities[b.priority] || 2);\n });\n }\n \n // Получить критические модули для маршрута (для SSR)\n getCriticalModulesForRoute(path) {\n const allModules = this.getModulesForRoute(path);\n \n // Фильтруем только критические модули и модули с высоким приоритетом\n const criticalModules = allModules.filter(m => \n m.critical || m.priority === 'critical' || m.priority === 'high'\n );\n \n // Добавляем базовые модули, которые всегда критические\n const baseModules = ['globals', 'auth'];\n const moduleNames = new Set([...baseModules, ...criticalModules.map(m => m.name)]);\n \n // Добавляем зависимости критических модулей\n for (const moduleName of moduleNames) {\n const config = this.loaders.get(moduleName);\n if (config && config.dependencies) {\n for (const dep of config.dependencies) {\n moduleNames.add(dep);\n }\n }\n }\n \n return Array.from(moduleNames);\n }\n\n // Предзагрузка модулей\n async preloadModules(context) {\n const toPreload = [];\n \n for (const [name, config] of this.loaders) {\n if (config.preload || config.critical) {\n toPreload.push({ name, ...config });\n }\n }\n\n // Сортируем по приоритету\n toPreload.sort((a, b) => {\n if (a.critical && !b.critical) return -1;\n if (!a.critical && b.critical) return 1;\n const priorities = { critical: 0, high: 1, normal: 2, low: 3 };\n return (priorities[a.priority] || 2) - (priorities[b.priority] || 2);\n });\n\n // Загружаем критические синхронно\n const critical = toPreload.filter(m => m.critical);\n for (const module of critical) {\n await this.load(module.name, context);\n }\n\n // Остальные в фоне\n const normal = toPreload.filter(m => !m.critical);\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(() => {\n normal.forEach(module => this.load(module.name, context));\n });\n } else {\n setTimeout(() => {\n normal.forEach(module => this.load(module.name, context));\n }, 100);\n }\n }\n\n}\n\n// Создаем глобальный регистр\nexport const moduleRegistry = new ModuleRegistry();\n\n// Утилита для использования в компонентах\nexport async function useModule(name) {\n return moduleRegistry.load(name);\n}\n\n// Composable для Vue\nexport function useModuleLoader() {\n const loading = ref(false);\n const error = ref(null);\n\n const loadModule = async (name) => {\n loading.value = true;\n error.value = null;\n \n try {\n const module = await moduleRegistry.load(name);\n return module;\n } catch (e) {\n error.value = e;\n throw e;\n } finally {\n loading.value = false;\n }\n };\n\n return {\n loadModule,\n loading: readonly(loading),\n error: readonly(error),\n };\n}"],"names":["module"],"mappings":"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"}
@@ -69,11 +69,8 @@ class ModuleRegistry {
69
69
  }
70
70
  }
71
71
  const initFunc = module.initialize || module.default && module.default.initialize;
72
- console.log(`[DEBUG registry] Module ${name} initFunc found:`, !!initFunc);
73
72
  if (initFunc) {
74
- console.log(`[DEBUG registry] Calling initialize for ${name}`);
75
73
  await initFunc(app, store, router, config);
76
- console.log(`[DEBUG registry] Module ${name} initialize completed`);
77
74
  }
78
75
  this.initialized.set(name, true);
79
76
  }