)\n }\n }\n\n return function (obj, opts) {\n let path = ''\n const data = obj || {}\n const options = opts || {}\n const encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (let i = 0; i \u003C tokens.length; i++) {\n const token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n const value = data[token.name || 'pathMatch']\n let segment\n\n if (value == null) {\n if (token.optional) {\n \u002F\u002F Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (let j = 0; j \u003C value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n\u002F**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n *\u002F\nfunction escapeString(str) {\n return str.replace(\u002F([.+*?=^!:${}()[\\]|\u002F\\\\])\u002Fg, '\\\\$1')\n}\n\n\u002F**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n *\u002F\nfunction escapeGroup(group) {\n return group.replace(\u002F([=!:$\u002F()])\u002Fg, '\\\\$1')\n}\n\n\u002F**\n * Format given url, append query to url query string\n *\n * @param {string} url\n * @param {string} query\n * @return {string}\n *\u002F\nfunction formatUrl(url, query) {\n let protocol\n const index = url.indexOf(':\u002F\u002F')\n if (index !== -1) {\n protocol = url.substring(0, index)\n url = url.substring(index + 3)\n } else if (url.startsWith('\u002F\u002F')) {\n url = url.substring(2)\n }\n\n let parts = url.split('\u002F')\n let result = (protocol ? protocol + ':\u002F\u002F' : '\u002F\u002F') + parts.shift()\n\n let path = parts.filter(Boolean).join('\u002F')\n let hash\n parts = path.split('#')\n if (parts.length === 2) {\n path = parts[0]\n hash = parts[1]\n }\n\n result += path ? '\u002F' + path : ''\n\n if (query && JSON.stringify(query) !== '{}') {\n result += (url.split('?').length === 2 ? '&' : '?') + formatQuery(query)\n }\n result += hash ? '#' + hash : ''\n\n return result\n}\n\n\u002F**\n * Transform data object to query string\n *\n * @param {object} query\n * @return {string}\n *\u002F\nfunction formatQuery(query) {\n return Object.keys(query).sort().map((key) =\u003E {\n const val = query[key]\n if (val == null) {\n return ''\n }\n if (Array.isArray(val)) {\n return val.slice().map(val2 =\u003E [key, '=', val2].join('')).join('&')\n }\n return key + '=' + val\n }).filter(Boolean).join('&')\n}\n","directory_shortid":"UybZ7215","id":"88f547c2-de9b-48d9-aa8e-2fb6e312d8b2","inserted_at":"2019-12-18T23:25:06","is_binary":false,"shortid":"nUOw0Y3rdh","source_id":"e3702d25-c094-40d9-ab55-33f1f0b84b0e","title":"utils.js","updated_at":"2019-12-18T23:25:06","upload_id":null},{"code":"import { stringify } from 'querystring'\nimport Vue from 'vue'\nimport fetch from 'node-fetch'\nimport middleware from '.\u002Fmiddleware.js'\nimport { applyAsyncData, getMatchedComponents, middlewareSeries, promisify, urlJoin, sanitizeComponent } from '.\u002Futils.js'\nimport { createApp, NuxtError } from '.\u002Findex.js'\nimport NuxtLink from '.\u002Fcomponents\u002Fnuxt-link.server.js' \u002F\u002F should be included after .\u002Findex.js\n\n\u002F\u002F Component: \u003CNuxtLink\u003E\nVue.component(NuxtLink.name, NuxtLink)\nVue.component('NLink', NuxtLink)\n\nif (!global.fetch) { global.fetch = fetch }\n\nconst debug = require('debug')('nuxt:render')\ndebug.color = 4 \u002F\u002F force blue color\n\nconst noopApp = () =\u003E new Vue({ render: h =\u003E h('div') })\n\nconst createNext = ssrContext =\u003E (opts) =\u003E {\n ssrContext.redirected = opts\n \u002F\u002F If nuxt generate\n if (!ssrContext.res) {\n ssrContext.nuxt.serverRendered = false\n return\n }\n opts.query = stringify(opts.query)\n opts.path = opts.path + (opts.query ? '?' + opts.query : '')\n const routerBase = '\u002F'\n if (!opts.path.startsWith('http') && (routerBase !== '\u002F' && !opts.path.startsWith(routerBase))) {\n opts.path = urlJoin(routerBase, opts.path)\n }\n \u002F\u002F Avoid loop redirect\n if (opts.path === ssrContext.url) {\n ssrContext.redirected = false\n return\n }\n ssrContext.res.writeHead(opts.status, {\n 'Location': opts.path\n })\n ssrContext.res.end()\n}\n\n\u002F\u002F This exported function will be called by `bundleRenderer`.\n\u002F\u002F This is where we perform data-prefetching to determine the\n\u002F\u002F state of our application before actually rendering it.\n\u002F\u002F Since data fetching is async, this function is expected to\n\u002F\u002F return a Promise that resolves to the app instance.\nexport default async (ssrContext) =\u003E {\n \u002F\u002F Create ssrContext.next for simulate next() of beforeEach() when wanted to redirect\n ssrContext.redirected = false\n ssrContext.next = createNext(ssrContext)\n \u002F\u002F Used for beforeNuxtRender({ Components, nuxtState })\n ssrContext.beforeRenderFns = []\n \u002F\u002F Nuxt object (window{{globals.context}}, defaults to window.__NUXT__)\n ssrContext.nuxt = { layout: 'default', data: [], error: null, serverRendered: true }\n \u002F\u002F Create the app definition and the instance (created for each request)\n const { app, router } = await createApp(ssrContext)\n const _app = new Vue(app)\n\n \u002F\u002F Add meta infos (used in renderer.js)\n ssrContext.meta = _app.$meta()\n \u002F\u002F Keep asyncData for each matched component in ssrContext (used in app\u002Futils.js via this.$ssrContext)\n ssrContext.asyncData = {}\n\n const beforeRender = async () =\u003E {\n \u002F\u002F Call beforeNuxtRender() methods\n await Promise.all(ssrContext.beforeRenderFns.map(fn =\u003E promisify(fn, { Components, nuxtState: ssrContext.nuxt })))\n }\n const renderErrorPage = async () =\u003E {\n \u002F\u002F Load layout for error page\n const errLayout = (typeof NuxtError.layout === 'function' ? NuxtError.layout(app.context) : NuxtError.layout)\n ssrContext.nuxt.layout = errLayout || 'default'\n await _app.loadLayout(errLayout)\n _app.setLayout(errLayout)\n await beforeRender()\n return _app\n }\n const render404Page = () =\u003E {\n app.context.error({ statusCode: 404, path: ssrContext.url, message: `This page could not be found` })\n return renderErrorPage()\n }\n\n const s = Date.now()\n\n \u002F\u002F Components are already resolved by setContext -\u003E getRouteData (app\u002Futils.js)\n const Components = getMatchedComponents(router.match(ssrContext.url))\n\n \u002F*\n ** Call global middleware (nuxt.config.js)\n *\u002F\n let midd = []\n midd = midd.map((name) =\u003E {\n if (typeof name === 'function') return name\n if (typeof middleware[name] !== 'function') {\n app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name })\n }\n return middleware[name]\n })\n await middlewareSeries(midd, app.context)\n \u002F\u002F ...If there is a redirect or an error, stop the process\n if (ssrContext.redirected) return noopApp()\n if (ssrContext.nuxt.error) return renderErrorPage()\n\n \u002F*\n ** Set layout\n *\u002F\n let layout = Components.length ? Components[0].options.layout : NuxtError.layout\n if (typeof layout === 'function') layout = layout(app.context)\n await _app.loadLayout(layout)\n if (ssrContext.nuxt.error) return renderErrorPage()\n layout = _app.setLayout(layout)\n ssrContext.nuxt.layout = _app.layoutName\n\n \u002F*\n ** Call middleware (layout + pages)\n *\u002F\n midd = []\n layout = sanitizeComponent(layout)\n if (layout.options.middleware) midd = midd.concat(layout.options.middleware)\n Components.forEach((Component) =\u003E {\n if (Component.options.middleware) {\n midd = midd.concat(Component.options.middleware)\n }\n })\n midd = midd.map((name) =\u003E {\n if (typeof name === 'function') return name\n if (typeof middleware[name] !== 'function') {\n app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name })\n }\n return middleware[name]\n })\n await middlewareSeries(midd, app.context)\n \u002F\u002F ...If there is a redirect or an error, stop the process\n if (ssrContext.redirected) return noopApp()\n if (ssrContext.nuxt.error) return renderErrorPage()\n\n \u002F*\n ** Call .validate()\n *\u002F\n let isValid = true\n try {\n for (const Component of Components) {\n if (typeof Component.options.validate !== 'function') {\n continue\n }\n\n isValid = await Component.options.validate(app.context)\n\n if (!isValid) {\n break\n }\n }\n } catch (validationError) {\n \u002F\u002F ...If .validate() threw an error\n app.context.error({\n statusCode: validationError.statusCode || '500',\n message: validationError.message\n })\n return renderErrorPage()\n }\n\n \u002F\u002F ...If .validate() returned false\n if (!isValid) {\n \u002F\u002F Don't server-render the page in generate mode\n if (ssrContext._generate) ssrContext.nuxt.serverRendered = false\n \u002F\u002F Render a 404 error page\n return render404Page()\n }\n\n \u002F\u002F If no Components found, returns 404\n if (!Components.length) return render404Page()\n\n \u002F\u002F Call asyncData & fetch hooks on components matched by the route.\n const asyncDatas = await Promise.all(Components.map((Component) =\u003E {\n const promises = []\n\n \u002F\u002F Call asyncData(context)\n if (Component.options.asyncData && typeof Component.options.asyncData === 'function') {\n const promise = promisify(Component.options.asyncData, app.context)\n promise.then((asyncDataResult) =\u003E {\n ssrContext.asyncData[Component.cid] = asyncDataResult\n applyAsyncData(Component)\n return asyncDataResult\n })\n promises.push(promise)\n } else {\n promises.push(null)\n }\n\n \u002F\u002F Call fetch(context)\n if (Component.options.fetch) {\n promises.push(Component.options.fetch(app.context))\n } else {\n promises.push(null)\n }\n\n return Promise.all(promises)\n }))\n\n if (asyncDatas.length) debug('Data fetching ' + ssrContext.url + ': ' + (Date.now() - s) + 'ms')\n\n \u002F\u002F datas are the first row of each\n ssrContext.nuxt.data = asyncDatas.map(r =\u003E r[0] || {})\n\n \u002F\u002F ...If there is a redirect or an error, stop the process\n if (ssrContext.redirected) return noopApp()\n if (ssrContext.nuxt.error) return renderErrorPage()\n\n \u002F\u002F Call beforeNuxtRender methods & add store state\n await beforeRender()\n\n return _app\n}\n","directory_shortid":"UybZ7215","id":"c1d0e199-3b6a-4107-b577-396551691d0f","inserted_at":"2019-12-18T23:25:06","is_binary":false,"shortid":"HK9KXdQyFD","source_id":"e3702d25-c094-40d9-ab55-33f1f0b84b0e","title":"server.js","updated_at":"2019-12-18T23:25:06","upload_id":null},{"code":"import Vue from 'vue'\nimport Router from 'vue-router'\nimport { interopDefault } from '.\u002Futils'\n\nconst _2c63f1a1 = () =\u003E interopDefault(import('..\u002Fpages\u002Findex.vue' \u002F* webpackChunkName: \"pages\u002Findex\" *\u002F))\n\nVue.use(Router)\n\nif (process.client) {\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual'\n\n \u002F\u002F reset scrollRestoration to auto when leaving page, allowing page reload\n \u002F\u002F and back-navigation from other pages to use the browser to restore the\n \u002F\u002F scrolling position.\n window.addEventListener('beforeunload', () =\u003E {\n window.history.scrollRestoration = 'auto'\n })\n\n \u002F\u002F Setting scrollRestoration to manual again when returning to this page.\n window.addEventListener('load', () =\u003E {\n window.history.scrollRestoration = 'manual'\n })\n }\n}\nconst scrollBehavior = function (to, from, savedPosition) {\n \u002F\u002F if the returned position is falsy or an empty object,\n \u002F\u002F will retain current scroll position.\n let position = false\n\n \u002F\u002F if no children detected and scrollToTop is not explicitly disabled\n if (\n to.matched.length \u003C 2 &&\n to.matched.every(r =\u003E r.components.default.options.scrollToTop !== false)\n ) {\n \u002F\u002F scroll to the top of the page\n position = { x: 0, y: 0 }\n } else if (to.matched.some(r =\u003E r.components.default.options.scrollToTop)) {\n \u002F\u002F if one of the children has scrollToTop option set to true\n position = { x: 0, y: 0 }\n }\n\n \u002F\u002F savedPosition is only available for popstate navigations (back button)\n if (savedPosition) {\n position = savedPosition\n }\n\n return new Promise((resolve) =\u003E {\n \u002F\u002F wait for the out transition to complete (if necessary)\n window.$nuxt.$once('triggerScroll', () =\u003E {\n \u002F\u002F coords will be used if no selector is provided,\n \u002F\u002F or if the selector didn't match any element.\n if (to.hash) {\n let hash = to.hash\n \u002F\u002F CSS.escape() is not supported with IE and Edge.\n if (typeof window.CSS !== 'undefined' && typeof window.CSS.escape !== 'undefined') {\n hash = '#' + window.CSS.escape(hash.substr(1))\n }\n try {\n if (document.querySelector(hash)) {\n \u002F\u002F scroll to anchor by returning the selector\n position = { selector: hash }\n }\n } catch (e) {\n console.warn('Failed to save scroll position. Please add CSS.escape() polyfill (https:\u002F\u002Fgithub.com\u002Fmathiasbynens\u002FCSS.escape).')\n }\n }\n resolve(position)\n })\n })\n}\n\nexport function createRouter() {\n return new Router({\n mode: 'history',\n base: decodeURI('\u002F'),\n linkActiveClass: 'nuxt-link-active',\n linkExactActiveClass: 'nuxt-link-exact-active',\n scrollBehavior,\n\n routes: [{\n path: \"\u002F\",\n component: _2c63f1a1,\n name: \"index\"\n }],\n\n fallback: false\n })\n}\n","directory_shortid":"UybZ7215","id":"044dee2b-b3a1-432f-9c6d-f5d7fadbbe93","inserted_at":"2019-12-18T23:25:06","is_binary":false,"shortid":"i60RlKyD1v","source_id":"e3702d25-c094-40d9-ab55-33f1f0b84b0e","title":"router.js","updated_at":"2019-12-18T23:25:06","upload_id":null},{"code":"\u003Cstyle\u003E\n#nuxt-loading {\n visibility: hidden;\n opacity: 0;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n animation: nuxtLoadingIn 10s ease;\n -webkit-animation: nuxtLoadingIn 10s ease;\n animation-fill-mode: forwards;\n overflow: hidden;\n}\n\n@keyframes nuxtLoadingIn {\n 0% {\n visibility: hidden;\n opacity: 0;\n }\n 20% {\n visibility: visible;\n opacity: 0;\n }\n 100% {\n visibility: visible;\n opacity: 1;\n }\n}\n\n@-webkit-keyframes nuxtLoadingIn {\n 0% {\n visibility: hidden;\n opacity: 0;\n }\n 20% {\n visibility: visible;\n opacity: 0;\n }\n 100% {\n visibility: visible;\n opacity: 1;\n }\n}\n\n#nuxt-loading\u003Ediv,\n#nuxt-loading\u003Ediv:after {\n border-radius: 50%;\n width: 5rem;\n height: 5rem;\n}\n\n#nuxt-loading\u003Ediv {\n font-size: 10px;\n position: relative;\n text-indent: -9999em;\n border: .5rem solid #F5F5F5;\n border-left: .5rem solid #D3D3D3;\n -webkit-transform: translateZ(0);\n -ms-transform: translateZ(0);\n transform: translateZ(0);\n -webkit-animation: nuxtLoading 1.1s infinite linear;\n animation: nuxtLoading 1.1s infinite linear;\n}\n\n#nuxt-loading.error\u003Ediv {\n border-left: .5rem solid #ff4500;\n animation-duration: 5s;\n}\n\n@-webkit-keyframes nuxtLoading {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes nuxtLoading {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\u003C\u002Fstyle\u003E\n\n\u003Cscript\u003E\nwindow.addEventListener('error', function () {\n var e = document.getElementById('nuxt-loading');\n if (e) e.className += ' error';\n});\n\u003C\u002Fscript\u003E\n\n\u003Cdiv id=\"nuxt-loading\" aria-live=\"polite\" role=\"status\"\u003E\u003Cdiv\u003ELoading...\u003C\u002Fdiv\u003E\u003C\u002Fdiv\u003E\n\n\u003C!-- https:\u002F\u002Fprojects.lukehaas.me\u002Fcss-loaders --\u003E\n","directory_shortid":"UybZ7215","id":"f6af63ae-2671-497e-b3b0-d9de8f2cbbd7","inserted_at":"2019-12-18T23:25:06","is_binary":false,"shortid":"gkFxyMdbM8","source_id":"e3702d25-c094-40d9-ab55-33f1f0b84b0e","title":"loading.html","updated_at":"2019-12-18T23:25:06","upload_id":null},{"code":"const middleware = {}\n\nexport default middleware\n","directory_shortid":"UybZ7215","id":"919b3d9d-85b1-4e0e-9cc0-ae50af35cce6","inserted_at":"2019-12-18T23:25:06","is_binary":false,"shortid":"A8A_tBuOa-","source_id":"e3702d25-c094-40d9-ab55-33f1f0b84b0e","title":"middleware.js","updated_at":"2019-12-18T23:25:06","upload_id":null},{"code":"\u002F\u002F This file is intentionally left empty for noop aliases\n","directory_shortid":"UybZ7215","id":"2d40e10c-5d33-448a-80e3-fc629bef33dd","inserted_at":"2019-12-18T23:25:06","is_binary":false,"shortid":"60nNvDYSmk","source_id":"e3702d25-c094-40d9-ab55-33f1f0b84b0e","title":"empty.js","updated_at":"2019-12-18T23:25:06","upload_id":null},{"code":"import Vue from 'vue'\nimport Meta from 'vue-meta'\nimport { createRouter } from '.\u002Frouter.js'\nimport NoSsr from '.\u002Fcomponents\u002Fno-ssr.js'\nimport NuxtChild from '.\u002Fcomponents\u002Fnuxt-child.js'\nimport NuxtError from '.\u002Fcomponents\u002Fnuxt-error.vue'\nimport Nuxt from '.\u002Fcomponents\u002Fnuxt.js'\nimport App from '.\u002FApp.js'\nimport { setContext, getLocation, getRouteData, normalizeError } from '.\u002Futils'\n\n\u002F* Plugins *\u002F\n\nimport nuxt_plugin_eventbus_2faefc80 from 'nuxt_plugin_eventbus_2faefc80' \u002F\u002F Source: ..\u002Fplugins\u002Fevent-bus.js (mode: 'all')\nimport nuxt_plugin_ticker_6b9263f7 from 'nuxt_plugin_ticker_6b9263f7' \u002F\u002F Source: ..\u002Fplugins\u002Fticker.js (mode: 'client')\nimport nuxt_plugin_resize_20be4be6 from 'nuxt_plugin_resize_20be4be6' \u002F\u002F Source: ..\u002Fplugins\u002Fresize.js (mode: 'client')\n\n\u002F\u002F Component: \u003CNoSsr\u003E\nVue.component(NoSsr.name, NoSsr)\n\n\u002F\u002F Component: \u003CNuxtChild\u003E\nVue.component(NuxtChild.name, NuxtChild)\nVue.component('NChild', NuxtChild)\n\n\u002F\u002F Component NuxtLink is imported in server.js or client.js\n\n\u002F\u002F Component: \u003CNuxt\u003E`\nVue.component(Nuxt.name, Nuxt)\n\n\u002F\u002F vue-meta configuration\nVue.use(Meta, {\n keyName: 'head', \u002F\u002F the component option name that vue-meta looks for meta info on.\n attribute: 'data-n-head', \u002F\u002F the attribute name vue-meta adds to the tags it observes\n ssrAttribute: 'data-n-head-ssr', \u002F\u002F the attribute name that lets vue-meta know that meta info has already been server-rendered\n tagIDKeyName: 'hid' \u002F\u002F the property name that vue-meta uses to determine whether to overwrite or append a tag\n})\n\nconst defaultTransition = {\"name\":\"page\",\"mode\":\"out-in\",\"appear\":false,\"appearClass\":\"appear\",\"appearActiveClass\":\"appear-active\",\"appearToClass\":\"appear-to\"}\n\nasync function createApp(ssrContext) {\n const router = await createRouter(ssrContext)\n\n \u002F\u002F Create Root instance\n\n \u002F\u002F here we inject the router and store to all child components,\n \u002F\u002F making them available everywhere as `this.$router` and `this.$store`.\n const app = {\n router,\n\n nuxt: {\n defaultTransition,\n transitions: [ defaultTransition ],\n setTransitions(transitions) {\n if (!Array.isArray(transitions)) {\n transitions = [ transitions ]\n }\n transitions = transitions.map((transition) =\u003E {\n if (!transition) {\n transition = defaultTransition\n } else if (typeof transition === 'string') {\n transition = Object.assign({}, defaultTransition, { name: transition })\n } else {\n transition = Object.assign({}, defaultTransition, transition)\n }\n return transition\n })\n this.$options.nuxt.transitions = transitions\n return transitions\n },\n err: null,\n dateErr: null,\n error(err) {\n err = err || null\n app.context._errored = !!err\n err = err ? normalizeError(err) : null\n const nuxt = this.nuxt || this.$options.nuxt\n nuxt.dateErr = Date.now()\n nuxt.err = err\n \u002F\u002F Used in src\u002Fserver.js\n if (ssrContext) ssrContext.nuxt.error = err\n return err\n }\n },\n ...App\n }\n\n const next = ssrContext ? ssrContext.next : location =\u003E app.router.push(location)\n \u002F\u002F Resolve route\n let route\n if (ssrContext) {\n route = router.resolve(ssrContext.url).route\n } else {\n const path = getLocation(router.options.base)\n route = router.resolve(path).route\n }\n\n \u002F\u002F Set context to app.context\n await setContext(app, {\n route,\n next,\n error: app.nuxt.error.bind(app),\n\n payload: ssrContext ? ssrContext.payload : undefined,\n req: ssrContext ? ssrContext.req : undefined,\n res: ssrContext ? ssrContext.res : undefined,\n beforeRenderFns: ssrContext ? ssrContext.beforeRenderFns : undefined,\n ssrContext\n })\n\n const inject = function (key, value) {\n if (!key) throw new Error('inject(key, value) has no key provided')\n if (typeof value === 'undefined') throw new Error('inject(key, value) has no value provided')\n key = '
+ key\n \u002F\u002F Add into app\n app[key] = value\n\n \u002F\u002F Check if plugin not already installed\n const installKey = '__nuxt_' + key + '_installed__'\n if (Vue[installKey]) return\n Vue[installKey] = true\n \u002F\u002F Call Vue.use() to install the plugin into vm\n Vue.use(() =\u003E {\n if (!Vue.prototype.hasOwnProperty(key)) {\n Object.defineProperty(Vue.prototype, key, {\n get() {\n return this.$root.$options[key]\n }\n })\n }\n })\n }\n\n \u002F\u002F Plugin execution\n\n if (typeof nuxt_plugin_eventbus_2faefc80 === 'function') {\n await nuxt_plugin_eventbus_2faefc80(app.context, inject)\n }\n\n if (process.client && typeof nuxt_plugin_ticker_6b9263f7 === 'function') {\n await nuxt_plugin_ticker_6b9263f7(app.context, inject)\n }\n\n if (process.client && typeof nuxt_plugin_resize_20be4be6 === 'function') {\n await nuxt_plugin_resize_20be4be6(app.context, inject)\n }\n\n \u002F\u002F If server-side, wait for async component to be resolved first\n if (process.server && ssrContext && ssrContext.url) {\n await new Promise((resolve, reject) =\u003E {\n router.push(ssrContext.url, resolve, () =\u003E {\n \u002F\u002F navigated to a different route in router guard\n const unregister = router.afterEach(async (to, from, next) =\u003E {\n ssrContext.url = to.fullPath\n app.context.route = await getRouteData(to)\n app.context.params = to.params || {}\n app.context.query = to.query || {}\n unregister()\n resolve()\n })\n })\n })\n }\n\n return {\n app,\n\n router\n }\n}\n\nexport { createApp, NuxtError }\n","directory_shortid":"UybZ7215","id":"abec43b9-8