@lumal/core 0.0.1-beta

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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/LumalThemeSettingsPanel-BFkZzwEW.js +685 -0
  4. package/dist/LumalThemeSettingsPanel-C6aPhgUX.cjs +1 -0
  5. package/dist/_plugin-vue_export-helper-B3ysoDQm.js +8 -0
  6. package/dist/_plugin-vue_export-helper-BTmtiIyf.cjs +1 -0
  7. package/dist/auth.cjs +1 -0
  8. package/dist/auth.js +127 -0
  9. package/dist/components-DJiHYQQB.cjs +2 -0
  10. package/dist/components-DYmKh-eF.js +2206 -0
  11. package/dist/components.cjs +1 -0
  12. package/dist/components.js +3 -0
  13. package/dist/composables-C4twj5Ov.cjs +1 -0
  14. package/dist/composables-C9EuCUjj.js +130 -0
  15. package/dist/composables.cjs +1 -0
  16. package/dist/composables.js +148 -0
  17. package/dist/core.css +2 -0
  18. package/dist/dictionary-B7tsaVqB.js +19 -0
  19. package/dist/dictionary-ClEWtQCU.cjs +1 -0
  20. package/dist/dictionary.cjs +1 -0
  21. package/dist/dictionary.js +3 -0
  22. package/dist/directive-D-fB5qbY.js +16 -0
  23. package/dist/directive-DSVr7QvO.cjs +1 -0
  24. package/dist/directives.cjs +1 -0
  25. package/dist/directives.js +11 -0
  26. package/dist/index.cjs +1 -0
  27. package/dist/index.js +88 -0
  28. package/dist/layout-C8H9wuQa.js +2075 -0
  29. package/dist/layout-ZnyG9X3N.cjs +1 -0
  30. package/dist/layout.cjs +1 -0
  31. package/dist/layout.js +2 -0
  32. package/dist/permission-6sXtjGMS.cjs +1 -0
  33. package/dist/permission-CCkqvnWg.js +104 -0
  34. package/dist/permission.cjs +1 -0
  35. package/dist/permission.js +3 -0
  36. package/dist/request.cjs +1 -0
  37. package/dist/request.js +277 -0
  38. package/dist/router.cjs +1 -0
  39. package/dist/router.js +510 -0
  40. package/dist/src/app/createLumalAdmin.d.ts +4 -0
  41. package/dist/src/app/createLumalAdmin.d.ts.map +1 -0
  42. package/dist/src/app/default-components.d.ts +4 -0
  43. package/dist/src/app/default-components.d.ts.map +1 -0
  44. package/dist/src/app/index.d.ts +3 -0
  45. package/dist/src/app/index.d.ts.map +1 -0
  46. package/dist/src/app/types.d.ts +41 -0
  47. package/dist/src/app/types.d.ts.map +1 -0
  48. package/dist/src/auth/adapter.d.ts +3 -0
  49. package/dist/src/auth/adapter.d.ts.map +1 -0
  50. package/dist/src/auth/createAuthSession.d.ts +8 -0
  51. package/dist/src/auth/createAuthSession.d.ts.map +1 -0
  52. package/dist/src/auth/index.d.ts +8 -0
  53. package/dist/src/auth/index.d.ts.map +1 -0
  54. package/dist/src/auth/redirect.d.ts +8 -0
  55. package/dist/src/auth/redirect.d.ts.map +1 -0
  56. package/dist/src/auth/session-expired.d.ts +5 -0
  57. package/dist/src/auth/session-expired.d.ts.map +1 -0
  58. package/dist/src/auth/session.d.ts +10 -0
  59. package/dist/src/auth/session.d.ts.map +1 -0
  60. package/dist/src/auth/storage.d.ts +7 -0
  61. package/dist/src/auth/storage.d.ts.map +1 -0
  62. package/dist/src/auth/types.d.ts +68 -0
  63. package/dist/src/auth/types.d.ts.map +1 -0
  64. package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts +41 -0
  65. package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts.map +1 -0
  66. package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts +151 -0
  67. package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts.map +1 -0
  68. package/dist/src/components/crud-table/index.d.ts +4 -0
  69. package/dist/src/components/crud-table/index.d.ts.map +1 -0
  70. package/dist/src/components/crud-table/schema.d.ts +4 -0
  71. package/dist/src/components/crud-table/schema.d.ts.map +1 -0
  72. package/dist/src/components/crud-table/types.d.ts +165 -0
  73. package/dist/src/components/crud-table/types.d.ts.map +1 -0
  74. package/dist/src/components/crud-table/useCrudData.d.ts +20 -0
  75. package/dist/src/components/crud-table/useCrudData.d.ts.map +1 -0
  76. package/dist/src/components/crud-table/useCrudDialog.d.ts +19 -0
  77. package/dist/src/components/crud-table/useCrudDialog.d.ts.map +1 -0
  78. package/dist/src/components/crud-table/useCrudQuery.d.ts +18 -0
  79. package/dist/src/components/crud-table/useCrudQuery.d.ts.map +1 -0
  80. package/dist/src/components/crud-table/useCrudSelection.d.ts +9 -0
  81. package/dist/src/components/crud-table/useCrudSelection.d.ts.map +1 -0
  82. package/dist/src/components/info-table/LumalInfoTable.vue.d.ts +12 -0
  83. package/dist/src/components/info-table/LumalInfoTable.vue.d.ts.map +1 -0
  84. package/dist/src/components/info-table/index.d.ts +3 -0
  85. package/dist/src/components/info-table/index.d.ts.map +1 -0
  86. package/dist/src/components/info-table/types.d.ts +15 -0
  87. package/dist/src/components/info-table/types.d.ts.map +1 -0
  88. package/dist/src/components/page/LumalPage.vue.d.ts +36 -0
  89. package/dist/src/components/page/LumalPage.vue.d.ts.map +1 -0
  90. package/dist/src/components/page/index.d.ts +2 -0
  91. package/dist/src/components/page/index.d.ts.map +1 -0
  92. package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts +38 -0
  93. package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts.map +1 -0
  94. package/dist/src/components/page-layout/index.d.ts +3 -0
  95. package/dist/src/components/page-layout/index.d.ts.map +1 -0
  96. package/dist/src/components/page-layout/types.d.ts +9 -0
  97. package/dist/src/components/page-layout/types.d.ts.map +1 -0
  98. package/dist/src/components/pagination/LumalPagination.vue.d.ts +31 -0
  99. package/dist/src/components/pagination/LumalPagination.vue.d.ts.map +1 -0
  100. package/dist/src/components/pagination/index.d.ts +3 -0
  101. package/dist/src/components/pagination/index.d.ts.map +1 -0
  102. package/dist/src/components/pagination/types.d.ts +5 -0
  103. package/dist/src/components/pagination/types.d.ts.map +1 -0
  104. package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts +78 -0
  105. package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts.map +1 -0
  106. package/dist/src/components/schema-form/index.d.ts +4 -0
  107. package/dist/src/components/schema-form/index.d.ts.map +1 -0
  108. package/dist/src/components/schema-form/normalize.d.ts +11 -0
  109. package/dist/src/components/schema-form/normalize.d.ts.map +1 -0
  110. package/dist/src/components/schema-form/types.d.ts +103 -0
  111. package/dist/src/components/schema-form/types.d.ts.map +1 -0
  112. package/dist/src/components/schema-form/types.type-test.d.ts +2 -0
  113. package/dist/src/components/schema-form/types.type-test.d.ts.map +1 -0
  114. package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts +108 -0
  115. package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts.map +1 -0
  116. package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts +8 -0
  117. package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts.map +1 -0
  118. package/dist/src/components/schema-table/cell.d.ts +13 -0
  119. package/dist/src/components/schema-table/cell.d.ts.map +1 -0
  120. package/dist/src/components/schema-table/index.d.ts +6 -0
  121. package/dist/src/components/schema-table/index.d.ts.map +1 -0
  122. package/dist/src/components/schema-table/normalize.d.ts +8 -0
  123. package/dist/src/components/schema-table/normalize.d.ts.map +1 -0
  124. package/dist/src/components/schema-table/types.d.ts +66 -0
  125. package/dist/src/components/schema-table/types.d.ts.map +1 -0
  126. package/dist/src/components/schema-table/types.type-test.d.ts +2 -0
  127. package/dist/src/components/schema-table/types.type-test.d.ts.map +1 -0
  128. package/dist/src/composables/index.d.ts +11 -0
  129. package/dist/src/composables/index.d.ts.map +1 -0
  130. package/dist/src/composables/useConfirmAction.d.ts +21 -0
  131. package/dist/src/composables/useConfirmAction.d.ts.map +1 -0
  132. package/dist/src/composables/useFullscreen.d.ts +14 -0
  133. package/dist/src/composables/useFullscreen.d.ts.map +1 -0
  134. package/dist/src/composables/usePagination.d.ts +36 -0
  135. package/dist/src/composables/usePagination.d.ts.map +1 -0
  136. package/dist/src/composables/usePersistentState.d.ts +9 -0
  137. package/dist/src/composables/usePersistentState.d.ts.map +1 -0
  138. package/dist/src/composables/useSelection.d.ts +20 -0
  139. package/dist/src/composables/useSelection.d.ts.map +1 -0
  140. package/dist/src/dictionary/composables.d.ts +15 -0
  141. package/dist/src/dictionary/composables.d.ts.map +1 -0
  142. package/dist/src/dictionary/context.d.ts +10 -0
  143. package/dist/src/dictionary/context.d.ts.map +1 -0
  144. package/dist/src/dictionary/fetcher.d.ts +4 -0
  145. package/dist/src/dictionary/fetcher.d.ts.map +1 -0
  146. package/dist/src/dictionary/index.d.ts +8 -0
  147. package/dist/src/dictionary/index.d.ts.map +1 -0
  148. package/dist/src/dictionary/normalize.d.ts +5 -0
  149. package/dist/src/dictionary/normalize.d.ts.map +1 -0
  150. package/dist/src/dictionary/store.d.ts +4 -0
  151. package/dist/src/dictionary/store.d.ts.map +1 -0
  152. package/dist/src/dictionary/types.d.ts +53 -0
  153. package/dist/src/dictionary/types.d.ts.map +1 -0
  154. package/dist/src/directives/index.d.ts +16 -0
  155. package/dist/src/directives/index.d.ts.map +1 -0
  156. package/dist/src/exports/components.d.ts +16 -0
  157. package/dist/src/exports/components.d.ts.map +1 -0
  158. package/dist/src/index.d.ts +6 -0
  159. package/dist/src/index.d.ts.map +1 -0
  160. package/dist/src/layout/LumalBreadcrumb.vue.d.ts +28 -0
  161. package/dist/src/layout/LumalBreadcrumb.vue.d.ts.map +1 -0
  162. package/dist/src/layout/LumalContent.vue.d.ts +18 -0
  163. package/dist/src/layout/LumalContent.vue.d.ts.map +1 -0
  164. package/dist/src/layout/LumalGlobalSearch.vue.d.ts +25 -0
  165. package/dist/src/layout/LumalGlobalSearch.vue.d.ts.map +1 -0
  166. package/dist/src/layout/LumalHeader.vue.d.ts +43 -0
  167. package/dist/src/layout/LumalHeader.vue.d.ts.map +1 -0
  168. package/dist/src/layout/LumalLayout.vue.d.ts +98 -0
  169. package/dist/src/layout/LumalLayout.vue.d.ts.map +1 -0
  170. package/dist/src/layout/LumalMenuBadge.vue.d.ts +16 -0
  171. package/dist/src/layout/LumalMenuBadge.vue.d.ts.map +1 -0
  172. package/dist/src/layout/LumalRouterView.vue.d.ts +24 -0
  173. package/dist/src/layout/LumalRouterView.vue.d.ts.map +1 -0
  174. package/dist/src/layout/LumalSidebar.vue.d.ts +29 -0
  175. package/dist/src/layout/LumalSidebar.vue.d.ts.map +1 -0
  176. package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts +16 -0
  177. package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts.map +1 -0
  178. package/dist/src/layout/LumalTabs.vue.d.ts +76 -0
  179. package/dist/src/layout/LumalTabs.vue.d.ts.map +1 -0
  180. package/dist/src/layout/LumalTopNav.vue.d.ts +27 -0
  181. package/dist/src/layout/LumalTopNav.vue.d.ts.map +1 -0
  182. package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts +15 -0
  183. package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts.map +1 -0
  184. package/dist/src/layout/index.d.ts +18 -0
  185. package/dist/src/layout/index.d.ts.map +1 -0
  186. package/dist/src/layout/state/menu-layout.d.ts +35 -0
  187. package/dist/src/layout/state/menu-layout.d.ts.map +1 -0
  188. package/dist/src/layout/state/tab-storage.d.ts +51 -0
  189. package/dist/src/layout/state/tab-storage.d.ts.map +1 -0
  190. package/dist/src/layout/state/tab-strategy.d.ts +73 -0
  191. package/dist/src/layout/state/tab-strategy.d.ts.map +1 -0
  192. package/dist/src/layout/types.d.ts +29 -0
  193. package/dist/src/layout/types.d.ts.map +1 -0
  194. package/dist/src/permission/LumalAccessControl.vue.d.ts +26 -0
  195. package/dist/src/permission/LumalAccessControl.vue.d.ts.map +1 -0
  196. package/dist/src/permission/context.d.ts +6 -0
  197. package/dist/src/permission/context.d.ts.map +1 -0
  198. package/dist/src/permission/directive.d.ts +3 -0
  199. package/dist/src/permission/directive.d.ts.map +1 -0
  200. package/dist/src/permission/guard.d.ts +4 -0
  201. package/dist/src/permission/guard.d.ts.map +1 -0
  202. package/dist/src/permission/helpers.d.ts +4 -0
  203. package/dist/src/permission/helpers.d.ts.map +1 -0
  204. package/dist/src/permission/index.d.ts +8 -0
  205. package/dist/src/permission/index.d.ts.map +1 -0
  206. package/dist/src/permission/store.d.ts +4 -0
  207. package/dist/src/permission/store.d.ts.map +1 -0
  208. package/dist/src/permission/types.d.ts +67 -0
  209. package/dist/src/permission/types.d.ts.map +1 -0
  210. package/dist/src/request/cache.d.ts +8 -0
  211. package/dist/src/request/cache.d.ts.map +1 -0
  212. package/dist/src/request/client.d.ts +4 -0
  213. package/dist/src/request/client.d.ts.map +1 -0
  214. package/dist/src/request/error.d.ts +19 -0
  215. package/dist/src/request/error.d.ts.map +1 -0
  216. package/dist/src/request/index.d.ts +8 -0
  217. package/dist/src/request/index.d.ts.map +1 -0
  218. package/dist/src/request/standard.d.ts +61 -0
  219. package/dist/src/request/standard.d.ts.map +1 -0
  220. package/dist/src/request/types.d.ts +102 -0
  221. package/dist/src/request/types.d.ts.map +1 -0
  222. package/dist/src/router/index.d.ts +36 -0
  223. package/dist/src/router/index.d.ts.map +1 -0
  224. package/dist/src/router/types.d.ts +231 -0
  225. package/dist/src/router/types.d.ts.map +1 -0
  226. package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts +33 -0
  227. package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts.map +1 -0
  228. package/dist/src/theme/dom.d.ts +6 -0
  229. package/dist/src/theme/dom.d.ts.map +1 -0
  230. package/dist/src/theme/index.d.ts +11 -0
  231. package/dist/src/theme/index.d.ts.map +1 -0
  232. package/dist/src/theme/preferences-store.d.ts +4 -0
  233. package/dist/src/theme/preferences-store.d.ts.map +1 -0
  234. package/dist/src/theme/preferences.d.ts +18 -0
  235. package/dist/src/theme/preferences.d.ts.map +1 -0
  236. package/dist/src/theme/store.d.ts +3 -0
  237. package/dist/src/theme/store.d.ts.map +1 -0
  238. package/dist/src/theme/theme-color-presets.d.ts +13 -0
  239. package/dist/src/theme/theme-color-presets.d.ts.map +1 -0
  240. package/dist/src/theme/tokens.d.ts +5 -0
  241. package/dist/src/theme/tokens.d.ts.map +1 -0
  242. package/dist/src/theme/types.d.ts +103 -0
  243. package/dist/src/theme/types.d.ts.map +1 -0
  244. package/dist/src/utils/clone.d.ts +12 -0
  245. package/dist/src/utils/clone.d.ts.map +1 -0
  246. package/dist/src/utils/color.d.ts +6 -0
  247. package/dist/src/utils/color.d.ts.map +1 -0
  248. package/dist/src/utils/display.d.ts +10 -0
  249. package/dist/src/utils/display.d.ts.map +1 -0
  250. package/dist/src/utils/download.d.ts +10 -0
  251. package/dist/src/utils/download.d.ts.map +1 -0
  252. package/dist/src/utils/index.d.ts +12 -0
  253. package/dist/src/utils/index.d.ts.map +1 -0
  254. package/dist/src/utils/object.d.ts +6 -0
  255. package/dist/src/utils/object.d.ts.map +1 -0
  256. package/dist/src/utils/path.d.ts +6 -0
  257. package/dist/src/utils/path.d.ts.map +1 -0
  258. package/dist/src/utils/query.d.ts +9 -0
  259. package/dist/src/utils/query.d.ts.map +1 -0
  260. package/dist/src/utils/storage.d.ts +7 -0
  261. package/dist/src/utils/storage.d.ts.map +1 -0
  262. package/dist/src/utils/types.d.ts +13 -0
  263. package/dist/src/utils/types.d.ts.map +1 -0
  264. package/dist/src/utils/with-install.d.ts +11 -0
  265. package/dist/src/utils/with-install.d.ts.map +1 -0
  266. package/dist/theme.cjs +1 -0
  267. package/dist/theme.js +187 -0
  268. package/dist/utils.cjs +1 -0
  269. package/dist/utils.js +130 -0
  270. package/package.json +124 -0
  271. package/theme-chalk/index.scss +70 -0
@@ -0,0 +1,3 @@
1
+ import type { PermissionDirective, PermissionDirectiveOptions, PermissionStore } from './types';
2
+ export declare function createPermissionDirective(store: PermissionStore, options?: PermissionDirectiveOptions): PermissionDirective;
3
+ //# sourceMappingURL=directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive.d.ts","sourceRoot":"","sources":["../../../src/permission/directive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,0BAA0B,EAAyB,eAAe,EAAE,MAAM,SAAS,CAAA;AAYtH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,0BAA+B,GACvC,mBAAmB,CASrB"}
@@ -0,0 +1,4 @@
1
+ import type { PermissionGuardOptions, PermissionRouterLike, PermissionStore } from './types';
2
+ /***********************路由守卫*********************/
3
+ export declare function setupPermissionGuard(router: PermissionRouterLike, store: PermissionStore, options?: PermissionGuardOptions): void;
4
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/permission/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAGtB,oBAAoB,EACpB,eAAe,EAChB,MAAM,SAAS,CAAA;AAmDhB,kDAAkD;AAClD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,sBAA2B,GACnC,IAAI,CAyBN"}
@@ -0,0 +1,4 @@
1
+ import type { PermissionCheckMode, PermissionRequirement } from './types';
2
+ export declare function hasPermission(permissions: string[], required?: PermissionRequirement, mode?: PermissionCheckMode): boolean;
3
+ export declare function hasRole(roles: string[], required?: PermissionRequirement, mode?: PermissionCheckMode): boolean;
4
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/permission/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AA8BzE,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,CAAC,EAAE,qBAAqB,EAChC,IAAI,GAAE,mBAA4B,GACjC,OAAO,CAET;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,qBAAqB,EAChC,IAAI,GAAE,mBAA4B,GACjC,OAAO,CAET"}
@@ -0,0 +1,8 @@
1
+ export { permissionStoreKey, providePermissionStore, usePermissionStore, } from './context';
2
+ export { createPermissionDirective, } from './directive';
3
+ export { setupPermissionGuard, } from './guard';
4
+ export { hasPermission, hasRole, } from './helpers';
5
+ export { default as LumalAccessControl } from './LumalAccessControl.vue';
6
+ export { createPermissionStore, } from './store';
7
+ export type { PermissionCheckMode, PermissionDirective, PermissionDirectiveOptions, PermissionGuardOptions, PermissionGuardResult, PermissionRequirement, PermissionRouteLike, PermissionRouteMeta, PermissionRouterLike, PermissionStore, PermissionStoreOptions, } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/permission/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,yBAAyB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,oBAAoB,GACrB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,aAAa,EACb,OAAO,GACR,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EACL,qBAAqB,GACtB,MAAM,SAAS,CAAA;AAChB,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,GACvB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { PermissionStore, PermissionStoreOptions } from './types';
2
+ /***********************权限状态*********************/
3
+ export declare function createPermissionStore(options?: PermissionStoreOptions): PermissionStore;
4
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/permission/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8C,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAIlH,kDAAkD;AAClD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CA4B3F"}
@@ -0,0 +1,67 @@
1
+ import type { Directive } from 'vue';
2
+ export type PermissionRequirement = string | string[] | null | undefined;
3
+ export type PermissionCheckMode = 'every' | 'some';
4
+ export interface PermissionStoreOptions {
5
+ permissions?: string[];
6
+ roles?: string[];
7
+ }
8
+ export interface PermissionStore {
9
+ readonly permissions: string[];
10
+ readonly roles: string[];
11
+ clear: () => void;
12
+ hasPermission: (required?: PermissionRequirement, mode?: PermissionCheckMode) => boolean;
13
+ hasRole: (required?: PermissionRequirement, mode?: PermissionCheckMode) => boolean;
14
+ setPermissions: (permissions: string[]) => void;
15
+ setRoles: (roles: string[]) => void;
16
+ }
17
+ export interface PermissionDirectiveOptions {
18
+ mode?: PermissionCheckMode;
19
+ }
20
+ export type PermissionDirective = Directive<HTMLElement, PermissionRequirement>;
21
+ export interface PermissionRouteMeta {
22
+ permission?: PermissionRequirement;
23
+ permissions?: PermissionRequirement;
24
+ role?: PermissionRequirement;
25
+ roles?: PermissionRequirement;
26
+ requireLogin?: boolean;
27
+ [key: string]: unknown;
28
+ }
29
+ export interface PermissionRouteLike {
30
+ meta?: PermissionRouteMeta;
31
+ matched?: readonly {
32
+ meta?: PermissionRouteMeta;
33
+ }[];
34
+ path?: string;
35
+ fullPath?: string;
36
+ name?: string | symbol | null;
37
+ }
38
+ /**
39
+ * 守卫返回:true 放行,字符串或位置对象为跳转目标,false 拦截。
40
+ */
41
+ export type PermissionGuardResult = boolean | string | {
42
+ path: string;
43
+ query?: Record<string, string>;
44
+ replace?: boolean;
45
+ };
46
+ export interface PermissionRouterLike {
47
+ beforeEach: (guard: (to: PermissionRouteLike) => PermissionGuardResult | Promise<PermissionGuardResult>) => unknown;
48
+ }
49
+ export interface PermissionGuardOptions {
50
+ /** 权限匹配模式,默认 some。 */
51
+ mode?: PermissionCheckMode;
52
+ /** 角色匹配模式,默认 some。 */
53
+ roleMode?: PermissionCheckMode;
54
+ /** 无权限时的跳转目标。 */
55
+ noAccessRedirect?: string;
56
+ /** 免登录白名单路径。 */
57
+ whiteList?: string[];
58
+ /** 登录页路径,默认 `/login`;命中时始终放行。 */
59
+ loginPath?: string;
60
+ /** 是否已登录;提供后开启登录守卫。 */
61
+ isAuthenticated?: () => boolean;
62
+ /** 未登录跳转登录页时携带的原始路径参数名,默认 `redirect`。 */
63
+ redirectQueryKey?: string;
64
+ /** 未显式声明 requireLogin 时是否默认需要登录,默认 false。 */
65
+ requireLoginByDefault?: boolean;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/permission/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { RequestCache } from './types';
2
+ /***********************内存缓存*********************/
3
+ /**
4
+ * 基于 Map 的内存请求缓存实现,作为开启缓存时的默认存储。
5
+ * 应用可实现同接口替换为带 TTL、LRU 或持久化的存储。
6
+ */
7
+ export declare function createRequestCache(): RequestCache;
8
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/request/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,kDAAkD;AAClD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAgBjD"}
@@ -0,0 +1,4 @@
1
+ import type { RequestClient, RequestClientOptions } from './types';
2
+ /***********************客户端创建*********************/
3
+ export declare function createRequestClient(clientOptions?: RequestClientOptions): RequestClient;
4
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/request/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AA+JhB,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,aAAa,GAAE,oBAAyB,GAAG,aAAa,CAmP3F"}
@@ -0,0 +1,19 @@
1
+ export type RequestErrorKind = 'business' | 'cancelled' | 'duplicate' | 'http' | 'network' | 'session';
2
+ export interface RequestErrorOptions {
3
+ code?: number | string;
4
+ kind?: RequestErrorKind;
5
+ data?: unknown;
6
+ originalError?: unknown;
7
+ response?: Response;
8
+ status?: number;
9
+ }
10
+ export declare class RequestError extends Error {
11
+ code?: number | string;
12
+ data?: unknown;
13
+ kind: RequestErrorKind;
14
+ originalError?: unknown;
15
+ response?: Response;
16
+ status?: number;
17
+ constructor(message: string, options?: RequestErrorOptions);
18
+ }
19
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/request/error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACtB,UAAU,GACV,WAAW,GACX,WAAW,GACX,MAAM,GACN,SAAS,GACT,SAAS,CAAA;AAEf,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,gBAAgB,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;gBAEH,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;CAU/D"}
@@ -0,0 +1,8 @@
1
+ export { createRequestCache, } from './cache';
2
+ export { createRequestClient, } from './client';
3
+ export { RequestError, } from './error';
4
+ export type { RequestErrorKind, RequestErrorOptions, } from './error';
5
+ export { createStandardResponseParser, parsePageResult, parseStandardResponse, } from './standard';
6
+ export type { ApiEnvelope, PageResult, PageResultFieldNames, ParsePageResultOptions, ParseStandardResponseOptions, StandardResponse, StandardResponseFieldNames, } from './standard';
7
+ export type { RequestAuthRefreshOptions, RequestBeforeContext, RequestCache, RequestCacheOptions, RequestClient, RequestClientOptions, RequestContext, RequestErrorContext, RequestMethod, RequestOptions, RequestQuery, RequestQueryValue, RequestUploadOptions, } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/request/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,mBAAmB,GACpB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,GACb,MAAM,SAAS,CAAA;AAChB,YAAY,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,4BAA4B,EAC5B,eAAe,EACf,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACtB,4BAA4B,EAC5B,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,61 @@
1
+ /***********************标准响应解析*********************/
2
+ /**
3
+ * 常见后端统一响应包装(可通过 fieldNames 适配非标准字段)。
4
+ */
5
+ export interface ApiEnvelope<TData = unknown> {
6
+ code?: unknown;
7
+ data?: TData;
8
+ message?: unknown;
9
+ [key: string]: unknown;
10
+ }
11
+ export type StandardResponse<TData = unknown> = ApiEnvelope<TData>;
12
+ export interface StandardResponseFieldNames {
13
+ /** 业务状态码字段名,默认 `code`。 */
14
+ code?: string;
15
+ /** 业务数据字段名,默认 `data`。 */
16
+ data?: string;
17
+ /** 提示消息字段名,默认 `message`。 */
18
+ message?: string;
19
+ }
20
+ export interface ParseStandardResponseOptions<TData = unknown, TResult = TData> {
21
+ /** 非标准字段映射。 */
22
+ fieldNames?: StandardResponseFieldNames;
23
+ /** 判定成功的状态码集合,默认 `[0, 200]`。 */
24
+ successCodes?: unknown[];
25
+ /** 解析失败时抛出的错误工厂,默认抛出 Error(message)。 */
26
+ onError?: (message: string, response: StandardResponse) => never;
27
+ /** 会话失效业务码;命中时抛出 kind=session 的 RequestError。 */
28
+ sessionExpiredCodes?: unknown[];
29
+ /** 对取出的业务数据做最终类型归一。 */
30
+ transform?: (data: TData, response: StandardResponse<TData>) => TResult;
31
+ }
32
+ /**
33
+ * 从标准响应包装中取出业务数据,状态码不在成功集合时抛错。
34
+ * 该 helper 需显式启用,未启用时 request client 返回原始响应数据,
35
+ * 以便适配非标准后端。
36
+ */
37
+ export declare function parseStandardResponse<TData = unknown, TResult = TData>(response: StandardResponse<TData>, options?: ParseStandardResponseOptions<TData, TResult>): TResult;
38
+ /**
39
+ * 生成可直接用作 onResponse 的标准响应解析器。
40
+ */
41
+ export declare function createStandardResponseParser<TData = unknown, TResult = TData>(options?: ParseStandardResponseOptions<TData, TResult>): <TValue = TResult>(context: {
42
+ data: unknown;
43
+ }) => TValue;
44
+ /***********************标准分页解析*********************/
45
+ export interface PageResult<TItem = unknown> {
46
+ items: TItem[];
47
+ total: number;
48
+ }
49
+ export interface PageResultFieldNames {
50
+ items?: string;
51
+ total?: string;
52
+ }
53
+ export interface ParsePageResultOptions<TItem = unknown> {
54
+ fieldNames?: PageResultFieldNames;
55
+ /** 处理多层嵌套或异常列表位置。 */
56
+ parseResponse?: (response: unknown) => unknown;
57
+ /** 逐项修正数字字符串、布尔字符串等类型漂移。 */
58
+ transform?: (item: unknown, index: number) => TItem;
59
+ }
60
+ export declare function parsePageResult<TItem = unknown>(response: unknown, options?: ParsePageResultOptions<TItem>): PageResult<TItem>;
61
+ //# sourceMappingURL=standard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../../src/request/standard.ts"],"names":[],"mappings":"AAEA,oDAAoD;AACpD;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,OAAO;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAA;AAElE,MAAM,WAAW,0BAA0B;IACzC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,4BAA4B,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,KAAK;IAC5E,eAAe;IACf,UAAU,CAAC,EAAE,0BAA0B,CAAA;IACvC,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAA;IACxB,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,KAAK,CAAA;IAChE,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC/B,uBAAuB;IACvB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,OAAO,CAAA;CACxE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,KAAK,EACpE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,EACjC,OAAO,GAAE,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAM,GACzD,OAAO,CA8BT;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,KAAK,EAC3E,OAAO,GAAE,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAM,IAElD,MAAM,GAAG,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,MAAM,CAE9D;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,OAAO;IACzC,KAAK,EAAE,KAAK,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,sBAAsB,CAAC,KAAK,GAAG,OAAO;IACrD,UAAU,CAAC,EAAE,oBAAoB,CAAA;IACjC,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAA;IAC9C,4BAA4B;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAA;CACpD;AAED,wBAAgB,eAAe,CAAC,KAAK,GAAG,OAAO,EAC7C,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,sBAAsB,CAAC,KAAK,CAAM,GAC1C,UAAU,CAAC,KAAK,CAAC,CAoBnB"}
@@ -0,0 +1,102 @@
1
+ export type RequestMethod = 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT';
2
+ export type RequestQueryValue = boolean | number | string | null | undefined;
3
+ export type RequestQuery = Record<string, RequestQueryValue | RequestQueryValue[]>;
4
+ /***********************请求上下文*********************/
5
+ export interface RequestContext<TData = unknown> {
6
+ /** 当前发送次数,首次为 0,认证刷新后的重放为 1。 */
7
+ attempt: number;
8
+ data: TData;
9
+ init: RequestInit;
10
+ response: Response;
11
+ url: string;
12
+ /** 本次请求的唯一标识,用于日志追踪与缓存 key。 */
13
+ requestId?: string;
14
+ }
15
+ /**
16
+ * 请求发起前的上下文:可在此改写 url、init 或读取 requestId。
17
+ */
18
+ export interface RequestBeforeContext {
19
+ url: string;
20
+ init: RequestInit;
21
+ requestId?: string;
22
+ }
23
+ /**
24
+ * 请求错误上下文:网络错误或响应非 2xx 时携带。
25
+ */
26
+ export interface RequestErrorContext {
27
+ error: unknown;
28
+ url: string;
29
+ init: RequestInit;
30
+ requestId?: string;
31
+ response?: Response;
32
+ }
33
+ /***********************缓存*********************/
34
+ export interface RequestCache {
35
+ get: (key: string) => unknown;
36
+ set: (key: string, value: unknown) => void;
37
+ has: (key: string) => boolean;
38
+ delete: (key: string) => void;
39
+ clear: () => void;
40
+ }
41
+ export interface RequestCacheOptions {
42
+ /** 缓存存储,默认内存 Map 实现。 */
43
+ cache?: RequestCache;
44
+ /** 是否对该请求启用缓存,默认仅 GET 且显式开启。 */
45
+ enabled?: boolean;
46
+ /** 自定义缓存 key,默认 `method:url`。 */
47
+ key?: string;
48
+ }
49
+ /***********************客户端选项*********************/
50
+ export interface RequestClientOptions<TData = unknown> {
51
+ /** 认证刷新配置;仅会对允许重放的请求执行一次。 */
52
+ authRefresh?: RequestAuthRefreshOptions<TData>;
53
+ baseURL?: string;
54
+ duplicateSubmit?: boolean;
55
+ fetch?: typeof fetch;
56
+ getToken?: () => Promise<string | undefined> | string | undefined;
57
+ tokenPrefix?: string;
58
+ /** 是否为每个请求生成 requestId,或传入自定义生成函数。 */
59
+ requestId?: boolean | (() => string);
60
+ /** 请求头中携带 requestId 的字段名,默认 `X-Request-Id`。 */
61
+ requestIdHeader?: string;
62
+ /** 默认缓存存储,供开启缓存的请求复用。 */
63
+ cache?: RequestCache;
64
+ onRequest?: (context: RequestBeforeContext) => Promise<void> | void;
65
+ onRequestError?: (context: RequestErrorContext) => Promise<void> | void;
66
+ onResponse?: <TResult = unknown>(context: RequestContext<TData>) => Promise<TResult> | TResult;
67
+ onResponseError?: (context: RequestErrorContext) => Promise<void> | void;
68
+ onSessionExpired?: (context: RequestContext<TData>) => Promise<void> | void;
69
+ }
70
+ /***********************请求选项*********************/
71
+ export interface RequestOptions {
72
+ body?: BodyInit | Record<string, unknown> | unknown[] | null;
73
+ headers?: HeadersInit;
74
+ method?: RequestMethod;
75
+ query?: RequestQuery;
76
+ /** 写请求是否允许在认证刷新成功后重放,默认 false;GET 默认允许。 */
77
+ retryOnAuthRefresh?: boolean;
78
+ signal?: AbortSignal;
79
+ /** 逐请求缓存配置。 */
80
+ cache?: RequestCacheOptions;
81
+ }
82
+ export interface RequestAuthRefreshOptions<TData = unknown> {
83
+ /** 刷新访问凭据。并发过期请求共享同一个 Promise。 */
84
+ refresh: (context: RequestContext<TData>) => Promise<void>;
85
+ }
86
+ export interface RequestUploadOptions extends Omit<RequestOptions, 'body' | 'method'> {
87
+ /** 除文件外的附加字段。 */
88
+ data?: Record<string, RequestQueryValue>;
89
+ /** 文件字段名,默认 `file`。 */
90
+ fileField?: string;
91
+ }
92
+ export interface RequestClient {
93
+ delete: <TResult = unknown>(url: string, options?: Omit<RequestOptions, 'method'>) => Promise<TResult>;
94
+ get: <TResult = unknown>(url: string, options?: Omit<RequestOptions, 'body' | 'method'>) => Promise<TResult>;
95
+ patch: <TResult = unknown>(url: string, options?: Omit<RequestOptions, 'method'>) => Promise<TResult>;
96
+ post: <TResult = unknown>(url: string, options?: Omit<RequestOptions, 'method'>) => Promise<TResult>;
97
+ put: <TResult = unknown>(url: string, options?: Omit<RequestOptions, 'method'>) => Promise<TResult>;
98
+ request: <TResult = unknown>(url: string, options?: RequestOptions) => Promise<TResult>;
99
+ /** 上传文件(multipart/form-data),单文件或多文件。 */
100
+ upload: <TResult = unknown>(url: string, file: Blob | Blob[], options?: RequestUploadOptions) => Promise<TResult>;
101
+ }
102
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/request/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;AAEvE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;AAE5E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC,CAAA;AAElF,mDAAmD;AACnD,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,OAAO;IAC7C,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,mDAAmD;AACnD,MAAM,WAAW,oBAAoB,CAAC,KAAK,GAAG,OAAO;IACnD,6BAA6B;IAC7B,WAAW,CAAC,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IACjE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,SAAS,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yBAAyB;IACzB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACnE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACvE,UAAU,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAC9F,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC5E;AAED,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAA;IAC5D,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,eAAe;IACf,KAAK,CAAC,EAAE,mBAAmB,CAAA;CAC5B;AAED,MAAM,WAAW,yBAAyB,CAAC,KAAK,GAAG,OAAO;IACxD,kCAAkC;IAClC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnF,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACxC,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACtG,GAAG,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5G,KAAK,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrG,IAAI,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpG,GAAG,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACnG,OAAO,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACvF,yCAAyC;IACzC,MAAM,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAClH"}
@@ -0,0 +1,36 @@
1
+ import type { CreateMenuRouteRuntimeOptions, CreateRouteRecordsOptions, CreateSidebarMenusOptions, CreateTopMenusOptions, FindAccessibleMenuOptions, GlobComponentResolverOptions, LumalMenuInputRecord, LumalRouteRecord, MenuNode, MenuRouteConflictKind, MenuRouteConflictSource, MenuRouteRuntime, NormalizedMenuNode, NormalizeMenuRecordsOptions, RouteComponentResolver, RouteRegistry, RouteRegistryRouterLike, SidebarMenuItem } from './types';
2
+ export type { CreateMenuRouteRuntimeOptions, CreateRouteRecordsOptions, CreateSidebarMenusOptions, CreateTopMenusOptions, FindAccessibleMenuOptions, GlobComponentResolverOptions, LumalMenuBadgeTone, LumalMenuBadgeType, LumalMenuComponent, LumalMenuInputRecord, LumalMenuRecord, LumalRouteAuthority, LumalRouteMeta, LumalRouteRecord, LumalStaticMenuRecord, MenuNode, MenuNodeId, MenuRecordFieldNames, MenuRouteComponent, MenuRouteConflictKind, MenuRouteConflictSource, MenuRouteErrorContext, MenuRouteRuntime, MenuRouteRuntimeRouterLike, MenuRouteSource, NormalizedMenuNode, NormalizeMenuRecordsOptions, RouteComponentResolver, RouteRegistry, RouteRegistryRouterLike, SidebarMenuItem, } from './types';
3
+ /***********************标准字段归一化*********************/
4
+ export declare function normalizeMenuRecords(records: LumalMenuInputRecord[], options?: NormalizeMenuRecordsOptions): NormalizedMenuNode[];
5
+ /***********************菜单归一化*********************/
6
+ export declare function normalizeMenuNodes(nodes: MenuNode[]): NormalizedMenuNode[];
7
+ /***********************路由记录*********************/
8
+ export declare function createRouteRecords(nodes: NormalizedMenuNode[], options?: CreateRouteRecordsOptions): LumalRouteRecord[];
9
+ /***********************侧边栏菜单*********************/
10
+ export declare function createSidebarMenus(nodes: NormalizedMenuNode[], options?: CreateSidebarMenusOptions): SidebarMenuItem[];
11
+ /***********************顶部菜单*********************/
12
+ /**
13
+ * 顶部菜单:在可访问过滤的基础上,仅保留一级菜单中标记 meta.topMenu === true 的项。
14
+ * 未标记任何顶部菜单时回退为全部可访问的一级菜单,便于 top-nav 布局直接使用。
15
+ */
16
+ export declare function createTopMenus(nodes: NormalizedMenuNode[], options?: CreateTopMenusOptions): SidebarMenuItem[];
17
+ /***********************访问菜单查找*********************/
18
+ export declare function findFirstAccessibleMenu(nodes: NormalizedMenuNode[], options?: FindAccessibleMenuOptions): NormalizedMenuNode | undefined;
19
+ /***********************动态路由注册*********************/
20
+ export declare function createRouteRegistry(router: RouteRegistryRouterLike): RouteRegistry;
21
+ /***********************glob 组件解析*********************/
22
+ /**
23
+ * 基于 import.meta.glob 收集的模块表,创建组件字符串到懒加载组件的解析函数。
24
+ * 依次尝试 `${viewsPrefix}/${component}.vue` 与 `${viewsPrefix}/${component}/index.vue`,
25
+ * 命中即缓存懒加载函数;全部未命中时回退到 fallback。
26
+ */
27
+ export declare function createGlobComponentResolver(options: GlobComponentResolverOptions): RouteComponentResolver;
28
+ export declare class MenuRouteConflictError extends Error {
29
+ readonly firstSource: MenuRouteConflictSource;
30
+ readonly kind: MenuRouteConflictKind;
31
+ readonly secondSource: MenuRouteConflictSource;
32
+ readonly value: string;
33
+ constructor(kind: MenuRouteConflictKind, value: string, firstSource: MenuRouteConflictSource, secondSource: MenuRouteConflictSource);
34
+ }
35
+ export declare function createMenuRouteRuntime(options: CreateMenuRouteRuntimeOptions): MenuRouteRuntime;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAG5B,oBAAoB,EAIpB,gBAAgB,EAChB,QAAQ,EAER,qBAAqB,EACrB,uBAAuB,EAEvB,gBAAgB,EAGhB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACb,uBAAuB,EACvB,eAAe,EAChB,MAAM,SAAS,CAAA;AAEhB,YAAY,EACV,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACb,uBAAuB,EACvB,eAAe,GAChB,MAAM,SAAS,CAAA;AAWhB,qDAAqD;AACrD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,GAAE,2BAAgC,GACxC,kBAAkB,EAAE,CAOtB;AA+HD,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAiB1E;AAmED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,OAAO,GAAE,yBAA8B,GACtC,gBAAgB,EAAE,CAEpB;AAkED,mDAAmD;AACnD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,OAAO,GAAE,yBAA8B,GACtC,eAAe,EAAE,CA2BnB;AAED,kDAAkD;AAClD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EAAE,EAC3B,OAAO,GAAE,qBAA0B,GAClC,eAAe,EAAE,CAUnB;AAED,oDAAoD;AACpD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,GAAG,SAAS,CAkBhC;AASD,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,aAAa,CAkDlF;AAED,uDAAuD;AACvD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,sBAAsB,CA6BxB;AA6CD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAA;IACpC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAGpB,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,uBAAuB,EACpC,YAAY,EAAE,uBAAuB;CASxC;AA+VD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,gBAAgB,CAuL/F"}
@@ -0,0 +1,231 @@
1
+ import type { Component } from 'vue';
2
+ export type MenuNodeId = string;
3
+ export type LumalRouteAuthority = string | string[];
4
+ export type LumalMenuBadgeType = 'dot' | 'text';
5
+ export type LumalMenuBadgeTone = 'primary' | 'success' | 'warning' | 'danger' | 'info';
6
+ export interface LumalRouteMeta {
7
+ title?: string;
8
+ icon?: string;
9
+ order?: number;
10
+ hideInMenu?: boolean;
11
+ hideChildrenInMenu?: boolean;
12
+ activeMenu?: string;
13
+ keepAlive?: boolean;
14
+ affixTab?: boolean;
15
+ authority?: LumalRouteAuthority;
16
+ badge?: string | number;
17
+ badgeType?: LumalMenuBadgeType;
18
+ badgeTone?: LumalMenuBadgeTone;
19
+ hideInBreadcrumb?: boolean;
20
+ roles?: LumalRouteAuthority;
21
+ externalLink?: string;
22
+ externalTarget?: '_blank' | '_self';
23
+ topMenu?: boolean;
24
+ [key: string]: unknown;
25
+ }
26
+ export interface LumalMenuRecord {
27
+ path: string;
28
+ children?: LumalMenuRecord[];
29
+ component?: string;
30
+ meta?: LumalRouteMeta;
31
+ name?: string;
32
+ redirect?: string;
33
+ externalLink?: string;
34
+ }
35
+ export type LumalMenuComponent = Component | (() => Promise<unknown>);
36
+ export type MenuRouteComponent = LumalMenuComponent;
37
+ /**
38
+ * 静态菜单可以直接绑定 Vue 组件或懒加载器;字符串组件仍交给 componentResolver 解析。
39
+ */
40
+ export interface LumalStaticMenuRecord extends Omit<LumalMenuRecord, 'children' | 'component'> {
41
+ children?: LumalStaticMenuRecord[];
42
+ component?: string | LumalMenuComponent;
43
+ }
44
+ /**
45
+ * 非标准菜单记录:字段名由后端决定,需要通过 fieldNames 显式映射到标准字段。
46
+ */
47
+ export type LumalMenuInputRecord = LumalMenuRecord | Record<string, unknown>;
48
+ /**
49
+ * 标准字段 -> 源字段名的映射,用于适配非标准后端菜单结构。
50
+ * 未配置的字段回退到标准字段位置(顶层或 meta)。
51
+ */
52
+ export interface MenuRecordFieldNames {
53
+ activeMenu?: string;
54
+ badge?: string;
55
+ badgeType?: string;
56
+ badgeTone?: string;
57
+ path?: string;
58
+ name?: string;
59
+ component?: string;
60
+ redirect?: string;
61
+ children?: string;
62
+ title?: string;
63
+ icon?: string;
64
+ order?: string;
65
+ authority?: string;
66
+ roles?: string;
67
+ hideInMenu?: string;
68
+ hideInBreadcrumb?: string;
69
+ keepAlive?: string;
70
+ externalLink?: string;
71
+ }
72
+ export interface NormalizeMenuRecordsOptions {
73
+ fieldNames?: MenuRecordFieldNames;
74
+ }
75
+ export interface MenuNode {
76
+ activeMenu?: string;
77
+ badge?: string | number;
78
+ badgeType?: LumalMenuBadgeType;
79
+ badgeTone?: LumalMenuBadgeTone;
80
+ id: MenuNodeId;
81
+ path: string;
82
+ title: string;
83
+ children?: MenuNode[];
84
+ component?: string | LumalMenuComponent;
85
+ icon?: string;
86
+ keepAlive?: boolean;
87
+ meta?: Record<string, unknown>;
88
+ name?: string;
89
+ order?: number;
90
+ parentId?: MenuNodeId;
91
+ permissions?: string[];
92
+ redirect?: string;
93
+ roles?: string[];
94
+ visible?: boolean;
95
+ hideInBreadcrumb?: boolean;
96
+ externalLink?: string;
97
+ }
98
+ export interface NormalizedMenuNode extends Omit<MenuNode, 'children' | 'parentId'> {
99
+ authority: string[];
100
+ children: NormalizedMenuNode[];
101
+ meta: Record<string, unknown>;
102
+ name: string;
103
+ permissions: string[];
104
+ redirect?: string;
105
+ roles: string[];
106
+ keepAlive?: boolean;
107
+ visible: boolean;
108
+ externalLink?: string;
109
+ }
110
+ export type RouteComponentResolver = (component: string) => unknown;
111
+ /**
112
+ * glob 组件 resolver 选项:把标准 component 字符串解析为 import.meta.glob 收集到的组件模块。
113
+ */
114
+ export interface GlobComponentResolverOptions {
115
+ /** import.meta.glob 收集的模块表,key 为相对路径,value 为动态导入函数。 */
116
+ modules: Record<string, () => Promise<unknown>>;
117
+ /** 视图目录前缀,默认 `../views`,与候选路径拼接。 */
118
+ viewsPrefix?: string;
119
+ /** 未命中任何候选路径时的兜底组件。 */
120
+ fallback?: () => Promise<unknown>;
121
+ }
122
+ export interface CreateRouteRecordsOptions {
123
+ componentResolver?: RouteComponentResolver;
124
+ }
125
+ export interface LumalRouteRecord {
126
+ path: string;
127
+ children?: LumalRouteRecord[];
128
+ component?: unknown;
129
+ redirect?: string;
130
+ meta: {
131
+ authority?: string[];
132
+ permissions: string[];
133
+ roles: string[];
134
+ title: string;
135
+ externalLink?: string;
136
+ [key: string]: unknown;
137
+ };
138
+ name: string;
139
+ }
140
+ export interface SidebarMenuItem {
141
+ badge?: string | number;
142
+ badgeType?: LumalMenuBadgeType;
143
+ badgeTone?: LumalMenuBadgeTone;
144
+ path: string;
145
+ redirect?: string;
146
+ title: string;
147
+ children: SidebarMenuItem[];
148
+ icon?: string;
149
+ externalLink?: string;
150
+ externalTarget?: '_blank' | '_self';
151
+ }
152
+ export interface CreateSidebarMenusOptions {
153
+ hasPermission?: (permissions: string[]) => boolean;
154
+ hasRole?: (roles: string[]) => boolean;
155
+ }
156
+ /**
157
+ * 顶部菜单生成选项:在侧边菜单可访问过滤的基础上,仅保留标记为顶部菜单(meta.topMenu)的一级项。
158
+ */
159
+ export type CreateTopMenusOptions = CreateSidebarMenusOptions;
160
+ export interface FindAccessibleMenuOptions {
161
+ hasPermission?: (permissions: string[]) => boolean;
162
+ hasRole?: (roles: string[]) => boolean;
163
+ }
164
+ /**
165
+ * vue-router 的最小子集,避免在类型层强依赖 vue-router 具体版本。
166
+ */
167
+ export interface RouteRegistryRouterLike {
168
+ addRoute: (route: LumalRouteRecord) => (() => void) | unknown;
169
+ getRoutes?: () => readonly {
170
+ name?: string | symbol;
171
+ path: string;
172
+ }[];
173
+ hasRoute: (name: string) => boolean;
174
+ removeRoute: (name: string) => void;
175
+ }
176
+ /**
177
+ * 菜单路由运行时需要读取现有路由路径,以便在注册前完成 path 冲突校验。
178
+ * 旧 createRouteRegistry 继续接受不含 getRoutes 的宽松 Router 子集。
179
+ */
180
+ export interface MenuRouteRuntimeRouterLike extends RouteRegistryRouterLike {
181
+ getRoutes: () => readonly {
182
+ name?: string | symbol;
183
+ path: string;
184
+ }[];
185
+ }
186
+ /**
187
+ * 动态路由注册器:负责注册后端下发的动态路由并支持整体重置。
188
+ */
189
+ export interface RouteRegistry {
190
+ register: (routes: LumalRouteRecord[]) => void;
191
+ reset: () => void;
192
+ readonly names: readonly string[];
193
+ }
194
+ export type MenuRouteSource = 'static' | 'remote';
195
+ export type MenuRouteConflictSource = MenuRouteSource | 'existing';
196
+ export type MenuRouteConflictKind = 'id' | 'name' | 'path';
197
+ export interface MenuRouteErrorContext {
198
+ component?: string;
199
+ phase: 'load-component' | 'load-remote-menus' | 'register-routes' | 'resolve-component';
200
+ routeName?: string;
201
+ routePath?: string;
202
+ source?: MenuRouteSource;
203
+ }
204
+ export interface CreateMenuRouteRuntimeOptions {
205
+ router: MenuRouteRuntimeRouterLike;
206
+ staticMenus?: LumalStaticMenuRecord[];
207
+ loadRemoteMenus?: () => Promise<LumalMenuInputRecord[]>;
208
+ remoteNormalizeOptions?: NormalizeMenuRecordsOptions;
209
+ componentResolver?: RouteComponentResolver;
210
+ fallbackComponent?: () => Promise<unknown>;
211
+ hasPermission?: (permissions: string[]) => boolean;
212
+ hasRole?: (roles: string[]) => boolean;
213
+ onError?: (error: unknown, context: MenuRouteErrorContext) => void;
214
+ }
215
+ export interface MenuRouteRuntime {
216
+ readonly firstAccessibleMenu: NormalizedMenuNode | undefined;
217
+ readonly firstAccessiblePath: string;
218
+ readonly menus: NormalizedMenuNode[];
219
+ readonly remoteLoaded: boolean;
220
+ readonly remoteMenus: NormalizedMenuNode[];
221
+ readonly routeNames: readonly string[];
222
+ readonly routes: LumalRouteRecord[];
223
+ readonly sidebarMenus: SidebarMenuItem[];
224
+ readonly staticMenus: NormalizedMenuNode[];
225
+ readonly topMenus: SidebarMenuItem[];
226
+ loadRemote: () => Promise<NormalizedMenuNode[]>;
227
+ reload: () => Promise<NormalizedMenuNode[]>;
228
+ resetRemote: () => void;
229
+ dispose: () => void;
230
+ }
231
+ //# sourceMappingURL=types.d.ts.map