/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/@nuxt/builder-edge@2.18.2-28661769.e265ef3/dist/builder.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
/*!
 * @nuxt/builder-edge v2.18.2-28661769.e265ef3 (c) 2016-2024
 * Released under the MIT License
 * Repository: https://github.com/nuxt/nuxt.js
 * Website: https://nuxtjs.org
*/
"use strict";const path=require("path"),chalk=require("chalk"),chokidar=require("chokidar"),consola=require("consola"),fsExtra=require("fs-extra"),Glob=require("glob"),hash=require("hash-sum"),pify=require("pify"),upath=require("upath"),lodash=require("lodash"),utilsEdge=require("@nuxt/utils-edge"),vueAppEdge=require("@nuxt/vue-app-edge"),webpackEdge=require("@nuxt/webpack-edge"),ignore=require("ignore"),serialize=require("serialize-javascript"),devalue=require("@nuxt/devalue");class Ignore{constructor(t){this.rootDir=t.rootDir,this.ignoreOptions=t.ignoreOptions,this.ignoreArray=t.ignoreArray,this.addIgnoresRules()}static get IGNORE_FILENAME(){return".nuxtignore"}findIgnoreFile(){if(!this.ignoreFile){const t=path.resolve(this.rootDir,Ignore.IGNORE_FILENAME);fsExtra.existsSync(t)&&fsExtra.statSync(t).isFile()&&(this.ignoreFile=t,this.ignore=ignore(this.ignoreOptions))}return this.ignoreFile}readIgnoreFile(){if(this.findIgnoreFile())return fsExtra.readFileSync(this.ignoreFile,"utf8")}addIgnoresRules(){const t=this.readIgnoreFile();t&&this.ignore.add(t),this.ignoreArray&&this.ignoreArray.length>0&&(this.ignore||(this.ignore=ignore(this.ignoreOptions)),this.ignore.add(this.ignoreArray))}filter(t){return this.ignore?this.ignore.filter([].concat(t||[])):t}reload(){delete this.ignore,delete this.ignoreFile,this.addIgnoresRules()}}class BuildContext{constructor(t){this._builder=t,this.nuxt=t.nuxt,this.options=t.nuxt.options,this.target=t.nuxt.options.target}get buildOptions(){return this.options.build}get plugins(){return this._builder.plugins}}class TemplateContext{constructor(t,e){this.templateFiles=Array.from(t.template.files),this.templateVars={nuxtOptions:e,features:e.features,extensions:e.extensions.map((t=>t.replace(/^\./,""))).join("|"),messages:e.messages,splitChunks:e.build.splitChunks,uniqBy:lodash.uniqBy,isDev:e.dev,isTest:e.test,isFullStatic:utilsEdge.isFullStatic(e),debug:e.debug,buildIndicator:e.dev&&e.build.indicator,vue:{config:e.vue.config},fetch:e.fetch,mode:e.mode,router:e.router,env:e.env,head:e.head,store:!!e.features.store&&e.store,globalName:e.globalName,globals:t.globals,css:e.css,plugins:t.plugins,appPath:"./App.js",layouts:Object.assign({},e.layouts),loading:"string"==typeof e.loading?t.relativeToBuild(e.srcDir,e.loading):e.loading,pageTransition:e.pageTransition,layoutTransition:e.layoutTransition,rootDir:e.rootDir,srcDir:e.srcDir,dir:e.dir,components:{ErrorPage:e.ErrorPage?t.relativeToBuild(e.ErrorPage):null}}}get templateOptions(){let t=null;return{imports:{serialize:serialize,serializeFunction:utilsEdge.serializeFunction,devalue:devalue,hash:hash,r:utilsEdge.r,wp:utilsEdge.wp,wChunk:utilsEdge.wChunk,_:new Proxy({},{get:(e,s)=>(t||(consola.warn("Avoid using _ inside templates"),t=utilsEdge.requireModule("lodash")),t[s])})},interpolate:/<%=([\s\S]+?)%>/g}}}const glob=pify(Glob);class Builder{constructor(t,e){this.nuxt=t,this.plugins=[],this.options=t.options,this.globals=utilsEdge.determineGlobals(t.options.globalName,t.options.globals),this.watchers={files:null,custom:null,restart:null},this.supportedExtensions=["vue","js",...this.options.build.additionalExtensions||[]],this.relativeToBuild=(...t)=>utilsEdge.relativeTo(this.options.buildDir,...t),this._buildStatus=STATUS.INITIAL,this.options.dev&&(this.nuxt.hook("build:done",(()=>{consola.info("Waiting for file changes"),this.watchClient(),this.watchRestart()})),this.serverMiddlewareHMR(),this.nuxt.hook("close",(()=>this.close()))),this.options.build.analyze&&this.nuxt.hook("build:done",(()=>{consola.warn('Notice: Please do not deploy bundles built with "analyze" mode, they\'re for analysis purposes only.')})),this.template=this.options.build.template||vueAppEdge.template,"string"==typeof this.template&&(this.template=this.nuxt.resolver.requireModule(this.template).template),this.bundleBuilder=this.getBundleBuilder(e),this.ignore=new Ignore({rootDir:this.options.srcDir,ignoreArray:this.options.ignore})}getBundleBuilder(t){if("object"==typeof t)return t;const e=new BuildContext(this);return"function"!=typeof t&&(t=webpackEdge.BundleBuilder),new t(e)}forGenerate(){this.options.target=utilsEdge.TARGETS.static,this.bundleBuilder.forGenerate()}async build(){if(this._buildStatus===STATUS.BUILD_DONE&&this.options.dev)return this;if(this._buildStatus===STATUS.BUILDING)return await utilsEdge.waitFor(1e3),this.build();this._buildStatus=STATUS.BUILDING,this.options.dev?(consola.info("Preparing project for development"),consola.info("Initial build may take a while")):(consola.info("Production build"),this.options.render.ssr?consola.info(`Bundling for ${chalk.bold.yellow("server")} and ${chalk.bold.green("client")} side`):consola.info(`Bundling only for ${chalk.bold.green("client")} side`),consola.info(`Target: ${chalk.bold.cyan(this.options.target)}`)),await this.nuxt.ready(),await this.nuxt.callHook("build:before",this,this.options.build),await this.validatePages(),consola.success("Builder initialized"),consola.debug(`App root: ${this.options.srcDir}`),await fsExtra.emptyDir(utilsEdge.r(this.options.buildDir));const t=[utilsEdge.r(this.options.buildDir,"components")];return this.options.dev||t.push(utilsEdge.r(this.options.buildDir,"dist","client"),utilsEdge.r(this.options.buildDir,"dist","server")),await Promise.all(t.map((t=>fsExtra.emptyDir(t)))),await this.nuxt.callHook("builder:prepared",this,this.options.build),await this.generateRoutesAndFiles(),this.options.build.watch.push(this.globPathWithExtensions(this.template.dir)),await this.resolvePlugins(),await this.bundleBuilder.build(),this._buildStatus=STATUS.BUILD_DONE,await this.nuxt.callHook("build:done",this),this}async validatePages(){if(this._nuxtPages="function"!=typeof this.options.build.createRoutes,!this._nuxtPages||await fsExtra.exists(path.resolve(this.options.srcDir,this.options.dir.pages)))return;const t=this.options.srcDir;if(await fsExtra.exists(path.join(this.options.srcDir,"..",this.options.dir.pages)))throw new Error(`No \`${this.options.dir.pages}\` directory found in ${t}. Did you mean to run \`nuxt\` in the parent (\`../\`) directory?`);this._defaultPage=!0,consola.warn(`No \`${this.options.dir.pages}\` directory found in ${t}. Using the default built-in page.`)}globPathWithExtensions(t){return`${t}/**/*.{${this.supportedExtensions.join(",")}}`}createTemplateContext(){return new TemplateContext(this,this.options)}async generateRoutesAndFiles(){consola.debug("Generating nuxt files"),this.plugins=Array.from(await this.normalizePlugins());const t=this.createTemplateContext();await Promise.all([this.resolveLayouts(t),this.resolveRoutes(t),this.resolveStore(t),this.resolveMiddleware(t)]),this.addOptionalTemplates(t),await this.resolveCustomTemplates(t),await this.resolveLoadingIndicator(t),await this.compileTemplates(t),consola.success("Nuxt files generated")}async normalizePlugins(){if("function"==typeof this.options.extendPlugins){const t=this.options.extendPlugins(this.options.plugins);Array.isArray(t)&&(this.options.plugins=t)}await this.nuxt.callHook("builder:extendPlugins",this.options.plugins);const t=["client","server"],e=new RegExp(`\\.(${t.join("|")})(\\.\\w+)*$`);return lodash.uniqBy(this.options.plugins.map((s=>{"string"==typeof s&&(s={src:s});const i=path.basename(s.src,path.extname(s.src)).replace(/[^a-zA-Z?\d\s:]/g,"");return!1===s.ssr?s.mode="client":void 0===s.mode?(s.mode="all",s.src.replace(e,((e,i)=>{t.includes(i)&&(s.mode=i)}))):["client","server","all"].includes(s.mode)||(consola.warn(`Invalid plugin mode (server/client/all): '${s.mode}'. Falling back to 'all'`),s.mode="all"),{src:this.nuxt.resolver.resolveAlias(s.src),mode:s.mode,name:"nuxt_plugin_"+i+"_"+hash(s.src)}})),(t=>t.name))}addOptionalTemplates(t){this.options.build.indicator&&t.templateFiles.push("components/nuxt-build-indicator.vue"),!1!==this.options.loading&&t.templateFiles.push("components/nuxt-loading.vue")}async resolveFiles(t,e=this.options.srcDir){return this.ignore.filter(await glob(this.globPathWithExtensions(t),{cwd:e,follow:this.options.build.followSymlinks}))}async resolveRelative(t){const e=new RegExp(`^${t}/`);return(await this.resolveFiles(t)).map((t=>({src:t.replace(e,"")})))}async resolveLayouts({templateVars:t,templateFiles:e}){if(this.options.features.layouts){if(await fsExtra.exists(path.resolve(this.options.srcDir,this.options.dir.layouts)))for(const e of await this.resolveFiles(this.options.dir.layouts)){const s=e.replace(new RegExp(`^${this.options.dir.layouts}/`),"").replace(new RegExp(`\\.(${this.supportedExtensions.join("|")})$`),"");"error"===s?t.components.ErrorPage||(t.components.ErrorPage=this.relativeToBuild(this.options.srcDir,e)):this.options.layouts[s]?consola.warn(`Duplicate layout registration, "${s}" has been registered as "${this.options.layouts[s]}"`):t.layouts[s]&&!/\.vue$/.test(e)||(t.layouts[s]=this.relativeToBuild(this.options.srcDir,e))}t.layouts.default||(await fsExtra.mkdirp(utilsEdge.r(this.options.buildDir,"layouts")),e.push("layouts/default.vue"),t.layouts.default="./layouts/default.vue")}}async resolveRoutes({templateVars:t}){consola.debug("Generating routes...");const{routeNameSplitter:e,trailingSlash:s}=this.options.router;if(this._defaultPage)t.router.routes=utilsEdge.createRoutes({files:["index.vue"],srcDir:this.template.dir+"/pages",routeNameSplitter:e,trailingSlash:s});else if(this._nuxtPages){const i={},o=new RegExp(`\\.(${this.supportedExtensions.join("|")})$`);for(const t of await this.resolveFiles(this.options.dir.pages)){const e=t.replace(o,"");!/\.vue$/.test(t)&&i[e]||(i[e]=t.replace(/(['"])/g,"\\$1"))}t.router.routes=utilsEdge.createRoutes({files:Object.values(i),srcDir:this.options.srcDir,pagesDir:this.options.dir.pages,routeNameSplitter:e,supportedExtensions:this.supportedExtensions,trailingSlash:s})}else t.router.routes=await this.options.build.createRoutes(this.options.srcDir);if(await this.nuxt.callHook("build:extendRoutes",t.router.routes,utilsEdge.r),"function"==typeof this.options.router.extendRoutes){const e=await this.options.router.extendRoutes(t.router.routes,utilsEdge.r);void 0!==e&&(t.router.routes=e)}this.routes=t.router.routes}async resolveStore({templateVars:t,templateFiles:e}){this.options.features.store&&this.options.store&&(t.storeModules=(await this.resolveRelative(this.options.dir.store)).sort((({src:t},{src:e})=>{let s=t.split("/").length-e.split("/").length;return 0===s&&t.includes("/index.")?s=-1:0===s&&e.includes("/index.")&&(s=1),s})),e.push("store.js"))}async resolveMiddleware({templateVars:t,templateFiles:e}){if(!this.options.features.middleware)return;const s=await this.resolveRelative(this.options.dir.middleware),i=new RegExp(`\\.(${this.supportedExtensions.join("|")})$`);t.middleware=s.map((({src:t})=>({name:t.replace(i,""),src:t,dst:this.relativeToBuild(this.options.srcDir,this.options.dir.middleware,t)}))),e.push("middleware.js")}async resolveCustomTemplates(t){this.options.build.templates=this.options.build.templates.map((t=>{const e=t.src||t;return{src:utilsEdge.r(this.options.srcDir,e),dst:t.dst||path.basename(e),custom:!0,..."object"==typeof t?t:void 0}}));const e=this.options.build.templates.map((t=>t.dst||path.basename(t.src||t))),s=lodash.uniq([...e,...t.templateFiles]),i=path.resolve(this.options.srcDir,this.options.dir.app);t.templateFiles=await Promise.all(s.map((async t=>{const s=e.indexOf(t),o=-1!==s?this.options.build.templates[s]:null;let r=o?o.src||o:utilsEdge.r(this.template.dir,t);const n=path.resolve(this.options.srcDir,this.options.dir.app,t),a=n.startsWith(i)&&await fsExtra.exists(n);return a&&(r=n),{src:r,dst:t,custom:Boolean(a||o),options:o&&o.options||{}}})))}async resolveLoadingIndicator({templateFiles:t}){if(!this.options.loadingIndicator.name)return;let e=path.resolve(this.template.dir,"views/loading",this.options.loadingIndicator.name+".html"),s=!1;await fsExtra.exists(e)||(e=this.nuxt.resolver.resolveAlias(this.options.loadingIndicator.name),await fsExtra.exists(e)?s=!0:e=null),e?t.push({src:e,dst:"loading.html",custom:s,options:this.options.loadingIndicator}):consola.error(`Could not fetch loading indicator: ${this.options.loadingIndicator.name}`)}async compileTemplates(t){const{templateVars:e,templateFiles:s,templateOptions:i}=t;await this.nuxt.callHook("build:templates",{templateVars:e,templatesFiles:s,resolve:utilsEdge.r}),i.imports={...i.imports,resolvePath:this.nuxt.resolver.resolvePath,resolveAlias:this.nuxt.resolver.resolveAlias,relativeToBuild:this.relativeToBuild},await Promise.all(s.map((async t=>{const{src:s,dst:o,custom:r}=t;r&&this.options.build.watch.push(s);const n=await fsExtra.readFile(s,"utf8");let a;try{const s=lodash.template(n,i);a=utilsEdge.stripWhitespace(s({...e,...t}))}catch(t){throw new Error(`Could not compile template ${s}: ${t.message}`)}const l=utilsEdge.r(this.options.buildDir,o);await fsExtra.outputFile(l,a,"utf8")})))}resolvePlugins(){return Promise.all(this.plugins.map((async t=>{const e=await glob(upath.normalize(`${t.src}{?(.+([^.])),/index.+([^.])}`));if(!e||0===e.length)throw new Error(`Plugin not found: ${t.src}`);e.length>1&&!utilsEdge.isIndexFileAndFolder(e)&&consola.warn({message:`Found ${e.length} plugins that match the configuration, suggest to specify extension:`,additional:"\n"+e.map((t=>`- ${t}`)).join("\n")}),t.src=this.relativeToBuild(t.src)})))}createFileWatcher(t,e,s,i){const o=this.options.watchers.chokidar,r=chokidar.watch(t,o);for(const t of e)r.on(t,s);const{rewatchOnRawEvents:n}=this.options.watchers;n&&Array.isArray(n)&&r.on("raw",(o=>{n.includes(o)&&(r.close(),s(),this.createFileWatcher(t,e,s,i))})),"function"==typeof i&&i(r)}assignWatcher(t){return e=>{this.watchers[t]&&this.watchers[t].close(),this.watchers[t]=e}}watchClient(){let t=[utilsEdge.r(this.options.srcDir,this.options.dir.layouts),utilsEdge.r(this.options.srcDir,this.options.dir.middleware)];this.options.store&&t.push(utilsEdge.r(this.options.srcDir,this.options.dir.store)),this._nuxtPages&&!this._defaultPage&&t.push(utilsEdge.r(this.options.srcDir,this.options.dir.pages)),t=t.map(((t,...e)=>upath.normalizeSafe(this.globPathWithExtensions(t),...e)));const e=lodash.debounce((()=>this.generateRoutesAndFiles()),200);this.createFileWatcher(t,["add","unlink"],e,this.assignWatcher("files"));const s=lodash.uniq([...this.options.build.watch,...Object.values(lodash.omit(this.options.build.styleResources,["options"]))]).map(this.nuxt.resolver.resolveAlias).map(upath.normalizeSafe);0!==s.length&&(this.createFileWatcher(s,["change"],e,this.assignWatcher("custom")),this.createFileWatcher([utilsEdge.r(this.options.srcDir,this.options.dir.app)],["add","change","unlink"],e,this.assignWatcher("app")))}serverMiddlewareHMR(){if(!this.nuxt.server)return;const t=this.nuxt.server.serverMiddlewarePaths(),e=new Set,s={};for(const i of t)for(const t of utilsEdge.scanRequireTree(i))e.add(t),s[t]||(s[t]=new Set),s[t].add(i);this.createFileWatcher(Array.from(e),["all"],lodash.debounce(((t,e)=>{if(s[e]){for(const i of s[e]){let s;try{s=this.nuxt.server.replaceMiddleware(i,i)}catch(t){consola.error(t),consola.error(`[HMR Error]: ${t}`)}if(!s)return this.nuxt.callHook("watch:restart",{event:t,path:e});consola.info(`[HMR] ${chalk.cyan(s.route||"/")} (${chalk.grey(e)})`)}this.serverMiddlewareHMR()}}),200),this.assignWatcher("serverMiddleware"))}watchRestart(){const t=[...this.options.watch].map(this.nuxt.resolver.resolveAlias);this.ignore.ignoreFile&&t.push(this.ignore.ignoreFile),this.options._envConfig&&this.options._envConfig.dotenv&&t.push(this.options._envConfig.dotenv),this._nuxtPages&&this._defaultPage&&t.push(path.join(this.options.srcDir,this.options.dir.pages)),this.options.store||t.push(path.join(this.options.srcDir,this.options.dir.store)),this.createFileWatcher(t,["all"],(async(t,e)=>{!1!==["add","change","unlink"].includes(t)&&(await this.nuxt.callHook("watch:fileChanged",this,e),await this.nuxt.callHook("watch:restart",{event:t,path:e}))}),this.assignWatcher("restart"))}unwatch(){for(const t in this.watchers)this.watchers[t].close()}async close(){this.__closed||(this.__closed=!0,this.unwatch(),"function"==typeof this.bundleBuilder.close&&await this.bundleBuilder.close())}}const STATUS={INITIAL:1,BUILD_DONE:2,BUILDING:3};function getBuilder(t){return new Builder(t)}function build(t){return getBuilder(t).build()}exports.Builder=Builder,exports.build=build,exports.getBuilder=getBuilder;
//# sourceMappingURL=/sm/4c1135e43c19b704dc6c7a5ec59911e01e12db1d486dda0c1385bfd66d071b8a.map