vue-app-sdk
Version:
103 lines (102 loc) • 3.76 kB
JavaScript
;
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;