@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.
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/dist/LumalThemeSettingsPanel-BFkZzwEW.js +685 -0
- package/dist/LumalThemeSettingsPanel-C6aPhgUX.cjs +1 -0
- package/dist/_plugin-vue_export-helper-B3ysoDQm.js +8 -0
- package/dist/_plugin-vue_export-helper-BTmtiIyf.cjs +1 -0
- package/dist/auth.cjs +1 -0
- package/dist/auth.js +127 -0
- package/dist/components-DJiHYQQB.cjs +2 -0
- package/dist/components-DYmKh-eF.js +2206 -0
- package/dist/components.cjs +1 -0
- package/dist/components.js +3 -0
- package/dist/composables-C4twj5Ov.cjs +1 -0
- package/dist/composables-C9EuCUjj.js +130 -0
- package/dist/composables.cjs +1 -0
- package/dist/composables.js +148 -0
- package/dist/core.css +2 -0
- package/dist/dictionary-B7tsaVqB.js +19 -0
- package/dist/dictionary-ClEWtQCU.cjs +1 -0
- package/dist/dictionary.cjs +1 -0
- package/dist/dictionary.js +3 -0
- package/dist/directive-D-fB5qbY.js +16 -0
- package/dist/directive-DSVr7QvO.cjs +1 -0
- package/dist/directives.cjs +1 -0
- package/dist/directives.js +11 -0
- package/dist/index.cjs +1 -0
- package/dist/index.js +88 -0
- package/dist/layout-C8H9wuQa.js +2075 -0
- package/dist/layout-ZnyG9X3N.cjs +1 -0
- package/dist/layout.cjs +1 -0
- package/dist/layout.js +2 -0
- package/dist/permission-6sXtjGMS.cjs +1 -0
- package/dist/permission-CCkqvnWg.js +104 -0
- package/dist/permission.cjs +1 -0
- package/dist/permission.js +3 -0
- package/dist/request.cjs +1 -0
- package/dist/request.js +277 -0
- package/dist/router.cjs +1 -0
- package/dist/router.js +510 -0
- package/dist/src/app/createLumalAdmin.d.ts +4 -0
- package/dist/src/app/createLumalAdmin.d.ts.map +1 -0
- package/dist/src/app/default-components.d.ts +4 -0
- package/dist/src/app/default-components.d.ts.map +1 -0
- package/dist/src/app/index.d.ts +3 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/types.d.ts +41 -0
- package/dist/src/app/types.d.ts.map +1 -0
- package/dist/src/auth/adapter.d.ts +3 -0
- package/dist/src/auth/adapter.d.ts.map +1 -0
- package/dist/src/auth/createAuthSession.d.ts +8 -0
- package/dist/src/auth/createAuthSession.d.ts.map +1 -0
- package/dist/src/auth/index.d.ts +8 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/redirect.d.ts +8 -0
- package/dist/src/auth/redirect.d.ts.map +1 -0
- package/dist/src/auth/session-expired.d.ts +5 -0
- package/dist/src/auth/session-expired.d.ts.map +1 -0
- package/dist/src/auth/session.d.ts +10 -0
- package/dist/src/auth/session.d.ts.map +1 -0
- package/dist/src/auth/storage.d.ts +7 -0
- package/dist/src/auth/storage.d.ts.map +1 -0
- package/dist/src/auth/types.d.ts +68 -0
- package/dist/src/auth/types.d.ts.map +1 -0
- package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts +41 -0
- package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts.map +1 -0
- package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts +151 -0
- package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts.map +1 -0
- package/dist/src/components/crud-table/index.d.ts +4 -0
- package/dist/src/components/crud-table/index.d.ts.map +1 -0
- package/dist/src/components/crud-table/schema.d.ts +4 -0
- package/dist/src/components/crud-table/schema.d.ts.map +1 -0
- package/dist/src/components/crud-table/types.d.ts +165 -0
- package/dist/src/components/crud-table/types.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudData.d.ts +20 -0
- package/dist/src/components/crud-table/useCrudData.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudDialog.d.ts +19 -0
- package/dist/src/components/crud-table/useCrudDialog.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudQuery.d.ts +18 -0
- package/dist/src/components/crud-table/useCrudQuery.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudSelection.d.ts +9 -0
- package/dist/src/components/crud-table/useCrudSelection.d.ts.map +1 -0
- package/dist/src/components/info-table/LumalInfoTable.vue.d.ts +12 -0
- package/dist/src/components/info-table/LumalInfoTable.vue.d.ts.map +1 -0
- package/dist/src/components/info-table/index.d.ts +3 -0
- package/dist/src/components/info-table/index.d.ts.map +1 -0
- package/dist/src/components/info-table/types.d.ts +15 -0
- package/dist/src/components/info-table/types.d.ts.map +1 -0
- package/dist/src/components/page/LumalPage.vue.d.ts +36 -0
- package/dist/src/components/page/LumalPage.vue.d.ts.map +1 -0
- package/dist/src/components/page/index.d.ts +2 -0
- package/dist/src/components/page/index.d.ts.map +1 -0
- package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts +38 -0
- package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts.map +1 -0
- package/dist/src/components/page-layout/index.d.ts +3 -0
- package/dist/src/components/page-layout/index.d.ts.map +1 -0
- package/dist/src/components/page-layout/types.d.ts +9 -0
- package/dist/src/components/page-layout/types.d.ts.map +1 -0
- package/dist/src/components/pagination/LumalPagination.vue.d.ts +31 -0
- package/dist/src/components/pagination/LumalPagination.vue.d.ts.map +1 -0
- package/dist/src/components/pagination/index.d.ts +3 -0
- package/dist/src/components/pagination/index.d.ts.map +1 -0
- package/dist/src/components/pagination/types.d.ts +5 -0
- package/dist/src/components/pagination/types.d.ts.map +1 -0
- package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts +78 -0
- package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts.map +1 -0
- package/dist/src/components/schema-form/index.d.ts +4 -0
- package/dist/src/components/schema-form/index.d.ts.map +1 -0
- package/dist/src/components/schema-form/normalize.d.ts +11 -0
- package/dist/src/components/schema-form/normalize.d.ts.map +1 -0
- package/dist/src/components/schema-form/types.d.ts +103 -0
- package/dist/src/components/schema-form/types.d.ts.map +1 -0
- package/dist/src/components/schema-form/types.type-test.d.ts +2 -0
- package/dist/src/components/schema-form/types.type-test.d.ts.map +1 -0
- package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts +108 -0
- package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts.map +1 -0
- package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts +8 -0
- package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts.map +1 -0
- package/dist/src/components/schema-table/cell.d.ts +13 -0
- package/dist/src/components/schema-table/cell.d.ts.map +1 -0
- package/dist/src/components/schema-table/index.d.ts +6 -0
- package/dist/src/components/schema-table/index.d.ts.map +1 -0
- package/dist/src/components/schema-table/normalize.d.ts +8 -0
- package/dist/src/components/schema-table/normalize.d.ts.map +1 -0
- package/dist/src/components/schema-table/types.d.ts +66 -0
- package/dist/src/components/schema-table/types.d.ts.map +1 -0
- package/dist/src/components/schema-table/types.type-test.d.ts +2 -0
- package/dist/src/components/schema-table/types.type-test.d.ts.map +1 -0
- package/dist/src/composables/index.d.ts +11 -0
- package/dist/src/composables/index.d.ts.map +1 -0
- package/dist/src/composables/useConfirmAction.d.ts +21 -0
- package/dist/src/composables/useConfirmAction.d.ts.map +1 -0
- package/dist/src/composables/useFullscreen.d.ts +14 -0
- package/dist/src/composables/useFullscreen.d.ts.map +1 -0
- package/dist/src/composables/usePagination.d.ts +36 -0
- package/dist/src/composables/usePagination.d.ts.map +1 -0
- package/dist/src/composables/usePersistentState.d.ts +9 -0
- package/dist/src/composables/usePersistentState.d.ts.map +1 -0
- package/dist/src/composables/useSelection.d.ts +20 -0
- package/dist/src/composables/useSelection.d.ts.map +1 -0
- package/dist/src/dictionary/composables.d.ts +15 -0
- package/dist/src/dictionary/composables.d.ts.map +1 -0
- package/dist/src/dictionary/context.d.ts +10 -0
- package/dist/src/dictionary/context.d.ts.map +1 -0
- package/dist/src/dictionary/fetcher.d.ts +4 -0
- package/dist/src/dictionary/fetcher.d.ts.map +1 -0
- package/dist/src/dictionary/index.d.ts +8 -0
- package/dist/src/dictionary/index.d.ts.map +1 -0
- package/dist/src/dictionary/normalize.d.ts +5 -0
- package/dist/src/dictionary/normalize.d.ts.map +1 -0
- package/dist/src/dictionary/store.d.ts +4 -0
- package/dist/src/dictionary/store.d.ts.map +1 -0
- package/dist/src/dictionary/types.d.ts +53 -0
- package/dist/src/dictionary/types.d.ts.map +1 -0
- package/dist/src/directives/index.d.ts +16 -0
- package/dist/src/directives/index.d.ts.map +1 -0
- package/dist/src/exports/components.d.ts +16 -0
- package/dist/src/exports/components.d.ts.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/layout/LumalBreadcrumb.vue.d.ts +28 -0
- package/dist/src/layout/LumalBreadcrumb.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalContent.vue.d.ts +18 -0
- package/dist/src/layout/LumalContent.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalGlobalSearch.vue.d.ts +25 -0
- package/dist/src/layout/LumalGlobalSearch.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalHeader.vue.d.ts +43 -0
- package/dist/src/layout/LumalHeader.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalLayout.vue.d.ts +98 -0
- package/dist/src/layout/LumalLayout.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalMenuBadge.vue.d.ts +16 -0
- package/dist/src/layout/LumalMenuBadge.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalRouterView.vue.d.ts +24 -0
- package/dist/src/layout/LumalRouterView.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalSidebar.vue.d.ts +29 -0
- package/dist/src/layout/LumalSidebar.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts +16 -0
- package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalTabs.vue.d.ts +76 -0
- package/dist/src/layout/LumalTabs.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalTopNav.vue.d.ts +27 -0
- package/dist/src/layout/LumalTopNav.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts +15 -0
- package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts.map +1 -0
- package/dist/src/layout/index.d.ts +18 -0
- package/dist/src/layout/index.d.ts.map +1 -0
- package/dist/src/layout/state/menu-layout.d.ts +35 -0
- package/dist/src/layout/state/menu-layout.d.ts.map +1 -0
- package/dist/src/layout/state/tab-storage.d.ts +51 -0
- package/dist/src/layout/state/tab-storage.d.ts.map +1 -0
- package/dist/src/layout/state/tab-strategy.d.ts +73 -0
- package/dist/src/layout/state/tab-strategy.d.ts.map +1 -0
- package/dist/src/layout/types.d.ts +29 -0
- package/dist/src/layout/types.d.ts.map +1 -0
- package/dist/src/permission/LumalAccessControl.vue.d.ts +26 -0
- package/dist/src/permission/LumalAccessControl.vue.d.ts.map +1 -0
- package/dist/src/permission/context.d.ts +6 -0
- package/dist/src/permission/context.d.ts.map +1 -0
- package/dist/src/permission/directive.d.ts +3 -0
- package/dist/src/permission/directive.d.ts.map +1 -0
- package/dist/src/permission/guard.d.ts +4 -0
- package/dist/src/permission/guard.d.ts.map +1 -0
- package/dist/src/permission/helpers.d.ts +4 -0
- package/dist/src/permission/helpers.d.ts.map +1 -0
- package/dist/src/permission/index.d.ts +8 -0
- package/dist/src/permission/index.d.ts.map +1 -0
- package/dist/src/permission/store.d.ts +4 -0
- package/dist/src/permission/store.d.ts.map +1 -0
- package/dist/src/permission/types.d.ts +67 -0
- package/dist/src/permission/types.d.ts.map +1 -0
- package/dist/src/request/cache.d.ts +8 -0
- package/dist/src/request/cache.d.ts.map +1 -0
- package/dist/src/request/client.d.ts +4 -0
- package/dist/src/request/client.d.ts.map +1 -0
- package/dist/src/request/error.d.ts +19 -0
- package/dist/src/request/error.d.ts.map +1 -0
- package/dist/src/request/index.d.ts +8 -0
- package/dist/src/request/index.d.ts.map +1 -0
- package/dist/src/request/standard.d.ts +61 -0
- package/dist/src/request/standard.d.ts.map +1 -0
- package/dist/src/request/types.d.ts +102 -0
- package/dist/src/request/types.d.ts.map +1 -0
- package/dist/src/router/index.d.ts +36 -0
- package/dist/src/router/index.d.ts.map +1 -0
- package/dist/src/router/types.d.ts +231 -0
- package/dist/src/router/types.d.ts.map +1 -0
- package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts +33 -0
- package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts.map +1 -0
- package/dist/src/theme/dom.d.ts +6 -0
- package/dist/src/theme/dom.d.ts.map +1 -0
- package/dist/src/theme/index.d.ts +11 -0
- package/dist/src/theme/index.d.ts.map +1 -0
- package/dist/src/theme/preferences-store.d.ts +4 -0
- package/dist/src/theme/preferences-store.d.ts.map +1 -0
- package/dist/src/theme/preferences.d.ts +18 -0
- package/dist/src/theme/preferences.d.ts.map +1 -0
- package/dist/src/theme/store.d.ts +3 -0
- package/dist/src/theme/store.d.ts.map +1 -0
- package/dist/src/theme/theme-color-presets.d.ts +13 -0
- package/dist/src/theme/theme-color-presets.d.ts.map +1 -0
- package/dist/src/theme/tokens.d.ts +5 -0
- package/dist/src/theme/tokens.d.ts.map +1 -0
- package/dist/src/theme/types.d.ts +103 -0
- package/dist/src/theme/types.d.ts.map +1 -0
- package/dist/src/utils/clone.d.ts +12 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/color.d.ts +6 -0
- package/dist/src/utils/color.d.ts.map +1 -0
- package/dist/src/utils/display.d.ts +10 -0
- package/dist/src/utils/display.d.ts.map +1 -0
- package/dist/src/utils/download.d.ts +10 -0
- package/dist/src/utils/download.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +12 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/object.d.ts +6 -0
- package/dist/src/utils/object.d.ts.map +1 -0
- package/dist/src/utils/path.d.ts +6 -0
- package/dist/src/utils/path.d.ts.map +1 -0
- package/dist/src/utils/query.d.ts +9 -0
- package/dist/src/utils/query.d.ts.map +1 -0
- package/dist/src/utils/storage.d.ts +7 -0
- package/dist/src/utils/storage.d.ts.map +1 -0
- package/dist/src/utils/types.d.ts +13 -0
- package/dist/src/utils/types.d.ts.map +1 -0
- package/dist/src/utils/with-install.d.ts +11 -0
- package/dist/src/utils/with-install.d.ts.map +1 -0
- package/dist/theme.cjs +1 -0
- package/dist/theme.js +187 -0
- package/dist/utils.cjs +1 -0
- package/dist/utils.js +130 -0
- package/package.json +124 -0
- package/theme-chalk/index.scss +70 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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
|