{"version":3,"sources":["jsdelivr-header.js","/npm/vue-spa-boot@1.1.0/src/bootstrap.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNO,eAAgB,6BAChB,iBAAmB,yBAClB,WAAY,kBAAoB,eAOxC,MAAM,UAUL,WAAA,CAAY,GACX,KAAK,QAAU,EAAS,SAAW,CAAC,EACpC,KAAK,QAAU,EAAS,QACxB,KAAK,MAAQ,EAAS,OAAS,OAC/B,KAAK,QAAU,EAAS,QACxB,KAAK,cAAgB,WAAW,EAAS,SAAU,EAAS,QAAU,SAAS,GAAK,EACpF,KAAK,cAAgB,EAAS,eAAiB,EAChD,CAMA,UAAA,GACC,MAAM,EAAM,OAAO,OAAO,cAI1B,GAHA,EAAI,UAAY,KAGZ,KAAK,QAAS,CACjB,EAAI,QAAU,CAAC,EACf,IAAI,MAAM,KAAO,KAAK,QAErB,EAAI,QAAQ,GAAO,IAAI,WAAW,KAAK,QAAQ,IACnC,YAAR,IACH,EAAI,OAAS,EAAI,QAAQ,GAG5B,MAEC,EAAI,OAAS,IAAI,WAElB,OAAO,CACR,CAKA,SAAA,CAAU,GACT,MAAM,EAAc,KAAK,aACzB,OAAO,eAAe,EAAI,UAAW,MAAO,CAC3C,IAAI,IAAY,IAEjB,EAAI,OAAO,aAAe,SAAU,EAAK,EAAI,GAIxC,EAAG,KACN,EAAG,IAAI,QAAQ,EAAK,EAAI,EAE1B,CACD,CAYA,aAAM,GACL,MAAM,SAAa,OAAoC,QAAQ,QACzD,SAAmB,OAAoC,eAAe,QAE5E,EAAI,IAAI,SACF,KAAK,UAAU,GAErB,IAAI,EAAS,GAET,KAAK,UACR,QAAe,KAAK,YAAY,KAAK,UAGtC,KAAK,OAAS,IAAI,EAAU,CAC3B,OAAQ,IAET,KAAK,eAAiB,KAAK,WAAW,QACtC,KAAK,QAAQ,OAAS,KAAK,OAG3B,KAAK,IAAM,IAAI,EAAI,KAAK,SAAS,OAAO,KAAK,aAGvC,KAAK,SACZ,CAEA,iBAAM,CAAY,GAEjB,MAAM,EAAS,GACf,IAAI,MAAM,KAAO,EAAS,CACzB,IAAI,EAAS,EACT,WAAW,KACd,SAAgB,KAAO,SAEpB,EAAO,QACV,GAAG,KAAK,MAAM,EAAQ,EAAO,OAE/B,CACA,OAAO,CACR,CAKA,aAAM,GACL,MAAM,EAAW,QAAQ,KAAK,eAC9B,UACO,EAAS,KAAK,aACrB,CAAE,MAAO,GACR,QAAQ,IAAI,qBAAuB,EACpC,OACM,KAAK,cAAc,KAAK,IAC/B,iBAEc","file":"/npm/vue-spa-boot@1.1.0/src/bootstrap.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/vue-spa-boot@1.1.0/src/bootstrap.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import HttpClient from './utils/http-client';\r\nimport contextProto from  './utils/context';\r\nimport {isFunction, isPlainObject} from './utils/lang';\r\n\r\n/**\r\n * Boot Strap class\r\n * Load modules, extract vue routes and data services\r\n * @class BootStrap\r\n */\r\nclass BootStrap {\r\n\t/**\r\n\t * @param {object} bootOpts boot options\r\n\t * @param {array} bootOpts.modules module list\r\n\t * @param {object|async function} [bootOpts.rootApp={}] root vue\r\n\t * @param {string} [bootOpts.mount=\"app\"] the html element to mount to\r\n\t * @param {object} [bootOpts.servers] http services locations\r\n\t * @param {function} [bootOpts.started] trigger on bootstrap complete\r\n\t * @param {function} [bootOpts.bootCompleted] A list of middle-wares with koa-style which would be trigger like onions\r\n\t */\r\n\tconstructor(bootOpts) {\r\n\t\tthis.rootApp = bootOpts.rootApp || {};\r\n\t\tthis.modules = bootOpts.modules;\r\n\t\tthis.mount = bootOpts.mount || '#app';\r\n\t\tthis.servers = bootOpts.servers;\r\n\t\tthis.startCallback = isFunction(bootOpts.started)? bootOpts.started : function(vm){ };\r\n\t\tthis.bootCompleted = bootOpts.bootCompleted || [];\r\n\t}\r\n\r\n\t/**\r\n\t * Making page ctx\r\n\t * @returns {contextProto}\r\n\t */\r\n\tgetContext() {\r\n\t\tconst ctx = Object.create(contextProto);\r\n\t\tctx.bootstrap = this;\r\n\r\n\t\t//Register ctx.servers.xxx\r\n\t\tif (this.servers) {\r\n\t\t\tctx.servers = {};\r\n\t\t\tfor(const key in this.servers) {\r\n\t\t\t\t//each server has different config\r\n\t\t\t\tctx.servers[key] = new HttpClient(this.servers[key]);\r\n\t\t\t\tif (key === 'default') { //register default to ctx.server\r\n\t\t\t\t\tctx.server = ctx.servers[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t//未进行server配置的话，会默认初始化一个不进行url改写的client\r\n\t\t\tctx.server = new HttpClient();\r\n\t\t}\r\n\t\treturn ctx;\r\n\t}\r\n\r\n\t/**\r\n\t * 统一配置Vue的参数。\r\n\t */\r\n\tconfigVue(Vue) {\r\n\t\tconst rootContext = this.getContext();\r\n\t\tObject.defineProperty(Vue.prototype, 'ctx', {\r\n\t\t\tget () { return rootContext }\r\n\t\t});\r\n\t\tVue.config.errorHandler = function (err, vm, info) {\r\n\t\t\t// handle error\r\n\t\t\t// `info` is a Vue-specific error info, e.g. which lifecycle hook\r\n\t\t\t// the error was found in. Only available in 2.2.0+\r\n\t\t\tif (vm.ctx) {\r\n\t\t\t\tvm.ctx.onError(err, vm, info);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Boot vue and load modules (with awaited route)\r\n\t *\r\n\t * 0. 处理Vue相关内容\r\n\t * 1. 加载和解析模块\r\n\t * 2. 创建 router 实例，通过ModuleExtractor解析出路由配置，传入vue-router\r\n\t * 3. 注册数据模型对象到nt\r\n\t * 4. 创建和挂载Vue根实例。\r\n\t * 5. started回调\r\n\t */\r\n\tasync startUp() {\r\n\t\tconst Vue = (await import(/* webpackChunkName: \"vue\" */'vue')).default;\r\n\t\tconst VueRouter = (await import(/* webpackChunkName: \"vue\" */'vue-router')).default;\r\n\r\n\t\tVue.use(VueRouter);\r\n\t\tawait this.configVue(Vue);\r\n\r\n\t\tlet routes = [];\r\n\r\n\t\tif (this.modules) {\r\n\t\t\troutes = await this.loadModules(this.modules);\r\n\t\t}\r\n\r\n\t\tthis.router = new VueRouter({\r\n\t\t\troutes: routes\r\n\t\t});\r\n\t\tthis.rootApp = (await this.rootApp()).default\r\n\t\tthis.rootApp.router = this.router;\r\n\r\n\t\t//4. 启动Vue\r\n\t\tthis.app = new Vue(this.rootApp).$mount(this.mount);\r\n\r\n\t\t//check loading?\r\n\t\tawait this.started();\r\n\t}\r\n\r\n\tasync loadModules(modules) {\r\n\t\t// 依次循环解析每个module\r\n\t\tconst routes = [];\r\n\t\tfor(const def of modules) {\r\n\t\t\tlet module = def;\r\n\t\t\tif (isFunction(def)) {\r\n\t\t\t\tmodule = (await def()).default;\r\n\t\t\t}\r\n\t\t\tif (module.routes) {\r\n\t\t\t\t[].push.apply(routes, module.routes);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn routes;\r\n\t}\r\n\r\n\t/**\r\n\t * 整个app启动完成后的操作。 可以在此处设置， 默认加载的第一页\r\n\t */\r\n\tasync started() {\r\n\t\tconst composed = compose(this.bootCompleted)\r\n\t\ttry {\r\n\t\t\tawait composed(this.getContext())\r\n\t\t} catch (err) {\r\n\t\t\tconsole.log('boot complete err:' + err)\r\n\t\t}\r\n\t\tawait this.startCallback(this.app);\r\n\t}\r\n}\r\nexport default BootStrap;\r\n"]}