/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/nitropack-nightly@2.14.0-20260409-151037-0c5049e0/dist/core/index.mjs
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
import consola,{consola as consola$1}from"consola";import{createHooks,createDebugger}from"hookable";import{runtimeDir,pkgDir}from"nitropack/runtime/meta";export{runtimeDependencies as nitroRuntimeDependencies}from"nitropack/runtime/meta";import{version}from"nitropack/meta";import{resolve,join as join$1,relative,normalize,isAbsolute,dirname}from"pathe";import{createUnimport,toExports}from"unimport";import{watchConfig,loadConfig}from"c12";import{resolveCompatibilityDatesFromEnv,formatDate,resolveCompatibilityDates,formatCompatibilityDate}from"compatx";import{klona}from"klona/full";import{isDebug,isTest,nodeMajorVersion,provider,isCI}from"std-env";import{existsSync,promises}from"node:fs";import defu$1,{defu}from"defu";import{withLeadingSlash,withoutTrailingSlash,withTrailingSlash,withBase,parseURL,joinURL,withoutBase}from"ufo";import{colors}from"consola/utils";import{join,resolve as resolve$1,dirname as dirname$1}from"node:path";import escapeRE from"escape-string-regexp";import{resolveModuleExportNames,parseNodeModulePath,lookupNodeModuleSubpath}from"mlly";import{resolveNitroPath,isDirectory,writeFile,prettyPath}from"nitropack/kit";export{defineNitroPreset}from"nitropack/kit";import{findWorkspaceDir}from"pkg-types";import{createJiti}from"jiti";import{globby}from"globby";import fsp,{readFile,rm,writeFile as writeFile$1}from"node:fs/promises";import{ofetch}from"ofetch";import{klona as klona$1}from"klona";import{createStorage as createStorage$1,builtinDrivers}from"unstorage";import{pathToFileURL}from"node:url";import mime from"mime";import{toRouteMatcher,createRouter}from"radix3";import{getRollupConfig}from"nitropack/rollup";import{watch}from"chokidar";import{debounce}from"perfect-debounce";import*as rollup from"rollup";import{upperFirst}from"scule";import{genTypeImport}from"knitwork";import{resolveModulePath}from"exsolve";import{resolveAlias}from"pathe/utils";import{generateTypes,resolveSchema}from"untyped";import{gzipSize}from"gzip-size";import prettyBytes from"pretty-bytes";import{r as runParallel}from"../_chunks/parallel.mjs";import{getProperty}from"dot-prop";import zlib from"node:zlib";import{walk,parse}from"ultrahtml";import{createError,getRequestURL,getRequestHeader,getResponseHeader,getRequestHeaders,setResponseHeaders,setResponseStatus,send,eventHandler,getRequestIP,toNodeListener,createApp,fromNodeMiddleware}from"h3";import{Worker}from"node:worker_threads";import{createProxyServer}from"httpxy";import{ErrorParser}from"youch-core";import{Youch}from"youch";import{SourceMapConsumer}from"source-map";import serveStatic from"serve-static";import{listen}from"listhen";import{servePlaceholder}from"serve-placeholder";const NitroDefaults={debug:isDebug,timing:isDebug,logLevel:isTest?1:3,runtimeConfig:{app:{},nitro:{}},appConfig:{},appConfigFiles:[],scanDirs:[],buildDir:".nitro",output:{dir:"{{ rootDir }}/.output",serverDir:"{{ output.dir }}/server",publicDir:"{{ output.dir }}/public"},experimental:{},future:{},storage:{},devStorage:{},bundledStorage:[],publicAssets:[],serverAssets:[],plugins:[],tasks:{},scheduledTasks:{},imports:{exclude:[],dirs:[],presets:[],virtualImports:["#imports"]},virtual:{},compressPublicAssets:!1,ignore:[],dev:!1,devServer:{watch:[]},watchOptions:{ignoreInitial:!0},devProxy:{},logging:{compressedSizes:!0,buildSuccess:!0},baseURL:process.env.NITRO_APP_BASE_URL||"/",handlers:[],devHandlers:[],errorHandler:void 0,routeRules:{},prerender:{autoSubfolderIndex:!0,concurrency:1,interval:0,retry:3,retryDelay:500,failOnError:!1,crawlLinks:!1,ignore:[],routes:[]},analyze:!1,moduleSideEffects:["unenv/polyfill/","node-fetch-native/polyfill","node-fetch-native/dist/polyfill",resolve(runtimeDir,"polyfill/")],replace:{},node:!0,sourceMap:!0,esbuild:{options:{jsxFactory:"h",jsxFragment:"Fragment"}},typescript:{strict:!1,generateTsConfig:!0,generateRuntimeConfigTypes:!0,tsconfigPath:"types/tsconfig.json",internalPaths:!1,tsConfig:{}},nodeModulesDirs:[],hooks:{},commands:{},framework:{name:"nitro",version:""}};async function resolveAssetsOptions(e){for(const t of e.publicAssets)t.dir=resolve(e.srcDir,t.dir),t.baseURL=withLeadingSlash(withoutTrailingSlash(t.baseURL||"/"));for(const t of e.scanDirs){const o=resolve(t,"public");existsSync(o)&&(e.publicAssets.some((e=>e.dir===o))||e.publicAssets.push({dir:o}))}for(const t of e.serverAssets)t.dir=resolve(e.srcDir,t.dir);e.serverAssets.push({baseName:"server",dir:resolve(e.srcDir,"assets")});for(const t of e.publicAssets){t.baseURL=t.baseURL||"/";const o="/"===t.baseURL;t.fallthrough=t.fallthrough??o;const r=e.routeRules[t.baseURL+"/**"];t.maxAge=r?.cache?.maxAge??t.maxAge??0,t.maxAge&&!t.fallthrough&&(e.routeRules[t.baseURL+"/**"]=defu(r,{headers:{"cache-control":`public, max-age=${t.maxAge}, immutable`}}))}}const fallbackCompatibilityDate="2024-04-03";let _fallbackInfoShown=!1;async function resolveCompatibilityOptions(e){if(e.compatibilityDate=resolveCompatibilityDatesFromEnv(e.compatibilityDate),!e.compatibilityDate.default){const t=consola.withTag("nitro");_fallbackInfoShown||isTest||"nitro-prerender"===e.preset||(t.warn([`Please add \`compatibilityDate: '${formatDate("latest")}'\` to the config file. Using \`2024-04-03\` as fallback.`,`       More info: ${colors.underline("https://nitro.build/deploy#compatibility-date")}`].join("\n")),_fallbackInfoShown=!0)}}async function resolveDatabaseOptions(e){e.experimental.database&&e.imports&&(e.imports.presets.push({from:"nitropack/runtime/internal/database",imports:["useDatabase"]}),!e.dev||e.database||e.devDatabase?e.node&&!e.database&&(e.database={default:{connector:"sqlite",options:{}}}):e.devDatabase={default:{connector:"sqlite",options:{cwd:e.rootDir}}})}async function resolveExportConditionsOptions(e){e.exportConditions=_resolveExportConditions(e.exportConditions||[],{dev:e.dev,node:e.node,wasm:e.experimental.wasm})}function _resolveExportConditions(e,t){const o=[];return o.push(t.dev?"development":"production"),o.push(...e),t.node?o.push("node"):o.push("wintercg","worker","web","browser","workerd","edge-light","netlify","edge-routine","deno"),t.wasm&&o.push("wasm","unwasm"),o.push("import","default"),o.filter(((e,t)=>o.indexOf(e)===t))}async function resolveFetchOptions(e){void 0===e.experimental.nodeFetchCompat&&(e.experimental.nodeFetchCompat=(nodeMajorVersion||0)<18,e.experimental.nodeFetchCompat&&"stackblitz"!==provider&&consola.warn("Node fetch compatibility is enabled. Please consider upgrading to Node.js >= 18.")),e.experimental.nodeFetchCompat||(e.alias={"node-fetch-native/polyfill":join(runtimeDir,"internal/empty"),"node-fetch-native/native":"node-fetch-native/native","node-fetch-native":"node-fetch-native/native",...e.alias})}async function resolveImportsOptions(e){if(!1===e.imports)return;e.imports.presets??=[],e.imports.presets.push(...getNitroImportsPreset());const t=await resolveModuleExportNames("h3",{url:import.meta.url});if(e.imports.presets??=[],e.imports.presets.push({from:"h3",imports:t.filter((e=>!/^[A-Z]/.test(e)&&"use"!==e))}),e.imports.dirs??=[],e.imports.dirs.push(...e.scanDirs.map((e=>join$1(e,"utils/**/*")))),Array.isArray(e.imports.exclude)&&0===e.imports.exclude.length){e.imports.exclude.push(/[/\\]\.git[/\\]/),e.imports.exclude.push(e.buildDir);const t=e.scanDirs.map((e=>e.match(/(?<=\/)node_modules\/(.+)$/)?.[1])).filter(Boolean);e.imports.exclude.push(t.length>0?new RegExp(`node_modules\\/(?!${t.map((e=>escapeRE(e))).join("|")})`):/[/\\]node_modules[/\\]/)}}function getNitroImportsPreset(){return[{from:"nitropack/runtime/internal/app",imports:["useNitroApp"]},{from:"nitropack/runtime/internal/config",imports:["useRuntimeConfig","useAppConfig"]},{from:"nitropack/runtime/internal/plugin",imports:["defineNitroPlugin","nitroPlugin"]},{from:"nitropack/runtime/internal/cache",imports:["defineCachedFunction","defineCachedEventHandler","cachedFunction","cachedEventHandler"]},{from:"nitropack/runtime/internal/storage",imports:["useStorage"]},{from:"nitropack/runtime/internal/renderer",imports:["defineRenderHandler"]},{from:"nitropack/runtime/internal/meta",imports:["defineRouteMeta"]},{from:"nitropack/runtime/internal/route-rules",imports:["getRouteRules"]},{from:"nitropack/runtime/internal/context",imports:["useEvent"]},{from:"nitropack/runtime/internal/task",imports:["defineTask","runTask"]},{from:"nitropack/runtime/internal/error/utils",imports:["defineNitroErrorHandler"]}]}async function resolveOpenAPIOptions(e){if(!e.experimental.openAPI)return;if(!e.dev&&!e.openAPI?.production)return;const t=!e.dev&&"prerender"===e.openAPI?.production,o=t?"prerender":"",r=[],s=e.openAPI?.route||"/_openapi.json";if(r.push(s),e.handlers.push({route:s,env:o,handler:join$1(runtimeDir,"internal/routes/openapi")}),!1!==e.openAPI?.ui?.scalar){const t=e.openAPI?.ui?.scalar?.route||"/_scalar";r.push(t),e.handlers.push({route:e.openAPI?.ui?.scalar?.route||"/_scalar",env:o,handler:join$1(runtimeDir,"internal/routes/scalar")})}if(!1!==e.openAPI?.ui?.swagger){const t=e.openAPI?.ui?.swagger?.route||"/_swagger";r.push(t),e.handlers.push({route:t,env:o,handler:join$1(runtimeDir,"internal/routes/swagger")})}t&&(e.prerender??={},e.prerender.routes??=[],e.prerender.routes.push(...r))}async function resolvePathOptions(e){e.rootDir=resolve(e.rootDir||"."),e.workspaceDir||=await findWorkspaceDir(e.rootDir).catch((()=>e.rootDir));for(const t of["srcDir","buildDir"])e[t]=resolve(e.rootDir,e[t]||".");if(e.alias={...e.alias,"~/":join$1(e.srcDir,"/"),"@/":join$1(e.srcDir,"/"),"~~/":join$1(e.rootDir,"/"),"@@/":join$1(e.rootDir,"/")},!e.static&&!e.entry)throw new Error(`Nitro entry is missing! Is "${e.preset}" preset correct?`);e.entry&&(e.entry=resolveNitroPath(e.entry,e)),e.output.dir=resolveNitroPath(e.output.dir||NitroDefaults.output.dir,e,e.rootDir),e.output.publicDir=resolveNitroPath(e.output.publicDir||NitroDefaults.output.publicDir,e,e.rootDir),e.output.serverDir=resolveNitroPath(e.output.serverDir||NitroDefaults.output.serverDir,e,e.rootDir),e.nodeModulesDirs.push(resolve(e.workspaceDir,"node_modules")),e.nodeModulesDirs.push(resolve(e.rootDir,"node_modules")),e.nodeModulesDirs.push(resolve(pkgDir,"node_modules")),e.nodeModulesDirs.push(resolve(pkgDir,"..")),e.nodeModulesDirs=[...new Set(e.nodeModulesDirs.map((t=>resolve(e.rootDir,t)+"/")))],e.plugins=e.plugins.map((t=>resolveNitroPath(t,e))),e.scanDirs.unshift(e.srcDir),e.scanDirs=e.scanDirs.map((t=>resolve(e.srcDir,t))),e.scanDirs=[...new Set(e.scanDirs)],e.appConfigFiles??=[],e.appConfigFiles=e.appConfigFiles.map((t=>_tryResolve(resolveNitroPath(t,e)))).filter(Boolean);for(const t of e.scanDirs){const o=_tryResolve("app.config",t);o&&!e.appConfigFiles.includes(o)&&e.appConfigFiles.push(o)}}function _tryResolve(e,t=".",o=["",".js",".ts",".mjs",".cjs",".json"]){if(e=resolve(t,e),existsSync(e))return e;for(const t of o){const o=e+t;if(existsSync(o))return o}}async function resolveRouteRulesOptions(e){e.routeRules=defu(e.routeRules,e.routes||{}),e.routeRules=normalizeRouteRules(e)}function normalizeRouteRules(e){const t={};for(let o in e.routeRules){const r=e.routeRules[o];o=withLeadingSlash(o);const s={...r,redirect:void 0,proxy:void 0};r.redirect&&(s.redirect={to:"/",statusCode:307,..."string"==typeof r.redirect?{to:r.redirect}:r.redirect},o.endsWith("/**")&&(s.redirect._redirectStripBase=o.slice(0,-3))),r.proxy&&(s.proxy="string"==typeof r.proxy?{to:r.proxy}:r.proxy,o.endsWith("/**")&&(s.proxy._proxyStripBase=o.slice(0,-3))),r.cors&&(s.headers={"access-control-allow-origin":"*","access-control-allow-methods":"*","access-control-allow-headers":"*","access-control-max-age":"0",...s.headers}),r.swr&&(s.cache=s.cache||{},s.cache.swr=!0,"number"==typeof r.swr&&(s.cache.maxAge=r.swr)),!1===r.cache&&(s.cache=!1),t[o]=s}return t}async function resolveRuntimeConfigOptions(e){e.runtimeConfig=normalizeRuntimeConfig(e)}function normalizeRuntimeConfig(e){provideFallbackValues(e.runtimeConfig||{});const t=defu$1(e.runtimeConfig,{app:{baseURL:e.baseURL},nitro:{envExpansion:e.experimental?.envExpansion,openAPI:e.openAPI}});return t.nitro.routeRules=e.routeRules,checkSerializableRuntimeConfig(t),t}function provideFallbackValues(e){for(const t in e)void 0===e[t]||null===e[t]?e[t]="":"object"==typeof e[t]&&provideFallbackValues(e[t])}function checkSerializableRuntimeConfig(e,t=[]){if(!isPrimitiveValue(e))for(const o in e){const r=e[o];if(null!=r&&!isPrimitiveValue(r))if(Array.isArray(r))for(const[e,s]of r.entries())checkSerializableRuntimeConfig(s,[...t,`${o}[${e}]`]);else"object"!=typeof r||r.constructor!==Object||r.constructor?.name&&"Object"!==r.constructor.name?console.warn(`Runtime config option \`${[...t,o].join(".")}\` may not be able to be serialized.`):checkSerializableRuntimeConfig(r,[...t,o])}}function isPrimitiveValue(e){return"string"==typeof e||"number"==typeof e||"boolean"==typeof e}async function resolveStorageOptions(e){const t={root:resolve(e.rootDir),src:resolve(e.srcDir),build:resolve(e.buildDir),cache:resolve(e.buildDir,"cache")};for(const o in t)e.devStorage[o]=e.devStorage[o]||{driver:"fs",readOnly:"root"===o||"src"===o,base:t[o]};e.dev&&void 0===e.storage.data&&void 0===e.devStorage.data?e.devStorage.data={driver:"fs",base:resolve(e.rootDir,".data/kv")}:e.node&&void 0===e.storage.data&&(e.storage.data={driver:"fsLite",base:"./.data/kv"})}async function resolveURLOptions(e){e.baseURL=withLeadingSlash(withTrailingSlash(e.baseURL))}async function resolveErrorOptions(e){e.errorHandler?Array.isArray(e.errorHandler)||(e.errorHandler=[e.errorHandler]):e.errorHandler=[],e.errorHandler.push(join$1(runtimeDir,"internal/error/"+(e.dev?"dev":"prod")))}const common={meta:{name:"nitro-common",url:import.meta.url},alias:{"node-mock-http/_polyfill/events":"node:events","node-mock-http/_polyfill/buffer":"node:buffer","buffer/":"node:buffer","buffer/index":"node:buffer","buffer/index.js":"node:buffer","string_decoder/":"node:string_decoder","process/":"node:process"}},nodeless={meta:{name:"nitro-nodeless",url:import.meta.url},inject:{global:"unenv/polyfill/globalthis",process:"node:process",Buffer:["node:buffer","Buffer"],clearImmediate:["node:timers","clearImmediate"],setImmediate:["node:timers","setImmediate"],performance:"unenv/polyfill/performance",PerformanceObserver:["node:perf_hooks","PerformanceObserver"],BroadcastChannel:["node:worker_threads","BroadcastChannel"]},polyfill:["unenv/polyfill/globalthis-global","unenv/polyfill/process","unenv/polyfill/buffer","unenv/polyfill/timers"]};async function resolveUnenv(e){e.unenv??=[],Array.isArray(e.unenv)||(e.unenv=[e.unenv]),e.unenv=e.unenv.filter(Boolean),e.node||e.unenv.unshift(nodeless),e.unenv.unshift(common)}const configResolvers=[resolveCompatibilityOptions,resolvePathOptions,resolveImportsOptions,resolveRouteRulesOptions,resolveDatabaseOptions,resolveFetchOptions,resolveExportConditionsOptions,resolveRuntimeConfigOptions,resolveOpenAPIOptions,resolveURLOptions,resolveAssetsOptions,resolveStorageOptions,resolveErrorOptions,resolveUnenv];async function loadOptions(e={},t={}){const o=await _loadUserConfig(e,t);for(const e of configResolvers)await e(o);return o}async function _loadUserConfig(e={},t={}){e=klona(e),globalThis.defineNitroConfig=globalThis.defineNitroConfig||(e=>e);let o=e.compatibilityDate||t.compatibilityDate||process.env.NITRO_COMPATIBILITY_DATE||process.env.SERVER_COMPATIBILITY_DATE||process.env.COMPATIBILITY_DATE;const{resolvePreset:r}=await import("nitropack/presets");let s=e.preset||process.env.NITRO_PRESET||process.env.SERVER_PRESET;const i=await(t.watch?watchConfig:loadConfig)({name:"nitro",cwd:e.rootDir,dotenv:t.dotenv??e.dev,extend:{extendKey:["extends","preset"]},defaults:NitroDefaults,jitiOptions:{alias:{nitropack:"nitropack/config","nitropack/config":"nitropack/config"}},async overrides({rawConfigs:t}){const i=o=>e[o]??t.main?.[o]??t.rc?.[o]??t.packageJson?.[o];o||(o=i("compatibilityDate"));const n=i("framework"),a=n?.name&&"nitro"!==n.name;return s||(s=i("preset")),e.dev?s=s&&"nitro-dev"!==s?await r(s,{static:i("static"),dev:!0,compatibilityDate:o||"2024-04-03"}).then((e=>e?._meta?.name||"nitro-dev")).catch((()=>"nitro-dev")):"nitro-dev":s||(s=await r("",{static:i("static"),dev:!1,compatibilityDate:o||"2024-04-03"}).then((e=>e?._meta?.name))),{...e,preset:s,typescript:{generateRuntimeConfigTypes:!a,...i("typescript"),...e.typescript}}},async resolve(t){const s=await r(t,{static:e.static,compatibilityDate:o||"2024-04-03",dev:e.dev});if(s)return{config:klona(s)}},...t.c12}),n=klona(i.config);n._config=e,n._c12=i;const a=(i.layers||[]).find((e=>e.config?._meta?.name))?.config?._meta?.name||s;return n.preset=a,n.compatibilityDate=resolveCompatibilityDates(o,n.compatibilityDate),n.dev&&"nitro-dev"!==n.preset&&consola.info(`Using \`${n.preset}\` emulation in development mode.`),n}async function updateNitroConfig(e,t){e.options.routeRules=normalizeRouteRules(t.routeRules?t:e.options),e.options.runtimeConfig=normalizeRuntimeConfig(t.runtimeConfig?t:e.options),await e.hooks.callHook("rollup:reload"),consola.success("Nitro config hot reloaded!")}async function installModules(e){const t=[...e.options.modules||[]],o=await Promise.all(t.map((t=>_resolveNitroModule(t,e.options)))),r=new Set;for(const t of o){if(t._url){if(r.has(t._url))continue;r.add(t._url)}await t.setup(e)}}async function _resolveNitroModule(e,t){let o;if("string"==typeof e){globalThis.defineNitroModule=globalThis.defineNitroModule||(e=>e);const r=createJiti(t.rootDir,{alias:t.alias}),s=r.esmResolve(e);o=s,e=await r.import(s,{default:!0})}return"function"==typeof e&&(e={setup:e}),e.setup||(e.setup=()=>{}),{_url:o,...e}}const GLOB_SCAN_PATTERN="**/*.{js,mjs,cjs,ts,mts,cts,tsx,jsx}",suffixRegex=/(\.(?<method>connect|delete|get|head|options|patch|post|put|trace))?(\.(?<env>dev|prod|prerender))?$/;async function scanAndSyncOptions(e){const t=await scanPlugins(e);for(const o of t)e.options.plugins.includes(o)||e.options.plugins.push(o);if(e.options.experimental.tasks){const t=await scanTasks(e);for(const o of t)o.name in e.options.tasks?e.options.tasks[o.name].handler||(e.options.tasks[o.name].handler=o.handler):e.options.tasks[o.name]={handler:o.handler,description:""}}const o=await scanModules(e);e.options.modules=e.options.modules||[];for(const t of o)e.options.modules.includes(t)||e.options.modules.push(t)}async function scanHandlers(e){const t=await scanMiddleware(e),o=await Promise.all([scanServerRoutes(e,e.options.apiDir||"api",e.options.apiBaseURL||"/api"),scanServerRoutes(e,e.options.routesDir||"routes")]).then((e=>e.flat()));return e.scannedHandlers=[...t,...o.filter(((e,t,o)=>o.findIndex((t=>e.route===t.route&&e.method===t.method&&e.env===t.env))===t))],o}async function scanMiddleware(e){return(await scanFiles(e,"middleware")).map((e=>({middleware:!0,handler:e.fullPath})))}async function scanServerRoutes(e,t,o="/"){return(await scanFiles(e,t)).map((e=>{let t=e.path.replace(/\.[A-Za-z]+$/,"").replace(/\(([^(/\\]+)\)[/\\]/g,"").replace(/\[\.{3}]/g,"**").replace(/\[\.{3}(\w+)]/g,"**:$1").replace(/\[([^/\]]+)]/g,":$1");t=withLeadingSlash(withoutTrailingSlash(withBase(t,o)));const r=t.match(suffixRegex);let s,i;return r?.index&&r?.index>=0&&(t=t.slice(0,r.index),s=r.groups?.method,i=r.groups?.env),t=t.replace(/\/index$/,"")||"/",{handler:e.fullPath,lazy:!0,middleware:!1,route:t,method:s,env:i}}))}async function scanPlugins(e){return(await scanFiles(e,"plugins")).map((e=>e.fullPath))}async function scanTasks(e){return(await scanFiles(e,"tasks")).map((e=>({name:e.path.replace(/\/index$/,"").replace(/\.[A-Za-z]+$/,"").replace(/\//g,":"),handler:e.fullPath})))}async function scanModules(e){return(await scanFiles(e,"modules")).map((e=>e.fullPath))}async function scanFiles(e,t){return await Promise.all(e.options.scanDirs.map((o=>scanDir(e,o,t)))).then((e=>e.flat()))}async function scanDir(e,t,o){return(await globby(join$1(o,GLOB_SCAN_PATTERN),{cwd:t,dot:!0,ignore:e.options.ignore,absolute:!0}).catch((r=>{if("ENOTDIR"===r?.code)return e.logger.warn(`Ignoring \`${join$1(t,o)}\`. It must be a directory.`),[];throw r}))).map((e=>({fullPath:e,path:relative(join$1(t,o),e)}))).sort(((e,t)=>e.path.localeCompare(t.path)))}async function runTask(e,t){const o=await _getTasksContext(t);return await o.devFetch(`/_nitro/tasks/${e.name}`,{method:"POST",body:e})}async function listTasks(e){const t=await _getTasksContext(e);return(await t.devFetch("/_nitro/tasks")).tasks}function addNitroTasksVirtualFile(e){e.options.virtual["#nitro-internal-virtual/tasks"]=()=>{const t=Object.entries(e.options.scheduledTasks||{}).map((([t,o])=>({cron:t,tasks:(Array.isArray(o)?o:[o]).filter((t=>!!e.options.tasks[t]||(e.logger.warn(`Scheduled task \`${t}\` is not defined!`),!1)))}))).filter((e=>e.tasks.length>0)),o=t.length>0&&t;return`\nexport const scheduledTasks = ${JSON.stringify(o)};\n\nexport const tasks = {\n  ${Object.entries(e.options.tasks).map((([e,t])=>`"${e}": {\n          meta: {\n            description: ${JSON.stringify(t.description)},\n          },\n          resolve: ${t.handler?`() => import("${normalize(t.handler)}").then(r => r.default || r)`:"undefined"},\n        }`)).join(",\n")}\n};`}}const _devHint="(is dev server running?)";async function _getTasksContext(e){const t=resolve(process.cwd(),e?.cwd||"."),o=resolve(t,e?.buildDir||".nitro"),r=resolve(o,"nitro.json");if(!existsSync(r))throw new Error(`Missing info file: \`${r}\` ${_devHint}`);const s=JSON.parse(await readFile(r,"utf8"));if(!s.dev?.pid||!s.dev?.workerAddress)throw new Error(`Missing dev server info in: \`${r}\` ${_devHint}`);if(!_pidIsRunning(s.dev.pid))throw new Error(`Dev server is not running (pid: ${s.dev.pid})`);return{buildInfo:s,devFetch:ofetch.create({baseURL:`http://${s.dev.workerAddress.host||"localhost"}:${s.dev.workerAddress.port||"3000"}`,socketPath:s.dev.workerAddress.socketPath})}}function _pidIsRunning(e){try{return process.kill(e,0),!0}catch{return!1}}async function createStorage(e){const t=createStorage$1(),o=klona$1({...e.options.storage,...e.options.devStorage});for(const[r,s]of Object.entries(o))if(s.driver){const e=await import(builtinDrivers[s.driver]||s.driver).then((e=>e.default||e));t.mount(r,e(s))}else e.logger.warn(`No \`driver\` set for storage mount point "${r}".`);return t}async function snapshotStorage(e){const t={},o=[...new Set(await Promise.all(e.options.bundledStorage.map((t=>e.storage.getKeys(t)))).then((e=>e.flat())))];return await Promise.all(o.map((async o=>{t[o]=await e.storage.getItem(o)}))),t}async function createNitro(e={},t={}){const o=await loadOptions(e,t),r={meta:{version:version,majorVersion:2},options:o,hooks:createHooks(),vfs:{},logger:consola$1.withTag("nitro"),scannedHandlers:[],close:()=>r.hooks.callHook("close"),storage:void 0,async updateConfig(e){updateNitroConfig(r,e)}};return await scanAndSyncOptions(r),r.storage=await createStorage(r),r.hooks.hook("close",(async()=>{await r.storage.dispose()})),r.options.debug&&(createDebugger(r.hooks,{tag:"nitro"}),r.options.plugins.push(join$1(runtimeDir,"internal/debug"))),r.options.timing&&r.options.plugins.push(join$1(runtimeDir,"internal/timing")),void 0!==r.options.logLevel&&(r.logger.level=r.options.logLevel),r.hooks.addHooks(r.options.hooks),addNitroTasksVirtualFile(r),await installModules(r),r.options.imports&&(r.unimport=createUnimport(r.options.imports),await r.unimport.init(),r.options.virtual["#imports"]=()=>r.unimport?.toExports()||"",r.options.virtual["#nitro"]='export * from "#imports"'),await scanHandlers(r),r}function nitroServerName(e){return"nitro"===e.options.framework.name?"Nitro Server":`${upperFirst(e.options.framework.name)} Nitro server`}function formatRollupError(e){try{const t=[e.toString()],o=e?.errors||[e];for(const r of o){const o=r.path||r.id||e.id;let s=isAbsolute(o)?relative(process.cwd(),o):o;const i=r.loc||r.location;i&&(s+=`:${i.line}:${i.column}`);const n=r.text||r.frame;t.push(`Rollup error while processing \`${s}\``+n?"\n\n"+n:"")}return t.join("\n")}catch{return e?.toString()}}async function writeTypes(e){const t={routes:{}},o=resolve(e.options.buildDir,"types"),r=[...e.scannedHandlers,...e.options.handlers];for(const s of r){if("string"!=typeof s.handler||!s.route)continue;const r=relative(o,resolveNitroPath(s.handler,e.options)).replace(/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/,""),i=s.method||"default";t.routes[s.route]??={},t.routes[s.route][i]??=[],t.routes[s.route][i].push(`Simplify<Serialize<Awaited<ReturnType<typeof import('${r}').default>>>>`)}let s=[],i="";if(e.unimport){await e.unimport.init();const t=await e.unimport.getImports();i=toExports(t).replace(/#internal\/nitro/g,relative(o,runtimeDir));const r=new Map;for(const s of t){const t=s.typeFrom||s.from;if(r.has(t))continue;let i=resolveAlias(t,e.options.alias);if(!isAbsolute(i)){const o=resolveModulePath(t,{try:!0,from:e.options.nodeModulesDirs,conditions:["type","node","import"],suffixes:["","/index"],extensions:[".mjs",".cjs",".js",".mts",".cts",".ts"]});if(o){const{dir:e,name:t}=parseNodeModulePath(o);if(e&&t){const r=await lookupNodeModuleSubpath(o);i=join$1(e,t,r||"")}else i=o}}existsSync(i)&&!await isDirectory(i)&&(i=i.replace(/\.[a-z]+$/,"")),isAbsolute(i)&&(i=relative(o,i)),r.set(t,i)}s=[e.options.imports&&!1!==e.options.imports.autoImport?(await e.unimport.generateTypeDeclarations({exportHelper:!1,resolvePath:e=>{const t=e.typeFrom||e.from;return r.get(t)??t}})).trim():""]}const n=["// Generated by nitro",`\n// App Config\nimport type { Defu } from 'defu'\n\n${e.options.appConfigFiles.map(((e,t)=>genTypeImport(relative(o,e).replace(/\.\w+$/,""),[{name:"default",as:`appConfig${t}`}]))).join("\n")}\n\ntype UserAppConfig = Defu<{}, [${e.options.appConfigFiles.map(((e,t)=>`typeof appConfig${t}`)).join(", ")}]>\n\ndeclare module "nitropack/types" {\n  interface AppConfig extends UserAppConfig {}`,e.options.typescript.generateRuntimeConfigTypes?generateTypes(await resolveSchema(Object.fromEntries(Object.entries(e.options.runtimeConfig).filter((([e])=>!["app","nitro"].includes(e))))),{interfaceName:"NitroRuntimeConfig",addExport:!1,addDefaults:!1,allowExtraKeys:!1,indentation:2}):"","}","export {}"],a=[];if(a.push({path:join$1(o,"nitro-routes.d.ts"),contents:()=>["// Generated by nitro",'import type { Serialize, Simplify } from "nitropack/types";','declare module "nitropack/types" {',"  type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T","  interface InternalApi {",...Object.entries(t.routes).map((([e,t])=>[`    '${e}': {`,...Object.entries(t).map((([e,t])=>`      '${e}': ${t.join(" | ")}`)),"    }"].join("\n"))),"  }","}","export {}"].join("\n")}),a.push({path:join$1(o,"nitro-config.d.ts"),contents:n.join("\n")}),a.push({path:join$1(o,"nitro-imports.d.ts"),contents:[...s,i||"export {}"].join("\n")}),a.push({path:join$1(o,"nitro.d.ts"),contents:['/// <reference path="./nitro-routes.d.ts" />','/// <reference path="./nitro-config.d.ts" />','/// <reference path="./nitro-imports.d.ts" />'].join("\n")}),e.options.typescript.generateTsConfig){const r=resolve(e.options.buildDir,e.options.typescript.tsconfigPath),s=dirname(r),i=defu(e.options.typescript.tsConfig,{compilerOptions:{forceConsistentCasingInFileNames:!0,strict:e.options.typescript.strict,noEmit:!0,skipLibCheck:!0,target:"ESNext",module:"ESNext",moduleResolution:!1===e.options.experimental.typescriptBundlerResolution?"Node":"Bundler",allowJs:!0,resolveJsonModule:!0,jsx:"preserve",allowSyntheticDefaultImports:!0,jsxFactory:"h",jsxFragmentFactory:"Fragment",paths:{"#imports":[relativeWithDot(s,join$1(o,"nitro-imports"))],"~/*":[relativeWithDot(s,join$1(e.options.alias["~"]||e.options.srcDir,"*"))],"@/*":[relativeWithDot(s,join$1(e.options.alias["@"]||e.options.srcDir,"*"))],"~~/*":[relativeWithDot(s,join$1(e.options.alias["~~"]||e.options.rootDir,"*"))],"@@/*":[relativeWithDot(s,join$1(e.options.alias["@@"]||e.options.rootDir,"*"))],...e.options.typescript.internalPaths?{"nitropack/runtime":[relativeWithDot(s,join$1(runtimeDir,"index"))],"#internal/nitro":[relativeWithDot(s,join$1(runtimeDir,"index"))],"nitropack/runtime/*":[relativeWithDot(s,join$1(runtimeDir,"*"))],"#internal/nitro/*":[relativeWithDot(s,join$1(runtimeDir,"*"))]}:{}}},include:[relativeWithDot(s,join$1(o,"nitro.d.ts")).replace(/^(?=[^.])/,"./"),join$1(relativeWithDot(s,e.options.rootDir),"**/*"),...e.options.srcDir===e.options.rootDir?[]:[join$1(relativeWithDot(s,e.options.srcDir),"**/*")]]});for(const e in i.compilerOptions.paths){const t=await Promise.all(i.compilerOptions.paths[e].map((async e=>{if(!isAbsolute(e))return e;const t=await promises.stat(e).catch((()=>null));return relativeWithDot(s,t?.isFile()?e.replace(/(?<=\w)\.\w+$/g,""):e)})));i.compilerOptions.paths[e]=[...new Set(t)]}i.include=[...new Set(i.include.map((e=>isAbsolute(e)?relativeWithDot(s,e):e)))],i.exclude&&(i.exclude=[...new Set(i.exclude.map((e=>isAbsolute(e)?relativeWithDot(s,e):e)))]),t.tsConfig=i,a.push({path:r,contents:()=>JSON.stringify(i,null,2)})}await e.hooks.callHook("types:extend",t),await Promise.all(a.map((async t=>{await writeFile(resolve(e.options.buildDir,t.path),"string"==typeof t.contents?t.contents:t.contents())})))}const RELATIVE_RE=/^\.{1,2}\//;function relativeWithDot(e,t){const o=relative(e,t);return RELATIVE_RE.test(o)?o:"./"+o}async function watchDev(e,t){let o;async function r(){o&&await o.close(),await scanHandlers(e),o=startRollupWatcher(e,t),await writeTypes(e)}const s=debounce(r),i=e.options.scanDirs.flatMap((t=>[join$1(t,e.options.apiDir||"api"),join$1(t,e.options.routesDir||"routes"),join$1(t,"middleware"),join$1(t,"plugins"),join$1(t,"modules")])),n=new Set(["add","addDir","unlink","unlinkDir"]),a=watch(i,{ignoreInitial:!0}).on("all",(e=>{n.has(e)&&s()}));e.hooks.hook("close",(()=>{o.close(),a.close()})),e.hooks.hook("rollup:reload",(()=>s())),await r()}function startRollupWatcher(e,t){const o=rollup.watch(defu$1(t,{watch:{chokidar:e.options.watchOptions}}));let r;return o.on("event",(t=>{switch(t.code){case"START":r=Date.now(),e.hooks.callHook("dev:start");break;case"BUNDLE_END":e.hooks.callHook("compiled",e),e.options.logging.buildSuccess&&e.logger.success(`${nitroServerName(e)} built`,r?`in ${Date.now()-r}ms`:""),e.hooks.callHook("dev:reload");break;case"ERROR":e.logger.error(formatRollupError(t.error)),e.hooks.callHook("dev:error",t.error)}})),o}const presetsWithConfig=["awsAmplify","awsLambda","azure","cloudflare","firebase","netlify","vercel"];async function generateFSTree(e,t={}){if(isTest)return;const o=await globby("**/*.*",{cwd:e,ignore:["*.map"]}),r=[];await runParallel(new Set(o),(async o=>{const s=resolve(e,o),i=await promises.readFile(s),n=i.byteLength,a=t.compressedSizes?await gzipSize(i):0;r.push({file:o,path:s,size:n,gzip:a})}),{concurrency:10}),r.sort(((e,t)=>e.path.localeCompare(t.path)));let s=0,i=0,n=0,a=0,l="";for(const[e,o]of r.entries()){dirname(o.file);const c=relative(process.cwd(),o.path),p=e===r.length-1?"└─":"├─";o.file.includes("node_modules")?(n+=o.size,a+=o.gzip):(l+=colors.gray(`  ${p} ${c} (${prettyBytes(o.size)})`),t.compressedSizes&&(l+=colors.gray(` (${prettyBytes(o.gzip)} gzip)`)),l+="\n",s+=o.size,i+=o.gzip)}return l+=`${colors.cyan("Σ Total size:")} ${prettyBytes(s+n)}`,t.compressedSizes&&(l+=` (${prettyBytes(i+a)} gzip)`),l+="\n",l}async function buildProduction(e,t){if(await scanHandlers(e),await writeTypes(e),await _snapshot(e),!e.options.static){e.logger.info(`Building ${nitroServerName(e)} (preset: \`${e.options.preset}\`, compatibility date: \`${formatCompatibilityDate(e.options.compatibilityDate)}\`)`);const o=await rollup.rollup(t).catch((t=>{throw e.logger.error(formatRollupError(t)),t}));await o.write(t.output)}const o=resolve(e.options.output.dir,"nitro.json"),r={date:(new Date).toJSON(),preset:e.options.preset,framework:e.options.framework,versions:{nitro:version},commands:{preview:resolveTmplPath(e.options.commands.preview,e,e.options.output.dir),deploy:resolveTmplPath(e.options.commands.deploy,e,e.options.output.dir)},config:{...Object.fromEntries(presetsWithConfig.map((t=>[t,e.options[t]])))}};await writeFile(o,JSON.stringify(r,null,2)),e.options.static||(e.options.logging.buildSuccess&&e.logger.success(`${nitroServerName(e)} built`),e.options.logLevel>1&&process.stdout.write(await generateFSTree(e.options.output.serverDir,{compressedSizes:e.options.logging.compressedSizes})||"")),await e.hooks.callHook("compiled",e),e.options.commands?.preview&&e.logger.success(`You can preview this build using \`${resolveTmplPath(e.options.commands.preview,e,process.cwd())}\``),e.options.commands?.deploy&&e.logger.success(`You can deploy this build using \`${resolveTmplPath(e.options.commands.deploy,e,process.cwd())}\``)}async function _snapshot(e){if(0===e.options.bundledStorage.length||"nitro-prerender"===e.options.preset)return;const t=resolve(e.options.buildDir,"snapshot");e.options.serverAssets.push({baseName:"nitro:bundled",dir:t});const o=await snapshotStorage(e);await Promise.all(Object.entries(o).map((async([e,o])=>{"string"!=typeof o&&(o=JSON.stringify(o));const r=join$1(t,e.replace(/:/g,"/"));await promises.mkdir(dirname(r),{recursive:!0}),await promises.writeFile(r,o,"utf8")})))}function resolveTmplPath(e,t,o){return e&&e.includes("{{")?e.replace(/{{ ?([\w.]+) ?}}/g,((r,s)=>{let i=getProperty(t.options,s);return i?i=relative(o,i)||".":t.logger.warn(`cannot resolve template param '${s}' in ${e.slice(0,20)}`),i||`${s}`})):e}async function build(e){await e.hooks.callHook("build:before",e);const t=getRollupConfig(e);return await e.hooks.callHook("rollup:before",e,t),e.options.dev?watchDev(e,t):buildProduction(e,t)}async function compressPublicAssets(e){const t=await globby("**",{cwd:e.options.output.publicDir,absolute:!1,dot:!0,ignore:["**/*.gz","**/*.br"]});await runParallel(new Set(t),(async t=>{const o=resolve(e.options.output.publicDir,t);if(existsSync(o+".gz")||existsSync(o+".br"))return;const r=mime.getType(t)||"text/plain",s=await fsp.readFile(o);if(s.length<1024||t.endsWith(".map")||!isCompressibleMime(r))return;const{gzip:i,brotli:n}=e.options.compressPublicAssets||{},a=[!1!==i&&"gzip",!1!==n&&"br"].filter(Boolean);await Promise.all(a.map((async e=>{const t=o+("."+("gzip"===e?"gz":"br"));if(existsSync(t))return;const i={level:zlib.constants.Z_BEST_COMPRESSION},n={[zlib.constants.BROTLI_PARAM_MODE]:isTextMime(r)?zlib.constants.BROTLI_MODE_TEXT:zlib.constants.BROTLI_MODE_GENERIC,[zlib.constants.BROTLI_PARAM_QUALITY]:zlib.constants.BROTLI_MAX_QUALITY,[zlib.constants.BROTLI_PARAM_SIZE_HINT]:s.length},a=await new Promise(((t,o)=>{const r=(e,r)=>e?o(e):t(r);"gzip"===e?zlib.gzip(s,i,r):zlib.brotliCompress(s,n,r)}));await fsp.writeFile(t,a)})))}),{concurrency:10})}function isTextMime(e){return/text|javascript|json|xml/.test(e)}const COMPRESSIBLE_MIMES_RE=new Set(["application/dash+xml","application/eot","application/font","application/font-sfnt","application/javascript","application/json","application/opentype","application/otf","application/pdf","application/pkcs7-mime","application/protobuf","application/rss+xml","application/truetype","application/ttf","application/vnd.apple.mpegurl","application/vnd.mapbox-vector-tile","application/vnd.ms-fontobject","application/wasm","application/xhtml+xml","application/xml","application/x-font-opentype","application/x-font-truetype","application/x-font-ttf","application/x-httpd-cgi","application/x-javascript","application/x-mpegurl","application/x-opentype","application/x-otf","application/x-perl","application/x-ttf","font/eot","font/opentype","font/otf","font/ttf","image/svg+xml","text/css","text/csv","text/html","text/javascript","text/js","text/plain","text/richtext","text/tab-separated-values","text/xml","text/x-component","text/x-java-source","text/x-script","vnd.apple.mpegurl"]);function isCompressibleMime(e){return COMPRESSIBLE_MIMES_RE.has(e)}const allowedExtensions=new Set(["",".json"]),linkParents$1=new Map,HTML_ENTITIES={"&lt;":"<","&gt;":">","&amp;":"&","&apos;":"'","&quot;":'"'};function escapeHtml(e){return e.replace(/&(lt|gt|amp|apos|quot);/g,(e=>HTML_ENTITIES[e]||e))}async function extractLinks(e,t,o,r){const s=[],i=[];r&&await walk(parse(e),(e=>{if(!e.attributes?.href)return;const t=escapeHtml(e.attributes.href);!decodeURIComponent(t).startsWith("#")&&allowedExtensions.has(getExtension(t))&&i.push(t)}));const n=o.headers.get("x-nitro-prerender")||"";i.push(...n.split(",").map((e=>decodeURIComponent(e.trim()))));for(const e of i.filter(Boolean)){const o=parseURL(e);if(!o.protocol&&!o.host){if(!o.pathname.startsWith("/")){const e=new URL(t,"http://localhost");o.pathname=new URL(o.pathname,e).pathname}s.push(o.pathname+o.search)}}for(const e of s){const o=linkParents$1.get(e);o?o.add(t):linkParents$1.set(e,new Set([t]))}return s}const EXT_REGEX=/\.[\da-z]+$/;function getExtension(e){return(parseURL(e).pathname.match(EXT_REGEX)||[])[0]||""}function formatPrerenderRoute(e){let t=`  ├─ ${e.route} (${e.generateTimeMS}ms)`;if(e.error){const o=linkParents$1.get(e.route),r=colors[404===e.error.statusCode?"yellow":"red"];t+=`\n  │ ${o?.size?"├──":"└──"} ${r(e.error.message)}`,o?.size&&(t+=`\n${[...o.values()].map((e=>`  │ └── Linked from ${e}`)).join("\n")}`)}return e.skip&&(t+=colors.gray(" (skipped)")),colors.gray(t)}function matchesIgnorePattern(e,t){return"string"==typeof t?e.startsWith(t):"function"==typeof t?!0===t(e):t instanceof RegExp&&t.test(e)}const NEGATION_RE=/^(!?)(.*)$/,PARENT_DIR_GLOB_RE=/!?\.\.\//;async function scanUnprefixedPublicAssets(e){const t=[];for(const o of e.options.publicAssets){if(o.baseURL&&"/"!==o.baseURL&&!o.fallthrough)continue;if(!await isDirectory(o.dir))continue;const r=getIncludePatterns(e,o.dir),s=await globby(r,{cwd:o.dir,absolute:!1,dot:!0});t.push(...s.map((e=>join$1(o.baseURL||"/",e))))}return t}async function copyPublicAssets(e){if(!e.options.noPublicDir){for(const t of e.options.publicAssets){const o=t.dir,r=join$1(e.options.output.publicDir,t.baseURL);if(await isDirectory(o)){const t=getIncludePatterns(e,o),s=await globby(t,{cwd:o,absolute:!1,dot:!0});await Promise.all(s.map((async e=>{const t=join$1(o,e),s=join$1(r,e);existsSync(s)||await promises.cp(t,s)})))}}e.options.compressPublicAssets&&await compressPublicAssets(e),e.logger.success("Generated public "+prettyPath(e.options.output.publicDir))}}function getIncludePatterns(e,t){return["**",...e.options.ignore.map((o=>{const[r,s,i]=o.match(NEGATION_RE)||[];return(s?"":"!")+(i.startsWith("*")?i:relative(t,resolve(e.options.srcDir,i)))}))].filter((e=>!PARENT_DIR_GLOB_RE.test(e)))}const JsonSigRx=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,linkParents=new Map;async function prerender(e){if(e.options.noPublicDir)return void e.logger.warn("Skipping prerender since `noPublicDir` option is enabled.");const t=new Set(e.options.prerender.routes),o=Object.entries(e.options.routeRules).filter((([e,t])=>t.prerender&&!e.includes("*"))).map((e=>e[0]));for(const e of o)t.add(e);if(await e.hooks.callHook("prerender:routes",t),0===t.size){if(!e.options.prerender.crawlLinks)return;t.add("/")}e.logger.info("Initializing prerenderer"),e._prerenderedRoutes=[],e._prerenderMeta=e._prerenderMeta||{};const r={...e.options._config,static:!1,rootDir:e.options.rootDir,logLevel:0,preset:"nitro-prerender"};await e.hooks.callHook("prerender:config",r);const s=await createNitro(r),i=Date.now();await e.hooks.callHook("prerender:init",s);let n=relative(e.options.output.dir,e.options.output.publicDir);n.startsWith(".")||(n=`./${n}`),s.options.commands.preview=`npx serve ${n}`,s.options.output.dir=e.options.output.dir,await build(s);const a="string"==typeof s.options.rollupConfig?.output?.entryFileNames?s.options.rollupConfig.output.entryFileNames:"index.mjs",l=resolve(s.options.output.serverDir,a),{closePrerenderer:c,localFetch:p}=await import(pathToFileURL(l).href),d=toRouteMatcher(createRouter({routes:e.options.routeRules})),u=new Set,m=new Set,f=new Set,h=new Set,g=e.options.publicAssets.filter((e=>!!e.baseURL&&"/"!==e.baseURL&&!e.fallthrough)).map((e=>withTrailingSlash(e.baseURL))),v=e.options.prerender.ignoreUnprefixedPublicAssets?new Set(await scanUnprefixedPublicAssets(e)):new Set,w=(t="/")=>{if(u.has(t)||f.has(t))return!1;for(const o of e.options.prerender.ignore)if(matchesIgnorePattern(t,o))return!1;return!g.some((e=>t.startsWith(e)))&&(!v.has(t)&&!1!==(o=t,defu({},...d.matchAll(o).reverse())).prerender);var o};if(e.logger.info(e.options.prerender.crawlLinks?`Prerendering ${t.size} initial routes with crawler`:`Prerendering ${t.size} routes`),await runParallel(t,(async o=>{const r=Date.now();if(o=decodeURI(o),!w(o))return void f.add(o);u.add(o);const s={route:o},i=encodeURI(o),n=await p(withBase(i,e.options.baseURL),{headers:{"x-nitro-prerender":i},retry:e.options.prerender.retry,retryDelay:e.options.prerender.retryDelay});let a=Buffer.from(await n.arrayBuffer());Object.defineProperty(s,"contents",{get:()=>a?a.toString("utf8"):void 0,set(e){a&&(a=Buffer.from(e))}}),Object.defineProperty(s,"data",{get:()=>a?a.buffer:void 0,set(e){a&&(a=Buffer.from(e))}});[200,301,302,303,304,307,308].includes(n.status)||(s.error=new Error(`[${n.status}] ${n.statusText}`),s.error.statusCode=n.status,s.error.statusMessage=n.statusText),s.generateTimeMS=Date.now()-r;const l=n.headers.get("content-type")||"",c=!o.endsWith(".html")&&l.includes("html")&&!JsonSigRx.test(a.subarray(0,32).toString("utf8")),d=o.endsWith("/")?o+"index":o,g=o.endsWith("/")||e.options.prerender.autoSubfolderIndex?joinURL(o,"index.html"):o+".html";s.fileName=withoutBase(c?g:d,e.options.baseURL);const v=mime.getType(s.fileName)||"text/plain";if(s.contentType=l||v,await e.hooks.callHook("prerender:generate",s,e),s.contentType!==v&&(e._prerenderMeta[s.fileName]||={},e._prerenderMeta[s.fileName].contentType=s.contentType),s.error&&m.add(s),s.skip||s.error)return await e.hooks.callHook("prerender:route",s),e.logger.log(formatPrerenderRoute(s)),a=void 0,s;const y=join$1(e.options.output.publicDir,s.fileName);if((t=>{if(t.route.includes("?")||t.route.includes(".."))return!1;const o=1024-(e.options.output.publicDir.length+10);if((t.route.length>=o||t.route.split("/").some((e=>e.length>255)))&&!h.has(t)){h.add(t);const r=t.route.slice(0,60)+"...";if(!(t.route.length>=o))return e.logger.warn(`Skipping prerender of the route "${r}" since it exceeds the 255-character limit in one of the path segments and can cause filesystem issues.`),!1;e.logger.warn(`Prerendering long route "${r}" (${t.route.length}) can cause filesystem issues since it exceeds ${o}-character limit when writing to \`${e.options.output.publicDir}\`.`)}return!0})(s)&&y.startsWith(e.options.output.publicDir)?(await writeFile(y,a),e._prerenderedRoutes.push(s)):s.skip=!0,!s.error&&(c||o.endsWith(".html"))){const r=await extractLinks(a.toString("utf8"),o,n,e.options.prerender.crawlLinks);for(const e of r)w(e)&&t.add(e)}return await e.hooks.callHook("prerender:route",s),e.logger.log(formatPrerenderRoute(s)),a=void 0,s}),{concurrency:e.options.prerender.concurrency,interval:e.options.prerender.interval}),await c(),await e.hooks.callHook("prerender:done",{prerenderedRoutes:e._prerenderedRoutes,failedRoutes:[...m]}),e.options.prerender.failOnError&&m.size>0){e.logger.log("\nErrors prerendering:");for(const t of m){const o=linkParents.get(t.route);o?.size&&[...o.values()].map((e=>colors.gray(`  │ └── Linked from ${e}`))).join("\n"),e.logger.log(formatPrerenderRoute(t))}throw e.logger.log(""),new Error("Exiting due to prerender errors.")}const y=Date.now()-i;e.logger.info(`Prerendered ${e._prerenderedRoutes.length} routes in ${y/1e3} seconds`),e.options.compressPublicAssets&&await compressPublicAssets(e)}function createHTTPProxy(e={}){const t=createProxyServer(e);t.on("proxyReq",((e,t)=>{if(!e.hasHeader("x-forwarded-for")){const o=t.socket.remoteAddress;o&&e.appendHeader("x-forwarded-for",o)}if(!e.hasHeader("x-forwarded-port")){const o=t?.socket?.localPort;o&&e.setHeader("x-forwarded-port",o)}if(!e.hasHeader("x-forwarded-Proto")){const o=t?.connection?.encrypted;e.setHeader("x-forwarded-proto",o?"https":"http")}}));return{proxy:t,handleEvent:async(e,o={})=>{try{e._handled=!0,await t.web(e.node.req,e.node.res,o)}catch(t){try{e.node.res.setHeader("refresh","3")}catch{}throw createError({statusCode:503,message:"Dev server is unavailable.",cause:t})}}}}class NodeDevWorker{closed=!1;#e;#t;#o;#r;#s;#i;constructor(e,t,o={}){this.#e=e,this.#t=t,this.#o=o,this.#s=createHTTPProxy(),this.#n()}get ready(){return Boolean(!this.closed&&this.#r&&this.#s&&this.#i)}async handleEvent(e){if(!this.#r||!this.#s)throw createError({status:503,statusText:"Dev worker is unavailable"});await this.#s.handleEvent(e,{target:this.#r})}handleUpgrade(e,t,o){if(this.ready)return this.#s.proxy.ws(e,t,{target:this.#r,xfwd:!0},o)}#n(){const e=join$1(this.#t,"index.mjs");if(!existsSync(e))return void this.close(`worker entry not found in "${e}".`);const t=new Worker(e,{env:{...process.env,NITRO_DEV_WORKER_ID:String(this.#e)}});t.once("exit",(e=>{t._exitCode=e,this.close(`worker exited with code ${e}`)})),t.once("error",(e=>{this.close(e)})),t.on("message",(e=>{e?.address&&(this.#r=e.address,this.#o.onReady?.(this,this.#r))})),this.#i=t}async close(e){if(this.closed)return;this.closed=!0,this.#o.onClose?.(this,e),this.#o={};const t=e=>consola.error(e);await this.#a().catch(t),await this.#l().catch(t),await this.#c().catch(t)}async#l(){this.#s?.proxy?.close((()=>{})),this.#s=void 0}async#c(){const e=this.#r?.socketPath;e&&"\0"!==e[0]&&!e.startsWith(String.raw`\\.\pipe`)&&await rm(e).catch((()=>{})),this.#r=void 0}async#a(){this.#i&&(this.#i.postMessage({event:"shutdown"}),this.#i._exitCode||isTest||isCI||await new Promise((e=>{const t=Number.parseInt(process.env.NITRO_SHUTDOWN_TIMEOUT||"",10)||5,o=setTimeout((()=>{process.env.DEBUG&&consola.warn("force closing dev worker...")}),1e3*t);this.#i?.on("message",(t=>{"exit"===t.event&&(clearTimeout(o),e())}))})),this.#i.removeAllListeners(),await this.#i.terminate().catch((e=>{consola.error(e)})),this.#i=void 0)}[Symbol.for("nodejs.util.inspect.custom")](){const e=this.closed?"closed":this.ready?"ready":"pending";return`NodeDevWorker#${this.#e}(${e})`}}function defineNitroErrorHandler(e){return e}const devErrorHandler=defineNitroErrorHandler((async function(e,t){const o=await defaultHandler(e,t);return t.node?.res.headersSent||setResponseHeaders(t,o.headers),setResponseStatus(t,o.status,o.statusText),send(t,"string"==typeof o.body?o.body:JSON.stringify(o.body,null,2))}));async function defaultHandler(e,t,o){const r=e.unhandled||e.fatal,s=e.statusCode||500,i=e.statusMessage||"Server Error",n=getRequestURL(t,{xForwardedHost:!0,xForwardedProto:!0});if(404===s){const e=import.meta.baseURL||"/";if(/^\/[^/]/.test(e)&&!n.pathname.startsWith(e)){return{status:302,statusText:"Found",headers:{location:`${e}${n.pathname.slice(1)}${n.search}`},body:"Redirecting..."}}}await loadStackTrace(e).catch(consola.error);const a=new Youch;if(r&&!o?.silent){const o=[e.unhandled&&"[unhandled]",e.fatal&&"[fatal]"].filter(Boolean).join(" "),r=await(await a.toANSI(e)).replaceAll(process.cwd(),".");consola.error(`[request error] ${o} [${t.method}] ${n}\n\n`,r)}const l=o?.json??!getRequestHeader(t,"accept")?.includes("text/html"),c={"content-type":l?"application/json":"text/html","x-content-type-options":"nosniff","x-frame-options":"DENY","referrer-policy":"no-referrer","content-security-policy":"script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self';"};404!==s&&getResponseHeader(t,"cache-control")||(c["cache-control"]="no-cache");return{status:s,statusText:i,headers:c,body:l?{error:!0,url:n,statusCode:s,statusMessage:i,message:e.message,data:e.data,stack:e.stack?.split("\n").map((e=>e.trim()))}:await a.toHTML(e,{request:{url:n.href,method:t.method,headers:getRequestHeaders(t)}})}}async function loadStackTrace(e){if(!(e instanceof Error))return;const t=await(new ErrorParser).defineSourceLoader(sourceLoader).parse(e),o=e.message+"\n"+t.frames.map((e=>fmtFrame(e))).join("\n");Object.defineProperty(e,"stack",{value:o}),e.cause&&await loadStackTrace(e.cause).catch(consola.error)}async function sourceLoader(e){if(!e.fileName||"fs"!==e.fileType||"native"===e.type)return;if("app"===e.type){const t=await readFile(`${e.fileName}.map`,"utf8").catch((()=>{}));if(t){const o=(await new SourceMapConsumer(t)).originalPositionFor({line:e.lineNumber,column:e.columnNumber});o.source&&o.line&&(e.fileName=resolve$1(dirname$1(e.fileName),o.source),e.lineNumber=o.line,e.columnNumber=o.column||0)}}const t=await readFile(e.fileName,"utf8").catch((()=>{}));return t?{contents:t}:void 0}function fmtFrame(e){if("native"===e.type)return e.raw;const t=`${e.fileName||""}:${e.lineNumber}:${e.columnNumber})`;return e.functionName?`at ${e.functionName} (${t}`:`at ${t}`}function createVFSHandler(e){return eventHandler((async t=>{const{socket:o}=t.node.req,r=!o?.remoteAddress&&!o?.localAddress&&0===Object.keys(o?.address?.()||{}).length&&o?.readable&&o?.writable&&!o?.remotePort,s=getRequestIP(t,{xForwardedFor:r});if(!(s&&/^::1$|^127\.\d+\.\d+\.\d+$/.test(s)))throw createError({message:`Forbidden IP: "${s||"?"}"`,statusCode:403});const i={...e.vfs,...e.options.virtual},n=t.path||"",a=n.endsWith(".json")||getRequestHeader(t,"accept")?.includes("application/json"),l=decodeURIComponent(n.replace(/^(\.json)?\/?/,"")||"");if(l&&!(l in i))throw createError({message:"File not found",statusCode:404});let c=l?i[l]:void 0;if("function"==typeof c&&(c=await c()),a)return{rootDir:e.options.rootDir,entries:Object.keys(i).map((e=>({id:e,path:"/_vfs.json/"+encodeURIComponent(e)}))),current:l?{id:l,content:c}:null};const p={[e.options.rootDir]:{}},d=Object.keys(i);for(const t of d){const o=t.replace(e.options.rootDir,"").split("/").filter(Boolean);let r=t.startsWith(e.options.rootDir)?p[e.options.rootDir]:p;for(const e of o)r[e]||(r[e]={}),r=r[e]}const u=(e,t=[])=>Object.entries(e).map((([e,o={}])=>{const r=[...t,e],s=r.join("/"),i=encodeURIComponent(s),a=n===`/${i}`?"bg-gray-700 text-white":"hover:bg-gray-800 text-gray-200";return 0===Object.keys(o).length?`\n            <li class="flex flex-nowrap">\n              <a href="/_vfs/${i}" class="w-full text-sm px-2 py-1 border-b border-gray-10 ${a}">\n                ${e}\n              </a>\n            </li>\n            `:`\n            <li>\n              <details ${n.startsWith(`/${i}`)?"open":""}>\n                <summary class="w-full text-sm px-2 py-1 border-b border-gray-10 hover:bg-gray-800 text-gray-200">\n                  ${e}\n                </summary>\n                <ul class="ml-4">\n                  ${u(o,r)}\n                </ul>\n              </details>\n            </li>\n            `})).join(""),m=p[e.options.rootDir];delete p[e.options.rootDir];const f=`\n      <div class="h-full overflow-auto border-r border-gray:10">\n        <p class="text-white text-bold text-center py-1 opacity-50">Virtual Files</p>\n        <ul class="flex flex-col">${u(m,[e.options.rootDir])+u(p)}</ul>\n      </div>\n      `,h=l?editorTemplate({readOnly:!0,language:l.endsWith("html")?"html":"javascript",theme:"vs-dark",value:c,wordWrap:"wordWrapColumn",wordWrapColumn:80}):'\n        <div class="w-full h-full flex opacity-50">\n          <h1 class="text-white m-auto">Select a virtual file to inspect</h1>\n        </div>\n      ';return`\n<!doctype html>\n<html>\n<head>\n  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@unocss/reset/tailwind.min.css" />\n  <link rel="stylesheet" data-name="vs/editor/editor.main" href="${vsUrl}/editor/editor.main.min.css">\n  <script src="https://cdn.jsdelivr.net/npm/@unocss/runtime"><\/script>\n  <style>\n    html {\n      background: #1E1E1E;\n      color: white;\n    }\n    [un-cloak] {\n      display: none;\n    }\n  </style>\n</head>\n<body class="bg-[#1E1E1E]">\n  <div un-cloak class="h-screen grid grid-cols-[300px_1fr]">\n    ${f}\n    ${h}\n  </div>\n</body>\n</html>`}))}const monacoVersion="0.30.0",monacoUrl="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.30.0/min",vsUrl=`${monacoUrl}/vs`,editorTemplate=e=>`\n<div id="editor" class="min-h-screen w-full h-full"></div>\n<script src="${vsUrl}/loader.min.js"><\/script>\n<script>\n  require.config({ paths: { vs: '${vsUrl}' } })\n\n  const proxy = URL.createObjectURL(new Blob([\`\n    self.MonacoEnvironment = { baseUrl: '${monacoUrl}' }\n    importScripts('${vsUrl}/base/worker/workerMain.min.js')\n  \`], { type: 'text/javascript' }))\n  window.MonacoEnvironment = { getWorkerUrl: () => proxy }\n\n  setTimeout(() => {\n    require(['vs/editor/editor.main'], function () {\n      monaco.editor.create(document.getElementById('editor'), ${JSON.stringify(e)})\n    })\n  }, 0);\n<\/script>\n`;function createDevServer(e){const t=new DevServer(e);return{reload:()=>t.reload(),listen:(e,o)=>t.listen(e,o),close:()=>t.close(),upgrade:(e,o,r)=>t.handleUpgrade(e,o,r),get app(){return t.app},get watcher(){return t.watcher}}}let workerIdCtr=0;class DevServer{nitro;workerDir;app;listeners=[];reloadPromise;watcher;workers=[];workerError;building=!0;buildError;constructor(e){if(this.nitro=e,this.workerDir=resolve(e.options.output.dir,e.options.output.serverDir),this.app=this.createApp(),e.hooks.hook("close",(()=>this.close())),e.hooks.hook("dev:start",(()=>{this.building=!0,this.buildError=void 0})),e.hooks.hook("dev:reload",(()=>{this.buildError=void 0,this.building=!1,this.reload()})),e.hooks.hook("dev:error",(e=>{this.buildError=e,this.building=!1;for(const e of this.workers)e.close()})),e.options.devServer.watch.length>0){const t=debounce((()=>this.reload()));this.watcher=watch(e.options.devServer.watch,e.options.watchOptions),this.watcher.on("add",t).on("change",t)}}async listen(e,t){const o=await listen(toNodeListener(this.app),{port:e,...t});return this.listeners.push(o),o.server.on("upgrade",((e,t,o)=>this.handleUpgrade(e,t,o))),o}async close(){await Promise.all([Promise.all(this.listeners.map((e=>e.close()))).then((()=>{this.listeners=[]})),Promise.all(this.workers.map((e=>e.close()))).then((()=>{this.workers=[]})),Promise.resolve(this.watcher?.close()).then((()=>{this.watcher=void 0}))].map((e=>e.catch((e=>{consola.error(e)})))))}reload(){for(const e of this.workers)e.close();const e=new NodeDevWorker(++workerIdCtr,this.workerDir,{onClose:(e,t)=>{this.workerError=t;const o=this.workers.indexOf(e);-1!==o&&this.workers.splice(o,1)},onReady:(e,t)=>{this.writeBuildInfo(e,t)}});e.closed||this.workers.unshift(e)}async getWorker(){let e=0;const t=isTest||isCI?100:10;for(;this.building||++e<t;){if((0===this.workers.length||this.buildError)&&!this.building)return;const e=this.workers.find((e=>e.ready));if(e)return e;await new Promise((e=>setTimeout(e,600)))}}writeBuildInfo(e,t){const o=resolve(this.nitro.options.buildDir,"nitro.json"),r={date:(new Date).toJSON(),preset:this.nitro.options.preset,framework:this.nitro.options.framework,versions:{nitro:version},dev:{pid:process.pid,workerAddress:t}};writeFile$1(o,JSON.stringify(r,null,2)).catch((e=>{consola.error(e)}))}createApp(){const e=createApp({onError:async(e,t)=>{const o=this.nitro.options.devErrorHandler||devErrorHandler;return await loadStackTrace(e).catch((()=>{})),o(e,t,{defaultHandler:defaultHandler})}});for(const t of this.nitro.options.devHandlers)e.use(t.route||"/",t.handler);e.use("/_vfs",createVFSHandler(this.nitro));const t=toRouteMatcher(createRouter({routes:this.nitro.options.routeRules}));for(const o of this.nitro.options.publicAssets){const r=joinURL(this.nitro.options.runtimeConfig.app.baseURL,o.baseURL||"/");e.use(r,fromNodeMiddleware(serveStatic(o.dir,{dotfiles:"allow",setHeaders(e,o){o.endsWith(".gz")&&e.setHeader("Content-Encoding","gzip");const r=e.req?._parsedOriginalUrl?.pathname;if(r){const o=defu$1({},...t.matchAll(r).reverse());if(o.headers)for(const[t,r]of Object.entries(o.headers))"cache-control"!==t&&e.appendHeader(t,r)}}}))),o.fallthrough||e.use(r,fromNodeMiddleware(servePlaceholder()))}const o=Object.keys(this.nitro.options.devProxy).sort().reverse();for(const t of o){let o=this.nitro.options.devProxy[t];"string"==typeof o&&(o={target:o});const r=createHTTPProxy(o);e.use(t,eventHandler((e=>r.handleEvent(e))))}return e.use(eventHandler((async e=>{const t=await this.getWorker();return t?t.handleEvent(e):this.#p()}))),e}async handleUpgrade(e,t,o){const r=await this.getWorker();if(!r)throw createError({statusCode:503,message:"No worker available."});return r.handleUpgrade(e,t,o)}#p(){const e=this.buildError||this.workerError;if(e){try{e.unhandled=!1;let t=e.id||e.path;if(t){const o=e.errors?.[0],r=e.location||e.loc||o?.location||o?.loc;r&&(t+=`:${r.line}:${r.column}`),e.stack=(e.stack||"").replace(/(^\s*at\s+.+)/m,`    at ${t}\n$1`)}}catch{}return createError(e)}return new Response(JSON.stringify({error:"Dev server is unavailable.",hint:"Please reload the page and check the console for errors if the issue persists."},null,2),{status:503,statusText:"Dev server is unavailable",headers:{"Content-Type":"application/json","Cache-Control":"no-store",Refresh:"3"}})}}async function prepare(e){await prepareDir(e.options.output.dir),e.options.noPublicDir||await prepareDir(e.options.output.publicDir),e.options.static||await prepareDir(e.options.output.serverDir)}async function prepareDir(e){await fsp.rm(e,{recursive:!0,force:!0}),await fsp.mkdir(e,{recursive:!0})}function defineNitroConfig(e){return e}export{GLOB_SCAN_PATTERN,build,copyPublicAssets,createDevServer,createNitro,defineNitroConfig,listTasks,loadOptions,prepare,prerender,runTask,scanHandlers,scanMiddleware,scanModules,scanPlugins,scanServerRoutes,scanTasks,writeTypes};
//# sourceMappingURL=/sm/965fb9f4225a0b0188c2e52e50c8538a56fe4b0a92596d8754e5bbc579a97aae.map