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,503 @@
1
+ import { g as getMagicString, p as parse } from './index.mjs';
2
+ import 'node:path';
3
+ import 'node:process';
4
+ import 'scule';
5
+ import 'consola';
6
+ import 'hookable';
7
+ import 'nitro/runtime/meta';
8
+ import 'node:fs';
9
+ import 'node:fs/promises';
10
+ import 'node:url';
11
+ import 'node:os';
12
+ import 'node:assert';
13
+ import 'node:v8';
14
+ import 'node:util';
15
+ import 'jiti';
16
+ import 'destr';
17
+ import 'defu';
18
+ import './pathe.M-eThtNZ.mjs';
19
+ import 'fs';
20
+ import 'path';
21
+ import 'os';
22
+ import 'crypto';
23
+ import './app.mjs';
24
+ import 'node:worker_threads';
25
+ import 'std-env';
26
+ import 'fs/promises';
27
+ import 'events';
28
+ import 'node:stream';
29
+ import 'h3';
30
+ import 'url';
31
+ import 'tty';
32
+ import 'util';
33
+ import 'stream';
34
+ import 'ufo';
35
+ import 'node:http';
36
+ import 'node:https';
37
+ import 'node:events';
38
+ import 'undici';
39
+ import 'youch-core';
40
+ import 'youch';
41
+ import 'source-map';
42
+ import 'srvx';
43
+ import 'klona/full';
44
+ import 'node:module';
45
+ import 'ofetch';
46
+ import 'klona';
47
+ import 'unstorage';
48
+ import 'ohash';
49
+ import 'module';
50
+ import 'consola/utils';
51
+ import 'node:zlib';
52
+
53
+ /**
54
+ * @typedef { import('estree').Node} Node
55
+ * @typedef {{
56
+ * skip: () => void;
57
+ * remove: () => void;
58
+ * replace: (node: Node) => void;
59
+ * }} WalkerContext
60
+ */
61
+
62
+ class WalkerBase {
63
+ constructor() {
64
+ /** @type {boolean} */
65
+ this.should_skip = false;
66
+
67
+ /** @type {boolean} */
68
+ this.should_remove = false;
69
+
70
+ /** @type {Node | null} */
71
+ this.replacement = null;
72
+
73
+ /** @type {WalkerContext} */
74
+ this.context = {
75
+ skip: () => (this.should_skip = true),
76
+ remove: () => (this.should_remove = true),
77
+ replace: (node) => (this.replacement = node)
78
+ };
79
+ }
80
+
81
+ /**
82
+ * @template {Node} Parent
83
+ * @param {Parent | null | undefined} parent
84
+ * @param {keyof Parent | null | undefined} prop
85
+ * @param {number | null | undefined} index
86
+ * @param {Node} node
87
+ */
88
+ replace(parent, prop, index, node) {
89
+ if (parent && prop) {
90
+ if (index != null) {
91
+ /** @type {Array<Node>} */ (parent[prop])[index] = node;
92
+ } else {
93
+ /** @type {Node} */ (parent[prop]) = node;
94
+ }
95
+ }
96
+ }
97
+
98
+ /**
99
+ * @template {Node} Parent
100
+ * @param {Parent | null | undefined} parent
101
+ * @param {keyof Parent | null | undefined} prop
102
+ * @param {number | null | undefined} index
103
+ */
104
+ remove(parent, prop, index) {
105
+ if (parent && prop) {
106
+ if (index !== null && index !== undefined) {
107
+ /** @type {Array<Node>} */ (parent[prop]).splice(index, 1);
108
+ } else {
109
+ delete parent[prop];
110
+ }
111
+ }
112
+ }
113
+ }
114
+
115
+ /**
116
+ * @typedef { import('estree').Node} Node
117
+ * @typedef { import('./walker.js').WalkerContext} WalkerContext
118
+ * @typedef {(
119
+ * this: WalkerContext,
120
+ * node: Node,
121
+ * parent: Node | null,
122
+ * key: string | number | symbol | null | undefined,
123
+ * index: number | null | undefined
124
+ * ) => void} SyncHandler
125
+ */
126
+
127
+ class SyncWalker extends WalkerBase {
128
+ /**
129
+ *
130
+ * @param {SyncHandler} [enter]
131
+ * @param {SyncHandler} [leave]
132
+ */
133
+ constructor(enter, leave) {
134
+ super();
135
+
136
+ /** @type {boolean} */
137
+ this.should_skip = false;
138
+
139
+ /** @type {boolean} */
140
+ this.should_remove = false;
141
+
142
+ /** @type {Node | null} */
143
+ this.replacement = null;
144
+
145
+ /** @type {WalkerContext} */
146
+ this.context = {
147
+ skip: () => (this.should_skip = true),
148
+ remove: () => (this.should_remove = true),
149
+ replace: (node) => (this.replacement = node)
150
+ };
151
+
152
+ /** @type {SyncHandler | undefined} */
153
+ this.enter = enter;
154
+
155
+ /** @type {SyncHandler | undefined} */
156
+ this.leave = leave;
157
+ }
158
+
159
+ /**
160
+ * @template {Node} Parent
161
+ * @param {Node} node
162
+ * @param {Parent | null} parent
163
+ * @param {keyof Parent} [prop]
164
+ * @param {number | null} [index]
165
+ * @returns {Node | null}
166
+ */
167
+ visit(node, parent, prop, index) {
168
+ if (node) {
169
+ if (this.enter) {
170
+ const _should_skip = this.should_skip;
171
+ const _should_remove = this.should_remove;
172
+ const _replacement = this.replacement;
173
+ this.should_skip = false;
174
+ this.should_remove = false;
175
+ this.replacement = null;
176
+
177
+ this.enter.call(this.context, node, parent, prop, index);
178
+
179
+ if (this.replacement) {
180
+ node = this.replacement;
181
+ this.replace(parent, prop, index, node);
182
+ }
183
+
184
+ if (this.should_remove) {
185
+ this.remove(parent, prop, index);
186
+ }
187
+
188
+ const skipped = this.should_skip;
189
+ const removed = this.should_remove;
190
+
191
+ this.should_skip = _should_skip;
192
+ this.should_remove = _should_remove;
193
+ this.replacement = _replacement;
194
+
195
+ if (skipped) return node;
196
+ if (removed) return null;
197
+ }
198
+
199
+ /** @type {keyof Node} */
200
+ let key;
201
+
202
+ for (key in node) {
203
+ /** @type {unknown} */
204
+ const value = node[key];
205
+
206
+ if (value && typeof value === 'object') {
207
+ if (Array.isArray(value)) {
208
+ const nodes = /** @type {Array<unknown>} */ (value);
209
+ for (let i = 0; i < nodes.length; i += 1) {
210
+ const item = nodes[i];
211
+ if (isNode(item)) {
212
+ if (!this.visit(item, node, key, i)) {
213
+ // removed
214
+ i--;
215
+ }
216
+ }
217
+ }
218
+ } else if (isNode(value)) {
219
+ this.visit(value, node, key, null);
220
+ }
221
+ }
222
+ }
223
+
224
+ if (this.leave) {
225
+ const _replacement = this.replacement;
226
+ const _should_remove = this.should_remove;
227
+ this.replacement = null;
228
+ this.should_remove = false;
229
+
230
+ this.leave.call(this.context, node, parent, prop, index);
231
+
232
+ if (this.replacement) {
233
+ node = this.replacement;
234
+ this.replace(parent, prop, index, node);
235
+ }
236
+
237
+ if (this.should_remove) {
238
+ this.remove(parent, prop, index);
239
+ }
240
+
241
+ const removed = this.should_remove;
242
+
243
+ this.replacement = _replacement;
244
+ this.should_remove = _should_remove;
245
+
246
+ if (removed) return null;
247
+ }
248
+ }
249
+
250
+ return node;
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Ducktype a node.
256
+ *
257
+ * @param {unknown} value
258
+ * @returns {value is Node}
259
+ */
260
+ function isNode(value) {
261
+ return (
262
+ value !== null && typeof value === 'object' && 'type' in value && typeof value.type === 'string'
263
+ );
264
+ }
265
+
266
+ /**
267
+ * @typedef {import('estree').Node} Node
268
+ * @typedef {import('./sync.js').SyncHandler} SyncHandler
269
+ * @typedef {import('./async.js').AsyncHandler} AsyncHandler
270
+ */
271
+
272
+ /**
273
+ * @param {Node} ast
274
+ * @param {{
275
+ * enter?: SyncHandler
276
+ * leave?: SyncHandler
277
+ * }} walker
278
+ * @returns {Node | null}
279
+ */
280
+ function walk(ast, { enter, leave }) {
281
+ const instance = new SyncWalker(enter, leave);
282
+ return instance.visit(ast, null);
283
+ }
284
+
285
+ async function detectImportsAcorn(code, ctx, options) {
286
+ const s = getMagicString(code);
287
+ const map = await ctx.getImportMap();
288
+ let matchedImports = [];
289
+ const enableAutoImport = options?.autoImport !== false;
290
+ const enableTransformVirtualImports = options?.transformVirtualImports !== false && ctx.options.virtualImports?.length;
291
+ if (enableAutoImport || enableTransformVirtualImports) {
292
+ const ast = parse(s.original, {
293
+ sourceType: "module",
294
+ ecmaVersion: "latest",
295
+ locations: true
296
+ });
297
+ const virtualImports = createVirtualImportsAcronWalker(map, ctx.options.virtualImports);
298
+ const scopes = traveseScopes(
299
+ ast,
300
+ enableTransformVirtualImports ? virtualImports.walk : {}
301
+ );
302
+ if (enableAutoImport) {
303
+ const identifiers = scopes.unmatched;
304
+ matchedImports.push(
305
+ ...Array.from(identifiers).map((name) => {
306
+ const item = map.get(name);
307
+ if (item && !item.disabled)
308
+ return item;
309
+ return null;
310
+ }).filter(Boolean)
311
+ );
312
+ for (const addon of ctx.addons)
313
+ matchedImports = await addon.matchImports?.call(ctx, identifiers, matchedImports) || matchedImports;
314
+ }
315
+ virtualImports.ranges.forEach(([start, end]) => {
316
+ s.remove(start, end);
317
+ });
318
+ matchedImports.push(...virtualImports.imports);
319
+ }
320
+ return {
321
+ s,
322
+ strippedCode: code.toString(),
323
+ matchedImports,
324
+ isCJSContext: false,
325
+ firstOccurrence: 0
326
+ // TODO:
327
+ };
328
+ }
329
+ function traveseScopes(ast, additionalWalk) {
330
+ const scopes = [];
331
+ let scopeCurrent = void 0;
332
+ const scopesStack = [];
333
+ function pushScope(node) {
334
+ scopeCurrent = {
335
+ node,
336
+ parent: scopeCurrent,
337
+ declarations: /* @__PURE__ */ new Set(),
338
+ references: /* @__PURE__ */ new Set()
339
+ };
340
+ scopes.push(scopeCurrent);
341
+ scopesStack.push(scopeCurrent);
342
+ }
343
+ function popScope(node) {
344
+ const scope = scopesStack.pop();
345
+ if (scope?.node !== node)
346
+ throw new Error("Scope mismatch");
347
+ scopeCurrent = scopesStack[scopesStack.length - 1];
348
+ }
349
+ pushScope(void 0);
350
+ walk(ast, {
351
+ enter(node, parent, prop, index) {
352
+ additionalWalk?.enter?.call(this, node, parent, prop, index);
353
+ switch (node.type) {
354
+ // ====== Declaration ======
355
+ case "ImportSpecifier":
356
+ case "ImportDefaultSpecifier":
357
+ case "ImportNamespaceSpecifier":
358
+ scopeCurrent.declarations.add(node.local.name);
359
+ return;
360
+ case "FunctionDeclaration":
361
+ case "ClassDeclaration":
362
+ if (node.id)
363
+ scopeCurrent.declarations.add(node.id.name);
364
+ return;
365
+ case "VariableDeclarator":
366
+ if (node.id.type === "Identifier") {
367
+ scopeCurrent.declarations.add(node.id.name);
368
+ } else {
369
+ walk(node.id, {
370
+ enter(node2) {
371
+ if (node2.type === "ObjectPattern") {
372
+ node2.properties.forEach((i) => {
373
+ if (i.type === "Property" && i.value.type === "Identifier")
374
+ scopeCurrent.declarations.add(i.value.name);
375
+ else if (i.type === "RestElement" && i.argument.type === "Identifier")
376
+ scopeCurrent.declarations.add(i.argument.name);
377
+ });
378
+ } else if (node2.type === "ArrayPattern") {
379
+ node2.elements.forEach((i) => {
380
+ if (i?.type === "Identifier")
381
+ scopeCurrent.declarations.add(i.name);
382
+ if (i?.type === "RestElement" && i.argument.type === "Identifier")
383
+ scopeCurrent.declarations.add(i.argument.name);
384
+ });
385
+ }
386
+ }
387
+ });
388
+ }
389
+ return;
390
+ // ====== Scope ======
391
+ case "BlockStatement":
392
+ pushScope(node);
393
+ return;
394
+ // ====== Reference ======
395
+ case "Identifier":
396
+ switch (parent?.type) {
397
+ case "CallExpression":
398
+ if (parent.callee === node || parent.arguments.includes(node))
399
+ scopeCurrent.references.add(node.name);
400
+ return;
401
+ case "MemberExpression":
402
+ if (parent.object === node)
403
+ scopeCurrent.references.add(node.name);
404
+ return;
405
+ case "VariableDeclarator":
406
+ if (parent.init === node)
407
+ scopeCurrent.references.add(node.name);
408
+ return;
409
+ case "SpreadElement":
410
+ if (parent.argument === node)
411
+ scopeCurrent.references.add(node.name);
412
+ return;
413
+ case "ClassDeclaration":
414
+ if (parent.superClass === node)
415
+ scopeCurrent.references.add(node.name);
416
+ return;
417
+ case "Property":
418
+ if (parent.value === node)
419
+ scopeCurrent.references.add(node.name);
420
+ return;
421
+ case "TemplateLiteral":
422
+ if (parent.expressions.includes(node))
423
+ scopeCurrent.references.add(node.name);
424
+ return;
425
+ case "AssignmentExpression":
426
+ if (parent.right === node)
427
+ scopeCurrent.references.add(node.name);
428
+ return;
429
+ case "IfStatement":
430
+ case "WhileStatement":
431
+ case "DoWhileStatement":
432
+ if (parent.test === node)
433
+ scopeCurrent.references.add(node.name);
434
+ return;
435
+ case "SwitchStatement":
436
+ if (parent.discriminant === node)
437
+ scopeCurrent.references.add(node.name);
438
+ return;
439
+ }
440
+ if (parent?.type.includes("Expression"))
441
+ scopeCurrent.references.add(node.name);
442
+ }
443
+ },
444
+ leave(node, parent, prop, index) {
445
+ additionalWalk?.leave?.call(this, node, parent, prop, index);
446
+ switch (node.type) {
447
+ case "BlockStatement":
448
+ popScope(node);
449
+ }
450
+ }
451
+ });
452
+ const unmatched = /* @__PURE__ */ new Set();
453
+ for (const scope of scopes) {
454
+ for (const name of scope.references) {
455
+ let defined = false;
456
+ let parent = scope;
457
+ while (parent) {
458
+ if (parent.declarations.has(name)) {
459
+ defined = true;
460
+ break;
461
+ }
462
+ parent = parent?.parent;
463
+ }
464
+ if (!defined)
465
+ unmatched.add(name);
466
+ }
467
+ }
468
+ return {
469
+ unmatched,
470
+ scopes
471
+ };
472
+ }
473
+ function createVirtualImportsAcronWalker(importMap, virtualImports = []) {
474
+ const imports = [];
475
+ const ranges = [];
476
+ return {
477
+ imports,
478
+ ranges,
479
+ walk: {
480
+ enter(node) {
481
+ if (node.type === "ImportDeclaration") {
482
+ if (virtualImports.includes(node.source.value)) {
483
+ ranges.push([node.start, node.end]);
484
+ node.specifiers.forEach((i) => {
485
+ if (i.type === "ImportSpecifier" && i.imported.type === "Identifier") {
486
+ const original = importMap.get(i.imported.name);
487
+ if (!original)
488
+ throw new Error(`[unimport] failed to find "${i.imported.name}" imported from "${node.source.value}"`);
489
+ imports.push({
490
+ from: original.from,
491
+ name: original.name,
492
+ as: i.local.name
493
+ });
494
+ }
495
+ });
496
+ }
497
+ }
498
+ }
499
+ }
500
+ };
501
+ }
502
+
503
+ export { createVirtualImportsAcronWalker, detectImportsAcorn, traveseScopes };