index.mjs 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235
  1. import process from 'node:process';globalThis._importMeta_={url:import.meta.url,env:process.env};import { tmpdir } from 'node:os';
  2. import destr from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs';
  3. import { defineEventHandler, handleCacheHeaders, splitCookiesString, createEvent, fetchWithEvent, isEvent, eventHandler, setHeaders, sendRedirect, proxyRequest, getRequestURL, getRequestHeader, getResponseHeader, getRequestHeaders, setResponseHeaders, setResponseStatus, send, createApp, createRouter as createRouter$1, toNodeListener, lazyEventHandler, createError, getRouterParam, readBody, getQuery as getQuery$1, getHeader, deleteCookie, setCookie, getCookie, setHeader } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/h3@1.15.3/node_modules/h3/dist/index.mjs';
  4. import { createHooks } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs';
  5. import { createFetch, Headers as Headers$1 } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/ofetch@1.4.1/node_modules/ofetch/dist/node.mjs';
  6. import { fetchNodeRequestHandler, callNodeRequestHandler } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/node-mock-http@1.0.1/node_modules/node-mock-http/dist/index.mjs';
  7. import { parseURL, withoutBase, joinURL, getQuery, withQuery } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs';
  8. import { createStorage, prefixStorage } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/unstorage@1.16.0_@netlify+blobs@8.2.0_db0@0.3.2_ioredis@5.6.1/node_modules/unstorage/dist/index.mjs';
  9. import unstorage_47drivers_47fs from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/unstorage@1.16.0_@netlify+blobs@8.2.0_db0@0.3.2_ioredis@5.6.1/node_modules/unstorage/drivers/fs.mjs';
  10. import { digest } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs';
  11. import { klona } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs';
  12. import defu, { defuFn } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs';
  13. import { snakeCase } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs';
  14. import { getContext } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/unctx@2.4.1/node_modules/unctx/dist/index.mjs';
  15. import { toRouteMatcher, createRouter } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs';
  16. import { readFile } from 'node:fs/promises';
  17. import { resolve, dirname, join } from 'node:path';
  18. import consola from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/index.mjs';
  19. import { ErrorParser } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/youch-core@0.3.2/node_modules/youch-core/build/index.js';
  20. import { Youch } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/youch@4.1.0-beta.8/node_modules/youch/build/index.js';
  21. import { SourceMapConsumer } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/source-map@0.7.4/node_modules/source-map/source-map.js';
  22. import { Server } from 'node:http';
  23. import nodeCrypto from 'node:crypto';
  24. import { parentPort, threadId } from 'node:worker_threads';
  25. import { faker } from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/@faker-js+faker@9.9.0/node_modules/@faker-js/faker/dist/index.js';
  26. import jwt from 'file:///Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/node_modules/.pnpm/jsonwebtoken@9.0.2/node_modules/jsonwebtoken/index.js';
  27. const serverAssets = [{"baseName":"server","dir":"/Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/apps/backend-mock/assets"}];
  28. const assets = createStorage();
  29. for (const asset of serverAssets) {
  30. assets.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir, ignore: (asset?.ignore || []) }));
  31. }
  32. const storage = createStorage({});
  33. storage.mount('/assets', assets);
  34. storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/apps/backend-mock"}));
  35. storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/apps/backend-mock"}));
  36. storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/apps/backend-mock/.nitro"}));
  37. storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/apps/backend-mock/.nitro/cache"}));
  38. storage.mount('data', unstorage_47drivers_47fs({"driver":"fs","base":"/Users/linjiancheng/Documents/gameMame/web_admin_fortue_tiger_vben/apps/backend-mock/.data/kv"}));
  39. function useStorage(base = "") {
  40. return base ? prefixStorage(storage, base) : storage;
  41. }
  42. const Hasher = /* @__PURE__ */ (() => {
  43. class Hasher2 {
  44. buff = "";
  45. #context = /* @__PURE__ */ new Map();
  46. write(str) {
  47. this.buff += str;
  48. }
  49. dispatch(value) {
  50. const type = value === null ? "null" : typeof value;
  51. return this[type](value);
  52. }
  53. object(object) {
  54. if (object && typeof object.toJSON === "function") {
  55. return this.object(object.toJSON());
  56. }
  57. const objString = Object.prototype.toString.call(object);
  58. let objType = "";
  59. const objectLength = objString.length;
  60. objType = objectLength < 10 ? "unknown:[" + objString + "]" : objString.slice(8, objectLength - 1);
  61. objType = objType.toLowerCase();
  62. let objectNumber = null;
  63. if ((objectNumber = this.#context.get(object)) === void 0) {
  64. this.#context.set(object, this.#context.size);
  65. } else {
  66. return this.dispatch("[CIRCULAR:" + objectNumber + "]");
  67. }
  68. if (typeof Buffer !== "undefined" && Buffer.isBuffer && Buffer.isBuffer(object)) {
  69. this.write("buffer:");
  70. return this.write(object.toString("utf8"));
  71. }
  72. if (objType !== "object" && objType !== "function" && objType !== "asyncfunction") {
  73. if (this[objType]) {
  74. this[objType](object);
  75. } else {
  76. this.unknown(object, objType);
  77. }
  78. } else {
  79. const keys = Object.keys(object).sort();
  80. const extraKeys = [];
  81. this.write("object:" + (keys.length + extraKeys.length) + ":");
  82. const dispatchForKey = (key) => {
  83. this.dispatch(key);
  84. this.write(":");
  85. this.dispatch(object[key]);
  86. this.write(",");
  87. };
  88. for (const key of keys) {
  89. dispatchForKey(key);
  90. }
  91. for (const key of extraKeys) {
  92. dispatchForKey(key);
  93. }
  94. }
  95. }
  96. array(arr, unordered) {
  97. unordered = unordered === void 0 ? false : unordered;
  98. this.write("array:" + arr.length + ":");
  99. if (!unordered || arr.length <= 1) {
  100. for (const entry of arr) {
  101. this.dispatch(entry);
  102. }
  103. return;
  104. }
  105. const contextAdditions = /* @__PURE__ */ new Map();
  106. const entries = arr.map((entry) => {
  107. const hasher = new Hasher2();
  108. hasher.dispatch(entry);
  109. for (const [key, value] of hasher.#context) {
  110. contextAdditions.set(key, value);
  111. }
  112. return hasher.toString();
  113. });
  114. this.#context = contextAdditions;
  115. entries.sort();
  116. return this.array(entries, false);
  117. }
  118. date(date) {
  119. return this.write("date:" + date.toJSON());
  120. }
  121. symbol(sym) {
  122. return this.write("symbol:" + sym.toString());
  123. }
  124. unknown(value, type) {
  125. this.write(type);
  126. if (!value) {
  127. return;
  128. }
  129. this.write(":");
  130. if (value && typeof value.entries === "function") {
  131. return this.array(
  132. [...value.entries()],
  133. true
  134. /* ordered */
  135. );
  136. }
  137. }
  138. error(err) {
  139. return this.write("error:" + err.toString());
  140. }
  141. boolean(bool) {
  142. return this.write("bool:" + bool);
  143. }
  144. string(string) {
  145. this.write("string:" + string.length + ":");
  146. this.write(string);
  147. }
  148. function(fn) {
  149. this.write("fn:");
  150. if (isNativeFunction(fn)) {
  151. this.dispatch("[native]");
  152. } else {
  153. this.dispatch(fn.toString());
  154. }
  155. }
  156. number(number) {
  157. return this.write("number:" + number);
  158. }
  159. null() {
  160. return this.write("Null");
  161. }
  162. undefined() {
  163. return this.write("Undefined");
  164. }
  165. regexp(regex) {
  166. return this.write("regex:" + regex.toString());
  167. }
  168. arraybuffer(arr) {
  169. this.write("arraybuffer:");
  170. return this.dispatch(new Uint8Array(arr));
  171. }
  172. url(url) {
  173. return this.write("url:" + url.toString());
  174. }
  175. map(map) {
  176. this.write("map:");
  177. const arr = [...map];
  178. return this.array(arr, false);
  179. }
  180. set(set) {
  181. this.write("set:");
  182. const arr = [...set];
  183. return this.array(arr, false);
  184. }
  185. bigint(number) {
  186. return this.write("bigint:" + number.toString());
  187. }
  188. }
  189. for (const type of [
  190. "uint8array",
  191. "uint8clampedarray",
  192. "unt8array",
  193. "uint16array",
  194. "unt16array",
  195. "uint32array",
  196. "unt32array",
  197. "float32array",
  198. "float64array"
  199. ]) {
  200. Hasher2.prototype[type] = function(arr) {
  201. this.write(type + ":");
  202. return this.array([...arr], false);
  203. };
  204. }
  205. function isNativeFunction(f) {
  206. if (typeof f !== "function") {
  207. return false;
  208. }
  209. return Function.prototype.toString.call(f).slice(
  210. -15
  211. /* "[native code] }".length */
  212. ) === "[native code] }";
  213. }
  214. return Hasher2;
  215. })();
  216. function serialize(object) {
  217. const hasher = new Hasher();
  218. hasher.dispatch(object);
  219. return hasher.buff;
  220. }
  221. function hash(value) {
  222. return digest(typeof value === "string" ? value : serialize(value)).replace(/[-_]/g, "").slice(0, 10);
  223. }
  224. function defaultCacheOptions() {
  225. return {
  226. name: "_",
  227. base: "/cache",
  228. swr: true,
  229. maxAge: 1
  230. };
  231. }
  232. function defineCachedFunction(fn, opts = {}) {
  233. opts = { ...defaultCacheOptions(), ...opts };
  234. const pending = {};
  235. const group = opts.group || "nitro/functions";
  236. const name = opts.name || fn.name || "_";
  237. const integrity = opts.integrity || hash([fn, opts]);
  238. const validate = opts.validate || ((entry) => entry.value !== void 0);
  239. async function get(key, resolver, shouldInvalidateCache, event) {
  240. const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index");
  241. let entry = await useStorage().getItem(cacheKey).catch((error) => {
  242. console.error(`[cache] Cache read error.`, error);
  243. useNitroApp().captureError(error, { event, tags: ["cache"] });
  244. }) || {};
  245. if (typeof entry !== "object") {
  246. entry = {};
  247. const error = new Error("Malformed data read from cache.");
  248. console.error("[cache]", error);
  249. useNitroApp().captureError(error, { event, tags: ["cache"] });
  250. }
  251. const ttl = (opts.maxAge ?? 0) * 1e3;
  252. if (ttl) {
  253. entry.expires = Date.now() + ttl;
  254. }
  255. const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false;
  256. const _resolve = async () => {
  257. const isPending = pending[key];
  258. if (!isPending) {
  259. if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) {
  260. entry.value = void 0;
  261. entry.integrity = void 0;
  262. entry.mtime = void 0;
  263. entry.expires = void 0;
  264. }
  265. pending[key] = Promise.resolve(resolver());
  266. }
  267. try {
  268. entry.value = await pending[key];
  269. } catch (error) {
  270. if (!isPending) {
  271. delete pending[key];
  272. }
  273. throw error;
  274. }
  275. if (!isPending) {
  276. entry.mtime = Date.now();
  277. entry.integrity = integrity;
  278. delete pending[key];
  279. if (validate(entry) !== false) {
  280. let setOpts;
  281. if (opts.maxAge && !opts.swr) {
  282. setOpts = { ttl: opts.maxAge };
  283. }
  284. const promise = useStorage().setItem(cacheKey, entry, setOpts).catch((error) => {
  285. console.error(`[cache] Cache write error.`, error);
  286. useNitroApp().captureError(error, { event, tags: ["cache"] });
  287. });
  288. if (event?.waitUntil) {
  289. event.waitUntil(promise);
  290. }
  291. }
  292. }
  293. };
  294. const _resolvePromise = expired ? _resolve() : Promise.resolve();
  295. if (entry.value === void 0) {
  296. await _resolvePromise;
  297. } else if (expired && event && event.waitUntil) {
  298. event.waitUntil(_resolvePromise);
  299. }
  300. if (opts.swr && validate(entry) !== false) {
  301. _resolvePromise.catch((error) => {
  302. console.error(`[cache] SWR handler error.`, error);
  303. useNitroApp().captureError(error, { event, tags: ["cache"] });
  304. });
  305. return entry;
  306. }
  307. return _resolvePromise.then(() => entry);
  308. }
  309. return async (...args) => {
  310. const shouldBypassCache = await opts.shouldBypassCache?.(...args);
  311. if (shouldBypassCache) {
  312. return fn(...args);
  313. }
  314. const key = await (opts.getKey || getKey)(...args);
  315. const shouldInvalidateCache = await opts.shouldInvalidateCache?.(...args);
  316. const entry = await get(
  317. key,
  318. () => fn(...args),
  319. shouldInvalidateCache,
  320. args[0] && isEvent(args[0]) ? args[0] : void 0
  321. );
  322. let value = entry.value;
  323. if (opts.transform) {
  324. value = await opts.transform(entry, ...args) || value;
  325. }
  326. return value;
  327. };
  328. }
  329. function cachedFunction(fn, opts = {}) {
  330. return defineCachedFunction(fn, opts);
  331. }
  332. function getKey(...args) {
  333. return args.length > 0 ? hash(args) : "";
  334. }
  335. function escapeKey(key) {
  336. return String(key).replace(/\W/g, "");
  337. }
  338. function defineCachedEventHandler(handler, opts = defaultCacheOptions()) {
  339. const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort();
  340. const _opts = {
  341. ...opts,
  342. getKey: async (event) => {
  343. const customKey = await opts.getKey?.(event);
  344. if (customKey) {
  345. return escapeKey(customKey);
  346. }
  347. const _path = event.node.req.originalUrl || event.node.req.url || event.path;
  348. let _pathname;
  349. try {
  350. _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index";
  351. } catch {
  352. _pathname = "-";
  353. }
  354. const _hashedPath = `${_pathname}.${hash(_path)}`;
  355. const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`);
  356. return [_hashedPath, ..._headers].join(":");
  357. },
  358. validate: (entry) => {
  359. if (!entry.value) {
  360. return false;
  361. }
  362. if (entry.value.code >= 400) {
  363. return false;
  364. }
  365. if (entry.value.body === void 0) {
  366. return false;
  367. }
  368. if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") {
  369. return false;
  370. }
  371. return true;
  372. },
  373. group: opts.group || "nitro/handlers",
  374. integrity: opts.integrity || hash([handler, opts])
  375. };
  376. const _cachedHandler = cachedFunction(
  377. async (incomingEvent) => {
  378. const variableHeaders = {};
  379. for (const header of variableHeaderNames) {
  380. const value = incomingEvent.node.req.headers[header];
  381. if (value !== void 0) {
  382. variableHeaders[header] = value;
  383. }
  384. }
  385. const reqProxy = cloneWithProxy(incomingEvent.node.req, {
  386. headers: variableHeaders
  387. });
  388. const resHeaders = {};
  389. let _resSendBody;
  390. const resProxy = cloneWithProxy(incomingEvent.node.res, {
  391. statusCode: 200,
  392. writableEnded: false,
  393. writableFinished: false,
  394. headersSent: false,
  395. closed: false,
  396. getHeader(name) {
  397. return resHeaders[name];
  398. },
  399. setHeader(name, value) {
  400. resHeaders[name] = value;
  401. return this;
  402. },
  403. getHeaderNames() {
  404. return Object.keys(resHeaders);
  405. },
  406. hasHeader(name) {
  407. return name in resHeaders;
  408. },
  409. removeHeader(name) {
  410. delete resHeaders[name];
  411. },
  412. getHeaders() {
  413. return resHeaders;
  414. },
  415. end(chunk, arg2, arg3) {
  416. if (typeof chunk === "string") {
  417. _resSendBody = chunk;
  418. }
  419. if (typeof arg2 === "function") {
  420. arg2();
  421. }
  422. if (typeof arg3 === "function") {
  423. arg3();
  424. }
  425. return this;
  426. },
  427. write(chunk, arg2, arg3) {
  428. if (typeof chunk === "string") {
  429. _resSendBody = chunk;
  430. }
  431. if (typeof arg2 === "function") {
  432. arg2(void 0);
  433. }
  434. if (typeof arg3 === "function") {
  435. arg3();
  436. }
  437. return true;
  438. },
  439. writeHead(statusCode, headers2) {
  440. this.statusCode = statusCode;
  441. if (headers2) {
  442. if (Array.isArray(headers2) || typeof headers2 === "string") {
  443. throw new TypeError("Raw headers is not supported.");
  444. }
  445. for (const header in headers2) {
  446. const value = headers2[header];
  447. if (value !== void 0) {
  448. this.setHeader(
  449. header,
  450. value
  451. );
  452. }
  453. }
  454. }
  455. return this;
  456. }
  457. });
  458. const event = createEvent(reqProxy, resProxy);
  459. event.fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, {
  460. fetch: useNitroApp().localFetch
  461. });
  462. event.$fetch = (url, fetchOptions) => fetchWithEvent(event, url, fetchOptions, {
  463. fetch: globalThis.$fetch
  464. });
  465. event.waitUntil = incomingEvent.waitUntil;
  466. event.context = incomingEvent.context;
  467. event.context.cache = {
  468. options: _opts
  469. };
  470. const body = await handler(event) || _resSendBody;
  471. const headers = event.node.res.getHeaders();
  472. headers.etag = String(
  473. headers.Etag || headers.etag || `W/"${hash(body)}"`
  474. );
  475. headers["last-modified"] = String(
  476. headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString()
  477. );
  478. const cacheControl = [];
  479. if (opts.swr) {
  480. if (opts.maxAge) {
  481. cacheControl.push(`s-maxage=${opts.maxAge}`);
  482. }
  483. if (opts.staleMaxAge) {
  484. cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
  485. } else {
  486. cacheControl.push("stale-while-revalidate");
  487. }
  488. } else if (opts.maxAge) {
  489. cacheControl.push(`max-age=${opts.maxAge}`);
  490. }
  491. if (cacheControl.length > 0) {
  492. headers["cache-control"] = cacheControl.join(", ");
  493. }
  494. const cacheEntry = {
  495. code: event.node.res.statusCode,
  496. headers,
  497. body
  498. };
  499. return cacheEntry;
  500. },
  501. _opts
  502. );
  503. return defineEventHandler(async (event) => {
  504. if (opts.headersOnly) {
  505. if (handleCacheHeaders(event, { maxAge: opts.maxAge })) {
  506. return;
  507. }
  508. return handler(event);
  509. }
  510. const response = await _cachedHandler(
  511. event
  512. );
  513. if (event.node.res.headersSent || event.node.res.writableEnded) {
  514. return response.body;
  515. }
  516. if (handleCacheHeaders(event, {
  517. modifiedTime: new Date(response.headers["last-modified"]),
  518. etag: response.headers.etag,
  519. maxAge: opts.maxAge
  520. })) {
  521. return;
  522. }
  523. event.node.res.statusCode = response.code;
  524. for (const name in response.headers) {
  525. const value = response.headers[name];
  526. if (name === "set-cookie") {
  527. event.node.res.appendHeader(
  528. name,
  529. splitCookiesString(value)
  530. );
  531. } else {
  532. if (value !== void 0) {
  533. event.node.res.setHeader(name, value);
  534. }
  535. }
  536. }
  537. return response.body;
  538. });
  539. }
  540. function cloneWithProxy(obj, overrides) {
  541. return new Proxy(obj, {
  542. get(target, property, receiver) {
  543. if (property in overrides) {
  544. return overrides[property];
  545. }
  546. return Reflect.get(target, property, receiver);
  547. },
  548. set(target, property, value, receiver) {
  549. if (property in overrides) {
  550. overrides[property] = value;
  551. return true;
  552. }
  553. return Reflect.set(target, property, value, receiver);
  554. }
  555. });
  556. }
  557. const cachedEventHandler = defineCachedEventHandler;
  558. const inlineAppConfig = {};
  559. const appConfig = defuFn(inlineAppConfig);
  560. function getEnv(key, opts) {
  561. const envKey = snakeCase(key).toUpperCase();
  562. return destr(
  563. process.env[opts.prefix + envKey] ?? process.env[opts.altPrefix + envKey]
  564. );
  565. }
  566. function _isObject(input) {
  567. return typeof input === "object" && !Array.isArray(input);
  568. }
  569. function applyEnv(obj, opts, parentKey = "") {
  570. for (const key in obj) {
  571. const subKey = parentKey ? `${parentKey}_${key}` : key;
  572. const envValue = getEnv(subKey, opts);
  573. if (_isObject(obj[key])) {
  574. if (_isObject(envValue)) {
  575. obj[key] = { ...obj[key], ...envValue };
  576. applyEnv(obj[key], opts, subKey);
  577. } else if (envValue === void 0) {
  578. applyEnv(obj[key], opts, subKey);
  579. } else {
  580. obj[key] = envValue ?? obj[key];
  581. }
  582. } else {
  583. obj[key] = envValue ?? obj[key];
  584. }
  585. if (opts.envExpansion && typeof obj[key] === "string") {
  586. obj[key] = _expandFromEnv(obj[key]);
  587. }
  588. }
  589. return obj;
  590. }
  591. const envExpandRx = /\{\{([^{}]*)\}\}/g;
  592. function _expandFromEnv(value) {
  593. return value.replace(envExpandRx, (match, key) => {
  594. return process.env[key] || match;
  595. });
  596. }
  597. const _inlineRuntimeConfig = {
  598. "app": {
  599. "baseURL": "/"
  600. },
  601. "nitro": {
  602. "routeRules": {
  603. "/api/**": {
  604. "cors": true,
  605. "headers": {
  606. "access-control-allow-origin": "*",
  607. "access-control-allow-methods": "*",
  608. "access-control-allow-headers": "*",
  609. "access-control-max-age": "0",
  610. "Access-Control-Allow-Credentials": "true",
  611. "Access-Control-Allow-Headers": "Accept, Authorization, Content-Length, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With",
  612. "Access-Control-Allow-Methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
  613. "Access-Control-Allow-Origin": "*",
  614. "Access-Control-Expose-Headers": "*"
  615. }
  616. }
  617. }
  618. }
  619. };
  620. const envOptions = {
  621. prefix: "NITRO_",
  622. altPrefix: _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_",
  623. envExpansion: _inlineRuntimeConfig.nitro.envExpansion ?? process.env.NITRO_ENV_EXPANSION ?? false
  624. };
  625. const _sharedRuntimeConfig = _deepFreeze(
  626. applyEnv(klona(_inlineRuntimeConfig), envOptions)
  627. );
  628. function useRuntimeConfig(event) {
  629. {
  630. return _sharedRuntimeConfig;
  631. }
  632. }
  633. _deepFreeze(klona(appConfig));
  634. function _deepFreeze(object) {
  635. const propNames = Object.getOwnPropertyNames(object);
  636. for (const name of propNames) {
  637. const value = object[name];
  638. if (value && typeof value === "object") {
  639. _deepFreeze(value);
  640. }
  641. }
  642. return Object.freeze(object);
  643. }
  644. new Proxy(/* @__PURE__ */ Object.create(null), {
  645. get: (_, prop) => {
  646. console.warn(
  647. "Please use `useRuntimeConfig()` instead of accessing config directly."
  648. );
  649. const runtimeConfig = useRuntimeConfig();
  650. if (prop in runtimeConfig) {
  651. return runtimeConfig[prop];
  652. }
  653. return void 0;
  654. }
  655. });
  656. getContext("nitro-app", {
  657. asyncContext: undefined,
  658. AsyncLocalStorage: void 0
  659. });
  660. const config = useRuntimeConfig();
  661. const _routeRulesMatcher = toRouteMatcher(
  662. createRouter({ routes: config.nitro.routeRules })
  663. );
  664. function createRouteRulesHandler(ctx) {
  665. return eventHandler((event) => {
  666. const routeRules = getRouteRules(event);
  667. if (routeRules.headers) {
  668. setHeaders(event, routeRules.headers);
  669. }
  670. if (routeRules.redirect) {
  671. let target = routeRules.redirect.to;
  672. if (target.endsWith("/**")) {
  673. let targetPath = event.path;
  674. const strpBase = routeRules.redirect._redirectStripBase;
  675. if (strpBase) {
  676. targetPath = withoutBase(targetPath, strpBase);
  677. }
  678. target = joinURL(target.slice(0, -3), targetPath);
  679. } else if (event.path.includes("?")) {
  680. const query = getQuery(event.path);
  681. target = withQuery(target, query);
  682. }
  683. return sendRedirect(event, target, routeRules.redirect.statusCode);
  684. }
  685. if (routeRules.proxy) {
  686. let target = routeRules.proxy.to;
  687. if (target.endsWith("/**")) {
  688. let targetPath = event.path;
  689. const strpBase = routeRules.proxy._proxyStripBase;
  690. if (strpBase) {
  691. targetPath = withoutBase(targetPath, strpBase);
  692. }
  693. target = joinURL(target.slice(0, -3), targetPath);
  694. } else if (event.path.includes("?")) {
  695. const query = getQuery(event.path);
  696. target = withQuery(target, query);
  697. }
  698. return proxyRequest(event, target, {
  699. fetch: ctx.localFetch,
  700. ...routeRules.proxy
  701. });
  702. }
  703. });
  704. }
  705. function getRouteRules(event) {
  706. event.context._nitro = event.context._nitro || {};
  707. if (!event.context._nitro.routeRules) {
  708. event.context._nitro.routeRules = getRouteRulesForPath(
  709. withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL)
  710. );
  711. }
  712. return event.context._nitro.routeRules;
  713. }
  714. function getRouteRulesForPath(path) {
  715. return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
  716. }
  717. function _captureError(error, type) {
  718. console.error(`[${type}]`, error);
  719. useNitroApp().captureError(error, { tags: [type] });
  720. }
  721. function trapUnhandledNodeErrors() {
  722. process.on(
  723. "unhandledRejection",
  724. (error) => _captureError(error, "unhandledRejection")
  725. );
  726. process.on(
  727. "uncaughtException",
  728. (error) => _captureError(error, "uncaughtException")
  729. );
  730. }
  731. function joinHeaders(value) {
  732. return Array.isArray(value) ? value.join(", ") : String(value);
  733. }
  734. function normalizeFetchResponse(response) {
  735. if (!response.headers.has("set-cookie")) {
  736. return response;
  737. }
  738. return new Response(response.body, {
  739. status: response.status,
  740. statusText: response.statusText,
  741. headers: normalizeCookieHeaders(response.headers)
  742. });
  743. }
  744. function normalizeCookieHeader(header = "") {
  745. return splitCookiesString(joinHeaders(header));
  746. }
  747. function normalizeCookieHeaders(headers) {
  748. const outgoingHeaders = new Headers();
  749. for (const [name, header] of headers) {
  750. if (name === "set-cookie") {
  751. for (const cookie of normalizeCookieHeader(header)) {
  752. outgoingHeaders.append("set-cookie", cookie);
  753. }
  754. } else {
  755. outgoingHeaders.set(name, joinHeaders(header));
  756. }
  757. }
  758. return outgoingHeaders;
  759. }
  760. const errorHandler$2 = function(error, event) {
  761. event.node.res.end(`[Error Handler] ${error.stack}`);
  762. };
  763. function defineNitroErrorHandler(handler) {
  764. return handler;
  765. }
  766. const errorHandler$1 = defineNitroErrorHandler(
  767. async function defaultNitroErrorHandler(error, event) {
  768. const res = await defaultHandler(error, event);
  769. if (!event.node?.res.headersSent) {
  770. setResponseHeaders(event, res.headers);
  771. }
  772. setResponseStatus(event, res.status, res.statusText);
  773. return send(
  774. event,
  775. typeof res.body === "string" ? res.body : JSON.stringify(res.body, null, 2)
  776. );
  777. }
  778. );
  779. async function defaultHandler(error, event, opts) {
  780. const isSensitive = error.unhandled || error.fatal;
  781. const statusCode = error.statusCode || 500;
  782. const statusMessage = error.statusMessage || "Server Error";
  783. const url = getRequestURL(event, { xForwardedHost: true, xForwardedProto: true });
  784. if (statusCode === 404) {
  785. const baseURL = "/";
  786. if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) {
  787. const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`;
  788. return {
  789. status: 302,
  790. statusText: "Found",
  791. headers: { location: redirectTo },
  792. body: `Redirecting...`
  793. };
  794. }
  795. }
  796. await loadStackTrace(error).catch(consola.error);
  797. const youch = new Youch();
  798. if (isSensitive && !opts?.silent) {
  799. const tags = [error.unhandled && "[unhandled]", error.fatal && "[fatal]"].filter(Boolean).join(" ");
  800. const ansiError = await (await youch.toANSI(error)).replaceAll(process.cwd(), ".");
  801. consola.error(
  802. `[request error] ${tags} [${event.method}] ${url}
  803. `,
  804. ansiError
  805. );
  806. }
  807. const useJSON = opts?.json || !getRequestHeader(event, "accept")?.includes("text/html");
  808. const headers = {
  809. "content-type": useJSON ? "application/json" : "text/html",
  810. // Prevent browser from guessing the MIME types of resources.
  811. "x-content-type-options": "nosniff",
  812. // Prevent error page from being embedded in an iframe
  813. "x-frame-options": "DENY",
  814. // Prevent browsers from sending the Referer header
  815. "referrer-policy": "no-referrer",
  816. // Disable the execution of any js
  817. "content-security-policy": "script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self';"
  818. };
  819. if (statusCode === 404 || !getResponseHeader(event, "cache-control")) {
  820. headers["cache-control"] = "no-cache";
  821. }
  822. const body = useJSON ? {
  823. error: true,
  824. url,
  825. statusCode,
  826. statusMessage,
  827. message: error.message,
  828. data: error.data,
  829. stack: error.stack?.split("\n").map((line) => line.trim())
  830. } : await youch.toHTML(error, {
  831. request: {
  832. url: url.href,
  833. method: event.method,
  834. headers: getRequestHeaders(event)
  835. }
  836. });
  837. return {
  838. status: statusCode,
  839. statusText: statusMessage,
  840. headers,
  841. body
  842. };
  843. }
  844. async function loadStackTrace(error) {
  845. if (!(error instanceof Error)) {
  846. return;
  847. }
  848. const parsed = await new ErrorParser().defineSourceLoader(sourceLoader).parse(error);
  849. const stack = error.message + "\n" + parsed.frames.map((frame) => fmtFrame(frame)).join("\n");
  850. Object.defineProperty(error, "stack", { value: stack });
  851. if (error.cause) {
  852. await loadStackTrace(error.cause).catch(consola.error);
  853. }
  854. }
  855. async function sourceLoader(frame) {
  856. if (!frame.fileName || frame.fileType !== "fs" || frame.type === "native") {
  857. return;
  858. }
  859. if (frame.type === "app") {
  860. const rawSourceMap = await readFile(`${frame.fileName}.map`, "utf8").catch(() => {
  861. });
  862. if (rawSourceMap) {
  863. const consumer = await new SourceMapConsumer(rawSourceMap);
  864. const originalPosition = consumer.originalPositionFor({ line: frame.lineNumber, column: frame.columnNumber });
  865. if (originalPosition.source && originalPosition.line) {
  866. frame.fileName = resolve(dirname(frame.fileName), originalPosition.source);
  867. frame.lineNumber = originalPosition.line;
  868. frame.columnNumber = originalPosition.column || 0;
  869. }
  870. }
  871. }
  872. const contents = await readFile(frame.fileName, "utf8").catch(() => {
  873. });
  874. return contents ? { contents } : void 0;
  875. }
  876. function fmtFrame(frame) {
  877. if (frame.type === "native") {
  878. return frame.raw;
  879. }
  880. const src = `${frame.fileName || ""}:${frame.lineNumber}:${frame.columnNumber})`;
  881. return frame.functionName ? `at ${frame.functionName} (${src}` : `at ${src}`;
  882. }
  883. const errorHandlers = [errorHandler$2, errorHandler$1];
  884. async function errorHandler(error, event) {
  885. for (const handler of errorHandlers) {
  886. try {
  887. await handler(error, event, { defaultHandler });
  888. if (event.handled) {
  889. return; // Response handled
  890. }
  891. } catch(error) {
  892. // Handler itself thrown, log and continue
  893. console.error(error);
  894. }
  895. }
  896. // H3 will handle fallback
  897. }
  898. const plugins = [
  899. ];
  900. function useResponseSuccess(data) {
  901. return {
  902. code: 0,
  903. data,
  904. error: null,
  905. message: "ok"
  906. };
  907. }
  908. function usePageResponseSuccess(page, pageSize, list, { message = "ok" } = {}) {
  909. const pageData = pagination(
  910. Number.parseInt(`${page}`),
  911. Number.parseInt(`${pageSize}`),
  912. list
  913. );
  914. return {
  915. ...useResponseSuccess({
  916. items: pageData,
  917. total: list.length
  918. }),
  919. message
  920. };
  921. }
  922. function useResponseError(message, error = null) {
  923. return {
  924. code: -1,
  925. data: null,
  926. error,
  927. message
  928. };
  929. }
  930. function forbiddenResponse(event, message = "Forbidden Exception") {
  931. setResponseStatus(event, 403);
  932. return useResponseError(message, message);
  933. }
  934. function unAuthorizedResponse(event) {
  935. setResponseStatus(event, 401);
  936. return useResponseError("Unauthorized Exception", "Unauthorized Exception");
  937. }
  938. function sleep(ms) {
  939. return new Promise((resolve) => setTimeout(resolve, ms));
  940. }
  941. function pagination(pageNo, pageSize, array) {
  942. const offset = (pageNo - 1) * Number(pageSize);
  943. return offset + Number(pageSize) >= array.length ? array.slice(offset) : array.slice(offset, offset + Number(pageSize));
  944. }
  945. const _3Kb7Di = defineEventHandler(async (event) => {
  946. var _a;
  947. event.node.res.setHeader(
  948. "Access-Control-Allow-Origin",
  949. (_a = event.headers.get("Origin")) != null ? _a : "*"
  950. );
  951. if (event.method === "OPTIONS") {
  952. event.node.res.statusCode = 204;
  953. event.node.res.statusMessage = "No Content.";
  954. return "OK";
  955. } else if (["DELETE", "PATCH", "POST", "PUT"].includes(event.method) && event.path.startsWith("/api/system/")) {
  956. await sleep(Math.floor(Math.random() * 2e3));
  957. return forbiddenResponse(event, "\u6F14\u793A\u73AF\u5883\uFF0C\u7981\u6B62\u4FEE\u6539");
  958. }
  959. });
  960. const _lazy_Cjg2LV = () => Promise.resolve().then(function () { return codes$1; });
  961. const _lazy_rtEwLH = () => Promise.resolve().then(function () { return login_post$1; });
  962. const _lazy_HQfk2e = () => Promise.resolve().then(function () { return logout_post$1; });
  963. const _lazy_LV4MmU = () => Promise.resolve().then(function () { return refresh_post$1; });
  964. const _lazy_hTfDqU = () => Promise.resolve().then(function () { return bigint$1; });
  965. const _lazy_d4BSOr = () => Promise.resolve().then(function () { return all$1; });
  966. const _lazy_r9rMys = () => Promise.resolve().then(function () { return status$1; });
  967. const _lazy_QIRnpN = () => Promise.resolve().then(function () { return _post$1; });
  968. const _lazy_WxQT4N = () => Promise.resolve().then(function () { return _id__delete$1; });
  969. const _lazy_DthOu8 = () => Promise.resolve().then(function () { return _id__put$1; });
  970. const _lazy_9OBCpg = () => Promise.resolve().then(function () { return list$7; });
  971. const _lazy_UM7Fl_ = () => Promise.resolve().then(function () { return list$5; });
  972. const _lazy_fqwdxs = () => Promise.resolve().then(function () { return nameExists$1; });
  973. const _lazy_I47CY1 = () => Promise.resolve().then(function () { return pathExists$1; });
  974. const _lazy_oMtqRm = () => Promise.resolve().then(function () { return list$3; });
  975. const _lazy_R0gwfL = () => Promise.resolve().then(function () { return list$1; });
  976. const _lazy_DbYADR = () => Promise.resolve().then(function () { return test_get$1; });
  977. const _lazy_Tjiaxz = () => Promise.resolve().then(function () { return test_post$1; });
  978. const _lazy_Ut5b2V = () => Promise.resolve().then(function () { return upload$1; });
  979. const _lazy_NDYxuW = () => Promise.resolve().then(function () { return info$1; });
  980. const _lazy_IBn8TT = () => Promise.resolve().then(function () { return _____$1; });
  981. const handlers = [
  982. { route: '', handler: _3Kb7Di, lazy: false, middleware: true, method: undefined },
  983. { route: '/api/auth/codes', handler: _lazy_Cjg2LV, lazy: true, middleware: false, method: undefined },
  984. { route: '/api/auth/login', handler: _lazy_rtEwLH, lazy: true, middleware: false, method: "post" },
  985. { route: '/api/auth/logout', handler: _lazy_HQfk2e, lazy: true, middleware: false, method: "post" },
  986. { route: '/api/auth/refresh', handler: _lazy_LV4MmU, lazy: true, middleware: false, method: "post" },
  987. { route: '/api/demo/bigint', handler: _lazy_hTfDqU, lazy: true, middleware: false, method: undefined },
  988. { route: '/api/menu/all', handler: _lazy_d4BSOr, lazy: true, middleware: false, method: undefined },
  989. { route: '/api/status', handler: _lazy_r9rMys, lazy: true, middleware: false, method: undefined },
  990. { route: '/api/system/dept/', handler: _lazy_QIRnpN, lazy: true, middleware: false, method: "post" },
  991. { route: '/api/system/dept/:id', handler: _lazy_WxQT4N, lazy: true, middleware: false, method: "delete" },
  992. { route: '/api/system/dept/:id', handler: _lazy_DthOu8, lazy: true, middleware: false, method: "put" },
  993. { route: '/api/system/dept/list', handler: _lazy_9OBCpg, lazy: true, middleware: false, method: undefined },
  994. { route: '/api/system/menu/list', handler: _lazy_UM7Fl_, lazy: true, middleware: false, method: undefined },
  995. { route: '/api/system/menu/name-exists', handler: _lazy_fqwdxs, lazy: true, middleware: false, method: undefined },
  996. { route: '/api/system/menu/path-exists', handler: _lazy_I47CY1, lazy: true, middleware: false, method: undefined },
  997. { route: '/api/system/role/list', handler: _lazy_oMtqRm, lazy: true, middleware: false, method: undefined },
  998. { route: '/api/table/list', handler: _lazy_R0gwfL, lazy: true, middleware: false, method: undefined },
  999. { route: '/api/test', handler: _lazy_DbYADR, lazy: true, middleware: false, method: "get" },
  1000. { route: '/api/test', handler: _lazy_Tjiaxz, lazy: true, middleware: false, method: "post" },
  1001. { route: '/api/upload', handler: _lazy_Ut5b2V, lazy: true, middleware: false, method: undefined },
  1002. { route: '/api/user/info', handler: _lazy_NDYxuW, lazy: true, middleware: false, method: undefined },
  1003. { route: '/**', handler: _lazy_IBn8TT, lazy: true, middleware: false, method: undefined }
  1004. ];
  1005. function createNitroApp() {
  1006. const config = useRuntimeConfig();
  1007. const hooks = createHooks();
  1008. const captureError = (error, context = {}) => {
  1009. const promise = hooks.callHookParallel("error", error, context).catch((error_) => {
  1010. console.error("Error while capturing another error", error_);
  1011. });
  1012. if (context.event && isEvent(context.event)) {
  1013. const errors = context.event.context.nitro?.errors;
  1014. if (errors) {
  1015. errors.push({ error, context });
  1016. }
  1017. if (context.event.waitUntil) {
  1018. context.event.waitUntil(promise);
  1019. }
  1020. }
  1021. };
  1022. const h3App = createApp({
  1023. debug: destr(true),
  1024. onError: (error, event) => {
  1025. captureError(error, { event, tags: ["request"] });
  1026. return errorHandler(error, event);
  1027. },
  1028. onRequest: async (event) => {
  1029. event.context.nitro = event.context.nitro || { errors: [] };
  1030. const fetchContext = event.node.req?.__unenv__;
  1031. if (fetchContext?._platform) {
  1032. event.context = {
  1033. _platform: fetchContext?._platform,
  1034. // #3335
  1035. ...fetchContext._platform,
  1036. ...event.context
  1037. };
  1038. }
  1039. if (!event.context.waitUntil && fetchContext?.waitUntil) {
  1040. event.context.waitUntil = fetchContext.waitUntil;
  1041. }
  1042. event.fetch = (req, init) => fetchWithEvent(event, req, init, { fetch: localFetch });
  1043. event.$fetch = (req, init) => fetchWithEvent(event, req, init, {
  1044. fetch: $fetch
  1045. });
  1046. event.waitUntil = (promise) => {
  1047. if (!event.context.nitro._waitUntilPromises) {
  1048. event.context.nitro._waitUntilPromises = [];
  1049. }
  1050. event.context.nitro._waitUntilPromises.push(promise);
  1051. if (event.context.waitUntil) {
  1052. event.context.waitUntil(promise);
  1053. }
  1054. };
  1055. event.captureError = (error, context) => {
  1056. captureError(error, { event, ...context });
  1057. };
  1058. await nitroApp$1.hooks.callHook("request", event).catch((error) => {
  1059. captureError(error, { event, tags: ["request"] });
  1060. });
  1061. },
  1062. onBeforeResponse: async (event, response) => {
  1063. await nitroApp$1.hooks.callHook("beforeResponse", event, response).catch((error) => {
  1064. captureError(error, { event, tags: ["request", "response"] });
  1065. });
  1066. },
  1067. onAfterResponse: async (event, response) => {
  1068. await nitroApp$1.hooks.callHook("afterResponse", event, response).catch((error) => {
  1069. captureError(error, { event, tags: ["request", "response"] });
  1070. });
  1071. }
  1072. });
  1073. const router = createRouter$1({
  1074. preemptive: true
  1075. });
  1076. const nodeHandler = toNodeListener(h3App);
  1077. const localCall = (aRequest) => callNodeRequestHandler(nodeHandler, aRequest);
  1078. const localFetch = (input, init) => {
  1079. if (!input.toString().startsWith("/")) {
  1080. return globalThis.fetch(input, init);
  1081. }
  1082. return fetchNodeRequestHandler(
  1083. nodeHandler,
  1084. input,
  1085. init
  1086. ).then((response) => normalizeFetchResponse(response));
  1087. };
  1088. const $fetch = createFetch({
  1089. fetch: localFetch,
  1090. Headers: Headers$1,
  1091. defaults: { baseURL: config.app.baseURL }
  1092. });
  1093. globalThis.$fetch = $fetch;
  1094. h3App.use(createRouteRulesHandler({ localFetch }));
  1095. for (const h of handlers) {
  1096. let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
  1097. if (h.middleware || !h.route) {
  1098. const middlewareBase = (config.app.baseURL + (h.route || "/")).replace(
  1099. /\/+/g,
  1100. "/"
  1101. );
  1102. h3App.use(middlewareBase, handler);
  1103. } else {
  1104. const routeRules = getRouteRulesForPath(
  1105. h.route.replace(/:\w+|\*\*/g, "_")
  1106. );
  1107. if (routeRules.cache) {
  1108. handler = cachedEventHandler(handler, {
  1109. group: "nitro/routes",
  1110. ...routeRules.cache
  1111. });
  1112. }
  1113. router.use(h.route, handler, h.method);
  1114. }
  1115. }
  1116. h3App.use(config.app.baseURL, router.handler);
  1117. const app = {
  1118. hooks,
  1119. h3App,
  1120. router,
  1121. localCall,
  1122. localFetch,
  1123. captureError
  1124. };
  1125. return app;
  1126. }
  1127. function runNitroPlugins(nitroApp2) {
  1128. for (const plugin of plugins) {
  1129. try {
  1130. plugin(nitroApp2);
  1131. } catch (error) {
  1132. nitroApp2.captureError(error, { tags: ["plugin"] });
  1133. throw error;
  1134. }
  1135. }
  1136. }
  1137. const nitroApp$1 = createNitroApp();
  1138. function useNitroApp() {
  1139. return nitroApp$1;
  1140. }
  1141. runNitroPlugins(nitroApp$1);
  1142. const scheduledTasks = false;
  1143. const tasks = {
  1144. };
  1145. const __runningTasks__ = {};
  1146. async function runTask(name, {
  1147. payload = {},
  1148. context = {}
  1149. } = {}) {
  1150. if (__runningTasks__[name]) {
  1151. return __runningTasks__[name];
  1152. }
  1153. if (!(name in tasks)) {
  1154. throw createError({
  1155. message: `Task \`${name}\` is not available!`,
  1156. statusCode: 404
  1157. });
  1158. }
  1159. if (!tasks[name].resolve) {
  1160. throw createError({
  1161. message: `Task \`${name}\` is not implemented!`,
  1162. statusCode: 501
  1163. });
  1164. }
  1165. const handler = await tasks[name].resolve();
  1166. const taskEvent = { name, payload, context };
  1167. __runningTasks__[name] = handler.run(taskEvent);
  1168. try {
  1169. const res = await __runningTasks__[name];
  1170. return res;
  1171. } finally {
  1172. delete __runningTasks__[name];
  1173. }
  1174. }
  1175. if (!globalThis.crypto) {
  1176. globalThis.crypto = nodeCrypto;
  1177. }
  1178. const { NITRO_NO_UNIX_SOCKET, NITRO_DEV_WORKER_ID } = process.env;
  1179. trapUnhandledNodeErrors();
  1180. parentPort?.on("message", (msg) => {
  1181. if (msg && msg.event === "shutdown") {
  1182. shutdown();
  1183. }
  1184. });
  1185. const nitroApp = useNitroApp();
  1186. const server = new Server(toNodeListener(nitroApp.h3App));
  1187. let listener;
  1188. listen().catch(() => listen(
  1189. true
  1190. /* use random port */
  1191. )).catch((error) => {
  1192. console.error("Dev worker failed to listen:", error);
  1193. return shutdown();
  1194. });
  1195. nitroApp.router.get(
  1196. "/_nitro/tasks",
  1197. defineEventHandler(async (event) => {
  1198. const _tasks = await Promise.all(
  1199. Object.entries(tasks).map(async ([name, task]) => {
  1200. const _task = await task.resolve?.();
  1201. return [name, { description: _task?.meta?.description }];
  1202. })
  1203. );
  1204. return {
  1205. tasks: Object.fromEntries(_tasks),
  1206. scheduledTasks
  1207. };
  1208. })
  1209. );
  1210. nitroApp.router.use(
  1211. "/_nitro/tasks/:name",
  1212. defineEventHandler(async (event) => {
  1213. const name = getRouterParam(event, "name");
  1214. const payload = {
  1215. ...getQuery$1(event),
  1216. ...await readBody(event).then((r) => r?.payload).catch(() => ({}))
  1217. };
  1218. return await runTask(name, { payload });
  1219. })
  1220. );
  1221. function listen(useRandomPort = Boolean(
  1222. NITRO_NO_UNIX_SOCKET || process.versions.webcontainer || "Bun" in globalThis && process.platform === "win32"
  1223. )) {
  1224. return new Promise((resolve, reject) => {
  1225. try {
  1226. listener = server.listen(useRandomPort ? 0 : getSocketAddress(), () => {
  1227. const address = server.address();
  1228. parentPort?.postMessage({
  1229. event: "listen",
  1230. address: typeof address === "string" ? { socketPath: address } : { host: "localhost", port: address?.port }
  1231. });
  1232. resolve();
  1233. });
  1234. } catch (error) {
  1235. reject(error);
  1236. }
  1237. });
  1238. }
  1239. function getSocketAddress() {
  1240. const socketName = `nitro-worker-${process.pid}-${threadId}-${NITRO_DEV_WORKER_ID}-${Math.round(Math.random() * 1e4)}.sock`;
  1241. if (process.platform === "win32") {
  1242. return join(String.raw`\\.\pipe`, socketName);
  1243. }
  1244. if (process.platform === "linux") {
  1245. const nodeMajor = Number.parseInt(process.versions.node.split(".")[0], 10);
  1246. if (nodeMajor >= 20) {
  1247. return `\0${socketName}`;
  1248. }
  1249. }
  1250. return join(tmpdir(), socketName);
  1251. }
  1252. async function shutdown() {
  1253. server.closeAllConnections?.();
  1254. await Promise.all([
  1255. new Promise((resolve) => listener?.close(resolve)),
  1256. nitroApp.hooks.callHook("close").catch(console.error)
  1257. ]);
  1258. parentPort?.postMessage({ event: "exit" });
  1259. }
  1260. const MOCK_USERS = [
  1261. {
  1262. id: 0,
  1263. password: "123456",
  1264. realName: "Vben",
  1265. roles: ["super"],
  1266. username: "vben"
  1267. },
  1268. {
  1269. id: 1,
  1270. password: "123456",
  1271. realName: "Admin",
  1272. roles: ["admin"],
  1273. username: "admin",
  1274. homePath: "/workspace"
  1275. },
  1276. {
  1277. id: 2,
  1278. password: "123456",
  1279. realName: "Jack",
  1280. roles: ["user"],
  1281. username: "jack",
  1282. homePath: "/analytics"
  1283. }
  1284. ];
  1285. const MOCK_CODES = [
  1286. // super
  1287. {
  1288. codes: ["AC_100100", "AC_100110", "AC_100120", "AC_100010"],
  1289. username: "vben"
  1290. },
  1291. {
  1292. // admin
  1293. codes: ["AC_100010", "AC_100020", "AC_100030"],
  1294. username: "admin"
  1295. },
  1296. {
  1297. // user
  1298. codes: ["AC_1000001", "AC_1000002"],
  1299. username: "jack"
  1300. }
  1301. ];
  1302. const dashboardMenus = [
  1303. {
  1304. meta: {
  1305. order: -1,
  1306. title: "page.dashboard.title"
  1307. },
  1308. name: "Dashboard",
  1309. path: "/dashboard",
  1310. redirect: "/analytics",
  1311. children: [
  1312. {
  1313. name: "Analytics",
  1314. path: "/analytics",
  1315. component: "/dashboard/analytics/index",
  1316. meta: {
  1317. affixTab: true,
  1318. title: "page.dashboard.analytics"
  1319. }
  1320. },
  1321. {
  1322. name: "Workspace",
  1323. path: "/workspace",
  1324. component: "/dashboard/workspace/index",
  1325. meta: {
  1326. title: "page.dashboard.workspace"
  1327. }
  1328. }
  1329. ]
  1330. }
  1331. ];
  1332. const createDemosMenus = (role) => {
  1333. const roleWithMenus = {
  1334. admin: {
  1335. component: "/demos/access/admin-visible",
  1336. meta: {
  1337. icon: "mdi:button-cursor",
  1338. title: "demos.access.adminVisible"
  1339. },
  1340. name: "AccessAdminVisibleDemo",
  1341. path: "/demos/access/admin-visible"
  1342. },
  1343. super: {
  1344. component: "/demos/access/super-visible",
  1345. meta: {
  1346. icon: "mdi:button-cursor",
  1347. title: "demos.access.superVisible"
  1348. },
  1349. name: "AccessSuperVisibleDemo",
  1350. path: "/demos/access/super-visible"
  1351. },
  1352. user: {
  1353. component: "/demos/access/user-visible",
  1354. meta: {
  1355. icon: "mdi:button-cursor",
  1356. title: "demos.access.userVisible"
  1357. },
  1358. name: "AccessUserVisibleDemo",
  1359. path: "/demos/access/user-visible"
  1360. }
  1361. };
  1362. return [
  1363. {
  1364. meta: {
  1365. icon: "ic:baseline-view-in-ar",
  1366. keepAlive: true,
  1367. order: 1e3,
  1368. title: "demos.title"
  1369. },
  1370. name: "Demos",
  1371. path: "/demos",
  1372. redirect: "/demos/access",
  1373. children: [
  1374. {
  1375. name: "AccessDemos",
  1376. path: "/demosaccess",
  1377. meta: {
  1378. icon: "mdi:cloud-key-outline",
  1379. title: "demos.access.backendPermissions"
  1380. },
  1381. redirect: "/demos/access/page-control",
  1382. children: [
  1383. {
  1384. name: "AccessPageControlDemo",
  1385. path: "/demos/access/page-control",
  1386. component: "/demos/access/index",
  1387. meta: {
  1388. icon: "mdi:page-previous-outline",
  1389. title: "demos.access.pageAccess"
  1390. }
  1391. },
  1392. {
  1393. name: "AccessButtonControlDemo",
  1394. path: "/demos/access/button-control",
  1395. component: "/demos/access/button-control",
  1396. meta: {
  1397. icon: "mdi:button-cursor",
  1398. title: "demos.access.buttonControl"
  1399. }
  1400. },
  1401. {
  1402. name: "AccessMenuVisible403Demo",
  1403. path: "/demos/access/menu-visible-403",
  1404. component: "/demos/access/menu-visible-403",
  1405. meta: {
  1406. authority: ["no-body"],
  1407. icon: "mdi:button-cursor",
  1408. menuVisibleWithForbidden: true,
  1409. title: "demos.access.menuVisible403"
  1410. }
  1411. },
  1412. roleWithMenus[role]
  1413. ]
  1414. }
  1415. ]
  1416. }
  1417. ];
  1418. };
  1419. const MOCK_MENUS = [
  1420. {
  1421. menus: [...dashboardMenus, ...createDemosMenus("super")],
  1422. username: "vben"
  1423. },
  1424. {
  1425. menus: [...dashboardMenus, ...createDemosMenus("admin")],
  1426. username: "admin"
  1427. },
  1428. {
  1429. menus: [...dashboardMenus, ...createDemosMenus("user")],
  1430. username: "jack"
  1431. }
  1432. ];
  1433. const MOCK_MENU_LIST = [
  1434. {
  1435. id: 1,
  1436. name: "Workspace",
  1437. status: 1,
  1438. type: "menu",
  1439. icon: "mdi:dashboard",
  1440. path: "/workspace",
  1441. component: "/dashboard/workspace/index",
  1442. meta: {
  1443. icon: "carbon:workspace",
  1444. title: "page.dashboard.workspace",
  1445. affixTab: true,
  1446. order: 0
  1447. }
  1448. },
  1449. {
  1450. id: 2,
  1451. meta: {
  1452. icon: "carbon:settings",
  1453. order: 9997,
  1454. title: "system.title",
  1455. badge: "new",
  1456. badgeType: "normal",
  1457. badgeVariants: "primary"
  1458. },
  1459. status: 1,
  1460. type: "catalog",
  1461. name: "System",
  1462. path: "/system",
  1463. children: [
  1464. {
  1465. id: 201,
  1466. pid: 2,
  1467. path: "/system/menu",
  1468. name: "SystemMenu",
  1469. authCode: "System:Menu:List",
  1470. status: 1,
  1471. type: "menu",
  1472. meta: {
  1473. icon: "carbon:menu",
  1474. title: "system.menu.title"
  1475. },
  1476. component: "/system/menu/list",
  1477. children: [
  1478. {
  1479. id: 20101,
  1480. pid: 201,
  1481. name: "SystemMenuCreate",
  1482. status: 1,
  1483. type: "button",
  1484. authCode: "System:Menu:Create",
  1485. meta: { title: "common.create" }
  1486. },
  1487. {
  1488. id: 20102,
  1489. pid: 201,
  1490. name: "SystemMenuEdit",
  1491. status: 1,
  1492. type: "button",
  1493. authCode: "System:Menu:Edit",
  1494. meta: { title: "common.edit" }
  1495. },
  1496. {
  1497. id: 20103,
  1498. pid: 201,
  1499. name: "SystemMenuDelete",
  1500. status: 1,
  1501. type: "button",
  1502. authCode: "System:Menu:Delete",
  1503. meta: { title: "common.delete" }
  1504. }
  1505. ]
  1506. },
  1507. {
  1508. id: 202,
  1509. pid: 2,
  1510. path: "/system/dept",
  1511. name: "SystemDept",
  1512. status: 1,
  1513. type: "menu",
  1514. authCode: "System:Dept:List",
  1515. meta: {
  1516. icon: "carbon:container-services",
  1517. title: "system.dept.title"
  1518. },
  1519. component: "/system/dept/list",
  1520. children: [
  1521. {
  1522. id: 20401,
  1523. pid: 201,
  1524. name: "SystemDeptCreate",
  1525. status: 1,
  1526. type: "button",
  1527. authCode: "System:Dept:Create",
  1528. meta: { title: "common.create" }
  1529. },
  1530. {
  1531. id: 20402,
  1532. pid: 201,
  1533. name: "SystemDeptEdit",
  1534. status: 1,
  1535. type: "button",
  1536. authCode: "System:Dept:Edit",
  1537. meta: { title: "common.edit" }
  1538. },
  1539. {
  1540. id: 20403,
  1541. pid: 201,
  1542. name: "SystemDeptDelete",
  1543. status: 1,
  1544. type: "button",
  1545. authCode: "System:Dept:Delete",
  1546. meta: { title: "common.delete" }
  1547. }
  1548. ]
  1549. }
  1550. ]
  1551. },
  1552. {
  1553. id: 9,
  1554. meta: {
  1555. badgeType: "dot",
  1556. order: 9998,
  1557. title: "demos.vben.title",
  1558. icon: "carbon:data-center"
  1559. },
  1560. name: "Project",
  1561. path: "/vben-admin",
  1562. type: "catalog",
  1563. status: 1,
  1564. children: [
  1565. {
  1566. id: 901,
  1567. pid: 9,
  1568. name: "VbenDocument",
  1569. path: "/vben-admin/document",
  1570. component: "IFrameView",
  1571. type: "embedded",
  1572. status: 1,
  1573. meta: {
  1574. icon: "carbon:book",
  1575. iframeSrc: "https://doc.vben.pro",
  1576. title: "demos.vben.document"
  1577. }
  1578. },
  1579. {
  1580. id: 902,
  1581. pid: 9,
  1582. name: "VbenGithub",
  1583. path: "/vben-admin/github",
  1584. component: "IFrameView",
  1585. type: "link",
  1586. status: 1,
  1587. meta: {
  1588. icon: "carbon:logo-github",
  1589. link: "https://github.com/vbenjs/vue-vben-admin",
  1590. title: "Github"
  1591. }
  1592. },
  1593. {
  1594. id: 903,
  1595. pid: 9,
  1596. name: "VbenAntdv",
  1597. path: "/vben-admin/antdv",
  1598. component: "IFrameView",
  1599. type: "link",
  1600. status: 0,
  1601. meta: {
  1602. icon: "carbon:hexagon-vertical-solid",
  1603. badgeType: "dot",
  1604. link: "https://ant.vben.pro",
  1605. title: "demos.vben.antdv"
  1606. }
  1607. }
  1608. ]
  1609. },
  1610. {
  1611. id: 10,
  1612. component: "_core/about/index",
  1613. type: "menu",
  1614. status: 1,
  1615. meta: {
  1616. icon: "lucide:copyright",
  1617. order: 9999,
  1618. title: "demos.vben.about"
  1619. },
  1620. name: "About",
  1621. path: "/about"
  1622. }
  1623. ];
  1624. function getMenuIds(menus) {
  1625. const ids = [];
  1626. menus.forEach((item) => {
  1627. ids.push(item.id);
  1628. if (item.children && item.children.length > 0) {
  1629. ids.push(...getMenuIds(item.children));
  1630. }
  1631. });
  1632. return ids;
  1633. }
  1634. const ACCESS_TOKEN_SECRET = "access_token_secret";
  1635. const REFRESH_TOKEN_SECRET = "refresh_token_secret";
  1636. function generateAccessToken(user) {
  1637. return jwt.sign(user, ACCESS_TOKEN_SECRET, { expiresIn: "7d" });
  1638. }
  1639. function generateRefreshToken(user) {
  1640. return jwt.sign(user, REFRESH_TOKEN_SECRET, {
  1641. expiresIn: "30d"
  1642. });
  1643. }
  1644. function verifyAccessToken(event) {
  1645. const authHeader = getHeader(event, "Authorization");
  1646. if (!(authHeader == null ? void 0 : authHeader.startsWith("Bearer"))) {
  1647. return null;
  1648. }
  1649. const token = authHeader.split(" ")[1];
  1650. try {
  1651. const decoded = jwt.verify(token, ACCESS_TOKEN_SECRET);
  1652. const username = decoded.username;
  1653. const user = MOCK_USERS.find((item) => item.username === username);
  1654. const { password: _pwd, ...userinfo } = user;
  1655. return userinfo;
  1656. } catch {
  1657. return null;
  1658. }
  1659. }
  1660. function verifyRefreshToken(token) {
  1661. try {
  1662. const decoded = jwt.verify(token, REFRESH_TOKEN_SECRET);
  1663. const username = decoded.username;
  1664. const user = MOCK_USERS.find((item) => item.username === username);
  1665. const { password: _pwd, ...userinfo } = user;
  1666. return userinfo;
  1667. } catch {
  1668. return null;
  1669. }
  1670. }
  1671. const codes = eventHandler((event) => {
  1672. var _a, _b;
  1673. const userinfo = verifyAccessToken(event);
  1674. if (!userinfo) {
  1675. return unAuthorizedResponse(event);
  1676. }
  1677. const codes = (_b = (_a = MOCK_CODES.find((item) => item.username === userinfo.username)) == null ? void 0 : _a.codes) != null ? _b : [];
  1678. return useResponseSuccess(codes);
  1679. });
  1680. const codes$1 = /*#__PURE__*/Object.freeze({
  1681. __proto__: null,
  1682. default: codes
  1683. });
  1684. function clearRefreshTokenCookie(event) {
  1685. deleteCookie(event, "jwt", {
  1686. httpOnly: true,
  1687. sameSite: "none",
  1688. secure: true
  1689. });
  1690. }
  1691. function setRefreshTokenCookie(event, refreshToken) {
  1692. setCookie(event, "jwt", refreshToken, {
  1693. httpOnly: true,
  1694. maxAge: 24 * 60 * 60,
  1695. // unit: seconds
  1696. sameSite: "none",
  1697. secure: true
  1698. });
  1699. }
  1700. function getRefreshTokenFromCookie(event) {
  1701. const refreshToken = getCookie(event, "jwt");
  1702. return refreshToken;
  1703. }
  1704. const login_post = defineEventHandler(async (event) => {
  1705. const { password, username } = await readBody(event);
  1706. if (!password || !username) {
  1707. setResponseStatus(event, 400);
  1708. return useResponseError(
  1709. "BadRequestException",
  1710. "Username and password are required"
  1711. );
  1712. }
  1713. const findUser = MOCK_USERS.find(
  1714. (item) => item.username === username && item.password === password
  1715. );
  1716. if (!findUser) {
  1717. clearRefreshTokenCookie(event);
  1718. return forbiddenResponse(event, "Username or password is incorrect.");
  1719. }
  1720. const accessToken = generateAccessToken(findUser);
  1721. const refreshToken = generateRefreshToken(findUser);
  1722. setRefreshTokenCookie(event, refreshToken);
  1723. return useResponseSuccess({
  1724. ...findUser,
  1725. accessToken
  1726. });
  1727. });
  1728. const login_post$1 = /*#__PURE__*/Object.freeze({
  1729. __proto__: null,
  1730. default: login_post
  1731. });
  1732. const logout_post = defineEventHandler(async (event) => {
  1733. const refreshToken = getRefreshTokenFromCookie(event);
  1734. if (!refreshToken) {
  1735. return useResponseSuccess("");
  1736. }
  1737. clearRefreshTokenCookie(event);
  1738. return useResponseSuccess("");
  1739. });
  1740. const logout_post$1 = /*#__PURE__*/Object.freeze({
  1741. __proto__: null,
  1742. default: logout_post
  1743. });
  1744. const refresh_post = defineEventHandler(async (event) => {
  1745. const refreshToken = getRefreshTokenFromCookie(event);
  1746. if (!refreshToken) {
  1747. return forbiddenResponse(event);
  1748. }
  1749. clearRefreshTokenCookie(event);
  1750. const userinfo = verifyRefreshToken(refreshToken);
  1751. if (!userinfo) {
  1752. return forbiddenResponse(event);
  1753. }
  1754. const findUser = MOCK_USERS.find(
  1755. (item) => item.username === userinfo.username
  1756. );
  1757. if (!findUser) {
  1758. return forbiddenResponse(event);
  1759. }
  1760. const accessToken = generateAccessToken(findUser);
  1761. setRefreshTokenCookie(event, refreshToken);
  1762. return accessToken;
  1763. });
  1764. const refresh_post$1 = /*#__PURE__*/Object.freeze({
  1765. __proto__: null,
  1766. default: refresh_post
  1767. });
  1768. const bigint = eventHandler(async (event) => {
  1769. const userinfo = verifyAccessToken(event);
  1770. if (!userinfo) {
  1771. return unAuthorizedResponse(event);
  1772. }
  1773. const data = `
  1774. {
  1775. "code": 0,
  1776. "message": "success",
  1777. "data": [
  1778. {
  1779. "id": 123456789012345678901234567890123456789012345678901234567890,
  1780. "name": "John Doe",
  1781. "age": 30,
  1782. "email": "john-doe@demo.com"
  1783. },
  1784. {
  1785. "id": 987654321098765432109876543210987654321098765432109876543210,
  1786. "name": "Jane Smith",
  1787. "age": 25,
  1788. "email": "jane@demo.com"
  1789. }
  1790. ]
  1791. }
  1792. `;
  1793. setHeader(event, "Content-Type", "application/json");
  1794. return data;
  1795. });
  1796. const bigint$1 = /*#__PURE__*/Object.freeze({
  1797. __proto__: null,
  1798. default: bigint
  1799. });
  1800. const all = eventHandler(async (event) => {
  1801. var _a, _b;
  1802. const userinfo = verifyAccessToken(event);
  1803. if (!userinfo) {
  1804. return unAuthorizedResponse(event);
  1805. }
  1806. const menus = (_b = (_a = MOCK_MENUS.find((item) => item.username === userinfo.username)) == null ? void 0 : _a.menus) != null ? _b : [];
  1807. return useResponseSuccess(menus);
  1808. });
  1809. const all$1 = /*#__PURE__*/Object.freeze({
  1810. __proto__: null,
  1811. default: all
  1812. });
  1813. const status = eventHandler((event) => {
  1814. const { status } = getQuery$1(event);
  1815. setResponseStatus(event, Number(status));
  1816. return useResponseError(`${status}`);
  1817. });
  1818. const status$1 = /*#__PURE__*/Object.freeze({
  1819. __proto__: null,
  1820. default: status
  1821. });
  1822. const _post = eventHandler(async (event) => {
  1823. const userinfo = verifyAccessToken(event);
  1824. if (!userinfo) {
  1825. return unAuthorizedResponse(event);
  1826. }
  1827. await sleep(600);
  1828. return useResponseSuccess(null);
  1829. });
  1830. const _post$1 = /*#__PURE__*/Object.freeze({
  1831. __proto__: null,
  1832. default: _post
  1833. });
  1834. const _id__delete = eventHandler(async (event) => {
  1835. const userinfo = verifyAccessToken(event);
  1836. if (!userinfo) {
  1837. return unAuthorizedResponse(event);
  1838. }
  1839. await sleep(1e3);
  1840. return useResponseSuccess(null);
  1841. });
  1842. const _id__delete$1 = /*#__PURE__*/Object.freeze({
  1843. __proto__: null,
  1844. default: _id__delete
  1845. });
  1846. const _id__put = eventHandler(async (event) => {
  1847. const userinfo = verifyAccessToken(event);
  1848. if (!userinfo) {
  1849. return unAuthorizedResponse(event);
  1850. }
  1851. await sleep(2e3);
  1852. return useResponseSuccess(null);
  1853. });
  1854. const _id__put$1 = /*#__PURE__*/Object.freeze({
  1855. __proto__: null,
  1856. default: _id__put
  1857. });
  1858. const formatterCN$1 = new Intl.DateTimeFormat("zh-CN", {
  1859. timeZone: "Asia/Shanghai",
  1860. year: "numeric",
  1861. month: "2-digit",
  1862. day: "2-digit",
  1863. hour: "2-digit",
  1864. minute: "2-digit",
  1865. second: "2-digit"
  1866. });
  1867. function generateMockDataList$2(count) {
  1868. const dataList = [];
  1869. for (let i = 0; i < count; i++) {
  1870. const dataItem = {
  1871. id: faker.string.uuid(),
  1872. pid: 0,
  1873. name: faker.commerce.department(),
  1874. status: faker.helpers.arrayElement([0, 1]),
  1875. createTime: formatterCN$1.format(
  1876. faker.date.between({ from: "2021-01-01", to: "2022-12-31" })
  1877. ),
  1878. remark: faker.lorem.sentence()
  1879. };
  1880. if (faker.datatype.boolean()) {
  1881. dataItem.children = Array.from(
  1882. { length: faker.number.int({ min: 1, max: 5 }) },
  1883. () => ({
  1884. id: faker.string.uuid(),
  1885. pid: dataItem.id,
  1886. name: faker.commerce.department(),
  1887. status: faker.helpers.arrayElement([0, 1]),
  1888. createTime: formatterCN$1.format(
  1889. faker.date.between({ from: "2023-01-01", to: "2023-12-31" })
  1890. ),
  1891. remark: faker.lorem.sentence()
  1892. })
  1893. );
  1894. }
  1895. dataList.push(dataItem);
  1896. }
  1897. return dataList;
  1898. }
  1899. const mockData$2 = generateMockDataList$2(10);
  1900. const list$6 = eventHandler(async (event) => {
  1901. const userinfo = verifyAccessToken(event);
  1902. if (!userinfo) {
  1903. return unAuthorizedResponse(event);
  1904. }
  1905. const listData = structuredClone(mockData$2);
  1906. return useResponseSuccess(listData);
  1907. });
  1908. const list$7 = /*#__PURE__*/Object.freeze({
  1909. __proto__: null,
  1910. default: list$6
  1911. });
  1912. const list$4 = eventHandler(async (event) => {
  1913. const userinfo = verifyAccessToken(event);
  1914. if (!userinfo) {
  1915. return unAuthorizedResponse(event);
  1916. }
  1917. return useResponseSuccess(MOCK_MENU_LIST);
  1918. });
  1919. const list$5 = /*#__PURE__*/Object.freeze({
  1920. __proto__: null,
  1921. default: list$4
  1922. });
  1923. const namesMap = {};
  1924. function getNames(menus) {
  1925. menus.forEach((menu) => {
  1926. namesMap[menu.name] = String(menu.id);
  1927. if (menu.children) {
  1928. getNames(menu.children);
  1929. }
  1930. });
  1931. }
  1932. getNames(MOCK_MENU_LIST);
  1933. const nameExists = eventHandler(async (event) => {
  1934. const userinfo = verifyAccessToken(event);
  1935. if (!userinfo) {
  1936. return unAuthorizedResponse(event);
  1937. }
  1938. const { id, name } = getQuery$1(event);
  1939. return name in namesMap && (!id || namesMap[name] !== String(id)) ? useResponseSuccess(true) : useResponseSuccess(false);
  1940. });
  1941. const nameExists$1 = /*#__PURE__*/Object.freeze({
  1942. __proto__: null,
  1943. default: nameExists
  1944. });
  1945. const pathMap = { "/": 0 };
  1946. function getPaths(menus) {
  1947. menus.forEach((menu) => {
  1948. pathMap[menu.path] = String(menu.id);
  1949. if (menu.children) {
  1950. getPaths(menu.children);
  1951. }
  1952. });
  1953. }
  1954. getPaths(MOCK_MENU_LIST);
  1955. const pathExists = eventHandler(async (event) => {
  1956. const userinfo = verifyAccessToken(event);
  1957. if (!userinfo) {
  1958. return unAuthorizedResponse(event);
  1959. }
  1960. const { id, path } = getQuery$1(event);
  1961. return path in pathMap && (!id || pathMap[path] !== String(id)) ? useResponseSuccess(true) : useResponseSuccess(false);
  1962. });
  1963. const pathExists$1 = /*#__PURE__*/Object.freeze({
  1964. __proto__: null,
  1965. default: pathExists
  1966. });
  1967. const formatterCN = new Intl.DateTimeFormat("zh-CN", {
  1968. timeZone: "Asia/Shanghai",
  1969. year: "numeric",
  1970. month: "2-digit",
  1971. day: "2-digit",
  1972. hour: "2-digit",
  1973. minute: "2-digit",
  1974. second: "2-digit"
  1975. });
  1976. const menuIds = getMenuIds(MOCK_MENU_LIST);
  1977. function generateMockDataList$1(count) {
  1978. const dataList = [];
  1979. for (let i = 0; i < count; i++) {
  1980. const dataItem = {
  1981. id: faker.string.uuid(),
  1982. name: faker.commerce.product(),
  1983. status: faker.helpers.arrayElement([0, 1]),
  1984. createTime: formatterCN.format(
  1985. faker.date.between({ from: "2022-01-01", to: "2025-01-01" })
  1986. ),
  1987. permissions: faker.helpers.arrayElements(menuIds),
  1988. remark: faker.lorem.sentence()
  1989. };
  1990. dataList.push(dataItem);
  1991. }
  1992. return dataList;
  1993. }
  1994. const mockData$1 = generateMockDataList$1(100);
  1995. const list$2 = eventHandler(async (event) => {
  1996. const userinfo = verifyAccessToken(event);
  1997. if (!userinfo) {
  1998. return unAuthorizedResponse(event);
  1999. }
  2000. const {
  2001. page = 1,
  2002. pageSize = 20,
  2003. name,
  2004. id,
  2005. remark,
  2006. startTime,
  2007. endTime,
  2008. status
  2009. } = getQuery$1(event);
  2010. let listData = structuredClone(mockData$1);
  2011. if (name) {
  2012. listData = listData.filter(
  2013. (item) => item.name.toLowerCase().includes(String(name).toLowerCase())
  2014. );
  2015. }
  2016. if (id) {
  2017. listData = listData.filter(
  2018. (item) => item.id.toLowerCase().includes(String(id).toLowerCase())
  2019. );
  2020. }
  2021. if (remark) {
  2022. listData = listData.filter(
  2023. (item) => {
  2024. var _a, _b;
  2025. return (_b = (_a = item.remark) == null ? void 0 : _a.toLowerCase()) == null ? void 0 : _b.includes(String(remark).toLowerCase());
  2026. }
  2027. );
  2028. }
  2029. if (startTime) {
  2030. listData = listData.filter((item) => item.createTime >= startTime);
  2031. }
  2032. if (endTime) {
  2033. listData = listData.filter((item) => item.createTime <= endTime);
  2034. }
  2035. if (["0", "1"].includes(status)) {
  2036. listData = listData.filter((item) => item.status === Number(status));
  2037. }
  2038. return usePageResponseSuccess(page, pageSize, listData);
  2039. });
  2040. const list$3 = /*#__PURE__*/Object.freeze({
  2041. __proto__: null,
  2042. default: list$2
  2043. });
  2044. function generateMockDataList(count) {
  2045. const dataList = [];
  2046. for (let i = 0; i < count; i++) {
  2047. const dataItem = {
  2048. id: faker.string.uuid(),
  2049. imageUrl: faker.image.avatar(),
  2050. imageUrl2: faker.image.avatar(),
  2051. open: faker.datatype.boolean(),
  2052. status: faker.helpers.arrayElement(["success", "error", "warning"]),
  2053. productName: faker.commerce.productName(),
  2054. price: faker.commerce.price(),
  2055. currency: faker.finance.currencyCode(),
  2056. quantity: faker.number.int({ min: 1, max: 100 }),
  2057. available: faker.datatype.boolean(),
  2058. category: faker.commerce.department(),
  2059. releaseDate: faker.date.past(),
  2060. rating: faker.number.float({ min: 1, max: 5 }),
  2061. description: faker.commerce.productDescription(),
  2062. weight: faker.number.float({ min: 0.1, max: 10 }),
  2063. color: faker.color.human(),
  2064. inProduction: faker.datatype.boolean(),
  2065. tags: Array.from({ length: 3 }, () => faker.commerce.productAdjective())
  2066. };
  2067. dataList.push(dataItem);
  2068. }
  2069. return dataList;
  2070. }
  2071. const mockData = generateMockDataList(100);
  2072. const list = eventHandler(async (event) => {
  2073. const userinfo = verifyAccessToken(event);
  2074. if (!userinfo) {
  2075. return unAuthorizedResponse(event);
  2076. }
  2077. await sleep(600);
  2078. const { page, pageSize, sortBy, sortOrder } = getQuery$1(event);
  2079. const listData = structuredClone(mockData);
  2080. if (sortBy && Reflect.has(listData[0], sortBy)) {
  2081. listData.sort((a, b) => {
  2082. if (sortOrder === "asc") {
  2083. if (sortBy === "price") {
  2084. return Number.parseFloat(a[sortBy]) - Number.parseFloat(b[sortBy]);
  2085. } else {
  2086. return a[sortBy] > b[sortBy] ? 1 : -1;
  2087. }
  2088. } else {
  2089. if (sortBy === "price") {
  2090. return Number.parseFloat(b[sortBy]) - Number.parseFloat(a[sortBy]);
  2091. } else {
  2092. return a[sortBy] < b[sortBy] ? 1 : -1;
  2093. }
  2094. }
  2095. });
  2096. }
  2097. return usePageResponseSuccess(page, pageSize, listData);
  2098. });
  2099. const list$1 = /*#__PURE__*/Object.freeze({
  2100. __proto__: null,
  2101. default: list
  2102. });
  2103. const test_get = defineEventHandler(() => "Test get handler");
  2104. const test_get$1 = /*#__PURE__*/Object.freeze({
  2105. __proto__: null,
  2106. default: test_get
  2107. });
  2108. const test_post = defineEventHandler(() => "Test post handler");
  2109. const test_post$1 = /*#__PURE__*/Object.freeze({
  2110. __proto__: null,
  2111. default: test_post
  2112. });
  2113. const upload = eventHandler((event) => {
  2114. const userinfo = verifyAccessToken(event);
  2115. if (!userinfo) {
  2116. return unAuthorizedResponse(event);
  2117. }
  2118. return useResponseSuccess({
  2119. url: "https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp"
  2120. });
  2121. });
  2122. const upload$1 = /*#__PURE__*/Object.freeze({
  2123. __proto__: null,
  2124. default: upload
  2125. });
  2126. const info = eventHandler((event) => {
  2127. const userinfo = verifyAccessToken(event);
  2128. if (!userinfo) {
  2129. return unAuthorizedResponse(event);
  2130. }
  2131. return useResponseSuccess(userinfo);
  2132. });
  2133. const info$1 = /*#__PURE__*/Object.freeze({
  2134. __proto__: null,
  2135. default: info
  2136. });
  2137. const _____ = defineEventHandler(() => {
  2138. return `
  2139. <h1>Hello Vben Admin</h1>
  2140. <h2>Mock service is starting</h2>
  2141. <ul>
  2142. <li><a href="/api/user">/api/user/info</a></li>
  2143. <li><a href="/api/menu">/api/menu/all</a></li>
  2144. <li><a href="/api/auth/codes">/api/auth/codes</a></li>
  2145. <li><a href="/api/auth/login">/api/auth/login</a></li>
  2146. <li><a href="/api/upload">/api/upload</a></li>
  2147. </ul>
  2148. `;
  2149. });
  2150. const _____$1 = /*#__PURE__*/Object.freeze({
  2151. __proto__: null,
  2152. default: _____
  2153. });
  2154. //# sourceMappingURL=index.mjs.map