This commit is contained in:
aaron 2026-04-08 00:57:23 +08:00
parent e76c0c0e9d
commit a49202653a
1767 changed files with 171415 additions and 21 deletions

View File

@ -1,4 +1,10 @@
node_modules node_modules
.next src
.git .git
.env* .env*
package.json
package-lock.json
tsconfig.json
tailwind.config.ts
postcss.config.js
next.config.js

View File

@ -0,0 +1 @@
zyMEF2O04rWB2PcTlD48N

View File

@ -0,0 +1,69 @@
{
"pages": {
"/_not-found/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/_not-found/page-9a1795a099256da4.js"
],
"/layout": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/css/fa5094a6607a8c23.css",
"static/chunks/448-92a7b932cf4502ac.js",
"static/chunks/app/layout-97bdd231e78ddf3f.js"
],
"/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/page-5a303311159f23ad.js"
],
"/login/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/login/page-778febf452923618.js"
],
"/chat/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/chat/page-2dd3304322bd4036.js"
],
"/sectors/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/sectors/page-2f0e16a2b83354cf.js"
],
"/recommendations/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/recommendations/page-ef6715bbb27168f0.js"
],
"/stock/[code]/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/stock/[code]/page-aa4270127391b661.js"
],
"/users/page": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js",
"static/chunks/app/users/page-e66e56f48050576b.js"
]
}
}

View File

@ -0,0 +1 @@
{"/_not-found/page":"/_not-found","/api/chat/stream/route":"/api/chat/stream","/page":"/","/login/page":"/login","/chat/page":"/chat","/sectors/page":"/sectors","/recommendations/page":"/recommendations","/stock/[code]/page":"/stock/[code]","/users/page":"/users"}

View File

@ -0,0 +1,32 @@
{
"polyfillFiles": [
"static/chunks/polyfills-42372ed130431b0a.js"
],
"devFiles": [],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/zyMEF2O04rWB2PcTlD48N/_buildManifest.js",
"static/zyMEF2O04rWB2PcTlD48N/_ssgManifest.js"
],
"rootMainFiles": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/fd9d1056-f8a2d551cbb94c85.js",
"static/chunks/117-d0aa9486d6cf1a7a.js",
"static/chunks/main-app-7d7e5d1021afd90c.js"
],
"pages": {
"/_app": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/framework-f66176bb897dc684.js",
"static/chunks/main-9c5f6b283127d940.js",
"static/chunks/pages/_app-72b849fbd24ac258.js"
],
"/_error": [
"static/chunks/webpack-76aa9cbbdedb6a49.js",
"static/chunks/framework-f66176bb897dc684.js",
"static/chunks/main-9c5f6b283127d940.js",
"static/chunks/pages/_error-7ba65e1336b92748.js"
]
},
"ampFirstPages": []
}

View File

@ -0,0 +1 @@
{"type": "commonjs"}

View File

@ -0,0 +1 @@
{"version":4,"routes":{"/chat":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/chat","dataRoute":"/chat.rsc"},"/sectors":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/sectors","dataRoute":"/sectors.rsc"},"/recommendations":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/recommendations","dataRoute":"/recommendations.rsc"},"/login":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/login","dataRoute":"/login.rsc"},"/":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/","dataRoute":"/index.rsc"},"/users":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/users","dataRoute":"/users.rsc"}},"dynamicRoutes":{},"notFoundRoutes":[],"preview":{"previewModeId":"40146790c7327eb9c455b41c5b2a5dbb","previewModeSigningKey":"9e003c815849c7041f83851a08c1182eabc806618d0f84005b72ffa0743a507a","previewModeEncryptionKey":"6363e09d61b04d7f6554442d7782b4c805da3e394fe647a58d69e4ec11f4d85d"}}

View File

@ -0,0 +1,20 @@
{
"components/capital-flow.tsx -> echarts": {
"id": 9614,
"files": [
"static/chunks/614.2cf8795c6fba79f8.js"
]
},
"components/kline-chart.tsx -> echarts": {
"id": 9614,
"files": [
"static/chunks/614.2cf8795c6fba79f8.js"
]
},
"components/score-radar.tsx -> echarts": {
"id": 9614,
"files": [
"static/chunks/614.2cf8795c6fba79f8.js"
]
}
}

View File

@ -0,0 +1 @@
{"version":1,"config":{"env":{},"webpack":null,"eslint":{"ignoreDuringBuilds":false},"typescript":{"ignoreBuildErrors":false,"tsconfigPath":"tsconfig.json"},"distDir":".next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.js","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"analyticsId":"","images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false},"devIndicators":{"buildActivity":true,"buildActivityPosition":"bottom-right"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"amp":{"canonicalBase":""},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"optimizeFonts":true,"excludeDefaultMomentLocales":true,"serverRuntimeConfig":{},"publicRuntimeConfig":{},"reactProductionProfiling":false,"reactStrictMode":null,"httpAgentOptions":{"keepAlive":true},"outputFileTracing":true,"staticPageGenerationTimeout":60,"swcMinify":true,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"experimental":{"multiZoneDraftMode":false,"prerenderEarlyExit":false,"serverMinification":true,"serverSourceMaps":false,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","middlewarePrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":9,"memoryBasedWorkersCount":false,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"outputFileTracingRoot":"/Users/aaron/source_code/astock-agent/frontend","swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"adjustFontFallbacks":false,"adjustFontFallbacksWithSizeAdjust":false,"typedRoutes":false,"instrumentationHook":false,"bundlePagesExternals":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"missingSuspenseWithCSRBailout":true,"optimizeServerReact":true,"useEarlyImport":false,"staleTimes":{"dynamic":30,"static":300},"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"configFileName":"next.config.js","_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/api/:path*","destination":"http://localhost:8000/api/:path*"},{"source":"/ws","destination":"http://localhost:8000/ws"}],"fallback":[]}},"appDir":"/Users/aaron/source_code/astock-agent/frontend","relativeAppDir":"","files":[".next/routes-manifest.json",".next/server/pages-manifest.json",".next/build-manifest.json",".next/prerender-manifest.json",".next/server/middleware-manifest.json",".next/server/middleware-build-manifest.js",".next/server/middleware-react-loadable-manifest.js",".next/server/app-paths-manifest.json",".next/app-path-routes-manifest.json",".next/app-build-manifest.json",".next/server/server-reference-manifest.js",".next/server/server-reference-manifest.json",".next/react-loadable-manifest.json",".next/server/font-manifest.json",".next/BUILD_ID",".next/server/next-font-manifest.js",".next/server/next-font-manifest.json"],"ignore":["node_modules/next/dist/compiled/@ampproject/toolbox-optimizer/**/*"]}

View File

@ -0,0 +1 @@
{"version":3,"pages404":true,"caseSensitive":false,"basePath":"","redirects":[{"source":"/:path+/","destination":"/:path+","internal":true,"statusCode":308,"regex":"^(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))/$"}],"headers":[],"dynamicRoutes":[{"page":"/stock/[code]","regex":"^/stock/([^/]+?)(?:/)?$","routeKeys":{"nxtPcode":"nxtPcode"},"namedRegex":"^/stock/(?<nxtPcode>[^/]+?)(?:/)?$"}],"staticRoutes":[{"page":"/","regex":"^/(?:/)?$","routeKeys":{},"namedRegex":"^/(?:/)?$"},{"page":"/_not-found","regex":"^/_not\\-found(?:/)?$","routeKeys":{},"namedRegex":"^/_not\\-found(?:/)?$"},{"page":"/chat","regex":"^/chat(?:/)?$","routeKeys":{},"namedRegex":"^/chat(?:/)?$"},{"page":"/login","regex":"^/login(?:/)?$","routeKeys":{},"namedRegex":"^/login(?:/)?$"},{"page":"/recommendations","regex":"^/recommendations(?:/)?$","routeKeys":{},"namedRegex":"^/recommendations(?:/)?$"},{"page":"/sectors","regex":"^/sectors(?:/)?$","routeKeys":{},"namedRegex":"^/sectors(?:/)?$"},{"page":"/users","regex":"^/users(?:/)?$","routeKeys":{},"namedRegex":"^/users(?:/)?$"}],"dataRoutes":[],"rsc":{"header":"RSC","varyHeader":"RSC, Next-Router-State-Tree, Next-Router-Prefetch","prefetchHeader":"Next-Router-Prefetch","didPostponeHeader":"x-nextjs-postponed","contentTypeHeader":"text/x-component","suffix":".rsc","prefetchSuffix":".prefetch.rsc"},"rewrites":[{"source":"/api/:path*","destination":"http://localhost:8000/api/:path*","regex":"^/api(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))?(?:/)?$"},{"source":"/ws","destination":"http://localhost:8000/ws","regex":"^/ws(?:/)?$"}]}

View File

@ -0,0 +1,11 @@
{
"/_not-found/page": "app/_not-found/page.js",
"/api/chat/stream/route": "app/api/chat/stream/route.js",
"/page": "app/page.js",
"/login/page": "app/login/page.js",
"/chat/page": "app/chat/page.js",
"/sectors/page": "app/sectors/page.js",
"/recommendations/page": "app/recommendations/page.js",
"/stock/[code]/page": "app/stock/[code]/page.js",
"/users/page": "app/users/page.js"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
{
"status": 404,
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/_not-found/layout,_N_T_/_not-found/page,_N_T_/_not-found"
}
}

View File

@ -0,0 +1,14 @@
2:I[4707,[],""]
3:I[6423,[],""]
4:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
5:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
6:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
7:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
c:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
8:{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"}
9:{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"}
a:{"display":"inline-block"}
b:{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0}
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["/_not-found",{"children":["__PAGE__",{},[["$L1",[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null],null],null]},[null,["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children","/_not-found","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L4",null,{"children":["$","$L5",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L6",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L7",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$8","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$9","children":"404"}],["$","div",null,{"style":"$a","children":["$","h2",null,{"style":"$b","children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$Lc",null,{}]]}]}]}]}]],null],null],["$Ld",["$","meta",null,{"name":"robots","content":"noindex"}]]]]]
d:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

View File

@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=409,e.ids=[409],e.modules={2934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},4580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},5869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},2047:(e,t,n)=>{n.r(t),n.d(t,{GlobalError:()=>a.a,__next_app__:()=>c,originalPathname:()=>f,pages:()=>s,routeModule:()=>p,tree:()=>i}),n(7352),n(5866),n(5166);var o=n(3191),r=n(8716),u=n(7922),a=n.n(u),l=n(5231),d={};for(let e in l)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(d[e]=()=>l[e]);n.d(t,d);let i=["",{children:["/_not-found",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(n.t.bind(n,5866,23)),"next/dist/client/components/not-found-error"]}]},{}]},{layout:[()=>Promise.resolve().then(n.bind(n,5166)),"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(n.t.bind(n,5866,23)),"next/dist/client/components/not-found-error"]}],s=[],f="/_not-found/page",c={require:n,loadChunk:()=>Promise.resolve()},p=new o.AppPageRouteModule({definition:{kind:r.x.APP_PAGE,page:"/_not-found/page",pathname:"/_not-found",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:i}})},6399:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{isNotFoundError:function(){return r},notFound:function(){return o}});let n="NEXT_NOT_FOUND";function o(){let e=Error(n);throw e.digest=n,e}function r(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7352:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{PARALLEL_ROUTE_DEFAULT_PATH:function(){return r},default:function(){return u}});let o=n(6399),r="next/dist/client/components/parallel-route-default.js";function u(){(0,o.notFound)()}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}};var t=require("../../webpack-runtime.js");t.C(e);var n=e=>t(t.s=e),o=t.X(0,[948,982,171],()=>n(2047));module.exports=o})();

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../package.json","../../chunks/171.js","../../chunks/948.js","../../chunks/982.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=480,e.ids=[480],e.modules={399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},4372:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>l,patchFetch:()=>m,requestAsyncStorage:()=>c,routeModule:()=>u,serverHooks:()=>h,staticGenerationAsyncStorage:()=>d});var a={};r.r(a),r.d(a,{POST:()=>p});var o=r(9303),n=r(8716),s=r(670);let i=process.env.BACKEND_URL||"http://localhost:8000";async function p(e){let t=await e.json(),r=e.headers.get("Authorization"),a={"Content-Type":"application/json"};r&&(a.Authorization=r);let o=await fetch(`${i}/api/chat/stream`,{method:"POST",headers:a,body:JSON.stringify(t)});return o.ok?o.body?new Response(o.body,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}}):new Response(JSON.stringify({error:"No response body"}),{status:502,headers:{"Content-Type":"application/json"}}):new Response(JSON.stringify({error:`Backend error: ${o.status}`}),{status:o.status,headers:{"Content-Type":"application/json"}})}let u=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/chat/stream/route",pathname:"/api/chat/stream",filename:"route",bundlePath:"app/api/chat/stream/route"},resolvedPagePath:"/Users/aaron/source_code/astock-agent/frontend/src/app/api/chat/stream/route.ts",nextConfigOutput:"standalone",userland:a}),{requestAsyncStorage:c,staticGenerationAsyncStorage:d,serverHooks:h}=u,l="/api/chat/stream/route";function m(){return(0,s.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:d})}},9303:(e,t,r)=>{e.exports=r(517)}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),a=t.X(0,[948],()=>r(4372));module.exports=a})();

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/next/package.json","../../../../../../package.json","../../../../../package.json","../../../../chunks/948.js","../../../../webpack-runtime.js"]}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/chat/layout,_N_T_/chat/page,_N_T_/chat"
}
}

View File

@ -0,0 +1,12 @@
2:I[9107,[],"ClientPageRoot"]
3:I[628,["929","static/chunks/app/chat/page-2dd3304322bd4036.js"],"default",1]
4:I[4707,[],""]
5:I[6423,[],""]
6:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
7:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
8:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
9:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
a:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["chat",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["chat",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","chat","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L6",null,{"children":["$","$L7",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L8",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L9",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$La",null,{}]]}]}]}]}]],null],null],["$Lb",null]]]]
b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/171.js","../../chunks/948.js","../../chunks/982.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/page,_N_T_/"
}
}

View File

@ -0,0 +1,12 @@
2:I[9107,[],"ClientPageRoot"]
3:I[7449,["931","static/chunks/app/page-5a303311159f23ad.js"],"default",1]
4:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
5:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
6:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
7:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
8:I[4707,[],""]
9:I[6423,[],""]
a:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L4",null,{"children":["$","$L5",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L6",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L7",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L8",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L9",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$La",null,{}]]}]}]}]}]],null],null],["$Lb",null]]]]
b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/login/layout,_N_T_/login/page,_N_T_/login"
}
}

View File

@ -0,0 +1,12 @@
2:I[9107,[],"ClientPageRoot"]
3:I[8991,["626","static/chunks/app/login/page-778febf452923618.js"],"default",1]
4:I[4707,[],""]
5:I[6423,[],""]
6:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
7:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
8:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
9:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
a:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["login",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","login","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L6",null,{"children":["$","$L7",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L8",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L9",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$La",null,{}]]}]}]}]}]],null],null],["$Lb",null]]]]
b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

View File

@ -0,0 +1 @@
(()=>{var e={};e.id=626,e.ids=[626],e.modules={2934:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external.js")},4580:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external.js")},5869:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},8625:(e,t,r)=>{"use strict";r.r(t),r.d(t,{GlobalError:()=>n.a,__next_app__:()=>m,originalPathname:()=>u,pages:()=>c,routeModule:()=>p,tree:()=>d}),r(974),r(5166),r(5866);var s=r(3191),a=r(8716),o=r(7922),n=r.n(o),i=r(5231),l={};for(let e in i)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>i[e]);r.d(t,l);let d=["",{children:["login",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(r.bind(r,974)),"/Users/aaron/source_code/astock-agent/frontend/src/app/login/page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(r.bind(r,5166)),"/Users/aaron/source_code/astock-agent/frontend/src/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(r.t.bind(r,5866,23)),"next/dist/client/components/not-found-error"]}],c=["/Users/aaron/source_code/astock-agent/frontend/src/app/login/page.tsx"],u="/login/page",m={require:r,loadChunk:()=>Promise.resolve()},p=new s.AppPageRouteModule({definition:{kind:a.x.APP_PAGE,page:"/login/page",pathname:"/login",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:d}})},4558:(e,t,r)=>{Promise.resolve().then(r.bind(r,4146))},4146:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var s=r(326),a=r(7577),o=r(5047),n=r(9260);function i(){let[e,t]=(0,a.useState)(""),[r,i]=(0,a.useState)(""),[l,d]=(0,a.useState)(""),[c,u]=(0,a.useState)(!1),{login:m}=(0,n.a)(),p=(0,o.useRouter)();async function x(t){if(t.preventDefault(),d(""),!e.trim()||!r.trim()){d("请输入用户名和密码");return}u(!0);try{await m(e,r),p.push("/")}catch(e){d(e instanceof Error?e.message:"登录失败,请重试")}finally{u(!1)}}return s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-bg-primary",children:(0,s.jsxs)("div",{className:"max-w-sm w-full mx-4 p-8 rounded-2xl bg-white/[0.02] border border-white/[0.06] backdrop-blur-sm",children:[(0,s.jsxs)("div",{className:"flex flex-col items-center mb-8",children:[s.jsx("div",{className:"w-10 h-10 rounded-xl bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-base font-bold text-white shadow-glow-sm mb-4",children:"D"}),s.jsx("h1",{className:"text-lg font-semibold tracking-tight text-text-primary",children:"Dragon AI Agent"}),s.jsx("p",{className:"text-sm text-text-muted mt-1",children:"登录以继续"})]}),(0,s.jsxs)("form",{onSubmit:x,className:"space-y-4",children:[s.jsx("input",{type:"text",placeholder:"用户名",value:e,onChange:e=>t(e.target.value),className:"w-full bg-white/[0.03] border border-white/[0.06] rounded-xl px-4 py-3 text-sm text-text-primary focus:outline-none focus:ring-1 focus:ring-amber-500/30 placeholder-text-muted/40",autoComplete:"username"}),s.jsx("input",{type:"password",placeholder:"密码",value:r,onChange:e=>i(e.target.value),className:"w-full bg-white/[0.03] border border-white/[0.06] rounded-xl px-4 py-3 text-sm text-text-primary focus:outline-none focus:ring-1 focus:ring-amber-500/30 placeholder-text-muted/40",autoComplete:"current-password"}),s.jsx("button",{type:"submit",disabled:c,className:"w-full bg-gradient-to-r from-amber-500/20 to-amber-600/15 text-amber-400 rounded-xl py-3 text-sm font-medium hover:from-amber-500/30 hover:to-amber-600/25 transition-all duration-200 border border-amber-500/10 disabled:opacity-50 disabled:cursor-not-allowed",children:c?"登录中...":"登录"})]}),l&&s.jsx("p",{className:"mt-4 text-center text-xs text-amber-400/80",children:l})]})})}},974:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});let s=(0,r(8570).createProxy)(String.raw`/Users/aaron/source_code/astock-agent/frontend/src/app/login/page.tsx#default`)}};var t=require("../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[948,982,171],()=>r(8625));module.exports=s})();

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/171.js","../../chunks/948.js","../../chunks/982.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../node_modules/next/dist/client/components/async-local-storage.js","../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../package.json","../../package.json","../chunks/171.js","../chunks/948.js","../chunks/982.js","../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/recommendations/layout,_N_T_/recommendations/page,_N_T_/recommendations"
}
}

View File

@ -0,0 +1,12 @@
2:I[9107,[],"ClientPageRoot"]
3:I[7773,["70","static/chunks/app/recommendations/page-ef6715bbb27168f0.js"],"default",1]
4:I[4707,[],""]
5:I[6423,[],""]
6:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
7:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
8:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
9:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
a:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["recommendations",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["recommendations",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","recommendations","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L6",null,{"children":["$","$L7",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L8",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L9",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$La",null,{}]]}]}]}]}]],null],null],["$Lb",null]]]]
b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/171.js","../../chunks/948.js","../../chunks/982.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/sectors/layout,_N_T_/sectors/page,_N_T_/sectors"
}
}

View File

@ -0,0 +1,12 @@
2:I[9107,[],"ClientPageRoot"]
3:I[9314,["542","static/chunks/app/sectors/page-2f0e16a2b83354cf.js"],"default",1]
4:I[4707,[],""]
5:I[6423,[],""]
6:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
7:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
8:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
9:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
a:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["sectors",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["sectors",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","sectors","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L6",null,{"children":["$","$L7",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L8",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L9",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$La",null,{}]]}]}]}]}]],null],null],["$Lb",null]]]]
b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/171.js","../../chunks/948.js","../../chunks/982.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../node_modules/next/package.json","../../../../../package.json","../../../../package.json","../../../chunks/171.js","../../../chunks/948.js","../../../chunks/982.js","../../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/users/layout,_N_T_/users/page,_N_T_/users"
}
}

View File

@ -0,0 +1,12 @@
2:I[9107,[],"ClientPageRoot"]
3:I[2688,["240","static/chunks/app/users/page-e66e56f48050576b.js"],"default",1]
4:I[4707,[],""]
5:I[6423,[],""]
6:I[8145,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthProvider"]
7:I[7182,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"AuthGuard"]
8:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"SidebarNav"]
9:I[5315,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"UserMenu"]
a:I[3331,["448","static/chunks/448-92a7b932cf4502ac.js","185","static/chunks/app/layout-97bdd231e78ddf3f.js"],"MobileBottomNav"]
0:["zyMEF2O04rWB2PcTlD48N",[[["",{"children":["users",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["users",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","users","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/fa5094a6607a8c23.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"zh-CN","children":["$","body",null,{"className":"min-h-screen bg-bg-primary text-text-primary font-display","children":["$","$L6",null,{"children":["$","$L7",null,{"children":[["$","div",null,{"className":"flex min-h-screen","children":[["$","aside",null,{"className":"hidden md:flex flex-col w-60 glass-sidebar fixed inset-y-0 left-0 z-40","children":[["$","div",null,{"className":"px-6 pt-7 pb-5","children":["$","div",null,{"className":"flex items-center gap-3","children":[["$","div",null,{"className":"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-amber-600 flex items-center justify-center text-sm font-bold text-white shadow-glow-sm","children":"D"}],["$","div",null,{"children":[["$","h1",null,{"className":"text-sm font-semibold tracking-tight","children":"Dragon AI Agent"}],["$","p",null,{"className":"text-xs text-text-muted mt-0.5 font-light tracking-wide","children":"资金驱动 · 四层漏斗模型"}]]}]]}]}],["$","div",null,{"className":"mx-5 h-px bg-gradient-to-r from-transparent via-white/[0.06] to-transparent"}],["$","$L8",null,{}],["$","div",null,{"className":"px-6 py-5 border-t border-white/[0.04]","children":["$","$L9",null,{}]}]]}],["$","main",null,{"className":"flex-1 md:ml-60 pb-16 md:pb-0 min-h-screen","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}],["$","$La",null,{}]]}]}]}]}]],null],null],["$Lb",null]]]]
b:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Dragon AI Agent"}],["$","meta","3",{"name":"description","content":"基于资金驱动的四层漏斗模型盘中实时分析推荐A股"}]]
1:null

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/171.js","../../chunks/948.js","../../chunks/982.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1 @@
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-76aa9cbbdedb6a49.js","static/chunks/fd9d1056-f8a2d551cbb94c85.js","static/chunks/117-d0aa9486d6cf1a7a.js","static/chunks/main-app-7d7e5d1021afd90c.js"],pages:{"/_app":["static/chunks/webpack-76aa9cbbdedb6a49.js","static/chunks/framework-f66176bb897dc684.js","static/chunks/main-9c5f6b283127d940.js","static/chunks/pages/_app-72b849fbd24ac258.js"],"/_error":["static/chunks/webpack-76aa9cbbdedb6a49.js","static/chunks/framework-f66176bb897dc684.js","static/chunks/main-9c5f6b283127d940.js","static/chunks/pages/_error-7ba65e1336b92748.js"]},ampFirstPages:[]},self.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];

View File

@ -0,0 +1,6 @@
{
"version": 3,
"middleware": {},
"functions": {},
"sortedMiddleware": []
}

View File

@ -0,0 +1 @@
self.__REACT_LOADABLE_MANIFEST='{"components/capital-flow.tsx -> echarts":{"id":9614,"files":["static/chunks/614.2cf8795c6fba79f8.js"]},"components/kline-chart.tsx -> echarts":{"id":9614,"files":["static/chunks/614.2cf8795c6fba79f8.js"]},"components/score-radar.tsx -> echarts":{"id":9614,"files":["static/chunks/614.2cf8795c6fba79f8.js"]}}';

View File

@ -0,0 +1 @@
self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}';

View File

@ -0,0 +1 @@
{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}

View File

@ -0,0 +1 @@
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js","/404":"pages/404.html"}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-76aa9cbbdedb6a49.js" defer=""></script><script src="/_next/static/chunks/framework-f66176bb897dc684.js" defer=""></script><script src="/_next/static/chunks/main-9c5f6b283127d940.js" defer=""></script><script src="/_next/static/chunks/pages/_app-72b849fbd24ac258.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ba65e1336b92748.js" defer=""></script><script src="/_next/static/zyMEF2O04rWB2PcTlD48N/_buildManifest.js" defer=""></script><script src="/_next/static/zyMEF2O04rWB2PcTlD48N/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"zyMEF2O04rWB2PcTlD48N","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>

View File

@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=888,e.ids=[888],e.modules={8141:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let n=r(167),o=r(997),i=n._(r(6689)),u=r(5782);async function s(e){let{Component:t,ctx:r}=e;return{pageProps:await (0,u.loadGetInitialProps)(t,r)}}class a extends i.default.Component{render(){let{Component:e,pageProps:t}=this.props;return(0,o.jsx)(e,{...t})}}a.origGetInitialProps=s,a.getInitialProps=s,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5782:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{DecodeError:function(){return g},MiddlewareNotFoundError:function(){return E},MissingStaticPage:function(){return y},NormalizeError:function(){return m},PageNotFoundError:function(){return P},SP:function(){return d},ST:function(){return p},WEB_VITALS:function(){return r},execOnce:function(){return n},getDisplayName:function(){return a},getLocationOrigin:function(){return u},getURL:function(){return s},isAbsoluteUrl:function(){return i},isResSent:function(){return c},loadGetInitialProps:function(){return f},normalizeRepeatedSlashes:function(){return l},stringifyError:function(){return x}});let r=["CLS","FCP","FID","INP","LCP","TTFB"];function n(e){let t,r=!1;return function(){for(var n=arguments.length,o=Array(n),i=0;i<n;i++)o[i]=arguments[i];return r||(r=!0,t=e(...o)),t}}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>o.test(e);function u(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function s(){let{href:e}=window.location,t=u();return e.substring(t.length)}function a(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function c(e){return e.finished||e.headersSent}function l(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function f(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await f(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&c(r))return n;if(!n)throw Error('"'+a(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.');return n}let d="undefined"!=typeof performance,p=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class m extends Error{}class P extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class y extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class E extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function x(e){return JSON.stringify({message:e.message,stack:e.stack})}},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},167:(e,t)=>{t._=t._interop_require_default=function(e){return e&&e.__esModule?e:{default:e}}}};var t=require("../webpack-runtime.js");t.C(e);var r=t(t.s=8141);module.exports=r})();

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/next/dist/pages/_app.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../package.json","../../package.json","../webpack-runtime.js"]}

View File

@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=660,e.ids=[660],e.modules={2785:e=>{e.exports=require("next/dist/compiled/next-server/pages.runtime.prod.js")},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},5315:e=>{e.exports=require("path")}};var r=require("../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[682],()=>s(1682));module.exports=t})();

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/pages/_document.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/682.js","../webpack-runtime.js"]}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../package.json","../chunks/682.js","../webpack-runtime.js"]}

View File

@ -0,0 +1 @@
self.__RSC_SERVER_MANIFEST="{\"node\":{},\"edge\":{},\"encryptionKey\":\"process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY\"}"

View File

@ -0,0 +1 @@
{"node":{},"edge":{},"encryptionKey":"f3swqWaUk34ppPaPfJEtsu7hIqrZ76kvi8fuvlEN4Xc="}

View File

@ -0,0 +1 @@
(()=>{"use strict";var e={},r={};function t(o){var n=r[o];if(void 0!==n)return n.exports;var a=r[o]={exports:{}},u=!0;try{e[o](a,a.exports,t),u=!1}finally{u&&delete r[o]}return a.exports}t.m=e,t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},(()=>{var e,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;t.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);t.r(a);var u={};e=e||[null,r({}),r([]),r(r)];for(var f=2&n&&o;"object"==typeof f&&!~e.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach(e=>u[e]=()=>o[e]);return u.default=()=>o,t.d(a,u),a}})(),t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce((r,o)=>(t.f[o](e,r),r),[])),t.u=e=>""+e+".js",t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.X=(e,r,o)=>{var n=r;o||(r=e,o=()=>t(t.s=n)),r.map(t.e,t);var a=o();return void 0===a?e:a},(()=>{var e={658:1},r=r=>{var o=r.modules,n=r.ids,a=r.runtime;for(var u in o)t.o(o,u)&&(t.m[u]=o[u]);a&&a(t);for(var f=0;f<n.length;f++)e[n[f]]=1};t.f.require=(o,n)=>{e[o]||(658!=o?r(require("./chunks/"+t.u(o))):e[o]=1)},module.exports=t,t.C=r})()})();

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,36 @@
{
"name": "@next/env",
"version": "14.2.35",
"keywords": [
"react",
"next",
"next.js",
"dotenv"
],
"description": "Next.js dotenv file loading",
"repository": {
"type": "git",
"url": "https://github.com/vercel/next.js",
"directory": "packages/next-env"
},
"author": "Next.js Team <support@vercel.com>",
"license": "MIT",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"dev": "ncc build ./index.ts -w -o dist/",
"prerelease": "node ../../scripts/rm.mjs dist",
"types": "tsc index.ts --declaration --emitDeclarationOnly --declarationDir dist --esModuleInterop",
"release": "ncc build ./index.ts -o ./dist/ --minify --no-cache --no-source-map-register",
"build": "pnpm release && pnpm types",
"prepublishOnly": "cd ../../ && turbo run build"
},
"devDependencies": {
"@vercel/ncc": "0.34.0",
"dotenv": "16.3.1",
"dotenv-expand": "10.0.0"
}
}

View File

@ -0,0 +1,4 @@
{
"main": "../../cjs/_interop_require_default.cjs",
"module": "../../esm/_interop_require_default.js"
}

View File

@ -0,0 +1,4 @@
{
"main": "../../cjs/_interop_require_wildcard.cjs",
"module": "../../esm/_interop_require_wildcard.js"
}

View File

@ -0,0 +1,4 @@
{
"main": "../../cjs/_tagged_template_literal_loose.cjs",
"module": "../../esm/_tagged_template_literal_loose.js"
}

View File

@ -0,0 +1,6 @@
"use strict";
exports._ = exports._interop_require_default = _interop_require_default;
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}

View File

@ -0,0 +1,38 @@
"use strict";
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
exports._ = exports._interop_require_wildcard = _interop_require_wildcard;
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) return obj;
if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj };
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) return cache.get(obj);
var newObj = { __proto__: null };
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
else newObj[key] = obj[key];
}
}
newObj.default = obj;
if (cache) cache.set(obj, newObj);
return newObj;
}

View File

@ -0,0 +1,10 @@
"use strict";
exports._ = exports._tagged_template_literal_loose = _tagged_template_literal_loose;
function _tagged_template_literal_loose(strings, raw) {
if (!raw) raw = strings.slice(0);
strings.raw = raw;
return strings;
}

View File

@ -0,0 +1,452 @@
{
"name": "@swc/helpers",
"packageManager": "yarn@4.0.2",
"version": "0.5.5",
"description": "External helpers for the swc project.",
"module": "esm/index.js",
"main": "cjs/index.cjs",
"sideEffects": false,
"scripts": {
"build": "zx ./scripts/build.js",
"prepack": "zx ./scripts/build.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/swc-project/swc.git"
},
"publishConfig": {
"registry": "https://registry.npmjs.org/",
"access": "public"
},
"keywords": [
"swc",
"helpers"
],
"author": "강동윤 <kdy1997.dev@gmail.com>",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/swc-project/swc/issues"
},
"homepage": "https://swc.rs",
"type": "module",
"devDependencies": {
"@ast-grep/napi": "^0.3.1",
"dprint": "^0.35.3",
"magic-string": "^0.30.0",
"zx": "^7.2.1"
},
"dependencies": {
"@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
},
"exports": {
"./package.json": "./package.json",
"./esm/*": "./esm/*",
"./cjs/*": "./cjs/*",
"./src/*": "./src/*",
".": {
"import": "./esm/index.js",
"default": "./cjs/index.cjs"
},
"./_": {
"import": "./esm/index.js",
"default": "./cjs/index.cjs"
},
"./_/_apply_decorated_descriptor": {
"import": "./esm/_apply_decorated_descriptor.js",
"default": "./cjs/_apply_decorated_descriptor.cjs"
},
"./_/_apply_decs_2203_r": {
"import": "./esm/_apply_decs_2203_r.js",
"default": "./cjs/_apply_decs_2203_r.cjs"
},
"./_/_array_like_to_array": {
"import": "./esm/_array_like_to_array.js",
"default": "./cjs/_array_like_to_array.cjs"
},
"./_/_array_with_holes": {
"import": "./esm/_array_with_holes.js",
"default": "./cjs/_array_with_holes.cjs"
},
"./_/_array_without_holes": {
"import": "./esm/_array_without_holes.js",
"default": "./cjs/_array_without_holes.cjs"
},
"./_/_assert_this_initialized": {
"import": "./esm/_assert_this_initialized.js",
"default": "./cjs/_assert_this_initialized.cjs"
},
"./_/_async_generator": {
"import": "./esm/_async_generator.js",
"default": "./cjs/_async_generator.cjs"
},
"./_/_async_generator_delegate": {
"import": "./esm/_async_generator_delegate.js",
"default": "./cjs/_async_generator_delegate.cjs"
},
"./_/_async_iterator": {
"import": "./esm/_async_iterator.js",
"default": "./cjs/_async_iterator.cjs"
},
"./_/_async_to_generator": {
"import": "./esm/_async_to_generator.js",
"default": "./cjs/_async_to_generator.cjs"
},
"./_/_await_async_generator": {
"import": "./esm/_await_async_generator.js",
"default": "./cjs/_await_async_generator.cjs"
},
"./_/_await_value": {
"import": "./esm/_await_value.js",
"default": "./cjs/_await_value.cjs"
},
"./_/_check_private_redeclaration": {
"import": "./esm/_check_private_redeclaration.js",
"default": "./cjs/_check_private_redeclaration.cjs"
},
"./_/_class_apply_descriptor_destructure": {
"import": "./esm/_class_apply_descriptor_destructure.js",
"default": "./cjs/_class_apply_descriptor_destructure.cjs"
},
"./_/_class_apply_descriptor_get": {
"import": "./esm/_class_apply_descriptor_get.js",
"default": "./cjs/_class_apply_descriptor_get.cjs"
},
"./_/_class_apply_descriptor_set": {
"import": "./esm/_class_apply_descriptor_set.js",
"default": "./cjs/_class_apply_descriptor_set.cjs"
},
"./_/_class_apply_descriptor_update": {
"import": "./esm/_class_apply_descriptor_update.js",
"default": "./cjs/_class_apply_descriptor_update.cjs"
},
"./_/_class_call_check": {
"import": "./esm/_class_call_check.js",
"default": "./cjs/_class_call_check.cjs"
},
"./_/_class_check_private_static_access": {
"import": "./esm/_class_check_private_static_access.js",
"default": "./cjs/_class_check_private_static_access.cjs"
},
"./_/_class_check_private_static_field_descriptor": {
"import": "./esm/_class_check_private_static_field_descriptor.js",
"default": "./cjs/_class_check_private_static_field_descriptor.cjs"
},
"./_/_class_extract_field_descriptor": {
"import": "./esm/_class_extract_field_descriptor.js",
"default": "./cjs/_class_extract_field_descriptor.cjs"
},
"./_/_class_name_tdz_error": {
"import": "./esm/_class_name_tdz_error.js",
"default": "./cjs/_class_name_tdz_error.cjs"
},
"./_/_class_private_field_destructure": {
"import": "./esm/_class_private_field_destructure.js",
"default": "./cjs/_class_private_field_destructure.cjs"
},
"./_/_class_private_field_get": {
"import": "./esm/_class_private_field_get.js",
"default": "./cjs/_class_private_field_get.cjs"
},
"./_/_class_private_field_init": {
"import": "./esm/_class_private_field_init.js",
"default": "./cjs/_class_private_field_init.cjs"
},
"./_/_class_private_field_loose_base": {
"import": "./esm/_class_private_field_loose_base.js",
"default": "./cjs/_class_private_field_loose_base.cjs"
},
"./_/_class_private_field_loose_key": {
"import": "./esm/_class_private_field_loose_key.js",
"default": "./cjs/_class_private_field_loose_key.cjs"
},
"./_/_class_private_field_set": {
"import": "./esm/_class_private_field_set.js",
"default": "./cjs/_class_private_field_set.cjs"
},
"./_/_class_private_field_update": {
"import": "./esm/_class_private_field_update.js",
"default": "./cjs/_class_private_field_update.cjs"
},
"./_/_class_private_method_get": {
"import": "./esm/_class_private_method_get.js",
"default": "./cjs/_class_private_method_get.cjs"
},
"./_/_class_private_method_init": {
"import": "./esm/_class_private_method_init.js",
"default": "./cjs/_class_private_method_init.cjs"
},
"./_/_class_private_method_set": {
"import": "./esm/_class_private_method_set.js",
"default": "./cjs/_class_private_method_set.cjs"
},
"./_/_class_static_private_field_destructure": {
"import": "./esm/_class_static_private_field_destructure.js",
"default": "./cjs/_class_static_private_field_destructure.cjs"
},
"./_/_class_static_private_field_spec_get": {
"import": "./esm/_class_static_private_field_spec_get.js",
"default": "./cjs/_class_static_private_field_spec_get.cjs"
},
"./_/_class_static_private_field_spec_set": {
"import": "./esm/_class_static_private_field_spec_set.js",
"default": "./cjs/_class_static_private_field_spec_set.cjs"
},
"./_/_class_static_private_field_update": {
"import": "./esm/_class_static_private_field_update.js",
"default": "./cjs/_class_static_private_field_update.cjs"
},
"./_/_class_static_private_method_get": {
"import": "./esm/_class_static_private_method_get.js",
"default": "./cjs/_class_static_private_method_get.cjs"
},
"./_/_construct": {
"import": "./esm/_construct.js",
"default": "./cjs/_construct.cjs"
},
"./_/_create_class": {
"import": "./esm/_create_class.js",
"default": "./cjs/_create_class.cjs"
},
"./_/_create_for_of_iterator_helper_loose": {
"import": "./esm/_create_for_of_iterator_helper_loose.js",
"default": "./cjs/_create_for_of_iterator_helper_loose.cjs"
},
"./_/_create_super": {
"import": "./esm/_create_super.js",
"default": "./cjs/_create_super.cjs"
},
"./_/_decorate": {
"import": "./esm/_decorate.js",
"default": "./cjs/_decorate.cjs"
},
"./_/_defaults": {
"import": "./esm/_defaults.js",
"default": "./cjs/_defaults.cjs"
},
"./_/_define_enumerable_properties": {
"import": "./esm/_define_enumerable_properties.js",
"default": "./cjs/_define_enumerable_properties.cjs"
},
"./_/_define_property": {
"import": "./esm/_define_property.js",
"default": "./cjs/_define_property.cjs"
},
"./_/_dispose": {
"import": "./esm/_dispose.js",
"default": "./cjs/_dispose.cjs"
},
"./_/_export_star": {
"import": "./esm/_export_star.js",
"default": "./cjs/_export_star.cjs"
},
"./_/_extends": {
"import": "./esm/_extends.js",
"default": "./cjs/_extends.cjs"
},
"./_/_get": {
"import": "./esm/_get.js",
"default": "./cjs/_get.cjs"
},
"./_/_get_prototype_of": {
"import": "./esm/_get_prototype_of.js",
"default": "./cjs/_get_prototype_of.cjs"
},
"./_/_inherits": {
"import": "./esm/_inherits.js",
"default": "./cjs/_inherits.cjs"
},
"./_/_inherits_loose": {
"import": "./esm/_inherits_loose.js",
"default": "./cjs/_inherits_loose.cjs"
},
"./_/_initializer_define_property": {
"import": "./esm/_initializer_define_property.js",
"default": "./cjs/_initializer_define_property.cjs"
},
"./_/_initializer_warning_helper": {
"import": "./esm/_initializer_warning_helper.js",
"default": "./cjs/_initializer_warning_helper.cjs"
},
"./_/_instanceof": {
"import": "./esm/_instanceof.js",
"default": "./cjs/_instanceof.cjs"
},
"./_/_interop_require_default": {
"import": "./esm/_interop_require_default.js",
"default": "./cjs/_interop_require_default.cjs"
},
"./_/_interop_require_wildcard": {
"import": "./esm/_interop_require_wildcard.js",
"default": "./cjs/_interop_require_wildcard.cjs"
},
"./_/_is_native_function": {
"import": "./esm/_is_native_function.js",
"default": "./cjs/_is_native_function.cjs"
},
"./_/_is_native_reflect_construct": {
"import": "./esm/_is_native_reflect_construct.js",
"default": "./cjs/_is_native_reflect_construct.cjs"
},
"./_/_iterable_to_array": {
"import": "./esm/_iterable_to_array.js",
"default": "./cjs/_iterable_to_array.cjs"
},
"./_/_iterable_to_array_limit": {
"import": "./esm/_iterable_to_array_limit.js",
"default": "./cjs/_iterable_to_array_limit.cjs"
},
"./_/_iterable_to_array_limit_loose": {
"import": "./esm/_iterable_to_array_limit_loose.js",
"default": "./cjs/_iterable_to_array_limit_loose.cjs"
},
"./_/_jsx": {
"import": "./esm/_jsx.js",
"default": "./cjs/_jsx.cjs"
},
"./_/_new_arrow_check": {
"import": "./esm/_new_arrow_check.js",
"default": "./cjs/_new_arrow_check.cjs"
},
"./_/_non_iterable_rest": {
"import": "./esm/_non_iterable_rest.js",
"default": "./cjs/_non_iterable_rest.cjs"
},
"./_/_non_iterable_spread": {
"import": "./esm/_non_iterable_spread.js",
"default": "./cjs/_non_iterable_spread.cjs"
},
"./_/_object_destructuring_empty": {
"import": "./esm/_object_destructuring_empty.js",
"default": "./cjs/_object_destructuring_empty.cjs"
},
"./_/_object_spread": {
"import": "./esm/_object_spread.js",
"default": "./cjs/_object_spread.cjs"
},
"./_/_object_spread_props": {
"import": "./esm/_object_spread_props.js",
"default": "./cjs/_object_spread_props.cjs"
},
"./_/_object_without_properties": {
"import": "./esm/_object_without_properties.js",
"default": "./cjs/_object_without_properties.cjs"
},
"./_/_object_without_properties_loose": {
"import": "./esm/_object_without_properties_loose.js",
"default": "./cjs/_object_without_properties_loose.cjs"
},
"./_/_possible_constructor_return": {
"import": "./esm/_possible_constructor_return.js",
"default": "./cjs/_possible_constructor_return.cjs"
},
"./_/_read_only_error": {
"import": "./esm/_read_only_error.js",
"default": "./cjs/_read_only_error.cjs"
},
"./_/_set": {
"import": "./esm/_set.js",
"default": "./cjs/_set.cjs"
},
"./_/_set_prototype_of": {
"import": "./esm/_set_prototype_of.js",
"default": "./cjs/_set_prototype_of.cjs"
},
"./_/_skip_first_generator_next": {
"import": "./esm/_skip_first_generator_next.js",
"default": "./cjs/_skip_first_generator_next.cjs"
},
"./_/_sliced_to_array": {
"import": "./esm/_sliced_to_array.js",
"default": "./cjs/_sliced_to_array.cjs"
},
"./_/_sliced_to_array_loose": {
"import": "./esm/_sliced_to_array_loose.js",
"default": "./cjs/_sliced_to_array_loose.cjs"
},
"./_/_super_prop_base": {
"import": "./esm/_super_prop_base.js",
"default": "./cjs/_super_prop_base.cjs"
},
"./_/_tagged_template_literal": {
"import": "./esm/_tagged_template_literal.js",
"default": "./cjs/_tagged_template_literal.cjs"
},
"./_/_tagged_template_literal_loose": {
"import": "./esm/_tagged_template_literal_loose.js",
"default": "./cjs/_tagged_template_literal_loose.cjs"
},
"./_/_throw": {
"import": "./esm/_throw.js",
"default": "./cjs/_throw.cjs"
},
"./_/_to_array": {
"import": "./esm/_to_array.js",
"default": "./cjs/_to_array.cjs"
},
"./_/_to_consumable_array": {
"import": "./esm/_to_consumable_array.js",
"default": "./cjs/_to_consumable_array.cjs"
},
"./_/_to_primitive": {
"import": "./esm/_to_primitive.js",
"default": "./cjs/_to_primitive.cjs"
},
"./_/_to_property_key": {
"import": "./esm/_to_property_key.js",
"default": "./cjs/_to_property_key.cjs"
},
"./_/_ts_decorate": {
"import": "./esm/_ts_decorate.js",
"default": "./cjs/_ts_decorate.cjs"
},
"./_/_ts_generator": {
"import": "./esm/_ts_generator.js",
"default": "./cjs/_ts_generator.cjs"
},
"./_/_ts_metadata": {
"import": "./esm/_ts_metadata.js",
"default": "./cjs/_ts_metadata.cjs"
},
"./_/_ts_param": {
"import": "./esm/_ts_param.js",
"default": "./cjs/_ts_param.cjs"
},
"./_/_ts_values": {
"import": "./esm/_ts_values.js",
"default": "./cjs/_ts_values.cjs"
},
"./_/_type_of": {
"import": "./esm/_type_of.js",
"default": "./cjs/_type_of.cjs"
},
"./_/_unsupported_iterable_to_array": {
"import": "./esm/_unsupported_iterable_to_array.js",
"default": "./cjs/_unsupported_iterable_to_array.cjs"
},
"./_/_update": {
"import": "./esm/_update.js",
"default": "./cjs/_update.cjs"
},
"./_/_using": {
"import": "./esm/_using.js",
"default": "./cjs/_using.cjs"
},
"./_/_wrap_async_generator": {
"import": "./esm/_wrap_async_generator.js",
"default": "./cjs/_wrap_async_generator.cjs"
},
"./_/_wrap_native_super": {
"import": "./esm/_wrap_native_super.js",
"default": "./cjs/_wrap_native_super.cjs"
},
"./_/_write_only_error": {
"import": "./esm/_write_only_error.js",
"default": "./cjs/_write_only_error.cjs"
},
"./_/index": {
"import": "./esm/index.js",
"default": "./cjs/index.cjs"
}
}
}

View File

@ -0,0 +1,57 @@
'use strict';
const { parseContentType } = require('./utils.js');
function getInstance(cfg) {
const headers = cfg.headers;
const conType = parseContentType(headers['content-type']);
if (!conType)
throw new Error('Malformed content type');
for (const type of TYPES) {
const matched = type.detect(conType);
if (!matched)
continue;
const instanceCfg = {
limits: cfg.limits,
headers,
conType,
highWaterMark: undefined,
fileHwm: undefined,
defCharset: undefined,
defParamCharset: undefined,
preservePath: false,
};
if (cfg.highWaterMark)
instanceCfg.highWaterMark = cfg.highWaterMark;
if (cfg.fileHwm)
instanceCfg.fileHwm = cfg.fileHwm;
instanceCfg.defCharset = cfg.defCharset;
instanceCfg.defParamCharset = cfg.defParamCharset;
instanceCfg.preservePath = cfg.preservePath;
return new type(instanceCfg);
}
throw new Error(`Unsupported content type: ${headers['content-type']}`);
}
// Note: types are explicitly listed here for easier bundling
// See: https://github.com/mscdex/busboy/issues/121
const TYPES = [
require('./types/multipart'),
require('./types/urlencoded'),
].filter(function(typemod) { return typeof typemod.detect === 'function'; });
module.exports = (cfg) => {
if (typeof cfg !== 'object' || cfg === null)
cfg = {};
if (typeof cfg.headers !== 'object'
|| cfg.headers === null
|| typeof cfg.headers['content-type'] !== 'string') {
throw new Error('Missing Content-Type');
}
return getInstance(cfg);
};

View File

@ -0,0 +1,653 @@
'use strict';
const { Readable, Writable } = require('stream');
const StreamSearch = require('streamsearch');
const {
basename,
convertToUTF8,
getDecoder,
parseContentType,
parseDisposition,
} = require('../utils.js');
const BUF_CRLF = Buffer.from('\r\n');
const BUF_CR = Buffer.from('\r');
const BUF_DASH = Buffer.from('-');
function noop() {}
const MAX_HEADER_PAIRS = 2000; // From node
const MAX_HEADER_SIZE = 16 * 1024; // From node (its default value)
const HPARSER_NAME = 0;
const HPARSER_PRE_OWS = 1;
const HPARSER_VALUE = 2;
class HeaderParser {
constructor(cb) {
this.header = Object.create(null);
this.pairCount = 0;
this.byteCount = 0;
this.state = HPARSER_NAME;
this.name = '';
this.value = '';
this.crlf = 0;
this.cb = cb;
}
reset() {
this.header = Object.create(null);
this.pairCount = 0;
this.byteCount = 0;
this.state = HPARSER_NAME;
this.name = '';
this.value = '';
this.crlf = 0;
}
push(chunk, pos, end) {
let start = pos;
while (pos < end) {
switch (this.state) {
case HPARSER_NAME: {
let done = false;
for (; pos < end; ++pos) {
if (this.byteCount === MAX_HEADER_SIZE)
return -1;
++this.byteCount;
const code = chunk[pos];
if (TOKEN[code] !== 1) {
if (code !== 58/* ':' */)
return -1;
this.name += chunk.latin1Slice(start, pos);
if (this.name.length === 0)
return -1;
++pos;
done = true;
this.state = HPARSER_PRE_OWS;
break;
}
}
if (!done) {
this.name += chunk.latin1Slice(start, pos);
break;
}
// FALLTHROUGH
}
case HPARSER_PRE_OWS: {
// Skip optional whitespace
let done = false;
for (; pos < end; ++pos) {
if (this.byteCount === MAX_HEADER_SIZE)
return -1;
++this.byteCount;
const code = chunk[pos];
if (code !== 32/* ' ' */ && code !== 9/* '\t' */) {
start = pos;
done = true;
this.state = HPARSER_VALUE;
break;
}
}
if (!done)
break;
// FALLTHROUGH
}
case HPARSER_VALUE:
switch (this.crlf) {
case 0: // Nothing yet
for (; pos < end; ++pos) {
if (this.byteCount === MAX_HEADER_SIZE)
return -1;
++this.byteCount;
const code = chunk[pos];
if (FIELD_VCHAR[code] !== 1) {
if (code !== 13/* '\r' */)
return -1;
++this.crlf;
break;
}
}
this.value += chunk.latin1Slice(start, pos++);
break;
case 1: // Received CR
if (this.byteCount === MAX_HEADER_SIZE)
return -1;
++this.byteCount;
if (chunk[pos++] !== 10/* '\n' */)
return -1;
++this.crlf;
break;
case 2: { // Received CR LF
if (this.byteCount === MAX_HEADER_SIZE)
return -1;
++this.byteCount;
const code = chunk[pos];
if (code === 32/* ' ' */ || code === 9/* '\t' */) {
// Folded value
start = pos;
this.crlf = 0;
} else {
if (++this.pairCount < MAX_HEADER_PAIRS) {
this.name = this.name.toLowerCase();
if (this.header[this.name] === undefined)
this.header[this.name] = [this.value];
else
this.header[this.name].push(this.value);
}
if (code === 13/* '\r' */) {
++this.crlf;
++pos;
} else {
// Assume start of next header field name
start = pos;
this.crlf = 0;
this.state = HPARSER_NAME;
this.name = '';
this.value = '';
}
}
break;
}
case 3: { // Received CR LF CR
if (this.byteCount === MAX_HEADER_SIZE)
return -1;
++this.byteCount;
if (chunk[pos++] !== 10/* '\n' */)
return -1;
// End of header
const header = this.header;
this.reset();
this.cb(header);
return pos;
}
}
break;
}
}
return pos;
}
}
class FileStream extends Readable {
constructor(opts, owner) {
super(opts);
this.truncated = false;
this._readcb = null;
this.once('end', () => {
// We need to make sure that we call any outstanding _writecb() that is
// associated with this file so that processing of the rest of the form
// can continue. This may not happen if the file stream ends right after
// backpressure kicks in, so we force it here.
this._read();
if (--owner._fileEndsLeft === 0 && owner._finalcb) {
const cb = owner._finalcb;
owner._finalcb = null;
// Make sure other 'end' event handlers get a chance to be executed
// before busboy's 'finish' event is emitted
process.nextTick(cb);
}
});
}
_read(n) {
const cb = this._readcb;
if (cb) {
this._readcb = null;
cb();
}
}
}
const ignoreData = {
push: (chunk, pos) => {},
destroy: () => {},
};
function callAndUnsetCb(self, err) {
const cb = self._writecb;
self._writecb = null;
if (err)
self.destroy(err);
else if (cb)
cb();
}
function nullDecoder(val, hint) {
return val;
}
class Multipart extends Writable {
constructor(cfg) {
const streamOpts = {
autoDestroy: true,
emitClose: true,
highWaterMark: (typeof cfg.highWaterMark === 'number'
? cfg.highWaterMark
: undefined),
};
super(streamOpts);
if (!cfg.conType.params || typeof cfg.conType.params.boundary !== 'string')
throw new Error('Multipart: Boundary not found');
const boundary = cfg.conType.params.boundary;
const paramDecoder = (typeof cfg.defParamCharset === 'string'
&& cfg.defParamCharset
? getDecoder(cfg.defParamCharset)
: nullDecoder);
const defCharset = (cfg.defCharset || 'utf8');
const preservePath = cfg.preservePath;
const fileOpts = {
autoDestroy: true,
emitClose: true,
highWaterMark: (typeof cfg.fileHwm === 'number'
? cfg.fileHwm
: undefined),
};
const limits = cfg.limits;
const fieldSizeLimit = (limits && typeof limits.fieldSize === 'number'
? limits.fieldSize
: 1 * 1024 * 1024);
const fileSizeLimit = (limits && typeof limits.fileSize === 'number'
? limits.fileSize
: Infinity);
const filesLimit = (limits && typeof limits.files === 'number'
? limits.files
: Infinity);
const fieldsLimit = (limits && typeof limits.fields === 'number'
? limits.fields
: Infinity);
const partsLimit = (limits && typeof limits.parts === 'number'
? limits.parts
: Infinity);
let parts = -1; // Account for initial boundary
let fields = 0;
let files = 0;
let skipPart = false;
this._fileEndsLeft = 0;
this._fileStream = undefined;
this._complete = false;
let fileSize = 0;
let field;
let fieldSize = 0;
let partCharset;
let partEncoding;
let partType;
let partName;
let partTruncated = false;
let hitFilesLimit = false;
let hitFieldsLimit = false;
this._hparser = null;
const hparser = new HeaderParser((header) => {
this._hparser = null;
skipPart = false;
partType = 'text/plain';
partCharset = defCharset;
partEncoding = '7bit';
partName = undefined;
partTruncated = false;
let filename;
if (!header['content-disposition']) {
skipPart = true;
return;
}
const disp = parseDisposition(header['content-disposition'][0],
paramDecoder);
if (!disp || disp.type !== 'form-data') {
skipPart = true;
return;
}
if (disp.params) {
if (disp.params.name)
partName = disp.params.name;
if (disp.params['filename*'])
filename = disp.params['filename*'];
else if (disp.params.filename)
filename = disp.params.filename;
if (filename !== undefined && !preservePath)
filename = basename(filename);
}
if (header['content-type']) {
const conType = parseContentType(header['content-type'][0]);
if (conType) {
partType = `${conType.type}/${conType.subtype}`;
if (conType.params && typeof conType.params.charset === 'string')
partCharset = conType.params.charset.toLowerCase();
}
}
if (header['content-transfer-encoding'])
partEncoding = header['content-transfer-encoding'][0].toLowerCase();
if (partType === 'application/octet-stream' || filename !== undefined) {
// File
if (files === filesLimit) {
if (!hitFilesLimit) {
hitFilesLimit = true;
this.emit('filesLimit');
}
skipPart = true;
return;
}
++files;
if (this.listenerCount('file') === 0) {
skipPart = true;
return;
}
fileSize = 0;
this._fileStream = new FileStream(fileOpts, this);
++this._fileEndsLeft;
this.emit(
'file',
partName,
this._fileStream,
{ filename,
encoding: partEncoding,
mimeType: partType }
);
} else {
// Non-file
if (fields === fieldsLimit) {
if (!hitFieldsLimit) {
hitFieldsLimit = true;
this.emit('fieldsLimit');
}
skipPart = true;
return;
}
++fields;
if (this.listenerCount('field') === 0) {
skipPart = true;
return;
}
field = [];
fieldSize = 0;
}
});
let matchPostBoundary = 0;
const ssCb = (isMatch, data, start, end, isDataSafe) => {
retrydata:
while (data) {
if (this._hparser !== null) {
const ret = this._hparser.push(data, start, end);
if (ret === -1) {
this._hparser = null;
hparser.reset();
this.emit('error', new Error('Malformed part header'));
break;
}
start = ret;
}
if (start === end)
break;
if (matchPostBoundary !== 0) {
if (matchPostBoundary === 1) {
switch (data[start]) {
case 45: // '-'
// Try matching '--' after boundary
matchPostBoundary = 2;
++start;
break;
case 13: // '\r'
// Try matching CR LF before header
matchPostBoundary = 3;
++start;
break;
default:
matchPostBoundary = 0;
}
if (start === end)
return;
}
if (matchPostBoundary === 2) {
matchPostBoundary = 0;
if (data[start] === 45/* '-' */) {
// End of multipart data
this._complete = true;
this._bparser = ignoreData;
return;
}
// We saw something other than '-', so put the dash we consumed
// "back"
const writecb = this._writecb;
this._writecb = noop;
ssCb(false, BUF_DASH, 0, 1, false);
this._writecb = writecb;
} else if (matchPostBoundary === 3) {
matchPostBoundary = 0;
if (data[start] === 10/* '\n' */) {
++start;
if (parts >= partsLimit)
break;
// Prepare the header parser
this._hparser = hparser;
if (start === end)
break;
// Process the remaining data as a header
continue retrydata;
} else {
// We saw something other than LF, so put the CR we consumed
// "back"
const writecb = this._writecb;
this._writecb = noop;
ssCb(false, BUF_CR, 0, 1, false);
this._writecb = writecb;
}
}
}
if (!skipPart) {
if (this._fileStream) {
let chunk;
const actualLen = Math.min(end - start, fileSizeLimit - fileSize);
if (!isDataSafe) {
chunk = Buffer.allocUnsafe(actualLen);
data.copy(chunk, 0, start, start + actualLen);
} else {
chunk = data.slice(start, start + actualLen);
}
fileSize += chunk.length;
if (fileSize === fileSizeLimit) {
if (chunk.length > 0)
this._fileStream.push(chunk);
this._fileStream.emit('limit');
this._fileStream.truncated = true;
skipPart = true;
} else if (!this._fileStream.push(chunk)) {
if (this._writecb)
this._fileStream._readcb = this._writecb;
this._writecb = null;
}
} else if (field !== undefined) {
let chunk;
const actualLen = Math.min(
end - start,
fieldSizeLimit - fieldSize
);
if (!isDataSafe) {
chunk = Buffer.allocUnsafe(actualLen);
data.copy(chunk, 0, start, start + actualLen);
} else {
chunk = data.slice(start, start + actualLen);
}
fieldSize += actualLen;
field.push(chunk);
if (fieldSize === fieldSizeLimit) {
skipPart = true;
partTruncated = true;
}
}
}
break;
}
if (isMatch) {
matchPostBoundary = 1;
if (this._fileStream) {
// End the active file stream if the previous part was a file
this._fileStream.push(null);
this._fileStream = null;
} else if (field !== undefined) {
let data;
switch (field.length) {
case 0:
data = '';
break;
case 1:
data = convertToUTF8(field[0], partCharset, 0);
break;
default:
data = convertToUTF8(
Buffer.concat(field, fieldSize),
partCharset,
0
);
}
field = undefined;
fieldSize = 0;
this.emit(
'field',
partName,
data,
{ nameTruncated: false,
valueTruncated: partTruncated,
encoding: partEncoding,
mimeType: partType }
);
}
if (++parts === partsLimit)
this.emit('partsLimit');
}
};
this._bparser = new StreamSearch(`\r\n--${boundary}`, ssCb);
this._writecb = null;
this._finalcb = null;
// Just in case there is no preamble
this.write(BUF_CRLF);
}
static detect(conType) {
return (conType.type === 'multipart' && conType.subtype === 'form-data');
}
_write(chunk, enc, cb) {
this._writecb = cb;
this._bparser.push(chunk, 0);
if (this._writecb)
callAndUnsetCb(this);
}
_destroy(err, cb) {
this._hparser = null;
this._bparser = ignoreData;
if (!err)
err = checkEndState(this);
const fileStream = this._fileStream;
if (fileStream) {
this._fileStream = null;
fileStream.destroy(err);
}
cb(err);
}
_final(cb) {
this._bparser.destroy();
if (!this._complete)
return cb(new Error('Unexpected end of form'));
if (this._fileEndsLeft)
this._finalcb = finalcb.bind(null, this, cb);
else
finalcb(this, cb);
}
}
function finalcb(self, cb, err) {
if (err)
return cb(err);
err = checkEndState(self);
cb(err);
}
function checkEndState(self) {
if (self._hparser)
return new Error('Malformed part header');
const fileStream = self._fileStream;
if (fileStream) {
self._fileStream = null;
fileStream.destroy(new Error('Unexpected end of file'));
}
if (!self._complete)
return new Error('Unexpected end of form');
}
const TOKEN = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
const FIELD_VCHAR = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
];
module.exports = Multipart;

View File

@ -0,0 +1,350 @@
'use strict';
const { Writable } = require('stream');
const { getDecoder } = require('../utils.js');
class URLEncoded extends Writable {
constructor(cfg) {
const streamOpts = {
autoDestroy: true,
emitClose: true,
highWaterMark: (typeof cfg.highWaterMark === 'number'
? cfg.highWaterMark
: undefined),
};
super(streamOpts);
let charset = (cfg.defCharset || 'utf8');
if (cfg.conType.params && typeof cfg.conType.params.charset === 'string')
charset = cfg.conType.params.charset;
this.charset = charset;
const limits = cfg.limits;
this.fieldSizeLimit = (limits && typeof limits.fieldSize === 'number'
? limits.fieldSize
: 1 * 1024 * 1024);
this.fieldsLimit = (limits && typeof limits.fields === 'number'
? limits.fields
: Infinity);
this.fieldNameSizeLimit = (
limits && typeof limits.fieldNameSize === 'number'
? limits.fieldNameSize
: 100
);
this._inKey = true;
this._keyTrunc = false;
this._valTrunc = false;
this._bytesKey = 0;
this._bytesVal = 0;
this._fields = 0;
this._key = '';
this._val = '';
this._byte = -2;
this._lastPos = 0;
this._encode = 0;
this._decoder = getDecoder(charset);
}
static detect(conType) {
return (conType.type === 'application'
&& conType.subtype === 'x-www-form-urlencoded');
}
_write(chunk, enc, cb) {
if (this._fields >= this.fieldsLimit)
return cb();
let i = 0;
const len = chunk.length;
this._lastPos = 0;
// Check if we last ended mid-percent-encoded byte
if (this._byte !== -2) {
i = readPctEnc(this, chunk, i, len);
if (i === -1)
return cb(new Error('Malformed urlencoded form'));
if (i >= len)
return cb();
if (this._inKey)
++this._bytesKey;
else
++this._bytesVal;
}
main:
while (i < len) {
if (this._inKey) {
// Parsing key
i = skipKeyBytes(this, chunk, i, len);
while (i < len) {
switch (chunk[i]) {
case 61: // '='
if (this._lastPos < i)
this._key += chunk.latin1Slice(this._lastPos, i);
this._lastPos = ++i;
this._key = this._decoder(this._key, this._encode);
this._encode = 0;
this._inKey = false;
continue main;
case 38: // '&'
if (this._lastPos < i)
this._key += chunk.latin1Slice(this._lastPos, i);
this._lastPos = ++i;
this._key = this._decoder(this._key, this._encode);
this._encode = 0;
if (this._bytesKey > 0) {
this.emit(
'field',
this._key,
'',
{ nameTruncated: this._keyTrunc,
valueTruncated: false,
encoding: this.charset,
mimeType: 'text/plain' }
);
}
this._key = '';
this._val = '';
this._keyTrunc = false;
this._valTrunc = false;
this._bytesKey = 0;
this._bytesVal = 0;
if (++this._fields >= this.fieldsLimit) {
this.emit('fieldsLimit');
return cb();
}
continue;
case 43: // '+'
if (this._lastPos < i)
this._key += chunk.latin1Slice(this._lastPos, i);
this._key += ' ';
this._lastPos = i + 1;
break;
case 37: // '%'
if (this._encode === 0)
this._encode = 1;
if (this._lastPos < i)
this._key += chunk.latin1Slice(this._lastPos, i);
this._lastPos = i + 1;
this._byte = -1;
i = readPctEnc(this, chunk, i + 1, len);
if (i === -1)
return cb(new Error('Malformed urlencoded form'));
if (i >= len)
return cb();
++this._bytesKey;
i = skipKeyBytes(this, chunk, i, len);
continue;
}
++i;
++this._bytesKey;
i = skipKeyBytes(this, chunk, i, len);
}
if (this._lastPos < i)
this._key += chunk.latin1Slice(this._lastPos, i);
} else {
// Parsing value
i = skipValBytes(this, chunk, i, len);
while (i < len) {
switch (chunk[i]) {
case 38: // '&'
if (this._lastPos < i)
this._val += chunk.latin1Slice(this._lastPos, i);
this._lastPos = ++i;
this._inKey = true;
this._val = this._decoder(this._val, this._encode);
this._encode = 0;
if (this._bytesKey > 0 || this._bytesVal > 0) {
this.emit(
'field',
this._key,
this._val,
{ nameTruncated: this._keyTrunc,
valueTruncated: this._valTrunc,
encoding: this.charset,
mimeType: 'text/plain' }
);
}
this._key = '';
this._val = '';
this._keyTrunc = false;
this._valTrunc = false;
this._bytesKey = 0;
this._bytesVal = 0;
if (++this._fields >= this.fieldsLimit) {
this.emit('fieldsLimit');
return cb();
}
continue main;
case 43: // '+'
if (this._lastPos < i)
this._val += chunk.latin1Slice(this._lastPos, i);
this._val += ' ';
this._lastPos = i + 1;
break;
case 37: // '%'
if (this._encode === 0)
this._encode = 1;
if (this._lastPos < i)
this._val += chunk.latin1Slice(this._lastPos, i);
this._lastPos = i + 1;
this._byte = -1;
i = readPctEnc(this, chunk, i + 1, len);
if (i === -1)
return cb(new Error('Malformed urlencoded form'));
if (i >= len)
return cb();
++this._bytesVal;
i = skipValBytes(this, chunk, i, len);
continue;
}
++i;
++this._bytesVal;
i = skipValBytes(this, chunk, i, len);
}
if (this._lastPos < i)
this._val += chunk.latin1Slice(this._lastPos, i);
}
}
cb();
}
_final(cb) {
if (this._byte !== -2)
return cb(new Error('Malformed urlencoded form'));
if (!this._inKey || this._bytesKey > 0 || this._bytesVal > 0) {
if (this._inKey)
this._key = this._decoder(this._key, this._encode);
else
this._val = this._decoder(this._val, this._encode);
this.emit(
'field',
this._key,
this._val,
{ nameTruncated: this._keyTrunc,
valueTruncated: this._valTrunc,
encoding: this.charset,
mimeType: 'text/plain' }
);
}
cb();
}
}
function readPctEnc(self, chunk, pos, len) {
if (pos >= len)
return len;
if (self._byte === -1) {
// We saw a '%' but no hex characters yet
const hexUpper = HEX_VALUES[chunk[pos++]];
if (hexUpper === -1)
return -1;
if (hexUpper >= 8)
self._encode = 2; // Indicate high bits detected
if (pos < len) {
// Both hex characters are in this chunk
const hexLower = HEX_VALUES[chunk[pos++]];
if (hexLower === -1)
return -1;
if (self._inKey)
self._key += String.fromCharCode((hexUpper << 4) + hexLower);
else
self._val += String.fromCharCode((hexUpper << 4) + hexLower);
self._byte = -2;
self._lastPos = pos;
} else {
// Only one hex character was available in this chunk
self._byte = hexUpper;
}
} else {
// We saw only one hex character so far
const hexLower = HEX_VALUES[chunk[pos++]];
if (hexLower === -1)
return -1;
if (self._inKey)
self._key += String.fromCharCode((self._byte << 4) + hexLower);
else
self._val += String.fromCharCode((self._byte << 4) + hexLower);
self._byte = -2;
self._lastPos = pos;
}
return pos;
}
function skipKeyBytes(self, chunk, pos, len) {
// Skip bytes if we've truncated
if (self._bytesKey > self.fieldNameSizeLimit) {
if (!self._keyTrunc) {
if (self._lastPos < pos)
self._key += chunk.latin1Slice(self._lastPos, pos - 1);
}
self._keyTrunc = true;
for (; pos < len; ++pos) {
const code = chunk[pos];
if (code === 61/* '=' */ || code === 38/* '&' */)
break;
++self._bytesKey;
}
self._lastPos = pos;
}
return pos;
}
function skipValBytes(self, chunk, pos, len) {
// Skip bytes if we've truncated
if (self._bytesVal > self.fieldSizeLimit) {
if (!self._valTrunc) {
if (self._lastPos < pos)
self._val += chunk.latin1Slice(self._lastPos, pos - 1);
}
self._valTrunc = true;
for (; pos < len; ++pos) {
if (chunk[pos] === 38/* '&' */)
break;
++self._bytesVal;
}
self._lastPos = pos;
}
return pos;
}
/* eslint-disable no-multi-spaces */
const HEX_VALUES = [
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
];
/* eslint-enable no-multi-spaces */
module.exports = URLEncoded;

View File

@ -0,0 +1,596 @@
'use strict';
function parseContentType(str) {
if (str.length === 0)
return;
const params = Object.create(null);
let i = 0;
// Parse type
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
if (code !== 47/* '/' */ || i === 0)
return;
break;
}
}
// Check for type without subtype
if (i === str.length)
return;
const type = str.slice(0, i).toLowerCase();
// Parse subtype
const subtypeStart = ++i;
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
// Make sure we have a subtype
if (i === subtypeStart)
return;
if (parseContentTypeParams(str, i, params) === undefined)
return;
break;
}
}
// Make sure we have a subtype
if (i === subtypeStart)
return;
const subtype = str.slice(subtypeStart, i).toLowerCase();
return { type, subtype, params };
}
function parseContentTypeParams(str, i, params) {
while (i < str.length) {
// Consume whitespace
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code !== 32/* ' ' */ && code !== 9/* '\t' */)
break;
}
// Ended on whitespace
if (i === str.length)
break;
// Check for malformed parameter
if (str.charCodeAt(i++) !== 59/* ';' */)
return;
// Consume whitespace
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code !== 32/* ' ' */ && code !== 9/* '\t' */)
break;
}
// Ended on whitespace (malformed)
if (i === str.length)
return;
let name;
const nameStart = i;
// Parse parameter name
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
if (code !== 61/* '=' */)
return;
break;
}
}
// No value (malformed)
if (i === str.length)
return;
name = str.slice(nameStart, i);
++i; // Skip over '='
// No value (malformed)
if (i === str.length)
return;
let value = '';
let valueStart;
if (str.charCodeAt(i) === 34/* '"' */) {
valueStart = ++i;
let escaping = false;
// Parse quoted value
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code === 92/* '\\' */) {
if (escaping) {
valueStart = i;
escaping = false;
} else {
value += str.slice(valueStart, i);
escaping = true;
}
continue;
}
if (code === 34/* '"' */) {
if (escaping) {
valueStart = i;
escaping = false;
continue;
}
value += str.slice(valueStart, i);
break;
}
if (escaping) {
valueStart = i - 1;
escaping = false;
}
// Invalid unescaped quoted character (malformed)
if (QDTEXT[code] !== 1)
return;
}
// No end quote (malformed)
if (i === str.length)
return;
++i; // Skip over double quote
} else {
valueStart = i;
// Parse unquoted value
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
// No value (malformed)
if (i === valueStart)
return;
break;
}
}
value = str.slice(valueStart, i);
}
name = name.toLowerCase();
if (params[name] === undefined)
params[name] = value;
}
return params;
}
function parseDisposition(str, defDecoder) {
if (str.length === 0)
return;
const params = Object.create(null);
let i = 0;
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
if (parseDispositionParams(str, i, params, defDecoder) === undefined)
return;
break;
}
}
const type = str.slice(0, i).toLowerCase();
return { type, params };
}
function parseDispositionParams(str, i, params, defDecoder) {
while (i < str.length) {
// Consume whitespace
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code !== 32/* ' ' */ && code !== 9/* '\t' */)
break;
}
// Ended on whitespace
if (i === str.length)
break;
// Check for malformed parameter
if (str.charCodeAt(i++) !== 59/* ';' */)
return;
// Consume whitespace
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code !== 32/* ' ' */ && code !== 9/* '\t' */)
break;
}
// Ended on whitespace (malformed)
if (i === str.length)
return;
let name;
const nameStart = i;
// Parse parameter name
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
if (code === 61/* '=' */)
break;
return;
}
}
// No value (malformed)
if (i === str.length)
return;
let value = '';
let valueStart;
let charset;
//~ let lang;
name = str.slice(nameStart, i);
if (name.charCodeAt(name.length - 1) === 42/* '*' */) {
// Extended value
const charsetStart = ++i;
// Parse charset name
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (CHARSET[code] !== 1) {
if (code !== 39/* '\'' */)
return;
break;
}
}
// Incomplete charset (malformed)
if (i === str.length)
return;
charset = str.slice(charsetStart, i);
++i; // Skip over the '\''
//~ const langStart = ++i;
// Parse language name
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code === 39/* '\'' */)
break;
}
// Incomplete language (malformed)
if (i === str.length)
return;
//~ lang = str.slice(langStart, i);
++i; // Skip over the '\''
// No value (malformed)
if (i === str.length)
return;
valueStart = i;
let encode = 0;
// Parse value
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (EXTENDED_VALUE[code] !== 1) {
if (code === 37/* '%' */) {
let hexUpper;
let hexLower;
if (i + 2 < str.length
&& (hexUpper = HEX_VALUES[str.charCodeAt(i + 1)]) !== -1
&& (hexLower = HEX_VALUES[str.charCodeAt(i + 2)]) !== -1) {
const byteVal = (hexUpper << 4) + hexLower;
value += str.slice(valueStart, i);
value += String.fromCharCode(byteVal);
i += 2;
valueStart = i + 1;
if (byteVal >= 128)
encode = 2;
else if (encode === 0)
encode = 1;
continue;
}
// '%' disallowed in non-percent encoded contexts (malformed)
return;
}
break;
}
}
value += str.slice(valueStart, i);
value = convertToUTF8(value, charset, encode);
if (value === undefined)
return;
} else {
// Non-extended value
++i; // Skip over '='
// No value (malformed)
if (i === str.length)
return;
if (str.charCodeAt(i) === 34/* '"' */) {
valueStart = ++i;
let escaping = false;
// Parse quoted value
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (code === 92/* '\\' */) {
if (escaping) {
valueStart = i;
escaping = false;
} else {
value += str.slice(valueStart, i);
escaping = true;
}
continue;
}
if (code === 34/* '"' */) {
if (escaping) {
valueStart = i;
escaping = false;
continue;
}
value += str.slice(valueStart, i);
break;
}
if (escaping) {
valueStart = i - 1;
escaping = false;
}
// Invalid unescaped quoted character (malformed)
if (QDTEXT[code] !== 1)
return;
}
// No end quote (malformed)
if (i === str.length)
return;
++i; // Skip over double quote
} else {
valueStart = i;
// Parse unquoted value
for (; i < str.length; ++i) {
const code = str.charCodeAt(i);
if (TOKEN[code] !== 1) {
// No value (malformed)
if (i === valueStart)
return;
break;
}
}
value = str.slice(valueStart, i);
}
value = defDecoder(value, 2);
if (value === undefined)
return;
}
name = name.toLowerCase();
if (params[name] === undefined)
params[name] = value;
}
return params;
}
function getDecoder(charset) {
let lc;
while (true) {
switch (charset) {
case 'utf-8':
case 'utf8':
return decoders.utf8;
case 'latin1':
case 'ascii': // TODO: Make these a separate, strict decoder?
case 'us-ascii':
case 'iso-8859-1':
case 'iso8859-1':
case 'iso88591':
case 'iso_8859-1':
case 'windows-1252':
case 'iso_8859-1:1987':
case 'cp1252':
case 'x-cp1252':
return decoders.latin1;
case 'utf16le':
case 'utf-16le':
case 'ucs2':
case 'ucs-2':
return decoders.utf16le;
case 'base64':
return decoders.base64;
default:
if (lc === undefined) {
lc = true;
charset = charset.toLowerCase();
continue;
}
return decoders.other.bind(charset);
}
}
}
const decoders = {
utf8: (data, hint) => {
if (data.length === 0)
return '';
if (typeof data === 'string') {
// If `data` never had any percent-encoded bytes or never had any that
// were outside of the ASCII range, then we can safely just return the
// input since UTF-8 is ASCII compatible
if (hint < 2)
return data;
data = Buffer.from(data, 'latin1');
}
return data.utf8Slice(0, data.length);
},
latin1: (data, hint) => {
if (data.length === 0)
return '';
if (typeof data === 'string')
return data;
return data.latin1Slice(0, data.length);
},
utf16le: (data, hint) => {
if (data.length === 0)
return '';
if (typeof data === 'string')
data = Buffer.from(data, 'latin1');
return data.ucs2Slice(0, data.length);
},
base64: (data, hint) => {
if (data.length === 0)
return '';
if (typeof data === 'string')
data = Buffer.from(data, 'latin1');
return data.base64Slice(0, data.length);
},
other: (data, hint) => {
if (data.length === 0)
return '';
if (typeof data === 'string')
data = Buffer.from(data, 'latin1');
try {
const decoder = new TextDecoder(this);
return decoder.decode(data);
} catch {}
},
};
function convertToUTF8(data, charset, hint) {
const decode = getDecoder(charset);
if (decode)
return decode(data, hint);
}
function basename(path) {
if (typeof path !== 'string')
return '';
for (let i = path.length - 1; i >= 0; --i) {
switch (path.charCodeAt(i)) {
case 0x2F: // '/'
case 0x5C: // '\'
path = path.slice(i + 1);
return (path === '..' || path === '.' ? '' : path);
}
}
return (path === '..' || path === '.' ? '' : path);
}
const TOKEN = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
const QDTEXT = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
];
const CHARSET = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
const EXTENDED_VALUE = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
/* eslint-disable no-multi-spaces */
const HEX_VALUES = [
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
];
/* eslint-enable no-multi-spaces */
module.exports = {
basename,
convertToUTF8,
getDecoder,
parseContentType,
parseDisposition,
};

View File

@ -0,0 +1,22 @@
{ "name": "busboy",
"version": "1.6.0",
"author": "Brian White <mscdex@mscdex.net>",
"description": "A streaming parser for HTML form data for node.js",
"main": "./lib/index.js",
"dependencies": {
"streamsearch": "^1.1.0"
},
"devDependencies": {
"@mscdex/eslint-config": "^1.1.0",
"eslint": "^7.32.0"
},
"scripts": {
"test": "node test/test.js",
"lint": "eslint --cache --report-unused-disable-directives --ext=.js .eslintrc.js lib test bench",
"lint:fix": "npm run lint -- --fix"
},
"engines": { "node": ">=10.16.0" },
"keywords": [ "uploads", "forms", "multipart", "form-data" ],
"licenses": [ { "type": "MIT", "url": "http://github.com/mscdex/busboy/raw/master/LICENSE" } ],
"repository": { "type": "git", "url": "http://github.com/mscdex/busboy.git" }
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
module.exports={"0":"117","1":"118","2":"119","3":"120","4":"121","5":"122","6":"123","7":"124","8":"125","9":"126",A:"10",B:"11",C:"12",D:"7",E:"8",F:"9",G:"15",H:"80",I:"146",J:"4",K:"6",L:"13",M:"14",N:"16",O:"17",P:"18",Q:"79",R:"81",S:"83",T:"84",U:"85",V:"86",W:"87",X:"88",Y:"89",Z:"90",a:"91",b:"92",c:"93",d:"94",e:"95",f:"96",g:"97",h:"98",i:"99",j:"100",k:"101",l:"102",m:"103",n:"104",o:"105",p:"106",q:"107",r:"108",s:"109",t:"110",u:"111",v:"112",w:"113",x:"114",y:"115",z:"116",AB:"127",BB:"20",CB:"21",DB:"22",EB:"23",FB:"24",GB:"25",HB:"26",IB:"27",JB:"28",KB:"29",LB:"128",MB:"129",NB:"130",OB:"131",PB:"132",QB:"133",RB:"134",SB:"135",TB:"136",UB:"137",VB:"138",WB:"139",XB:"140",YB:"141",ZB:"142",aB:"143",bB:"144",cB:"145",dB:"5",eB:"19",fB:"30",gB:"31",hB:"32",iB:"33",jB:"34",kB:"35",lB:"36",mB:"37",nB:"38",oB:"39",pB:"40",qB:"41",rB:"42",sB:"43",tB:"44",uB:"45",vB:"46",wB:"47",xB:"48",yB:"49",zB:"50","0B":"51","1B":"52","2B":"53","3B":"54","4B":"55","5B":"56","6B":"57","7B":"58","8B":"60","9B":"62",AC:"63",BC:"64",CC:"65",DC:"66",EC:"67",FC:"68",GC:"69",HC:"70",IC:"71",JC:"72",KC:"73",LC:"74",MC:"75",NC:"76",OC:"77",PC:"78",QC:"149",RC:"11.1",SC:"12.1",TC:"15.5",UC:"16.0",VC:"17.0",WC:"18.0",XC:"3",YC:"59",ZC:"61",aC:"82",bC:"147",cC:"148",dC:"3.2",eC:"10.1",fC:"15.2-15.3",gC:"15.4",hC:"16.1",iC:"16.2",jC:"16.3",kC:"16.4",lC:"16.5",mC:"17.1",nC:"17.2",oC:"17.3",pC:"17.4",qC:"17.5",rC:"18.1",sC:"18.2",tC:"18.3",uC:"18.4",vC:"18.5-18.7",wC:"26.0",xC:"26.1",yC:"26.2",zC:"26.3","0C":"26.4","1C":"26.5","2C":"11.5","3C":"4.2-4.3","4C":"5.5","5C":"2","6C":"150","7C":"151","8C":"152","9C":"3.5",AD:"3.6",BD:"3.1",CD:"5.1",DD:"6.1",ED:"7.1",FD:"9.1",GD:"13.1",HD:"14.1",ID:"15.1",JD:"15.6",KD:"16.6",LD:"17.6",MD:"TP",ND:"9.5-9.6",OD:"10.0-10.1",PD:"10.5",QD:"10.6",RD:"11.6",SD:"4.0-4.1",TD:"5.0-5.1",UD:"6.0-6.1",VD:"7.0-7.1",WD:"8.1-8.4",XD:"9.0-9.2",YD:"9.3",ZD:"10.0-10.2",aD:"10.3",bD:"11.0-11.2",cD:"11.3-11.4",dD:"12.0-12.1",eD:"12.2-12.5",fD:"13.0-13.1",gD:"13.2",hD:"13.3",iD:"13.4-13.7",jD:"14.0-14.4",kD:"14.5-14.8",lD:"15.0-15.1",mD:"15.6-15.8",nD:"16.6-16.7",oD:"17.6-17.7",pD:"all",qD:"2.1",rD:"2.2",sD:"2.3",tD:"4.1",uD:"4.4",vD:"4.4.3-4.4.4",wD:"5.0-5.4",xD:"6.2-6.4",yD:"7.2-7.4",zD:"8.2","0D":"9.2","1D":"11.1-11.2","2D":"12.0","3D":"13.0","4D":"14.0","5D":"15.0","6D":"19.0","7D":"14.9","8D":"13.52","9D":"2.5",AE:"3.0-3.1"};

View File

@ -0,0 +1 @@
module.exports={A:"ie",B:"edge",C:"firefox",D:"chrome",E:"safari",F:"opera",G:"ios_saf",H:"op_mini",I:"android",J:"bb",K:"op_mob",L:"and_chr",M:"and_ff",N:"ie_mob",O:"and_uc",P:"samsung",Q:"and_qq",R:"baidu",S:"kaios"};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
module.exports={A:{A:{"1":"F A B","2":"K D E 4C"},B:{"1":"0 1 2 3 4 5 6 7 8 9 C L M G N O P Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB I"},C:{"2":"5C XC J dB K D E F A B C L M G N O P eB BB CB 9C AD","132":"0 1 2 3 4 5 6 7 8 9 DB EB FB GB HB IB JB KB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 6B 7B YC 8B ZC 9B AC BC CC DC EC FC GC HC IC JC KC LC MC NC OC PC Q H R aC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB I bC cC QC 6C 7C 8C"},D:{"1":"0 1 2 3 4 5 6 7 8 9 C L M G N O P eB BB CB DB EB FB GB HB IB JB KB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 6B 7B YC 8B ZC 9B AC BC CC DC EC FC GC HC IC JC KC LC MC NC OC PC Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB I bC cC QC","2":"J dB K D E F","16":"A B"},E:{"1":"J dB K D E F A B C L M G CD DD ED FD eC RC SC GD HD ID fC gC TC JD UC hC iC jC kC lC KD VC mC nC oC pC qC LD WC rC sC tC uC vC wC xC yC zC 0C 1C MD","2":"BD dC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G N O P eB BB CB DB EB FB GB HB IB JB KB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC MC NC OC PC Q H R aC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB","2":"F B C ND OD PD QD RC 2C RD SC"},G:{"1":"E SD 3C TD UD VD WD XD YD ZD aD bD cD dD eD fD gD hD iD jD kD lD fC gC TC mD UC hC iC jC kC lC nD VC mC nC oC pC qC oD WC rC sC tC uC vC wC xC yC zC 0C 1C","16":"dC"},H:{"2":"pD"},I:{"1":"XC J I tD 3C uD vD","2":"qD rD sD"},J:{"1":"A","2":"D"},K:{"1":"H","2":"A B C RC 2C SC"},L:{"1":"I"},M:{"132":"QC"},N:{"1":"A","2":"B"},O:{"1":"TC"},P:{"1":"J BB CB DB EB FB GB HB IB JB KB wD xD yD zD 0D eC 1D 2D 3D 4D 5D UC VC WC 6D"},Q:{"1":"7D"},R:{"1":"8D"},S:{"132":"9D AE"}},B:6,C:"AAC audio file format",D:true};

View File

@ -0,0 +1 @@
module.exports={A:{A:{"2":"K D E F A B 4C"},B:{"1":"0 1 2 3 4 5 6 7 8 9 N O P Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB I","2":"C L M G"},C:{"1":"0 1 2 3 4 5 6 7 8 9 6B 7B YC 8B ZC 9B AC BC CC DC EC FC GC HC IC JC KC LC MC NC OC PC Q H R aC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB I bC cC QC 6C 7C 8C","2":"5C XC J dB K D E F A B C L M G N O P eB BB CB DB EB FB GB HB IB JB KB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 9C AD"},D:{"1":"0 1 2 3 4 5 6 7 8 9 DC EC FC GC HC IC JC KC LC MC NC OC PC Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB I bC cC QC","2":"J dB K D E F A B C L M G N O P eB BB CB DB EB FB GB HB IB JB KB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 6B 7B YC 8B ZC 9B AC BC CC"},E:{"1":"L M G SC GD HD ID fC gC TC JD UC hC iC jC kC lC KD VC mC nC oC pC qC LD WC rC sC tC uC vC wC xC yC zC 0C 1C MD","2":"J dB K D E F A B BD dC CD DD ED FD eC","130":"C RC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 2B 3B 4B 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC MC NC OC PC Q H R aC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z AB","2":"F B C G N O P eB BB CB DB EB FB GB HB IB JB KB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B ND OD PD QD RC 2C RD SC"},G:{"1":"cD dD eD fD gD hD iD jD kD lD fC gC TC mD UC hC iC jC kC lC nD VC mC nC oC pC qC oD WC rC sC tC uC vC wC xC yC zC 0C 1C","2":"E dC SD 3C TD UD VD WD XD YD ZD aD bD"},H:{"2":"pD"},I:{"1":"I","2":"XC J qD rD sD tD 3C uD vD"},J:{"2":"D A"},K:{"1":"H","2":"A B C RC 2C SC"},L:{"1":"I"},M:{"1":"QC"},N:{"2":"A B"},O:{"1":"TC"},P:{"1":"BB CB DB EB FB GB HB IB JB KB 0D eC 1D 2D 3D 4D 5D UC VC WC 6D","2":"J wD xD yD zD"},Q:{"1":"7D"},R:{"1":"8D"},S:{"1":"AE","2":"9D"}},B:1,C:"AbortController & AbortSignal",D:true};

Some files were not shown because too many files have changed in this diff Show More