index.mjs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194
  1. globalThis._importMeta_={url:import.meta.url,env:process.env};import { Server } from 'node:http';
  2. import { tmpdir } from 'node:os';
  3. import { join } from 'node:path';
  4. import { mkdirSync } from 'node:fs';
  5. import { parentPort, threadId } from 'node:worker_threads';
  6. import { defineEventHandler, handleCacheHeaders, splitCookiesString, isEvent, createEvent, getRequestHeader, eventHandler, setHeaders, sendRedirect, proxyRequest, setResponseHeader, send, getResponseStatus, setResponseStatus, setResponseHeaders, getRequestHeaders, createApp, createRouter as createRouter$1, toNodeListener, fetchWithEvent, lazyEventHandler, getQuery as getQuery$1, createError, getResponseStatusText } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/h3@1.10.0/node_modules/h3/dist/index.mjs';
  7. import { getRequestDependencies, getPreloadLinks, getPrefetchLinks, createRenderer } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/vue-bundle-renderer@2.0.0/node_modules/vue-bundle-renderer/dist/runtime.mjs';
  8. import { stringify, uneval } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/devalue@4.3.2/node_modules/devalue/index.js';
  9. import { renderSSRHead } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/@unhead+ssr@1.8.9/node_modules/@unhead/ssr/dist/index.mjs';
  10. import { createFetch as createFetch$1, Headers as Headers$1 } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/ofetch@1.3.3/node_modules/ofetch/dist/node.mjs';
  11. import destr from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/destr@2.0.2/node_modules/destr/dist/index.mjs';
  12. import { createCall, createFetch } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/unenv@1.8.0/node_modules/unenv/runtime/fetch/index.mjs';
  13. import { createHooks } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs';
  14. import { snakeCase } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/scule@1.1.1/node_modules/scule/dist/index.mjs';
  15. import { klona } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs';
  16. import defu, { defuFn } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs';
  17. import { hash } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/ohash@1.1.3/node_modules/ohash/dist/index.mjs';
  18. import { parseURL, withoutBase, joinURL, getQuery, withQuery } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/ufo@1.3.2/node_modules/ufo/dist/index.mjs';
  19. import { createStorage, prefixStorage } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/unstorage@1.10.1/node_modules/unstorage/dist/index.mjs';
  20. import unstorage_47drivers_47fs from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/unstorage@1.10.1/node_modules/unstorage/drivers/fs.mjs';
  21. import { toRouteMatcher, createRouter } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/radix3@1.1.0/node_modules/radix3/dist/index.mjs';
  22. import { version, unref } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/vue@3.4.5_typescript@5.3.3/node_modules/vue/dist/vue.cjs.js';
  23. import { createServerHead as createServerHead$1 } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/unhead@1.8.9/node_modules/unhead/dist/index.mjs';
  24. import { defineHeadPlugin } from 'file:///Users/alvarosabu/Projects/tres/core/node_modules/.pnpm/@unhead+shared@1.8.9/node_modules/@unhead/shared/dist/index.mjs';
  25. const r=Object.create(null),E=e=>globalThis.process?.env||globalThis._importMeta_.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?r:globalThis),s=new Proxy(r,{get(e,o){return E()[o]??r[o]},has(e,o){const i=E();return o in i||o in r},set(e,o,i){const g=E(!0);return g[o]=i,!0},deleteProperty(e,o){if(!o)return !1;const i=E(!0);return delete i[o],!0},ownKeys(){const e=E(!0);return Object.keys(e)}}),t=typeof process<"u"&&process.env&&"development"||"",p=[["APPVEYOR"],["AWS_AMPLIFY","AWS_APP_ID",{ci:!0}],["AZURE_PIPELINES","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"],["AZURE_STATIC","INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN"],["APPCIRCLE","AC_APPCIRCLE"],["BAMBOO","bamboo_planKey"],["BITBUCKET","BITBUCKET_COMMIT"],["BITRISE","BITRISE_IO"],["BUDDY","BUDDY_WORKSPACE_ID"],["BUILDKITE"],["CIRCLE","CIRCLECI"],["CIRRUS","CIRRUS_CI"],["CLOUDFLARE_PAGES","CF_PAGES",{ci:!0}],["CODEBUILD","CODEBUILD_BUILD_ARN"],["CODEFRESH","CF_BUILD_ID"],["DRONE"],["DRONE","DRONE_BUILD_EVENT"],["DSARI"],["GITHUB_ACTIONS"],["GITLAB","GITLAB_CI"],["GITLAB","CI_MERGE_REQUEST_ID"],["GOCD","GO_PIPELINE_LABEL"],["LAYERCI"],["HUDSON","HUDSON_URL"],["JENKINS","JENKINS_URL"],["MAGNUM"],["NETLIFY"],["NETLIFY","NETLIFY_LOCAL",{ci:!1}],["NEVERCODE"],["RENDER"],["SAIL","SAILCI"],["SEMAPHORE"],["SCREWDRIVER"],["SHIPPABLE"],["SOLANO","TDDIUM"],["STRIDER"],["TEAMCITY","TEAMCITY_VERSION"],["TRAVIS"],["VERCEL","NOW_BUILDER"],["VERCEL","VERCEL",{ci:!1}],["VERCEL","VERCEL_ENV",{ci:!1}],["APPCENTER","APPCENTER_BUILD_ID"],["CODESANDBOX","CODESANDBOX_SSE",{ci:!1}],["STACKBLITZ"],["STORMKIT"],["CLEAVR"],["ZEABUR"],["CODESPHERE","CODESPHERE_APP_ID",{ci:!0}],["RAILWAY","RAILWAY_PROJECT_ID"],["RAILWAY","RAILWAY_SERVICE_ID"]];function B(){if(globalThis.process?.env)for(const e of p){const o=e[1]||e[0];if(globalThis.process?.env[o])return {name:e[0].toLowerCase(),...e[2]}}return globalThis.process?.env?.SHELL==="/bin/jsh"&&globalThis.process?.versions?.webcontainer?{name:"stackblitz",ci:!1}:{name:"",ci:!1}}const l=B(),d=l.name;function n(e){return e?e!=="false":!1}const I=globalThis.process?.platform||"",T=n(s.CI)||l.ci!==!1,R=n(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY);n(s.DEBUG);const C=t==="test"||n(s.TEST);n(s.MINIMAL)||T||C||!R;const a=/^win/i.test(I);!n(s.NO_COLOR)&&(n(s.FORCE_COLOR)||(R||a)&&s.TERM!=="dumb"||T);const _=(globalThis.process?.versions?.node||"").replace(/^v/,"")||null;Number(_?.split(".")[0])||null;const W=globalThis.process||Object.create(null),c={versions:{}};new Proxy(W,{get(e,o){if(o==="env")return s;if(o in e)return e[o];if(o in c)return c[o]}});const A=globalThis.process?.release?.name==="node",L=!!globalThis.Bun||!!globalThis.process?.versions?.bun,D=!!globalThis.Deno,O=!!globalThis.fastly,S=!!globalThis.Netlify,N=!!globalThis.EdgeRuntime,u=globalThis.navigator?.userAgent==="Cloudflare-Workers",b=!!globalThis.__lagon__,F=[[S,"netlify"],[N,"edge-light"],[u,"workerd"],[O,"fastly"],[D,"deno"],[L,"bun"],[A,"node"],[b,"lagon"]];function G(){const e=F.find(o=>o[0]);if(e)return {name:e[1]}}const P=G();P?.name||"";
  26. const inlineAppConfig = {
  27. "nuxt": {
  28. "buildId": "dev"
  29. },
  30. "ui": {
  31. "primary": "green",
  32. "gray": "cool",
  33. "colors": [
  34. "red",
  35. "orange",
  36. "amber",
  37. "yellow",
  38. "lime",
  39. "green",
  40. "emerald",
  41. "teal",
  42. "cyan",
  43. "sky",
  44. "blue",
  45. "indigo",
  46. "violet",
  47. "purple",
  48. "fuchsia",
  49. "pink",
  50. "rose",
  51. "primary"
  52. ],
  53. "strategy": "merge"
  54. }
  55. };
  56. const appConfig = defuFn(inlineAppConfig);
  57. const _inlineRuntimeConfig = {
  58. "app": {
  59. "baseURL": "/__tres_devtools",
  60. "buildAssetsDir": "/_nuxt/",
  61. "cdnURL": ""
  62. },
  63. "nitro": {
  64. "envPrefix": "NUXT_",
  65. "routeRules": {
  66. "/__nuxt_error": {
  67. "cache": false
  68. },
  69. "/_nuxt/builds/meta/**": {
  70. "headers": {
  71. "cache-control": "public, max-age=31536000, immutable"
  72. }
  73. },
  74. "/_nuxt/builds/**": {
  75. "headers": {
  76. "cache-control": "public, max-age=1, immutable"
  77. }
  78. }
  79. }
  80. },
  81. "public": {}
  82. };
  83. const ENV_PREFIX = "NITRO_";
  84. const ENV_PREFIX_ALT = _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_";
  85. const _sharedRuntimeConfig = _deepFreeze(
  86. _applyEnv(klona(_inlineRuntimeConfig))
  87. );
  88. function useRuntimeConfig(event) {
  89. if (!event) {
  90. return _sharedRuntimeConfig;
  91. }
  92. if (event.context.nitro.runtimeConfig) {
  93. return event.context.nitro.runtimeConfig;
  94. }
  95. const runtimeConfig = klona(_inlineRuntimeConfig);
  96. _applyEnv(runtimeConfig);
  97. event.context.nitro.runtimeConfig = runtimeConfig;
  98. return runtimeConfig;
  99. }
  100. _deepFreeze(klona(appConfig));
  101. function _getEnv(key) {
  102. const envKey = snakeCase(key).toUpperCase();
  103. return destr(
  104. process.env[ENV_PREFIX + envKey] ?? process.env[ENV_PREFIX_ALT + envKey]
  105. );
  106. }
  107. function _isObject(input) {
  108. return typeof input === "object" && !Array.isArray(input);
  109. }
  110. function _applyEnv(obj, parentKey = "") {
  111. for (const key in obj) {
  112. const subKey = parentKey ? `${parentKey}_${key}` : key;
  113. const envValue = _getEnv(subKey);
  114. if (_isObject(obj[key])) {
  115. if (_isObject(envValue)) {
  116. obj[key] = { ...obj[key], ...envValue };
  117. }
  118. _applyEnv(obj[key], subKey);
  119. } else {
  120. obj[key] = envValue ?? obj[key];
  121. }
  122. }
  123. return obj;
  124. }
  125. function _deepFreeze(object) {
  126. const propNames = Object.getOwnPropertyNames(object);
  127. for (const name of propNames) {
  128. const value = object[name];
  129. if (value && typeof value === "object") {
  130. _deepFreeze(value);
  131. }
  132. }
  133. return Object.freeze(object);
  134. }
  135. new Proxy(/* @__PURE__ */ Object.create(null), {
  136. get: (_, prop) => {
  137. console.warn(
  138. "Please use `useRuntimeConfig()` instead of accessing config directly."
  139. );
  140. const runtimeConfig = useRuntimeConfig();
  141. if (prop in runtimeConfig) {
  142. return runtimeConfig[prop];
  143. }
  144. return void 0;
  145. }
  146. });
  147. const serverAssets = [{"baseName":"server","dir":"/Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client/server/assets"}];
  148. const assets = createStorage();
  149. for (const asset of serverAssets) {
  150. assets.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir }));
  151. }
  152. const storage = createStorage({});
  153. storage.mount('/assets', assets);
  154. storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client","ignore":["**/node_modules/**","**/.git/**"]}));
  155. storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client/server","ignore":["**/node_modules/**","**/.git/**"]}));
  156. storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client/.nuxt","ignore":["**/node_modules/**","**/.git/**"]}));
  157. storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client/.nuxt/cache","ignore":["**/node_modules/**","**/.git/**"]}));
  158. storage.mount('data', unstorage_47drivers_47fs({"driver":"fs","base":"/Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client/.data/kv","ignore":["**/node_modules/**","**/.git/**"]}));
  159. function useStorage(base = "") {
  160. return base ? prefixStorage(storage, base) : storage;
  161. }
  162. const defaultCacheOptions = {
  163. name: "_",
  164. base: "/cache",
  165. swr: true,
  166. maxAge: 1
  167. };
  168. function defineCachedFunction(fn, opts = {}) {
  169. opts = { ...defaultCacheOptions, ...opts };
  170. const pending = {};
  171. const group = opts.group || "nitro/functions";
  172. const name = opts.name || fn.name || "_";
  173. const integrity = opts.integrity || hash([fn, opts]);
  174. const validate = opts.validate || ((entry) => entry.value !== void 0);
  175. async function get(key, resolver, shouldInvalidateCache, event) {
  176. const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index");
  177. const entry = await useStorage().getItem(cacheKey) || {};
  178. const ttl = (opts.maxAge ?? opts.maxAge ?? 0) * 1e3;
  179. if (ttl) {
  180. entry.expires = Date.now() + ttl;
  181. }
  182. const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false;
  183. const _resolve = async () => {
  184. const isPending = pending[key];
  185. if (!isPending) {
  186. if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) {
  187. entry.value = void 0;
  188. entry.integrity = void 0;
  189. entry.mtime = void 0;
  190. entry.expires = void 0;
  191. }
  192. pending[key] = Promise.resolve(resolver());
  193. }
  194. try {
  195. entry.value = await pending[key];
  196. } catch (error) {
  197. if (!isPending) {
  198. delete pending[key];
  199. }
  200. throw error;
  201. }
  202. if (!isPending) {
  203. entry.mtime = Date.now();
  204. entry.integrity = integrity;
  205. delete pending[key];
  206. if (validate(entry) !== false) {
  207. const promise = useStorage().setItem(cacheKey, entry).catch((error) => {
  208. console.error(`[nitro] [cache] Cache write error.`, error);
  209. useNitroApp().captureError(error, { event, tags: ["cache"] });
  210. });
  211. if (event && event.waitUntil) {
  212. event.waitUntil(promise);
  213. }
  214. }
  215. }
  216. };
  217. const _resolvePromise = expired ? _resolve() : Promise.resolve();
  218. if (entry.value === void 0) {
  219. await _resolvePromise;
  220. } else if (expired && event && event.waitUntil) {
  221. event.waitUntil(_resolvePromise);
  222. }
  223. if (opts.swr && validate(entry) !== false) {
  224. _resolvePromise.catch((error) => {
  225. console.error(`[nitro] [cache] SWR handler error.`, error);
  226. useNitroApp().captureError(error, { event, tags: ["cache"] });
  227. });
  228. return entry;
  229. }
  230. return _resolvePromise.then(() => entry);
  231. }
  232. return async (...args) => {
  233. const shouldBypassCache = opts.shouldBypassCache?.(...args);
  234. if (shouldBypassCache) {
  235. return fn(...args);
  236. }
  237. const key = await (opts.getKey || getKey)(...args);
  238. const shouldInvalidateCache = opts.shouldInvalidateCache?.(...args);
  239. const entry = await get(
  240. key,
  241. () => fn(...args),
  242. shouldInvalidateCache,
  243. args[0] && isEvent(args[0]) ? args[0] : void 0
  244. );
  245. let value = entry.value;
  246. if (opts.transform) {
  247. value = await opts.transform(entry, ...args) || value;
  248. }
  249. return value;
  250. };
  251. }
  252. const cachedFunction = defineCachedFunction;
  253. function getKey(...args) {
  254. return args.length > 0 ? hash(args, {}) : "";
  255. }
  256. function escapeKey(key) {
  257. return String(key).replace(/\W/g, "");
  258. }
  259. function defineCachedEventHandler(handler, opts = defaultCacheOptions) {
  260. const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort();
  261. const _opts = {
  262. ...opts,
  263. getKey: async (event) => {
  264. const customKey = await opts.getKey?.(event);
  265. if (customKey) {
  266. return escapeKey(customKey);
  267. }
  268. const _path = event.node.req.originalUrl || event.node.req.url || event.path;
  269. const _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index";
  270. const _hashedPath = `${_pathname}.${hash(_path)}`;
  271. const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`);
  272. return [_hashedPath, ..._headers].join(":");
  273. },
  274. validate: (entry) => {
  275. if (!entry.value) {
  276. return false;
  277. }
  278. if (entry.value.code >= 400) {
  279. return false;
  280. }
  281. if (entry.value.body === void 0) {
  282. return false;
  283. }
  284. if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") {
  285. return false;
  286. }
  287. return true;
  288. },
  289. group: opts.group || "nitro/handlers",
  290. integrity: opts.integrity || hash([handler, opts])
  291. };
  292. const _cachedHandler = cachedFunction(
  293. async (incomingEvent) => {
  294. const variableHeaders = {};
  295. for (const header of variableHeaderNames) {
  296. variableHeaders[header] = incomingEvent.node.req.headers[header];
  297. }
  298. const reqProxy = cloneWithProxy(incomingEvent.node.req, {
  299. headers: variableHeaders
  300. });
  301. const resHeaders = {};
  302. let _resSendBody;
  303. const resProxy = cloneWithProxy(incomingEvent.node.res, {
  304. statusCode: 200,
  305. writableEnded: false,
  306. writableFinished: false,
  307. headersSent: false,
  308. closed: false,
  309. getHeader(name) {
  310. return resHeaders[name];
  311. },
  312. setHeader(name, value) {
  313. resHeaders[name] = value;
  314. return this;
  315. },
  316. getHeaderNames() {
  317. return Object.keys(resHeaders);
  318. },
  319. hasHeader(name) {
  320. return name in resHeaders;
  321. },
  322. removeHeader(name) {
  323. delete resHeaders[name];
  324. },
  325. getHeaders() {
  326. return resHeaders;
  327. },
  328. end(chunk, arg2, arg3) {
  329. if (typeof chunk === "string") {
  330. _resSendBody = chunk;
  331. }
  332. if (typeof arg2 === "function") {
  333. arg2();
  334. }
  335. if (typeof arg3 === "function") {
  336. arg3();
  337. }
  338. return this;
  339. },
  340. write(chunk, arg2, arg3) {
  341. if (typeof chunk === "string") {
  342. _resSendBody = chunk;
  343. }
  344. if (typeof arg2 === "function") {
  345. arg2();
  346. }
  347. if (typeof arg3 === "function") {
  348. arg3();
  349. }
  350. return this;
  351. },
  352. writeHead(statusCode, headers2) {
  353. this.statusCode = statusCode;
  354. if (headers2) {
  355. for (const header in headers2) {
  356. this.setHeader(header, headers2[header]);
  357. }
  358. }
  359. return this;
  360. }
  361. });
  362. const event = createEvent(reqProxy, resProxy);
  363. event.context = incomingEvent.context;
  364. const body = await handler(event) || _resSendBody;
  365. const headers = event.node.res.getHeaders();
  366. headers.etag = String(
  367. headers.Etag || headers.etag || `W/"${hash(body)}"`
  368. );
  369. headers["last-modified"] = String(
  370. headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString()
  371. );
  372. const cacheControl = [];
  373. if (opts.swr) {
  374. if (opts.maxAge) {
  375. cacheControl.push(`s-maxage=${opts.maxAge}`);
  376. }
  377. if (opts.staleMaxAge) {
  378. cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
  379. } else {
  380. cacheControl.push("stale-while-revalidate");
  381. }
  382. } else if (opts.maxAge) {
  383. cacheControl.push(`max-age=${opts.maxAge}`);
  384. }
  385. if (cacheControl.length > 0) {
  386. headers["cache-control"] = cacheControl.join(", ");
  387. }
  388. const cacheEntry = {
  389. code: event.node.res.statusCode,
  390. headers,
  391. body
  392. };
  393. return cacheEntry;
  394. },
  395. _opts
  396. );
  397. return defineEventHandler(async (event) => {
  398. if (opts.headersOnly) {
  399. if (handleCacheHeaders(event, { maxAge: opts.maxAge })) {
  400. return;
  401. }
  402. return handler(event);
  403. }
  404. const response = await _cachedHandler(event);
  405. if (event.node.res.headersSent || event.node.res.writableEnded) {
  406. return response.body;
  407. }
  408. if (handleCacheHeaders(event, {
  409. modifiedTime: new Date(response.headers["last-modified"]),
  410. etag: response.headers.etag,
  411. maxAge: opts.maxAge
  412. })) {
  413. return;
  414. }
  415. event.node.res.statusCode = response.code;
  416. for (const name in response.headers) {
  417. const value = response.headers[name];
  418. if (name === "set-cookie") {
  419. event.node.res.appendHeader(
  420. name,
  421. splitCookiesString(value)
  422. );
  423. } else {
  424. event.node.res.setHeader(name, value);
  425. }
  426. }
  427. return response.body;
  428. });
  429. }
  430. function cloneWithProxy(obj, overrides) {
  431. return new Proxy(obj, {
  432. get(target, property, receiver) {
  433. if (property in overrides) {
  434. return overrides[property];
  435. }
  436. return Reflect.get(target, property, receiver);
  437. },
  438. set(target, property, value, receiver) {
  439. if (property in overrides) {
  440. overrides[property] = value;
  441. return true;
  442. }
  443. return Reflect.set(target, property, value, receiver);
  444. }
  445. });
  446. }
  447. const cachedEventHandler = defineCachedEventHandler;
  448. function hasReqHeader(event, name, includes) {
  449. const value = getRequestHeader(event, name);
  450. return value && typeof value === "string" && value.toLowerCase().includes(includes);
  451. }
  452. function isJsonRequest(event) {
  453. if (hasReqHeader(event, "accept", "text/html")) {
  454. return false;
  455. }
  456. return hasReqHeader(event, "accept", "application/json") || hasReqHeader(event, "user-agent", "curl/") || hasReqHeader(event, "user-agent", "httpie/") || hasReqHeader(event, "sec-fetch-mode", "cors") || event.path.startsWith("/api/") || event.path.endsWith(".json");
  457. }
  458. function normalizeError(error) {
  459. const cwd = typeof process.cwd === "function" ? process.cwd() : "/";
  460. const stack = (error.stack || "").split("\n").splice(1).filter((line) => line.includes("at ")).map((line) => {
  461. const text = line.replace(cwd + "/", "./").replace("webpack:/", "").replace("file://", "").trim();
  462. return {
  463. text,
  464. internal: line.includes("node_modules") && !line.includes(".cache") || line.includes("internal") || line.includes("new Promise")
  465. };
  466. });
  467. const statusCode = error.statusCode || 500;
  468. const statusMessage = error.statusMessage ?? (statusCode === 404 ? "Not Found" : "");
  469. const message = error.message || error.toString();
  470. return {
  471. stack,
  472. statusCode,
  473. statusMessage,
  474. message
  475. };
  476. }
  477. function _captureError(error, type) {
  478. console.error(`[nitro] [${type}]`, error);
  479. useNitroApp().captureError(error, { tags: [type] });
  480. }
  481. function trapUnhandledNodeErrors() {
  482. process.on(
  483. "unhandledRejection",
  484. (error) => _captureError(error, "unhandledRejection")
  485. );
  486. process.on(
  487. "uncaughtException",
  488. (error) => _captureError(error, "uncaughtException")
  489. );
  490. }
  491. function joinHeaders(value) {
  492. return Array.isArray(value) ? value.join(", ") : String(value);
  493. }
  494. function normalizeFetchResponse(response) {
  495. if (!response.headers.has("set-cookie")) {
  496. return response;
  497. }
  498. return new Response(response.body, {
  499. status: response.status,
  500. statusText: response.statusText,
  501. headers: normalizeCookieHeaders(response.headers)
  502. });
  503. }
  504. function normalizeCookieHeader(header = "") {
  505. return splitCookiesString(joinHeaders(header));
  506. }
  507. function normalizeCookieHeaders(headers) {
  508. const outgoingHeaders = new Headers();
  509. for (const [name, header] of headers) {
  510. if (name === "set-cookie") {
  511. for (const cookie of normalizeCookieHeader(header)) {
  512. outgoingHeaders.append("set-cookie", cookie);
  513. }
  514. } else {
  515. outgoingHeaders.set(name, joinHeaders(header));
  516. }
  517. }
  518. return outgoingHeaders;
  519. }
  520. const config = useRuntimeConfig();
  521. const _routeRulesMatcher = toRouteMatcher(
  522. createRouter({ routes: config.nitro.routeRules })
  523. );
  524. function createRouteRulesHandler(ctx) {
  525. return eventHandler((event) => {
  526. const routeRules = getRouteRules(event);
  527. if (routeRules.headers) {
  528. setHeaders(event, routeRules.headers);
  529. }
  530. if (routeRules.redirect) {
  531. return sendRedirect(
  532. event,
  533. routeRules.redirect.to,
  534. routeRules.redirect.statusCode
  535. );
  536. }
  537. if (routeRules.proxy) {
  538. let target = routeRules.proxy.to;
  539. if (target.endsWith("/**")) {
  540. let targetPath = event.path;
  541. const strpBase = routeRules.proxy._proxyStripBase;
  542. if (strpBase) {
  543. targetPath = withoutBase(targetPath, strpBase);
  544. }
  545. target = joinURL(target.slice(0, -3), targetPath);
  546. } else if (event.path.includes("?")) {
  547. const query = getQuery(event.path);
  548. target = withQuery(target, query);
  549. }
  550. return proxyRequest(event, target, {
  551. fetch: ctx.localFetch,
  552. ...routeRules.proxy
  553. });
  554. }
  555. });
  556. }
  557. function getRouteRules(event) {
  558. event.context._nitro = event.context._nitro || {};
  559. if (!event.context._nitro.routeRules) {
  560. event.context._nitro.routeRules = getRouteRulesForPath(
  561. withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL)
  562. );
  563. }
  564. return event.context._nitro.routeRules;
  565. }
  566. function getRouteRulesForPath(path) {
  567. return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
  568. }
  569. const script = "\"use strict\";(()=>{const a=window,e=document.documentElement,m=[\"dark\",\"light\"],c=window&&window.localStorage&&window.localStorage.getItem&&window.localStorage.getItem(\"nuxt-color-mode\")||\"system\";let n=c===\"system\"?d():c;const l=e.getAttribute(\"data-color-mode-forced\");l&&(n=l),i(n),a[\"__NUXT_COLOR_MODE__\"]={preference:c,value:n,getColorScheme:d,addColorScheme:i,removeColorScheme:f};function i(o){const t=\"\"+o+\"\",s=\"\";e.classList?e.classList.add(t):e.className+=\" \"+t,s&&e.setAttribute(\"data-\"+s,o)}function f(o){const t=\"\"+o+\"\",s=\"\";e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp(t,\"g\"),\"\"),s&&e.removeAttribute(\"data-\"+s)}function r(o){return a.matchMedia(\"(prefers-color-scheme\"+o+\")\")}function d(){if(a.matchMedia&&r(\"\").media!==\"not all\"){for(const o of m)if(r(\":\"+o).matches)return o}return\"light\"}})();\n";
  570. const _tzLFA4BtoX = (function(nitro) {
  571. nitro.hooks.hook("render:html", (htmlContext) => {
  572. htmlContext.head.push(`<script>${script}<\/script>`);
  573. });
  574. });
  575. const plugins = [
  576. _tzLFA4BtoX
  577. ];
  578. function defineRenderHandler(handler) {
  579. return eventHandler(async (event) => {
  580. if (event.path.endsWith("/favicon.ico")) {
  581. setResponseHeader(event, "Content-Type", "image/x-icon");
  582. return send(
  583. event,
  584. "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
  585. );
  586. }
  587. const response = await handler(event);
  588. if (!response) {
  589. const _currentStatus = getResponseStatus(event);
  590. setResponseStatus(event, _currentStatus === 200 ? 500 : _currentStatus);
  591. return send(
  592. event,
  593. "No response returned from render handler: " + event.path
  594. );
  595. }
  596. const nitroApp = useNitroApp();
  597. await nitroApp.hooks.callHook("render:response", response, { event });
  598. if (response.headers) {
  599. setResponseHeaders(event, response.headers);
  600. }
  601. if (response.statusCode || response.statusMessage) {
  602. setResponseStatus(event, response.statusCode, response.statusMessage);
  603. }
  604. return response.body;
  605. });
  606. }
  607. const errorHandler = (async function errorhandler(error, event) {
  608. const { stack, statusCode, statusMessage, message } = normalizeError(error);
  609. const errorObject = {
  610. url: event.path,
  611. statusCode,
  612. statusMessage,
  613. message,
  614. stack: statusCode !== 404 ? `<pre>${stack.map((i) => `<span class="stack${i.internal ? " internal" : ""}">${i.text}</span>`).join("\n")}</pre>` : "",
  615. // TODO: check and validate error.data for serialisation into query
  616. data: error.data
  617. };
  618. if (error.unhandled || error.fatal) {
  619. const tags = [
  620. "[nuxt]",
  621. "[request error]",
  622. error.unhandled && "[unhandled]",
  623. error.fatal && "[fatal]",
  624. Number(errorObject.statusCode) !== 200 && `[${errorObject.statusCode}]`
  625. ].filter(Boolean).join(" ");
  626. console.error(tags, errorObject.message + "\n" + stack.map((l) => " " + l.text).join(" \n"));
  627. }
  628. if (event.handled) {
  629. return;
  630. }
  631. setResponseStatus(event, errorObject.statusCode !== 200 && errorObject.statusCode || 500, errorObject.statusMessage);
  632. if (isJsonRequest(event)) {
  633. setResponseHeader(event, "Content-Type", "application/json");
  634. return send(event, JSON.stringify(errorObject));
  635. }
  636. const reqHeaders = getRequestHeaders(event);
  637. const isRenderingError = event.path.startsWith("/__nuxt_error") || !!reqHeaders["x-nuxt-error"];
  638. const res = isRenderingError ? null : await useNitroApp().localFetch(
  639. withQuery(joinURL(useRuntimeConfig().app.baseURL, "/__nuxt_error"), errorObject),
  640. {
  641. headers: { ...reqHeaders, "x-nuxt-error": "true" },
  642. redirect: "manual"
  643. }
  644. ).catch(() => null);
  645. if (!res) {
  646. const { template } = await Promise.resolve().then(function () { return errorDev; }) ;
  647. {
  648. errorObject.description = errorObject.message;
  649. }
  650. if (event.handled) {
  651. return;
  652. }
  653. setResponseHeader(event, "Content-Type", "text/html;charset=UTF-8");
  654. return send(event, template(errorObject));
  655. }
  656. const html = await res.text();
  657. if (event.handled) {
  658. return;
  659. }
  660. for (const [header, value] of res.headers.entries()) {
  661. setResponseHeader(event, header, value);
  662. }
  663. setResponseStatus(event, res.status && res.status !== 200 ? res.status : void 0, res.statusText);
  664. return send(event, html);
  665. });
  666. const _lazy_GrHsm2 = () => Promise.resolve().then(function () { return renderer$1; });
  667. const handlers = [
  668. { route: '/__nuxt_error', handler: _lazy_GrHsm2, lazy: true, middleware: false, method: undefined },
  669. { route: '/**', handler: _lazy_GrHsm2, lazy: true, middleware: false, method: undefined }
  670. ];
  671. function createNitroApp() {
  672. const config = useRuntimeConfig();
  673. const hooks = createHooks();
  674. const captureError = (error, context = {}) => {
  675. const promise = hooks.callHookParallel("error", error, context).catch((_err) => {
  676. console.error("Error while capturing another error", _err);
  677. });
  678. if (context.event && isEvent(context.event)) {
  679. const errors = context.event.context.nitro?.errors;
  680. if (errors) {
  681. errors.push({ error, context });
  682. }
  683. if (context.event.waitUntil) {
  684. context.event.waitUntil(promise);
  685. }
  686. }
  687. };
  688. const h3App = createApp({
  689. debug: destr(true),
  690. onError: (error, event) => {
  691. captureError(error, { event, tags: ["request"] });
  692. return errorHandler(error, event);
  693. },
  694. onRequest: async (event) => {
  695. await nitroApp.hooks.callHook("request", event).catch((error) => {
  696. captureError(error, { event, tags: ["request"] });
  697. });
  698. },
  699. onBeforeResponse: async (event, response) => {
  700. await nitroApp.hooks.callHook("beforeResponse", event, response).catch((error) => {
  701. captureError(error, { event, tags: ["request", "response"] });
  702. });
  703. },
  704. onAfterResponse: async (event, response) => {
  705. await nitroApp.hooks.callHook("afterResponse", event, response).catch((error) => {
  706. captureError(error, { event, tags: ["request", "response"] });
  707. });
  708. }
  709. });
  710. const router = createRouter$1({
  711. preemptive: true
  712. });
  713. const localCall = createCall(toNodeListener(h3App));
  714. const _localFetch = createFetch(localCall, globalThis.fetch);
  715. const localFetch = (input, init) => _localFetch(input, init).then(
  716. (response) => normalizeFetchResponse(response)
  717. );
  718. const $fetch = createFetch$1({
  719. fetch: localFetch,
  720. Headers: Headers$1,
  721. defaults: { baseURL: config.app.baseURL }
  722. });
  723. globalThis.$fetch = $fetch;
  724. h3App.use(createRouteRulesHandler({ localFetch }));
  725. h3App.use(
  726. eventHandler((event) => {
  727. event.context.nitro = event.context.nitro || { errors: [] };
  728. const envContext = event.node.req?.__unenv__;
  729. if (envContext) {
  730. Object.assign(event.context, envContext);
  731. }
  732. event.fetch = (req, init) => fetchWithEvent(event, req, init, { fetch: localFetch });
  733. event.$fetch = (req, init) => fetchWithEvent(event, req, init, {
  734. fetch: $fetch
  735. });
  736. event.waitUntil = (promise) => {
  737. if (!event.context.nitro._waitUntilPromises) {
  738. event.context.nitro._waitUntilPromises = [];
  739. }
  740. event.context.nitro._waitUntilPromises.push(promise);
  741. if (envContext?.waitUntil) {
  742. envContext.waitUntil(promise);
  743. }
  744. };
  745. event.captureError = (error, context) => {
  746. captureError(error, { event, ...context });
  747. };
  748. })
  749. );
  750. for (const h of handlers) {
  751. let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
  752. if (h.middleware || !h.route) {
  753. const middlewareBase = (config.app.baseURL + (h.route || "/")).replace(
  754. /\/+/g,
  755. "/"
  756. );
  757. h3App.use(middlewareBase, handler);
  758. } else {
  759. const routeRules = getRouteRulesForPath(
  760. h.route.replace(/:\w+|\*\*/g, "_")
  761. );
  762. if (routeRules.cache) {
  763. handler = cachedEventHandler(handler, {
  764. group: "nitro/routes",
  765. ...routeRules.cache
  766. });
  767. }
  768. router.use(h.route, handler, h.method);
  769. }
  770. }
  771. h3App.use(config.app.baseURL, router.handler);
  772. const app = {
  773. hooks,
  774. h3App,
  775. router,
  776. localCall,
  777. localFetch,
  778. captureError
  779. };
  780. for (const plugin of plugins) {
  781. try {
  782. plugin(app);
  783. } catch (err) {
  784. captureError(err, { tags: ["plugin"] });
  785. throw err;
  786. }
  787. }
  788. return app;
  789. }
  790. const nitroApp = createNitroApp();
  791. const useNitroApp = () => nitroApp;
  792. const server = new Server(toNodeListener(nitroApp.h3App));
  793. function getAddress() {
  794. if (d === "stackblitz" || process.env.NITRO_NO_UNIX_SOCKET || process.versions.bun) {
  795. return 0;
  796. }
  797. const socketName = `worker-${process.pid}-${threadId}.sock`;
  798. if (a) {
  799. return join("\\\\.\\pipe\\nitro", socketName);
  800. } else {
  801. const socketDir = join(tmpdir(), "nitro");
  802. mkdirSync(socketDir, { recursive: true });
  803. return join(socketDir, socketName);
  804. }
  805. }
  806. const listenAddress = getAddress();
  807. server.listen(listenAddress, () => {
  808. const _address = server.address();
  809. parentPort.postMessage({
  810. event: "listen",
  811. address: typeof _address === "string" ? { socketPath: _address } : { host: "localhost", port: _address.port }
  812. });
  813. });
  814. trapUnhandledNodeErrors();
  815. async function onShutdown(signal) {
  816. await nitroApp.hooks.callHook("close");
  817. }
  818. parentPort.on("message", async (msg) => {
  819. if (msg && msg.event === "shutdown") {
  820. await onShutdown();
  821. parentPort.postMessage({ event: "exit" });
  822. }
  823. });
  824. const _messages = {"appName":"Nuxt","version":"","statusCode":500,"statusMessage":"Server error","description":"An error occurred in the application and the page could not be served. If you are the application owner, check your server logs for details.","stack":""};
  825. const _render = function({ messages }) {
  826. var __t, __p = '';
  827. __p += '<!DOCTYPE html><html><head><title>' +
  828. ((__t = ( messages.statusCode )) == null ? '' : __t) +
  829. ' - ' +
  830. ((__t = ( messages.statusMessage )) == null ? '' : __t) +
  831. ' | ' +
  832. ((__t = ( messages.appName )) == null ? '' : __t) +
  833. '</title><meta charset="utf-8"><meta content="width=device-width,initial-scale=1,minimum-scale=1" name="viewport"><style>.spotlight{background:linear-gradient(45deg, #00DC82 0%, #36E4DA 50%, #0047E1 100%);opacity:0.8;filter:blur(30vh);height:60vh;bottom:-40vh}*,:before,:after{-webkit-box-sizing:border-box;box-sizing:border-box;border-width:0;border-style:solid;border-color:#e0e0e0}*{--tw-ring-inset:var(--tw-empty, );--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(14, 165, 233, .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000}:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{margin:0;font-family:inherit;line-height:inherit}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5}h1,p,pre{margin:0}h1{font-size:inherit;font-weight:inherit}pre{font-size:1em;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-black\\/5{--tw-bg-opacity:.05;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.flex{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;-webkit-flex:1 1 0%;flex:1 1 0%}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.font-medium{font-weight:500}.font-light{font-weight:300}.h-auto{height:auto}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-6xl{font-size:3.75rem;line-height:1}.leading-tight{line-height:1.25}.mb-8{margin-bottom:2rem}.mb-6{margin-bottom:1.5rem}.min-h-screen{min-height:100vh}.overflow-y-auto{overflow-y:auto}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.pt-14{padding-top:3.5rem}.fixed{position:fixed}.left-0{left:0}.right-0{right:0}.text-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.z-10{z-index:10}@media (min-width: 640px){.sm\\:text-8xl{font-size:6rem;line-height:1}.sm\\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (prefers-color-scheme: dark){.dark\\:bg-black{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.dark\\:bg-white\\/10{--tw-bg-opacity:.1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.dark\\:text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}}</style><script>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll(\'link[rel="modulepreload"]\'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function s(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=s(e);fetch(e.href,r)}})();</script></head><body class="font-sans antialiased bg-white px-10 pt-14 dark:bg-black text-black dark:text-white min-h-screen flex flex-col"><div class="fixed left-0 right-0 spotlight"></div><h1 class="text-6xl sm:text-8xl font-medium mb-6">' +
  834. ((__t = ( messages.statusCode )) == null ? '' : __t) +
  835. '</h1><p class="text-xl sm:text-2xl font-light mb-8 leading-tight">' +
  836. ((__t = ( messages.description )) == null ? '' : __t) +
  837. '</p><div class="bg-white rounded-t-md bg-black/5 dark:bg-white/10 flex-1 overflow-y-auto h-auto"><pre class="text-xl font-light leading-tight z-10 p-8">' +
  838. ((__t = ( messages.stack )) == null ? '' : __t) +
  839. '</pre></div></body></html>';
  840. return __p
  841. };
  842. const _template = (messages) => _render({ messages: { ..._messages, ...messages } });
  843. const template$1 = _template;
  844. const errorDev = /*#__PURE__*/Object.freeze({
  845. __proto__: null,
  846. template: template$1
  847. });
  848. const Vue3 = version.startsWith("3");
  849. function resolveUnref(r) {
  850. return typeof r === "function" ? r() : unref(r);
  851. }
  852. function resolveUnrefHeadInput(ref, lastKey = "") {
  853. if (ref instanceof Promise)
  854. return ref;
  855. const root = resolveUnref(ref);
  856. if (!ref || !root)
  857. return root;
  858. if (Array.isArray(root))
  859. return root.map((r) => resolveUnrefHeadInput(r, lastKey));
  860. if (typeof root === "object") {
  861. return Object.fromEntries(
  862. Object.entries(root).map(([k, v]) => {
  863. if (k === "titleTemplate" || k.startsWith("on"))
  864. return [k, unref(v)];
  865. return [k, resolveUnrefHeadInput(v, k)];
  866. })
  867. );
  868. }
  869. return root;
  870. }
  871. const VueReactivityPlugin = defineHeadPlugin({
  872. hooks: {
  873. "entries:resolve": function(ctx) {
  874. for (const entry of ctx.entries)
  875. entry.resolvedInput = resolveUnrefHeadInput(entry.input);
  876. }
  877. }
  878. });
  879. const headSymbol = "usehead";
  880. function vueInstall(head) {
  881. const plugin = {
  882. install(app) {
  883. if (Vue3) {
  884. app.config.globalProperties.$unhead = head;
  885. app.config.globalProperties.$head = head;
  886. app.provide(headSymbol, head);
  887. }
  888. }
  889. };
  890. return plugin.install;
  891. }
  892. function createServerHead(options = {}) {
  893. const head = createServerHead$1(options);
  894. head.use(VueReactivityPlugin);
  895. head.install = vueInstall(head);
  896. return head;
  897. }
  898. const unheadPlugins = [];
  899. const appHead = {"meta":[{"name":"viewport","content":"width=device-width, initial-scale=1"},{"charset":"utf-8"}],"link":[],"style":[],"script":[],"noscript":[]};
  900. const appRootId = "__nuxt";
  901. const appRootTag = "div";
  902. function buildAssetsDir() {
  903. return useRuntimeConfig().app.buildAssetsDir;
  904. }
  905. function buildAssetsURL(...path) {
  906. return joinURL(publicAssetsURL(), buildAssetsDir(), ...path);
  907. }
  908. function publicAssetsURL(...path) {
  909. const app = useRuntimeConfig().app;
  910. const publicBase = app.cdnURL || app.baseURL;
  911. return path.length ? joinURL(publicBase, ...path) : publicBase;
  912. }
  913. globalThis.__buildAssetsURL = buildAssetsURL;
  914. globalThis.__publicAssetsURL = publicAssetsURL;
  915. const getClientManifest = () => import('file:///Users/alvarosabu/Projects/tres/core/plugins/vite-plugin-tres/client/.nuxt/dist/server/client.manifest.mjs').then((r) => r.default || r).then((r) => typeof r === "function" ? r() : r);
  916. const getSSRStyles = lazyCachedFunction(() => Promise.resolve().then(function () { return styles$1; }).then((r) => r.default || r));
  917. const getSPARenderer = lazyCachedFunction(async () => {
  918. const manifest = await getClientManifest();
  919. const spaTemplate = await Promise.resolve().then(function () { return _virtual__spaTemplate; }).then((r) => r.template).catch(() => "");
  920. const options = {
  921. manifest,
  922. renderToString: () => `<${appRootTag}${` id="${appRootId}"` }>${spaTemplate}</${appRootTag}>`,
  923. buildAssetsURL
  924. };
  925. const renderer = createRenderer(() => () => {
  926. }, options);
  927. const result = await renderer.renderToString({});
  928. const renderToString = (ssrContext) => {
  929. const config = useRuntimeConfig();
  930. ssrContext.modules = ssrContext.modules || /* @__PURE__ */ new Set();
  931. ssrContext.payload = {
  932. _errors: {},
  933. serverRendered: false,
  934. data: {},
  935. state: {},
  936. once: /* @__PURE__ */ new Set()
  937. };
  938. ssrContext.config = {
  939. public: config.public,
  940. app: config.app
  941. };
  942. return Promise.resolve(result);
  943. };
  944. return {
  945. rendererContext: renderer.rendererContext,
  946. renderToString
  947. };
  948. });
  949. const PAYLOAD_URL_RE = /\/_payload(\.[a-zA-Z0-9]+)?.json(\?.*)?$/ ;
  950. const renderer = defineRenderHandler(async (event) => {
  951. const nitroApp = useNitroApp();
  952. const ssrError = event.path.startsWith("/__nuxt_error") ? getQuery$1(event) : null;
  953. if (ssrError && ssrError.statusCode) {
  954. ssrError.statusCode = parseInt(ssrError.statusCode);
  955. }
  956. if (ssrError && !("__unenv__" in event.node.req)) {
  957. throw createError({
  958. statusCode: 404,
  959. statusMessage: "Page Not Found: /__nuxt_error"
  960. });
  961. }
  962. const islandContext = void 0;
  963. let url = ssrError?.url || islandContext?.url || event.path;
  964. const isRenderingPayload = PAYLOAD_URL_RE.test(url) && !islandContext;
  965. if (isRenderingPayload) {
  966. url = url.substring(0, url.lastIndexOf("/")) || "/";
  967. event._path = url;
  968. event.node.req.url = url;
  969. }
  970. const routeOptions = getRouteRules(event);
  971. const head = createServerHead({
  972. plugins: unheadPlugins
  973. });
  974. const headEntryOptions = { mode: "server" };
  975. head.push(appHead, headEntryOptions);
  976. const ssrContext = {
  977. url,
  978. event,
  979. runtimeConfig: useRuntimeConfig(),
  980. noSSR: !!true ,
  981. head,
  982. error: !!ssrError,
  983. nuxt: void 0,
  984. /* NuxtApp */
  985. payload: ssrError ? { error: ssrError } : {},
  986. _payloadReducers: {},
  987. islandContext
  988. };
  989. const renderer = await getSPARenderer() ;
  990. const _rendered = await renderer.renderToString(ssrContext).catch(async (error) => {
  991. if (ssrContext._renderResponse && error.message === "skipping render") {
  992. return {};
  993. }
  994. const _err = !ssrError && ssrContext.payload?.error || error;
  995. await ssrContext.nuxt?.hooks.callHook("app:error", _err);
  996. throw _err;
  997. });
  998. await ssrContext.nuxt?.hooks.callHook("app:rendered", { ssrContext, renderResult: _rendered });
  999. if (ssrContext._renderResponse) {
  1000. return ssrContext._renderResponse;
  1001. }
  1002. if (ssrContext.payload?.error && !ssrError) {
  1003. throw ssrContext.payload.error;
  1004. }
  1005. if (isRenderingPayload) {
  1006. const response2 = renderPayloadResponse(ssrContext);
  1007. return response2;
  1008. }
  1009. const inlinedStyles = Boolean(islandContext) ? await renderInlineStyles(ssrContext.modules ?? ssrContext._registeredComponents ?? []) : [];
  1010. const NO_SCRIPTS = routeOptions.experimentalNoScripts;
  1011. const { styles, scripts } = getRequestDependencies(ssrContext, renderer.rendererContext);
  1012. head.push({ style: inlinedStyles });
  1013. head.push({
  1014. link: Object.values(styles).map(
  1015. (resource) => ({ rel: "stylesheet", href: renderer.rendererContext.buildAssetsURL(resource.file) })
  1016. )
  1017. }, headEntryOptions);
  1018. if (!NO_SCRIPTS) {
  1019. head.push({
  1020. link: getPreloadLinks(ssrContext, renderer.rendererContext)
  1021. }, headEntryOptions);
  1022. head.push({
  1023. link: getPrefetchLinks(ssrContext, renderer.rendererContext)
  1024. }, headEntryOptions);
  1025. head.push({
  1026. script: renderPayloadJsonScript({ id: "__NUXT_DATA__", ssrContext, data: ssrContext.payload })
  1027. }, {
  1028. ...headEntryOptions,
  1029. // this should come before another end of body scripts
  1030. tagPosition: "bodyClose",
  1031. tagPriority: "high"
  1032. });
  1033. }
  1034. if (!routeOptions.experimentalNoScripts) {
  1035. head.push({
  1036. script: Object.values(scripts).map((resource) => ({
  1037. type: resource.module ? "module" : null,
  1038. src: renderer.rendererContext.buildAssetsURL(resource.file),
  1039. defer: resource.module ? null : true,
  1040. crossorigin: ""
  1041. }))
  1042. }, headEntryOptions);
  1043. }
  1044. const { headTags, bodyTags, bodyTagsOpen, htmlAttrs, bodyAttrs } = await renderSSRHead(head);
  1045. const htmlContext = {
  1046. island: Boolean(islandContext),
  1047. htmlAttrs: htmlAttrs ? [htmlAttrs] : [],
  1048. head: normalizeChunks([headTags, ssrContext.styles]),
  1049. bodyAttrs: bodyAttrs ? [bodyAttrs] : [],
  1050. bodyPrepend: normalizeChunks([bodyTagsOpen, ssrContext.teleports?.body]),
  1051. body: [_rendered.html],
  1052. bodyAppend: [bodyTags]
  1053. };
  1054. await nitroApp.hooks.callHook("render:html", htmlContext, { event });
  1055. const response = {
  1056. body: renderHTMLDocument(htmlContext),
  1057. statusCode: getResponseStatus(event),
  1058. statusMessage: getResponseStatusText(event),
  1059. headers: {
  1060. "content-type": "text/html;charset=utf-8",
  1061. "x-powered-by": "Nuxt"
  1062. }
  1063. };
  1064. return response;
  1065. });
  1066. function lazyCachedFunction(fn) {
  1067. let res = null;
  1068. return () => {
  1069. if (res === null) {
  1070. res = fn().catch((err) => {
  1071. res = null;
  1072. throw err;
  1073. });
  1074. }
  1075. return res;
  1076. };
  1077. }
  1078. function normalizeChunks(chunks) {
  1079. return chunks.filter(Boolean).map((i) => i.trim());
  1080. }
  1081. function joinTags(tags) {
  1082. return tags.join("");
  1083. }
  1084. function joinAttrs(chunks) {
  1085. return chunks.join(" ");
  1086. }
  1087. function renderHTMLDocument(html) {
  1088. return `<!DOCTYPE html><html${joinAttrs(html.htmlAttrs)}><head>${joinTags(html.head)}</head><body${joinAttrs(html.bodyAttrs)}>${joinTags(html.bodyPrepend)}${joinTags(html.body)}${joinTags(html.bodyAppend)}</body></html>`;
  1089. }
  1090. async function renderInlineStyles(usedModules) {
  1091. const styleMap = await getSSRStyles();
  1092. const inlinedStyles = /* @__PURE__ */ new Set();
  1093. for (const mod of usedModules) {
  1094. if (mod in styleMap) {
  1095. for (const style of await styleMap[mod]()) {
  1096. inlinedStyles.add(style);
  1097. }
  1098. }
  1099. }
  1100. return Array.from(inlinedStyles).map((style) => ({ innerHTML: style }));
  1101. }
  1102. function renderPayloadResponse(ssrContext) {
  1103. return {
  1104. body: stringify(splitPayload(ssrContext).payload, ssrContext._payloadReducers) ,
  1105. statusCode: getResponseStatus(ssrContext.event),
  1106. statusMessage: getResponseStatusText(ssrContext.event),
  1107. headers: {
  1108. "content-type": "application/json;charset=utf-8" ,
  1109. "x-powered-by": "Nuxt"
  1110. }
  1111. };
  1112. }
  1113. function renderPayloadJsonScript(opts) {
  1114. const contents = opts.data ? stringify(opts.data, opts.ssrContext._payloadReducers) : "";
  1115. const payload = {
  1116. type: "application/json",
  1117. id: opts.id,
  1118. innerHTML: contents,
  1119. "data-ssr": !(true )
  1120. };
  1121. if (opts.src) {
  1122. payload["data-src"] = opts.src;
  1123. }
  1124. return [
  1125. payload,
  1126. {
  1127. innerHTML: `window.__NUXT__={};window.__NUXT__.config=${uneval(opts.ssrContext.config)}`
  1128. }
  1129. ];
  1130. }
  1131. function splitPayload(ssrContext) {
  1132. const { data, prerenderedAt, ...initial } = ssrContext.payload;
  1133. return {
  1134. initial: { ...initial, prerenderedAt },
  1135. payload: { data, prerenderedAt }
  1136. };
  1137. }
  1138. const renderer$1 = /*#__PURE__*/Object.freeze({
  1139. __proto__: null,
  1140. default: renderer
  1141. });
  1142. const styles = {};
  1143. const styles$1 = /*#__PURE__*/Object.freeze({
  1144. __proto__: null,
  1145. default: styles
  1146. });
  1147. const template = "";
  1148. const _virtual__spaTemplate = /*#__PURE__*/Object.freeze({
  1149. __proto__: null,
  1150. template: template
  1151. });
  1152. //# sourceMappingURL=index.mjs.map