nitro 2.2.28 → 3.0.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 +170 -38
  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,430 @@
1
+ import { createServer, Server } from 'node:net';
2
+ import { networkInterfaces, tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { rm } from 'node:fs/promises';
5
+
6
+ const unsafePorts = /* @__PURE__ */ new Set([
7
+ 1,
8
+ // tcpmux
9
+ 7,
10
+ // echo
11
+ 9,
12
+ // discard
13
+ 11,
14
+ // systat
15
+ 13,
16
+ // daytime
17
+ 15,
18
+ // netstat
19
+ 17,
20
+ // qotd
21
+ 19,
22
+ // chargen
23
+ 20,
24
+ // ftp data
25
+ 21,
26
+ // ftp access
27
+ 22,
28
+ // ssh
29
+ 23,
30
+ // telnet
31
+ 25,
32
+ // smtp
33
+ 37,
34
+ // time
35
+ 42,
36
+ // name
37
+ 43,
38
+ // nicname
39
+ 53,
40
+ // domain
41
+ 69,
42
+ // tftp
43
+ 77,
44
+ // priv-rjs
45
+ 79,
46
+ // finger
47
+ 87,
48
+ // ttylink
49
+ 95,
50
+ // supdup
51
+ 101,
52
+ // hostriame
53
+ 102,
54
+ // iso-tsap
55
+ 103,
56
+ // gppitnp
57
+ 104,
58
+ // acr-nema
59
+ 109,
60
+ // pop2
61
+ 110,
62
+ // pop3
63
+ 111,
64
+ // sunrpc
65
+ 113,
66
+ // auth
67
+ 115,
68
+ // sftp
69
+ 117,
70
+ // uucp-path
71
+ 119,
72
+ // nntp
73
+ 123,
74
+ // NTP
75
+ 135,
76
+ // loc-srv /epmap
77
+ 137,
78
+ // netbios
79
+ 139,
80
+ // netbios
81
+ 143,
82
+ // imap2
83
+ 161,
84
+ // snmp
85
+ 179,
86
+ // BGP
87
+ 389,
88
+ // ldap
89
+ 427,
90
+ // SLP (Also used by Apple Filing Protocol)
91
+ 465,
92
+ // smtp+ssl
93
+ 512,
94
+ // print / exec
95
+ 513,
96
+ // login
97
+ 514,
98
+ // shell
99
+ 515,
100
+ // printer
101
+ 526,
102
+ // tempo
103
+ 530,
104
+ // courier
105
+ 531,
106
+ // chat
107
+ 532,
108
+ // netnews
109
+ 540,
110
+ // uucp
111
+ 548,
112
+ // AFP (Apple Filing Protocol)
113
+ 554,
114
+ // rtsp
115
+ 556,
116
+ // remotefs
117
+ 563,
118
+ // nntp+ssl
119
+ 587,
120
+ // smtp (rfc6409)
121
+ 601,
122
+ // syslog-conn (rfc3195)
123
+ 636,
124
+ // ldap+ssl
125
+ 989,
126
+ // ftps-data
127
+ 990,
128
+ // ftps
129
+ 993,
130
+ // ldap+ssl
131
+ 995,
132
+ // pop3+ssl
133
+ 1719,
134
+ // h323gatestat
135
+ 1720,
136
+ // h323hostcall
137
+ 1723,
138
+ // pptp
139
+ 2049,
140
+ // nfs
141
+ 3659,
142
+ // apple-sasl / PasswordServer
143
+ 4045,
144
+ // lockd
145
+ 5060,
146
+ // sip
147
+ 5061,
148
+ // sips
149
+ 6e3,
150
+ // X11
151
+ 6566,
152
+ // sane-port
153
+ 6665,
154
+ // Alternate IRC [Apple addition]
155
+ 6666,
156
+ // Alternate IRC [Apple addition]
157
+ 6667,
158
+ // Standard IRC [Apple addition]
159
+ 6668,
160
+ // Alternate IRC [Apple addition]
161
+ 6669,
162
+ // Alternate IRC [Apple addition]
163
+ 6697,
164
+ // IRC + TLS
165
+ 10080
166
+ // Amanda
167
+ ]);
168
+ function isUnsafePort(port) {
169
+ return unsafePorts.has(port);
170
+ }
171
+ function isSafePort(port) {
172
+ return !isUnsafePort(port);
173
+ }
174
+
175
+ class GetPortError extends Error {
176
+ constructor(message, opts) {
177
+ super(message, opts);
178
+ this.message = message;
179
+ }
180
+ name = "GetPortError";
181
+ }
182
+ function _log(verbose, message) {
183
+ if (verbose) {
184
+ console.log(`[get-port] ${message}`);
185
+ }
186
+ }
187
+ function _generateRange(from, to) {
188
+ if (to < from) {
189
+ return [];
190
+ }
191
+ const r = [];
192
+ for (let index = from; index <= to; index++) {
193
+ r.push(index);
194
+ }
195
+ return r;
196
+ }
197
+ function _tryPort(port, host) {
198
+ return new Promise((resolve) => {
199
+ const server = createServer();
200
+ server.unref();
201
+ server.on("error", () => {
202
+ resolve(false);
203
+ });
204
+ server.listen({ port, host }, () => {
205
+ const { port: port2 } = server.address();
206
+ server.close(() => {
207
+ resolve(isSafePort(port2) && port2);
208
+ });
209
+ });
210
+ });
211
+ }
212
+ function _getLocalHosts(additional) {
213
+ const hosts = new Set(additional);
214
+ for (const _interface of Object.values(networkInterfaces())) {
215
+ for (const config of _interface || []) {
216
+ if (config.address && !config.internal && !config.address.startsWith("fe80::") && // Link-Local
217
+ !config.address.startsWith("169.254")) {
218
+ hosts.add(config.address);
219
+ }
220
+ }
221
+ }
222
+ return [...hosts];
223
+ }
224
+ async function _findPort(ports, host) {
225
+ for (const port of ports) {
226
+ const r = await _tryPort(port, host);
227
+ if (r) {
228
+ return r;
229
+ }
230
+ }
231
+ }
232
+ function _fmtOnHost(hostname) {
233
+ return hostname ? `on host ${JSON.stringify(hostname)}` : "on any host";
234
+ }
235
+ const HOSTNAME_RE = /^(?!-)[\d.:A-Za-z-]{1,63}(?<!-)$/;
236
+ function _validateHostname(hostname, _public, verbose) {
237
+ if (hostname && !HOSTNAME_RE.test(hostname)) {
238
+ const fallbackHost = _public ? "0.0.0.0" : "127.0.0.1";
239
+ _log(
240
+ verbose,
241
+ `Invalid hostname: ${JSON.stringify(hostname)}. Using ${JSON.stringify(
242
+ fallbackHost
243
+ )} as fallback.`
244
+ );
245
+ return fallbackHost;
246
+ }
247
+ return hostname;
248
+ }
249
+
250
+ async function getPort(_userOptions = {}) {
251
+ if (typeof _userOptions === "number" || typeof _userOptions === "string") {
252
+ _userOptions = { port: Number.parseInt(_userOptions + "") || 0 };
253
+ }
254
+ const _port = Number(_userOptions.port ?? process.env.PORT);
255
+ const _userSpecifiedAnyPort = Boolean(
256
+ _userOptions.port || _userOptions.ports?.length || _userOptions.portRange?.length
257
+ );
258
+ const options = {
259
+ random: _port === 0,
260
+ ports: [],
261
+ portRange: [],
262
+ alternativePortRange: _userSpecifiedAnyPort ? [] : [3e3, 3100],
263
+ verbose: false,
264
+ ..._userOptions,
265
+ port: _port,
266
+ host: _validateHostname(
267
+ _userOptions.host ?? process.env.HOST,
268
+ _userOptions.public,
269
+ _userOptions.verbose
270
+ )
271
+ };
272
+ if (options.random && !_userSpecifiedAnyPort) {
273
+ return getRandomPort(options.host);
274
+ }
275
+ const portsToCheck = [
276
+ options.port,
277
+ ...options.ports,
278
+ ..._generateRange(...options.portRange)
279
+ ].filter((port) => {
280
+ if (!port) {
281
+ return false;
282
+ }
283
+ if (!isSafePort(port)) {
284
+ _log(options.verbose, `Ignoring unsafe port: ${port}`);
285
+ return false;
286
+ }
287
+ return true;
288
+ });
289
+ if (portsToCheck.length === 0) {
290
+ portsToCheck.push(3e3);
291
+ }
292
+ let availablePort = await _findPort(portsToCheck, options.host);
293
+ if (!availablePort && options.alternativePortRange.length > 0) {
294
+ availablePort = await _findPort(
295
+ _generateRange(...options.alternativePortRange),
296
+ options.host
297
+ );
298
+ if (portsToCheck.length > 0) {
299
+ let message = `Unable to find an available port (tried ${portsToCheck.join(
300
+ "-"
301
+ )} ${_fmtOnHost(options.host)}).`;
302
+ if (availablePort) {
303
+ message += ` Using alternative port ${availablePort}.`;
304
+ }
305
+ _log(options.verbose, message);
306
+ }
307
+ }
308
+ if (!availablePort && _userOptions.random !== false) {
309
+ availablePort = await getRandomPort(options.host);
310
+ if (availablePort) {
311
+ _log(options.verbose, `Using random port ${availablePort}`);
312
+ }
313
+ }
314
+ if (!availablePort) {
315
+ const triedRanges = [
316
+ options.port,
317
+ options.portRange.join("-"),
318
+ options.alternativePortRange.join("-")
319
+ ].filter(Boolean).join(", ");
320
+ throw new GetPortError(
321
+ `Unable to find an available port ${_fmtOnHost(
322
+ options.host
323
+ )} (tried ${triedRanges})`
324
+ );
325
+ }
326
+ return availablePort;
327
+ }
328
+ async function getRandomPort(host) {
329
+ const port = await checkPort(0, host);
330
+ if (port === false) {
331
+ throw new GetPortError(`Unable to find a random port ${_fmtOnHost(host)}`);
332
+ }
333
+ return port;
334
+ }
335
+ async function waitForPort(port, options = {}) {
336
+ const delay = options.delay || 500;
337
+ const retries = options.retries || 4;
338
+ for (let index = retries; index > 0; index--) {
339
+ if (await _tryPort(port, options.host) === false) {
340
+ return;
341
+ }
342
+ await new Promise((resolve) => setTimeout(resolve, delay));
343
+ }
344
+ throw new GetPortError(
345
+ `Timeout waiting for port ${port} after ${retries} retries with ${delay}ms interval.`
346
+ );
347
+ }
348
+ async function checkPort(port, host = process.env.HOST, verbose) {
349
+ if (!host) {
350
+ host = _getLocalHosts([void 0, "0.0.0.0"]);
351
+ }
352
+ if (!Array.isArray(host)) {
353
+ return _tryPort(port, host);
354
+ }
355
+ for (const _host of host) {
356
+ const _port = await _tryPort(port, _host);
357
+ if (_port === false) {
358
+ if (port < 1024 && verbose) {
359
+ _log(
360
+ verbose,
361
+ `Unable to listen to the privileged port ${port} ${_fmtOnHost(
362
+ _host
363
+ )}`
364
+ );
365
+ }
366
+ return false;
367
+ }
368
+ if (port === 0 && _port !== 0) {
369
+ port = _port;
370
+ }
371
+ }
372
+ return port;
373
+ }
374
+
375
+ let _nodeMajorVersion;
376
+ let _isSocketSupported;
377
+ function getSocketAddress(opts) {
378
+ const parts = [
379
+ opts.name,
380
+ opts.pid ? process.pid : void 0,
381
+ opts.random ? Math.round(Math.random() * 1e4) : void 0
382
+ ].filter(Boolean);
383
+ const socketName = `${parts.join("-")}.sock`;
384
+ if (process.platform === "win32") {
385
+ return join(String.raw`\\.\pipe`, socketName);
386
+ }
387
+ if (process.platform === "linux") {
388
+ if (_nodeMajorVersion === void 0) {
389
+ _nodeMajorVersion = +process.versions.node.split(".")[0];
390
+ }
391
+ if (_nodeMajorVersion >= 20) {
392
+ return `\0${socketName}`;
393
+ }
394
+ }
395
+ return join(tmpdir(), socketName);
396
+ }
397
+ async function isSocketSupported() {
398
+ if (_isSocketSupported !== void 0) {
399
+ return _isSocketSupported;
400
+ }
401
+ if (globalThis.process?.versions?.webcontainer) {
402
+ return false;
403
+ }
404
+ const socketAddress = getSocketAddress({ name: "get-port", random: true });
405
+ const server = new Server();
406
+ try {
407
+ await new Promise((resolve, reject) => {
408
+ server.on("error", reject);
409
+ server.listen(socketAddress, resolve);
410
+ });
411
+ _isSocketSupported = true;
412
+ return true;
413
+ } catch {
414
+ _isSocketSupported = false;
415
+ return false;
416
+ } finally {
417
+ if (server.listening) {
418
+ server.close();
419
+ await cleanSocket(socketAddress);
420
+ }
421
+ }
422
+ }
423
+ async function cleanSocket(path) {
424
+ if (!path || path[0] === "\0" || path.startsWith(String.raw`\\.\pipe`)) {
425
+ return;
426
+ }
427
+ return rm(path, { force: true, recursive: true }).catch(console.error);
428
+ }
429
+
430
+ export { checkPort, cleanSocket, getPort, getRandomPort, getSocketAddress, isSafePort, isSocketSupported, isUnsafePort, waitForPort };
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "get-port-please",
3
+ "version": "3.2.0",
4
+ "description": "Get an available TCP port to listen",
5
+ "repository": "unjs/get-port-please",
6
+ "license": "MIT",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.mjs",
10
+ "types": "./dist/index.d.ts",
11
+ "require": "./dist/index.cjs"
12
+ }
13
+ },
14
+ "main": "./dist/index.cjs",
15
+ "types": "./dist/index.d.ts",
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "devDependencies": {
20
+ "@types/node": "^24.0.13",
21
+ "@vitest/coverage-v8": "^3.2.4",
22
+ "changelogen": "^0.6.2",
23
+ "eslint": "^9.30.1",
24
+ "eslint-config-unjs": "^0.5.0",
25
+ "jiti": "^2.4.2",
26
+ "prettier": "^3.6.2",
27
+ "typescript": "^5.8.3",
28
+ "unbuild": "^3.5.0",
29
+ "vitest": "^3.2.4"
30
+ },
31
+ "scripts": {
32
+ "build": "unbuild",
33
+ "dev": "vitest",
34
+ "lint": "eslint . && prettier -c src test",
35
+ "lint:fix": "eslint --fix . && prettier -w src test",
36
+ "release": "pnpm test && pnpm build && changelogen --release --push && pnpm publish",
37
+ "test": "pnpm lint && vitest run"
38
+ }
39
+ }