UNPKG

@vrx-arco/app

Version:

<p align="center"> <img src="https://vrx-arco.github.io/arco-design-pro/favicon.svg" width="200" height="250"> </p>

353 lines (336 loc) 13.4 kB
import { computed, createApp, defineComponent, inject, toRaw } from "vue"; import { createRouter, createWebHistory } from "vue-router"; import { createPinia, defineStore, storeToRefs } from "pinia"; import { filterEmptyChildren, useEmptyComponentInject } from "@vrx-arco/use"; //#region rolldown:runtime var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: ((k) => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); //#endregion //#region src/pinia/usePermissionStore.ts const usePermissionStore = defineStore("vrx-permission", { state: () => ({ dynamicRoutesName: [], dynamicRoutes: [], permission: null }), actions: { setDynamicRoutesName(routesName) { this.dynamicRoutesName = [...routesName]; } } }); //#endregion //#region src/pinia/index.ts const definePinia = (app) => { const pinia = createPinia(); app.use(pinia); return pinia; }; //#endregion //#region src/router/resetRoute.ts const resetRoute = (router) => { const permissionStore = usePermissionStore(); permissionStore.dynamicRoutesName.forEach((item) => { if (!router.hasRoute(item)) return; router.removeRoute(item); }); permissionStore.dynamicRoutesName = []; permissionStore.dynamicRoutes = []; }; //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/typeof.js var require_typeof = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(exports, module) { function _typeof$2(o) { "@babel/helpers - typeof"; return module.exports = _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) { return typeof o$1; } : function(o$1) { return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof$2(o); } module.exports = _typeof$2, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js var require_toPrimitive = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(exports, module) { var _typeof$1 = require_typeof()["default"]; function toPrimitive$1(t, r) { if ("object" != _typeof$1(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof$1(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } module.exports = toPrimitive$1, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js var require_toPropertyKey = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(exports, module) { var _typeof = require_typeof()["default"]; var toPrimitive = require_toPrimitive(); function toPropertyKey$1(t) { var i = toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } module.exports = toPropertyKey$1, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js var require_defineProperty = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(exports, module) { var toPropertyKey = require_toPropertyKey(); function _defineProperty(e, r, t) { return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js var require_objectSpread2 = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(exports, module) { var defineProperty = require_defineProperty(); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function(r$1) { return Object.getOwnPropertyDescriptor(e, r$1).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) { defineProperty(e, r$1, t[r$1]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) { Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1)); }); } return e; } module.exports = _objectSpread2, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region src/router/filterRoutes.ts var import_objectSpread2$1 = __toESM(require_objectSpread2(), 1); const filterRoutes = (routes, permission, filter) => { const filterRoutes$1 = []; const nameList = new Set(); const listFilter = (routes$1, filterRoutes$2) => { routes$1.forEach((item) => { const children = item.children; if (!item.name) return; nameList.add(item.name); if (!filter(item, permission)) return; if (!Array.isArray(children) || !children.length) { filterRoutes$2.push(item); return; } const _filterRoute = (0, import_objectSpread2$1.default)((0, import_objectSpread2$1.default)({}, item), {}, { children: [] }); filterRoutes$2.push(_filterRoute); _filterRoute.children = listFilter(children, _filterRoute.children); return; }); return filterRoutes$2; }; return [listFilter(routes, filterRoutes$1), nameList]; }; //#endregion //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/asyncToGenerator.js var require_asyncToGenerator = __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.69.0/node_modules/@oxc-project/runtime/src/helpers/asyncToGenerator.js"(exports, module) { function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n$1) { return void e(n$1); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator$2(n) { return function() { var t = this, e = arguments; return new Promise(function(r, o) { var a = n.apply(t, e); function _next(n$1) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n$1); } function _throw(n$1) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n$1); } _next(void 0); }); }; } module.exports = _asyncToGenerator$2, module.exports.__esModule = true, module.exports["default"] = module.exports; } }); //#endregion //#region src/router/police.ts var import_asyncToGenerator$1 = __toESM(require_asyncToGenerator(), 1); const defineRouterPolice = (router, options) => { const { loading } = options; const { dynamicRoutes = [], filterDynamicRoutes = () => true, pageNotFound, whiteList = [], loginExpiredRedirect } = options.router; const { getPermission, onLoginExpired, isLogin = () => true } = options.authentication || {}; router.beforeEach(function() { var _ref = (0, import_asyncToGenerator$1.default)(function* (to, _from, next) { const permissionStore = usePermissionStore(); loading === null || loading === void 0 || loading(true); const _isLogin = yield Promise.resolve().then(isLogin); if (!_isLogin) { resetRoute(router); if (to.name === loginExpiredRedirect || whiteList.includes(to.name)) { next(); return; } next({ name: loginExpiredRedirect }); return; } if (to.name === loginExpiredRedirect) { resetRoute(router); onLoginExpired === null || onLoginExpired === void 0 || onLoginExpired(); next(); return; } if (!dynamicRoutes.length || permissionStore.dynamicRoutesName.length) { next(); return; } try { const permission = yield Promise.resolve().then(getPermission); permissionStore.permission = permission; const [routes, routeNames] = filterRoutes(dynamicRoutes, permission, filterDynamicRoutes); permissionStore.setDynamicRoutesName(routeNames); routes.forEach((item) => { permissionStore.dynamicRoutes.push(item); router.addRoute(item); }); } catch (e) { resetRoute(router); next({ name: loginExpiredRedirect }); onLoginExpired === null || onLoginExpired === void 0 || onLoginExpired(); } if (to.name === pageNotFound.name) { next({ path: to.fullPath, replace: true, query: to.query }); return; } next(); }); return function(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }()); router.afterEach(() => { loading === null || loading === void 0 || loading(false); }); }; //#endregion //#region src/router/index.ts var import_objectSpread2 = __toESM(require_objectSpread2(), 1); const defineRouter = (app, options) => { const { routes, pageNotFound, options: routerOptions } = options.router; const router = createRouter((0, import_objectSpread2.default)({ history: createWebHistory(), routes: [...routes, (0, import_objectSpread2.default)({ path: "/:path(.*)*" }, pageNotFound)] }, routerOptions)); defineRouterPolice(router, options); app.use(router); return router; }; //#endregion //#region src/permission/app-context.ts const VrxArcoPermissionContext = Symbol("VrxArcoPermissionContext"); const provideVrxArcoCheckPermission = (app, options) => { var _options$authenticati; app.provide(VrxArcoPermissionContext, ((_options$authenticati = options.authentication) === null || _options$authenticati === void 0 ? void 0 : _options$authenticati.checkPermission) || (() => true)); }; const useVrxArcoCheckPermission = () => { return inject(VrxArcoPermissionContext, () => true); }; //#endregion //#region src/permission/component.ts const Permission = defineComponent({ name: "vrx-arco-permission", props: { data: {}, destroyOnNoPermission: { type: Boolean, default: true } }, setup: (props, { slots }) => { const checkPermission = useVrxArcoCheckPermission(); const { permission } = storeToRefs(usePermissionStore()); const { empty } = useEmptyComponentInject(); const hasPermission = computed(() => checkPermission(toRaw(permission.value), props.data)); return () => { var _slots$default; empty.value = false; const { destroyOnNoPermission } = props; if (!hasPermission.value && destroyOnNoPermission) { var _slots$noPermission; const noPermission = filterEmptyChildren((_slots$noPermission = slots.noPermission) === null || _slots$noPermission === void 0 ? void 0 : _slots$noPermission.call(slots)); empty.value = !noPermission.length; return noPermission; } return (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, { hasPermission: hasPermission.value }); }; } }); //#endregion //#region src/index.ts var import_asyncToGenerator = __toESM(require_asyncToGenerator(), 1); const createVrxArcoApp = (options) => { const { rootComponent, rootProps, rootContainer, immediate } = options; const app = createApp(rootComponent, rootProps); const pinia = definePinia(app); const router = defineRouter(app, options); provideVrxArcoCheckPermission(app, options); const mount = function() { var _ref = (0, import_asyncToGenerator.default)(function* () { yield router.isReady(); return app.mount(rootContainer); }); return function mount$1() { return _ref.apply(this, arguments); }; }(); if (immediate !== null && immediate !== void 0 ? immediate : true) mount(); return { app, router, pinia, mount }; }; //#endregion export { Permission, createVrxArcoApp, usePermissionStore };