dev3000 0.0.60 → 0.0.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +4 -0
  2. package/dist/cdp-monitor.d.ts +2 -1
  3. package/dist/cdp-monitor.d.ts.map +1 -1
  4. package/dist/cdp-monitor.js +34 -17
  5. package/dist/cdp-monitor.js.map +1 -1
  6. package/dist/cli.js +105 -13
  7. package/dist/cli.js.map +1 -1
  8. package/dist/dev-environment.d.ts +3 -0
  9. package/dist/dev-environment.d.ts.map +1 -1
  10. package/dist/dev-environment.js +93 -34
  11. package/dist/dev-environment.js.map +1 -1
  12. package/dist/services/parsers/error-detectors/base.d.ts +24 -0
  13. package/dist/services/parsers/error-detectors/base.d.ts.map +1 -0
  14. package/dist/services/parsers/error-detectors/base.js +44 -0
  15. package/dist/services/parsers/error-detectors/base.js.map +1 -0
  16. package/dist/services/parsers/error-detectors/index.d.ts +6 -0
  17. package/dist/services/parsers/error-detectors/index.d.ts.map +1 -0
  18. package/dist/services/parsers/error-detectors/index.js +6 -0
  19. package/dist/services/parsers/error-detectors/index.js.map +1 -0
  20. package/dist/services/parsers/error-detectors/nextjs.d.ts +9 -0
  21. package/dist/services/parsers/error-detectors/nextjs.d.ts.map +1 -0
  22. package/dist/services/parsers/error-detectors/nextjs.js +52 -0
  23. package/dist/services/parsers/error-detectors/nextjs.js.map +1 -0
  24. package/dist/services/parsers/index.d.ts +8 -0
  25. package/dist/services/parsers/index.d.ts.map +1 -0
  26. package/dist/services/parsers/index.js +10 -0
  27. package/dist/services/parsers/index.js.map +1 -0
  28. package/dist/services/parsers/log-parsers/base.d.ts +26 -0
  29. package/dist/services/parsers/log-parsers/base.d.ts.map +1 -0
  30. package/dist/services/parsers/log-parsers/base.js +6 -0
  31. package/dist/services/parsers/log-parsers/base.js.map +1 -0
  32. package/dist/services/parsers/log-parsers/index.d.ts +6 -0
  33. package/dist/services/parsers/log-parsers/index.d.ts.map +1 -0
  34. package/dist/services/parsers/log-parsers/index.js +5 -0
  35. package/dist/services/parsers/log-parsers/index.js.map +1 -0
  36. package/dist/services/parsers/log-parsers/standard.d.ts +9 -0
  37. package/dist/services/parsers/log-parsers/standard.d.ts.map +1 -0
  38. package/dist/services/parsers/log-parsers/standard.js +17 -0
  39. package/dist/services/parsers/log-parsers/standard.js.map +1 -0
  40. package/dist/services/parsers/output-processor.d.ts +39 -0
  41. package/dist/services/parsers/output-processor.d.ts.map +1 -0
  42. package/dist/services/parsers/output-processor.js +54 -0
  43. package/dist/services/parsers/output-processor.js.map +1 -0
  44. package/mcp-server/.next/BUILD_ID +1 -1
  45. package/mcp-server/.next/app-build-manifest.json +56 -15
  46. package/mcp-server/.next/build/chunks/[root-of-the-server]__974941ed._.js +2 -10
  47. package/mcp-server/.next/build/chunks/[root-of-the-server]__974941ed._.js.map +4 -4
  48. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +2 -10
  49. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +4 -4
  50. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js +10 -35
  51. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js.map +9 -9
  52. package/mcp-server/.next/build-manifest.json +9 -12
  53. package/mcp-server/.next/cache/.previewinfo +1 -1
  54. package/mcp-server/.next/cache/.rscinfo +1 -1
  55. package/mcp-server/.next/cache/.tsbuildinfo +1 -1
  56. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  57. package/mcp-server/.next/prerender-manifest.json +106 -4
  58. package/mcp-server/.next/routes-manifest.json +82 -1
  59. package/mcp-server/.next/server/app/_global-error.html +2 -2
  60. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  61. package/mcp-server/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
  62. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  63. package/mcp-server/.next/server/app/_not-found.html +1 -1
  64. package/mcp-server/.next/server/app/_not-found.rsc +2 -2
  65. package/mcp-server/.next/server/app/api/tools/route/app-build-manifest.json +6 -9
  66. package/mcp-server/.next/server/app/api/tools/route/build-manifest.json +7 -10
  67. package/mcp-server/.next/server/app/api/tools/route.js +5 -4
  68. package/mcp-server/.next/server/app/index.html +1 -1
  69. package/mcp-server/.next/server/app/index.rsc +3 -3
  70. package/mcp-server/.next/server/app/logs/page/app-build-manifest.json +1 -1
  71. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  72. package/mcp-server/.next/server/app/page/app-build-manifest.json +10 -15
  73. package/mcp-server/.next/server/app/page/build-manifest.json +7 -10
  74. package/mcp-server/.next/server/app/page.js +9 -7
  75. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  76. package/mcp-server/.next/server/app/replay/page/app-build-manifest.json +1 -1
  77. package/mcp-server/.next/server/app/replay/page_client-reference-manifest.js +1 -1
  78. package/mcp-server/.next/server/app/replay.html +1 -1
  79. package/mcp-server/.next/server/app/replay.rsc +2 -2
  80. package/mcp-server/.next/server/app-paths-manifest.json +15 -1
  81. package/mcp-server/.next/server/chunks/[root-of-the-server]__7f1ecf7b._.js.map +1 -1
  82. package/mcp-server/.next/server/chunks/[root-of-the-server]__82298dd3._.js.map +1 -1
  83. package/mcp-server/.next/server/chunks/_next-internal_server_app_api_tools_route_actions_4a0d5a18.js +1 -5
  84. package/mcp-server/.next/server/chunks/_next-internal_server_app_api_tools_route_actions_4a0d5a18.js.map +1 -6
  85. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_forbidden_7b57efa5.js +1 -30
  86. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_forbidden_7b57efa5.js.map +1 -6
  87. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_global-error_118601bd.js +1 -22
  88. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_global-error_118601bd.js.map +1 -8
  89. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_unauthorized_6614f15c.js +1 -30
  90. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_unauthorized_6614f15c.js.map +1 -6
  91. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_f453b63e._.js +1 -148
  92. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_f453b63e._.js.map +1 -8
  93. package/mcp-server/.next/server/chunks/ssr/_dc26a647._.js +1 -1
  94. package/mcp-server/.next/server/chunks/ssr/_dc26a647._.js.map +1 -1
  95. package/mcp-server/.next/server/chunks/ssr/_next-internal_server_app_page_actions_39d4fc33.js +1 -5
  96. package/mcp-server/.next/server/chunks/ssr/_next-internal_server_app_page_actions_39d4fc33.js.map +1 -6
  97. package/mcp-server/.next/server/middleware-build-manifest.js +7 -10
  98. package/mcp-server/.next/server/pages/404.html +1 -1
  99. package/mcp-server/.next/server/pages/500.html +2 -2
  100. package/mcp-server/.next/server/pages-manifest.json +4 -1
  101. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  102. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  103. package/mcp-server/.next/standalone/.next/BUILD_ID +1 -1
  104. package/mcp-server/.next/standalone/.next/app-build-manifest.json +5 -5
  105. package/mcp-server/.next/standalone/.next/build-manifest.json +2 -2
  106. package/mcp-server/.next/standalone/.next/prerender-manifest.json +16 -16
  107. package/mcp-server/.next/standalone/.next/server/app/_global-error.html +2 -2
  108. package/mcp-server/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  109. package/mcp-server/.next/standalone/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
  110. package/mcp-server/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  111. package/mcp-server/.next/standalone/.next/server/app/_not-found.html +1 -1
  112. package/mcp-server/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  113. package/mcp-server/.next/standalone/.next/server/app/index.html +1 -1
  114. package/mcp-server/.next/standalone/.next/server/app/index.rsc +3 -3
  115. package/mcp-server/.next/standalone/.next/server/app/logs/page/app-build-manifest.json +1 -1
  116. package/mcp-server/.next/standalone/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  117. package/mcp-server/.next/standalone/.next/server/app/page/app-build-manifest.json +2 -2
  118. package/mcp-server/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  119. package/mcp-server/.next/standalone/.next/server/app/replay/page/app-build-manifest.json +1 -1
  120. package/mcp-server/.next/standalone/.next/server/app/replay/page_client-reference-manifest.js +1 -1
  121. package/mcp-server/.next/standalone/.next/server/app/replay.html +1 -1
  122. package/mcp-server/.next/standalone/.next/server/app/replay.rsc +2 -2
  123. package/mcp-server/.next/standalone/.next/server/chunks/ssr/_dc26a647._.js +1 -1
  124. package/mcp-server/.next/standalone/.next/server/pages/404.html +1 -1
  125. package/mcp-server/.next/standalone/.next/server/pages/500.html +2 -2
  126. package/mcp-server/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  127. package/mcp-server/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  128. package/mcp-server/.next/standalone/app/api/mcp/[transport]/route.ts +93 -91
  129. package/mcp-server/.next/static/chunks/{5dfb96bedc33a0a5.css → 6634762c4edabf25.css} +1 -1
  130. package/mcp-server/.next/static/chunks/aac71a4d8cd0d1d1.js +1 -0
  131. package/mcp-server/.next/trace +1 -3
  132. package/package.json +1 -1
  133. package/mcp-server/.next/server/chunks/0916f_next_c68840f1._.js +0 -14728
  134. package/mcp-server/.next/server/chunks/0916f_next_c68840f1._.js.map +0 -118
  135. package/mcp-server/.next/server/chunks/[root-of-the-server]__3dccd82a._.js +0 -248
  136. package/mcp-server/.next/server/chunks/[root-of-the-server]__3dccd82a._.js.map +0 -6
  137. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_76a62e93._.js +0 -5831
  138. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_76a62e93._.js.map +0 -89
  139. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_d231ced7._.js +0 -15764
  140. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_d231ced7._.js.map +0 -145
  141. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_dbf009ef._.js +0 -9174
  142. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_dbf009ef._.js.map +0 -51
  143. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__1aaf5479._.js +0 -38
  144. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__1aaf5479._.js.map +0 -5
  145. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__7f148858._.js +0 -62
  146. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__7f148858._.js.map +0 -5
  147. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__95719760._.js +0 -54
  148. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__95719760._.js.map +0 -8
  149. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b1782a10._.js +0 -813
  150. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b1782a10._.js.map +0 -6
  151. package/mcp-server/.next/server/chunks/ssr/[turbopack]_browser_dev_hmr-client_hmr-client_ts_818f0fdf._.js +0 -467
  152. package/mcp-server/.next/server/chunks/ssr/[turbopack]_browser_dev_hmr-client_hmr-client_ts_818f0fdf._.js.map +0 -6
  153. package/mcp-server/.next/server/chunks/ssr/[turbopack]_browser_dev_hmr-client_hmr-client_ts_89c5f8e8._.js +0 -12
  154. package/mcp-server/.next/server/chunks/ssr/[turbopack]_browser_dev_hmr-client_hmr-client_ts_89c5f8e8._.js.map +0 -5
  155. package/mcp-server/.next/server/chunks/ssr/_9c0d7aa1._.js +0 -100
  156. package/mcp-server/.next/server/chunks/ssr/_9c0d7aa1._.js.map +0 -7
  157. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_cc7262c5._.js +0 -13866
  158. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_cc7262c5._.js.map +0 -152
  159. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_da0d0a14._.js +0 -13866
  160. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_da0d0a14._.js.map +0 -152
  161. package/mcp-server/.next/static/chunks/0916f_next_dist_2e70ccdb._.js +0 -4068
  162. package/mcp-server/.next/static/chunks/0916f_next_dist_2e70ccdb._.js.map +0 -64
  163. package/mcp-server/.next/static/chunks/0916f_next_dist_b3493ca8._.js +0 -2780
  164. package/mcp-server/.next/static/chunks/0916f_next_dist_b3493ca8._.js.map +0 -27
  165. package/mcp-server/.next/static/chunks/0916f_next_dist_build_polyfills_polyfill-nomodule.js +0 -1
  166. package/mcp-server/.next/static/chunks/0916f_next_dist_client_components_builtin_global-error_80971850.js +0 -7
  167. package/mcp-server/.next/static/chunks/0916f_next_dist_client_d3483330._.js +0 -10175
  168. package/mcp-server/.next/static/chunks/0916f_next_dist_client_d3483330._.js.map +0 -103
  169. package/mcp-server/.next/static/chunks/0916f_next_dist_compiled_8cc8c301._.js +0 -5009
  170. package/mcp-server/.next/static/chunks/0916f_next_dist_compiled_8cc8c301._.js.map +0 -21
  171. package/mcp-server/.next/static/chunks/0916f_next_dist_compiled_next-devtools_index_94228adb.js +0 -30477
  172. package/mcp-server/.next/static/chunks/0916f_next_dist_compiled_next-devtools_index_94228adb.js.map +0 -6
  173. package/mcp-server/.next/static/chunks/0916f_next_dist_compiled_react-dom_c74e1e00._.js +0 -14617
  174. package/mcp-server/.next/static/chunks/0916f_next_dist_compiled_react-dom_c74e1e00._.js.map +0 -9
  175. package/mcp-server/.next/static/chunks/1c2c4101e46d1c5e.js +0 -1
  176. package/mcp-server/.next/static/chunks/69652_@swc_helpers_cjs_77b72907._.js +0 -85
  177. package/mcp-server/.next/static/chunks/69652_@swc_helpers_cjs_77b72907._.js.map +0 -10
  178. package/mcp-server/.next/static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_29af464a._.js +0 -7
  179. package/mcp-server/.next/static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_c8c997ce._.js +0 -476
  180. package/mcp-server/.next/static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_c8c997ce._.js.map +0 -6
  181. package/mcp-server/.next/static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_d335a95d._.js +0 -13
  182. package/mcp-server/.next/static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_d335a95d._.js.map +0 -5
  183. package/mcp-server/.next/static/chunks/_9429dbc3._.js +0 -2117
  184. package/mcp-server/.next/static/chunks/_9429dbc3._.js.map +0 -16
  185. package/mcp-server/.next/static/chunks/_a0ff3932._.js +0 -13
  186. package/mcp-server/.next/static/chunks/_efaa0516._.js.map +0 -10
  187. package/mcp-server/.next/static/chunks/app_244179ef._.css +0 -4548
  188. package/mcp-server/.next/static/chunks/app_244179ef._.css.map +0 -7
  189. package/mcp-server/.next/static/chunks/app_compiled_css_bad6b30c._.single.css +0 -2117
  190. package/mcp-server/.next/static/chunks/app_compiled_css_bad6b30c._.single.css.map +0 -6
  191. package/mcp-server/.next/static/chunks/app_globals_css_bad6b30c._.single.css +0 -2432
  192. package/mcp-server/.next/static/chunks/app_globals_css_bad6b30c._.single.css.map +0 -6
  193. package/mcp-server/.next/static/chunks/app_layout_tsx_80971850._.js +0 -7
  194. package/mcp-server/.next/static/chunks/app_page_tsx_6ea10ef3._.js +0 -7
  195. package/mcp-server/.next/static/chunks/turbopack-_efaa0516._.js +0 -1836
  196. package/mcp-server/.next/static/development/_ssgManifest.js +0 -1
  197. package/mcp-server/.next/static/vcdr8uFblpN3gCi_831po/_buildManifest.js +0 -11
  198. package/mcp-server/.next/static/vcdr8uFblpN3gCi_831po/_clientMiddlewareManifest.json +0 -1
  199. /package/mcp-server/.next/static/{development → fgx2Ltd5vbloYUQlVKX60}/_buildManifest.js +0 -0
  200. /package/mcp-server/.next/static/{development → fgx2Ltd5vbloYUQlVKX60}/_clientMiddlewareManifest.json +0 -0
  201. /package/mcp-server/.next/static/{vcdr8uFblpN3gCi_831po → fgx2Ltd5vbloYUQlVKX60}/_ssgManifest.js +0 -0
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sections": [
5
- {"offset": {"line": 28, "column": 0}, "map": {"version":3,"sources":["file:///Users/elsigh/src/vercel-labs/dev3000/mcp-server/app/page.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { useEffect, useState } from \"react\";\n\ninterface MCPTool {\n name: string;\n description: string;\n category: string;\n parameters: Array<{\n name: string;\n type: string;\n optional?: boolean;\n description: string;\n }>;\n}\n\ninterface ToolsResponse {\n tools: MCPTool[];\n endpoint: string;\n totalTools: number;\n categories: string[];\n}\n\nexport default function HomePage() {\n const [tools, setTools] = useState<ToolsResponse | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n fetch(\"/api/tools\")\n .then((res) => res.json())\n .then((data) => {\n setTools(data);\n setLoading(false);\n })\n .catch(() => {\n setLoading(false);\n });\n }, []);\n\n return (\n <div className=\"min-h-screen bg-white\">\n {/* Header */}\n <header className=\"bg-gray-50 border-b border-gray-200\">\n <div className=\"max-w-7xl mx-auto px-6 py-8\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-4 mb-3\">\n <div className=\"w-12 h-12 bg-black rounded flex items-center justify-center\">\n <span className=\"text-white font-mono font-bold\">d3k</span>\n </div>\n <div>\n <h1 className=\"text-3xl font-bold text-gray-900\">\n dev3000 MCP Server\n </h1>\n <div className=\"flex items-center gap-3 mt-2\">\n <span className=\"inline-flex items-center gap-2 text-sm text-green-600 font-medium\">\n <span className=\"w-2 h-2 bg-green-500 rounded-full\"></span>\n Server Running\n </span>\n <span className=\"text-gray-300\">•</span>\n <span className=\"text-sm text-gray-600\">Port 3684</span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n <Link\n href=\"/logs\"\n className=\"inline-flex items-center gap-2 px-5 py-3 bg-blue-600 text-white text-sm font-medium rounded hover:bg-blue-700 transition-colors\"\n >\n 📊 View Logs\n </Link>\n <a\n href=\"https://github.com/vercel-labs/dev3000#setup\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-2 px-5 py-3 border border-gray-300 text-gray-700 text-sm font-medium rounded hover:bg-gray-50 transition-colors\"\n >\n 📖 Setup Guide\n </a>\n </div>\n </div>\n </div>\n </header>\n\n <div className=\"flex max-w-7xl mx-auto\">\n {/* Main Content */}\n <main className=\"flex-1 px-6 py-8 min-w-0 lg:pr-80\">\n {/* Quick Start */}\n <section className=\"mb-16\">\n <div className=\"bg-blue-50 border border-blue-200 rounded p-8\">\n <h2 className=\"text-xl font-semibold text-blue-900 mb-4\">\n 🚀 Quick Start\n </h2>\n <div className=\"space-y-4\">\n <div>\n <span className=\"text-sm font-medium text-blue-800\">\n MCP Endpoint:\n </span>\n <code className=\"ml-3 px-4 py-2 bg-blue-100 text-blue-800 text-sm font-mono rounded\">\n {tools?.endpoint || \"http://localhost:3684/api/mcp/mcp\"}\n </code>\n </div>\n <div className=\"text-sm text-blue-700\">\n <p className=\"mb-3\">\n Connect your AI tools to this MCP server for real-time\n development debugging:\n </p>\n <div className=\"flex gap-6\">\n <a\n href=\"https://github.com/vercel-labs/dev3000#claude-desktop\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 hover:text-blue-800 font-medium\"\n >\n Claude Desktop Setup →\n </a>\n <a\n href=\"https://github.com/vercel-labs/dev3000#cursor\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 hover:text-blue-800 font-medium\"\n >\n Cursor Setup →\n </a>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* Tools Documentation */}\n <section>\n <div className=\"mb-12\">\n <div>\n <h2 className=\"text-3xl font-bold text-gray-900 mb-3\">\n Available Tools\n </h2>\n <p className=\"text-gray-600 text-lg\">\n {loading\n ? \"Loading MCP tools...\"\n : `${tools?.totalTools || 0} tools across ${\n tools?.categories.length || 0\n } categories for AI-powered development debugging`}\n </p>\n </div>\n </div>\n\n {loading ? (\n <div className=\"text-center py-16\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600\"></div>\n <p className=\"mt-6 text-gray-600\">\n Loading tool documentation...\n </p>\n </div>\n ) : tools ? (\n <div className=\"grid gap-6 lg:grid-cols-2\">\n {tools.tools.map((tool) => (\n <div\n key={tool.name}\n id={tool.name}\n className=\"border border-gray-200 rounded p-6 hover:border-gray-300 transition-colors\"\n >\n <div className=\"mb-4\">\n <h4 className=\"text-xl font-semibold text-gray-900 font-mono mb-3\">\n {tool.name}\n </h4>\n <p className=\"text-gray-600 leading-relaxed\">\n {tool.description\n .replace(/🚨|⏰|🔍|🪄|📊|🌐|⚙️/g, \"\")\n .trim()}\n </p>\n </div>\n {tool.parameters.length > 0 && (\n <div>\n <h5 className=\"text-sm font-semibold text-gray-800 mb-3\">\n Parameters:\n </h5>\n <div className=\"space-y-2\">\n {tool.parameters.map((param) => (\n <div key={param.name} className=\"text-sm\">\n <div className=\"flex items-start gap-2\">\n <span className=\"font-mono text-blue-600 font-medium\">\n {param.name}\n </span>\n <span className=\"text-gray-500 text-xs\">\n {param.optional ? \"(optional)\" : \"(required)\"}\n </span>\n <span className=\"text-gray-400 text-xs\">\n - {param.type}\n </span>\n </div>\n {param.description && (\n <div className=\"text-gray-600 ml-1 mt-1 text-sm\">\n {param.description}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-16\">\n <p className=\"text-red-600 mb-6\">\n Failed to load tool documentation\n </p>\n <button\n onClick={() => window.location.reload()}\n className=\"px-6 py-3 bg-blue-600 text-white text-sm rounded hover:bg-blue-700 transition-colors\"\n type=\"button\"\n >\n Retry\n </button>\n </div>\n )}\n </section>\n\n {/* Magic Workflow */}\n <section className=\"mt-20 bg-gradient-to-r from-purple-50 to-blue-50 border border-purple-200 rounded p-10\">\n <h2 className=\"text-2xl font-semibold text-gray-900 mb-6 flex items-center gap-3\">\n 🪄 The Magic Workflow\n </h2>\n <div className=\"grid md:grid-cols-3 gap-8\">\n <div className=\"text-center\">\n <div className=\"w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4\">\n <span className=\"text-blue-600 font-bold text-lg\">1</span>\n </div>\n <h3 className=\"font-semibold mb-3 text-lg\">AI Finds Issues</h3>\n <p className=\"text-gray-600 leading-relaxed\">\n Tools like debug_my_app and monitor_for_new_errors\n automatically detect problems\n </p>\n </div>\n <div className=\"text-center\">\n <div className=\"w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mx-auto mb-4\">\n <span className=\"text-purple-600 font-bold text-lg\">2</span>\n </div>\n <h3 className=\"font-semibold mb-3 text-lg\">AI Fixes Code</h3>\n <p className=\"text-gray-600 leading-relaxed\">\n AI analyzes errors and edits your code files to resolve issues\n </p>\n </div>\n <div className=\"text-center\">\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4\">\n <span className=\"text-green-600 font-bold text-lg\">3</span>\n </div>\n <h3 className=\"font-semibold mb-3 text-lg\">\n AI Verifies Fixes\n </h3>\n <p className=\"text-gray-600 leading-relaxed\">\n execute_browser_action tests the fixes in real-time with\n screenshots\n </p>\n </div>\n </div>\n </section>\n </main>\n\n {/* Table of Contents - Sticky Sidebar (Right) */}\n <aside className=\"lg:block w-72 flex-shrink-0 fixed right-0 top-0 h-screen overflow-y-auto z-10\">\n <div className=\"p-6 bg-gray-50 border-l border-gray-200 h-full\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-4\">Tools</h3>\n {loading ? (\n <div className=\"text-sm text-gray-500\">Loading tools...</div>\n ) : tools ? (\n <nav className=\"space-y-1 text-sm\">\n {tools.tools.map((tool) => (\n <a\n key={tool.name}\n href={`#${tool.name}`}\n className=\"text-gray-600 hover:text-blue-600 transition-colors block py-2 px-3 rounded hover:bg-white\"\n >\n {tool.name}\n </a>\n ))}\n </nav>\n ) : (\n <div className=\"text-sm text-gray-500\">Failed to load tools</div>\n )}\n </div>\n </aside>\n </div>\n\n {/* Footer */}\n <footer className=\"border-t border-gray-200 mt-20\">\n <div className=\"max-w-7xl mx-auto px-6 py-8\">\n <div className=\"flex items-center justify-between text-sm text-gray-600\">\n <div>\n <span className=\"font-semibold\">dev3000 MCP Server</span> -\n AI-powered development monitoring\n </div>\n <div className=\"flex items-center gap-8\">\n <a\n href=\"https://github.com/vercel-labs/dev3000\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"hover:text-gray-900 transition-colors\"\n >\n GitHub\n </a>\n <a\n href=\"https://dev3000.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"hover:text-gray-900 transition-colors\"\n >\n Homepage\n </a>\n <Link\n href=\"/logs\"\n className=\"hover:text-gray-900 transition-colors\"\n >\n Logs\n </Link>\n </div>\n </div>\n </div>\n </footer>\n </div>\n );\n}\n"],"names":[],"mappings":"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","debugId":null}}]
6
- }
@@ -1,467 +0,0 @@
1
- module.exports = [
2
- "[turbopack]/browser/dev/hmr-client/hmr-client.ts [app-ssr] (ecmascript)", ((__turbopack_context__) => {
3
- "use strict";
4
-
5
- /// <reference path="../../../shared/runtime-types.d.ts" />
6
- /// <reference path="../../runtime/base/dev-globals.d.ts" />
7
- /// <reference path="../../runtime/base/dev-protocol.d.ts" />
8
- /// <reference path="../../runtime/base/dev-extensions.ts" />
9
- __turbopack_context__.s([
10
- "connect",
11
- ()=>connect,
12
- "setHooks",
13
- ()=>setHooks,
14
- "subscribeToUpdate",
15
- ()=>subscribeToUpdate
16
- ]);
17
- function connect({ addMessageListener, sendMessage, onUpdateError = console.error }) {
18
- addMessageListener((msg)=>{
19
- switch(msg.type){
20
- case 'turbopack-connected':
21
- handleSocketConnected(sendMessage);
22
- break;
23
- default:
24
- try {
25
- if (Array.isArray(msg.data)) {
26
- for(let i = 0; i < msg.data.length; i++){
27
- handleSocketMessage(msg.data[i]);
28
- }
29
- } else {
30
- handleSocketMessage(msg.data);
31
- }
32
- applyAggregatedUpdates();
33
- } catch (e) {
34
- console.warn('[Fast Refresh] performing full reload\n\n' + "Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\n" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\n\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\n' + 'Fast Refresh requires at least one parent function component in your React tree.');
35
- onUpdateError(e);
36
- location.reload();
37
- }
38
- break;
39
- }
40
- });
41
- const queued = globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS;
42
- if (queued != null && !Array.isArray(queued)) {
43
- throw new Error('A separate HMR handler was already registered');
44
- }
45
- globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS = {
46
- push: ([chunkPath, callback])=>{
47
- subscribeToChunkUpdate(chunkPath, sendMessage, callback);
48
- }
49
- };
50
- if (Array.isArray(queued)) {
51
- for (const [chunkPath, callback] of queued){
52
- subscribeToChunkUpdate(chunkPath, sendMessage, callback);
53
- }
54
- }
55
- }
56
- const updateCallbackSets = new Map();
57
- function sendJSON(sendMessage, message) {
58
- sendMessage(JSON.stringify(message));
59
- }
60
- function resourceKey(resource) {
61
- return JSON.stringify({
62
- path: resource.path,
63
- headers: resource.headers || null
64
- });
65
- }
66
- function subscribeToUpdates(sendMessage, resource) {
67
- sendJSON(sendMessage, {
68
- type: 'turbopack-subscribe',
69
- ...resource
70
- });
71
- return ()=>{
72
- sendJSON(sendMessage, {
73
- type: 'turbopack-unsubscribe',
74
- ...resource
75
- });
76
- };
77
- }
78
- function handleSocketConnected(sendMessage) {
79
- for (const key of updateCallbackSets.keys()){
80
- subscribeToUpdates(sendMessage, JSON.parse(key));
81
- }
82
- }
83
- // we aggregate all pending updates until the issues are resolved
84
- const chunkListsWithPendingUpdates = new Map();
85
- function aggregateUpdates(msg) {
86
- const key = resourceKey(msg.resource);
87
- let aggregated = chunkListsWithPendingUpdates.get(key);
88
- if (aggregated) {
89
- aggregated.instruction = mergeChunkListUpdates(aggregated.instruction, msg.instruction);
90
- } else {
91
- chunkListsWithPendingUpdates.set(key, msg);
92
- }
93
- }
94
- function applyAggregatedUpdates() {
95
- if (chunkListsWithPendingUpdates.size === 0) return;
96
- hooks.beforeRefresh();
97
- for (const msg of chunkListsWithPendingUpdates.values()){
98
- triggerUpdate(msg);
99
- }
100
- chunkListsWithPendingUpdates.clear();
101
- finalizeUpdate();
102
- }
103
- function mergeChunkListUpdates(updateA, updateB) {
104
- let chunks;
105
- if (updateA.chunks != null) {
106
- if (updateB.chunks == null) {
107
- chunks = updateA.chunks;
108
- } else {
109
- chunks = mergeChunkListChunks(updateA.chunks, updateB.chunks);
110
- }
111
- } else if (updateB.chunks != null) {
112
- chunks = updateB.chunks;
113
- }
114
- let merged;
115
- if (updateA.merged != null) {
116
- if (updateB.merged == null) {
117
- merged = updateA.merged;
118
- } else {
119
- // Since `merged` is an array of updates, we need to merge them all into
120
- // one, consistent update.
121
- // Since there can only be `EcmascriptMergeUpdates` in the array, there is
122
- // no need to key on the `type` field.
123
- let update = updateA.merged[0];
124
- for(let i = 1; i < updateA.merged.length; i++){
125
- update = mergeChunkListEcmascriptMergedUpdates(update, updateA.merged[i]);
126
- }
127
- for(let i = 0; i < updateB.merged.length; i++){
128
- update = mergeChunkListEcmascriptMergedUpdates(update, updateB.merged[i]);
129
- }
130
- merged = [
131
- update
132
- ];
133
- }
134
- } else if (updateB.merged != null) {
135
- merged = updateB.merged;
136
- }
137
- return {
138
- type: 'ChunkListUpdate',
139
- chunks,
140
- merged
141
- };
142
- }
143
- function mergeChunkListChunks(chunksA, chunksB) {
144
- const chunks = {};
145
- for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
146
- const chunkUpdateB = chunksB[chunkPath];
147
- if (chunkUpdateB != null) {
148
- const mergedUpdate = mergeChunkUpdates(chunkUpdateA, chunkUpdateB);
149
- if (mergedUpdate != null) {
150
- chunks[chunkPath] = mergedUpdate;
151
- }
152
- } else {
153
- chunks[chunkPath] = chunkUpdateA;
154
- }
155
- }
156
- for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
157
- if (chunks[chunkPath] == null) {
158
- chunks[chunkPath] = chunkUpdateB;
159
- }
160
- }
161
- return chunks;
162
- }
163
- function mergeChunkUpdates(updateA, updateB) {
164
- if (updateA.type === 'added' && updateB.type === 'deleted' || updateA.type === 'deleted' && updateB.type === 'added') {
165
- return undefined;
166
- }
167
- if (updateA.type === 'partial') {
168
- invariant(updateA.instruction, 'Partial updates are unsupported');
169
- }
170
- if (updateB.type === 'partial') {
171
- invariant(updateB.instruction, 'Partial updates are unsupported');
172
- }
173
- return undefined;
174
- }
175
- function mergeChunkListEcmascriptMergedUpdates(mergedA, mergedB) {
176
- const entries = mergeEcmascriptChunkEntries(mergedA.entries, mergedB.entries);
177
- const chunks = mergeEcmascriptChunksUpdates(mergedA.chunks, mergedB.chunks);
178
- return {
179
- type: 'EcmascriptMergedUpdate',
180
- entries,
181
- chunks
182
- };
183
- }
184
- function mergeEcmascriptChunkEntries(entriesA, entriesB) {
185
- return {
186
- ...entriesA,
187
- ...entriesB
188
- };
189
- }
190
- function mergeEcmascriptChunksUpdates(chunksA, chunksB) {
191
- if (chunksA == null) {
192
- return chunksB;
193
- }
194
- if (chunksB == null) {
195
- return chunksA;
196
- }
197
- const chunks = {};
198
- for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA)){
199
- const chunkUpdateB = chunksB[chunkPath];
200
- if (chunkUpdateB != null) {
201
- const mergedUpdate = mergeEcmascriptChunkUpdates(chunkUpdateA, chunkUpdateB);
202
- if (mergedUpdate != null) {
203
- chunks[chunkPath] = mergedUpdate;
204
- }
205
- } else {
206
- chunks[chunkPath] = chunkUpdateA;
207
- }
208
- }
209
- for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB)){
210
- if (chunks[chunkPath] == null) {
211
- chunks[chunkPath] = chunkUpdateB;
212
- }
213
- }
214
- if (Object.keys(chunks).length === 0) {
215
- return undefined;
216
- }
217
- return chunks;
218
- }
219
- function mergeEcmascriptChunkUpdates(updateA, updateB) {
220
- if (updateA.type === 'added' && updateB.type === 'deleted') {
221
- // These two completely cancel each other out.
222
- return undefined;
223
- }
224
- if (updateA.type === 'deleted' && updateB.type === 'added') {
225
- const added = [];
226
- const deleted = [];
227
- const deletedModules = new Set(updateA.modules ?? []);
228
- const addedModules = new Set(updateB.modules ?? []);
229
- for (const moduleId of addedModules){
230
- if (!deletedModules.has(moduleId)) {
231
- added.push(moduleId);
232
- }
233
- }
234
- for (const moduleId of deletedModules){
235
- if (!addedModules.has(moduleId)) {
236
- deleted.push(moduleId);
237
- }
238
- }
239
- if (added.length === 0 && deleted.length === 0) {
240
- return undefined;
241
- }
242
- return {
243
- type: 'partial',
244
- added,
245
- deleted
246
- };
247
- }
248
- if (updateA.type === 'partial' && updateB.type === 'partial') {
249
- const added = new Set([
250
- ...updateA.added ?? [],
251
- ...updateB.added ?? []
252
- ]);
253
- const deleted = new Set([
254
- ...updateA.deleted ?? [],
255
- ...updateB.deleted ?? []
256
- ]);
257
- if (updateB.added != null) {
258
- for (const moduleId of updateB.added){
259
- deleted.delete(moduleId);
260
- }
261
- }
262
- if (updateB.deleted != null) {
263
- for (const moduleId of updateB.deleted){
264
- added.delete(moduleId);
265
- }
266
- }
267
- return {
268
- type: 'partial',
269
- added: [
270
- ...added
271
- ],
272
- deleted: [
273
- ...deleted
274
- ]
275
- };
276
- }
277
- if (updateA.type === 'added' && updateB.type === 'partial') {
278
- const modules = new Set([
279
- ...updateA.modules ?? [],
280
- ...updateB.added ?? []
281
- ]);
282
- for (const moduleId of updateB.deleted ?? []){
283
- modules.delete(moduleId);
284
- }
285
- return {
286
- type: 'added',
287
- modules: [
288
- ...modules
289
- ]
290
- };
291
- }
292
- if (updateA.type === 'partial' && updateB.type === 'deleted') {
293
- // We could eagerly return `updateB` here, but this would potentially be
294
- // incorrect if `updateA` has added modules.
295
- const modules = new Set(updateB.modules ?? []);
296
- if (updateA.added != null) {
297
- for (const moduleId of updateA.added){
298
- modules.delete(moduleId);
299
- }
300
- }
301
- return {
302
- type: 'deleted',
303
- modules: [
304
- ...modules
305
- ]
306
- };
307
- }
308
- // Any other update combination is invalid.
309
- return undefined;
310
- }
311
- function invariant(_, message) {
312
- throw new Error(`Invariant: ${message}`);
313
- }
314
- const CRITICAL = [
315
- 'bug',
316
- 'error',
317
- 'fatal'
318
- ];
319
- function compareByList(list, a, b) {
320
- const aI = list.indexOf(a) + 1 || list.length;
321
- const bI = list.indexOf(b) + 1 || list.length;
322
- return aI - bI;
323
- }
324
- const chunksWithIssues = new Map();
325
- function emitIssues() {
326
- const issues = [];
327
- const deduplicationSet = new Set();
328
- for (const [_, chunkIssues] of chunksWithIssues){
329
- for (const chunkIssue of chunkIssues){
330
- if (deduplicationSet.has(chunkIssue.formatted)) continue;
331
- issues.push(chunkIssue);
332
- deduplicationSet.add(chunkIssue.formatted);
333
- }
334
- }
335
- sortIssues(issues);
336
- hooks.issues(issues);
337
- }
338
- function handleIssues(msg) {
339
- const key = resourceKey(msg.resource);
340
- let hasCriticalIssues = false;
341
- for (const issue of msg.issues){
342
- if (CRITICAL.includes(issue.severity)) {
343
- hasCriticalIssues = true;
344
- }
345
- }
346
- if (msg.issues.length > 0) {
347
- chunksWithIssues.set(key, msg.issues);
348
- } else if (chunksWithIssues.has(key)) {
349
- chunksWithIssues.delete(key);
350
- }
351
- emitIssues();
352
- return hasCriticalIssues;
353
- }
354
- const SEVERITY_ORDER = [
355
- 'bug',
356
- 'fatal',
357
- 'error',
358
- 'warning',
359
- 'info',
360
- 'log'
361
- ];
362
- const CATEGORY_ORDER = [
363
- 'parse',
364
- 'resolve',
365
- 'code generation',
366
- 'rendering',
367
- 'typescript',
368
- 'other'
369
- ];
370
- function sortIssues(issues) {
371
- issues.sort((a, b)=>{
372
- const first = compareByList(SEVERITY_ORDER, a.severity, b.severity);
373
- if (first !== 0) return first;
374
- return compareByList(CATEGORY_ORDER, a.category, b.category);
375
- });
376
- }
377
- const hooks = {
378
- beforeRefresh: ()=>{},
379
- refresh: ()=>{},
380
- buildOk: ()=>{},
381
- issues: (_issues)=>{}
382
- };
383
- function setHooks(newHooks) {
384
- Object.assign(hooks, newHooks);
385
- }
386
- function handleSocketMessage(msg) {
387
- sortIssues(msg.issues);
388
- handleIssues(msg);
389
- switch(msg.type){
390
- case 'issues':
391
- break;
392
- case 'partial':
393
- // aggregate updates
394
- aggregateUpdates(msg);
395
- break;
396
- default:
397
- // run single update
398
- const runHooks = chunkListsWithPendingUpdates.size === 0;
399
- if (runHooks) hooks.beforeRefresh();
400
- triggerUpdate(msg);
401
- if (runHooks) finalizeUpdate();
402
- break;
403
- }
404
- }
405
- function finalizeUpdate() {
406
- hooks.refresh();
407
- hooks.buildOk();
408
- // This is used by the Next.js integration test suite to notify it when HMR
409
- // updates have been completed.
410
- // TODO: Only run this in test environments (gate by `process.env.__NEXT_TEST_MODE`)
411
- if (globalThis.__NEXT_HMR_CB) {
412
- globalThis.__NEXT_HMR_CB();
413
- globalThis.__NEXT_HMR_CB = null;
414
- }
415
- }
416
- function subscribeToChunkUpdate(chunkListPath, sendMessage, callback) {
417
- return subscribeToUpdate({
418
- path: chunkListPath
419
- }, sendMessage, callback);
420
- }
421
- function subscribeToUpdate(resource, sendMessage, callback) {
422
- const key = resourceKey(resource);
423
- let callbackSet;
424
- const existingCallbackSet = updateCallbackSets.get(key);
425
- if (!existingCallbackSet) {
426
- callbackSet = {
427
- callbacks: new Set([
428
- callback
429
- ]),
430
- unsubscribe: subscribeToUpdates(sendMessage, resource)
431
- };
432
- updateCallbackSets.set(key, callbackSet);
433
- } else {
434
- existingCallbackSet.callbacks.add(callback);
435
- callbackSet = existingCallbackSet;
436
- }
437
- return ()=>{
438
- callbackSet.callbacks.delete(callback);
439
- if (callbackSet.callbacks.size === 0) {
440
- callbackSet.unsubscribe();
441
- updateCallbackSets.delete(key);
442
- }
443
- };
444
- }
445
- function triggerUpdate(msg) {
446
- const key = resourceKey(msg.resource);
447
- const callbackSet = updateCallbackSets.get(key);
448
- if (!callbackSet) {
449
- return;
450
- }
451
- for (const callback of callbackSet.callbacks){
452
- callback(msg);
453
- }
454
- if (msg.type === 'notFound') {
455
- // This indicates that the resource which we subscribed to either does not exist or
456
- // has been deleted. In either case, we should clear all update callbacks, so if a
457
- // new subscription is created for the same resource, it will send a new "subscribe"
458
- // message to the server.
459
- // No need to send an "unsubscribe" message to the server, it will have already
460
- // dropped the update stream before sending the "notFound" message.
461
- updateCallbackSets.delete(key);
462
- }
463
- }
464
- }),
465
- ];
466
-
467
- //# sourceMappingURL=%5Bturbopack%5D_browser_dev_hmr-client_hmr-client_ts_818f0fdf._.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sections": [
5
- {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["turbopack:///[turbopack]/browser/dev/hmr-client/hmr-client.ts"],"sourcesContent":["/// <reference path=\"../../../shared/runtime-types.d.ts\" />\n/// <reference path=\"../../runtime/base/dev-globals.d.ts\" />\n/// <reference path=\"../../runtime/base/dev-protocol.d.ts\" />\n/// <reference path=\"../../runtime/base/dev-extensions.ts\" />\n\ntype SendMessage = (msg: any) => void\nexport type WebSocketMessage =\n | {\n type: 'turbopack-connected'\n }\n | {\n type: 'turbopack-message'\n data: Record<string, any>\n }\n\nexport type ClientOptions = {\n addMessageListener: (cb: (msg: WebSocketMessage) => void) => void\n sendMessage: SendMessage\n onUpdateError: (err: unknown) => void\n}\n\nexport function connect({\n addMessageListener,\n sendMessage,\n onUpdateError = console.error,\n}: ClientOptions) {\n addMessageListener((msg) => {\n switch (msg.type) {\n case 'turbopack-connected':\n handleSocketConnected(sendMessage)\n break\n default:\n try {\n if (Array.isArray(msg.data)) {\n for (let i = 0; i < msg.data.length; i++) {\n handleSocketMessage(msg.data[i] as ServerMessage)\n }\n } else {\n handleSocketMessage(msg.data as ServerMessage)\n }\n applyAggregatedUpdates()\n } catch (e: unknown) {\n console.warn(\n '[Fast Refresh] performing full reload\\n\\n' +\n \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" +\n 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' +\n 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' +\n 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' +\n 'Fast Refresh requires at least one parent function component in your React tree.'\n )\n onUpdateError(e)\n location.reload()\n }\n break\n }\n })\n\n const queued = globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS\n if (queued != null && !Array.isArray(queued)) {\n throw new Error('A separate HMR handler was already registered')\n }\n globalThis.TURBOPACK_CHUNK_UPDATE_LISTENERS = {\n push: ([chunkPath, callback]: [ChunkListPath, UpdateCallback]) => {\n subscribeToChunkUpdate(chunkPath, sendMessage, callback)\n },\n }\n\n if (Array.isArray(queued)) {\n for (const [chunkPath, callback] of queued) {\n subscribeToChunkUpdate(chunkPath, sendMessage, callback)\n }\n }\n}\n\ntype UpdateCallbackSet = {\n callbacks: Set<UpdateCallback>\n unsubscribe: () => void\n}\n\nconst updateCallbackSets: Map<ResourceKey, UpdateCallbackSet> = new Map()\n\nfunction sendJSON(sendMessage: SendMessage, message: ClientMessage) {\n sendMessage(JSON.stringify(message))\n}\n\ntype ResourceKey = string\n\nfunction resourceKey(resource: ResourceIdentifier): ResourceKey {\n return JSON.stringify({\n path: resource.path,\n headers: resource.headers || null,\n })\n}\n\nfunction subscribeToUpdates(\n sendMessage: SendMessage,\n resource: ResourceIdentifier\n): () => void {\n sendJSON(sendMessage, {\n type: 'turbopack-subscribe',\n ...resource,\n })\n\n return () => {\n sendJSON(sendMessage, {\n type: 'turbopack-unsubscribe',\n ...resource,\n })\n }\n}\n\nfunction handleSocketConnected(sendMessage: SendMessage) {\n for (const key of updateCallbackSets.keys()) {\n subscribeToUpdates(sendMessage, JSON.parse(key))\n }\n}\n\n// we aggregate all pending updates until the issues are resolved\nconst chunkListsWithPendingUpdates: Map<ResourceKey, PartialServerMessage> =\n new Map()\n\nfunction aggregateUpdates(msg: PartialServerMessage) {\n const key = resourceKey(msg.resource)\n let aggregated = chunkListsWithPendingUpdates.get(key)\n\n if (aggregated) {\n aggregated.instruction = mergeChunkListUpdates(\n aggregated.instruction,\n msg.instruction\n )\n } else {\n chunkListsWithPendingUpdates.set(key, msg)\n }\n}\n\nfunction applyAggregatedUpdates() {\n if (chunkListsWithPendingUpdates.size === 0) return\n hooks.beforeRefresh()\n for (const msg of chunkListsWithPendingUpdates.values()) {\n triggerUpdate(msg)\n }\n chunkListsWithPendingUpdates.clear()\n finalizeUpdate()\n}\n\nfunction mergeChunkListUpdates(\n updateA: ChunkListUpdate,\n updateB: ChunkListUpdate\n): ChunkListUpdate {\n let chunks\n if (updateA.chunks != null) {\n if (updateB.chunks == null) {\n chunks = updateA.chunks\n } else {\n chunks = mergeChunkListChunks(updateA.chunks, updateB.chunks)\n }\n } else if (updateB.chunks != null) {\n chunks = updateB.chunks\n }\n\n let merged\n if (updateA.merged != null) {\n if (updateB.merged == null) {\n merged = updateA.merged\n } else {\n // Since `merged` is an array of updates, we need to merge them all into\n // one, consistent update.\n // Since there can only be `EcmascriptMergeUpdates` in the array, there is\n // no need to key on the `type` field.\n let update = updateA.merged[0]\n for (let i = 1; i < updateA.merged.length; i++) {\n update = mergeChunkListEcmascriptMergedUpdates(\n update,\n updateA.merged[i]\n )\n }\n\n for (let i = 0; i < updateB.merged.length; i++) {\n update = mergeChunkListEcmascriptMergedUpdates(\n update,\n updateB.merged[i]\n )\n }\n\n merged = [update]\n }\n } else if (updateB.merged != null) {\n merged = updateB.merged\n }\n\n return {\n type: 'ChunkListUpdate',\n chunks,\n merged,\n }\n}\n\nfunction mergeChunkListChunks(\n chunksA: Record<ChunkPath, ChunkUpdate>,\n chunksB: Record<ChunkPath, ChunkUpdate>\n): Record<ChunkPath, ChunkUpdate> {\n const chunks: Record<ChunkPath, ChunkUpdate> = {}\n\n for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA) as Array<\n [ChunkPath, ChunkUpdate]\n >) {\n const chunkUpdateB = chunksB[chunkPath]\n if (chunkUpdateB != null) {\n const mergedUpdate = mergeChunkUpdates(chunkUpdateA, chunkUpdateB)\n if (mergedUpdate != null) {\n chunks[chunkPath] = mergedUpdate\n }\n } else {\n chunks[chunkPath] = chunkUpdateA\n }\n }\n\n for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB) as Array<\n [ChunkPath, ChunkUpdate]\n >) {\n if (chunks[chunkPath] == null) {\n chunks[chunkPath] = chunkUpdateB\n }\n }\n\n return chunks\n}\n\nfunction mergeChunkUpdates(\n updateA: ChunkUpdate,\n updateB: ChunkUpdate\n): ChunkUpdate | undefined {\n if (\n (updateA.type === 'added' && updateB.type === 'deleted') ||\n (updateA.type === 'deleted' && updateB.type === 'added')\n ) {\n return undefined\n }\n\n if (updateA.type === 'partial') {\n invariant(updateA.instruction, 'Partial updates are unsupported')\n }\n\n if (updateB.type === 'partial') {\n invariant(updateB.instruction, 'Partial updates are unsupported')\n }\n\n return undefined\n}\n\nfunction mergeChunkListEcmascriptMergedUpdates(\n mergedA: EcmascriptMergedUpdate,\n mergedB: EcmascriptMergedUpdate\n): EcmascriptMergedUpdate {\n const entries = mergeEcmascriptChunkEntries(mergedA.entries, mergedB.entries)\n const chunks = mergeEcmascriptChunksUpdates(mergedA.chunks, mergedB.chunks)\n\n return {\n type: 'EcmascriptMergedUpdate',\n entries,\n chunks,\n }\n}\n\nfunction mergeEcmascriptChunkEntries(\n entriesA: Record<ModuleId, EcmascriptModuleEntry> | undefined,\n entriesB: Record<ModuleId, EcmascriptModuleEntry> | undefined\n): Record<ModuleId, EcmascriptModuleEntry> {\n return { ...entriesA, ...entriesB }\n}\n\nfunction mergeEcmascriptChunksUpdates(\n chunksA: Record<ChunkPath, EcmascriptMergedChunkUpdate> | undefined,\n chunksB: Record<ChunkPath, EcmascriptMergedChunkUpdate> | undefined\n): Record<ChunkPath, EcmascriptMergedChunkUpdate> | undefined {\n if (chunksA == null) {\n return chunksB\n }\n\n if (chunksB == null) {\n return chunksA\n }\n\n const chunks: Record<ChunkPath, EcmascriptMergedChunkUpdate> = {}\n\n for (const [chunkPath, chunkUpdateA] of Object.entries(chunksA) as Array<\n [ChunkPath, EcmascriptMergedChunkUpdate]\n >) {\n const chunkUpdateB = chunksB[chunkPath]\n if (chunkUpdateB != null) {\n const mergedUpdate = mergeEcmascriptChunkUpdates(\n chunkUpdateA,\n chunkUpdateB\n )\n if (mergedUpdate != null) {\n chunks[chunkPath] = mergedUpdate\n }\n } else {\n chunks[chunkPath] = chunkUpdateA\n }\n }\n\n for (const [chunkPath, chunkUpdateB] of Object.entries(chunksB) as Array<\n [ChunkPath, EcmascriptMergedChunkUpdate]\n >) {\n if (chunks[chunkPath] == null) {\n chunks[chunkPath] = chunkUpdateB\n }\n }\n\n if (Object.keys(chunks).length === 0) {\n return undefined\n }\n\n return chunks\n}\n\nfunction mergeEcmascriptChunkUpdates(\n updateA: EcmascriptMergedChunkUpdate,\n updateB: EcmascriptMergedChunkUpdate\n): EcmascriptMergedChunkUpdate | undefined {\n if (updateA.type === 'added' && updateB.type === 'deleted') {\n // These two completely cancel each other out.\n return undefined\n }\n\n if (updateA.type === 'deleted' && updateB.type === 'added') {\n const added = []\n const deleted = []\n const deletedModules = new Set(updateA.modules ?? [])\n const addedModules = new Set(updateB.modules ?? [])\n\n for (const moduleId of addedModules) {\n if (!deletedModules.has(moduleId)) {\n added.push(moduleId)\n }\n }\n\n for (const moduleId of deletedModules) {\n if (!addedModules.has(moduleId)) {\n deleted.push(moduleId)\n }\n }\n\n if (added.length === 0 && deleted.length === 0) {\n return undefined\n }\n\n return {\n type: 'partial',\n added,\n deleted,\n }\n }\n\n if (updateA.type === 'partial' && updateB.type === 'partial') {\n const added = new Set([...(updateA.added ?? []), ...(updateB.added ?? [])])\n const deleted = new Set([\n ...(updateA.deleted ?? []),\n ...(updateB.deleted ?? []),\n ])\n\n if (updateB.added != null) {\n for (const moduleId of updateB.added) {\n deleted.delete(moduleId)\n }\n }\n\n if (updateB.deleted != null) {\n for (const moduleId of updateB.deleted) {\n added.delete(moduleId)\n }\n }\n\n return {\n type: 'partial',\n added: [...added],\n deleted: [...deleted],\n }\n }\n\n if (updateA.type === 'added' && updateB.type === 'partial') {\n const modules = new Set([\n ...(updateA.modules ?? []),\n ...(updateB.added ?? []),\n ])\n\n for (const moduleId of updateB.deleted ?? []) {\n modules.delete(moduleId)\n }\n\n return {\n type: 'added',\n modules: [...modules],\n }\n }\n\n if (updateA.type === 'partial' && updateB.type === 'deleted') {\n // We could eagerly return `updateB` here, but this would potentially be\n // incorrect if `updateA` has added modules.\n\n const modules = new Set(updateB.modules ?? [])\n\n if (updateA.added != null) {\n for (const moduleId of updateA.added) {\n modules.delete(moduleId)\n }\n }\n\n return {\n type: 'deleted',\n modules: [...modules],\n }\n }\n\n // Any other update combination is invalid.\n\n return undefined\n}\n\nfunction invariant(_: never, message: string): never {\n throw new Error(`Invariant: ${message}`)\n}\n\nconst CRITICAL = ['bug', 'error', 'fatal']\n\nfunction compareByList(list: any[], a: any, b: any) {\n const aI = list.indexOf(a) + 1 || list.length\n const bI = list.indexOf(b) + 1 || list.length\n return aI - bI\n}\n\nconst chunksWithIssues: Map<ResourceKey, Issue[]> = new Map()\n\nfunction emitIssues() {\n const issues = []\n const deduplicationSet = new Set()\n\n for (const [_, chunkIssues] of chunksWithIssues) {\n for (const chunkIssue of chunkIssues) {\n if (deduplicationSet.has(chunkIssue.formatted)) continue\n\n issues.push(chunkIssue)\n deduplicationSet.add(chunkIssue.formatted)\n }\n }\n\n sortIssues(issues)\n\n hooks.issues(issues)\n}\n\nfunction handleIssues(msg: ServerMessage): boolean {\n const key = resourceKey(msg.resource)\n let hasCriticalIssues = false\n\n for (const issue of msg.issues) {\n if (CRITICAL.includes(issue.severity)) {\n hasCriticalIssues = true\n }\n }\n\n if (msg.issues.length > 0) {\n chunksWithIssues.set(key, msg.issues)\n } else if (chunksWithIssues.has(key)) {\n chunksWithIssues.delete(key)\n }\n\n emitIssues()\n\n return hasCriticalIssues\n}\n\nconst SEVERITY_ORDER = ['bug', 'fatal', 'error', 'warning', 'info', 'log']\nconst CATEGORY_ORDER = [\n 'parse',\n 'resolve',\n 'code generation',\n 'rendering',\n 'typescript',\n 'other',\n]\n\nfunction sortIssues(issues: Issue[]) {\n issues.sort((a, b) => {\n const first = compareByList(SEVERITY_ORDER, a.severity, b.severity)\n if (first !== 0) return first\n return compareByList(CATEGORY_ORDER, a.category, b.category)\n })\n}\n\nconst hooks = {\n beforeRefresh: () => {},\n refresh: () => {},\n buildOk: () => {},\n issues: (_issues: Issue[]) => {},\n}\n\nexport function setHooks(newHooks: typeof hooks) {\n Object.assign(hooks, newHooks)\n}\n\nfunction handleSocketMessage(msg: ServerMessage) {\n sortIssues(msg.issues)\n\n handleIssues(msg)\n\n switch (msg.type) {\n case 'issues':\n // issues are already handled\n break\n case 'partial':\n // aggregate updates\n aggregateUpdates(msg)\n break\n default:\n // run single update\n const runHooks = chunkListsWithPendingUpdates.size === 0\n if (runHooks) hooks.beforeRefresh()\n triggerUpdate(msg)\n if (runHooks) finalizeUpdate()\n break\n }\n}\n\nfunction finalizeUpdate() {\n hooks.refresh()\n hooks.buildOk()\n\n // This is used by the Next.js integration test suite to notify it when HMR\n // updates have been completed.\n // TODO: Only run this in test environments (gate by `process.env.__NEXT_TEST_MODE`)\n if (globalThis.__NEXT_HMR_CB) {\n globalThis.__NEXT_HMR_CB()\n globalThis.__NEXT_HMR_CB = null\n }\n}\n\nfunction subscribeToChunkUpdate(\n chunkListPath: ChunkListPath,\n sendMessage: SendMessage,\n callback: UpdateCallback\n): () => void {\n return subscribeToUpdate(\n {\n path: chunkListPath,\n },\n sendMessage,\n callback\n )\n}\n\nexport function subscribeToUpdate(\n resource: ResourceIdentifier,\n sendMessage: SendMessage,\n callback: UpdateCallback\n) {\n const key = resourceKey(resource)\n let callbackSet: UpdateCallbackSet\n const existingCallbackSet = updateCallbackSets.get(key)\n if (!existingCallbackSet) {\n callbackSet = {\n callbacks: new Set([callback]),\n unsubscribe: subscribeToUpdates(sendMessage, resource),\n }\n updateCallbackSets.set(key, callbackSet)\n } else {\n existingCallbackSet.callbacks.add(callback)\n callbackSet = existingCallbackSet\n }\n\n return () => {\n callbackSet.callbacks.delete(callback)\n\n if (callbackSet.callbacks.size === 0) {\n callbackSet.unsubscribe()\n updateCallbackSets.delete(key)\n }\n }\n}\n\nfunction triggerUpdate(msg: ServerMessage) {\n const key = resourceKey(msg.resource)\n const callbackSet = updateCallbackSets.get(key)\n if (!callbackSet) {\n return\n }\n\n for (const callback of callbackSet.callbacks) {\n callback(msg)\n }\n\n if (msg.type === 'notFound') {\n // This indicates that the resource which we subscribed to either does not exist or\n // has been deleted. In either case, we should clear all update callbacks, so if a\n // new subscription is created for the same resource, it will send a new \"subscribe\"\n // message to the server.\n // No need to send an \"unsubscribe\" message to the server, it will have already\n // dropped the update stream before sending the \"notFound\" message.\n updateCallbackSets.delete(key)\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[0],"debugId":null}}]
6
- }
@@ -1,12 +0,0 @@
1
- module.exports = [
2
- "[turbopack]/browser/dev/hmr-client/hmr-client.ts [app-ssr] (ecmascript, async loader)", ((__turbopack_context__) => {
3
-
4
- __turbopack_context__.v((parentImport) => {
5
- return Promise.all([
6
- "server/chunks/ssr/[turbopack]_browser_dev_hmr-client_hmr-client_ts_818f0fdf._.js"
7
- ].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
8
- return parentImport("[turbopack]/browser/dev/hmr-client/hmr-client.ts [app-ssr] (ecmascript)");
9
- });
10
- });
11
- }),
12
- ];
@@ -1,5 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sections": []
5
- }