UNPKG

vue-app-sdk

Version:
103 lines (102 loc) 3.76 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const index = require("../vendors/@vueuse/core/index.cjs"); require("../vendors/nice-fns/dist/compactObject.cjs"); const createLogger = require("../vendors/nice-fns/dist/createLogger.cjs"); require("../vendors/nice-fns/dist/pascalCase.cjs"); const vue = require("vue"); const vueRouter = require("vue-router"); const isFunction = require("../vendors/lodash-es/isFunction.cjs"); const isArray = require("../vendors/lodash-es/isArray.cjs"); const logger = createLogger.createLogger("VueAppSDK"); const assign = Object.assign; function createPersistentRef(options, isAsync, serializer) { const { persistent, window, storage, storageKey, shallow = false, value } = options; if (persistent) { return (isAsync ? index.useStorageAsync : index.useStorage)(storageKey, value, storage, { shallow, window, serializer }); } return shallow ? vue.shallowRef(value) : vue.ref(value); } function isESModule(obj) { return obj.__esModule || obj[Symbol.toStringTag] === "Module"; } async function loadRouteRecord(route) { const components = route.components; if (!components) return route; await Promise.all( Object.keys(components).reduce((promises, name) => { const rawComponent = components[name]; if (isFunction.default(rawComponent) && !("displayName" in rawComponent)) { promises.push( // @ts-expect-error 逻辑无误 rawComponent().then((resolved) => { if (!resolved) { return Promise.reject( new Error( `Couldn't resolve component "${name}" at "${route.path}". Ensure you passed a function that returns a promise.` ) ); } const resolvedComponent = isESModule(resolved) ? resolved.default : resolved; components[name] = resolvedComponent; }) ); } return promises; }, []) ); return route; } function isUnloadedRoute(route) { return Object.values(route.components || {}).some( (rawComponent) => isFunction.default(rawComponent) && !("displayName" in rawComponent) ); } function loadRoute(route) { if ("matched" in route && isArray.default(route)) return vueRouter.loadRouteLocation(route); if ("components" in route && route.components) return loadRouteRecord(route); return Promise.resolve(route); } function getComponentName(component) { if (!component) return ""; return component.name || component.displayName || component.__name || ""; } function syncComponentName(component, name) { if (!component) return component; if (isFunction.default(component)) { if ("displayName" in component) return component; return () => syncComponentName(component(), name); } if ("then" in component) return component.then((resolved2) => syncComponentName(resolved2, name)); const resolved = isESModule(component) ? component.default : component; assign(resolved, { name }); return component; } async function resolveComponentNameByRoute(route) { if (!route) return ""; const promise = isUnloadedRoute(route) ? loadRoute(route) : Promise.resolve(route); const result = await promise; return getComponentName(result.components && result.components.default); } exports.assign = assign; exports.createPersistentRef = createPersistentRef; exports.getComponentName = getComponentName; exports.isESModule = isESModule; exports.isUnloadedRoute = isUnloadedRoute; exports.loadRoute = loadRoute; exports.loadRouteRecord = loadRouteRecord; exports.logger = logger; exports.resolveComponentNameByRoute = resolveComponentNameByRoute; exports.syncComponentName = syncComponentName;