nitro 2.2.27 → 3.0.0-alpha.0

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 (306) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +11 -259
  3. package/dist/_chunks/app.mjs +19797 -0
  4. package/dist/_chunks/build.mjs +84 -0
  5. package/dist/_chunks/build2.mjs +318 -0
  6. package/dist/_chunks/build3.mjs +6452 -0
  7. package/dist/_chunks/detect-acorn.mjs +503 -0
  8. package/dist/_chunks/index.mjs +22242 -0
  9. package/dist/_chunks/index2.mjs +297 -0
  10. package/dist/_chunks/index3.mjs +1058 -0
  11. package/dist/_chunks/index4.mjs +1206 -0
  12. package/dist/_chunks/info.mjs +11157 -0
  13. package/dist/_chunks/json5.mjs +68 -0
  14. package/dist/_chunks/jsonc.mjs +51 -0
  15. package/dist/_chunks/pathe.M-eThtNZ.mjs +204 -0
  16. package/dist/_chunks/plugin.mjs +960 -0
  17. package/dist/_chunks/server.mjs +254 -0
  18. package/dist/_chunks/snapshot.mjs +284 -0
  19. package/dist/_chunks/toml.mjs +259 -0
  20. package/dist/_chunks/yaml.mjs +86 -0
  21. package/dist/cli/build.mjs +54 -0
  22. package/dist/cli/common.mjs +13 -0
  23. package/dist/cli/dev.mjs +95 -0
  24. package/dist/cli/index.d.mts +1 -0
  25. package/dist/cli/index.mjs +477 -0
  26. package/dist/cli/index2.mjs +17 -0
  27. package/dist/cli/list.mjs +34 -0
  28. package/dist/cli/prepare.mjs +24 -0
  29. package/dist/cli/run.mjs +60 -0
  30. package/dist/index.d.mts +52 -0
  31. package/dist/index.mjs +55 -0
  32. package/dist/node_modules/@poppinss/colors/build/index.js +169 -0
  33. package/dist/node_modules/@poppinss/colors/package.json +116 -0
  34. package/dist/node_modules/@poppinss/dumper/build/chunk-26HALFTP.js +602 -0
  35. package/dist/node_modules/@poppinss/dumper/build/formatters/console/main.js +441 -0
  36. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +717 -0
  37. package/dist/node_modules/@poppinss/dumper/package.json +122 -0
  38. package/dist/node_modules/@poppinss/exception/build/index.js +63 -0
  39. package/dist/node_modules/@poppinss/exception/package.json +106 -0
  40. package/dist/node_modules/@sindresorhus/is/distribution/index.js +1313 -0
  41. package/dist/node_modules/@sindresorhus/is/distribution/utilities.js +3 -0
  42. package/dist/node_modules/@sindresorhus/is/package.json +81 -0
  43. package/dist/node_modules/@speed-highlight/core/dist/index.js +4 -0
  44. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -0
  45. package/dist/node_modules/@speed-highlight/core/package.json +90 -0
  46. package/dist/node_modules/cookie/dist/index.js +239 -0
  47. package/dist/node_modules/cookie/package.json +42 -0
  48. package/dist/node_modules/croner/dist/croner.js +1 -0
  49. package/dist/node_modules/croner/package.json +63 -0
  50. package/dist/node_modules/defu/dist/defu.mjs +69 -0
  51. package/dist/node_modules/defu/package.json +43 -0
  52. package/dist/node_modules/destr/dist/index.mjs +72 -0
  53. package/dist/node_modules/destr/package.json +47 -0
  54. package/dist/node_modules/error-stack-parser-es/dist/index.mjs +38 -0
  55. package/dist/node_modules/error-stack-parser-es/dist/lite.mjs +167 -0
  56. package/dist/node_modules/error-stack-parser-es/package.json +83 -0
  57. package/dist/node_modules/get-port-please/dist/index.mjs +430 -0
  58. package/dist/node_modules/get-port-please/package.json +39 -0
  59. package/dist/node_modules/hookable/dist/index.mjs +290 -0
  60. package/dist/node_modules/hookable/package.json +49 -0
  61. package/dist/node_modules/kleur/index.js +110 -0
  62. package/dist/node_modules/kleur/index.mjs +110 -0
  63. package/dist/node_modules/kleur/package.json +51 -0
  64. package/dist/node_modules/klona/dist/index.mjs +81 -0
  65. package/dist/node_modules/klona/full/index.mjs +53 -0
  66. package/dist/node_modules/klona/package.json +74 -0
  67. package/dist/node_modules/scule/dist/index.mjs +80 -0
  68. package/dist/node_modules/scule/package.json +43 -0
  69. package/dist/node_modules/source-map/lib/array-set.js +100 -0
  70. package/dist/node_modules/source-map/lib/base64-vlq.js +94 -0
  71. package/dist/node_modules/source-map/lib/base64.js +19 -0
  72. package/dist/node_modules/source-map/lib/binary-search.js +113 -0
  73. package/dist/node_modules/source-map/lib/mapping-list.js +83 -0
  74. package/dist/node_modules/source-map/lib/mappings.wasm +0 -0
  75. package/dist/node_modules/source-map/lib/read-wasm.js +27 -0
  76. package/dist/node_modules/source-map/lib/source-map-consumer.js +1081 -0
  77. package/dist/node_modules/source-map/lib/source-map-generator.js +439 -0
  78. package/dist/node_modules/source-map/lib/source-node.js +430 -0
  79. package/dist/node_modules/source-map/lib/url.js +13 -0
  80. package/dist/node_modules/source-map/lib/util.js +444 -0
  81. package/dist/node_modules/source-map/lib/wasm.js +138 -0
  82. package/dist/node_modules/source-map/package.json +79 -0
  83. package/dist/node_modules/source-map/source-map.js +10 -0
  84. package/dist/node_modules/std-env/dist/index.mjs +1 -0
  85. package/dist/node_modules/std-env/package.json +46 -0
  86. package/dist/node_modules/supports-color/index.js +202 -0
  87. package/dist/node_modules/supports-color/package.json +64 -0
  88. package/dist/node_modules/ufo/dist/index.mjs +638 -0
  89. package/dist/node_modules/ufo/package.json +47 -0
  90. package/dist/node_modules/unctx/dist/index.mjs +131 -0
  91. package/dist/node_modules/unctx/package.json +67 -0
  92. package/dist/node_modules/youch/build/chunk-4L7RY2JA.js +42 -0
  93. package/dist/node_modules/youch/build/chunk-4XB2BYKC.js +85 -0
  94. package/dist/node_modules/youch/build/chunk-4YEN7HVQ.js +61 -0
  95. package/dist/node_modules/youch/build/chunk-EUJBVOYB.js +83 -0
  96. package/dist/node_modules/youch/build/chunk-HFSXRSKS.js +85 -0
  97. package/dist/node_modules/youch/build/chunk-JAN2TFI2.js +222 -0
  98. package/dist/node_modules/youch/build/chunk-OSUFJZHZ.js +6 -0
  99. package/dist/node_modules/youch/build/chunk-PINJDICN.js +72 -0
  100. package/dist/node_modules/youch/build/chunk-PUHGL6HA.js +41 -0
  101. package/dist/node_modules/youch/build/chunk-VE4LENUR.js +45 -0
  102. package/dist/node_modules/youch/build/index.js +352 -0
  103. package/dist/node_modules/youch/build/public/error_cause/style.css +5 -0
  104. package/dist/node_modules/youch/build/public/error_info/script.js +13 -0
  105. package/dist/node_modules/youch/build/public/error_info/style.css +144 -0
  106. package/dist/node_modules/youch/build/public/error_stack/script.js +74 -0
  107. package/dist/node_modules/youch/build/public/error_stack/style.css +220 -0
  108. package/dist/node_modules/youch/build/public/error_stack_source/style.css +123 -0
  109. package/dist/node_modules/youch/build/public/header/script.js +16 -0
  110. package/dist/node_modules/youch/build/public/header/style.css +56 -0
  111. package/dist/node_modules/youch/build/public/layout/script.js +20 -0
  112. package/dist/node_modules/youch/build/public/layout/style.css +431 -0
  113. package/dist/node_modules/youch/package.json +133 -0
  114. package/dist/node_modules/youch-core/build/index.js +316 -0
  115. package/dist/node_modules/youch-core/package.json +124 -0
  116. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
  117. package/dist/presets/_nitro/runtime/nitro-dev.mjs +62 -0
  118. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +3 -0
  119. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +18 -0
  120. package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
  121. package/dist/presets/_nitro/runtime/service-worker.mjs +21 -0
  122. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
  123. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +13 -0
  124. package/dist/presets/aws-lambda/runtime/_utils.d.mts +18 -0
  125. package/dist/presets/aws-lambda/runtime/_utils.mjs +102 -0
  126. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +3 -0
  127. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +33 -0
  128. package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +3 -0
  129. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +13 -0
  130. package/dist/presets/azure/runtime/_utils.d.mts +2 -0
  131. package/dist/presets/azure/runtime/_utils.mjs +50 -0
  132. package/dist/presets/azure/runtime/azure-swa.d.mts +5 -0
  133. package/dist/presets/azure/runtime/azure-swa.mjs +28 -0
  134. package/dist/presets/bun/runtime/bun.d.mts +1 -0
  135. package/dist/presets/bun/runtime/bun.mjs +27 -0
  136. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +13 -0
  137. package/dist/presets/cloudflare/runtime/_module-handler.mjs +93 -0
  138. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +19 -0
  139. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +74 -0
  140. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +9 -0
  141. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +20 -0
  142. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +20 -0
  143. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +47 -0
  144. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +3 -0
  145. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +89 -0
  146. package/dist/presets/deno/runtime/deno-deploy.d.mts +1 -0
  147. package/dist/presets/deno/runtime/deno-deploy.mjs +17 -0
  148. package/dist/presets/deno/runtime/deno-server.d.mts +6 -0
  149. package/dist/presets/deno/runtime/deno-server.mjs +59 -0
  150. package/dist/presets/netlify/runtime/netlify-edge.d.mts +3 -0
  151. package/dist/presets/netlify/runtime/netlify-edge.mjs +17 -0
  152. package/dist/presets/netlify/runtime/netlify.d.mts +3 -0
  153. package/dist/presets/netlify/runtime/netlify.mjs +24 -0
  154. package/dist/presets/node/runtime/node-cluster.d.mts +1 -0
  155. package/dist/presets/node/runtime/node-cluster.mjs +58 -0
  156. package/dist/presets/node/runtime/node-middleware.d.mts +4 -0
  157. package/dist/presets/node/runtime/node-middleware.mjs +14 -0
  158. package/dist/presets/node/runtime/node-server.d.mts +3 -0
  159. package/dist/presets/node/runtime/node-server.mjs +44 -0
  160. package/dist/presets/standard/runtime/server.d.mts +5 -0
  161. package/dist/presets/standard/runtime/server.mjs +6 -0
  162. package/dist/presets/stormkit/runtime/stormkit.d.mts +21 -0
  163. package/dist/presets/stormkit/runtime/stormkit.mjs +28 -0
  164. package/dist/presets/vercel/runtime/vercel.d.mts +8 -0
  165. package/dist/presets/vercel/runtime/vercel.mjs +17 -0
  166. package/dist/presets/winterjs/runtime/winterjs.d.mts +1 -0
  167. package/dist/presets/winterjs/runtime/winterjs.mjs +87 -0
  168. package/dist/presets/zeabur/runtime/zeabur.d.mts +3 -0
  169. package/dist/presets/zeabur/runtime/zeabur.mjs +4 -0
  170. package/dist/presets.mjs +2460 -0
  171. package/dist/runtime/index.d.mts +11 -0
  172. package/dist/runtime/index.mjs +17 -0
  173. package/dist/runtime/internal/app.d.mts +2 -0
  174. package/dist/runtime/internal/app.mjs +153 -0
  175. package/dist/runtime/internal/cache.d.mts +7 -0
  176. package/dist/runtime/internal/cache.mjs +236 -0
  177. package/dist/runtime/internal/context.d.mts +12 -0
  178. package/dist/runtime/internal/context.mjs +17 -0
  179. package/dist/runtime/internal/database.d.mts +2 -0
  180. package/dist/runtime/internal/database.mjs +14 -0
  181. package/dist/runtime/internal/debug.d.mts +2 -0
  182. package/dist/runtime/internal/debug.mjs +5 -0
  183. package/dist/runtime/internal/empty.d.mts +0 -0
  184. package/dist/runtime/internal/empty.mjs +0 -0
  185. package/dist/runtime/internal/error/dev.d.mts +9 -0
  186. package/dist/runtime/internal/error/dev.mjs +122 -0
  187. package/dist/runtime/internal/error/prod.d.mts +8 -0
  188. package/dist/runtime/internal/error/prod.mjs +62 -0
  189. package/dist/runtime/internal/error/utils.d.mts +8 -0
  190. package/dist/runtime/internal/error/utils.mjs +3 -0
  191. package/dist/runtime/internal/index.d.mts +3 -0
  192. package/dist/runtime/internal/index.mjs +3 -0
  193. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +16 -0
  194. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +213 -0
  195. package/dist/runtime/internal/meta.d.mts +2 -0
  196. package/dist/runtime/internal/meta.mjs +3 -0
  197. package/dist/runtime/internal/plugin.d.mts +3 -0
  198. package/dist/runtime/internal/plugin.mjs +4 -0
  199. package/dist/runtime/internal/renderer.d.mts +3 -0
  200. package/dist/runtime/internal/renderer.mjs +36 -0
  201. package/dist/runtime/internal/route-rules.d.mts +8 -0
  202. package/dist/runtime/internal/route-rules.mjs +62 -0
  203. package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -0
  204. package/dist/runtime/internal/routes/dev-tasks.mjs +23 -0
  205. package/dist/runtime/internal/routes/openapi.d.mts +3 -0
  206. package/dist/runtime/internal/routes/openapi.mjs +100 -0
  207. package/dist/runtime/internal/routes/renderer-template.d.mts +2 -0
  208. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +3 -0
  209. package/dist/runtime/internal/routes/renderer-template.dev.mjs +21 -0
  210. package/dist/runtime/internal/routes/renderer-template.mjs +4 -0
  211. package/dist/runtime/internal/routes/scalar.d.mts +3 -0
  212. package/dist/runtime/internal/routes/scalar.mjs +194 -0
  213. package/dist/runtime/internal/routes/swagger.d.mts +3 -0
  214. package/dist/runtime/internal/routes/swagger.mjs +44 -0
  215. package/dist/runtime/internal/runtime-config.d.mts +9 -0
  216. package/dist/runtime/internal/runtime-config.mjs +49 -0
  217. package/dist/runtime/internal/shutdown.d.mts +9 -0
  218. package/dist/runtime/internal/shutdown.mjs +34 -0
  219. package/dist/runtime/internal/static.d.mts +3 -0
  220. package/dist/runtime/internal/static.mjs +77 -0
  221. package/dist/runtime/internal/storage.d.mts +2 -0
  222. package/dist/runtime/internal/storage.mjs +6 -0
  223. package/dist/runtime/internal/task.d.mts +17 -0
  224. package/dist/runtime/internal/task.mjs +73 -0
  225. package/dist/runtime/internal/utils.d.mts +1 -0
  226. package/dist/runtime/internal/utils.mjs +15 -0
  227. package/dist/runtime/internal/vite/dev-entry.d.mts +1 -0
  228. package/dist/runtime/internal/vite/dev-entry.mjs +6 -0
  229. package/dist/runtime/internal/vite/dev-worker.d.mts +1 -0
  230. package/dist/runtime/internal/vite/dev-worker.mjs +362 -0
  231. package/dist/runtime/internal/vite/prod-setup.d.mts +4 -0
  232. package/dist/runtime/internal/vite/prod-setup.mjs +55 -0
  233. package/dist/runtime/internal/vite/ssr-renderer.d.mts +4 -0
  234. package/dist/runtime/internal/vite/ssr-renderer.mjs +4 -0
  235. package/dist/types/index.d.mts +2810 -0
  236. package/dist/types/index.mjs +1 -0
  237. package/dist/vite.d.mts +59 -0
  238. package/dist/vite.mjs +68 -0
  239. package/lib/config.d.mts +9 -0
  240. package/lib/config.mjs +5 -0
  241. package/lib/deps/h3.d.mts +1 -0
  242. package/lib/deps/h3.mjs +1 -0
  243. package/lib/deps/ofetch.mjs +1 -0
  244. package/lib/deps/ofetch.mts +1 -0
  245. package/lib/meta.d.mts +5 -0
  246. package/lib/meta.mjs +21 -0
  247. package/lib/runtime-meta.d.mts +5 -0
  248. package/lib/runtime-meta.mjs +38 -0
  249. package/package.json +190 -36
  250. package/.editorconfig +0 -12
  251. package/.eslintrc.js +0 -34
  252. package/.travis.yml +0 -7
  253. package/Dockerfile +0 -12
  254. package/Makefile +0 -37
  255. package/bin/nitro +0 -55
  256. package/lib/auto-require.js +0 -44
  257. package/lib/class-file.js +0 -105
  258. package/lib/class-files.js +0 -212
  259. package/lib/color.js +0 -89
  260. package/lib/cwd.js +0 -27
  261. package/lib/dir-expand.js +0 -80
  262. package/lib/dir.js +0 -130
  263. package/lib/file.js +0 -80
  264. package/lib/join-paths.js +0 -60
  265. package/lib/livereload/livereload.js +0 -55
  266. package/lib/livereload.js +0 -86
  267. package/lib/nitro.js +0 -161
  268. package/lib/package.js +0 -211
  269. package/lib/presets/autoprefixer.js +0 -11
  270. package/lib/presets/babel.js +0 -33
  271. package/lib/presets/browserify.js +0 -106
  272. package/lib/presets/coffee-script.js +0 -29
  273. package/lib/presets/cssnano.js +0 -11
  274. package/lib/presets/eslint.js +0 -67
  275. package/lib/presets/jshint.js +0 -51
  276. package/lib/presets/less.js +0 -45
  277. package/lib/presets/log.js +0 -11
  278. package/lib/presets/ng-annotate.js +0 -34
  279. package/lib/presets/noop.js +0 -7
  280. package/lib/presets/postcss/auto-postcss.js +0 -46
  281. package/lib/presets/postcss/autoprefixer-options.js +0 -9
  282. package/lib/presets/postcss.js +0 -40
  283. package/lib/presets/rollup.js +0 -56
  284. package/lib/presets/sass.js +0 -64
  285. package/lib/presets/sitemap.js +0 -101
  286. package/lib/presets/sitemap.xml +0 -12
  287. package/lib/presets/svg-symbols.js +0 -22
  288. package/lib/presets/svgo.js +0 -21
  289. package/lib/presets/uglify.js +0 -72
  290. package/lib/presets/webpack.js +0 -66
  291. package/lib/processors.js +0 -84
  292. package/lib/promisify.js +0 -16
  293. package/lib/server.js +0 -224
  294. package/lib/tasks.js +0 -114
  295. package/lib/watch.js +0 -81
  296. package/test.js +0 -59
  297. package/tests/cwd-tests.js +0 -25
  298. package/tests/dir-tests.js +0 -80
  299. package/tests/dummy/dummy.coffee +0 -7
  300. package/tests/dummy/dummy.js +0 -8
  301. package/tests/dummy/dummy.less +0 -6
  302. package/tests/dummy/dummy.sass +0 -5
  303. package/tests/file-tests.js +0 -17
  304. package/tests/join-paths-tests.js +0 -86
  305. package/tests/tasks-tests.js +0 -65
  306. package/wercker.yml +0 -25
@@ -0,0 +1,352 @@
1
+ import {
2
+ Layout
3
+ } from "./chunk-VE4LENUR.js";
4
+ import {
5
+ ErrorCause
6
+ } from "./chunk-PINJDICN.js";
7
+ import {
8
+ ErrorInfo
9
+ } from "./chunk-EUJBVOYB.js";
10
+ import {
11
+ ErrorMetadata
12
+ } from "./chunk-HFSXRSKS.js";
13
+ import {
14
+ ErrorStack
15
+ } from "./chunk-JAN2TFI2.js";
16
+ import {
17
+ ErrorStackSource
18
+ } from "./chunk-4XB2BYKC.js";
19
+ import "./chunk-4L7RY2JA.js";
20
+ import {
21
+ Header
22
+ } from "./chunk-PUHGL6HA.js";
23
+ import "./chunk-OSUFJZHZ.js";
24
+ import {
25
+ BaseComponent
26
+ } from "./chunk-4YEN7HVQ.js";
27
+
28
+ // src/youch.ts
29
+ import cookie from "cookie";
30
+ import { ErrorParser } from "youch-core";
31
+
32
+ // src/metadata.ts
33
+ var Metadata = class {
34
+ #groups = {};
35
+ /**
36
+ * Converts value to an array (if not an array already)
37
+ */
38
+ #toArray(value) {
39
+ return Array.isArray(value) ? value : [value];
40
+ }
41
+ /**
42
+ * Define a group, its sections and their rows. In case of
43
+ * existing groups/sections, the new data will be merged
44
+ * with the existing data
45
+ */
46
+ group(name, sections) {
47
+ this.#groups[name] = this.#groups[name] ?? {};
48
+ Object.keys(sections).forEach((section) => {
49
+ if (!this.#groups[name][section]) {
50
+ this.#groups[name][section] = sections[section];
51
+ } else {
52
+ this.#groups[name][section] = this.#toArray(this.#groups[name][section]);
53
+ this.#groups[name][section].push(...this.#toArray(sections[section]));
54
+ }
55
+ });
56
+ return this;
57
+ }
58
+ /**
59
+ * Returns the existing metadata groups, sections and
60
+ * rows.
61
+ */
62
+ toJSON() {
63
+ return this.#groups;
64
+ }
65
+ };
66
+
67
+ // src/templates.ts
68
+ import { createScript, createStyleSheet } from "@poppinss/dumper/html";
69
+ var Templates = class {
70
+ constructor(devMode) {
71
+ this.devMode = devMode;
72
+ this.#knownTemplates = {
73
+ layout: new Layout(devMode),
74
+ header: new Header(devMode),
75
+ errorInfo: new ErrorInfo(devMode),
76
+ errorStack: new ErrorStack(devMode),
77
+ errorStackSource: new ErrorStackSource(devMode),
78
+ errorCause: new ErrorCause(devMode),
79
+ errorMetadata: new ErrorMetadata(devMode)
80
+ };
81
+ }
82
+ #knownTemplates;
83
+ #styles = /* @__PURE__ */ new Map([["global", createStyleSheet()]]);
84
+ #scripts = /* @__PURE__ */ new Map([["global", createScript()]]);
85
+ /**
86
+ * Returns a collection of style and script tags to dump
87
+ * inside the document HEAD.
88
+ */
89
+ #getStylesAndScripts(cspNonce) {
90
+ let customInjectedStyles = "";
91
+ const styles = [];
92
+ const scripts = [];
93
+ const cspNonceAttr = cspNonce ? ` nonce="${cspNonce}"` : "";
94
+ this.#styles.forEach((bucket, name) => {
95
+ if (name === "injected") {
96
+ customInjectedStyles = `<style id="${name}-styles"${cspNonceAttr}>${bucket}</style>`;
97
+ } else {
98
+ styles.push(`<style id="${name}-styles"${cspNonceAttr}>${bucket}</style>`);
99
+ }
100
+ });
101
+ this.#scripts.forEach((bucket, name) => {
102
+ scripts.push(`<script id="${name}-script"${cspNonceAttr}>${bucket}</script>`);
103
+ });
104
+ return { styles: `${styles.join("\n")}
105
+ ${customInjectedStyles}`, scripts: scripts.join("\n") };
106
+ }
107
+ /**
108
+ * Collects styles and scripts for components as we render
109
+ * them.
110
+ */
111
+ async #collectStylesAndScripts(templateName) {
112
+ if (!this.#styles.has(templateName)) {
113
+ const styles = await this.#knownTemplates[templateName].getStyles();
114
+ if (styles) {
115
+ this.#styles.set(templateName, styles);
116
+ }
117
+ }
118
+ if (!this.#scripts.has(templateName)) {
119
+ const script = await this.#knownTemplates[templateName].getScript();
120
+ if (script) {
121
+ this.#scripts.set(templateName, script);
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Returns the HTML for a given template
127
+ */
128
+ async #tmplToHTML(templateName, props) {
129
+ const component = this.#knownTemplates[templateName];
130
+ if (!component) {
131
+ throw new Error(`Invalid template "${templateName}"`);
132
+ }
133
+ await this.#collectStylesAndScripts(templateName);
134
+ return component.toHTML(props);
135
+ }
136
+ /**
137
+ * Returns the ANSI output for a given template
138
+ */
139
+ async #tmplToANSI(templateName, props) {
140
+ const component = this.#knownTemplates[templateName];
141
+ if (!component) {
142
+ throw new Error(`Invalid template "${templateName}"`);
143
+ }
144
+ return component.toANSI(props);
145
+ }
146
+ /**
147
+ * Define a custom component to be used in place of the default component.
148
+ * Overriding components allows you control the HTML layout, styles and
149
+ * the frontend scripts of an HTML fragment.
150
+ */
151
+ use(templateName, component) {
152
+ this.#knownTemplates[templateName] = component;
153
+ return this;
154
+ }
155
+ /**
156
+ * Inject custom styles to the document. Injected styles are
157
+ * always placed after the global and the components style
158
+ * tags.
159
+ */
160
+ injectStyles(cssFragment) {
161
+ let injectedStyles = this.#styles.get("injected") ?? "";
162
+ injectedStyles += `
163
+ ${cssFragment}`;
164
+ this.#styles.set("injected", injectedStyles);
165
+ return this;
166
+ }
167
+ /**
168
+ * Returns the HTML output for the given parsed error
169
+ */
170
+ async toHTML(props) {
171
+ const html = await this.#tmplToHTML("layout", {
172
+ title: props.title,
173
+ ide: props.ide,
174
+ cspNonce: props.cspNonce,
175
+ children: async () => {
176
+ const header = await this.#tmplToHTML("header", props);
177
+ const info = await this.#tmplToHTML("errorInfo", props);
178
+ const stackTrace = await this.#tmplToHTML("errorStack", {
179
+ ide: process.env.EDITOR ?? "vscode",
180
+ sourceCodeRenderer: (error, frame) => {
181
+ return this.#tmplToHTML("errorStackSource", {
182
+ error,
183
+ frame,
184
+ ide: props.ide,
185
+ cspNonce: props.cspNonce
186
+ });
187
+ },
188
+ ...props
189
+ });
190
+ const cause = await this.#tmplToHTML("errorCause", props);
191
+ const metadata = await this.#tmplToHTML("errorMetadata", props);
192
+ return `${header}${info}${stackTrace}${cause}${metadata}`;
193
+ }
194
+ });
195
+ const { scripts, styles } = this.#getStylesAndScripts(props.cspNonce);
196
+ return html.replace("<!-- STYLES -->", styles).replace("<!-- SCRIPTS -->", scripts);
197
+ }
198
+ /**
199
+ * Returns the ANSI output to be printed on the terminal
200
+ */
201
+ async toANSI(props) {
202
+ const ansiOutput = await this.#tmplToANSI("layout", {
203
+ title: props.title,
204
+ children: async () => {
205
+ const header = await this.#tmplToANSI("header", {});
206
+ const info = await this.#tmplToANSI("errorInfo", props);
207
+ const stackTrace = await this.#tmplToANSI("errorStack", {
208
+ ide: process.env.EDITOR ?? "vscode",
209
+ sourceCodeRenderer: (error, frame) => {
210
+ return this.#tmplToANSI("errorStackSource", {
211
+ error,
212
+ frame
213
+ });
214
+ },
215
+ ...props
216
+ });
217
+ const cause = await this.#tmplToANSI("errorCause", props);
218
+ const metadata = await this.#tmplToANSI("errorMetadata", props);
219
+ return `${header}${info}${stackTrace}${cause}${metadata}`;
220
+ }
221
+ });
222
+ return ansiOutput;
223
+ }
224
+ };
225
+
226
+ // src/youch.ts
227
+ var Youch = class {
228
+ /**
229
+ * Properties to be shared with the Error parser
230
+ */
231
+ #sourceLoader;
232
+ #parsers = [];
233
+ #transformers = [];
234
+ /**
235
+ * Manage templates used for converting error to the HTML
236
+ * output
237
+ */
238
+ templates = new Templates(false);
239
+ /**
240
+ * Define metadata to be displayed alongside the error output
241
+ */
242
+ metadata = new Metadata();
243
+ /**
244
+ * Creates an instance of the ErrorParser and applies the
245
+ * source loader, parsers and transformers on it
246
+ */
247
+ #createErrorParser(options) {
248
+ const errorParser = new ErrorParser(options);
249
+ if (this.#sourceLoader) {
250
+ errorParser.defineSourceLoader(this.#sourceLoader);
251
+ }
252
+ this.#parsers.forEach((parser) => errorParser.useParser(parser));
253
+ this.#transformers.forEach((transformer) => errorParser.useTransformer(transformer));
254
+ return errorParser;
255
+ }
256
+ /**
257
+ * Defines the request properties as a metadata group
258
+ */
259
+ #defineRequestMetadataGroup(request) {
260
+ if (!request || Object.keys(request).length === 0) {
261
+ return;
262
+ }
263
+ this.metadata.group("Request", {
264
+ ...request.url ? {
265
+ url: {
266
+ key: "URL",
267
+ value: request.url
268
+ }
269
+ } : {},
270
+ ...request.method ? {
271
+ method: {
272
+ key: "Method",
273
+ value: request.method
274
+ }
275
+ } : {},
276
+ ...request.headers ? {
277
+ headers: Object.keys(request.headers).map((key) => {
278
+ const value = request.headers[key];
279
+ return {
280
+ key,
281
+ value: key === "cookie" ? { ...cookie.parse(value) } : value
282
+ };
283
+ })
284
+ } : {}
285
+ });
286
+ }
287
+ /**
288
+ * Define custom implementation for loading the source code
289
+ * of a stack frame.
290
+ */
291
+ defineSourceLoader(loader) {
292
+ this.#sourceLoader = loader;
293
+ return this;
294
+ }
295
+ /**
296
+ * Define a custom parser. Parsers are executed before the
297
+ * error gets parsed and provides you with an option to
298
+ * modify the error
299
+ */
300
+ useParser(parser) {
301
+ this.#parsers.push(parser);
302
+ return this;
303
+ }
304
+ /**
305
+ * Define a custom transformer. Transformers are executed
306
+ * after the error has been parsed and can mutate the
307
+ * properties of the parsed error.
308
+ */
309
+ useTransformer(transformer) {
310
+ this.#transformers.push(transformer);
311
+ return this;
312
+ }
313
+ /**
314
+ * Parses error to JSON
315
+ */
316
+ async toJSON(error, options) {
317
+ options = { ...options };
318
+ return this.#createErrorParser({ offset: options.offset }).parse(error);
319
+ }
320
+ /**
321
+ * Render error to HTML
322
+ */
323
+ async toHTML(error, options) {
324
+ options = { ...options };
325
+ this.#defineRequestMetadataGroup(options.request);
326
+ const parsedError = await this.#createErrorParser({ offset: options.offset }).parse(error);
327
+ return this.templates.toHTML({
328
+ title: options.title ?? "An error has occurred",
329
+ ide: options.ide ?? process.env.IDE ?? "vscode",
330
+ cspNonce: options.cspNonce,
331
+ error: parsedError,
332
+ metadata: this.metadata
333
+ });
334
+ }
335
+ /**
336
+ * Render error to ANSI output
337
+ */
338
+ async toANSI(error, options) {
339
+ options = { ...options };
340
+ const parsedError = await this.#createErrorParser({ offset: options.offset }).parse(error);
341
+ return this.templates.toANSI({
342
+ title: "",
343
+ error: parsedError,
344
+ metadata: this.metadata
345
+ });
346
+ }
347
+ };
348
+ export {
349
+ BaseComponent,
350
+ Metadata,
351
+ Youch
352
+ };
@@ -0,0 +1,5 @@
1
+ #error-cause {
2
+ border: 1px solid var(--border);
3
+ border-radius: var(--radius);
4
+ --pre-bg-color: transparent;
5
+ }
@@ -0,0 +1,13 @@
1
+ function copyErrorMessage(button) {
2
+ const errorText = button.dataset.errorText;
3
+
4
+ navigator.clipboard.writeText(errorText)
5
+ .then(() => {
6
+ button.classList.add('copied');
7
+ setTimeout(() => button.classList.remove('copied'), 2000);
8
+ })
9
+ .catch(() => {
10
+ button.classList.add('copied');
11
+ setTimeout(() => button.classList.remove('copied'), 2000);
12
+ });
13
+ }
@@ -0,0 +1,144 @@
1
+ :root {
2
+ --copy-button-active-bg: var(--slate-a4);
3
+ --copy-button-border: var(--slate-7);
4
+ --copy-button-success-bg: var(--green-5);
5
+ --copy-button-success-border: var(--green-7);
6
+ --copy-button-success-fg: var(--green-12);
7
+ }
8
+ html.dark {
9
+ --copy-button-active-bg: var(--slate-a4);
10
+ --copy-button-border: var(--slate-7);
11
+ --copy-button-success-bg: var(--green-3);
12
+ --copy-button-success-border: var(--green-4);
13
+ --copy-button-success-fg: var(--green-11);
14
+ }
15
+
16
+ #error-name {
17
+ color: var(--danger-fg);
18
+ font-size: 16px;
19
+ -webkit-font-smoothing: antialiased;
20
+ -moz-osx-font-smoothing: grayscale;
21
+ }
22
+
23
+ #error-title {
24
+ color: var(--title-fg);
25
+ font-size: 32px;
26
+ -webkit-font-smoothing: antialiased;
27
+ -moz-osx-font-smoothing: grayscale;
28
+ }
29
+
30
+ #error-message {
31
+ color: var(--danger-fg);
32
+ font-size: 22px;
33
+ font-weight: 700;
34
+ display: flex;
35
+ align-items: center;
36
+ align-items: flex-start;
37
+ gap: 12px;
38
+ -webkit-font-smoothing: antialiased;
39
+ -moz-osx-font-smoothing: grayscale;
40
+ position: relative;
41
+ }
42
+ #error-message svg {
43
+ margin-top: 1.5px;
44
+ }
45
+
46
+ #error-hint {
47
+ border-top: 1px solid var(--border);
48
+ padding-top: 15px;
49
+ margin-top: 15px;
50
+ font-size: 15px;
51
+ font-style: italic;
52
+ display: flex;
53
+ gap: 12px;
54
+ align-items: flex-start;
55
+ padding-left: 1px;
56
+ }
57
+ #error-hint svg {
58
+ margin-bottom: -2px;
59
+ }
60
+ #error-hint strong {
61
+ color: var(--title-fg);
62
+ }
63
+ #error-hint a {
64
+ color: var(--links-fg);
65
+ }
66
+
67
+ #copy-error-btn {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ margin-left: auto;
72
+ position: relative;
73
+ cursor: pointer;
74
+
75
+ background: transparent;
76
+ border: 1px solid var(--copy-button-border);
77
+
78
+ font-size: 13px;
79
+ font-family: inherit;
80
+ font-weight: 500;
81
+ padding: 4px 8px 6px 8px;
82
+ border-radius: var(--radius);
83
+ color: var(--surface-fg);
84
+ transition: all 0.2s ease;
85
+ }
86
+
87
+ #copy-error-btn svg {
88
+ width: 18px;
89
+ height: 18px;
90
+ }
91
+
92
+ #copy-error-btn:hover {
93
+ background: var(--copy-button-active-bg);
94
+ color: var(--title-fg);
95
+ }
96
+
97
+ #copy-error-btn:active {
98
+ transform: scale(0.95);
99
+ }
100
+
101
+ #copy-error-btn.copied::after {
102
+ content: 'Copied';
103
+ position: absolute;
104
+ top: -30px;
105
+ left: 50%;
106
+ transform: translateX(-50%);
107
+ background: var(--copy-button-success-bg);
108
+ color: var(--copy-button-success-fg);
109
+ border: 1px solid var(--copy-button-success-border);
110
+ border-radius: 20px;
111
+ font-size: 13px;
112
+ font-family: inherit;
113
+ font-weight: 500;
114
+ padding: 2px 8px 4px 8px;
115
+ letter-spacing: 0.3px;
116
+ white-space: nowrap;
117
+ opacity: 0;
118
+ animation: copyFeedback 2s ease-in-out forwards;
119
+ }
120
+
121
+ @keyframes copyFeedback {
122
+ 0% {
123
+ opacity: 0;
124
+ transform: translateX(-50%) translateY(5px);
125
+ }
126
+ 10% {
127
+ opacity: 1;
128
+ transform: translateX(-50%) translateY(0);
129
+ }
130
+ 90% {
131
+ opacity: 1;
132
+ transform: translateX(-50%) translateY(0);
133
+ }
134
+ 100% {
135
+ opacity: 0;
136
+ transform: translateX(-50%) translateY(-5px);
137
+ }
138
+ }
139
+
140
+ @media (min-width: 1024px) {
141
+ #error-hint {
142
+ align-items: center;
143
+ }
144
+ }
@@ -0,0 +1,74 @@
1
+ function showFormattedFrames(button) {
2
+ document.querySelector('#all-frames-toggle input[type="checkbox"]').disabled = false
3
+ const parent = button.closest('section')
4
+
5
+ const formattedFrames = parent.querySelector('#stack-frames-formatted')
6
+ formattedFrames.classList.add('visible')
7
+
8
+ const rawFrames = parent.querySelector('#stack-frames-raw')
9
+ rawFrames.classList.remove('visible')
10
+
11
+ button.parentElement.querySelectorAll('button').forEach((btn) => btn.classList.remove('active'))
12
+ button.classList.add('active')
13
+ }
14
+
15
+ function showRawFrames(button) {
16
+ document.querySelector('#all-frames-toggle input[type="checkbox"]').disabled = true
17
+ const parent = button.closest('section')
18
+
19
+ const formattedFrames = parent.querySelector('#stack-frames-formatted')
20
+ formattedFrames.classList.remove('visible')
21
+
22
+ const rawFrames = parent.querySelector('#stack-frames-raw')
23
+ rawFrames.classList.add('visible')
24
+
25
+ button.parentElement.querySelectorAll('button').forEach((btn) => btn.classList.remove('active'))
26
+ button.classList.add('active')
27
+ }
28
+
29
+ function toggleFrameSource(parent) {
30
+ if (parent.classList.contains('expanded')) {
31
+ parent.classList.remove('expanded')
32
+ } else {
33
+ parent.classList.add('expanded')
34
+ }
35
+ }
36
+
37
+ function toggleAllFrames() {
38
+ const wrapper = document.querySelector('#stack-frames-wrapper')
39
+ const indicator = document.querySelector('#all-frames-toggle input[type="checkbox"]')
40
+ if (indicator.checked) {
41
+ wrapper.classList.add('display-all')
42
+ } else {
43
+ wrapper.classList.remove('display-all')
44
+ }
45
+ }
46
+
47
+ onContentLoaded(() => {
48
+ document.querySelector('#formatted-frames-toggle').addEventListener('click', function () {
49
+ showFormattedFrames(this)
50
+ })
51
+ document.querySelector('#raw-frames-toggle').addEventListener('click', function () {
52
+ showRawFrames(this)
53
+ })
54
+ document
55
+ .querySelector('#all-frames-toggle input[type="checkbox"]')
56
+ .addEventListener('change', function () {
57
+ toggleAllFrames()
58
+ })
59
+
60
+ document.querySelectorAll('button[class="stack-frame-location"]').forEach((sfl) => {
61
+ sfl.addEventListener('click', function (e) {
62
+ if (e.target.tagName === 'A') {
63
+ return
64
+ }
65
+ toggleFrameSource(e.target.closest('li'))
66
+ })
67
+ })
68
+
69
+ document.querySelectorAll('button[class="stack-frame-toggle-indicator"]').forEach((sfl) => {
70
+ sfl.addEventListener('click', function (e) {
71
+ toggleFrameSource(e.target.closest('li'))
72
+ })
73
+ })
74
+ })