@postar/yapi-sdk-gen
Version:
从 YAPI 接口文档自动生成 TypeScript 类型定义、请求函数、Mock 文件的 SDK 工具,帮助前端团队实现接口类型安全与自动化对接。
2 lines • 853 kB
JavaScript
/*! For license information please see yapi-sdk-gen.min.js.LICENSE.txt */
!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports["yapi-sdk-gen"]=a():e["yapi-sdk-gen"]=a()}(global,(()=>(()=>{var e,a={44:(e,a,n)=>{const i=n(8454),t=n(2422),o=n(2079),s=n(8384);e.exports=function(e=s){const a=i();return a.use(i.json()),a.use(i.urlencoded({extended:!0})),a.use(i.static("public")),a.get("/",((a,n)=>{n.send(`\n <!DOCTYPE html>\n <html lang="zh-CN">\n <head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>YAPI SDK 生成器</title>\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #4caf501f;\n min-height: 100vh;\n padding: 10px;\n overflow: hidden;\n }\n\n .container {\n max-width: 1280px;\n margin: 0 auto;\n background: white;\n border-radius: 10px;\n box-shadow: 0 10px 30px rgba(0,0,0,0.2);\n overflow: hidden;\n }\n\n .header {\n background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);\n color: white;\n padding: 12px;\n text-align: center;\n }\n\n .header h1 {\n font-size: 25px;\n margin-bottom: 10px;\n }\n\n .header p {\n opacity: 0.9;\n font-size: 20px;\n }\n\n .content {\n padding: 10px 20px;\n }\n\n .form-group {\n height: 66vh;\n overflow-y: auto;\n margin-bottom: 25px;\n }\n\n label {\n display: block;\n margin-bottom: 8px;\n font-weight: 600;\n color: #333;\n font-size: 1.1em;\n }\n\n input, textarea, select {\n width: 100%;\n padding: 12px;\n border: 2px solid #e1e1e1;\n border-radius: 6px;\n font-size: 16px;\n transition: border-color 0.3s ease;\n }\n\n input:focus, textarea:focus, select:focus {\n outline: none;\n border-color: #4CAF50;\n box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1);\n }\n\n textarea {\n height: 120px;\n resize: vertical;\n font-family: 'Courier New', monospace;\n }\n\n .button-group {\n display: flex;\n gap: 15px;\n justify-content: center;\n margin-top: 30px;\n }\n\n button {\n padding: 12px 30px;\n border: none;\n border-radius: 6px;\n font-size: 16px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n min-width: 100px;\n }\n\n .btn-primary {\n background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);\n color: white;\n }\n\n .btn-secondary {\n background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%);\n color: white;\n }\n\n button:hover {\n transform: translateY(-2px);\n box-shadow: 0 5px 15px rgba(0,0,0,0.2);\n }\n\n .result {\n padding: 10px 20px;\n border-radius: 6px;\n display: none;\n }\n\n .result.success {\n background: #d4edda;\n border: 1px solid #c3e6cb;\n color: #155724;\n }\n\n .result.error {\n background: #f8d7da;\n border: 1px solid #f5c6cb;\n color: #721c24;\n }\n\n .result.processing {\n background: #fff3cd;\n border: 1px solid #ffeaa7;\n color: #856404;\n }\n\n .spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #3498db;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin-right: 10px;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n .info-box {\n background: #e7f3ff;\n border: 1px solid #b8daff;\n border-radius: 6px;\n padding: 15px;\n margin-bottom: 25px;\n color: #004085;\n }\n\n .example {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n padding: 10px;\n margin-top: 5px;\n font-family: 'Courier New', monospace;\n font-size: 14px;\n color: #6c757d;\n }\n\n .menu-block {\n background: #f7fafd;\n border: 1px solid #e3e8ee;\n border-radius: 6px;\n margin-bottom: 16px;\n padding: 12px 16px 8px 16px;\n transition: box-shadow 0.2s;\n }\n .menu-block:hover {\n box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n }\n .menu-label {\n justify-content: space-between;\n white-space: nowrap;\n font-weight: bold;\n font-size: 16px;\n color: #333;\n display: flex;\n align-items: center;\n margin-bottom: 6px;\n background:#e7f3ff;\n border-radius: 6px;\n padding-left: 25px;\n position: relative;\n cursor: pointer;\n }\n .menu-icon {\n position: absolute;\n left: 9px;\n top: 6px;\n width: 12px;\n text-align: center;\n font-size: 12px;\n user-select: none;\n }\n .api-list {\n list-style: none;\n padding: 0;\n }\n .api-item {\n border-radius: 6px;\n padding-left: 15px;\n justify-content: space-between;\n white-space: nowrap;\n font-size: 14px;\n color: #666;\n display: flex;\n align-items: center;\n margin-top: 10px;\n cursor: pointer;\n background: #4caf501f;\n\n }\n .api-item span {\n transition: color 0.2s;\n }\n .api-item:hover span {\n color: #1976d2;\n }\n .sync-btn {\n background: #4CAF50;\n color: white;\n padding: 6px 12px;\n border-radius: 4px;\n font-size: 12px;\n margin-left: 10px;\n border: none;\n cursor: pointer;\n }\n .sync-btn:hover {\n opacity: 0.9;\n }\n .search-input {\n padding: 6px 12px;\n margin-right: 10px;\n border: 1px solid #ccc;\n border-radius: 6px;\n font-size: 14px;\n width: 400px;\n }\n </style>\n </head>\n <body>\n <div class="container">\n <div class="header">\n <h1>🚀 YAPI SDK 生成器</h1>\n <p>通过可视化界面轻松生成 API 接口/类型/Mock文件</p>\n </div>\n\n <div class="content">\n <div style="display:flex;justify-content:space-between">\n <label>菜单列表:</label>\n <div style="margin-bottom: 10px;display:flex;">\n <input type="search" id="search-input" placeholder="搜索菜单名/接口名/接口路径" class="search-input" onkeydown="handleKeyDown(event)>\n </div>\n <div style="text-align:right; margin-bottom: 15px;">\n <button id="toggle-all-btn" class="sync-btn" onclick="toggleAllMenusToggle()">全部折叠</button>\n </div>\n </div>\n <div class="form-group">\n <div id="menuList">菜单加载中...</div>\n </div>\n <div id="result" class="result success" style="display:block;">\n <strong>使用说明:</strong><br>\n 1. 点击菜单接口旁边的"同步"按钮可以直接生成对应的Request/Type/Mock文件<br>\n 2. 请求地址为:<code>${e.serverUrl}</code><br>\n 3. 生成的文件将保存到:<code>${e.outputConfig.requestPath}</code>\n </div>\n </div>\n </div>\n\n <script>\n function showResult(message, type = 'success') {\n const result = document.getElementById('result');\n result.innerHTML = message;\n result.className = 'result ' + type;\n result.style.display = 'block';\n }\n\n function hideResult() {\n const result = document.getElementById('result');\n result.className = 'result success';\n result.innerHTML = '欢迎使用 YAPI SDK 生成器,请选择菜单或接口进行同步。';\n result.style.display = 'block';\n }\n let allMenus = []\n // 页面加载时获取菜单\n async function loadMenus(menusArr, isFilter = false) {\n try {\n const res = await fetch('/api/yapi-menus');\n const data = await res.json();\n if (data.err) {\n document.getElementById('menuList').innerHTML = '菜单加载失败';\n return;\n }\n let menus = data.data || [];\n allMenus = menus\n if (menus.length === 0) {\n document.getElementById('menuList').innerHTML = '暂无菜单';\n return;\n }\n if(isFilter) {\n menus = menusArr\n }\n document.getElementById('menuList').innerHTML = menus.map(menu => {\n let children = '';\n if (Array.isArray(menu.list) && menu.list.length > 0) {\n children = '<ul class="api-list">' +\n menu.list.map(item =>\n '<li>' +\n '<div class="api-item">' +\n '<span>' + item.title + item.path +'</span>' +\n '<div class="">' +\n '<button class="sync-btn" onclick="syncSingle(' + item._id + ', 0)">同步(All)</button>' +\n '<button class="sync-btn" style="background:#2196F3;" onclick="syncSingle(' + item._id + ',1)">仅同步(Request)</button>' +\n '<button class="sync-btn" style="background:darkcyan;" onclick="syncSingle(' + item._id + ', 2)">仅同步(Type)</button>' +\n (${e.mockConfig?.enable} ? '<button class="sync-btn" style="background:gray;" onclick="syncSingle(' + item._id + ', 3)">仅同步(Mock)</button>' : '') +\n '</div>' +\n '</div>' +\n '</li>'\n ).join('') +\n '</ul>';\n }\n return (\n '<div class="menu-block">' +\n '<div class="menu-label" onclick="toggleMenu(this)">' +\n '<span class="menu-icon">▼</span>' +\n '<span>' + menu.name + '</span>' +\n '<div class="">' +\n '<button class="sync-btn" onclick="event.stopPropagation(); syncMenu(' + menu._id + ', 0)">同步全部(菜单)</button>' +\n '<button class="sync-btn" style="background:#2196F3;" onclick="event.stopPropagation(); syncMenu(' + menu._id + ', 1)">仅同步请求(菜单)</button>' +\n '<button class="sync-btn" style="background:darkcyan;" onclick="event.stopPropagation(); syncMenu(' + menu._id + ', 2)">仅同步类型(菜单)</button>' +\n (${e.mockConfig?.enable} ? '<button class="sync-btn" style="background:gray;" onclick="event.stopPropagation(); syncMenu(' + menu._id + ', 3)">仅同步Mock(菜单)</button>' : '') +\n '</div>' +\n '</div>' +\n '<div class="menu-content">' + children + '</div>' +\n '</div>'\n );\n }).join('');\n } catch (e) {\n document.getElementById('menuList').innerHTML = '菜单加载失败';\n }\n }\n\n // 同步单个接口\n async function syncSingle(id, mode = 0) {\n showResult('<div class="spinner"></div>正在生成API文件,请稍候...', 'processing');\n\n try {\n const response = await fetch('/generate', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ mode, ids: id.toString() })\n });\n\n const result = await response.json();\n\n if (result.success) {\n showResult(\`✅ 生成成功!<br><strong>处理详情:</strong><br>\${result.message}\`, 'success');\n } else {\n showResult(\`❌ 生成失败:\${result.error}\`, 'error');\n }\n } catch (error) {\n showResult(\`❌ 请求失败:\${error.message}\`, 'error');\n }\n }\n\n // 同步整个菜单\n async function syncMenu(menuId, mode = 0) {\n showResult('<div class="spinner"></div>正在生成整个菜单的API文件,请稍候...', 'processing');\n\n try {\n const response = await fetch('/generate', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ mode, menuId })\n });\n\n const result = await response.json();\n\n if (result.success) {\n showResult(\`✅ 生成成功!<br><strong>处理详情:</strong><br>\${result.message}\`, 'success');\n } else {\n showResult(\`❌ 生成失败:\${result.error}\`, 'error');\n }\n } catch (error) {\n showResult(\`❌ 请求失败:\${error.message}\`, 'error');\n }\n }\n // 页面加载完成后执行\n document.addEventListener('DOMContentLoaded', function() {\n loadMenus([]);\n });\n function searchMenu() {\n const keyword = document.getElementById('search-input').value.trim().toLowerCase();\n if (!keyword) {\n // 为空时恢复全部菜单\n loadMenus(allMenus, true);\n return;\n }\n // 过滤菜单和接口\n const filteredMenus = allMenus.map(menu => {\n const menuNameMatch = menu.name.toLowerCase().includes(keyword);\n\n const filteredList = menu.list.filter(item => {\n return (\n item.title.toLowerCase().includes(keyword) ||\n item.path.toLowerCase().includes(keyword)\n );\n });\n\n // 如果菜单名匹配,则保留完整菜单和全部接口\n if (menuNameMatch) {\n return { ...menu, list: menu.list };\n }\n\n // 如果接口匹配到了,也保留(但只保留匹配的接口)\n if (filteredList.length > 0) {\n return { ...menu, list: filteredList };\n }\n\n return null;\n }).filter(Boolean);\n loadMenus(filteredMenus, true);\n }\n document.getElementById('search-input').addEventListener('input', function () {\n // const keyword = this.value.trim().toLowerCase();\n searchMenu()\n });\n function handleKeyDown(event) {\n if (event.key === 'Enter') {\n searchMenus();\n }\n }\n let menusExpanded = true;\n function toggleAllMenusToggle() {\n menusExpanded = !menusExpanded;\n toggleAllMenus(menusExpanded);\n\n const btn = document.getElementById('toggle-all-btn');\n btn.textContent = menusExpanded ? '全部折叠' : '全部展开';\n }\n function toggleMenu(labelElement) {\n const content = labelElement.nextElementSibling;\n const icon = labelElement.querySelector('.menu-icon');\n\n if (content.style.display === 'none') {\n content.style.display = 'block';\n icon.textContent = '▼';\n } else {\n content.style.display = 'none';\n icon.textContent = '▶';\n }\n }\n\n function toggleAllMenus(expand = true) {\n const contents = document.querySelectorAll('.menu-content');\n const icons = document.querySelectorAll('.menu-icon');\n contents.forEach(el => {\n el.style.display = expand ? 'block' : 'none';\n });\n icons.forEach(icon => {\n icon.textContent = expand ? '▼' : '▶';\n });\n }\n <\/script>\n </body>\n </html>\n `)})),a.post("/generate",(async(a,n)=>{try{const{mode:i=0,ids:s,menuId:r}=a.body;let c=[];if(s&&"string"==typeof s?c=[parseInt(s,10)].filter((e=>!isNaN(e))):s&&Array.isArray(s)&&(c=s.map((e=>parseInt(e,10))).filter((e=>!isNaN(e)))),r){console.log("🚀 菜单id===:",r);const a=`${e.serverUrl}/api/interface/list_cat?catid=${r}&token=${e.token}`,{data:n}=await t.get(a),i=(n.data.list||[]).map((e=>e._id));c.push(...i)}c=Array.from(new Set(c)),console.log("🚀 接口ids===:",c);const p=new o(e,i);if("all"===i&&0===c.length)await p.generateAll(),n.json({success:!0,message:`所有API接口文件已成功生成到目录: ${e.outputConfig.requestPath}`});else if(c.length>0){let a=0,i=0;const t=[],o=[];for(const e of c)try{await p.generateSingle(e),a++,o.push(`✅ ID ${e}: 生成成功`)}catch(a){i++;const n=`ID ${e}: ${a.message}`;t.push(n),o.push(`❌ ${n}`)}let s=`生成完成!成功: ${a} 个,失败: ${i} 个`;a>0&&(s+=`<br>文件已生成到目录: <code>${e.outputConfig.requestPath}</code>`),t.length>0&&(s+=`<br><br><strong>错误详情:</strong><br>${t.join("<br>")}`),n.json({success:0===i,message:s,details:{successCount:a,errorCount:i,errors:t,generatedPath:e.outputConfig.requestPath}})}else n.json({success:!1,error:"未选择任何菜单,也未输入有效的API ID!"})}catch(e){n.json({success:!1,error:`生成失败: ${e.message}`})}})),a.get("/api/yapi-menus",(async(a,n)=>{try{const{projectId:i=e.projectId}=a.query,o=`${e.serverUrl}/api/interface/list_menu?project_id=${i}&token=${e.token}`,{data:s}=await t.get(o);n.json(s)}catch(e){n.status(500).json({err:e.message})}})),a.listen(e.port,(()=>{console.log("🚀 YAPI SDK Generator 服务器已启动"),console.log(`📱 访问地址: http://localhost:${e.port}`),console.log("🔧 配置信息:"),console.log(` - 服务器: ${e.serverUrl}`),console.log(` - 项目ID: ${e.projectId}`),console.log(` - 输出路径: ${e.outputConfig.requestPath}`),console.log("\n✨ 在浏览器中打开上述地址开始使用!"),n.e(788).then(n.bind(n,2788)).then((a=>{a.default(`http://localhost:${e.port}`)}))})),a}},61:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.TokenData=void 0,a.parse=u,a.compile=function(e,a={}){const{encode:i=encodeURIComponent,delimiter:t=n}=a,o=d((e instanceof l?e:u(e,a)).tokens,t,i);return function(e={}){const[a,...n]=o(e);if(n.length)throw new TypeError(`Missing parameters: ${n.join(", ")}`);return a}},a.match=function(e,a={}){const{decode:t=decodeURIComponent,delimiter:o=n}=a,{regexp:s,keys:r}=m(e,a),c=r.map((e=>!1===t?i:"param"===e.type?t:e=>e.split(o).map(t)));return function(e){const a=s.exec(e);if(!a)return!1;const n=a[0],i=Object.create(null);for(let e=1;e<a.length;e++){if(void 0===a[e])continue;const n=r[e-1],t=c[e-1];i[n.name]=t(a[e])}return{path:n,params:i}}},a.pathToRegexp=m,a.stringify=function(e){return e.tokens.map((function e(a,n,i){if("text"===a.type)return a.value.replace(/[{}()\[\]+?!:*]/g,"\\$&");if("group"===a.type)return`{${a.tokens.map(e).join("")}}`;const s=function(e){const[a,...n]=e;return!!t.test(a)&&n.every((e=>o.test(e)))}(a.name)&&function(e){return"text"!==(null==e?void 0:e.type)||!o.test(e.value[0])}(i[n+1]),r=s?a.name:JSON.stringify(a.name);if("param"===a.type)return`:${r}`;if("wildcard"===a.type)return`*${r}`;throw new TypeError(`Unexpected token: ${a}`)})).join("")};const n="/",i=e=>e,t=/^[$_\p{ID_Start}]$/u,o=/^[$\u200c\u200d\p{ID_Continue}]$/u,s="https://git.new/pathToRegexpError",r={"{":"{","}":"}","(":"(",")":")","[":"[","]":"]","+":"+","?":"?","!":"!"};function c(e){return e.replace(/[.+*?^${}()[\]|/\\]/g,"\\$&")}class p{constructor(e){this.tokens=e}peek(){if(!this._peek){const e=this.tokens.next();this._peek=e.value}return this._peek}tryConsume(e){const a=this.peek();if(a.type===e)return this._peek=void 0,a.value}consume(e){const a=this.tryConsume(e);if(void 0!==a)return a;const{type:n,index:i}=this.peek();throw new TypeError(`Unexpected ${n} at ${i}, expected ${e}: ${s}`)}text(){let e,a="";for(;e=this.tryConsume("CHAR")||this.tryConsume("ESCAPED");)a+=e;return a}}class l{constructor(e){this.tokens=e}}function u(e,a={}){const{encodePath:n=i}=a,c=new p(function*(e){const a=[...e];let n=0;function i(){let e="";if(t.test(a[++n]))for(e+=a[n];o.test(a[++n]);)e+=a[n];else if('"'===a[n]){let i=n;for(;n<a.length;){if('"'===a[++n]){n++,i=0;break}e+="\\"===a[n]?a[++n]:a[n]}if(i)throw new TypeError(`Unterminated quote at ${i}: ${s}`)}if(!e)throw new TypeError(`Missing parameter name at ${n}: ${s}`);return e}for(;n<a.length;){const e=a[n],t=r[e];if(t)yield{type:t,index:n++,value:e};else if("\\"===e)yield{type:"ESCAPED",index:n++,value:a[n++]};else if(":"===e){const e=i();yield{type:"PARAM",index:n,value:e}}else if("*"===e){const e=i();yield{type:"WILDCARD",index:n,value:e}}else yield{type:"CHAR",index:n,value:a[n++]}}return{type:"END",index:n,value:""}}(e));const u=function e(a){const i=[];for(;;){const t=c.text();t&&i.push({type:"text",value:n(t)});const o=c.tryConsume("PARAM");if(o){i.push({type:"param",name:o});continue}const s=c.tryConsume("WILDCARD");if(s){i.push({type:"wildcard",name:s});continue}if(!c.tryConsume("{"))return c.consume(a),i;i.push({type:"group",tokens:e("}")})}}("END");return new l(u)}function d(e,a,n){const t=e.map((e=>function(e,a,n){if("text"===e.type)return()=>[e.value];if("group"===e.type){const i=d(e.tokens,a,n);return e=>{const[a,...n]=i(e);return n.length?[""]:[a]}}const t=n||i;if("wildcard"===e.type&&!1!==n)return n=>{const i=n[e.name];if(null==i)return["",e.name];if(!Array.isArray(i)||0===i.length)throw new TypeError(`Expected "${e.name}" to be a non-empty array`);return[i.map(((a,n)=>{if("string"!=typeof a)throw new TypeError(`Expected "${e.name}/${n}" to be a string`);return t(a)})).join(a)]};return a=>{const n=a[e.name];if(null==n)return["",e.name];if("string"!=typeof n)throw new TypeError(`Expected "${e.name}" to be a string`);return[t(n)]}}(e,a,n)));return e=>{const a=[""];for(const n of t){const[i,...t]=n(e);a[0]+=i,a.push(...t)}return a}}function m(e,a={}){const{delimiter:i=n,end:t=!0,sensitive:o=!1,trailing:s=!0}=a,r=[],p=[],d=o?"":"i",m=(Array.isArray(e)?e:[e]).map((e=>e instanceof l?e:u(e,a)));for(const{tokens:e}of m)for(const a of f(e,0,[])){const e=x(a,i,r);p.push(e)}let v=`^(?:${p.join("|")})`;s&&(v+=`(?:${c(i)}$)?`),v+=t?"$":`(?=${c(i)}|$)`;return{regexp:new RegExp(v,d),keys:r}}function*f(e,a,n){if(a===e.length)return yield n;const i=e[a];if("group"===i.type){const t=n.slice();for(const n of f(i.tokens,0,t))yield*f(e,a+1,n)}else n.push(i);yield*f(e,a+1,n)}function x(e,a,n){let i="",t="",o=!0;for(let r=0;r<e.length;r++){const p=e[r];if("text"!==p.type)if("param"!==p.type&&"wildcard"!==p.type);else{if(!o&&!t)throw new TypeError(`Missing text after "${p.name}": ${s}`);"param"===p.type?i+=`(${v(a,o?"":t)}+)`:i+="([\\s\\S]+)",n.push(p),t="",o=!1}else i+=c(p.value),t+=p.value,o||(o=p.value.includes(a))}return i}function v(e,a){return a.length<2?e.length<2?`[^${c(e+a)}]`:`(?:(?!${c(e)})[^${c(a)}])`:e.length<2?`(?:(?!${c(a)})[^${c(e)}])`:`(?:(?!${c(a)}|${c(e)})[\\s\\S])`}a.TokenData=l},135:(e,a,n)=>{var i=n(9023),t=n(2203).Stream,o=n(9366);function s(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=s,i.inherits(s,t),s.create=function(e){var a=new this;for(var n in e=e||{})a[n]=e[n];return a},s.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},s.prototype.append=function(e){if(s.isStreamLike(e)){if(!(e instanceof o)){var a=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},s.prototype.pipe=function(e,a){return t.prototype.pipe.call(this,e,a),this.resume(),e},s.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},s.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){s.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},s.prototype._pipeNext=function(e){if(this._currentStream=e,s.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},s.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},s.prototype.write=function(e){this.emit("data",e)},s.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},s.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},s.prototype.end=function(){this._reset(),this.emit("end")},s.prototype.destroy=function(){this._reset(),this.emit("close")},s.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},s.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},s.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},s.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},181:e=>{"use strict";e.exports=require("buffer")},248:e=>{"use strict";e.exports="undefined"!=typeof Reflect&&Reflect.getPrototypeOf||null},250:e=>{"use strict";e.exports=Math.pow},288:(e,a,n)=>{"use strict";var i=n(1628).Buffer;e.exports=function(e){var a=e.Transform;function n(e,n){this.conv=e,(n=n||{}).decodeStrings=!1,a.call(this,n)}function t(e,n){this.conv=e,(n=n||{}).encoding=this.encoding="utf8",a.call(this,n)}return n.prototype=Object.create(a.prototype,{constructor:{value:n}}),n.prototype._transform=function(e,a,n){if("string"!=typeof e)return n(new Error("Iconv encoding stream needs strings as its input."));try{var i=this.conv.write(e);i&&i.length&&this.push(i),n()}catch(e){n(e)}},n.prototype._flush=function(e){try{var a=this.conv.end();a&&a.length&&this.push(a),e()}catch(a){e(a)}},n.prototype.collect=function(e){var a=[];return this.on("error",e),this.on("data",(function(e){a.push(e)})),this.on("end",(function(){e(null,i.concat(a))})),this},t.prototype=Object.create(a.prototype,{constructor:{value:t}}),t.prototype._transform=function(e,a,n){if(!(i.isBuffer(e)||e instanceof Uint8Array))return n(new Error("Iconv decoding stream needs buffers as its input."));try{var t=this.conv.write(e);t&&t.length&&this.push(t,this.encoding),n()}catch(e){n(e)}},t.prototype._flush=function(e){try{var a=this.conv.end();a&&a.length&&this.push(a,this.encoding),e()}catch(a){e(a)}},t.prototype.collect=function(e){var a="";return this.on("error",e),this.on("data",(function(e){a+=e})),this.on("end",(function(){e(null,a)})),this},{IconvLiteEncoderStream:n,IconvLiteDecoderStream:t}}},290:e=>{"use strict";e.exports=require("async_hooks")},332:e=>{"use strict";e.exports=function(e,a){if("string"==typeof e)return s(e);if("number"==typeof e)return o(e,a);return null},e.exports.format=o,e.exports.parse=s;var a=/\B(?=(\d{3})+(?!\d))/g,n=/(?:\.0*|(\.[^0]+)0+)$/,i={b:1,kb:1024,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)},t=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function o(e,t){if(!Number.isFinite(e))return null;var o=Math.abs(e),s=t&&t.thousandsSeparator||"",r=t&&t.unitSeparator||"",c=t&&void 0!==t.decimalPlaces?t.decimalPlaces:2,p=Boolean(t&&t.fixedDecimals),l=t&&t.unit||"";l&&i[l.toLowerCase()]||(l=o>=i.pb?"PB":o>=i.tb?"TB":o>=i.gb?"GB":o>=i.mb?"MB":o>=i.kb?"KB":"B");var u=(e/i[l.toLowerCase()]).toFixed(c);return p||(u=u.replace(n,"$1")),s&&(u=u.split(".").map((function(e,n){return 0===n?e.replace(a,s):e})).join(".")),u+r+l}function s(e){if("number"==typeof e&&!isNaN(e))return e;if("string"!=typeof e)return null;var a,n=t.exec(e),o="b";return n?(a=parseFloat(n[1]),o=n[4].toLowerCase()):(a=parseInt(e,10),o="b"),isNaN(a)?null:Math.floor(i[o]*a)}},381:(e,a)=>{"use strict";function n(e,a){this.encoder=e,this.addBOM=!0}function i(e,a){this.decoder=e,this.pass=!1,this.options=a||{}}a.PrependBOM=n,n.prototype.write=function(e){return this.addBOM&&(e="\ufeff"+e,this.addBOM=!1),this.encoder.write(e)},n.prototype.end=function(){return this.encoder.end()},a.StripBOM=i,i.prototype.write=function(e){var a=this.decoder.write(e);return this.pass||!a||("\ufeff"===a[0]&&(a=a.slice(1),"function"==typeof this.options.stripBOM&&this.options.stripBOM()),this.pass=!0),a},i.prototype.end=function(){return this.decoder.end()}},540:(e,a,n)=>{"use strict";var i=n(8336),t=n(6619),o=n(6385),s=n(6053),r=n(8522);e.exports=function(e,a,n,c,p,l){var u,d,m=l,f=null!==m.encoding?m.encoding:null,x=m.verify;try{d=function(e,a,n){var t=(e.headers["content-encoding"]||"identity").toLowerCase(),o=e.headers["content-length"];if(a('content-encoding "%s"',t),!1===n&&"identity"!==t)throw i(415,"content encoding unsupported",{encoding:t,type:"encoding.unsupported"});if("identity"===t)return e.length=o,e;var s=function(e,a){switch(e){case"deflate":return a("inflate body"),r.createInflate();case"gzip":return a("gunzip body"),r.createGunzip();case"br":return a("brotli decompress body"),r.createBrotliDecompress();default:throw i(415,'unsupported content encoding "'+e+'"',{encoding:e,type:"encoding.unsupported"})}}(t,a);return e.pipe(s),s}(e,p,m.inflate),u=d.length,d.length=void 0}catch(e){return n(e)}if(m.length=u,m.encoding=x?null:f,null===m.encoding&&null!==f&&!o.encodingExists(f))return n(i(415,'unsupported charset "'+f.toUpperCase()+'"',{charset:f.toLowerCase(),type:"charset.unsupported"}));p("read body"),t(d,m,(function(t,r){var l;if(t)return l="encoding.unsupported"===t.type?i(415,'unsupported charset "'+f.toUpperCase()+'"',{charset:f.toLowerCase(),type:"charset.unsupported"}):i(400,t),d!==e&&(e.unpipe(),d.destroy()),void function(e,a){s.isFinished(e)?a(null):(s(e,a),e.resume())}(e,(function(){n(i(400,l))}));if(x)try{p("verify body"),x(e,a,r,f)}catch(e){return void n(i(403,e,{body:r,type:e.type||"entity.verify.failed"}))}var u=r;try{p("parse body"),u="string"!=typeof r&&null!==f?o.decode(r,f):r,e.body=c(u,f)}catch(e){return void n(i(400,e,{body:u,type:e.type||"entity.parse.failed"}))}n()}))}},717:e=>{"use strict";e.exports=function(e){if(!e)throw new TypeError("argument stream is required");if("function"==typeof e.unpipe)return void e.unpipe();if(!function(e){for(var a=e.listeners("data"),n=0;n<a.length;n++)if("ondata"===a[n].name)return!0;return!1}(e))return;for(var a,n=e.listeners("close"),i=0;i<n.length;i++)"cleanup"!==(a=n[i]).name&&"onclose"!==a.name||a.call(e)}},836:(e,a,n)=>{"use strict";var i=n(4198),t=n(3952),o=n(8085),s=Object.prototype.hasOwnProperty,r={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,a){return e+"["+a+"]"},repeat:function(e){return e}},c=Array.isArray,p=Array.prototype.push,l=function(e,a){p.apply(e,c(a)?a:[a])},u=Date.prototype.toISOString,d=o.default,m={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,commaRoundTrip:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:t.encode,encodeValuesOnly:!1,filter:void 0,format:d,formatter:o.formatters[d],indices:!1,serializeDate:function(e){return u.call(e)},skipNulls:!1,strictNullHandling:!1},f={},x=function e(a,n,o,s,r,p,u,d,x,v,h,b,g,y,w,k,j,C){for(var E,S=a,_=C,O=0,T=!1;void 0!==(_=_.get(f))&&!T;){var A=_.get(a);if(O+=1,void 0!==A){if(A===O)throw new RangeError("Cyclic object value");T=!0}void 0===_.get(f)&&(O=0)}if("function"==typeof v?S=v(n,S):S instanceof Date?S=g(S):"comma"===o&&c(S)&&(S=t.maybeMap(S,(function(e){return e instanceof Date?g(e):e}))),null===S){if(p)return x&&!k?x(n,m.encoder,j,"key",y):n;S=""}if("string"==typeof(E=S)||"number"==typeof E||"boolean"==typeof E||"symbol"==typeof E||"bigint"==typeof E||t.isBuffer(S))return x?[w(k?n:x(n,m.encoder,j,"key",y))+"="+w(x(S,m.encoder,j,"value",y))]:[w(n)+"="+w(String(S))];var q,R=[];if(void 0===S)return R;if("comma"===o&&c(S))k&&x&&(S=t.maybeMap(S,x)),q=[{value:S.length>0?S.join(",")||null:void 0}];else if(c(v))q=v;else{var F=Object.keys(S);q=h?F.sort(h):F}var z=d?String(n).replace(/\./g,"%2E"):String(n),P=s&&c(S)&&1===S.length?z+"[]":z;if(r&&c(S)&&0===S.length)return P+"[]";for(var I=0;I<q.length;++I){var L=q[I],B="object"==typeof L&&L&&void 0!==L.value?L.value:S[L];if(!u||null!==B){var N=b&&d?String(L).replace(/\./g,"%2E"):String(L),U=c(S)?"function"==typeof o?o(P,N):P:P+(b?"."+N:"["+N+"]");C.set(a,O);var D=i();D.set(f,C),l(R,e(B,U,o,s,r,p,u,d,"comma"===o&&k&&c(S)?null:x,v,h,b,g,y,w,k,j,D))}}return R};e.exports=function(e,a){var n,t=e,p=function(e){if(!e)return m;if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var a=e.charset||m.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=o.default;if(void 0!==e.format){if(!s.call(o.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var i,t=o.formatters[n],p=m.filter;if(("function"==typeof e.filter||c(e.filter))&&(p=e.filter),i=e.arrayFormat in r?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":m.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var l=void 0===e.allowDots?!0===e.encodeDotInKeys||m.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:m.addQueryPrefix,allowDots:l,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:m.allowEmptyArrays,arrayFormat:i,charset:a,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:m.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?m.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:m.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:m.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:m.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:m.encodeValuesOnly,filter:p,format:n,formatter:t,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:m.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:m.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:m.strictNullHandling}}(a);"function"==typeof p.filter?t=(0,p.filter)("",t):c(p.filter)&&(n=p.filter);var u=[];if("object"!=typeof t||null===t)return"";var d=r[p.arrayFormat],f="comma"===d&&p.commaRoundTrip;n||(n=Object.keys(t)),p.sort&&n.sort(p.sort);for(var v=i(),h=0;h<n.length;++h){var b=n[h],g=t[b];p.skipNulls&&null===g||l(u,x(g,b,d,f,p.allowEmptyArrays,p.strictNullHandling,p.skipNulls,p.encodeDotInKeys,p.encode?p.encoder:null,p.filter,p.sort,p.allowDots,p.serializeDate,p.format,p.formatter,p.encodeValuesOnly,p.charset,v))}var y=u.join(p.delimiter),w=!0===p.addQueryPrefix?"?":"";return p.charsetSentinel&&("iso-8859-1"===p.charset?w+="utf8=%26%2310003%3B&":w+="utf8=%E2%9C%93&"),y.length>0?w+y:""}},857:e=>{"use strict";e.exports=require("os")},910:e=>{"use strict";e.exports=(e,a=process.argv)=>{const n=e.startsWith("-")?"":1===e.length?"-":"--",i=a.indexOf(n+e),t=a.indexOf("--");return-1!==i&&(-1===t||i<t)}},915:(e,a,n)=>{"use strict";var i=n(7638),t=n(7030).isIP,o=n(7119),s=n(7067),r=n(6944),c=n(1612),p=n(8653),l=n(5857),u=Object.create(s.IncomingMessage.prototype);function d(e,a,n){Object.defineProperty(e,a,{configurable:!0,enumerable:!0,get:n})}e.exports=u,u.get=u.header=function(e){if(!e)throw new TypeError("name argument is required to req.get");if("string"!=typeof e)throw new TypeError("name must be a string to req.get");var a=e.toLowerCase();switch(a){case"referer":case"referrer":return this.headers.referrer||this.headers.referer;default:return this.headers[a]}},u.accepts=function(){var e=i(this);return e.types.apply(e,arguments)},u.acceptsEncodings=function(){var e=i(this);return e.encodings.apply(e,arguments)},u.acceptsCharsets=function(){var e=i(this);return e.charsets.apply(e,arguments)},u.acceptsLanguages=function(){var e=i(this);return e.languages.apply(e,arguments)},u.range=function(e,a){var n=this.get("Range");if(n)return c(e,n,a)},d(u,"query",(function(){var e=this.app.get("query parser fn");return e?e(p(this).query):Object.create(null)})),u.is=function(e){var a=e;if(!Array.isArray(e)){a=new Array(arguments.length);for(var n=0;n<a.length;n++)a[n]=arguments[n]}return o(this,a)},d(u,"protocol",(function(){var e=this.connection.encrypted?"https":"http";if(!this.app.get("trust proxy fn")(this.connection.remoteAddress,0))return e;var a=this.get("X-Forwarded-Proto")||e,n=a.indexOf(",");return-1!==n?a.substring(0,n).trim():a.trim()})),d(u,"secure",(function(){return"https"===this.protocol})),d(u,"ip",(function(){var e=this.app.get("trust proxy fn");return l(this,e)})),d(u,"ips",(function(){var e=this.app.get("trust proxy fn"),a=l.all(this,e);return a.reverse().pop(),a})),d(u,"subdomains",(function(){var e=this.hostname;if(!e)return[];var a=this.app.get("subdomain offset"),n=t(e)?[e]:e.split(".").reverse();return n.slice(a)})),d(u,"path",(function(){return p(this).pathname})),d(u,"host",(function(){var e=this.app.get("trust proxy fn"),a=this.get("X-Forwarded-Host");return a&&e(this.connection.remoteAddress,0)?-1!==a.indexOf(",")&&(a=a.substring(0,a.indexOf(",")).trimRight()):a=this.get("Host"),a||void 0})),d(u,"hostname",(function(){var e=this.host;if(e){var a="["===e[0]?e.indexOf("]")+1:0,n=e.indexOf(":",a);return-1!==n?e.substring(0,n):e}})),d(u,"fresh",(function(){var e=this.method,a=this.res,n=a.statusCode;return("GET"===e||"HEAD"===e)&&((n>=200&&n<300||304===n)&&r(this.headers,{etag:a.get("ETag"),"last-modified":a.get("Last-Modified")}))})),d(u,"stale",(function(){return!this.fresh})),d(u,"xhr",(function(){return"xmlhttprequest"===(this.get("X-Requested-With")||"").toLowerCase()}))},1057:(e,a,n)=>{"use strict";var i=n(1569)("body-parser:text"),t=n(6053).isFinished,o=n(540),s=n(7119),{getCharset:r,normalizeOptions:c}=n(9307);e.exports=function(e){var{inflate:a,limit:n,verify:p,shouldParse:l}=c(e,"text/plain"),u=e?.defaultCharset||"utf-8";function d(e){return e}return function(e,c,m){if(t(e))return i("body already parsed"),void m();if("body"in e||(e.body=void 0),!s.hasBody(e))return i("skip empty body"),void m();if(i("content-type %j",e.headers["content-type"]),!l(e))return i("skip parsing"),void m();var f=r(e)||u;o(e,c,m,d,i,{encoding:f,inflate:a,limit:n,verify:p})}}},1066:(e,a,n)=>{const i=n(9896),t=n(6928);function o(e){const a=i.readdirSync(e).filter((e=>e.endsWith(".ts")&&"index.ts"!==e)).map((e=>`export * from './${e.replace(/\.ts$/,"")}';`)).join("\n")+"\n";i.writeFileSync(t.join(e,"index.ts"),a)}e.exports={getFolderAndFileName:function(e){const a=e.split("?")[0].split("/").filter(Boolean);function n(e){return e.replace(/[\\/?%*:|"<>.&=$\{\}]/g,"")}let i,t=a[a.length-1];return/^\$?\{.+\}$/.test(t)&&(t=a[a.length-2]||"index"),t=n(t),i=/^\$?\{.+\}$/.test(a[a.length-1])?n(a[a.length-3]||""):n(a[a.length-2]||""),{folderName:i,fileName:t}},generateIndexFile:o,generateTypeIndexFile:function(e){o(e)},formatInterfaceName:function(e){return e.split("/").filter(Boolean).map((e=>e.replace(/\{([^}]+)\}/g,"").charAt(0).toUpperCase()+e.replace(/\{([^}]+)\}/g,"").slice(1))).join("")},formatFunctionName:function(e){return e.replace(/\{[^}]+\}/g,"").split("/").filter(Boolean).map(((e,a)=>0===a?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1))).join("")}}},1085:e=>{"use strict";e.exports=t,e.exports.preferredCharsets=t;var a=/^\s*([^\s;]+)\s*(?:;(.*))?$/;function n(e,n){var i=a.exec(e);if(!i)return null;var t=i[1],o=1;if(i[2])for(var s=i[2].split(";"),r=0;r<s.length;r++){var c=s[r].trim().split("=");if("q"===c[0]){o=parseFloat(c[1]);break}}return{charset:t,q:o,i:n}}function i(e,a,n){var i=0;if(a.charset.toLowerCase()===e.toLowerCase())i|=1;else if("*"!==a.charset)return null;return{i:n,o:a.i,q:a.q,s:i}}function t(e,a){var t=function(e){for(var a=e.split(","),i=0,t=0;i<a.length;i++){var o=n(a[i].trim(),i);o&&(a[t++]=o)}return a.length=t,a}(void 0===e?"*":e||"");if(!a)return t.filter(r).sort(o).map(s);var c=a.map((function(e,a){return function(e,a,n){for(var t={o:-1,q:0,s:0},o=0;o<a.length;o++){var s=i(e,a[o],n);s&&(t.s-s.s||t.q-s.q||t.o-s.o)<0&&(t=s)}return t}(e,t,a)}));return c.filter(r).sort(o).map((function(e){return a[c.indexOf(e)]}))}function o(e,a){return a.q-e.q||a.s-e.s||e.o-a.o||e.i-a.i||0}function s(e){return e.charset}function r(e){return e.q>0}},1102:e=>{"use strict";e.exports=TypeError},1103:(e,a,n)=>{"use strict";var i=n(1628).Buffer;function t(e,a){this.enc=e.encodingName,this.bomAware=e.bomAware,"base64"===this.enc?this.encoder=c:"cesu8"===this.enc&&(this.enc="utf8",this.encoder=p,"💩"!==i.from("eda0bdedb2a9","hex").toString()&&(this.decoder=l,this.defaultCharUnicode=a.defaultCharUnicode))}e.exports={utf8:{type:"_internal",bomAware:!0},cesu8:{type:"_internal",bomAware:!0},unicode11utf8:"utf8",ucs2:{type:"_internal",bomAware:!0},utf16le:"ucs2",binary:{type:"_internal"},base64:{type:"_internal"},hex:{type:"_internal"},_internal:t},t.prototype.encoder=r,t.prototype.decoder=s;var o=n(3193).StringDecoder;function s(e,a){this.decoder=new o(a.enc)}function r(e,a){this.enc=a.enc}function c(e,a){this.prevStr=""}function p(e,a){}function l(e,a){this.acc=0,this.contBytes=0,this.accBytes=0,this.defaultCharUnicode=a.defaultCharUnicode}o.prototype.end||(o.prototype.end=function(){}),s.prototype.write=function(e){return i.isBuffer(e)||(e=i.from(e)),this.decoder.write(e)},s.prototype.end=function(){return this.decoder.end()},r.prototype.write=function(e){return i.from(e,this.enc)},r.prototype.end=function(){},c.prototype.write=function(e){var a=(e=this.prevStr+e).length-e.length%4;return this.prevStr=e.slice(a),e=e.slice(0,a),i.from(e,"base64")},c.prototype.end=function(){return i.from(this.prevStr,"base64")},p.prototype.write=function(e){for(var a=i.alloc(3*e.length),n=0,t=0;t<e.length;t++){var o=e.charCodeAt(t);o<128?a[n++]=o:o<2048?(a[n++]=192+(o>>>6),a[n++]=128+(63&o)):(a[n++]=224+(o>>>12),a[n++]=128+(o>>>6&63),a[n++]=128+(63&o))}return a.slice(0,n)},p.prototype.end=function(){},l.prototype.write=function(e){for(var a=this.acc,n=this.contBytes,i=this.accBytes,t="",o=0;o<e.length;o++){var s=e[o];128!=(192&s)?(n>0&&(t+=this.defaultCharUnicode,n=0),s<128?t+=String.fromCharCode(s):s<224?(a=31&s,n=1,i=1):s<240?(a=15&s,n=2,i=1):t+=this.defaultCharUnicode):n>0?(a=a<<6|63&s,i++,0===--n&&(t+=2===i&&a<128&&a>0||3===i&&a<2048?this.defaultCharUnicode:String.fromCharCode(a))):t+=this.defaultCharUnicode}return this.acc=a,this.contBytes=n,this.accBytes=i,t},l.prototype.end=function(){var e=0;return this.contBytes>0&&(e+=this.defaultCharUnicode),e}},1134:(e,a,n)=>{"use strict";var i=n(8050),t=n(8018),o=n(8653),s=n(6928).resolve,r=n(5231),c=n(7016);e.exports=function(e,a){if(!e)throw new TypeError("root path required");if("string"!=typeof e)throw new TypeError("root path must be a string");var n=Object.create(a||null),p=!1!==n.fallthrough,l=!1!==n.redirect,u=n.setHeaders;if(u&&"function"!=typeof u)throw new TypeError("option setHeaders must be function");n.maxage=n.maxage||n.maxAge||0,n.root=s(e);var d=l?function(e){if(this.hasTrailingSlash())this.error(404);else{var a=o.original(this.req);a.path=null,a.pathname=function(e){for(var a=0;a<e.length&&47===e.charCodeAt(a);a++);return a>1?"/"+e.substr(a):e}(a.pathname+"/");var n,s,r=i(c.format(a)),p=(n="Redirecting",s="Redirecting to "+t(r),'<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>'+n+"</title>\n</head>\n<body>\n<pre>"+s+"</pre>\n</body>\n</html>\n");e.statusCode=301,e.setHeader("Content-Type","text/html; charset=UTF-8"),e.setHeader("Content-Length",Buffer.byteLength(p)),e.setHeader("Content-Security-Policy","default-src 'none'"),e.setHeader("X-Content-Type-Options","nosniff"),e.setHeader("Location",r),e.end(p)}}:function(){this.error(404)};return function(e,a,i){if("GET"!==e.method&&"HEAD"!==e.method)return p?i():(a.statusCode=405,a.setHeader("Allow","GET, HEAD"),a.setHeader("Content-Length","0"),void a.end());var t=!p,s=o.original(e),c=o(e).pathname;"/"===c&&"/"!==s.pathname.substr(-1)&&(c="");var l=r(e,c,n);l.on("directory",d),u&&l.on("headers",u),p&&l.on("file",(function(){t=!0})),l.on("error",(function(e){!t&&e.statusCode<500?i():i(e)})),l.pipe(a)}}},1193:e=>{"function"==typeof Object.create?e.exports=function(e,a){a&&(e.super_=a,e.prototype=Object.create(a.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,a){if(a){e.super_=a;var n=function(){};n.prototype=a.prototype,e.prototype=new n,e.prototype.constructor=e}}},1266:(e,a)=>{"use strict";var n=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,i=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,t=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,o=/\\([\u000b\u0020-\u00ff])/g,s=/([\\"])/g,r=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;function c(e){var a=String(e);if(t.test(a))return a;if(a.length>0&&!i.test(a))throw new TypeError("invalid parameter value");return'"'+a.replace(s,"\\$1")+'"'}function p(e){this.parameters=Object.create(null),this.type=e}a.format=function(e){if(!e||"object"!=typeof e)throw new TypeError("argument obj is required");var a=e.parameters,n=e.type;if(!n||!r.test(n))throw new TypeError("invalid type");var i=n;if(a&&"object"==typeof a)for(var o,s=Object.keys(a).sort(),p=0;p<s.length;p++){if(o=s[p],!t.test(o))throw new TypeError("invalid parameter name");i+="; "+o+"="+c(a[o])}return i},a.parse=function(e){if(!e)throw new TypeError("argument string is required");var a="object"==typeof e?function(e){var a;"function"==typeof e.getHeader?a=e.getHeader("content-type"):"object"==typeof e.headers&&(a=e.headers&&e.headers["content-type"]);if("string"!=typeof a)throw new TypeError("content-type header is missing from object");return a}(e):e;if("string"!=typeof a)throw new TypeError("argument string is required to be a string");var i=a.indexOf(";"),t=-1!==i?a.slice(0,i).trim():a.trim();if(!r.test(t))