index.mjs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891
  1. import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { defineEventHandler, handleCacheHeaders, splitCookiesString, isEvent, createEvent, fetchWithEvent, getRequestHeader, eventHandler, setHeaders, sendRedirect, proxyRequest, setResponseStatus, setResponseHeader, send, getRequestHeaders, removeResponseHeader, createError, getResponseHeader, createApp, createRouter as createRouter$1, toNodeListener, lazyEventHandler } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/h3/dist/index.mjs';
  2. import { createFetch as createFetch$1, Headers as Headers$1 } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/ofetch/dist/node.mjs';
  3. import destr from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/destr/dist/index.mjs';
  4. import { createCall, createFetch } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/unenv/runtime/fetch/index.mjs';
  5. import { createHooks } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/hookable/dist/index.mjs';
  6. import { klona } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/klona/dist/index.mjs';
  7. import { snakeCase } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/scule/dist/index.mjs';
  8. import defu, { defuFn } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/defu/dist/defu.mjs';
  9. import { hash } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/ohash/dist/index.mjs';
  10. import { parseURL, withoutBase, joinURL, getQuery, withQuery, decodePath, withLeadingSlash, withoutTrailingSlash } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/ufo/dist/index.mjs';
  11. import { createStorage, prefixStorage } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/unstorage/dist/index.mjs';
  12. import unstorage_47drivers_47fs from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/unstorage/drivers/fs.mjs';
  13. import file_58_47_47_47D_58_47_37E5_37BC_37A0_37E6_3796_3787_37E9_379D_37991_47zwj_47nuxt_47sannongzixunwang_web_47node_modules_47nuxt_47dist_47core_47runtime_47nitro_47cache_45driver_46js from 'file:///D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/nuxt/dist/core/runtime/nitro/cache-driver.js';
  14. import unstorage_47drivers_47fs_45lite from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/unstorage/drivers/fs-lite.mjs';
  15. import { toRouteMatcher, createRouter } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/radix3/dist/index.mjs';
  16. import { promises } from 'node:fs';
  17. import { fileURLToPath } from 'node:url';
  18. import { dirname, resolve } from 'file://D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/pathe/dist/index.mjs';
  19. function getEnv(key, opts) {
  20. const envKey = snakeCase(key).toUpperCase();
  21. return destr(
  22. process.env[opts.prefix + envKey] ?? process.env[opts.altPrefix + envKey]
  23. );
  24. }
  25. function _isObject(input) {
  26. return typeof input === "object" && !Array.isArray(input);
  27. }
  28. function applyEnv(obj, opts, parentKey = "") {
  29. for (const key in obj) {
  30. const subKey = parentKey ? `${parentKey}_${key}` : key;
  31. const envValue = getEnv(subKey, opts);
  32. if (_isObject(obj[key])) {
  33. if (_isObject(envValue)) {
  34. obj[key] = { ...obj[key], ...envValue };
  35. applyEnv(obj[key], opts, subKey);
  36. } else if (envValue === void 0) {
  37. applyEnv(obj[key], opts, subKey);
  38. } else {
  39. obj[key] = envValue ?? obj[key];
  40. }
  41. } else {
  42. obj[key] = envValue ?? obj[key];
  43. }
  44. if (opts.envExpansion && typeof obj[key] === "string") {
  45. obj[key] = _expandFromEnv(obj[key]);
  46. }
  47. }
  48. return obj;
  49. }
  50. const envExpandRx = /{{(.*?)}}/g;
  51. function _expandFromEnv(value) {
  52. return value.replace(envExpandRx, (match, key) => {
  53. return process.env[key] || match;
  54. });
  55. }
  56. const inlineAppConfig = {
  57. "nuxt": {}
  58. };
  59. const appConfig = defuFn(inlineAppConfig);
  60. const _inlineRuntimeConfig = {
  61. "app": {
  62. "baseURL": "/",
  63. "buildId": "0e3ddc9d-ba40-4be2-b84f-3c4d282dc160",
  64. "buildAssetsDir": "/_nuxt/",
  65. "cdnURL": ""
  66. },
  67. "nitro": {
  68. "envPrefix": "NUXT_",
  69. "routeRules": {
  70. "/__nuxt_error": {
  71. "cache": false
  72. },
  73. "/_nuxt/builds/meta/**": {
  74. "headers": {
  75. "cache-control": "public, max-age=31536000, immutable"
  76. }
  77. },
  78. "/_nuxt/builds/**": {
  79. "headers": {
  80. "cache-control": "public, max-age=1, immutable"
  81. }
  82. },
  83. "/_nuxt/**": {
  84. "headers": {
  85. "cache-control": "public, max-age=31536000, immutable"
  86. }
  87. }
  88. }
  89. },
  90. "public": {}
  91. };
  92. const envOptions = {
  93. prefix: "NITRO_",
  94. altPrefix: _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_",
  95. envExpansion: _inlineRuntimeConfig.nitro.envExpansion ?? process.env.NITRO_ENV_EXPANSION ?? false
  96. };
  97. const _sharedRuntimeConfig = _deepFreeze(
  98. applyEnv(klona(_inlineRuntimeConfig), envOptions)
  99. );
  100. function useRuntimeConfig(event) {
  101. if (!event) {
  102. return _sharedRuntimeConfig;
  103. }
  104. if (event.context.nitro.runtimeConfig) {
  105. return event.context.nitro.runtimeConfig;
  106. }
  107. const runtimeConfig = klona(_inlineRuntimeConfig);
  108. applyEnv(runtimeConfig, envOptions);
  109. event.context.nitro.runtimeConfig = runtimeConfig;
  110. return runtimeConfig;
  111. }
  112. _deepFreeze(klona(appConfig));
  113. function _deepFreeze(object) {
  114. const propNames = Object.getOwnPropertyNames(object);
  115. for (const name of propNames) {
  116. const value = object[name];
  117. if (value && typeof value === "object") {
  118. _deepFreeze(value);
  119. }
  120. }
  121. return Object.freeze(object);
  122. }
  123. new Proxy(/* @__PURE__ */ Object.create(null), {
  124. get: (_, prop) => {
  125. console.warn(
  126. "Please use `useRuntimeConfig()` instead of accessing config directly."
  127. );
  128. const runtimeConfig = useRuntimeConfig();
  129. if (prop in runtimeConfig) {
  130. return runtimeConfig[prop];
  131. }
  132. return void 0;
  133. }
  134. });
  135. const serverAssets = [{"baseName":"server","dir":"D:/张文静1/zwj/nuxt/sannongzixunwang_web/server/assets"}];
  136. const assets$1 = createStorage();
  137. for (const asset of serverAssets) {
  138. assets$1.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir }));
  139. }
  140. const storage = createStorage({});
  141. storage.mount('/assets', assets$1);
  142. storage.mount('internal:nuxt:prerender', file_58_47_47_47D_58_47_37E5_37BC_37A0_37E6_3796_3787_37E9_379D_37991_47zwj_47nuxt_47sannongzixunwang_web_47node_modules_47nuxt_47dist_47core_47runtime_47nitro_47cache_45driver_46js({"driver":"file:///D:/%E5%BC%A0%E6%96%87%E9%9D%991/zwj/nuxt/sannongzixunwang_web/node_modules/nuxt/dist/core/runtime/nitro/cache-driver.js","base":"D:/张文静1/zwj/nuxt/sannongzixunwang_web/.nuxt/cache/nitro/prerender"}));
  143. storage.mount('data', unstorage_47drivers_47fs_45lite({"driver":"fsLite","base":"D:\\张文静1\\zwj\\nuxt\\sannongzixunwang_web\\.data\\kv"}));
  144. storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"D:\\张文静1\\zwj\\nuxt\\sannongzixunwang_web","ignore":["**/node_modules/**","**/.git/**"]}));
  145. storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"D:\\张文静1\\zwj\\nuxt\\sannongzixunwang_web\\server","ignore":["**/node_modules/**","**/.git/**"]}));
  146. storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"D:\\张文静1\\zwj\\nuxt\\sannongzixunwang_web\\.nuxt","ignore":["**/node_modules/**","**/.git/**"]}));
  147. storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"D:\\张文静1\\zwj\\nuxt\\sannongzixunwang_web\\.nuxt\\cache","ignore":["**/node_modules/**","**/.git/**"]}));
  148. function useStorage(base = "") {
  149. return base ? prefixStorage(storage, base) : storage;
  150. }
  151. const defaultCacheOptions = {
  152. name: "_",
  153. base: "/cache",
  154. swr: true,
  155. maxAge: 1
  156. };
  157. function defineCachedFunction(fn, opts = {}) {
  158. opts = { ...defaultCacheOptions, ...opts };
  159. const pending = {};
  160. const group = opts.group || "nitro/functions";
  161. const name = opts.name || fn.name || "_";
  162. const integrity = opts.integrity || hash([fn, opts]);
  163. const validate = opts.validate || ((entry) => entry.value !== void 0);
  164. async function get(key, resolver, shouldInvalidateCache, event) {
  165. const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index");
  166. let entry = await useStorage().getItem(cacheKey) || {};
  167. if (typeof entry !== "object") {
  168. entry = {};
  169. const error = new Error("Malformed data read from cache.");
  170. console.error("[nitro] [cache]", error);
  171. useNitroApp().captureError(error, { event, tags: ["cache"] });
  172. }
  173. const ttl = (opts.maxAge ?? opts.maxAge ?? 0) * 1e3;
  174. if (ttl) {
  175. entry.expires = Date.now() + ttl;
  176. }
  177. const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false;
  178. const _resolve = async () => {
  179. const isPending = pending[key];
  180. if (!isPending) {
  181. if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) {
  182. entry.value = void 0;
  183. entry.integrity = void 0;
  184. entry.mtime = void 0;
  185. entry.expires = void 0;
  186. }
  187. pending[key] = Promise.resolve(resolver());
  188. }
  189. try {
  190. entry.value = await pending[key];
  191. } catch (error) {
  192. if (!isPending) {
  193. delete pending[key];
  194. }
  195. throw error;
  196. }
  197. if (!isPending) {
  198. entry.mtime = Date.now();
  199. entry.integrity = integrity;
  200. delete pending[key];
  201. if (validate(entry) !== false) {
  202. const promise = useStorage().setItem(cacheKey, entry).catch((error) => {
  203. console.error(`[nitro] [cache] Cache write error.`, error);
  204. useNitroApp().captureError(error, { event, tags: ["cache"] });
  205. });
  206. if (event && event.waitUntil) {
  207. event.waitUntil(promise);
  208. }
  209. }
  210. }
  211. };
  212. const _resolvePromise = expired ? _resolve() : Promise.resolve();
  213. if (entry.value === void 0) {
  214. await _resolvePromise;
  215. } else if (expired && event && event.waitUntil) {
  216. event.waitUntil(_resolvePromise);
  217. }
  218. if (opts.swr && validate(entry) !== false) {
  219. _resolvePromise.catch((error) => {
  220. console.error(`[nitro] [cache] SWR handler error.`, error);
  221. useNitroApp().captureError(error, { event, tags: ["cache"] });
  222. });
  223. return entry;
  224. }
  225. return _resolvePromise.then(() => entry);
  226. }
  227. return async (...args) => {
  228. const shouldBypassCache = await opts.shouldBypassCache?.(...args);
  229. if (shouldBypassCache) {
  230. return fn(...args);
  231. }
  232. const key = await (opts.getKey || getKey)(...args);
  233. const shouldInvalidateCache = await opts.shouldInvalidateCache?.(...args);
  234. const entry = await get(
  235. key,
  236. () => fn(...args),
  237. shouldInvalidateCache,
  238. args[0] && isEvent(args[0]) ? args[0] : void 0
  239. );
  240. let value = entry.value;
  241. if (opts.transform) {
  242. value = await opts.transform(entry, ...args) || value;
  243. }
  244. return value;
  245. };
  246. }
  247. const cachedFunction = defineCachedFunction;
  248. function getKey(...args) {
  249. return args.length > 0 ? hash(args, {}) : "";
  250. }
  251. function escapeKey(key) {
  252. return String(key).replace(/\W/g, "");
  253. }
  254. function defineCachedEventHandler(handler, opts = defaultCacheOptions) {
  255. const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort();
  256. const _opts = {
  257. ...opts,
  258. getKey: async (event) => {
  259. const customKey = await opts.getKey?.(event);
  260. if (customKey) {
  261. return escapeKey(customKey);
  262. }
  263. const _path = event.node.req.originalUrl || event.node.req.url || event.path;
  264. const _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index";
  265. const _hashedPath = `${_pathname}.${hash(_path)}`;
  266. const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`);
  267. return [_hashedPath, ..._headers].join(":");
  268. },
  269. validate: (entry) => {
  270. if (!entry.value) {
  271. return false;
  272. }
  273. if (entry.value.code >= 400) {
  274. return false;
  275. }
  276. if (entry.value.body === void 0) {
  277. return false;
  278. }
  279. if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") {
  280. return false;
  281. }
  282. return true;
  283. },
  284. group: opts.group || "nitro/handlers",
  285. integrity: opts.integrity || hash([handler, opts])
  286. };
  287. const _cachedHandler = cachedFunction(
  288. async (incomingEvent) => {
  289. const variableHeaders = {};
  290. for (const header of variableHeaderNames) {
  291. variableHeaders[header] = incomingEvent.node.req.headers[header];
  292. }
  293. const reqProxy = cloneWithProxy(incomingEvent.node.req, {
  294. headers: variableHeaders
  295. });
  296. const resHeaders = {};
  297. let _resSendBody;
  298. const resProxy = cloneWithProxy(incomingEvent.node.res, {
  299. statusCode: 200,
  300. writableEnded: false,
  301. writableFinished: false,
  302. headersSent: false,
  303. closed: false,
  304. getHeader(name) {
  305. return resHeaders[name];
  306. },
  307. setHeader(name, value) {
  308. resHeaders[name] = value;
  309. return this;
  310. },
  311. getHeaderNames() {
  312. return Object.keys(resHeaders);
  313. },
  314. hasHeader(name) {
  315. return name in resHeaders;
  316. },
  317. removeHeader(name) {
  318. delete resHeaders[name];
  319. },
  320. getHeaders() {
  321. return resHeaders;
  322. },
  323. end(chunk, arg2, arg3) {
  324. if (typeof chunk === "string") {
  325. _resSendBody = chunk;
  326. }
  327. if (typeof arg2 === "function") {
  328. arg2();
  329. }
  330. if (typeof arg3 === "function") {
  331. arg3();
  332. }
  333. return this;
  334. },
  335. write(chunk, arg2, arg3) {
  336. if (typeof chunk === "string") {
  337. _resSendBody = chunk;
  338. }
  339. if (typeof arg2 === "function") {
  340. arg2();
  341. }
  342. if (typeof arg3 === "function") {
  343. arg3();
  344. }
  345. return this;
  346. },
  347. writeHead(statusCode, headers2) {
  348. this.statusCode = statusCode;
  349. if (headers2) {
  350. for (const header in headers2) {
  351. this.setHeader(header, headers2[header]);
  352. }
  353. }
  354. return this;
  355. }
  356. });
  357. const event = createEvent(reqProxy, resProxy);
  358. event.fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, {
  359. fetch: useNitroApp().localFetch
  360. });
  361. event.$fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, {
  362. fetch: globalThis.$fetch
  363. });
  364. event.context = incomingEvent.context;
  365. event.context.cache = {
  366. options: _opts
  367. };
  368. const body = await handler(event) || _resSendBody;
  369. const headers = event.node.res.getHeaders();
  370. headers.etag = String(
  371. headers.Etag || headers.etag || `W/"${hash(body)}"`
  372. );
  373. headers["last-modified"] = String(
  374. headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString()
  375. );
  376. const cacheControl = [];
  377. if (opts.swr) {
  378. if (opts.maxAge) {
  379. cacheControl.push(`s-maxage=${opts.maxAge}`);
  380. }
  381. if (opts.staleMaxAge) {
  382. cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
  383. } else {
  384. cacheControl.push("stale-while-revalidate");
  385. }
  386. } else if (opts.maxAge) {
  387. cacheControl.push(`max-age=${opts.maxAge}`);
  388. }
  389. if (cacheControl.length > 0) {
  390. headers["cache-control"] = cacheControl.join(", ");
  391. }
  392. const cacheEntry = {
  393. code: event.node.res.statusCode,
  394. headers,
  395. body
  396. };
  397. return cacheEntry;
  398. },
  399. _opts
  400. );
  401. return defineEventHandler(async (event) => {
  402. if (opts.headersOnly) {
  403. if (handleCacheHeaders(event, { maxAge: opts.maxAge })) {
  404. return;
  405. }
  406. return handler(event);
  407. }
  408. const response = await _cachedHandler(event);
  409. if (event.node.res.headersSent || event.node.res.writableEnded) {
  410. return response.body;
  411. }
  412. if (handleCacheHeaders(event, {
  413. modifiedTime: new Date(response.headers["last-modified"]),
  414. etag: response.headers.etag,
  415. maxAge: opts.maxAge
  416. })) {
  417. return;
  418. }
  419. event.node.res.statusCode = response.code;
  420. for (const name in response.headers) {
  421. const value = response.headers[name];
  422. if (name === "set-cookie") {
  423. event.node.res.appendHeader(
  424. name,
  425. splitCookiesString(value)
  426. );
  427. } else {
  428. event.node.res.setHeader(name, value);
  429. }
  430. }
  431. return response.body;
  432. });
  433. }
  434. function cloneWithProxy(obj, overrides) {
  435. return new Proxy(obj, {
  436. get(target, property, receiver) {
  437. if (property in overrides) {
  438. return overrides[property];
  439. }
  440. return Reflect.get(target, property, receiver);
  441. },
  442. set(target, property, value, receiver) {
  443. if (property in overrides) {
  444. overrides[property] = value;
  445. return true;
  446. }
  447. return Reflect.set(target, property, value, receiver);
  448. }
  449. });
  450. }
  451. const cachedEventHandler = defineCachedEventHandler;
  452. function hasReqHeader(event, name, includes) {
  453. const value = getRequestHeader(event, name);
  454. return value && typeof value === "string" && value.toLowerCase().includes(includes);
  455. }
  456. function isJsonRequest(event) {
  457. if (hasReqHeader(event, "accept", "text/html")) {
  458. return false;
  459. }
  460. 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");
  461. }
  462. function normalizeError(error) {
  463. const cwd = typeof process.cwd === "function" ? process.cwd() : "/";
  464. const stack = (error.stack || "").split("\n").splice(1).filter((line) => line.includes("at ")).map((line) => {
  465. const text = line.replace(cwd + "/", "./").replace("webpack:/", "").replace("file://", "").trim();
  466. return {
  467. text,
  468. internal: line.includes("node_modules") && !line.includes(".cache") || line.includes("internal") || line.includes("new Promise")
  469. };
  470. });
  471. const statusCode = error.statusCode || 500;
  472. const statusMessage = error.statusMessage ?? (statusCode === 404 ? "Not Found" : "");
  473. const message = error.message || error.toString();
  474. return {
  475. stack,
  476. statusCode,
  477. statusMessage,
  478. message
  479. };
  480. }
  481. function _captureError(error, type) {
  482. console.error(`[nitro] [${type}]`, error);
  483. useNitroApp().captureError(error, { tags: [type] });
  484. }
  485. function trapUnhandledNodeErrors() {
  486. process.on(
  487. "unhandledRejection",
  488. (error) => _captureError(error, "unhandledRejection")
  489. );
  490. process.on(
  491. "uncaughtException",
  492. (error) => _captureError(error, "uncaughtException")
  493. );
  494. }
  495. function joinHeaders(value) {
  496. return Array.isArray(value) ? value.join(", ") : String(value);
  497. }
  498. function normalizeFetchResponse(response) {
  499. if (!response.headers.has("set-cookie")) {
  500. return response;
  501. }
  502. return new Response(response.body, {
  503. status: response.status,
  504. statusText: response.statusText,
  505. headers: normalizeCookieHeaders(response.headers)
  506. });
  507. }
  508. function normalizeCookieHeader(header = "") {
  509. return splitCookiesString(joinHeaders(header));
  510. }
  511. function normalizeCookieHeaders(headers) {
  512. const outgoingHeaders = new Headers();
  513. for (const [name, header] of headers) {
  514. if (name === "set-cookie") {
  515. for (const cookie of normalizeCookieHeader(header)) {
  516. outgoingHeaders.append("set-cookie", cookie);
  517. }
  518. } else {
  519. outgoingHeaders.set(name, joinHeaders(header));
  520. }
  521. }
  522. return outgoingHeaders;
  523. }
  524. const config = useRuntimeConfig();
  525. const _routeRulesMatcher = toRouteMatcher(
  526. createRouter({ routes: config.nitro.routeRules })
  527. );
  528. function createRouteRulesHandler(ctx) {
  529. return eventHandler((event) => {
  530. const routeRules = getRouteRules(event);
  531. if (routeRules.headers) {
  532. setHeaders(event, routeRules.headers);
  533. }
  534. if (routeRules.redirect) {
  535. let target = routeRules.redirect.to;
  536. if (target.endsWith("/**")) {
  537. let targetPath = event.path;
  538. const strpBase = routeRules.redirect._redirectStripBase;
  539. if (strpBase) {
  540. targetPath = withoutBase(targetPath, strpBase);
  541. }
  542. target = joinURL(target.slice(0, -3), targetPath);
  543. } else if (event.path.includes("?")) {
  544. const query = getQuery(event.path);
  545. target = withQuery(target, query);
  546. }
  547. return sendRedirect(event, target, routeRules.redirect.statusCode);
  548. }
  549. if (routeRules.proxy) {
  550. let target = routeRules.proxy.to;
  551. if (target.endsWith("/**")) {
  552. let targetPath = event.path;
  553. const strpBase = routeRules.proxy._proxyStripBase;
  554. if (strpBase) {
  555. targetPath = withoutBase(targetPath, strpBase);
  556. }
  557. target = joinURL(target.slice(0, -3), targetPath);
  558. } else if (event.path.includes("?")) {
  559. const query = getQuery(event.path);
  560. target = withQuery(target, query);
  561. }
  562. return proxyRequest(event, target, {
  563. fetch: ctx.localFetch,
  564. ...routeRules.proxy
  565. });
  566. }
  567. });
  568. }
  569. function getRouteRules(event) {
  570. event.context._nitro = event.context._nitro || {};
  571. if (!event.context._nitro.routeRules) {
  572. event.context._nitro.routeRules = getRouteRulesForPath(
  573. withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL)
  574. );
  575. }
  576. return event.context._nitro.routeRules;
  577. }
  578. function getRouteRulesForPath(path) {
  579. return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
  580. }
  581. const plugins = [
  582. ];
  583. const errorHandler = (async function errorhandler(error, event) {
  584. const { stack, statusCode, statusMessage, message } = normalizeError(error);
  585. const errorObject = {
  586. url: event.path,
  587. statusCode,
  588. statusMessage,
  589. message,
  590. stack: "",
  591. // TODO: check and validate error.data for serialisation into query
  592. data: error.data
  593. };
  594. if (error.unhandled || error.fatal) {
  595. const tags = [
  596. "[nuxt]",
  597. "[request error]",
  598. error.unhandled && "[unhandled]",
  599. error.fatal && "[fatal]",
  600. Number(errorObject.statusCode) !== 200 && `[${errorObject.statusCode}]`
  601. ].filter(Boolean).join(" ");
  602. console.error(tags, (error.message || error.toString() || "internal server error") + "\n" + stack.map((l) => " " + l.text).join(" \n"));
  603. }
  604. if (event.handled) {
  605. return;
  606. }
  607. setResponseStatus(event, errorObject.statusCode !== 200 && errorObject.statusCode || 500, errorObject.statusMessage);
  608. if (isJsonRequest(event)) {
  609. setResponseHeader(event, "Content-Type", "application/json");
  610. return send(event, JSON.stringify(errorObject));
  611. }
  612. const reqHeaders = getRequestHeaders(event);
  613. const isRenderingError = event.path.startsWith("/__nuxt_error") || !!reqHeaders["x-nuxt-error"];
  614. const res = isRenderingError ? null : await useNitroApp().localFetch(
  615. withQuery(joinURL(useRuntimeConfig(event).app.baseURL, "/__nuxt_error"), errorObject),
  616. {
  617. headers: { ...reqHeaders, "x-nuxt-error": "true" },
  618. redirect: "manual"
  619. }
  620. ).catch(() => null);
  621. if (!res) {
  622. const { template } = await import('../_/error-500.mjs');
  623. if (event.handled) {
  624. return;
  625. }
  626. setResponseHeader(event, "Content-Type", "text/html;charset=UTF-8");
  627. return send(event, template(errorObject));
  628. }
  629. const html = await res.text();
  630. if (event.handled) {
  631. return;
  632. }
  633. for (const [header, value] of res.headers.entries()) {
  634. setResponseHeader(event, header, value);
  635. }
  636. setResponseStatus(event, res.status && res.status !== 200 ? res.status : void 0, res.statusText);
  637. return send(event, html);
  638. });
  639. const assets = {};
  640. function readAsset (id) {
  641. const serverDir = dirname(fileURLToPath(globalThis._importMeta_.url));
  642. return promises.readFile(resolve(serverDir, assets[id].path))
  643. }
  644. const publicAssetBases = {"/_nuxt/builds/meta/":{"maxAge":31536000},"/_nuxt/builds/":{"maxAge":1},"/_nuxt/":{"maxAge":31536000}};
  645. function isPublicAssetURL(id = '') {
  646. if (assets[id]) {
  647. return true
  648. }
  649. for (const base in publicAssetBases) {
  650. if (id.startsWith(base)) { return true }
  651. }
  652. return false
  653. }
  654. function getAsset (id) {
  655. return assets[id]
  656. }
  657. const METHODS = /* @__PURE__ */ new Set(["HEAD", "GET"]);
  658. const EncodingMap = { gzip: ".gz", br: ".br" };
  659. const _f4b49z = eventHandler((event) => {
  660. if (event.method && !METHODS.has(event.method)) {
  661. return;
  662. }
  663. let id = decodePath(
  664. withLeadingSlash(withoutTrailingSlash(parseURL(event.path).pathname))
  665. );
  666. let asset;
  667. const encodingHeader = String(
  668. getRequestHeader(event, "accept-encoding") || ""
  669. );
  670. const encodings = [
  671. ...encodingHeader.split(",").map((e) => EncodingMap[e.trim()]).filter(Boolean).sort(),
  672. ""
  673. ];
  674. if (encodings.length > 1) {
  675. setResponseHeader(event, "Vary", "Accept-Encoding");
  676. }
  677. for (const encoding of encodings) {
  678. for (const _id of [id + encoding, joinURL(id, "index.html" + encoding)]) {
  679. const _asset = getAsset(_id);
  680. if (_asset) {
  681. asset = _asset;
  682. id = _id;
  683. break;
  684. }
  685. }
  686. }
  687. if (!asset) {
  688. if (isPublicAssetURL(id)) {
  689. removeResponseHeader(event, "Cache-Control");
  690. throw createError({
  691. statusMessage: "Cannot find static asset " + id,
  692. statusCode: 404
  693. });
  694. }
  695. return;
  696. }
  697. const ifNotMatch = getRequestHeader(event, "if-none-match") === asset.etag;
  698. if (ifNotMatch) {
  699. setResponseStatus(event, 304, "Not Modified");
  700. return "";
  701. }
  702. const ifModifiedSinceH = getRequestHeader(event, "if-modified-since");
  703. const mtimeDate = new Date(asset.mtime);
  704. if (ifModifiedSinceH && asset.mtime && new Date(ifModifiedSinceH) >= mtimeDate) {
  705. setResponseStatus(event, 304, "Not Modified");
  706. return "";
  707. }
  708. if (asset.type && !getResponseHeader(event, "Content-Type")) {
  709. setResponseHeader(event, "Content-Type", asset.type);
  710. }
  711. if (asset.etag && !getResponseHeader(event, "ETag")) {
  712. setResponseHeader(event, "ETag", asset.etag);
  713. }
  714. if (asset.mtime && !getResponseHeader(event, "Last-Modified")) {
  715. setResponseHeader(event, "Last-Modified", mtimeDate.toUTCString());
  716. }
  717. if (asset.encoding && !getResponseHeader(event, "Content-Encoding")) {
  718. setResponseHeader(event, "Content-Encoding", asset.encoding);
  719. }
  720. if (asset.size > 0 && !getResponseHeader(event, "Content-Length")) {
  721. setResponseHeader(event, "Content-Length", asset.size);
  722. }
  723. return readAsset(id);
  724. });
  725. const _lazy_LBcAch = () => Promise.resolve().then(function () { return index; });
  726. const _lazy_yRRAv1 = () => import('../_/renderer.mjs').then(function (n) { return n.r; });
  727. const handlers = [
  728. { route: '', handler: _f4b49z, lazy: false, middleware: true, method: undefined },
  729. { route: '/api', handler: _lazy_LBcAch, lazy: true, middleware: false, method: undefined },
  730. { route: '/**', handler: _lazy_yRRAv1, lazy: true, middleware: false, method: undefined }
  731. ];
  732. function createNitroApp() {
  733. const config = useRuntimeConfig();
  734. const hooks = createHooks();
  735. const captureError = (error, context = {}) => {
  736. const promise = hooks.callHookParallel("error", error, context).catch((_err) => {
  737. console.error("Error while capturing another error", _err);
  738. });
  739. if (context.event && isEvent(context.event)) {
  740. const errors = context.event.context.nitro?.errors;
  741. if (errors) {
  742. errors.push({ error, context });
  743. }
  744. if (context.event.waitUntil) {
  745. context.event.waitUntil(promise);
  746. }
  747. }
  748. };
  749. const h3App = createApp({
  750. debug: destr(false),
  751. onError: (error, event) => {
  752. captureError(error, { event, tags: ["request"] });
  753. return errorHandler(error, event);
  754. },
  755. onRequest: async (event) => {
  756. await nitroApp.hooks.callHook("request", event).catch((error) => {
  757. captureError(error, { event, tags: ["request"] });
  758. });
  759. },
  760. onBeforeResponse: async (event, response) => {
  761. await nitroApp.hooks.callHook("beforeResponse", event, response).catch((error) => {
  762. captureError(error, { event, tags: ["request", "response"] });
  763. });
  764. },
  765. onAfterResponse: async (event, response) => {
  766. await nitroApp.hooks.callHook("afterResponse", event, response).catch((error) => {
  767. captureError(error, { event, tags: ["request", "response"] });
  768. });
  769. }
  770. });
  771. const router = createRouter$1({
  772. preemptive: true
  773. });
  774. const localCall = createCall(toNodeListener(h3App));
  775. const _localFetch = createFetch(localCall, globalThis.fetch);
  776. const localFetch = (input, init) => _localFetch(input, init).then(
  777. (response) => normalizeFetchResponse(response)
  778. );
  779. const $fetch = createFetch$1({
  780. fetch: localFetch,
  781. Headers: Headers$1,
  782. defaults: { baseURL: config.app.baseURL }
  783. });
  784. globalThis.$fetch = $fetch;
  785. h3App.use(createRouteRulesHandler({ localFetch }));
  786. h3App.use(
  787. eventHandler((event) => {
  788. event.context.nitro = event.context.nitro || { errors: [] };
  789. const envContext = event.node.req?.__unenv__;
  790. if (envContext) {
  791. Object.assign(event.context, envContext);
  792. }
  793. event.fetch = (req, init) => fetchWithEvent(event, req, init, { fetch: localFetch });
  794. event.$fetch = (req, init) => fetchWithEvent(event, req, init, {
  795. fetch: $fetch
  796. });
  797. event.waitUntil = (promise) => {
  798. if (!event.context.nitro._waitUntilPromises) {
  799. event.context.nitro._waitUntilPromises = [];
  800. }
  801. event.context.nitro._waitUntilPromises.push(promise);
  802. if (envContext?.waitUntil) {
  803. envContext.waitUntil(promise);
  804. }
  805. };
  806. event.captureError = (error, context) => {
  807. captureError(error, { event, ...context });
  808. };
  809. })
  810. );
  811. for (const h of handlers) {
  812. let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
  813. if (h.middleware || !h.route) {
  814. const middlewareBase = (config.app.baseURL + (h.route || "/")).replace(
  815. /\/+/g,
  816. "/"
  817. );
  818. h3App.use(middlewareBase, handler);
  819. } else {
  820. const routeRules = getRouteRulesForPath(
  821. h.route.replace(/:\w+|\*\*/g, "_")
  822. );
  823. if (routeRules.cache) {
  824. handler = cachedEventHandler(handler, {
  825. group: "nitro/routes",
  826. ...routeRules.cache
  827. });
  828. }
  829. router.use(h.route, handler, h.method);
  830. }
  831. }
  832. h3App.use(config.app.baseURL, router.handler);
  833. const app = {
  834. hooks,
  835. h3App,
  836. router,
  837. localCall,
  838. localFetch,
  839. captureError
  840. };
  841. for (const plugin of plugins) {
  842. try {
  843. plugin(app);
  844. } catch (err) {
  845. captureError(err, { tags: ["plugin"] });
  846. throw err;
  847. }
  848. }
  849. return app;
  850. }
  851. const nitroApp = createNitroApp();
  852. const useNitroApp = () => nitroApp;
  853. const localFetch = nitroApp.localFetch;
  854. const closePrerenderer = () => nitroApp.hooks.callHook("close");
  855. trapUnhandledNodeErrors();
  856. const index = /*#__PURE__*/Object.freeze({
  857. __proto__: null
  858. });
  859. export { useNitroApp as a, useStorage as b, closePrerenderer as c, getRouteRules as g, localFetch as l, useRuntimeConfig as u };
  860. //# sourceMappingURL=index.mjs.map