@volter/tabnode 0.2.14-volter.88

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 (429) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +78 -0
  3. package/THIRD-PARTY-NOTICES.md +12 -0
  4. package/dist/__sw__.js +526 -0
  5. package/dist/assets/runtime-worker-4MKaHFVb.js +75221 -0
  6. package/dist/assets/runtime-worker-4MKaHFVb.js.map +1 -0
  7. package/dist/code-transforms.d.ts +21 -0
  8. package/dist/code-transforms.d.ts.map +1 -0
  9. package/dist/config/cdn.d.ts +12 -0
  10. package/dist/config/cdn.d.ts.map +1 -0
  11. package/dist/create-runtime.d.ts +22 -0
  12. package/dist/create-runtime.d.ts.map +1 -0
  13. package/dist/host-globals.d.ts +62 -0
  14. package/dist/host-globals.d.ts.map +1 -0
  15. package/dist/index.cjs +36021 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +127 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.mjs +36020 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/node-internals.d.ts +68 -0
  22. package/dist/node-internals.d.ts.map +1 -0
  23. package/dist/node-lib/binding/blob.d.ts +12 -0
  24. package/dist/node-lib/binding/blob.d.ts.map +1 -0
  25. package/dist/node-lib/binding/buffer.d.ts +144 -0
  26. package/dist/node-lib/binding/buffer.d.ts.map +1 -0
  27. package/dist/node-lib/binding/cares_wrap.d.ts +14 -0
  28. package/dist/node-lib/binding/cares_wrap.d.ts.map +1 -0
  29. package/dist/node-lib/binding/fds.d.ts +30 -0
  30. package/dist/node-lib/binding/fds.d.ts.map +1 -0
  31. package/dist/node-lib/binding/fs.d.ts +157 -0
  32. package/dist/node-lib/binding/fs.d.ts.map +1 -0
  33. package/dist/node-lib/binding/handles.d.ts +81 -0
  34. package/dist/node-lib/binding/handles.d.ts.map +1 -0
  35. package/dist/node-lib/binding/http_parser.d.ts +122 -0
  36. package/dist/node-lib/binding/http_parser.d.ts.map +1 -0
  37. package/dist/node-lib/binding/index.d.ts +3 -0
  38. package/dist/node-lib/binding/index.d.ts.map +1 -0
  39. package/dist/node-lib/binding/llhttp-wasm.d.ts +22 -0
  40. package/dist/node-lib/binding/llhttp-wasm.d.ts.map +1 -0
  41. package/dist/node-lib/binding/misc.d.ts +123 -0
  42. package/dist/node-lib/binding/misc.d.ts.map +1 -0
  43. package/dist/node-lib/binding/pipe_wrap.d.ts +84 -0
  44. package/dist/node-lib/binding/pipe_wrap.d.ts.map +1 -0
  45. package/dist/node-lib/binding/process_wrap.d.ts +173 -0
  46. package/dist/node-lib/binding/process_wrap.d.ts.map +1 -0
  47. package/dist/node-lib/binding/spawn_sync.d.ts +30 -0
  48. package/dist/node-lib/binding/spawn_sync.d.ts.map +1 -0
  49. package/dist/node-lib/binding/stream_wrap.d.ts +191 -0
  50. package/dist/node-lib/binding/stream_wrap.d.ts.map +1 -0
  51. package/dist/node-lib/binding/stubs.d.ts +23 -0
  52. package/dist/node-lib/binding/stubs.d.ts.map +1 -0
  53. package/dist/node-lib/binding/tcp_wrap.d.ts +98 -0
  54. package/dist/node-lib/binding/tcp_wrap.d.ts.map +1 -0
  55. package/dist/node-lib/binding/tty_wrap.d.ts +36 -0
  56. package/dist/node-lib/binding/tty_wrap.d.ts.map +1 -0
  57. package/dist/node-lib/binding/util.d.ts +126 -0
  58. package/dist/node-lib/binding/util.d.ts.map +1 -0
  59. package/dist/node-lib/binding/uv.d.ts +32 -0
  60. package/dist/node-lib/binding/uv.d.ts.map +1 -0
  61. package/dist/node-lib/binding/zlib-pako.d.ts +22 -0
  62. package/dist/node-lib/binding/zlib-pako.d.ts.map +1 -0
  63. package/dist/node-lib/binding/zlib.d.ts +38 -0
  64. package/dist/node-lib/binding/zlib.d.ts.map +1 -0
  65. package/dist/node-lib/buffer-module.d.ts +51 -0
  66. package/dist/node-lib/buffer-module.d.ts.map +1 -0
  67. package/dist/node-lib/child-process-module.d.ts +26 -0
  68. package/dist/node-lib/child-process-module.d.ts.map +1 -0
  69. package/dist/node-lib/events-module.d.ts +58 -0
  70. package/dist/node-lib/events-module.d.ts.map +1 -0
  71. package/dist/node-lib/fs-module.d.ts +5 -0
  72. package/dist/node-lib/fs-module.d.ts.map +1 -0
  73. package/dist/node-lib/http-bridge.d.ts +43 -0
  74. package/dist/node-lib/http-bridge.d.ts.map +1 -0
  75. package/dist/node-lib/http-module.d.ts +35 -0
  76. package/dist/node-lib/http-module.d.ts.map +1 -0
  77. package/dist/node-lib/internals/addresses.d.ts +40 -0
  78. package/dist/node-lib/internals/addresses.d.ts.map +1 -0
  79. package/dist/node-lib/internals/buffer-and-streams.d.ts +96 -0
  80. package/dist/node-lib/internals/buffer-and-streams.d.ts.map +1 -0
  81. package/dist/node-lib/internals/child-process.d.ts +27 -0
  82. package/dist/node-lib/internals/child-process.d.ts.map +1 -0
  83. package/dist/node-lib/internals/events-util.d.ts +83 -0
  84. package/dist/node-lib/internals/events-util.d.ts.map +1 -0
  85. package/dist/node-lib/internals/index.d.ts +2 -0
  86. package/dist/node-lib/internals/index.d.ts.map +1 -0
  87. package/dist/node-lib/internals/modules.d.ts +67 -0
  88. package/dist/node-lib/internals/modules.d.ts.map +1 -0
  89. package/dist/node-lib/internals/readline-access.d.ts +2 -0
  90. package/dist/node-lib/internals/readline-access.d.ts.map +1 -0
  91. package/dist/node-lib/internals/runtime.d.ts +150 -0
  92. package/dist/node-lib/internals/runtime.d.ts.map +1 -0
  93. package/dist/node-lib/internals/util.d.ts +33 -0
  94. package/dist/node-lib/internals/util.d.ts.map +1 -0
  95. package/dist/node-lib/lazy.d.ts +31 -0
  96. package/dist/node-lib/lazy.d.ts.map +1 -0
  97. package/dist/node-lib/load.d.ts +27 -0
  98. package/dist/node-lib/load.d.ts.map +1 -0
  99. package/dist/node-lib/module-hooks.d.ts +89 -0
  100. package/dist/node-lib/module-hooks.d.ts.map +1 -0
  101. package/dist/node-lib/net-module.d.ts +181 -0
  102. package/dist/node-lib/net-module.d.ts.map +1 -0
  103. package/dist/node-lib/node-versions.d.ts +27 -0
  104. package/dist/node-lib/node-versions.d.ts.map +1 -0
  105. package/dist/node-lib/public-modules.d.ts +2 -0
  106. package/dist/node-lib/public-modules.d.ts.map +1 -0
  107. package/dist/node-lib/require-hook.d.ts +15 -0
  108. package/dist/node-lib/require-hook.d.ts.map +1 -0
  109. package/dist/node-lib/small-modules.d.ts +16 -0
  110. package/dist/node-lib/small-modules.d.ts.map +1 -0
  111. package/dist/node-lib/sources.d.ts +4 -0
  112. package/dist/node-lib/sources.d.ts.map +1 -0
  113. package/dist/node-lib/stream-module.d.ts +77 -0
  114. package/dist/node-lib/stream-module.d.ts.map +1 -0
  115. package/dist/node-lib/timers.d.ts +19 -0
  116. package/dist/node-lib/timers.d.ts.map +1 -0
  117. package/dist/node-lib/util-module.d.ts +76 -0
  118. package/dist/node-lib/util-module.d.ts.map +1 -0
  119. package/dist/node-resolution.d.ts +50 -0
  120. package/dist/node-resolution.d.ts.map +1 -0
  121. package/dist/node-resolver.d.ts +7 -0
  122. package/dist/node-resolver.d.ts.map +1 -0
  123. package/dist/npm/index.d.ts +73 -0
  124. package/dist/npm/index.d.ts.map +1 -0
  125. package/dist/npm/registry.d.ts +111 -0
  126. package/dist/npm/registry.d.ts.map +1 -0
  127. package/dist/npm/resolver.d.ts +79 -0
  128. package/dist/npm/resolver.d.ts.map +1 -0
  129. package/dist/npm/tarball.d.ts +28 -0
  130. package/dist/npm/tarball.d.ts.map +1 -0
  131. package/dist/process-tokens.d.ts +77 -0
  132. package/dist/process-tokens.d.ts.map +1 -0
  133. package/dist/punycode-source.d.ts +3 -0
  134. package/dist/punycode-source.d.ts.map +1 -0
  135. package/dist/runtime-interface.d.ts +74 -0
  136. package/dist/runtime-interface.d.ts.map +1 -0
  137. package/dist/runtime.d.ts +144 -0
  138. package/dist/runtime.d.ts.map +1 -0
  139. package/dist/server-bridge.d.ts +147 -0
  140. package/dist/server-bridge.d.ts.map +1 -0
  141. package/dist/shims/async_hooks.d.ts +50 -0
  142. package/dist/shims/async_hooks.d.ts.map +1 -0
  143. package/dist/shims/child_process.d.ts +104 -0
  144. package/dist/shims/child_process.d.ts.map +1 -0
  145. package/dist/shims/cluster.d.ts +52 -0
  146. package/dist/shims/cluster.d.ts.map +1 -0
  147. package/dist/shims/command-line.d.ts +43 -0
  148. package/dist/shims/command-line.d.ts.map +1 -0
  149. package/dist/shims/constants.d.ts +222 -0
  150. package/dist/shims/constants.d.ts.map +1 -0
  151. package/dist/shims/crypto-constants.d.ts +12 -0
  152. package/dist/shims/crypto-constants.d.ts.map +1 -0
  153. package/dist/shims/crypto.d.ts +144 -0
  154. package/dist/shims/crypto.d.ts.map +1 -0
  155. package/dist/shims/dgram.d.ts +34 -0
  156. package/dist/shims/dgram.d.ts.map +1 -0
  157. package/dist/shims/dns.d.ts +91 -0
  158. package/dist/shims/dns.d.ts.map +1 -0
  159. package/dist/shims/domain.d.ts +25 -0
  160. package/dist/shims/domain.d.ts.map +1 -0
  161. package/dist/shims/esbuild.d.ts +205 -0
  162. package/dist/shims/esbuild.d.ts.map +1 -0
  163. package/dist/shims/fs.d.ts +25 -0
  164. package/dist/shims/fs.d.ts.map +1 -0
  165. package/dist/shims/http2.d.ts +81 -0
  166. package/dist/shims/http2.d.ts.map +1 -0
  167. package/dist/shims/inspector.d.ts +25 -0
  168. package/dist/shims/inspector.d.ts.map +1 -0
  169. package/dist/shims/module.d.ts +22 -0
  170. package/dist/shims/module.d.ts.map +1 -0
  171. package/dist/shims/os.d.ts +159 -0
  172. package/dist/shims/os.d.ts.map +1 -0
  173. package/dist/shims/path.d.ts +52 -0
  174. package/dist/shims/path.d.ts.map +1 -0
  175. package/dist/shims/perf_hooks.d.ts +50 -0
  176. package/dist/shims/perf_hooks.d.ts.map +1 -0
  177. package/dist/shims/process.d.ts +226 -0
  178. package/dist/shims/process.d.ts.map +1 -0
  179. package/dist/shims/rollup.d.ts +71 -0
  180. package/dist/shims/rollup.d.ts.map +1 -0
  181. package/dist/shims/string_decoder.d.ts +41 -0
  182. package/dist/shims/string_decoder.d.ts.map +1 -0
  183. package/dist/shims/sync-child.d.ts +64 -0
  184. package/dist/shims/sync-child.d.ts.map +1 -0
  185. package/dist/shims/tls.d.ts +53 -0
  186. package/dist/shims/tls.d.ts.map +1 -0
  187. package/dist/shims/url.d.ts +84 -0
  188. package/dist/shims/url.d.ts.map +1 -0
  189. package/dist/shims/v8.d.ts +73 -0
  190. package/dist/shims/v8.d.ts.map +1 -0
  191. package/dist/shims/vfs-adapter.d.ts +126 -0
  192. package/dist/shims/vfs-adapter.d.ts.map +1 -0
  193. package/dist/shims/vm.d.ts +52 -0
  194. package/dist/shims/vm.d.ts.map +1 -0
  195. package/dist/shims/wasi.d.ts +78 -0
  196. package/dist/shims/wasi.d.ts.map +1 -0
  197. package/dist/shims/worker_threads.d.ts +66 -0
  198. package/dist/shims/worker_threads.d.ts.map +1 -0
  199. package/dist/shims/zlib-constants.d.ts +66 -0
  200. package/dist/shims/zlib-constants.d.ts.map +1 -0
  201. package/dist/shims/zlib.d.ts +102 -0
  202. package/dist/shims/zlib.d.ts.map +1 -0
  203. package/dist/transform.d.ts +24 -0
  204. package/dist/transform.d.ts.map +1 -0
  205. package/dist/types/package-json.d.ts +18 -0
  206. package/dist/types/package-json.d.ts.map +1 -0
  207. package/dist/utils/binary-encoding.d.ts +13 -0
  208. package/dist/utils/binary-encoding.d.ts.map +1 -0
  209. package/dist/utils/glob.d.ts +19 -0
  210. package/dist/utils/glob.d.ts.map +1 -0
  211. package/dist/utils/hash.d.ts +6 -0
  212. package/dist/utils/hash.d.ts.map +1 -0
  213. package/dist/virtual-fs.d.ts +259 -0
  214. package/dist/virtual-fs.d.ts.map +1 -0
  215. package/dist/vite-plugin.cjs +50 -0
  216. package/dist/vite-plugin.cjs.map +1 -0
  217. package/dist/vite-plugin.d.ts +36 -0
  218. package/dist/vite-plugin.d.ts.map +1 -0
  219. package/dist/vite-plugin.mjs +31 -0
  220. package/dist/vite-plugin.mjs.map +1 -0
  221. package/dist/worker/runtime-worker.d.ts +8 -0
  222. package/dist/worker/runtime-worker.d.ts.map +1 -0
  223. package/dist/worker-runtime.d.ts +50 -0
  224. package/dist/worker-runtime.d.ts.map +1 -0
  225. package/package.json +88 -0
  226. package/src/code-transforms.ts +560 -0
  227. package/src/config/cdn.ts +13 -0
  228. package/src/create-runtime.ts +89 -0
  229. package/src/host-globals.ts +121 -0
  230. package/src/index.ts +235 -0
  231. package/src/node-internals.ts +283 -0
  232. package/src/node-lib/LICENSE +47 -0
  233. package/src/node-lib/_http_agent.js +547 -0
  234. package/src/node-lib/_http_client.js +996 -0
  235. package/src/node-lib/_http_common.js +269 -0
  236. package/src/node-lib/_http_incoming.js +453 -0
  237. package/src/node-lib/_http_outgoing.js +1262 -0
  238. package/src/node-lib/_http_server.js +1230 -0
  239. package/src/node-lib/assert/strict.js +3 -0
  240. package/src/node-lib/assert.js +844 -0
  241. package/src/node-lib/binding/blob.ts +35 -0
  242. package/src/node-lib/binding/buffer.ts +465 -0
  243. package/src/node-lib/binding/cares_wrap.ts +57 -0
  244. package/src/node-lib/binding/fds.ts +80 -0
  245. package/src/node-lib/binding/fs.ts +857 -0
  246. package/src/node-lib/binding/handles.ts +187 -0
  247. package/src/node-lib/binding/http_parser.ts +536 -0
  248. package/src/node-lib/binding/index.ts +77 -0
  249. package/src/node-lib/binding/llhttp-wasm.ts +670 -0
  250. package/src/node-lib/binding/misc.ts +252 -0
  251. package/src/node-lib/binding/pipe_wrap.ts +166 -0
  252. package/src/node-lib/binding/process_wrap.ts +371 -0
  253. package/src/node-lib/binding/spawn_sync.ts +141 -0
  254. package/src/node-lib/binding/stream_wrap.ts +413 -0
  255. package/src/node-lib/binding/stubs.ts +19 -0
  256. package/src/node-lib/binding/tcp_wrap.ts +254 -0
  257. package/src/node-lib/binding/tty_wrap.ts +56 -0
  258. package/src/node-lib/binding/util.ts +274 -0
  259. package/src/node-lib/binding/uv.ts +102 -0
  260. package/src/node-lib/binding/zlib-pako.ts +50 -0
  261. package/src/node-lib/binding/zlib.ts +259 -0
  262. package/src/node-lib/buffer-module.ts +70 -0
  263. package/src/node-lib/buffer.js +1373 -0
  264. package/src/node-lib/child-process-module.ts +58 -0
  265. package/src/node-lib/child_process.js +1046 -0
  266. package/src/node-lib/constants.js +41 -0
  267. package/src/node-lib/diagnostics_channel.js +438 -0
  268. package/src/node-lib/events-module.ts +80 -0
  269. package/src/node-lib/events.js +1223 -0
  270. package/src/node-lib/fs-module.ts +43 -0
  271. package/src/node-lib/fs.js +3377 -0
  272. package/src/node-lib/http-bridge.ts +299 -0
  273. package/src/node-lib/http-module.ts +53 -0
  274. package/src/node-lib/http.js +198 -0
  275. package/src/node-lib/https.js +429 -0
  276. package/src/node-lib/internal/assert/assertion_error.js +417 -0
  277. package/src/node-lib/internal/assert/calltracker.js +153 -0
  278. package/src/node-lib/internal/assert/myers_diff.js +177 -0
  279. package/src/node-lib/internal/assert/utils.js +278 -0
  280. package/src/node-lib/internal/buffer.js +1120 -0
  281. package/src/node-lib/internal/child_process/serialization.js +169 -0
  282. package/src/node-lib/internal/child_process.js +1135 -0
  283. package/src/node-lib/internal/constants.js +56 -0
  284. package/src/node-lib/internal/deps/minimatch/index.js +1628 -0
  285. package/src/node-lib/internal/errors.js +1912 -0
  286. package/src/node-lib/internal/events/abort_listener.js +54 -0
  287. package/src/node-lib/internal/events/symbols.js +11 -0
  288. package/src/node-lib/internal/fixed_queue.js +119 -0
  289. package/src/node-lib/internal/freelist.js +30 -0
  290. package/src/node-lib/internal/fs/cp/cp-sync.js +242 -0
  291. package/src/node-lib/internal/fs/cp/cp.js +382 -0
  292. package/src/node-lib/internal/fs/dir.js +369 -0
  293. package/src/node-lib/internal/fs/glob.js +763 -0
  294. package/src/node-lib/internal/fs/promises.js +1312 -0
  295. package/src/node-lib/internal/fs/read/context.js +129 -0
  296. package/src/node-lib/internal/fs/recursive_watch.js +275 -0
  297. package/src/node-lib/internal/fs/rimraf.js +311 -0
  298. package/src/node-lib/internal/fs/streams.js +571 -0
  299. package/src/node-lib/internal/fs/sync_write_stream.js +49 -0
  300. package/src/node-lib/internal/fs/utils.js +987 -0
  301. package/src/node-lib/internal/fs/watchers.js +418 -0
  302. package/src/node-lib/internal/http.js +62 -0
  303. package/src/node-lib/internal/mime.js +389 -0
  304. package/src/node-lib/internal/modules/customization_hooks.js +406 -0
  305. package/src/node-lib/internal/net.js +95 -0
  306. package/src/node-lib/internal/querystring.js +119 -0
  307. package/src/node-lib/internal/readline/callbacks.js +132 -0
  308. package/src/node-lib/internal/readline/emitKeypressEvents.js +99 -0
  309. package/src/node-lib/internal/readline/interface.js +1418 -0
  310. package/src/node-lib/internal/readline/promises.js +144 -0
  311. package/src/node-lib/internal/readline/utils.js +405 -0
  312. package/src/node-lib/internal/socket_list.js +108 -0
  313. package/src/node-lib/internal/stream_base_commons.js +280 -0
  314. package/src/node-lib/internal/streams/add-abort-signal.js +60 -0
  315. package/src/node-lib/internal/streams/compose.js +257 -0
  316. package/src/node-lib/internal/streams/destroy.js +361 -0
  317. package/src/node-lib/internal/streams/duplex.js +203 -0
  318. package/src/node-lib/internal/streams/duplexify.js +379 -0
  319. package/src/node-lib/internal/streams/duplexpair.js +62 -0
  320. package/src/node-lib/internal/streams/end-of-stream.js +331 -0
  321. package/src/node-lib/internal/streams/from.js +208 -0
  322. package/src/node-lib/internal/streams/lazy_transform.js +57 -0
  323. package/src/node-lib/internal/streams/legacy.js +125 -0
  324. package/src/node-lib/internal/streams/operators.js +436 -0
  325. package/src/node-lib/internal/streams/passthrough.js +47 -0
  326. package/src/node-lib/internal/streams/pipeline.js +465 -0
  327. package/src/node-lib/internal/streams/readable.js +1762 -0
  328. package/src/node-lib/internal/streams/state.js +51 -0
  329. package/src/node-lib/internal/streams/transform.js +204 -0
  330. package/src/node-lib/internal/streams/utils.js +363 -0
  331. package/src/node-lib/internal/streams/writable.js +1163 -0
  332. package/src/node-lib/internal/tty.js +260 -0
  333. package/src/node-lib/internal/util/colors.js +40 -0
  334. package/src/node-lib/internal/util/comparisons.js +1028 -0
  335. package/src/node-lib/internal/util/debuglog.js +524 -0
  336. package/src/node-lib/internal/util/inspect.js +2535 -0
  337. package/src/node-lib/internal/util/parse_args/parse_args.js +412 -0
  338. package/src/node-lib/internal/util/parse_args/utils.js +197 -0
  339. package/src/node-lib/internal/util.js +1003 -0
  340. package/src/node-lib/internal/validators.js +654 -0
  341. package/src/node-lib/internals/addresses.ts +159 -0
  342. package/src/node-lib/internals/buffer-and-streams.ts +224 -0
  343. package/src/node-lib/internals/child-process.ts +64 -0
  344. package/src/node-lib/internals/events-util.ts +105 -0
  345. package/src/node-lib/internals/index.ts +66 -0
  346. package/src/node-lib/internals/modules.ts +117 -0
  347. package/src/node-lib/internals/readline-access.ts +16 -0
  348. package/src/node-lib/internals/runtime.ts +277 -0
  349. package/src/node-lib/internals/util.ts +98 -0
  350. package/src/node-lib/lazy.ts +158 -0
  351. package/src/node-lib/load.ts +390 -0
  352. package/src/node-lib/module-hooks.ts +281 -0
  353. package/src/node-lib/net-module.ts +248 -0
  354. package/src/node-lib/net.js +2540 -0
  355. package/src/node-lib/node-versions.ts +34 -0
  356. package/src/node-lib/os.js +356 -0
  357. package/src/node-lib/path.js +1694 -0
  358. package/src/node-lib/primordials.js +743 -0
  359. package/src/node-lib/public-modules.ts +109 -0
  360. package/src/node-lib/punycode.js +455 -0
  361. package/src/node-lib/querystring.js +484 -0
  362. package/src/node-lib/readline/promises.js +73 -0
  363. package/src/node-lib/readline.js +523 -0
  364. package/src/node-lib/require-hook.ts +27 -0
  365. package/src/node-lib/small-modules.ts +35 -0
  366. package/src/node-lib/sources.ts +200 -0
  367. package/src/node-lib/stream/promises.js +44 -0
  368. package/src/node-lib/stream-module.ts +101 -0
  369. package/src/node-lib/stream.js +152 -0
  370. package/src/node-lib/timers.ts +33 -0
  371. package/src/node-lib/tty.js +168 -0
  372. package/src/node-lib/util-module.ts +104 -0
  373. package/src/node-lib/util.js +689 -0
  374. package/src/node-lib/wasi.js +179 -0
  375. package/src/node-lib/zlib.js +1036 -0
  376. package/src/node-resolution.ts +241 -0
  377. package/src/node-resolver.ts +33 -0
  378. package/src/npm/index.ts +425 -0
  379. package/src/npm/registry.ts +235 -0
  380. package/src/npm/resolver.ts +589 -0
  381. package/src/npm/tarball.ts +246 -0
  382. package/src/process-tokens.ts +156 -0
  383. package/src/punycode-source.ts +6 -0
  384. package/src/runtime-interface.ts +85 -0
  385. package/src/runtime.ts +3073 -0
  386. package/src/server-bridge.ts +971 -0
  387. package/src/shims/async_hooks.ts +181 -0
  388. package/src/shims/child_process.ts +1591 -0
  389. package/src/shims/cluster.ts +79 -0
  390. package/src/shims/command-line.ts +79 -0
  391. package/src/shims/constants.ts +68 -0
  392. package/src/shims/crypto-constants.ts +11 -0
  393. package/src/shims/crypto.ts +1061 -0
  394. package/src/shims/dgram.ts +47 -0
  395. package/src/shims/dns.ts +185 -0
  396. package/src/shims/domain.ts +58 -0
  397. package/src/shims/esbuild.ts +1638 -0
  398. package/src/shims/fs.ts +82 -0
  399. package/src/shims/http2.ts +96 -0
  400. package/src/shims/inspector.ts +30 -0
  401. package/src/shims/module.ts +86 -0
  402. package/src/shims/os.ts +195 -0
  403. package/src/shims/path.ts +246 -0
  404. package/src/shims/perf_hooks.ts +92 -0
  405. package/src/shims/process.ts +804 -0
  406. package/src/shims/rollup.ts +149 -0
  407. package/src/shims/string_decoder.ts +396 -0
  408. package/src/shims/sync-child.ts +469 -0
  409. package/src/shims/tls.ts +94 -0
  410. package/src/shims/url.ts +217 -0
  411. package/src/shims/v8.ts +113 -0
  412. package/src/shims/vfs-adapter.ts +408 -0
  413. package/src/shims/vm.ts +132 -0
  414. package/src/shims/wasi.ts +1440 -0
  415. package/src/shims/worker_threads.ts +114 -0
  416. package/src/shims/zlib-constants.ts +65 -0
  417. package/src/shims/zlib.ts +228 -0
  418. package/src/transform.ts +324 -0
  419. package/src/types/external.d.ts +55 -0
  420. package/src/types/package-json.ts +17 -0
  421. package/src/types/pako-zlib.d.ts +30 -0
  422. package/src/types/sha.js.d.ts +14 -0
  423. package/src/utils/binary-encoding.ts +43 -0
  424. package/src/utils/glob.ts +54 -0
  425. package/src/utils/hash.ts +12 -0
  426. package/src/virtual-fs.ts +1048 -0
  427. package/src/vite-plugin.ts +76 -0
  428. package/src/worker/runtime-worker.ts +128 -0
  429. package/src/worker-runtime.ts +145 -0
@@ -0,0 +1,144 @@
1
+ 'use strict';
2
+
3
+ const {
4
+ ArrayPrototypeJoin,
5
+ ArrayPrototypePush,
6
+ Promise,
7
+ } = primordials;
8
+
9
+ const { CSI } = require('internal/readline/utils');
10
+ const { validateBoolean, validateInteger } = require('internal/validators');
11
+ const { isWritable } = require('internal/streams/utils');
12
+ const { codes: {
13
+ ERR_INVALID_ARG_TYPE,
14
+ } } = require('internal/errors');
15
+
16
+ const {
17
+ kClearToLineBeginning,
18
+ kClearToLineEnd,
19
+ kClearLine,
20
+ kClearScreenDown,
21
+ } = CSI;
22
+
23
+ class Readline {
24
+ #autoCommit = false;
25
+ #stream;
26
+ #todo = [];
27
+
28
+ constructor(stream, options = undefined) {
29
+ if (!isWritable(stream))
30
+ throw new ERR_INVALID_ARG_TYPE('stream', 'Writable', stream);
31
+ this.#stream = stream;
32
+ if (options?.autoCommit != null) {
33
+ validateBoolean(options.autoCommit, 'options.autoCommit');
34
+ this.#autoCommit = options.autoCommit;
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Moves the cursor to the x and y coordinate on the given stream.
40
+ * @param {integer} x
41
+ * @param {integer} [y]
42
+ * @returns {Readline} this
43
+ */
44
+ cursorTo(x, y = undefined) {
45
+ validateInteger(x, 'x');
46
+ if (y != null) validateInteger(y, 'y');
47
+
48
+ const data = y == null ? CSI`${x + 1}G` : CSI`${y + 1};${x + 1}H`;
49
+ if (this.#autoCommit) process.nextTick(() => this.#stream.write(data));
50
+ else ArrayPrototypePush(this.#todo, data);
51
+
52
+ return this;
53
+ }
54
+
55
+ /**
56
+ * Moves the cursor relative to its current location.
57
+ * @param {integer} dx
58
+ * @param {integer} dy
59
+ * @returns {Readline} this
60
+ */
61
+ moveCursor(dx, dy) {
62
+ if (dx || dy) {
63
+ validateInteger(dx, 'dx');
64
+ validateInteger(dy, 'dy');
65
+
66
+ let data = '';
67
+
68
+ if (dx < 0) {
69
+ data += CSI`${-dx}D`;
70
+ } else if (dx > 0) {
71
+ data += CSI`${dx}C`;
72
+ }
73
+
74
+ if (dy < 0) {
75
+ data += CSI`${-dy}A`;
76
+ } else if (dy > 0) {
77
+ data += CSI`${dy}B`;
78
+ }
79
+ if (this.#autoCommit) process.nextTick(() => this.#stream.write(data));
80
+ else ArrayPrototypePush(this.#todo, data);
81
+ }
82
+ return this;
83
+ }
84
+
85
+ /**
86
+ * Clears the current line the cursor is on.
87
+ * @param {-1|0|1} dir Direction to clear:
88
+ * -1 for left of the cursor
89
+ * +1 for right of the cursor
90
+ * 0 for the entire line
91
+ * @returns {Readline} this
92
+ */
93
+ clearLine(dir) {
94
+ validateInteger(dir, 'dir', -1, 1);
95
+
96
+ const data =
97
+ dir < 0 ? kClearToLineBeginning :
98
+ dir > 0 ? kClearToLineEnd :
99
+ kClearLine;
100
+ if (this.#autoCommit) process.nextTick(() => this.#stream.write(data));
101
+ else ArrayPrototypePush(this.#todo, data);
102
+ return this;
103
+ }
104
+
105
+ /**
106
+ * Clears the screen from the current position of the cursor down.
107
+ * @returns {Readline} this
108
+ */
109
+ clearScreenDown() {
110
+ if (this.#autoCommit) {
111
+ process.nextTick(() => this.#stream.write(kClearScreenDown));
112
+ } else {
113
+ ArrayPrototypePush(this.#todo, kClearScreenDown);
114
+ }
115
+ return this;
116
+ }
117
+
118
+ /**
119
+ * Sends all the pending actions to the associated `stream` and clears the
120
+ * internal list of pending actions.
121
+ * @returns {Promise<void>} Resolves when all pending actions have been
122
+ * flushed to the associated `stream`.
123
+ */
124
+ commit() {
125
+ return new Promise((resolve) => {
126
+ this.#stream.write(ArrayPrototypeJoin(this.#todo, ''), resolve);
127
+ this.#todo = [];
128
+ });
129
+ }
130
+
131
+ /**
132
+ * Clears the internal list of pending actions without sending it to the
133
+ * associated `stream`.
134
+ * @returns {Readline} this
135
+ */
136
+ rollback() {
137
+ this.#todo = [];
138
+ return this;
139
+ }
140
+ }
141
+
142
+ module.exports = {
143
+ Readline,
144
+ };
@@ -0,0 +1,405 @@
1
+ 'use strict';
2
+
3
+ const {
4
+ ArrayPrototypeToSorted,
5
+ RegExpPrototypeExec,
6
+ StringFromCharCode,
7
+ StringPrototypeCharCodeAt,
8
+ StringPrototypeCodePointAt,
9
+ StringPrototypeSlice,
10
+ StringPrototypeToLowerCase,
11
+ Symbol,
12
+ } = primordials;
13
+
14
+ const kUTF16SurrogateThreshold = 0x10000; // 2 ** 16
15
+ const kEscape = '\x1b';
16
+ const kSubstringSearch = Symbol('kSubstringSearch');
17
+
18
+ function CSI(strings, ...args) {
19
+ let ret = `${kEscape}[`;
20
+ for (let n = 0; n < strings.length; n++) {
21
+ ret += strings[n];
22
+ if (n < args.length)
23
+ ret += args[n];
24
+ }
25
+ return ret;
26
+ }
27
+
28
+ CSI.kEscape = kEscape;
29
+ CSI.kClearToLineBeginning = CSI`1K`;
30
+ CSI.kClearToLineEnd = CSI`0K`;
31
+ CSI.kClearLine = CSI`2K`;
32
+ CSI.kClearScreenDown = CSI`0J`;
33
+
34
+ // TODO(BridgeAR): Treat combined characters as single character, i.e,
35
+ // 'a\u0301' and '\u0301a' (both have the same visual output).
36
+ // Check Canonical_Combining_Class in
37
+ // http://userguide.icu-project.org/strings/properties
38
+ function charLengthLeft(str, i) {
39
+ if (i <= 0)
40
+ return 0;
41
+ if ((i > 1 &&
42
+ StringPrototypeCodePointAt(str, i - 2) >= kUTF16SurrogateThreshold) ||
43
+ StringPrototypeCodePointAt(str, i - 1) >= kUTF16SurrogateThreshold) {
44
+ return 2;
45
+ }
46
+ return 1;
47
+ }
48
+
49
+ function charLengthAt(str, i) {
50
+ if (str.length <= i) {
51
+ // Pretend to move to the right. This is necessary to autocomplete while
52
+ // moving to the right.
53
+ return 1;
54
+ }
55
+ return StringPrototypeCodePointAt(str, i) >= kUTF16SurrogateThreshold ? 2 : 1;
56
+ }
57
+
58
+ /*
59
+ Some patterns seen in terminal key escape codes, derived from combos seen
60
+ at http://www.midnight-commander.org/browser/lib/tty/key.c
61
+
62
+ ESC letter
63
+ ESC [ letter
64
+ ESC [ modifier letter
65
+ ESC [ 1 ; modifier letter
66
+ ESC [ num char
67
+ ESC [ num ; modifier char
68
+ ESC O letter
69
+ ESC O modifier letter
70
+ ESC O 1 ; modifier letter
71
+ ESC N letter
72
+ ESC [ [ num ; modifier char
73
+ ESC [ [ 1 ; modifier letter
74
+ ESC ESC [ num char
75
+ ESC ESC O letter
76
+
77
+ - char is usually ~ but $ and ^ also happen with rxvt
78
+ - modifier is 1 +
79
+ (shift * 1) +
80
+ (left_alt * 2) +
81
+ (ctrl * 4) +
82
+ (right_alt * 8)
83
+ - two leading ESCs apparently mean the same as one leading ESC
84
+ */
85
+ function* emitKeys(stream) {
86
+ while (true) {
87
+ let ch = yield;
88
+ let s = ch;
89
+ let escaped = false;
90
+ const key = {
91
+ sequence: null,
92
+ name: undefined,
93
+ ctrl: false,
94
+ meta: false,
95
+ shift: false,
96
+ };
97
+
98
+ if (ch === kEscape) {
99
+ escaped = true;
100
+ s += (ch = yield);
101
+
102
+ if (ch === kEscape) {
103
+ s += (ch = yield);
104
+ }
105
+ }
106
+
107
+ if (escaped && (ch === 'O' || ch === '[')) {
108
+ // ANSI escape sequence
109
+ let code = ch;
110
+ let modifier = 0;
111
+
112
+ if (ch === 'O') {
113
+ // ESC O letter
114
+ // ESC O modifier letter
115
+ s += (ch = yield);
116
+
117
+ if (ch >= '0' && ch <= '9') {
118
+ modifier = (ch >> 0) - 1;
119
+ s += (ch = yield);
120
+ }
121
+
122
+ code += ch;
123
+ } else if (ch === '[') {
124
+ // ESC [ letter
125
+ // ESC [ modifier letter
126
+ // ESC [ [ modifier letter
127
+ // ESC [ [ num char
128
+ s += (ch = yield);
129
+
130
+ if (ch === '[') {
131
+ // \x1b[[A
132
+ // ^--- escape codes might have a second bracket
133
+ code += ch;
134
+ s += (ch = yield);
135
+ }
136
+
137
+ /*
138
+ * Here and later we try to buffer just enough data to get
139
+ * a complete ascii sequence.
140
+ *
141
+ * We have basically two classes of ascii characters to process:
142
+ *
143
+ *
144
+ * 1. `\x1b[24;5~` should be parsed as { code: '[24~', modifier: 5 }
145
+ *
146
+ * This particular example is featuring Ctrl+F12 in xterm.
147
+ *
148
+ * - `;5` part is optional, e.g. it could be `\x1b[24~`
149
+ * - first part can contain one or two digits
150
+ * - there is also special case when there can be 3 digits
151
+ * but without modifier. They are the case of paste bracket mode
152
+ *
153
+ * So the generic regexp is like /^(?:\d\d?(;\d)?[~^$]|\d{3}~)$/
154
+ *
155
+ *
156
+ * 2. `\x1b[1;5H` should be parsed as { code: '[H', modifier: 5 }
157
+ *
158
+ * This particular example is featuring Ctrl+Home in xterm.
159
+ *
160
+ * - `1;5` part is optional, e.g. it could be `\x1b[H`
161
+ * - `1;` part is optional, e.g. it could be `\x1b[5H`
162
+ *
163
+ * So the generic regexp is like /^((\d;)?\d)?[A-Za-z]$/
164
+ *
165
+ */
166
+ const cmdStart = s.length - 1;
167
+
168
+ // Skip one or two leading digits
169
+ if (ch >= '0' && ch <= '9') {
170
+ s += (ch = yield);
171
+
172
+ if (ch >= '0' && ch <= '9') {
173
+ s += (ch = yield);
174
+
175
+ if (ch >= '0' && ch <= '9') {
176
+ s += (ch = yield);
177
+ }
178
+ }
179
+ }
180
+
181
+ // skip modifier
182
+ if (ch === ';') {
183
+ s += (ch = yield);
184
+
185
+ if (ch >= '0' && ch <= '9') {
186
+ s += yield;
187
+ }
188
+ }
189
+
190
+ /*
191
+ * We buffered enough data, now trying to extract code
192
+ * and modifier from it
193
+ */
194
+ const cmd = StringPrototypeSlice(s, cmdStart);
195
+ let match;
196
+
197
+ if ((match = RegExpPrototypeExec(/^(?:(\d\d?)(?:;(\d))?([~^$])|(\d{3}~))$/, cmd))) {
198
+ if (match[4]) {
199
+ code += match[4];
200
+ } else {
201
+ code += match[1] + match[3];
202
+ modifier = (match[2] || 1) - 1;
203
+ }
204
+ } else if (
205
+ (match = RegExpPrototypeExec(/^((\d;)?(\d))?([A-Za-z])$/, cmd))
206
+ ) {
207
+ code += match[4];
208
+ modifier = (match[3] || 1) - 1;
209
+ } else {
210
+ code += cmd;
211
+ }
212
+ }
213
+
214
+ // Parse the key modifier
215
+ key.ctrl = !!(modifier & 4);
216
+ key.meta = !!(modifier & 10);
217
+ key.shift = !!(modifier & 1);
218
+ key.code = code;
219
+
220
+ // Parse the key itself
221
+ switch (code) {
222
+ /* xterm/gnome ESC [ letter (with modifier) */
223
+ case '[P': key.name = 'f1'; break;
224
+ case '[Q': key.name = 'f2'; break;
225
+ case '[R': key.name = 'f3'; break;
226
+ case '[S': key.name = 'f4'; break;
227
+
228
+ /* xterm/gnome ESC O letter (without modifier) */
229
+ case 'OP': key.name = 'f1'; break;
230
+ case 'OQ': key.name = 'f2'; break;
231
+ case 'OR': key.name = 'f3'; break;
232
+ case 'OS': key.name = 'f4'; break;
233
+
234
+ /* xterm/rxvt ESC [ number ~ */
235
+ case '[11~': key.name = 'f1'; break;
236
+ case '[12~': key.name = 'f2'; break;
237
+ case '[13~': key.name = 'f3'; break;
238
+ case '[14~': key.name = 'f4'; break;
239
+
240
+ /* paste bracket mode */
241
+ case '[200~': key.name = 'paste-start'; break;
242
+ case '[201~': key.name = 'paste-end'; break;
243
+
244
+ /* from Cygwin and used in libuv */
245
+ case '[[A': key.name = 'f1'; break;
246
+ case '[[B': key.name = 'f2'; break;
247
+ case '[[C': key.name = 'f3'; break;
248
+ case '[[D': key.name = 'f4'; break;
249
+ case '[[E': key.name = 'f5'; break;
250
+
251
+ /* common */
252
+ case '[15~': key.name = 'f5'; break;
253
+ case '[17~': key.name = 'f6'; break;
254
+ case '[18~': key.name = 'f7'; break;
255
+ case '[19~': key.name = 'f8'; break;
256
+ case '[20~': key.name = 'f9'; break;
257
+ case '[21~': key.name = 'f10'; break;
258
+ case '[23~': key.name = 'f11'; break;
259
+ case '[24~': key.name = 'f12'; break;
260
+
261
+ /* xterm ESC [ letter */
262
+ case '[A': key.name = 'up'; break;
263
+ case '[B': key.name = 'down'; break;
264
+ case '[C': key.name = 'right'; break;
265
+ case '[D': key.name = 'left'; break;
266
+ case '[E': key.name = 'clear'; break;
267
+ case '[F': key.name = 'end'; break;
268
+ case '[H': key.name = 'home'; break;
269
+
270
+ /* xterm/gnome ESC O letter */
271
+ case 'OA': key.name = 'up'; break;
272
+ case 'OB': key.name = 'down'; break;
273
+ case 'OC': key.name = 'right'; break;
274
+ case 'OD': key.name = 'left'; break;
275
+ case 'OE': key.name = 'clear'; break;
276
+ case 'OF': key.name = 'end'; break;
277
+ case 'OH': key.name = 'home'; break;
278
+
279
+ /* xterm/rxvt ESC [ number ~ */
280
+ case '[1~': key.name = 'home'; break;
281
+ case '[2~': key.name = 'insert'; break;
282
+ case '[3~': key.name = 'delete'; break;
283
+ case '[4~': key.name = 'end'; break;
284
+ case '[5~': key.name = 'pageup'; break;
285
+ case '[6~': key.name = 'pagedown'; break;
286
+
287
+ /* putty */
288
+ case '[[5~': key.name = 'pageup'; break;
289
+ case '[[6~': key.name = 'pagedown'; break;
290
+
291
+ /* rxvt */
292
+ case '[7~': key.name = 'home'; break;
293
+ case '[8~': key.name = 'end'; break;
294
+
295
+ /* rxvt keys with modifiers */
296
+ case '[a': key.name = 'up'; key.shift = true; break;
297
+ case '[b': key.name = 'down'; key.shift = true; break;
298
+ case '[c': key.name = 'right'; key.shift = true; break;
299
+ case '[d': key.name = 'left'; key.shift = true; break;
300
+ case '[e': key.name = 'clear'; key.shift = true; break;
301
+
302
+ case '[2$': key.name = 'insert'; key.shift = true; break;
303
+ case '[3$': key.name = 'delete'; key.shift = true; break;
304
+ case '[5$': key.name = 'pageup'; key.shift = true; break;
305
+ case '[6$': key.name = 'pagedown'; key.shift = true; break;
306
+ case '[7$': key.name = 'home'; key.shift = true; break;
307
+ case '[8$': key.name = 'end'; key.shift = true; break;
308
+
309
+ case 'Oa': key.name = 'up'; key.ctrl = true; break;
310
+ case 'Ob': key.name = 'down'; key.ctrl = true; break;
311
+ case 'Oc': key.name = 'right'; key.ctrl = true; break;
312
+ case 'Od': key.name = 'left'; key.ctrl = true; break;
313
+ case 'Oe': key.name = 'clear'; key.ctrl = true; break;
314
+
315
+ case '[2^': key.name = 'insert'; key.ctrl = true; break;
316
+ case '[3^': key.name = 'delete'; key.ctrl = true; break;
317
+ case '[5^': key.name = 'pageup'; key.ctrl = true; break;
318
+ case '[6^': key.name = 'pagedown'; key.ctrl = true; break;
319
+ case '[7^': key.name = 'home'; key.ctrl = true; break;
320
+ case '[8^': key.name = 'end'; key.ctrl = true; break;
321
+
322
+ /* misc. */
323
+ case '[Z': key.name = 'tab'; key.shift = true; break;
324
+ default: key.name = 'undefined'; break;
325
+ }
326
+ } else if (ch === '\r') {
327
+ // carriage return
328
+ key.name = 'return';
329
+ key.meta = escaped;
330
+ } else if (ch === '\n') {
331
+ // Enter, should have been called linefeed
332
+ key.name = 'enter';
333
+ key.meta = escaped;
334
+ } else if (ch === '\t') {
335
+ // tab
336
+ key.name = 'tab';
337
+ key.meta = escaped;
338
+ } else if (ch === '\b' || ch === '\x7f') {
339
+ // backspace or ctrl+h
340
+ key.name = 'backspace';
341
+ key.meta = escaped;
342
+ } else if (ch === kEscape) {
343
+ // escape key
344
+ key.name = 'escape';
345
+ key.meta = escaped;
346
+ } else if (ch === ' ') {
347
+ key.name = 'space';
348
+ key.meta = escaped;
349
+ } else if (!escaped && ch <= '\x1a') {
350
+ // ctrl+letter
351
+ key.name = StringFromCharCode(
352
+ StringPrototypeCharCodeAt(ch) + StringPrototypeCharCodeAt('a') - 1,
353
+ );
354
+ key.ctrl = true;
355
+ } else if (RegExpPrototypeExec(/^[0-9A-Za-z]$/, ch) !== null) {
356
+ // Letter, number, shift+letter
357
+ key.name = StringPrototypeToLowerCase(ch);
358
+ key.shift = RegExpPrototypeExec(/^[A-Z]$/, ch) !== null;
359
+ key.meta = escaped;
360
+ } else if (escaped) {
361
+ // Escape sequence timeout
362
+ key.name = ch.length ? undefined : 'escape';
363
+ key.meta = true;
364
+ }
365
+
366
+ key.sequence = s;
367
+
368
+ if (s.length !== 0 && (key.name !== undefined || escaped)) {
369
+ /* Named character or sequence */
370
+ stream.emit('keypress', escaped ? undefined : s, key);
371
+ } else if (charLengthAt(s, 0) === s.length) {
372
+ /* Single unnamed character, e.g. "." */
373
+ stream.emit('keypress', s, key);
374
+ }
375
+ /* Unrecognized or broken escape sequence, don't emit anything */
376
+ }
377
+ }
378
+
379
+ // This runs in O(n log n).
380
+ function commonPrefix(strings) {
381
+ if (strings.length === 0) {
382
+ return '';
383
+ }
384
+ if (strings.length === 1) {
385
+ return strings[0];
386
+ }
387
+ const sorted = ArrayPrototypeToSorted(strings);
388
+ const min = sorted[0];
389
+ const max = sorted[sorted.length - 1];
390
+ for (let i = 0; i < min.length; i++) {
391
+ if (min[i] !== max[i]) {
392
+ return StringPrototypeSlice(min, 0, i);
393
+ }
394
+ }
395
+ return min;
396
+ }
397
+
398
+ module.exports = {
399
+ charLengthAt,
400
+ charLengthLeft,
401
+ commonPrefix,
402
+ emitKeys,
403
+ kSubstringSearch,
404
+ CSI,
405
+ };
@@ -0,0 +1,108 @@
1
+ 'use strict';
2
+
3
+ const { ERR_CHILD_CLOSED_BEFORE_REPLY } = require('internal/errors').codes;
4
+
5
+ const EventEmitter = require('events');
6
+
7
+ // This object keeps track of the sockets that are sent
8
+ class SocketListSend extends EventEmitter {
9
+ constructor(child, key) {
10
+ super();
11
+ this.key = key;
12
+ this.child = child;
13
+ child.once('exit', () => this.emit('exit', this));
14
+ }
15
+
16
+ _request(msg, cmd, swallowErrors, callback) {
17
+ const self = this;
18
+
19
+ if (!this.child.connected) return onclose();
20
+ this.child._send(msg, undefined, swallowErrors);
21
+
22
+ function onclose() {
23
+ self.child.removeListener('internalMessage', onreply);
24
+ callback(new ERR_CHILD_CLOSED_BEFORE_REPLY());
25
+ }
26
+
27
+ function onreply(msg) {
28
+ if (!(msg.cmd === cmd && msg.key === self.key)) return;
29
+ self.child.removeListener('disconnect', onclose);
30
+ self.child.removeListener('internalMessage', onreply);
31
+
32
+ callback(null, msg);
33
+ }
34
+
35
+ this.child.once('disconnect', onclose);
36
+ this.child.on('internalMessage', onreply);
37
+ }
38
+
39
+ close(callback) {
40
+ this._request({
41
+ cmd: 'NODE_SOCKET_NOTIFY_CLOSE',
42
+ key: this.key,
43
+ }, 'NODE_SOCKET_ALL_CLOSED', true, callback);
44
+ }
45
+
46
+ getConnections(callback) {
47
+ this._request({
48
+ cmd: 'NODE_SOCKET_GET_COUNT',
49
+ key: this.key,
50
+ }, 'NODE_SOCKET_COUNT', false, (err, msg) => {
51
+ if (err) return callback(err);
52
+ callback(null, msg.count);
53
+ });
54
+ }
55
+ }
56
+
57
+
58
+ // This object keeps track of the sockets that are received
59
+ class SocketListReceive extends EventEmitter {
60
+ constructor(child, key) {
61
+ super();
62
+
63
+ this.connections = 0;
64
+ this.key = key;
65
+ this.child = child;
66
+
67
+ function onempty(self) {
68
+ if (!self.child.connected) return;
69
+
70
+ self.child._send({
71
+ cmd: 'NODE_SOCKET_ALL_CLOSED',
72
+ key: self.key,
73
+ }, undefined, true);
74
+ }
75
+
76
+ this.child.on('internalMessage', (msg) => {
77
+ if (msg.key !== this.key) return;
78
+
79
+ if (msg.cmd === 'NODE_SOCKET_NOTIFY_CLOSE') {
80
+ // Already empty
81
+ if (this.connections === 0) return onempty(this);
82
+
83
+ // Wait for sockets to get closed
84
+ this.once('empty', onempty);
85
+ } else if (msg.cmd === 'NODE_SOCKET_GET_COUNT') {
86
+ if (!this.child.connected) return;
87
+ this.child._send({
88
+ cmd: 'NODE_SOCKET_COUNT',
89
+ key: this.key,
90
+ count: this.connections,
91
+ });
92
+ }
93
+ });
94
+ }
95
+
96
+ add(obj) {
97
+ this.connections++;
98
+
99
+ // Notify the previous owner of the socket about its state change
100
+ obj.socket.once('close', () => {
101
+ this.connections--;
102
+
103
+ if (this.connections === 0) this.emit('empty', this);
104
+ });
105
+ }
106
+ }
107
+
108
+ module.exports = { SocketListSend, SocketListReceive };