| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247 |
- import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { defineEventHandler, handleCacheHeaders, splitCookiesString, createEvent, fetchWithEvent, isEvent, eventHandler, setHeaders, sendRedirect, proxyRequest, getRequestHeader, setResponseHeaders, setResponseStatus, send, getRequestHeaders, setResponseHeader, getRequestURL, getResponseHeader, appendResponseHeader, removeResponseHeader, createError, createApp, createRouter as createRouter$1, toNodeListener, lazyEventHandler, getResponseStatus } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/h3@1.15.3/node_modules/h3/dist/index.mjs';
- import destr from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs';
- import { createHooks } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs';
- import { createFetch, Headers as Headers$1 } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/ofetch@1.4.1/node_modules/ofetch/dist/node.mjs';
- import { fetchNodeRequestHandler, callNodeRequestHandler } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/node-mock-http@1.0.0/node_modules/node-mock-http/dist/index.mjs';
- import { parseURL, withoutBase, joinURL, getQuery, withQuery, decodePath, withLeadingSlash, withoutTrailingSlash } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs';
- import { createStorage, defineDriver, prefixStorage } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/unstorage@1.16.0_db0@0.3.2_ioredis@5.6.1/node_modules/unstorage/dist/index.mjs';
- import unstorage_47drivers_47fs from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/unstorage@1.16.0_db0@0.3.2_ioredis@5.6.1/node_modules/unstorage/drivers/fs.mjs';
- import fsDriver from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/unstorage@1.16.0_db0@0.3.2_ioredis@5.6.1/node_modules/unstorage/drivers/fs-lite.mjs';
- import lruCache from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/unstorage@1.16.0_db0@0.3.2_ioredis@5.6.1/node_modules/unstorage/drivers/lru-cache.mjs';
- import { digest } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs';
- import { klona } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs';
- import defu, { defuFn } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs';
- import { snakeCase } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs';
- import { getContext } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/unctx@2.4.1/node_modules/unctx/dist/index.mjs';
- import { toRouteMatcher, createRouter } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs';
- import { promises } from 'node:fs';
- import { fileURLToPath } from 'node:url';
- import { dirname, resolve } from 'file:///Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.mjs';
- const serverAssets = [{"baseName":"server","dir":"/Users/yuxin/local/code/ccdw-website/server/assets"}];
- const assets$1 = createStorage();
- for (const asset of serverAssets) {
- assets$1.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir, ignore: (asset?.ignore || []) }));
- }
- // @ts-check
- /**
- * @param {string} item
- */
- const normalizeFsKey = item => decodeURIComponent(item.replaceAll(':', '_'));
- /**
- * @param {{ base: string }} opts
- */
- const _47Users_47yuxin_47local_47code_47ccdw_45website_47node_modules_47_46pnpm_47nuxt_643_4617_464__64parcel_43watcher_642_465_461__64types_43node_6422_4615_4621_db0_640_463_462_ioredis_645_466_461_magicast_e2b60321bafda6f7a9390f7ac7478d38_47node_modules_47nuxt_47dist_47core_47runtime_47nitro_47utils_47cache_45driver_46js = defineDriver((opts) => {
- const fs = fsDriver({ base: opts.base });
- const lru = lruCache({ max: 1000 });
- return {
- ...fs, // fall back to file system - only the bottom three methods are used in renderer
- async setItem (key, value, opts) {
- await Promise.all([
- fs.setItem?.(normalizeFsKey(key), value, opts),
- lru.setItem?.(key, value, opts),
- ]);
- },
- async hasItem (key, opts) {
- return await lru.hasItem(key, opts) || await fs.hasItem(normalizeFsKey(key), opts)
- },
- async getItem (key, opts) {
- return await lru.getItem(key, opts) || await fs.getItem(normalizeFsKey(key), opts)
- },
- }
- });
- const storage = createStorage({});
- storage.mount('/assets', assets$1);
- storage.mount('internal:nuxt:prerender', _47Users_47yuxin_47local_47code_47ccdw_45website_47node_modules_47_46pnpm_47nuxt_643_4617_464__64parcel_43watcher_642_465_461__64types_43node_6422_4615_4621_db0_640_463_462_ioredis_645_466_461_magicast_e2b60321bafda6f7a9390f7ac7478d38_47node_modules_47nuxt_47dist_47core_47runtime_47nitro_47utils_47cache_45driver_46js({"driver":"/Users/yuxin/local/code/ccdw-website/node_modules/.pnpm/nuxt@3.17.4_@parcel+watcher@2.5.1_@types+node@22.15.21_db0@0.3.2_ioredis@5.6.1_magicast_e2b60321bafda6f7a9390f7ac7478d38/node_modules/nuxt/dist/core/runtime/nitro/utils/cache-driver.js","base":"/Users/yuxin/local/code/ccdw-website/.nuxt/cache/nitro/prerender"}));
- storage.mount('data', fsDriver({"driver":"fsLite","base":"./.data/kv"}));
- storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/yuxin/local/code/ccdw-website","watchOptions":{"ignored":[null]}}));
- storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/yuxin/local/code/ccdw-website/server","watchOptions":{"ignored":[null]}}));
- storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/yuxin/local/code/ccdw-website/.nuxt"}));
- storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/yuxin/local/code/ccdw-website/.nuxt/cache"}));
- function useStorage(base = "") {
- return base ? prefixStorage(storage, base) : storage;
- }
- const Hasher = /* @__PURE__ */ (() => {
- class Hasher2 {
- buff = "";
- #context = /* @__PURE__ */ new Map();
- write(str) {
- this.buff += str;
- }
- dispatch(value) {
- const type = value === null ? "null" : typeof value;
- return this[type](value);
- }
- object(object) {
- if (object && typeof object.toJSON === "function") {
- return this.object(object.toJSON());
- }
- const objString = Object.prototype.toString.call(object);
- let objType = "";
- const objectLength = objString.length;
- objType = objectLength < 10 ? "unknown:[" + objString + "]" : objString.slice(8, objectLength - 1);
- objType = objType.toLowerCase();
- let objectNumber = null;
- if ((objectNumber = this.#context.get(object)) === void 0) {
- this.#context.set(object, this.#context.size);
- } else {
- return this.dispatch("[CIRCULAR:" + objectNumber + "]");
- }
- if (typeof Buffer !== "undefined" && Buffer.isBuffer && Buffer.isBuffer(object)) {
- this.write("buffer:");
- return this.write(object.toString("utf8"));
- }
- if (objType !== "object" && objType !== "function" && objType !== "asyncfunction") {
- if (this[objType]) {
- this[objType](object);
- } else {
- this.unknown(object, objType);
- }
- } else {
- const keys = Object.keys(object).sort();
- const extraKeys = [];
- this.write("object:" + (keys.length + extraKeys.length) + ":");
- const dispatchForKey = (key) => {
- this.dispatch(key);
- this.write(":");
- this.dispatch(object[key]);
- this.write(",");
- };
- for (const key of keys) {
- dispatchForKey(key);
- }
- for (const key of extraKeys) {
- dispatchForKey(key);
- }
- }
- }
- array(arr, unordered) {
- unordered = unordered === void 0 ? false : unordered;
- this.write("array:" + arr.length + ":");
- if (!unordered || arr.length <= 1) {
- for (const entry of arr) {
- this.dispatch(entry);
- }
- return;
- }
- const contextAdditions = /* @__PURE__ */ new Map();
- const entries = arr.map((entry) => {
- const hasher = new Hasher2();
- hasher.dispatch(entry);
- for (const [key, value] of hasher.#context) {
- contextAdditions.set(key, value);
- }
- return hasher.toString();
- });
- this.#context = contextAdditions;
- entries.sort();
- return this.array(entries, false);
- }
- date(date) {
- return this.write("date:" + date.toJSON());
- }
- symbol(sym) {
- return this.write("symbol:" + sym.toString());
- }
- unknown(value, type) {
- this.write(type);
- if (!value) {
- return;
- }
- this.write(":");
- if (value && typeof value.entries === "function") {
- return this.array(
- [...value.entries()],
- true
- /* ordered */
- );
- }
- }
- error(err) {
- return this.write("error:" + err.toString());
- }
- boolean(bool) {
- return this.write("bool:" + bool);
- }
- string(string) {
- this.write("string:" + string.length + ":");
- this.write(string);
- }
- function(fn) {
- this.write("fn:");
- if (isNativeFunction(fn)) {
- this.dispatch("[native]");
- } else {
- this.dispatch(fn.toString());
- }
- }
- number(number) {
- return this.write("number:" + number);
- }
- null() {
- return this.write("Null");
- }
- undefined() {
- return this.write("Undefined");
- }
- regexp(regex) {
- return this.write("regex:" + regex.toString());
- }
- arraybuffer(arr) {
- this.write("arraybuffer:");
- return this.dispatch(new Uint8Array(arr));
- }
- url(url) {
- return this.write("url:" + url.toString());
- }
- map(map) {
- this.write("map:");
- const arr = [...map];
- return this.array(arr, false);
- }
- set(set) {
- this.write("set:");
- const arr = [...set];
- return this.array(arr, false);
- }
- bigint(number) {
- return this.write("bigint:" + number.toString());
- }
- }
- for (const type of [
- "uint8array",
- "uint8clampedarray",
- "unt8array",
- "uint16array",
- "unt16array",
- "uint32array",
- "unt32array",
- "float32array",
- "float64array"
- ]) {
- Hasher2.prototype[type] = function(arr) {
- this.write(type + ":");
- return this.array([...arr], false);
- };
- }
- function isNativeFunction(f) {
- if (typeof f !== "function") {
- return false;
- }
- return Function.prototype.toString.call(f).slice(
- -15
- /* "[native code] }".length */
- ) === "[native code] }";
- }
- return Hasher2;
- })();
- function serialize(object) {
- const hasher = new Hasher();
- hasher.dispatch(object);
- return hasher.buff;
- }
- function hash(value) {
- return digest(typeof value === "string" ? value : serialize(value)).replace(/[-_]/g, "").slice(0, 10);
- }
- function defaultCacheOptions() {
- return {
- name: "_",
- base: "/cache",
- swr: true,
- maxAge: 1
- };
- }
- function defineCachedFunction(fn, opts = {}) {
- opts = { ...defaultCacheOptions(), ...opts };
- const pending = {};
- const group = opts.group || "nitro/functions";
- const name = opts.name || fn.name || "_";
- const integrity = opts.integrity || hash([fn, opts]);
- const validate = opts.validate || ((entry) => entry.value !== void 0);
- async function get(key, resolver, shouldInvalidateCache, event) {
- const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index");
- let entry = await useStorage().getItem(cacheKey).catch((error) => {
- console.error(`[cache] Cache read error.`, error);
- useNitroApp().captureError(error, { event, tags: ["cache"] });
- }) || {};
- if (typeof entry !== "object") {
- entry = {};
- const error = new Error("Malformed data read from cache.");
- console.error("[cache]", error);
- useNitroApp().captureError(error, { event, tags: ["cache"] });
- }
- const ttl = (opts.maxAge ?? 0) * 1e3;
- if (ttl) {
- entry.expires = Date.now() + ttl;
- }
- const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false;
- const _resolve = async () => {
- const isPending = pending[key];
- if (!isPending) {
- if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) {
- entry.value = void 0;
- entry.integrity = void 0;
- entry.mtime = void 0;
- entry.expires = void 0;
- }
- pending[key] = Promise.resolve(resolver());
- }
- try {
- entry.value = await pending[key];
- } catch (error) {
- if (!isPending) {
- delete pending[key];
- }
- throw error;
- }
- if (!isPending) {
- entry.mtime = Date.now();
- entry.integrity = integrity;
- delete pending[key];
- if (validate(entry) !== false) {
- let setOpts;
- if (opts.maxAge && !opts.swr) {
- setOpts = { ttl: opts.maxAge };
- }
- const promise = useStorage().setItem(cacheKey, entry, setOpts).catch((error) => {
- console.error(`[cache] Cache write error.`, error);
- useNitroApp().captureError(error, { event, tags: ["cache"] });
- });
- if (event?.waitUntil) {
- event.waitUntil(promise);
- }
- }
- }
- };
- const _resolvePromise = expired ? _resolve() : Promise.resolve();
- if (entry.value === void 0) {
- await _resolvePromise;
- } else if (expired && event && event.waitUntil) {
- event.waitUntil(_resolvePromise);
- }
- if (opts.swr && validate(entry) !== false) {
- _resolvePromise.catch((error) => {
- console.error(`[cache] SWR handler error.`, error);
- useNitroApp().captureError(error, { event, tags: ["cache"] });
- });
- return entry;
- }
- return _resolvePromise.then(() => entry);
- }
- return async (...args) => {
- const shouldBypassCache = await opts.shouldBypassCache?.(...args);
- if (shouldBypassCache) {
- return fn(...args);
- }
- const key = await (opts.getKey || getKey)(...args);
- const shouldInvalidateCache = await opts.shouldInvalidateCache?.(...args);
- const entry = await get(
- key,
- () => fn(...args),
- shouldInvalidateCache,
- args[0] && isEvent(args[0]) ? args[0] : void 0
- );
- let value = entry.value;
- if (opts.transform) {
- value = await opts.transform(entry, ...args) || value;
- }
- return value;
- };
- }
- function cachedFunction(fn, opts = {}) {
- return defineCachedFunction(fn, opts);
- }
- function getKey(...args) {
- return args.length > 0 ? hash(args) : "";
- }
- function escapeKey(key) {
- return String(key).replace(/\W/g, "");
- }
- function defineCachedEventHandler(handler, opts = defaultCacheOptions()) {
- const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort();
- const _opts = {
- ...opts,
- getKey: async (event) => {
- const customKey = await opts.getKey?.(event);
- if (customKey) {
- return escapeKey(customKey);
- }
- const _path = event.node.req.originalUrl || event.node.req.url || event.path;
- let _pathname;
- try {
- _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index";
- } catch {
- _pathname = "-";
- }
- const _hashedPath = `${_pathname}.${hash(_path)}`;
- const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`);
- return [_hashedPath, ..._headers].join(":");
- },
- validate: (entry) => {
- if (!entry.value) {
- return false;
- }
- if (entry.value.code >= 400) {
- return false;
- }
- if (entry.value.body === void 0) {
- return false;
- }
- if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") {
- return false;
- }
- return true;
- },
- group: opts.group || "nitro/handlers",
- integrity: opts.integrity || hash([handler, opts])
- };
- const _cachedHandler = cachedFunction(
- async (incomingEvent) => {
- const variableHeaders = {};
- for (const header of variableHeaderNames) {
- const value = incomingEvent.node.req.headers[header];
- if (value !== void 0) {
- variableHeaders[header] = value;
- }
- }
- const reqProxy = cloneWithProxy(incomingEvent.node.req, {
- headers: variableHeaders
- });
- const resHeaders = {};
- let _resSendBody;
- const resProxy = cloneWithProxy(incomingEvent.node.res, {
- statusCode: 200,
- writableEnded: false,
- writableFinished: false,
- headersSent: false,
- closed: false,
- getHeader(name) {
- return resHeaders[name];
- },
- setHeader(name, value) {
- resHeaders[name] = value;
- return this;
- },
- getHeaderNames() {
- return Object.keys(resHeaders);
- },
- hasHeader(name) {
- return name in resHeaders;
- },
- removeHeader(name) {
- delete resHeaders[name];
- },
- getHeaders() {
- return resHeaders;
- },
- end(chunk, arg2, arg3) {
- if (typeof chunk === "string") {
- _resSendBody = chunk;
- }
- if (typeof arg2 === "function") {
- arg2();
- }
- if (typeof arg3 === "function") {
- arg3();
- }
- return this;
- },
- write(chunk, arg2, arg3) {
- if (typeof chunk === "string") {
- _resSendBody = chunk;
- }
- if (typeof arg2 === "function") {
- arg2(void 0);
- }
- if (typeof arg3 === "function") {
- arg3();
- }
- return true;
- },
- writeHead(statusCode, headers2) {
- this.statusCode = statusCode;
- if (headers2) {
- if (Array.isArray(headers2) || typeof headers2 === "string") {
- throw new TypeError("Raw headers is not supported.");
- }
- for (const header in headers2) {
- const value = headers2[header];
- if (value !== void 0) {
- this.setHeader(
- header,
- value
- );
- }
- }
- }
- return this;
- }
- });
- const event = createEvent(reqProxy, resProxy);
- event.fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, {
- fetch: useNitroApp().localFetch
- });
- event.$fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, {
- fetch: globalThis.$fetch
- });
- event.waitUntil = incomingEvent.waitUntil;
- event.context = incomingEvent.context;
- event.context.cache = {
- options: _opts
- };
- const body = await handler(event) || _resSendBody;
- const headers = event.node.res.getHeaders();
- headers.etag = String(
- headers.Etag || headers.etag || `W/"${hash(body)}"`
- );
- headers["last-modified"] = String(
- headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString()
- );
- const cacheControl = [];
- if (opts.swr) {
- if (opts.maxAge) {
- cacheControl.push(`s-maxage=${opts.maxAge}`);
- }
- if (opts.staleMaxAge) {
- cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
- } else {
- cacheControl.push("stale-while-revalidate");
- }
- } else if (opts.maxAge) {
- cacheControl.push(`max-age=${opts.maxAge}`);
- }
- if (cacheControl.length > 0) {
- headers["cache-control"] = cacheControl.join(", ");
- }
- const cacheEntry = {
- code: event.node.res.statusCode,
- headers,
- body
- };
- return cacheEntry;
- },
- _opts
- );
- return defineEventHandler(async (event) => {
- if (opts.headersOnly) {
- if (handleCacheHeaders(event, { maxAge: opts.maxAge })) {
- return;
- }
- return handler(event);
- }
- const response = await _cachedHandler(
- event
- );
- if (event.node.res.headersSent || event.node.res.writableEnded) {
- return response.body;
- }
- if (handleCacheHeaders(event, {
- modifiedTime: new Date(response.headers["last-modified"]),
- etag: response.headers.etag,
- maxAge: opts.maxAge
- })) {
- return;
- }
- event.node.res.statusCode = response.code;
- for (const name in response.headers) {
- const value = response.headers[name];
- if (name === "set-cookie") {
- event.node.res.appendHeader(
- name,
- splitCookiesString(value)
- );
- } else {
- if (value !== void 0) {
- event.node.res.setHeader(name, value);
- }
- }
- }
- return response.body;
- });
- }
- function cloneWithProxy(obj, overrides) {
- return new Proxy(obj, {
- get(target, property, receiver) {
- if (property in overrides) {
- return overrides[property];
- }
- return Reflect.get(target, property, receiver);
- },
- set(target, property, value, receiver) {
- if (property in overrides) {
- overrides[property] = value;
- return true;
- }
- return Reflect.set(target, property, value, receiver);
- }
- });
- }
- const cachedEventHandler = defineCachedEventHandler;
- const inlineAppConfig = {
- "nuxt": {}
- };
- const appConfig = defuFn(inlineAppConfig);
- function getEnv(key, opts) {
- const envKey = snakeCase(key).toUpperCase();
- return destr(
- process.env[opts.prefix + envKey] ?? process.env[opts.altPrefix + envKey]
- );
- }
- function _isObject(input) {
- return typeof input === "object" && !Array.isArray(input);
- }
- function applyEnv(obj, opts, parentKey = "") {
- for (const key in obj) {
- const subKey = parentKey ? `${parentKey}_${key}` : key;
- const envValue = getEnv(subKey, opts);
- if (_isObject(obj[key])) {
- if (_isObject(envValue)) {
- obj[key] = { ...obj[key], ...envValue };
- applyEnv(obj[key], opts, subKey);
- } else if (envValue === void 0) {
- applyEnv(obj[key], opts, subKey);
- } else {
- obj[key] = envValue ?? obj[key];
- }
- } else {
- obj[key] = envValue ?? obj[key];
- }
- if (opts.envExpansion && typeof obj[key] === "string") {
- obj[key] = _expandFromEnv(obj[key]);
- }
- }
- return obj;
- }
- const envExpandRx = /\{\{([^{}]*)\}\}/g;
- function _expandFromEnv(value) {
- return value.replace(envExpandRx, (match, key) => {
- return process.env[key] || match;
- });
- }
- const _inlineRuntimeConfig = {
- "app": {
- "baseURL": "/",
- "buildId": "f506e4e5-f256-4340-a9a0-f08f794c79a5",
- "buildAssetsDir": "/_nuxt/",
- "cdnURL": ""
- },
- "nitro": {
- "envPrefix": "NUXT_",
- "routeRules": {
- "/__nuxt_error": {
- "cache": false
- },
- "/_nuxt/builds/meta/**": {
- "headers": {
- "cache-control": "public, max-age=31536000, immutable"
- }
- },
- "/_nuxt/builds/**": {
- "headers": {
- "cache-control": "public, max-age=1, immutable"
- }
- },
- "/_nuxt/**": {
- "headers": {
- "cache-control": "public, max-age=31536000, immutable"
- }
- }
- }
- },
- "public": {}
- };
- const envOptions = {
- prefix: "NITRO_",
- altPrefix: _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_",
- envExpansion: _inlineRuntimeConfig.nitro.envExpansion ?? process.env.NITRO_ENV_EXPANSION ?? false
- };
- const _sharedRuntimeConfig = _deepFreeze(
- applyEnv(klona(_inlineRuntimeConfig), envOptions)
- );
- function useRuntimeConfig(event) {
- if (!event) {
- return _sharedRuntimeConfig;
- }
- if (event.context.nitro.runtimeConfig) {
- return event.context.nitro.runtimeConfig;
- }
- const runtimeConfig = klona(_inlineRuntimeConfig);
- applyEnv(runtimeConfig, envOptions);
- event.context.nitro.runtimeConfig = runtimeConfig;
- return runtimeConfig;
- }
- _deepFreeze(klona(appConfig));
- function _deepFreeze(object) {
- const propNames = Object.getOwnPropertyNames(object);
- for (const name of propNames) {
- const value = object[name];
- if (value && typeof value === "object") {
- _deepFreeze(value);
- }
- }
- return Object.freeze(object);
- }
- new Proxy(/* @__PURE__ */ Object.create(null), {
- get: (_, prop) => {
- console.warn(
- "Please use `useRuntimeConfig()` instead of accessing config directly."
- );
- const runtimeConfig = useRuntimeConfig();
- if (prop in runtimeConfig) {
- return runtimeConfig[prop];
- }
- return void 0;
- }
- });
- getContext("nitro-app", {
- asyncContext: false,
- AsyncLocalStorage: void 0
- });
- const config = useRuntimeConfig();
- const _routeRulesMatcher = toRouteMatcher(
- createRouter({ routes: config.nitro.routeRules })
- );
- function createRouteRulesHandler(ctx) {
- return eventHandler((event) => {
- const routeRules = getRouteRules(event);
- if (routeRules.headers) {
- setHeaders(event, routeRules.headers);
- }
- if (routeRules.redirect) {
- let target = routeRules.redirect.to;
- if (target.endsWith("/**")) {
- let targetPath = event.path;
- const strpBase = routeRules.redirect._redirectStripBase;
- if (strpBase) {
- targetPath = withoutBase(targetPath, strpBase);
- }
- target = joinURL(target.slice(0, -3), targetPath);
- } else if (event.path.includes("?")) {
- const query = getQuery(event.path);
- target = withQuery(target, query);
- }
- return sendRedirect(event, target, routeRules.redirect.statusCode);
- }
- if (routeRules.proxy) {
- let target = routeRules.proxy.to;
- if (target.endsWith("/**")) {
- let targetPath = event.path;
- const strpBase = routeRules.proxy._proxyStripBase;
- if (strpBase) {
- targetPath = withoutBase(targetPath, strpBase);
- }
- target = joinURL(target.slice(0, -3), targetPath);
- } else if (event.path.includes("?")) {
- const query = getQuery(event.path);
- target = withQuery(target, query);
- }
- return proxyRequest(event, target, {
- fetch: ctx.localFetch,
- ...routeRules.proxy
- });
- }
- });
- }
- function getRouteRules(event) {
- event.context._nitro = event.context._nitro || {};
- if (!event.context._nitro.routeRules) {
- event.context._nitro.routeRules = getRouteRulesForPath(
- withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL)
- );
- }
- return event.context._nitro.routeRules;
- }
- function getRouteRulesForPath(path) {
- return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
- }
- function _captureError(error, type) {
- console.error(`[${type}]`, error);
- useNitroApp().captureError(error, { tags: [type] });
- }
- function trapUnhandledNodeErrors() {
- process.on(
- "unhandledRejection",
- (error) => _captureError(error, "unhandledRejection")
- );
- process.on(
- "uncaughtException",
- (error) => _captureError(error, "uncaughtException")
- );
- }
- function joinHeaders(value) {
- return Array.isArray(value) ? value.join(", ") : String(value);
- }
- function normalizeFetchResponse(response) {
- if (!response.headers.has("set-cookie")) {
- return response;
- }
- return new Response(response.body, {
- status: response.status,
- statusText: response.statusText,
- headers: normalizeCookieHeaders(response.headers)
- });
- }
- function normalizeCookieHeader(header = "") {
- return splitCookiesString(joinHeaders(header));
- }
- function normalizeCookieHeaders(headers) {
- const outgoingHeaders = new Headers();
- for (const [name, header] of headers) {
- if (name === "set-cookie") {
- for (const cookie of normalizeCookieHeader(header)) {
- outgoingHeaders.append("set-cookie", cookie);
- }
- } else {
- outgoingHeaders.set(name, joinHeaders(header));
- }
- }
- return outgoingHeaders;
- }
- function isJsonRequest(event) {
- if (hasReqHeader(event, "accept", "text/html")) {
- return false;
- }
- 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");
- }
- function hasReqHeader(event, name, includes) {
- const value = getRequestHeader(event, name);
- return value && typeof value === "string" && value.toLowerCase().includes(includes);
- }
- const errorHandler$0 = (async function errorhandler(error, event, { defaultHandler }) {
- if (event.handled || isJsonRequest(event)) {
- return;
- }
- const defaultRes = await defaultHandler(error, event, { json: true });
- const statusCode = error.statusCode || 500;
- if (statusCode === 404 && defaultRes.status === 302) {
- setResponseHeaders(event, defaultRes.headers);
- setResponseStatus(event, defaultRes.status, defaultRes.statusText);
- return send(event, JSON.stringify(defaultRes.body, null, 2));
- }
- const errorObject = defaultRes.body;
- const url = new URL(errorObject.url);
- errorObject.url = withoutBase(url.pathname, useRuntimeConfig(event).app.baseURL) + url.search + url.hash;
- errorObject.message ||= "Server Error";
- errorObject.data ||= error.data;
- errorObject.statusMessage ||= error.statusMessage;
- delete defaultRes.headers["content-type"];
- delete defaultRes.headers["content-security-policy"];
- setResponseHeaders(event, defaultRes.headers);
- const reqHeaders = getRequestHeaders(event);
- const isRenderingError = event.path.startsWith("/__nuxt_error") || !!reqHeaders["x-nuxt-error"];
- const res = isRenderingError ? null : await useNitroApp().localFetch(
- withQuery(joinURL(useRuntimeConfig(event).app.baseURL, "/__nuxt_error"), errorObject),
- {
- headers: { ...reqHeaders, "x-nuxt-error": "true" },
- redirect: "manual"
- }
- ).catch(() => null);
- if (event.handled) {
- return;
- }
- if (!res) {
- const { template } = await import('../_/error-500.mjs');
- setResponseHeader(event, "Content-Type", "text/html;charset=UTF-8");
- return send(event, template(errorObject));
- }
- const html = await res.text();
- for (const [header, value] of res.headers.entries()) {
- setResponseHeader(event, header, value);
- }
- setResponseStatus(event, res.status && res.status !== 200 ? res.status : defaultRes.status, res.statusText || defaultRes.statusText);
- return send(event, html);
- });
- function defineNitroErrorHandler(handler) {
- return handler;
- }
- const errorHandler$1 = defineNitroErrorHandler(
- function defaultNitroErrorHandler(error, event) {
- const res = defaultHandler(error, event);
- setResponseHeaders(event, res.headers);
- setResponseStatus(event, res.status, res.statusText);
- return send(event, JSON.stringify(res.body, null, 2));
- }
- );
- function defaultHandler(error, event, opts) {
- const isSensitive = error.unhandled || error.fatal;
- const statusCode = error.statusCode || 500;
- const statusMessage = error.statusMessage || "Server Error";
- const url = getRequestURL(event, { xForwardedHost: true, xForwardedProto: true });
- if (statusCode === 404) {
- const baseURL = "/";
- if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) {
- const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`;
- return {
- status: 302,
- statusText: "Found",
- headers: { location: redirectTo },
- body: `Redirecting...`
- };
- }
- }
- if (isSensitive && !opts?.silent) {
- const tags = [error.unhandled && "[unhandled]", error.fatal && "[fatal]"].filter(Boolean).join(" ");
- console.error(`[request error] ${tags} [${event.method}] ${url}
- `, error);
- }
- const headers = {
- "content-type": "application/json",
- // Prevent browser from guessing the MIME types of resources.
- "x-content-type-options": "nosniff",
- // Prevent error page from being embedded in an iframe
- "x-frame-options": "DENY",
- // Prevent browsers from sending the Referer header
- "referrer-policy": "no-referrer",
- // Disable the execution of any js
- "content-security-policy": "script-src 'none'; frame-ancestors 'none';"
- };
- setResponseStatus(event, statusCode, statusMessage);
- if (statusCode === 404 || !getResponseHeader(event, "cache-control")) {
- headers["cache-control"] = "no-cache";
- }
- const body = {
- error: true,
- url: url.href,
- statusCode,
- statusMessage,
- message: isSensitive ? "Server Error" : error.message,
- data: isSensitive ? void 0 : error.data
- };
- return {
- status: statusCode,
- statusText: statusMessage,
- headers,
- body
- };
- }
- const errorHandlers = [errorHandler$0, errorHandler$1];
- async function errorHandler(error, event) {
- for (const handler of errorHandlers) {
- try {
- await handler(error, event, { defaultHandler });
- if (event.handled) {
- return; // Response handled
- }
- } catch(error) {
- // Handler itself thrown, log and continue
- console.error(error);
- }
- }
- // H3 will handle fallback
- }
- const plugins = [
-
- ];
- const assets = {};
- function readAsset (id) {
- const serverDir = dirname(fileURLToPath(globalThis._importMeta_.url));
- return promises.readFile(resolve(serverDir, assets[id].path))
- }
- const publicAssetBases = {"/_nuxt/builds/meta/":{"maxAge":31536000},"/_nuxt/builds/":{"maxAge":1},"/_nuxt/":{"maxAge":31536000}};
- function isPublicAssetURL(id = '') {
- if (assets[id]) {
- return true
- }
- for (const base in publicAssetBases) {
- if (id.startsWith(base)) { return true }
- }
- return false
- }
- function getAsset (id) {
- return assets[id]
- }
- const METHODS = /* @__PURE__ */ new Set(["HEAD", "GET"]);
- const EncodingMap = { gzip: ".gz", br: ".br" };
- const _5MtcA1 = eventHandler((event) => {
- if (event.method && !METHODS.has(event.method)) {
- return;
- }
- let id = decodePath(
- withLeadingSlash(withoutTrailingSlash(parseURL(event.path).pathname))
- );
- let asset;
- const encodingHeader = String(
- getRequestHeader(event, "accept-encoding") || ""
- );
- const encodings = [
- ...encodingHeader.split(",").map((e) => EncodingMap[e.trim()]).filter(Boolean).sort(),
- ""
- ];
- if (encodings.length > 1) {
- appendResponseHeader(event, "Vary", "Accept-Encoding");
- }
- for (const encoding of encodings) {
- for (const _id of [id + encoding, joinURL(id, "index.html" + encoding)]) {
- const _asset = getAsset(_id);
- if (_asset) {
- asset = _asset;
- id = _id;
- break;
- }
- }
- }
- if (!asset) {
- if (isPublicAssetURL(id)) {
- removeResponseHeader(event, "Cache-Control");
- throw createError({ statusCode: 404 });
- }
- return;
- }
- const ifNotMatch = getRequestHeader(event, "if-none-match") === asset.etag;
- if (ifNotMatch) {
- setResponseStatus(event, 304, "Not Modified");
- return "";
- }
- const ifModifiedSinceH = getRequestHeader(event, "if-modified-since");
- const mtimeDate = new Date(asset.mtime);
- if (ifModifiedSinceH && asset.mtime && new Date(ifModifiedSinceH) >= mtimeDate) {
- setResponseStatus(event, 304, "Not Modified");
- return "";
- }
- if (asset.type && !getResponseHeader(event, "Content-Type")) {
- setResponseHeader(event, "Content-Type", asset.type);
- }
- if (asset.etag && !getResponseHeader(event, "ETag")) {
- setResponseHeader(event, "ETag", asset.etag);
- }
- if (asset.mtime && !getResponseHeader(event, "Last-Modified")) {
- setResponseHeader(event, "Last-Modified", mtimeDate.toUTCString());
- }
- if (asset.encoding && !getResponseHeader(event, "Content-Encoding")) {
- setResponseHeader(event, "Content-Encoding", asset.encoding);
- }
- if (asset.size > 0 && !getResponseHeader(event, "Content-Length")) {
- setResponseHeader(event, "Content-Length", asset.size);
- }
- return readAsset(id);
- });
- const _SxA8c9 = defineEventHandler(() => {});
- const _lazy_Jyjymq = () => import('../_/renderer.mjs').then(function (n) { return n.r; });
- const handlers = [
- { route: '', handler: _5MtcA1, lazy: false, middleware: true, method: undefined },
- { route: '/__nuxt_island/**', handler: _SxA8c9, lazy: false, middleware: false, method: undefined },
- { route: '/**', handler: _lazy_Jyjymq, lazy: true, middleware: false, method: undefined }
- ];
- function createNitroApp() {
- const config = useRuntimeConfig();
- const hooks = createHooks();
- const captureError = (error, context = {}) => {
- const promise = hooks.callHookParallel("error", error, context).catch((error_) => {
- console.error("Error while capturing another error", error_);
- });
- if (context.event && isEvent(context.event)) {
- const errors = context.event.context.nitro?.errors;
- if (errors) {
- errors.push({ error, context });
- }
- if (context.event.waitUntil) {
- context.event.waitUntil(promise);
- }
- }
- };
- const h3App = createApp({
- debug: destr(false),
- onError: (error, event) => {
- captureError(error, { event, tags: ["request"] });
- return errorHandler(error, event);
- },
- onRequest: async (event) => {
- event.context.nitro = event.context.nitro || { errors: [] };
- const fetchContext = event.node.req?.__unenv__;
- if (fetchContext?._platform) {
- event.context = {
- _platform: fetchContext?._platform,
- // #3335
- ...fetchContext._platform,
- ...event.context
- };
- }
- if (!event.context.waitUntil && fetchContext?.waitUntil) {
- event.context.waitUntil = fetchContext.waitUntil;
- }
- event.fetch = (req, init) => fetchWithEvent(event, req, init, { fetch: localFetch });
- event.$fetch = (req, init) => fetchWithEvent(event, req, init, {
- fetch: $fetch
- });
- event.waitUntil = (promise) => {
- if (!event.context.nitro._waitUntilPromises) {
- event.context.nitro._waitUntilPromises = [];
- }
- event.context.nitro._waitUntilPromises.push(promise);
- if (event.context.waitUntil) {
- event.context.waitUntil(promise);
- }
- };
- event.captureError = (error, context) => {
- captureError(error, { event, ...context });
- };
- await nitroApp$1.hooks.callHook("request", event).catch((error) => {
- captureError(error, { event, tags: ["request"] });
- });
- },
- onBeforeResponse: async (event, response) => {
- await nitroApp$1.hooks.callHook("beforeResponse", event, response).catch((error) => {
- captureError(error, { event, tags: ["request", "response"] });
- });
- },
- onAfterResponse: async (event, response) => {
- await nitroApp$1.hooks.callHook("afterResponse", event, response).catch((error) => {
- captureError(error, { event, tags: ["request", "response"] });
- });
- }
- });
- const router = createRouter$1({
- preemptive: true
- });
- const nodeHandler = toNodeListener(h3App);
- const localCall = (aRequest) => callNodeRequestHandler(nodeHandler, aRequest);
- const localFetch = (input, init) => {
- if (!input.toString().startsWith("/")) {
- return globalThis.fetch(input, init);
- }
- return fetchNodeRequestHandler(
- nodeHandler,
- input,
- init
- ).then((response) => normalizeFetchResponse(response));
- };
- const $fetch = createFetch({
- fetch: localFetch,
- Headers: Headers$1,
- defaults: { baseURL: config.app.baseURL }
- });
- globalThis.$fetch = $fetch;
- h3App.use(createRouteRulesHandler({ localFetch }));
- for (const h of handlers) {
- let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
- if (h.middleware || !h.route) {
- const middlewareBase = (config.app.baseURL + (h.route || "/")).replace(
- /\/+/g,
- "/"
- );
- h3App.use(middlewareBase, handler);
- } else {
- const routeRules = getRouteRulesForPath(
- h.route.replace(/:\w+|\*\*/g, "_")
- );
- if (routeRules.cache) {
- handler = cachedEventHandler(handler, {
- group: "nitro/routes",
- ...routeRules.cache
- });
- }
- router.use(h.route, handler, h.method);
- }
- }
- h3App.use(config.app.baseURL, router.handler);
- const app = {
- hooks,
- h3App,
- router,
- localCall,
- localFetch,
- captureError
- };
- return app;
- }
- function runNitroPlugins(nitroApp2) {
- for (const plugin of plugins) {
- try {
- plugin(nitroApp2);
- } catch (error) {
- nitroApp2.captureError(error, { tags: ["plugin"] });
- throw error;
- }
- }
- }
- const nitroApp$1 = createNitroApp();
- function useNitroApp() {
- return nitroApp$1;
- }
- runNitroPlugins(nitroApp$1);
- function defineRenderHandler(render) {
- const runtimeConfig = useRuntimeConfig();
- return eventHandler(async (event) => {
- const nitroApp = useNitroApp();
- const ctx = { event, render, response: void 0 };
- await nitroApp.hooks.callHook("render:before", ctx);
- if (!ctx.response) {
- if (event.path === `${runtimeConfig.app.baseURL}favicon.ico`) {
- setResponseHeader(event, "Content-Type", "image/x-icon");
- return send(
- event,
- "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
- );
- }
- ctx.response = await ctx.render(event);
- if (!ctx.response) {
- const _currentStatus = getResponseStatus(event);
- setResponseStatus(event, _currentStatus === 200 ? 500 : _currentStatus);
- return send(
- event,
- "No response returned from render handler: " + event.path
- );
- }
- }
- await nitroApp.hooks.callHook("render:response", ctx.response, ctx);
- if (ctx.response.headers) {
- setResponseHeaders(event, ctx.response.headers);
- }
- if (ctx.response.statusCode || ctx.response.statusMessage) {
- setResponseStatus(
- event,
- ctx.response.statusCode,
- ctx.response.statusMessage
- );
- }
- return ctx.response.body;
- });
- }
- const nitroApp = useNitroApp();
- const localFetch = nitroApp.localFetch;
- const closePrerenderer = () => nitroApp.hooks.callHook("close");
- trapUnhandledNodeErrors();
- export { useStorage as a, useNitroApp as b, closePrerenderer as c, defineRenderHandler as d, getRouteRules as g, localFetch as l, useRuntimeConfig as u };
- //# sourceMappingURL=nitro.mjs.map
|