From fc907e2f81698d89502fb2ee0375e6d98a492c13 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 9 Sep 2021 23:33:34 -0700 Subject: current --- .vscode/launch.json | 4 +- examples/hello-next/bun-framework-next/.npmignore | 2 - .../hello-next/bun-framework-next/bun-error.css | 289 -------- .../hello-next/bun-framework-next/bun-error.tsx | 809 --------------------- .../bun-framework-next/bun-error/close.png | Bin 757 -> 0 bytes .../bun-framework-next/bun-error/error.png | Bin 717 -> 0 bytes .../bun-framework-next/bun-error/powered-by.png | Bin 2863 -> 0 bytes .../bun-framework-next/bun-error/powered-by.webp | Bin 1316 -> 0 bytes .../bun-framework-next/bun-runtime-error.ts | 163 ----- .../bun-framework-next/client.development.tsx | 3 +- .../bun-framework-next/fallback.development.tsx | 82 --- examples/hello-next/bun-framework-next/index.js | 0 .../hello-next/bun-framework-next/next-server.tsx | 0 .../hello-next/bun-framework-next/package.json | 81 --- .../hello-next/bun-framework-next/page-loader.ts | 147 ---- examples/hello-next/bun-framework-next/render.tsx | 0 .../bun-framework-next/renderDocument.tsx | 722 ------------------ .../hello-next/bun-framework-next/route-loader.ts | 0 .../bun-framework-next/server.development.tsx | 79 -- .../bun-framework-next/server.production.tsx | 0 .../hello-next/bun-framework-next/tsconfig.json | 21 - examples/hello-next/package.json | 5 +- examples/hello-next/pages/errortest.tsx | 14 - examples/hello-next/pages/index.tsx | 151 ++-- packages/bun-framework-next/bun-error.css | 289 ++++++++ packages/bun-framework-next/bun-error.tsx | 809 +++++++++++++++++++++ packages/bun-framework-next/bun-error/close.png | Bin 0 -> 757 bytes packages/bun-framework-next/bun-error/error.png | Bin 0 -> 717 bytes .../bun-framework-next/bun-error/powered-by.png | Bin 0 -> 2863 bytes .../bun-framework-next/bun-error/powered-by.webp | Bin 0 -> 1316 bytes packages/bun-framework-next/bun-runtime-error.ts | 163 +++++ packages/bun-framework-next/client.development.tsx | 5 +- .../bun-framework-next/fallback.development.tsx | 62 +- .../bun-framework-next/next-image-polyfill.tsx | 36 + packages/bun-framework-next/package.json | 3 + packages/bun-framework-next/page-loader.ts | 5 + packages/bun-framework-next/polyfills.tsx | 23 + packages/bun-framework-next/renderDocument.tsx | 19 +- packages/bun-framework-next/server.development.tsx | 38 +- src/api/schema.d.ts | 2 + src/api/schema.js | 18 + src/api/schema.peechy | 3 + src/api/schema.zig | 15 + src/bundler.zig | 568 ++++++++------- src/deps/iguanaTLS/test/DSTRootCAX3.crt.pem | 20 + .../iguanaTLS/test/DigiCertGlobalRootCA.crt.pem | 22 + .../test/DigiCertHighAssuranceEVRootCA.crt.pem | 23 + src/deps/iguanaTLS/test/badssl.com-client.pem | 61 ++ src/deps/iguanaTLS/test/github.der | Bin 0 -> 969 bytes src/deps/iguanaTLS/test/github.pem | 23 + src/deps/picohttp.zig | 8 + src/http_client.zig | 14 +- src/javascript/jsc/webcore/response.zig | 28 +- src/js_ast.zig | 12 + src/js_lexer.zig | 1 + src/js_parser/js_parser.zig | 30 +- src/js_printer.zig | 19 +- src/json_parser.zig | 12 +- src/node-fallbacks/@vercel_fetch.js | 11 +- src/node-fallbacks/isomorphic-fetch.js | 2 +- src/node-fallbacks/node-fetch.js | 2 +- src/options.zig | 7 + src/query_string_map.zig | 7 +- src/resolver/package_json.zig | 29 + src/resolver/resolver.zig | 2 + src/runtime.js | 26 +- src/runtime.version | 2 +- src/runtime.zig | 20 +- src/runtime/hmr.ts | 2 +- src/string_immutable.zig | 15 + 70 files changed, 2181 insertions(+), 2847 deletions(-) delete mode 100644 examples/hello-next/bun-framework-next/.npmignore delete mode 100644 examples/hello-next/bun-framework-next/bun-error.css delete mode 100644 examples/hello-next/bun-framework-next/bun-error.tsx delete mode 100644 examples/hello-next/bun-framework-next/bun-error/close.png delete mode 100644 examples/hello-next/bun-framework-next/bun-error/error.png delete mode 100644 examples/hello-next/bun-framework-next/bun-error/powered-by.png delete mode 100644 examples/hello-next/bun-framework-next/bun-error/powered-by.webp delete mode 100644 examples/hello-next/bun-framework-next/bun-runtime-error.ts delete mode 100644 examples/hello-next/bun-framework-next/fallback.development.tsx delete mode 100644 examples/hello-next/bun-framework-next/index.js delete mode 100644 examples/hello-next/bun-framework-next/next-server.tsx delete mode 100644 examples/hello-next/bun-framework-next/package.json delete mode 100644 examples/hello-next/bun-framework-next/page-loader.ts delete mode 100644 examples/hello-next/bun-framework-next/render.tsx delete mode 100644 examples/hello-next/bun-framework-next/renderDocument.tsx delete mode 100644 examples/hello-next/bun-framework-next/route-loader.ts delete mode 100644 examples/hello-next/bun-framework-next/server.development.tsx delete mode 100644 examples/hello-next/bun-framework-next/server.production.tsx delete mode 100644 examples/hello-next/bun-framework-next/tsconfig.json delete mode 100644 examples/hello-next/pages/errortest.tsx create mode 100644 packages/bun-framework-next/bun-error.css create mode 100644 packages/bun-framework-next/bun-error.tsx create mode 100644 packages/bun-framework-next/bun-error/close.png create mode 100644 packages/bun-framework-next/bun-error/error.png create mode 100644 packages/bun-framework-next/bun-error/powered-by.png create mode 100644 packages/bun-framework-next/bun-error/powered-by.webp create mode 100644 packages/bun-framework-next/bun-runtime-error.ts create mode 100644 packages/bun-framework-next/next-image-polyfill.tsx create mode 100644 packages/bun-framework-next/polyfills.tsx create mode 100644 src/deps/iguanaTLS/test/DSTRootCAX3.crt.pem create mode 100644 src/deps/iguanaTLS/test/DigiCertGlobalRootCA.crt.pem create mode 100644 src/deps/iguanaTLS/test/DigiCertHighAssuranceEVRootCA.crt.pem create mode 100644 src/deps/iguanaTLS/test/badssl.com-client.pem create mode 100644 src/deps/iguanaTLS/test/github.der create mode 100644 src/deps/iguanaTLS/test/github.pem diff --git a/.vscode/launch.json b/.vscode/launch.json index 38242e143..5c42d297a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -98,7 +98,7 @@ // "args": ["--serve", "--origin=http://localhost:3000"], "args": ["dev", "--origin=http://localhost:3000"], "cwd": "${workspaceFolder}/examples/hello-next", - "console": "internalConsole" + "console": "internalConsole" }, { "type": "lldb", @@ -154,7 +154,7 @@ "request": "launch", "name": "Demo .bun", "program": "${workspaceFolder}/build/debug/macos-x86_64/bun", - "args": ["bun", "--use=./bun-framework-next"], + "args": ["bun", "--use=bun-framework-next"], "cwd": "${workspaceFolder}/examples/hello-next", "console": "internalConsole" }, diff --git a/examples/hello-next/bun-framework-next/.npmignore b/examples/hello-next/bun-framework-next/.npmignore deleted file mode 100644 index dc0954477..000000000 --- a/examples/hello-next/bun-framework-next/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -*.bun -node_modules \ No newline at end of file diff --git a/examples/hello-next/bun-framework-next/bun-error.css b/examples/hello-next/bun-framework-next/bun-error.css deleted file mode 100644 index c5ed9881b..000000000 --- a/examples/hello-next/bun-framework-next/bun-error.css +++ /dev/null @@ -1,289 +0,0 @@ -:host { - --bun-error-color: #e33737; - --bun-error-monospace: ui-monospace, Menlo, Monaco, "Cascadia Mono", - "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", - "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace; -} - -a { - color: inherit; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} -#BunErrorOverlay-container { - box-shadow: 0px 16px 24px rgba(0, 0, 0, 0.06), 0px 2px 6px rgba(0, 0, 0, 0.1), - 0px 0px 1px rgba(0, 0, 0, 0.04); - backdrop-filter: blur(42px); - backface-visibility: visible; - border: inset 1px solid rgba(0, 0, 0, 0.2); - border-radius: 17px; - background-color: rgba(255, 255, 255, 0.92); - width: 480px; - - position: fixed; - top: 120px; - right: 48px; - z-index: 999999; - - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, - Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; -} - -#BunErrorOverlay-container a { - color: inherit; -} - -.BunError-Summary-ErrorIcon { - content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAgCAYAAAB3j6rJAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJiSURBVHgBzZdLUttAEIa7RwpVeKUD4Ip8hFSB7V3kG8AJgBPgG+CcAG4QcwPfIFpiigU5gRWcqmy1AVwVaTo9Y+yyiEeakc3jX7j0GEmfe7r/6QH4IELYUJNuN/LyPMwRU2g04lYcp1BDtUEYIPSJvvNhtHI5QcTB3vX1FThKQE0xxI8XEEohEQ2n+/sROKoWyP3BwYn6qHGA553DW4CgEFUfin6328fwmiDTbldBhFXjiHNlEkUBWMoJRCUoSNm3HB6Kx0fbsW4gnpQDQLT/l4hntlGxBlHR4NJ0mndW4D08WCWuNYgv5YXhVsJmNASi0bqbnNj9P2pKtwGiyxXxcM2tJNvd/bI3Hp82b26OJOK3dc9nc+PbHMRUrhyJgqV7QowMr4iqTK4SpNK8VvRXSnNiVphcKYhO0BLzIkvAZ5WaXCmID6AeDGFLYpO7NJWzEUSbF9EAHKTagYohgcnkjCDavKoVgqNMJrcWpKZ5AQlh46LBp6enCysQ36LuFy8tnBFZ2Tkn+cnLcv6vQ1PlypViC6I+PsiEUB3ZomMLLZ+Mm+Nxzwgy7XQmsMVKKVWe95q3t7E6LEyNi3ktRZSWrTWl8rxl5JcgVeZlUJI1Gq3FWsM+cQpuCn91Ov0CiEd0Bo7RkERXq2tNPps5R4UBzlU5axAdDQDrbmr5EsSvhQs7OxG4S5ucTtb7dntYxzeeNWLzi3MhWpwnxy4d3IpSX/0yxGeor0OGmPcqWHu/FixypNY2cZvSINxZ/YT3VTIHmc0u1Qm8k9R+WYO07u7SDLHH+1bnzfNGYjPkhfJIbdr/AfAS02LsKGiuAAAAAElFTkSuQmCC"); - width: 20px; - height: 19px; - - margin-right: 6px; - display: block; -} - -.BunError-Summary-CloseIcon { - content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKKSURBVHgBxZjpTsMwEISnaTmLKLf4AX94/7fiFlRcJaUKl6exK8e1k7XTY6QVUbDjj/V4bdNBe2Uquio2nPdfKn6RqA7StKuir2JHxXZNO4LlKkb65zeWBLavYxdpelMxhABQCkaQI6QDuRrqCEoCdqjiFItXoeIagex1Gzqfo8zUMsSxByo+Vfz4fokaqH0sVx09xhxcCOwY5RSuQgbuHVZ58YGx0RlWK8LtoYT74wsXjEXyHM3eW4Y4JgFZ76ZV2xancAPrE+3T44MNRiCp2bnd5MK29A0rfyFsP7VRz3pxLOxoF8ctFZeYz7wRPfOgn/mHX6B5Rui1zP7gDmQaWc8TlEXytwGKKpy+dRoYMG41Um+52fHBuVBG0jH6ZpAtyMVV20MYLgRFq+xBpm1TFrjtbAo7dfUAI1SzxMr9ocF8UFIPUx2TsQxx4pTQ9G7migVAVYBiwagQnK0kKBsotdITblDz7eRDgAH7QZrop9CBj/67gbywVmTAxGdxVKEeGtoQKgkusz4QoxDUbK+zZOCibkzGW/yYtMawTNx73tPkJ/CXEj7zMEjPSY7zRWYNJtUwAGVWX2i1sgi/QabcgJn7X4p8JSEEJ139467TqS/oxAvup34+QrhOmR1ijHLV89uS2xY9+WjPN7N3hbRiu0hNj1U2BKfzGesVs/XCBzc7r0j32iLEbE1Xs2/aHtHivzQtxEzNTia+VUIoGnaA1Yl3iEptDC1fblGcb2nRbSNC3cGZpbq6MtGdCJf6f7Qm0c+38BwiJANKbzexeoJegT7FZOIA5SbdFjDXUJO6RrFTRChe82Jv7PQPbcFyMJZ0aOMd3qx47SMoyw5B6VnjF2aECyjXMFEl6B+GYop4atKAigAAAABJRU5ErkJggg=="); - width: 22px; - height: 22px; - border-radius: 50%; - cursor: pointer; -} - -.BunError-Summary-CloseIcon:hover { - transform: scale(1.2); - - background-color: rgb(255, 255, 255); -} - -.BunError-Summary { - display: grid; - grid-template-columns: min-content auto min-content; - grid-template-rows: 46px; - align-items: center; - padding: 0 18px; - border-bottom: 1px solid rgb(220, 220, 220); -} - -.BunError-footer { - display: grid; - padding: 12px 18px; - justify-content: flex-end; - border-top: 1px solid rgb(220, 220, 220); - align-items: center; -} - -.BunError-Summary-Title { - font-weight: 500; - letter-spacing: 0.36px; -} - -.BunError-ErrorTag, -.BunError-error-code { - color: rgb(165, 165, 165); - font-weight: 500; - font-size: 12pt; -} - -.BunError-ErrorTag { - font-size: 14px; - text-transform: uppercase; - font-weight: 300; -} - -.BunError-error-header { - display: flex; - align-items: center; - gap: 0.5ch; -} - -.BunError-error-message { - color: var(--bun-error-color); - font-size: 16pt; - font-weight: bold; -} - -.BunError-list { - margin-top: 14px; - gap: 14px; -} - -.BunError-error-subtitle, -.BunError-error-header, -.BunError-error-message { - padding-left: 18px; - padding-right: 18px; -} - -.BunError-error-subtitle { - font-size: 500; -} - -.BunError-NativeStackTrace { - margin-top: 0; - width: 100%; -} - -.BunError-NativeStackTrace-filename { - padding: 8px 18px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - font-weight: 500; - letter-spacing: 0.36px; - margin-bottom: 8px; - display: block; -} - -.BunError-NativeStackTrace-filename:hover { - text-decoration: underline; -} - -.BunError-SourceLines-lines { -} - -.BunError-SourceLines { - display: grid; - grid-template-columns: min-content auto; - grid-template-rows: repeat(16px, 6); - column-gap: 13px; - font-size: 14px; - padding-left: 24px; - align-items: center; - position: relative; - overflow-x: auto; -} - -.BunError-SourceLine-text { - white-space: pre; - display: block; - - font-family: var(--bun-error-monospace); -} - -.BunError-SourceLine-number { - font-variant: tabular-nums; - text-align: right; - user-select: none; - -webkit-user-select: none; -} - -.BunError-SourceLine-number--empty { - color: rgb(165, 165, 165); -} - -.BunError-SourceLine-number, -.BunError-SourceLine-text { - height: 18px; -} - -.BunError-SourceLines-highlighter--0, -.BunError-SourceLines-highlighter--1, -.BunError-SourceLines-highlighter--2, -.BunError-SourceLines-highlighter--3, -.BunError-SourceLines-highlighter--4, -.BunError-SourceLines-highlighter--5 { - position: absolute; -} - -.BunError-SourceLine-text--highlight { - color: #e33737; -} - -#BunError-poweredBy { - height: 16px; - - content: url("data:image/webp;base64,UklGRhwFAABXRUJQVlA4TBAFAAAv3MAHEBeioG0jx3f8MY+fGAgkbdz7Zz4Ekjbu/TMftpEkOaFfC5vgSJ4sHswjm7TZk7R34AJUQAFAQwYAQAUkQAZUAFTUz5XDIaPd77AAN2DlBrAAG/Ai8CFwcKICP6L+BzgTEBEBp6xqWyZJejDAWERMQEwHEuEip1yEmPDc/w1qRs7/OqL/EyBbtu22bQ4ViCHTKM0gUUNmIjMmZfu6s7nz3v//KwIgRfe3iP5PAP9bdVNLfR/hfdqK3bxLjDgr9Q4JGpfk7xHxPPu8KRdApEaiIpdSr8iU9id7Cn+vE6WbWqRuTORqm7pujCV+LKW8jyymEZHGALqpRer76LU4NXya9fhb5XgQZ2ks02uxtgBmtXSrBEAr1jO04mxfiazx06Lp71TgQXzbzoPYWSMoxV4pGLEWaMXz/xuHIyPevACm4r6BEXcaNBZeGPGt1NvmKij9pFL47cE48TgLaksRlF6SgnhtsKbrV/w0rVdO2yhdg+lKg+naB9OvK/+Ko+2KrNfeTfuV0/pp2q5rj3/G9OtK22C7ou3Laj6EXEvfHMYnOvM4D8R+Lf434PQ9/din0Vrt6wYsundZj+7QABzNPoeumpMa4Gj2JQ7mqlq3735vqjUCWmxzoq9D9C/217cCWbOtVPXsNvXOt7pD0NxVLV2xAklbflW9A6BF/YFD/clVawBi1XYX3+WbrHdRa4SiE8uWaDJcXbo4GhmrzhM41BWo+jtw6DtAsQJRfQegmSFqjcCpaeC9ALFaI5A0AVnvCWL1G2uEeOsJSXUnJFpjuI1xyWZsUVfok56wa6ZPesChEXZLc4VFN8ga6Zt1FAF23emL70DQGgGW7yJAbL4DQbedOdGvceRjyE2vbRD0hpfOg6h/wKw7vDyyJxwa4PZmmDV2hb74Zph0ZtHM8P6mMMw6Q5EmAA4pwzhOxrDpNw9oVijKWCtQzVCddwsUC6DWYfvi1jpsurLrMcrfnKOkOyySBkKi9UjOnkUcVd9QvzqtzFaCBprH6HPlSfVhjd3+J6VnNNoCmih8weaRVigaPhVg0XiYobgvOgPNm8dPKk93PUavb/KDDUhEExzSFiPJ/e7GcgwWLXDqOlg0A6G5FzdInocV4Pb9YYuPXhpGa4RZy6h+8x4VnYGZSIdE87GkPnJbj6WG7qU7LFoGWTeAYtYAi7WYu6THIHk/OjQNkm+g6dolv/HoVq30W9pqosleymsXay/vPVnXuL60RqDoayaeWukPtQA0detC831MxFPzo1A1RaZTbyBp3eeYbF+Z5pia7gNNlNEae/EtMHsOp+MNIFbHNQ6imrqsho7f/FjjI+bquEaA4rDmb87q8IfhZEdEP8ZyimkfHkXcq/qzMIy5qe2aGBdb7BY9GcfStTQBFM8RMXftFRmmpv7Ewxo+heYWs9oSH5dEGQa6mPXhCEHjdzkbZOGjBjAvkafzMk88XCaGcebhtCwzH2eeLss88XCeJ2CZeBhnYFrmic+a6M8AdaeaNj2OAeRenPy1HQeNi/U3jwIf/sszorAfTjqSf6u8rgBgWnrwcVBaOELuKhA0ruzVW7d/RGsMGJedKklKF5+rDuLSwad4ki4fA8G1jRdAUtkKZQn/Xb8pURYOgbhgEb5BfMYsIlwdwBmfMYtwdYBpwSLCxwCgzpiFCw0AScEsfB4BxHLw3x1vs1WIgXWaagBQOs1NAu94kadaAUCS5hsFe7wwCZx6sVF4/wI="); -} - -#BunError-SourceLine-text-highlightExpression { - font-weight: bold; - text-decoration-style: wavy; -} - -.BunError-JSException--TypeError #BunError-SourceLine-text-highlightExpression { - border: 1px solid rgba(0, 0, 0, 0.2); -} -.BunError-Indented { - display: inline-block; - user-select: none; - -webkit-user-select: none; -} - -.BunError-divet { - vertical-align: bottom; - user-select: none; - -webkit-user-select: none; -} - -.BunError-error-typename { - font-family: var(--bun-error-monospace); - color: #e39437; - font-weight: bold; -} - -.BunError-error-muted { - font-weight: normal; - user-select: none; - -webkit-user-select: none; -} - -.BunError-error-muted, -.BunError-StackFrame--muted { - color: rgb(165, 165, 165); -} - -.BunError-NativeStackTrace .BunError-error-typename { - user-select: none; - -webkit-user-select: none; -} - -.BunError-StackFrame-link { -} - -.BunError-StackFrame-link-content { - display: flex; - gap: 0.25ch; - white-space: nowrap; -} - -.BunError-StackFrame { - display: table-row; -} - -.BunError-StackFrame-identifier { - padding-right: 18px; - font-size: 0.8em; - font-family: var(--bun-error-monospace); - letter-spacing: 0.49px; -} - -.BunError-error-message--mono { - font-family: var(--bun-error-monospace); -} -.BunError-StackFrame-identifier, -.BunError-StackFrame-link { - display: table-cell; - font-weight: 500; -} - -.BunError-BuildError { - padding-bottom: 18px; -} - -.BunError-StackFrame-link-content { - font-size: 0.8em; -} - -.BunError-StackFrames { - display: table; - table-layout: auto; - padding: 13px 10px; - margin: 8px auto; - border-radius: 4px; - - background-color: rgb(244, 244, 244); -} diff --git a/examples/hello-next/bun-framework-next/bun-error.tsx b/examples/hello-next/bun-framework-next/bun-error.tsx deleted file mode 100644 index 5d57dd0ea..000000000 --- a/examples/hello-next/bun-framework-next/bun-error.tsx +++ /dev/null @@ -1,809 +0,0 @@ -import type { - FallbackMessageContainer, - JSException as JSExceptionType, - Message, - SourceLine, - StackFrame, - Problems, - FallbackStep, - StackTrace, - Location, - JSException, - WebsocketMessageBuildFailure, -} from "../../../src/api/schema"; - -import ReactDOM from "react-dom"; -import { - useCallback, - useState, - useEffect, - useLayoutEffect, - createContext, - useContext, - Children, -} from "react"; - -enum StackFrameScope { - Eval = 1, - Module = 2, - Function = 3, - Global = 4, - Wasm = 5, - Constructor = 6, -} - -enum JSErrorCode { - Error = 0, - EvalError = 1, - RangeError = 2, - ReferenceError = 3, - SyntaxError = 4, - TypeError = 5, - URIError = 6, - AggregateError = 7, - - // StackOverflow & OutOfMemoryError is not an ErrorType in within JSC, so the number here is just totally made up - OutOfMemoryError = 8, - BundlerError = 252, - StackOverflow = 253, - UserErrorCode = 254, -} - -const JSErrorCodeLabel = { - 0: "Error", - 1: "EvalError", - 2: "RangeError", - 3: "ReferenceError", - 4: "SyntaxError", - 5: "TypeError", - 6: "URIError", - 7: "AggregateError", - 253: "StackOverflow", - 8: "OutOfMemory", -}; - -const BUN_ERROR_CONTAINER_ID = "__bun-error__"; - -enum RuntimeType { - Nothing = 0x0, - Function = 0x1, - Undefined = 0x2, - Null = 0x4, - Boolean = 0x8, - AnyInt = 0x10, - Number = 0x20, - String = 0x40, - Object = 0x80, - Symbol = 0x100, - BigInt = 0x200, -} - -enum ErrorTagType { - build, - resolve, - server, - client, - hmr, -} - -const ErrorTag = ({ type }: { type: ErrorTagType }) => ( -
- {ErrorTagType[type]} -
-); - -const errorTags = [ - , - , - , - , - , -]; - -const normalizedFilename = (filename: string, cwd: string): string => { - if (filename.startsWith(cwd)) { - return filename.substring(cwd.length); - } - - return filename; -}; - -const blobFileURL = (filename: string): string => { - return new URL("/blob:" + filename, location.href).href; -}; - -const srcFileURL = (filename: string, line: number, column: number): string => { - if (filename.endsWith(".bun")) { - return new URL("/" + filename, location.href).href; - } - - var base = `/src:${filename}`; - if (line > -1) { - base = base + `:${line}`; - - if (column > -1) { - base = base + `:${column}`; - } - } - - return new URL(base, location.href).href; -}; - -class FancyTypeError { - constructor(exception: JSException) { - this.runtimeType = exception.runtime_type || 0; - this.runtimeTypeName = RuntimeType[this.runtimeType] || "undefined"; - this.message = exception.message; - this.explain = ""; - - this.normalize(exception); - } - - runtimeType: RuntimeType; - explain: string; - runtimeTypeName: string; - message: string; - - normalize(exception: JSException) { - let i = exception.message.lastIndexOf(" is "); - if (i === -1) return; - const partial = exception.message.substring(i + " is ".length); - const nextWord = /(["a-zA-Z0-9_\.]+)\)$/.exec(partial); - if (nextWord && nextWord[0]) { - this.runtimeTypeName = nextWord[0]; - this.runtimeTypeName = this.runtimeTypeName.substring( - 0, - this.runtimeTypeName.length - 1 - ); - switch (this.runtimeTypeName.toLowerCase()) { - case "undefined": { - this.runtimeType = RuntimeType.Undefined; - break; - } - case "null": { - this.runtimeType = RuntimeType.Null; - break; - } - case "string": { - this.runtimeType = RuntimeType.String; - break; - } - case "true": - case "false": { - this.runtimeType = RuntimeType.Boolean; - break; - } - - case "number": - this.runtimeType = RuntimeType.Number; - break; - - case "bigint": - this.runtimeType = RuntimeType.BigInt; - break; - - case "symbol": - this.runtimeType = RuntimeType.Symbol; - break; - default: { - this.runtimeType = RuntimeType.Object; - break; - } - } - this.message = exception.message.substring(0, i); - this.message = this.message.substring( - 0, - this.message.lastIndexOf("(In ") - ); - } - } -} - -var onClose = dismissError; - -const IndentationContext = createContext(0); -const SourceLines = ({ - sourceLines, - highlight = -1, - highlightColumnStart = 0, - highlightColumnEnd = Infinity, - children, -}: { - sourceLines: SourceLine[]; - highlightColumnStart: number; - highlightColumnEnd: number; - highlight: number; -}) => { - let start = sourceLines.length; - let end = 0; - let dedent = Infinity; - let originalLines = new Array(sourceLines.length); - let _i = 0; - for (let i = 0; i < sourceLines.length; i++) { - // bun only prints \n, no \r\n, so this should work fine - sourceLines[i].text = sourceLines[i].text.replaceAll("\n", ""); - - // This will now only trim spaces (and vertical tab character which never prints) - const left = sourceLines[i].text.trimLeft(); - - if (left.length > 0) { - start = Math.min(start, i); - end = Math.max(end, i + 1); - - dedent = Math.min(sourceLines[i].text.length - left.length, dedent); - } - } - - const _sourceLines = sourceLines.slice(start, end); - const childrenArray = children || []; - const numbers = new Array(_sourceLines.length + childrenArray.length); - const lines = new Array(_sourceLines.length + childrenArray.length); - - let highlightI = 0; - for (let i = 0; i < _sourceLines.length; i++) { - const { line, text } = _sourceLines[i]; - const classes = { - empty: text.trim().length === 0, - highlight: highlight + 1 === line || _sourceLines.length === 1, - }; - if (classes.highlight) highlightI = i; - const _text = classes.empty ? "" : text.substring(dedent); - lines[i] = ( -
- {classes.highlight ? ( - <> - {_text.substring(0, highlightColumnStart - dedent)} - - {_text.substring( - highlightColumnStart - dedent, - highlightColumnEnd - dedent - )} - - {_text.substring(highlightColumnEnd - dedent)} - - ) : ( - _text - )} -
- ); - numbers[i] = ( -
- {line} -
- ); - - if (classes.highlight && children) { - i++; - - numbers.push( - ...childrenArray.map((child, index) => ( -
- )) - ); - lines.push( - ...childrenArray.map((child, index) => ( -
- {childrenArray[index]} -
- )) - ); - } - } - - return ( - -
-
- -
{numbers}
-
{lines}
-
-
- ); -}; - -const BuildErrorSourceLines = ({ location }: { location: Location }) => { - const { line, line_text, column, file } = location; - const sourceLines: SourceLine[] = [{ line, text: line_text }]; - return ( - - ); -}; - -const BuildErrorStackTrace = ({ location }: { location: Location }) => { - const { cwd } = useContext(ErrorGroupContext); - const filename = normalizedFilename(location.file, cwd); - const { line, column } = location; - return ( -
- - {filename}:{line}:{column} - - -
- ); -}; - -const StackFrameIdentifier = ({ - functionName, - scope, -}: { - functionName?: string; - scope: StackFrameScope; -}) => { - switch (scope) { - case StackFrameScope.Constructor: { - return functionName ? `new ${functionName}` : "new (anonymous)"; - break; - } - - case StackFrameScope.Eval: { - return "eval"; - break; - } - - case StackFrameScope.Module: { - return "(esm)"; - break; - } - - case StackFrameScope.Global: { - return "(global)"; - break; - } - - case StackFrameScope.Wasm: { - return "(wasm)"; - break; - } - - default: { - return functionName ? functionName : "λ()"; - break; - } - } -}; - -const NativeStackFrame = ({ - frame, - isTop, -}: { - frame: StackFrame; - isTop: boolean; -}) => { - const { cwd } = useContext(ErrorGroupContext); - const { - file, - function_name: functionName, - position: { line, column_start: column }, - scope, - } = frame; - const fileName = normalizedFilename(file, cwd); - return ( -
-
- -
- - -
-
{fileName}
- {line > -1 && ( -
:{line + 1}
- )} - {column > -1 && ( -
:{column}
- )} -
-
-
- ); -}; - -const NativeStackFrames = ({ frames }) => { - const items = new Array(frames.length); - for (let i = 0; i < frames.length; i++) { - items[i] = ; - } - - return
{items}
; -}; - -const NativeStackTrace = ({ - frames, - sourceLines, - children, -}: { - frames: StackFrame[]; - sourceLines: SourceLine[]; -}) => { - const { file = "", position } = frames[0]; - const { cwd } = useContext(ErrorGroupContext); - const filename = normalizedFilename(file, cwd); - return ( -
- - {filename}:{position.line + 1}:{position.column_start} - - {sourceLines.length > 0 && ( - - {children} - - )} - {frames.length > 0 && } -
- ); -}; - -const divet = ^; -const DivetRange = ({ start, stop }) => { - const length = Math.max(stop - start, 0); - if (length === 0) return null; - return ( - - ); -}; - -const Indent = ({ by, children }) => { - const amount = useContext(IndentationContext); - return ( - <> - {` `.repeat(by - amount)} - {children} - - ); -}; - -const JSException = ({ value }: { value: JSExceptionType }) => { - switch (value.code) { - case JSErrorCode.TypeError: { - const fancyTypeError = new FancyTypeError(value); - - if (fancyTypeError.runtimeType !== RuntimeType.Nothing) { - return ( -
-
-
TypeError
- {errorTags[ErrorTagType.server]} -
- -
- {fancyTypeError.message} -
- - {fancyTypeError.runtimeTypeName.length && ( -
- It's{" "} - - {fancyTypeError.runtimeTypeName} - - . -
- )} - - {value.stack && ( - - - - {fancyTypeError.runtimeTypeName} - - - - )} -
- ); - } - } - - default: { - const newline = value.message.indexOf("\n"); - if (newline > -1) { - const subtitle = value.message.substring(newline + 1).trim(); - const message = value.message.substring(0, newline).trim(); - if (subtitle.length) { - return ( -
-
-
{value.name}
- {errorTags[ErrorTagType.server]} -
- -
{message}
-
{subtitle}
- - {value.stack && ( - - )} -
- ); - } - } - - return ( -
-
-
{value.name}
- {errorTags[ErrorTagType.server]} -
- -
{value.message}
- - {value.stack && ( - - )} -
- ); - } - } -}; - -const Summary = ({ - errorCount, - onClose, -}: { - errorCount: number; - onClose: Function; -}) => { - return ( -
-
-
- {errorCount} error{errorCount > 1 ? "s" : ""} on this page -
- -
-
-
-
- ); -}; - -const BuildError = ({ message }: { message: Message }) => { - let title = (message.data.text || "").trim(); - const newline = title.indexOf("\n"); - let subtitle = ""; - if (newline > -1) { - subtitle = title.slice(newline + 1).trim(); - title = title.slice(0, newline); - } - return ( -
-
-
BuildError
-
- -
{title}
- - {subtitle.length > 0 && ( -
{subtitle}
- )} - - {message.data.location && ( - - )} -
- ); -}; - -const ResolveError = ({ message }: { message: Message }) => { - const { cwd } = useContext(ErrorGroupContext); - let title = (message.data.text || "").trim(); - const newline = title.indexOf("\n"); - let subtitle = null; - if (newline > -1) { - subtitle = title.slice(newline + 1).trim(); - title = title.slice(0, newline); - } - - return ( -
-
-
ResolveError
-
- -
- Can't import{" "} - - {message.on.resolve} - -
- - {subtitle &&
{subtitle}
} - - {message.data.location && ( - - )} -
- ); -}; -const OverlayMessageContainer = ({ - problems, - reason, - router, -}: FallbackMessageContainer) => { - return ( -
-
-
- -
-
- {problems.exceptions.map((problem, index) => ( - - ))} - {problems.build.msgs.map((buildMessage, index) => { - if (buildMessage.on.build) { - return ; - } else if (buildMessage.on.resolve) { - return ; - } else { - throw new Error("Unknown build message type"); - } - })} -
-
-
-
-
-
- ); -}; - -const BuildFailureMessageContainer = ({ - messages, -}: { - messages: Message[]; -}) => { - return ( -
-
-
- -
-
- {messages.map((buildMessage, index) => { - if (buildMessage.on.build) { - return ; - } else if (buildMessage.on.resolve) { - return ; - } else { - throw new Error("Unknown build message type"); - } - })} -
-
-
-
-
-
- ); -}; - -const ErrorGroupContext = createContext<{ cwd: string }>(null); -var reactRoot; - -function renderWithFunc(func) { - if (!reactRoot) { - const root = document.createElement("div"); - root.id = "__bun__error-root"; - - reactRoot = document.createElement("div"); - reactRoot.id = BUN_ERROR_CONTAINER_ID; - reactRoot.style.visibility = "hidden"; - const link = document.createElement("link"); - link.rel = "stylesheet"; - link.href = new URL("/bun:erro.css", document.baseURI).href; - link.onload = () => { - reactRoot.style.visibility = "visible"; - }; - - const shadowRoot = root.attachShadow({ mode: "open" }); - shadowRoot.appendChild(link); - shadowRoot.appendChild(reactRoot); - - document.body.appendChild(root); - ReactDOM.render(func(), reactRoot); - - debugger; - } else { - ReactDOM.render(func(), reactRoot); - } -} - -export function renderFallbackError(fallback: FallbackMessageContainer) { - return renderWithFunc(() => ( - - - - )); -} - -export function dismissError() { - if (reactRoot) { - ReactDOM.unmountComponentAtNode(reactRoot); - const root = document.getElementById("__bun__error-root"); - if (root) root.remove(); - reactRoot = null; - } -} - -globalThis.renderBuildFailure = ( - failure: WebsocketMessageBuildFailure, - cwd: string -) => { - renderWithFunc(() => ( - - - - )); -}; diff --git a/examples/hello-next/bun-framework-next/bun-error/close.png b/examples/hello-next/bun-framework-next/bun-error/close.png deleted file mode 100644 index 11e513a1b..000000000 Binary files a/examples/hello-next/bun-framework-next/bun-error/close.png and /dev/null differ diff --git a/examples/hello-next/bun-framework-next/bun-error/error.png b/examples/hello-next/bun-framework-next/bun-error/error.png deleted file mode 100644 index c35e01a2b..000000000 Binary files a/examples/hello-next/bun-framework-next/bun-error/error.png and /dev/null differ diff --git a/examples/hello-next/bun-framework-next/bun-error/powered-by.png b/examples/hello-next/bun-framework-next/bun-error/powered-by.png deleted file mode 100644 index 7e71f1357..000000000 Binary files a/examples/hello-next/bun-framework-next/bun-error/powered-by.png and /dev/null differ diff --git a/examples/hello-next/bun-framework-next/bun-error/powered-by.webp b/examples/hello-next/bun-framework-next/bun-error/powered-by.webp deleted file mode 100644 index 0f48488ea..000000000 Binary files a/examples/hello-next/bun-framework-next/bun-error/powered-by.webp and /dev/null differ diff --git a/examples/hello-next/bun-framework-next/bun-runtime-error.ts b/examples/hello-next/bun-framework-next/bun-runtime-error.ts deleted file mode 100644 index 331040b36..000000000 --- a/examples/hello-next/bun-framework-next/bun-runtime-error.ts +++ /dev/null @@ -1,163 +0,0 @@ -// Based on https://github.com/stacktracejs/error-stack-parser/blob/master/error-stack-parser.js - -import type { - StackFrame as StackFrameType, - StackFramePosition, - StackFrameScope, -} from "../../../src/api/schema"; - -export class StackFrame implements StackFrameType { - function_name: string; - file: string; - position: StackFramePosition; - scope: StackFrameScope; - lineText: string = ""; - constructor({ - functionName: function_name = "", - fileName: file = "", - lineNumber: line = -1, - columnNumber: column = -1, - source = "", - }) { - this.function_name = function_name; - this.file = file; - if (source) this.lineText = source; - this.scope = 3; - this.position = { - line: line, - source_offset: -1, - line_start: -1, - line_stop: -1, - column_start: column, - column_stop: -1, - expression_start: -1, - expression_stop: -1, - }; - } -} - -const FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+:\d+/; -const CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+:\d+|\(native\))/m; -const SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code])?$/; - -export default class RuntimeError { - original: Error; - stack: StackFrame[]; - - static from(error: Error) { - const runtime = new RuntimeError(); - runtime.original = error; - runtime.stack = this.parseStack(error); - return RuntimeError; - } - - /** - * Given an Error object, extract the most information from it. - * - * @param {Error} error object - * @return {Array} of StackFrames - */ - static parseStack(error) { - if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { - return this.parseV8OrIE(error); - } else if (error.stack) { - return this.parseFFOrSafari(error); - } else { - return []; - } - } - - // Separate line and column numbers from a string of the form: (URI:Line:Column) - static extractLocation(urlLike) { - // Fail-fast but return locations like "(native)" - if (urlLike.indexOf(":") === -1) { - return [urlLike]; - } - - var regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/; - var parts = regExp.exec(urlLike.replace(/[()]/g, "")); - return [parts[1], parts[2] || undefined, parts[3] || undefined]; - } - - static parseV8OrIE(error) { - var filtered = error.stack.split("\n").filter(function (line) { - return !!line.match(CHROME_IE_STACK_REGEXP); - }, this); - - return filtered.map(function (line) { - if (line.indexOf("(eval ") > -1) { - // Throw away eval information until we implement stacktrace.js/stackframe#8 - line = line - .replace(/eval code/g, "eval") - .replace(/(\(eval at [^()]*)|(\),.*$)/g, ""); - } - var sanitizedLine = line.replace(/^\s+/, "").replace(/\(eval code/g, "("); - - // capture and preseve the parenthesized location "(/foo/my bar.js:12:87)" in - // case it has spaces in it, as the string is split on \s+ later on - var location = sanitizedLine.match(/ (\((.+):(\d+):(\d+)\)$)/); - - // remove the parenthesized location from the line, if it was matched - sanitizedLine = location - ? sanitizedLine.replace(location[0], "") - : sanitizedLine; - - var tokens = sanitizedLine.split(/\s+/).slice(1); - // if a location was matched, pass it to extractLocation() otherwise pop the last token - var locationParts = this.extractLocation( - location ? location[1] : tokens.pop() - ); - var functionName = tokens.join(" ") || undefined; - var fileName = - ["eval", ""].indexOf(locationParts[0]) > -1 - ? undefined - : locationParts[0]; - - return new StackFrame({ - functionName: functionName, - fileName: fileName, - lineNumber: locationParts[1], - columnNumber: locationParts[2], - source: line, - }); - }, this); - } - - static parseFFOrSafari(error) { - var filtered = error.stack.split("\n").filter(function (line) { - return !line.match(SAFARI_NATIVE_CODE_REGEXP); - }, this); - - return filtered.map(function (line) { - // Throw away eval information until we implement stacktrace.js/stackframe#8 - if (line.indexOf(" > eval") > -1) { - line = line.replace( - / line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, - ":$1" - ); - } - - if (line.indexOf("@") === -1 && line.indexOf(":") === -1) { - // Safari eval frames only have function names and nothing else - return new StackFrame({ - functionName: line, - }); - } else { - var functionNameRegex = /((.*".+"[^@]*)?[^@]*)(?:@)/; - var matches = line.match(functionNameRegex); - var functionName = matches && matches[1] ? matches[1] : undefined; - var locationParts = this.extractLocation( - line.replace(functionNameRegex, "") - ); - - return new StackFrame({ - functionName: functionName, - fileName: locationParts[0], - lineNumber: locationParts[1], - columnNumber: locationParts[2], - source: line, - }); - } - }, this); - } -} diff --git a/examples/hello-next/bun-framework-next/client.development.tsx b/examples/hello-next/bun-framework-next/client.development.tsx index 0d019e175..f8fd054c3 100644 --- a/examples/hello-next/bun-framework-next/client.development.tsx +++ b/examples/hello-next/bun-framework-next/client.development.tsx @@ -1,7 +1,8 @@ -import "./bun-error"; globalThis.global = globalThis; globalThis.Bun_disableCSSImports = true; +import "./bun-error"; + import * as React from "react"; var onlyChildPolyfill = React.Children.only; React.Children.only = function (children) { diff --git a/examples/hello-next/bun-framework-next/fallback.development.tsx b/examples/hello-next/bun-framework-next/fallback.development.tsx deleted file mode 100644 index 1cd5f847e..000000000 --- a/examples/hello-next/bun-framework-next/fallback.development.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { insertStyleSheet } from "./page-loader"; -import type { - FallbackMessageContainer, - FallbackStep, -} from "../../../src/api/schema"; - -var once = false; -function insertGlobalStyleSheet(detail) { - if (!once) { - document.head.insertAdjacentHTML( - "beforeend", - `` - ); - once = true; - } - pageLoader.cssQueue.push(insertStyleSheet(detail).then(() => {})); -} - -[...globalThis["__BUN"].allImportedStyles].map((detail) => - insertGlobalStyleSheet(detail) -); - -document.addEventListener("onimportcss", insertGlobalStyleSheet, { - passive: true, -}); - -import { renderError, _boot, pageLoader } from "./client.development"; -import { renderFallbackError } from "bun-error"; - -function renderFallback({ - router, - reason, - problems, -}: FallbackMessageContainer) { - const route = router.routes[router.route]; - - if (!document.getElementById("__next")) { - const next = document.createElement("div"); - next.id = "__next"; - document.body.prepend(next); - } - - document.removeEventListener("onimportcss", insertGlobalStyleSheet); - document.addEventListener("onimportcss", pageLoader.onImportCSS, { - passive: true, - }); - - globalThis.__NEXT_DATA__.pages["/_app"] = [ - ...globalThis.__NEXT_DATA__.pages["/_app"], - ...globalThis["__BUN"].allImportedStyles, - ]; - - return import(route) - .then((Namespace) => { - return _boot(Namespace, true); - }) - .then(() => { - const cssQueue = pageLoader.cssQueue.slice(); - pageLoader.cssQueue = []; - return Promise.all([...cssQueue]); - }) - .finally(() => { - document.body.style.visibility = "visible"; - document.removeEventListener("onimportcss", pageLoader.onImportCSS); - }); -} - -export default function render(props: FallbackMessageContainer) { - renderFallback(props).then( - () => { - Promise.all(pageLoader.cssQueue).finally(() => { - renderFallbackError(props); - document.body.style.visibility = "visible"; - }); - }, - (err) => { - Promise.all(pageLoader.cssQueue).finally(() => { - renderFallbackError(props); - }); - } - ); -} diff --git a/examples/hello-next/bun-framework-next/index.js b/examples/hello-next/bun-framework-next/index.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/hello-next/bun-framework-next/next-server.tsx b/examples/hello-next/bun-framework-next/next-server.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/hello-next/bun-framework-next/package.json b/examples/hello-next/bun-framework-next/package.json deleted file mode 100644 index af6286343..000000000 --- a/examples/hello-next/bun-framework-next/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "bun-framework-next", - "version": "0.0.0-18", - "description": "", - "framework": { - "displayName": "Next.js", - "static": "public", - "assetPrefix": "_next/", - "router": { - "dir": [ - "pages", - "src/pages" - ], - "extensions": [ - ".js", - ".ts", - ".tsx", - ".jsx" - ] - }, - "css": "onimportcss", - "development": { - "client": "client.development.tsx", - "fallback": "fallback.development.tsx", - "server": "server.development.tsx", - "css": "onimportcss", - "define": { - "client": { - ".env": "NEXT_PUBLIC_", - "defaults": { - "process.env.__NEXT_TRAILING_SLASH": "false", - "process.env.NODE_ENV": "\"development\"", - "process.env.__NEXT_ROUTER_BASEPATH": "''", - "process.env.__NEXT_SCROLL_RESTORATION": "false", - "process.env.__NEXT_I18N_SUPPORT": "false", - "process.env.__NEXT_HAS_REWRITES": "false", - "process.env.__NEXT_ANALYTICS_ID": "null", - "process.env.__NEXT_OPTIMIZE_CSS": "false", - "process.env.__NEXT_CROSS_ORIGIN": "''", - "process.env.__NEXT_STRICT_MODE": "false", - "process.env.__NEXT_IMAGE_OPTS": "null" - } - }, - "server": { - ".env": "NEXT_", - "defaults": { - "process.env.__NEXT_TRAILING_SLASH": "false", - "process.env.__NEXT_OPTIMIZE_FONTS": "false", - "process.env.NODE_ENV": "\"development\"", - "process.env.__NEXT_OPTIMIZE_IMAGES": "false", - "process.env.__NEXT_OPTIMIZE_CSS": "false", - "process.env.__NEXT_ROUTER_BASEPATH": "''", - "process.env.__NEXT_SCROLL_RESTORATION": "false", - "process.env.__NEXT_I18N_SUPPORT": "false", - "process.env.__NEXT_HAS_REWRITES": "false", - "process.env.__NEXT_ANALYTICS_ID": "null", - "process.env.__NEXT_CROSS_ORIGIN": "''", - "process.env.__NEXT_STRICT_MODE": "false", - "process.env.__NEXT_IMAGE_OPTS": "null", - "global": "globalThis", - "window": "undefined" - } - } - } - }, - "production": { - "client": "client.production.tsx", - "server": "server.production.tsx", - "fallback": "fallback.production.tsx", - "css": "onimportcss" - } - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "react-is": "^17.0.2" - } -} diff --git a/examples/hello-next/bun-framework-next/page-loader.ts b/examples/hello-next/bun-framework-next/page-loader.ts deleted file mode 100644 index fc07578db..000000000 --- a/examples/hello-next/bun-framework-next/page-loader.ts +++ /dev/null @@ -1,147 +0,0 @@ -import NextPageLoader from "next/dist/client/page-loader"; -import getAssetPathFromRoute from "next/dist/shared/lib/router/utils/get-asset-path-from-route"; -// import createRouteLoader from "./route-loader"; - -export function insertStyleSheet(url: string) { - if (document.querySelector(`link[href="${url}"]`)) { - return Promise.resolve(); - } - - return new Promise((resolve, reject) => { - const link = document.createElement("link"); - link.rel = "stylesheet"; - - link.onload = () => resolve(); - link.onerror = () => reject(); - - link.href = url; - - // if (headCount) { - // document.head.insertBefore(headCount, link); - // } else { - document.head.appendChild(link); - // } - }); -} - -export default class PageLoader extends NextPageLoader { - public routeLoader: RouteLoader; - - constructor(_, __, pages) { - super(_, __); - - // TODO: assetPrefix? - // this.routeLoader = {}; //createRouteLoader(""); - - // Rewrite the pages object to omit the entry script - // At this point, the entry point has been loaded so we don't want to do that again. - for (let name in pages) { - for (let i = 0; i < pages[name].length; i += 1) { - const lastDot = pages[name][i].lastIndexOf("."); - if (lastDot == -1) continue; - if ( - pages[name][i].substring(lastDot - ".entry".length, lastDot) !== - ".entry" - ) - continue; - - pages[name][i] = - pages[name][i].substring(0, lastDot - ".entry".length) + - pages[name][i].substring(lastDot); - } - } - - this.pages = pages; - this.pageList = Object.keys(this.pages); - } - - pageList: string[]; - pages: Record; - - getPageList() { - return this.pageList; - } - - cssQueue = []; - - onImportCSS = (event) => { - this.cssQueue.push( - insertStyleSheet(event.detail).then( - () => {}, - () => {} - ) - ); - }; - - prefetch(route) { - return Promise.resolve({}); - } - - async loadPage(route: string): Promise { - const assets = - this.pages[route] || this.pages[getAssetPathFromRoute(route)]; - - var src; - console.log(getAssetPathFromRoute(route), assets); - for (let asset of assets) { - if (!asset.endsWith(".css")) { - src = asset; - break; - } - } - console.assert(src, "Invalid or unknown route passed to loadPage"); - - document.removeEventListener("onimportcss", this.onImportCSS); - this.cssQueue.length = 0; - document.addEventListener("onimportcss", this.onImportCSS, { - passive: true, - }); - - try { - const res = await import(src); - - if (this.cssQueue.length > 0) { - await Promise.all(this.cssQueue); - this.cssQueue.length = 0; - } - - document.removeEventListener("onimportcss", this.onImportCSS); - - if (this.cssQueue.length > 0) { - await Promise.all(this.cssQueue); - - this.cssQueue.length = 0; - } - - return { - page: res.default, - mod: res, - styleSheets: [], - __N_SSG: false, - __N_SSP: false, - }; - } catch (exception) { - console.error({ exception }); - } - - // return this.routeLoader.loadRoute(route).then((res) => { - // debugger; - // if ("component" in res) { - // return { - // page: res.component, - // mod: res.exports, - // styleSheets: res.styles.map((o) => ({ - // href: o.href, - // text: o.content, - // })), - // }; - // } - // throw res.error; - // }); - } - - // not used in development! - // prefetch(route: string): Promise { - // return this.routeLoader.prefetch(route); - // } -} diff --git a/examples/hello-next/bun-framework-next/render.tsx b/examples/hello-next/bun-framework-next/render.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/hello-next/bun-framework-next/renderDocument.tsx b/examples/hello-next/bun-framework-next/renderDocument.tsx deleted file mode 100644 index 356ff788b..000000000 --- a/examples/hello-next/bun-framework-next/renderDocument.tsx +++ /dev/null @@ -1,722 +0,0 @@ -import * as App from "next/app"; -import { AmpStateContext } from "next/dist/shared/lib/amp-context"; -import { HeadManagerContext } from "next/dist/shared/lib/head-manager-context"; -import Loadable from "next/dist/shared/lib/loadable"; -import { LoadableContext } from "next/dist/shared/lib/loadable-context"; -import { RouterContext } from "next/dist/shared/lib/router-context"; -import { NextRouter } from "next/dist/shared/lib/router/router"; -import { - AppType, - ComponentsEnhancer, - DocumentInitialProps, - DocumentProps, - DocumentType, - getDisplayName, - loadGetInitialProps, - NextComponentType, - RenderPage, - RenderPageResult, - HtmlContext, -} from "next/dist/shared/lib/utils"; -import * as NextDocument from "next/document"; -import * as ReactDOMServer from "react-dom/server.browser"; -import * as url from "url"; -import * as React from "react"; -import * as ReactIs from "react-is"; -import { BODY_RENDER_TARGET } from "next/constants"; - -const dev = process.env.NODE_ENV === "development"; - -type ParsedUrlQuery = Record; - -const isJSFile = (file: string) => - file.endsWith(".js") || - file.endsWith(".jsx") || - file.endsWith(".mjs") || - file.endsWith(".ts") || - file.endsWith(".tsx"); - -const notImplementedProxy = (base) => - new Proxy( - {}, - { - deleteProperty: function (target, prop) { - return undefined; - }, - enumerate: function (oTarget, sKey) { - return [].entries(); - }, - ownKeys: function (oTarget, sKey) { - return [].values(); - }, - has: function (oTarget, sKey) { - return false; - }, - defineProperty: function (oTarget, sKey, oDesc) { - return undefined; - }, - getOwnPropertyDescriptor: function (oTarget, sKey) { - return undefined; - }, - get(this, prop) { - throw new ReferenceError( - `${base} is not available for this environment.` - ); - }, - set(this, prop, value) { - throw new ReferenceError( - `${base} is not available for this environment.` - ); - }, - } - ); - -globalThis.fetch = (url, options) => { - return Promise.reject(new Error(`fetch is not implemented yet. sorry!!`)); -}; - -function getScripts(files: DocumentFiles) { - const { context, props } = this; - const { - assetPrefix, - buildManifest, - isDevelopment, - devOnlyCacheBusterQueryString, - disableOptimizedLoading, - } = context; - const normalScripts = files.allFiles.filter(isJSFile); - const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter(isJSFile); - - return [...normalScripts, ...lowPriorityScripts].map((file) => { - return ( -