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,316 @@
1
+ // src/parser.ts
2
+ import { fileURLToPath } from "url";
3
+ import { readFile } from "fs/promises";
4
+ import { Exception } from "@poppinss/exception";
5
+ import { parse } from "error-stack-parser-es";
6
+
7
+ // src/debug.ts
8
+ import { debuglog } from "util";
9
+ var debug_default = debuglog("youch:core");
10
+
11
+ // src/source_file.ts
12
+ var SourceFile = class {
13
+ #contents;
14
+ constructor(options) {
15
+ if ("contents" in options) {
16
+ this.#contents = options.contents;
17
+ }
18
+ }
19
+ /**
20
+ * Slice the file contents for the buffer size around a given
21
+ * line number.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const chunks = sourceFile.slice(11, 7)
26
+ * // Here chunks will be an array of 7 items from line number
27
+ * // 8 to 14
28
+ * ```
29
+ */
30
+ slice(lineNumber, bufferSize) {
31
+ if (!this.#contents) {
32
+ return void 0;
33
+ }
34
+ const lines = this.#contents.split(/\n|\r\n/);
35
+ const contentSize = lines.length;
36
+ const chunkSize = Math.ceil((bufferSize - 1) / 2);
37
+ let startIndex = chunkSize >= lineNumber ? 0 : lineNumber - chunkSize - 1;
38
+ if (contentSize - lineNumber < chunkSize) {
39
+ startIndex = Math.max(startIndex - (chunkSize - (contentSize - lineNumber)), 0);
40
+ }
41
+ const sourceIndex = lineNumber - 1;
42
+ const startRemainder = startIndex - sourceIndex + chunkSize;
43
+ const endIndex = startRemainder + chunkSize + lineNumber;
44
+ debug_default("slicing file contents", {
45
+ startIndex,
46
+ endIndex,
47
+ sourceIndex,
48
+ contentSize,
49
+ bufferSize,
50
+ chunkSize
51
+ });
52
+ return lines.slice(startIndex, endIndex).map((chunk, index) => {
53
+ return {
54
+ chunk,
55
+ lineNumber: startIndex + index + 1
56
+ };
57
+ });
58
+ }
59
+ };
60
+
61
+ // src/parser.ts
62
+ var ErrorParser = class _ErrorParser {
63
+ /**
64
+ * FS source loader reads the file contents from the filesystem
65
+ * for all non-native frames
66
+ */
67
+ static fsSourceLoader = async (frame) => {
68
+ if (!frame.fileName || frame.fileType !== "fs" || frame.type === "native") {
69
+ return void 0;
70
+ }
71
+ debug_default("reading contents for source file %s", frame.fileName);
72
+ try {
73
+ return {
74
+ contents: await readFile(frame.fileName, "utf-8")
75
+ };
76
+ } catch (error) {
77
+ debug_default(`Unable to read source file %s, error %s`, frame.fileName, error.message);
78
+ }
79
+ };
80
+ /**
81
+ * Native frames filename identifiers for Node.js and
82
+ * Deno
83
+ */
84
+ #nativeFramesIdentifiers = ["node:", "ext:"];
85
+ /**
86
+ * Native frames filename identifier for Bun. In case of
87
+ * bun, the filename exactly matches the keyword "native"
88
+ */
89
+ #bunNativeIdentifier = "native";
90
+ /**
91
+ * Cache of preloaded source files along with their absolute
92
+ * path
93
+ */
94
+ #sourceFiles = /* @__PURE__ */ new Map();
95
+ /**
96
+ * The offset can be used to skip initial frames from the
97
+ * error stack
98
+ */
99
+ #offset;
100
+ /**
101
+ * Custom source loader to consult for reading the sourcefile
102
+ * contents
103
+ */
104
+ #sourceLoader = _ErrorParser.fsSourceLoader;
105
+ /**
106
+ * Parsers are used to prepare the source value for parsing
107
+ */
108
+ #parsers = [];
109
+ /**
110
+ * Transformers are used to post process the parsed error and
111
+ * attach additional information to it.
112
+ */
113
+ #transformers = [];
114
+ constructor(options) {
115
+ options = options ?? {};
116
+ this.#offset = options.offset;
117
+ }
118
+ /**
119
+ * Normalizes the unknown error to be an Error
120
+ */
121
+ #normalizeError(source) {
122
+ if (source instanceof Error) {
123
+ return source;
124
+ }
125
+ if (typeof source === "object" && source && "message" in source && "stack" in source) {
126
+ return source;
127
+ }
128
+ const error = new Exception(JSON.stringify(source));
129
+ error.help = 'To get as much information as possible from your errors, make sure to throw Error objects. See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error</a> for more information.';
130
+ return error;
131
+ }
132
+ /**
133
+ * Returns the source chunks for a given file and the
134
+ * line number.
135
+ */
136
+ async #getSource(frame) {
137
+ let sourceFile = this.#sourceFiles.get(frame.fileName);
138
+ if (sourceFile) {
139
+ debug_default("reading sourcefile from cache %s", frame.fileName);
140
+ return sourceFile.slice(frame.lineNumber ?? 1, 11);
141
+ }
142
+ const contents = await this.#sourceLoader(frame);
143
+ if (contents) {
144
+ sourceFile = new SourceFile(contents);
145
+ debug_default("caching sourcefile instance for %s", frame.fileName);
146
+ this.#sourceFiles.set(frame.fileName, sourceFile);
147
+ return sourceFile.slice(frame.lineNumber ?? 1, 11);
148
+ }
149
+ }
150
+ /**
151
+ * Syntax errors in JavaScript does not contain the source file
152
+ * location within the stack trace, since the error has
153
+ * happened in the language parser.
154
+ *
155
+ * However, Node.js includes the absolute path to the file within
156
+ * the stack trace contents as the first line. So we parse
157
+ * that out in this function.
158
+ */
159
+ #parseSyntaxError(error) {
160
+ const [sourceIdentifier] = error.stack?.split("\n") || [];
161
+ const tokens = sourceIdentifier.split(":");
162
+ const lineNumber = Number(tokens.pop());
163
+ const fileName = tokens.join(":");
164
+ if (fileName && !Number.isNaN(lineNumber)) {
165
+ return [
166
+ {
167
+ fileName,
168
+ lineNumber,
169
+ source: sourceIdentifier
170
+ }
171
+ ];
172
+ }
173
+ return [];
174
+ }
175
+ /**
176
+ * Applies the offset on the frames to skip certain frames
177
+ * from the start
178
+ */
179
+ #applyOffset(frames) {
180
+ if (this.#offset) {
181
+ return frames.slice(this.#offset);
182
+ }
183
+ return frames;
184
+ }
185
+ /**
186
+ * Replaces windows slash to unix slash
187
+ */
188
+ #toUnixSlash(fileName) {
189
+ const isExtendedLengthPath = fileName.startsWith("\\\\?\\");
190
+ return isExtendedLengthPath ? fileName : fileName.replace(/\\/g, "/");
191
+ }
192
+ /**
193
+ * Normalizes the filename to be a path with unix slash. The
194
+ * URL style paths are also converted to normalized file
195
+ * paths
196
+ */
197
+ #normalizeFileName(fileName) {
198
+ if (fileName.startsWith("file:")) {
199
+ return this.#toUnixSlash(fileURLToPath(fileName));
200
+ }
201
+ return this.#toUnixSlash(fileName);
202
+ }
203
+ /**
204
+ * Returns the type of the frame.
205
+ */
206
+ #getFrameType(fileName) {
207
+ return this.#nativeFramesIdentifiers.some((identifier) => fileName.includes(identifier)) || fileName === this.#bunNativeIdentifier ? "native" : fileName.includes("node_modules/") ? "module" : "app";
208
+ }
209
+ /**
210
+ * Returns the source type of the frame.
211
+ */
212
+ #getFrameSourceType(fileName) {
213
+ return fileName.startsWith("http://") ? "http" : fileName.startsWith("https://") ? "https" : "fs";
214
+ }
215
+ /**
216
+ * Enhances a frame to contain additional information
217
+ */
218
+ async #enhanceFrames(frames) {
219
+ let stackFrames = [];
220
+ for (const { source: raw, ...frame } of frames) {
221
+ const stackFrame = {
222
+ ...frame,
223
+ raw
224
+ };
225
+ if (!stackFrame.fileName) {
226
+ stackFrames.push(stackFrame);
227
+ continue;
228
+ }
229
+ stackFrame.fileName = this.#normalizeFileName(stackFrame.fileName);
230
+ stackFrame.type = this.#getFrameType(stackFrame.fileName);
231
+ stackFrame.fileType = this.#getFrameSourceType(stackFrame.fileName);
232
+ stackFrame.source = await this.#getSource(stackFrame);
233
+ debug_default("stack frame %O", stackFrame);
234
+ stackFrames.push(stackFrame);
235
+ }
236
+ return stackFrames;
237
+ }
238
+ /**
239
+ * Register a parser. Parsers are synchronous functions
240
+ * that can be used to pre-process the source value
241
+ * before it get parsed.
242
+ *
243
+ * @example
244
+ * ```ts
245
+ * sourceFile.useParser((source) => {
246
+ * if (valueCanBeParsed) {
247
+ * return newValue
248
+ * }
249
+ * return source
250
+ * })
251
+ * ```
252
+ */
253
+ useParser(parser) {
254
+ this.#parsers.push(parser);
255
+ return this;
256
+ }
257
+ /**
258
+ * Register a transformer. Transformers can be async functions
259
+ * to post-process the parsed error value.
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * sourceFile.useTransformer((error, source) => {
264
+ * // mutate "error" properties
265
+ * })
266
+ * ```
267
+ */
268
+ useTransformer(transformer) {
269
+ this.#transformers.push(transformer);
270
+ return this;
271
+ }
272
+ /**
273
+ * Define a custom source loader to load the contents of the
274
+ * source file within the error stack.
275
+ *
276
+ * For example: You might want to register a custom source loader
277
+ * that makes an fetch call to the server to read the source of
278
+ * the file within the error stack.
279
+ */
280
+ defineSourceLoader(loader) {
281
+ this.#sourceLoader = loader;
282
+ return this;
283
+ }
284
+ /**
285
+ * Parse an unknown value into a parsed error object.
286
+ */
287
+ async parse(source) {
288
+ debug_default("parsing source %O", source);
289
+ source = this.#parsers.reduce((result, parser) => {
290
+ result = parser(result);
291
+ return result;
292
+ }, source);
293
+ let error = this.#normalizeError(source);
294
+ debug_default("error normalized to %O", error);
295
+ let esFrames = error instanceof SyntaxError ? this.#parseSyntaxError(error) : [];
296
+ esFrames = esFrames.concat(parse(error, { allowEmpty: true }));
297
+ esFrames = this.#applyOffset(esFrames);
298
+ const parsedError = {
299
+ message: error.message,
300
+ name: error.name,
301
+ frames: await this.#enhanceFrames(esFrames),
302
+ hint: "hint" in error && error.hint ? String(error.hint) : "help" in error && error.help ? String(error.help) : void 0,
303
+ code: "code" in error ? String(error.code) : void 0,
304
+ cause: error.cause,
305
+ stack: error.stack,
306
+ raw: error
307
+ };
308
+ for (const transformer of this.#transformers) {
309
+ await transformer(parsedError, error);
310
+ }
311
+ return parsedError;
312
+ }
313
+ };
314
+ export {
315
+ ErrorParser
316
+ };
@@ -0,0 +1,124 @@
1
+ {
2
+ "name": "youch-core",
3
+ "description": "Error parser to parse an error instance into a collection of frames",
4
+ "version": "0.3.3",
5
+ "type": "module",
6
+ "files": [
7
+ "build",
8
+ "!build/bin",
9
+ "!build/examples",
10
+ "!build/tests"
11
+ ],
12
+ "main": "build/index.js",
13
+ "exports": {
14
+ ".": "./build/index.js",
15
+ "./types": "./build/src/types.js"
16
+ },
17
+ "scripts": {
18
+ "pretest": "npm run lint",
19
+ "test": "c8 npm run quick:test",
20
+ "lint": "eslint .",
21
+ "format": "prettier --write .",
22
+ "typecheck": "tsc --noEmit",
23
+ "precompile": "npm run lint",
24
+ "compile": "tsup-node && tsc --emitDeclarationOnly --declaration",
25
+ "build": "npm run compile",
26
+ "version": "npm run build",
27
+ "prepublishOnly": "npm run build",
28
+ "release": "release-it",
29
+ "quick:test": "node --import=@poppinss/ts-exec --enable-source-maps bin/test.ts"
30
+ },
31
+ "devDependencies": {
32
+ "@adonisjs/eslint-config": "^3.0.0-next.0",
33
+ "@adonisjs/prettier-config": "^1.4.5",
34
+ "@adonisjs/tsconfig": "^2.0.0-next.0",
35
+ "@japa/assert": "^4.0.1",
36
+ "@japa/expect": "^3.0.4",
37
+ "@japa/expect-type": "^2.0.3",
38
+ "@japa/file-system": "^2.3.2",
39
+ "@japa/runner": "^4.2.0",
40
+ "@poppinss/ts-exec": "^1.4.0",
41
+ "@release-it/conventional-changelog": "^10.0.1",
42
+ "@types/node": "^24.0.10",
43
+ "ansis": "^4.1.0",
44
+ "axios": "^1.10.0",
45
+ "c8": "^10.1.3",
46
+ "eslint": "^9.30.1",
47
+ "got": "^14.4.7",
48
+ "prettier": "^3.6.2",
49
+ "release-it": "^19.0.3",
50
+ "strip-ansi": "^7.1.0",
51
+ "tinyhighlight": "^0.3.2",
52
+ "tsup": "^8.5.0",
53
+ "typescript": "^5.8.3",
54
+ "undici": "^7.11.0"
55
+ },
56
+ "dependencies": {
57
+ "@poppinss/exception": "^1.2.2",
58
+ "error-stack-parser-es": "^1.0.5"
59
+ },
60
+ "homepage": "https://github.com/poppinss/youch-core#readme",
61
+ "repository": {
62
+ "type": "git",
63
+ "url": "git+https://github.com/poppinss/youch-core.git"
64
+ },
65
+ "bugs": {
66
+ "url": "https://github.com/poppinss/youch-core/issues"
67
+ },
68
+ "keywords": [
69
+ "pretty-print",
70
+ "pretty-error"
71
+ ],
72
+ "author": "Harminder Virk <virk@adonisjs.com>",
73
+ "license": "MIT",
74
+ "publishConfig": {
75
+ "access": "public",
76
+ "provenance": true
77
+ },
78
+ "tsup": {
79
+ "entry": [
80
+ "index.ts",
81
+ "src/types.ts"
82
+ ],
83
+ "outDir": "./build",
84
+ "clean": true,
85
+ "format": "esm",
86
+ "dts": false,
87
+ "sourcemap": false,
88
+ "target": "esnext"
89
+ },
90
+ "release-it": {
91
+ "git": {
92
+ "requireCleanWorkingDir": true,
93
+ "requireUpstream": true,
94
+ "commitMessage": "chore(release): ${version}",
95
+ "tagAnnotation": "v${version}",
96
+ "push": true,
97
+ "tagName": "v${version}"
98
+ },
99
+ "github": {
100
+ "release": true
101
+ },
102
+ "npm": {
103
+ "publish": true,
104
+ "skipChecks": true
105
+ },
106
+ "plugins": {
107
+ "@release-it/conventional-changelog": {
108
+ "preset": {
109
+ "name": "angular"
110
+ }
111
+ }
112
+ }
113
+ },
114
+ "c8": {
115
+ "reporter": [
116
+ "text",
117
+ "html"
118
+ ],
119
+ "exclude": [
120
+ "tests/**"
121
+ ]
122
+ },
123
+ "prettier": "@adonisjs/prettier-config"
124
+ }
@@ -0,0 +1 @@
1
+ import "#nitro-internal-pollyfills";
@@ -0,0 +1,62 @@
1
+ import "#nitro-internal-pollyfills";
2
+ import { useNitroApp } from "nitro/runtime";
3
+ import { trapUnhandledNodeErrors } from "nitro/runtime/internal";
4
+ import { startScheduleRunner } from "nitro/runtime/internal";
5
+ import { Server } from "node:http";
6
+ import nodeCrypto from "node:crypto";
7
+ import { parentPort, threadId } from "node:worker_threads";
8
+ import wsAdapter from "crossws/adapters/node";
9
+ import { toNodeHandler } from "srvx/node";
10
+ import { getSocketAddress, isSocketSupported } from "get-port-please";
11
+ if (!globalThis.crypto) {
12
+ globalThis.crypto = nodeCrypto;
13
+ }
14
+ trapUnhandledNodeErrors();
15
+ parentPort?.on("message", (msg) => {
16
+ if (msg && msg.event === "shutdown") {
17
+ shutdown();
18
+ }
19
+ });
20
+ const nitroApp = useNitroApp();
21
+ const server = new Server(toNodeHandler(nitroApp.fetch));
22
+ let listener;
23
+ listen().catch((error) => {
24
+ console.error("Dev worker failed to listen:", error);
25
+ return shutdown();
26
+ });
27
+ if (import.meta._websocket) {
28
+ const { handleUpgrade } = wsAdapter(nitroApp.h3App.websocket);
29
+ server.on("upgrade", handleUpgrade);
30
+ }
31
+ if (import.meta._tasks) {
32
+ startScheduleRunner();
33
+ }
34
+ async function listen() {
35
+ const listenAddr = await isSocketSupported() ? getSocketAddress({
36
+ name: `nitro-dev-${threadId}`,
37
+ pid: true,
38
+ random: true
39
+ }) : { port: 0, host: "localhost" };
40
+ return new Promise((resolve, reject) => {
41
+ try {
42
+ listener = server.listen(listenAddr, () => {
43
+ const address = server.address();
44
+ parentPort?.postMessage({
45
+ event: "listen",
46
+ address: typeof address === "string" ? { socketPath: address } : { host: "localhost", port: address?.port }
47
+ });
48
+ resolve();
49
+ });
50
+ } catch (error) {
51
+ reject(error);
52
+ }
53
+ });
54
+ }
55
+ async function shutdown() {
56
+ server.closeAllConnections?.();
57
+ await Promise.all([
58
+ new Promise((resolve) => listener?.close(resolve)),
59
+ nitroApp.hooks.callHook("close").catch(console.error)
60
+ ]);
61
+ parentPort?.postMessage({ event: "exit" });
62
+ }
@@ -0,0 +1,3 @@
1
+ import "#nitro-internal-pollyfills";
2
+ export declare const appFetch: any;
3
+ export declare const closePrerenderer: () => any;
@@ -0,0 +1,18 @@
1
+ import "#nitro-internal-pollyfills";
2
+ import consola from "consola";
3
+ import { useNitroApp } from "nitro/runtime";
4
+ import { trapUnhandledNodeErrors } from "nitro/runtime/internal";
5
+ const nitroApp = useNitroApp();
6
+ export const appFetch = nitroApp.fetch;
7
+ export const closePrerenderer = () => nitroApp.hooks.callHook("close");
8
+ nitroApp.hooks.hook("error", (error, context) => {
9
+ if (!error.unhandled && error.status >= 500 && context.event?.req?.headers instanceof Headers && context.event.req.headers.get("x-nitro-prerender")) {
10
+ consola.error(
11
+ `[prerender error]`,
12
+ `[${context.event.req.method}]`,
13
+ `[${context.event.req.url}]`,
14
+ error
15
+ );
16
+ }
17
+ });
18
+ trapUnhandledNodeErrors();
@@ -0,0 +1 @@
1
+ import "#nitro-internal-pollyfills";
@@ -0,0 +1,21 @@
1
+ import "#nitro-internal-pollyfills";
2
+ import { useNitroApp } from "nitro/runtime";
3
+ import { isPublicAssetURL } from "#nitro-internal-virtual/public-assets";
4
+ const nitroApp = useNitroApp();
5
+ addEventListener("fetch", (event) => {
6
+ const url = new URL(event.request.url);
7
+ if (isPublicAssetURL(url.pathname) || url.pathname.includes("/_server/")) {
8
+ return;
9
+ }
10
+ const req = event.request;
11
+ req.runtime ??= { name: "service-worker" };
12
+ req.runtime.serviceWorker ??= { event };
13
+ req.waitUntil = event.waitUntil.bind(event);
14
+ event.respondWith(nitroApp.fetch(req));
15
+ });
16
+ self.addEventListener("install", () => {
17
+ self.skipWaiting();
18
+ });
19
+ self.addEventListener("activate", (event) => {
20
+ event.waitUntil(self.clients.claim());
21
+ });
@@ -0,0 +1 @@
1
+ import "#nitro-internal-pollyfills";
@@ -0,0 +1,13 @@
1
+ import "#nitro-internal-pollyfills";
2
+ import { useNitroApp } from "nitro/runtime";
3
+ import { Server } from "node:http";
4
+ import { toNodeHandler } from "srvx/node";
5
+ const nitroApp = useNitroApp();
6
+ const server = new Server(toNodeHandler(nitroApp.fetch));
7
+ server.listen(3e3, (err) => {
8
+ if (err) {
9
+ console.error(err);
10
+ } else {
11
+ console.log(`Listening on http://localhost:3000 (AWS Amplify Hosting)`);
12
+ }
13
+ });
@@ -0,0 +1,18 @@
1
+ import type { APIGatewayProxyEvent, APIGatewayProxyEventV2 } from "aws-lambda";
2
+ import type { ServerRequest } from "srvx";
3
+ export declare function awsRequest(event: APIGatewayProxyEvent | APIGatewayProxyEventV2, context: unknown): ServerRequest;
4
+ export declare function awsResponseHeaders(response: Response): {
5
+ headers: any;
6
+ cookies: string[];
7
+ multiValueHeaders: {
8
+ "set-cookie": string[];
9
+ };
10
+ } | {
11
+ headers: any;
12
+ cookies?: undefined;
13
+ multiValueHeaders?: undefined;
14
+ };
15
+ export declare function awsResponseBody(response: Response): Promise<{
16
+ body: string;
17
+ isBase64Encoded?: boolean;
18
+ }>;
@@ -0,0 +1,102 @@
1
+ import { stringifyQuery } from "ufo";
2
+ export function awsRequest(event, context) {
3
+ const method = awsEventMethod(event);
4
+ const url = awsEventURL(event);
5
+ const headers = awsEventHeaders(event);
6
+ const body = awsEventBody(event);
7
+ const req = new Request(url, { method, headers, body });
8
+ req.runtime ??= { name: "aws-lambda" };
9
+ req.runtime.aws ??= { event, context };
10
+ return new Request(url, { method, headers, body });
11
+ }
12
+ function awsEventMethod(event) {
13
+ return event.httpMethod || event.requestContext?.http?.method || "GET";
14
+ }
15
+ function awsEventURL(event) {
16
+ const hostname = event.headers.host || event.headers.Host || event.requestContext?.domainName || ".";
17
+ const path = event.path || event.rawPath;
18
+ const query = awsEventQuery(event);
19
+ const protocol = (event.headers["X-Forwarded-Proto"] || event.headers["x-forwarded-proto"]) === "http" ? "http" : "https";
20
+ return new URL(
21
+ `${path}${query ? `?${query}` : ""}`,
22
+ `${protocol}://${hostname}`
23
+ );
24
+ }
25
+ function awsEventQuery(event) {
26
+ if (typeof event.rawQueryString === "string") {
27
+ return event.rawQueryString;
28
+ }
29
+ const queryObj = {
30
+ ...event.queryStringParameters,
31
+ ...event.multiValueQueryStringParameters
32
+ };
33
+ return stringifyQuery(queryObj);
34
+ }
35
+ function awsEventHeaders(event) {
36
+ const headers = new Headers();
37
+ for (const [key, value] of Object.entries(event.headers)) {
38
+ if (value) {
39
+ headers.set(key, value);
40
+ }
41
+ }
42
+ if ("cookies" in event && event.cookies) {
43
+ for (const cookie of event.cookies) {
44
+ headers.append("cookie", cookie);
45
+ }
46
+ }
47
+ return headers;
48
+ }
49
+ function awsEventBody(event) {
50
+ if (!event.body) {
51
+ return void 0;
52
+ }
53
+ if (event.isBase64Encoded) {
54
+ return Buffer.from(event.body || "", "base64");
55
+ }
56
+ return event.body;
57
+ }
58
+ export function awsResponseHeaders(response) {
59
+ const headers = /* @__PURE__ */ Object.create(null);
60
+ for (const [key, value] of response.headers) {
61
+ if (value) {
62
+ headers[key] = Array.isArray(value) ? value.join(",") : String(value);
63
+ }
64
+ }
65
+ const cookies = response.headers.getSetCookie();
66
+ return cookies.length > 0 ? {
67
+ headers,
68
+ cookies,
69
+ // ApiGateway v2
70
+ multiValueHeaders: { "set-cookie": cookies }
71
+ // ApiGateway v1
72
+ } : { headers };
73
+ }
74
+ export async function awsResponseBody(response) {
75
+ if (!response.body) {
76
+ return { body: "" };
77
+ }
78
+ const buffer = await toBuffer(response.body);
79
+ const contentType = response.headers.get("content-type") || "";
80
+ return isTextType(contentType) ? { body: buffer.toString("utf8") } : { body: buffer.toString("base64"), isBase64Encoded: true };
81
+ }
82
+ function isTextType(contentType = "") {
83
+ return /^text\/|\/(javascript|json|xml)|utf-?8/i.test(contentType);
84
+ }
85
+ function toBuffer(data) {
86
+ return new Promise((resolve, reject) => {
87
+ const chunks = [];
88
+ data.pipeTo(
89
+ new WritableStream({
90
+ write(chunk) {
91
+ chunks.push(chunk);
92
+ },
93
+ close() {
94
+ resolve(Buffer.concat(chunks));
95
+ },
96
+ abort(reason) {
97
+ reject(reason);
98
+ }
99
+ })
100
+ ).catch(reject);
101
+ });
102
+ }