@vue-async/module-loader
Version:
Module Loader Core.
92 lines • 3.92 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* componentLoader
*/
var vue_1 = __importDefault(require("vue"));
var warning_1 = __importDefault(require("warning"));
var core_1 = require("@ace-util/core");
var spa = __importStar(require("../utils/spa"));
/** 验证组件导出是否正确 */
function validateExportComponent(exports) {
var _export = (exports && exports.default) || exports;
if ((0, core_1.isPlainObject)(_export)) {
return (Object.keys(_export).length > 0 &&
((0, core_1.hasOwn)(_export, 'template') ||
(0, core_1.hasOwn)(_export, 'render') || // component definition
(0, core_1.isFunction)(_export)) // Vue.extend
// hasOwn(_export, 'component') || // AsyncComponentFactory
// isFunction(_export)) // AsyncComponentPromise
);
}
else {
return _export instanceof vue_1.default;
}
}
/** 获取组件 */
function getComponentFromExport(scriptExports, componentName, global) {
if (validateExportComponent(scriptExports)) {
return (scriptExports && scriptExports.default) || scriptExports;
}
(0, warning_1.default)(false, "[moduleLoader] component not found from ".concat(componentName, " entry exports, fallback to get from window['").concat(componentName, "']"));
// fallback to global variable who named with ${moduleName} while module exports not found
var globalVariableExports = global[componentName];
if (validateExportComponent(globalVariableExports)) {
return (globalVariableExports && globalVariableExports.default) || globalVariableExports;
}
throw new Error("[moduleLoader] You need to export vue component in ".concat(componentName, " entry"));
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
exports.default = (function (Vue) {
return function loader(componentName, src, styles) {
// if (Vue.prototype.$isServer) {
// const global = ssr.createSandbox();
// return ssr.execScript(src, global).then((scriptExports) => {
// return getComponentFromExport(scriptExports, componentName, global);
// });
// } else {
var global = window;
if (!global.Vue) {
global.Vue = Vue;
}
// load styles
if (styles) {
if (typeof styles === 'string') {
styles = [styles];
}
spa.execStyles(styles, componentName);
}
// exec script
return spa.execScript(src, global).then(function (scriptExports) {
return getComponentFromExport(scriptExports, componentName, global);
});
// }
};
});
//# sourceMappingURL=componentLoader.js.map