@scriptc/compiler 0.4.1 → 0.4.3

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 (999) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +977 -113
  2. package/dist/backend/cycle-analysis.d.ts +5 -1
  3. package/dist/backend/cycle-analysis.js +6 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +55 -0
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +9 -1
  8. package/dist/backend/cycle-mutability.js +21 -3
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +6 -1
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.d.ts +7 -3
  13. package/dist/backend/immutability.js +33 -29
  14. package/dist/backend/immutability.js.map +1 -1
  15. package/dist/backend/library-pack.js +5 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/llvm/alloc.d.ts +23 -4
  18. package/dist/backend/llvm/alloc.js +61 -8
  19. package/dist/backend/llvm/alloc.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
  21. package/dist/backend/llvm/appended-array-literals.js +44 -36
  22. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  23. package/dist/backend/llvm/appended-array-literals.test.js +4 -3
  24. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
  25. package/dist/backend/llvm/array-search.d.ts +4 -3
  26. package/dist/backend/llvm/array-search.js +23 -10
  27. package/dist/backend/llvm/array-search.js.map +1 -1
  28. package/dist/backend/llvm/blocks.d.ts +1 -1
  29. package/dist/backend/llvm/blocks.js +2 -2
  30. package/dist/backend/llvm/blocks.js.map +1 -1
  31. package/dist/backend/llvm/byte-windows.js +2 -0
  32. package/dist/backend/llvm/byte-windows.js.map +1 -1
  33. package/dist/backend/llvm/bytes-alias.d.ts +6 -1
  34. package/dist/backend/llvm/bytes-alias.js +8 -2
  35. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  36. package/dist/backend/llvm/bytes-loop-versions.d.ts +70 -7
  37. package/dist/backend/llvm/bytes-loop-versions.js +567 -30
  38. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  39. package/dist/backend/llvm/bytes-loop-versions.test.js +389 -2
  40. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  41. package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
  42. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  43. package/dist/backend/llvm/classes.d.ts +74 -1
  44. package/dist/backend/llvm/classes.js +364 -54
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/classes.test.js +384 -17
  47. package/dist/backend/llvm/classes.test.js.map +1 -1
  48. package/dist/backend/llvm/common.d.ts +10 -6
  49. package/dist/backend/llvm/common.js +10 -6
  50. package/dist/backend/llvm/common.js.map +1 -1
  51. package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
  52. package/dist/backend/llvm/constant-callbacks.js +91 -56
  53. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  55. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  56. package/dist/backend/llvm/counted-loops.d.ts +11 -1
  57. package/dist/backend/llvm/counted-loops.js +80 -23
  58. package/dist/backend/llvm/counted-loops.js.map +1 -1
  59. package/dist/backend/llvm/dense-array-access.d.ts +39 -8
  60. package/dist/backend/llvm/dense-array-access.js +222 -52
  61. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  62. package/dist/backend/llvm/dense-array-access.test.js +36 -0
  63. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  64. package/dist/backend/llvm/dense-array-loops.d.ts +35 -16
  65. package/dist/backend/llvm/dense-array-loops.js +237 -12
  66. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  67. package/dist/backend/llvm/dense-array-loops.test.js +140 -15
  68. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  69. package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
  70. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  71. package/dist/backend/llvm/dyn.d.ts +51 -1
  72. package/dist/backend/llvm/dyn.js +683 -69
  73. package/dist/backend/llvm/dyn.js.map +1 -1
  74. package/dist/backend/llvm/emit-function.js +33 -26
  75. package/dist/backend/llvm/emit-function.js.map +1 -1
  76. package/dist/backend/llvm/emit-journal.d.ts +93 -0
  77. package/dist/backend/llvm/emit-journal.js +170 -0
  78. package/dist/backend/llvm/emit-journal.js.map +1 -0
  79. package/dist/backend/llvm/emit-module.js +208 -34
  80. package/dist/backend/llvm/emit-module.js.map +1 -1
  81. package/dist/backend/llvm/emit-statements.d.ts +0 -27
  82. package/dist/backend/llvm/emit-statements.js +577 -93
  83. package/dist/backend/llvm/emit-statements.js.map +1 -1
  84. package/dist/backend/llvm/emitter-state.d.ts +7 -0
  85. package/dist/backend/llvm/emitter-state.js +14 -0
  86. package/dist/backend/llvm/emitter-state.js.map +1 -0
  87. package/dist/backend/llvm/emitter.d.ts +314 -49
  88. package/dist/backend/llvm/emitter.js +1241 -129
  89. package/dist/backend/llvm/emitter.js.map +1 -1
  90. package/dist/backend/llvm/emitter.test.js +54 -5
  91. package/dist/backend/llvm/emitter.test.js.map +1 -1
  92. package/dist/backend/llvm/expr-async.js +19 -0
  93. package/dist/backend/llvm/expr-async.js.map +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  95. package/dist/backend/llvm/expr-bytes.js +144 -52
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.js +47 -0
  98. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  99. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  100. package/dist/backend/llvm/expr-calls.js +62 -36
  101. package/dist/backend/llvm/expr-calls.js.map +1 -1
  102. package/dist/backend/llvm/expr-containers.d.ts +14 -2
  103. package/dist/backend/llvm/expr-containers.js +148 -40
  104. package/dist/backend/llvm/expr-containers.js.map +1 -1
  105. package/dist/backend/llvm/expr-context.d.ts +14 -0
  106. package/dist/backend/llvm/expr-control.js +2 -3
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dynamic.js +71 -16
  109. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  110. package/dist/backend/llvm/expr-primitives.js +126 -36
  111. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  112. package/dist/backend/llvm/expr-primitives.test.js +11 -6
  113. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  114. package/dist/backend/llvm/expr-records.d.ts +12 -0
  115. package/dist/backend/llvm/expr-records.js +106 -0
  116. package/dist/backend/llvm/expr-records.js.map +1 -1
  117. package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
  118. package/dist/backend/llvm/expr-stream-bridges.js +225 -64
  119. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  121. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +200 -50
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
  126. package/dist/backend/llvm/int32-kind-loops.js +106 -0
  127. package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
  128. package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
  129. package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
  130. package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
  131. package/dist/backend/llvm/integer-values.d.ts +20 -1
  132. package/dist/backend/llvm/integer-values.js +71 -0
  133. package/dist/backend/llvm/integer-values.js.map +1 -1
  134. package/dist/backend/llvm/js-ic.d.ts +1 -1
  135. package/dist/backend/llvm/js-ic.js +1 -1
  136. package/dist/backend/llvm/js-ic.js.map +1 -1
  137. package/dist/backend/llvm/key-orders.d.ts +7 -0
  138. package/dist/backend/llvm/key-orders.js +33 -0
  139. package/dist/backend/llvm/key-orders.js.map +1 -0
  140. package/dist/backend/llvm/lib-connect.js +4 -0
  141. package/dist/backend/llvm/lib-connect.js.map +1 -1
  142. package/dist/backend/llvm/lib-datagram.js +11 -0
  143. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  144. package/dist/backend/llvm/lib-dispatch.js +90 -2
  145. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  146. package/dist/backend/llvm/lib-filesystem.js +65 -4
  147. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  148. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  149. package/dist/backend/llvm/lib-http2.js +24 -17
  150. package/dist/backend/llvm/lib-http2.js.map +1 -1
  151. package/dist/backend/llvm/lib-lookup.js +16 -6
  152. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  153. package/dist/backend/llvm/lib-process.js +65 -14
  154. package/dist/backend/llvm/lib-process.js.map +1 -1
  155. package/dist/backend/llvm/lib-shared.js +126 -3
  156. package/dist/backend/llvm/lib-shared.js.map +1 -1
  157. package/dist/backend/llvm/lib-stream.js +97 -30
  158. package/dist/backend/llvm/lib-stream.js.map +1 -1
  159. package/dist/backend/llvm/lib-tls.js +23 -0
  160. package/dist/backend/llvm/lib-tls.js.map +1 -1
  161. package/dist/backend/llvm/local-array-reads.js +181 -64
  162. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  163. package/dist/backend/llvm/local-array-reads.test.js +28 -0
  164. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  165. package/dist/backend/llvm/loop-state.d.ts +33 -0
  166. package/dist/backend/llvm/loop-state.js +42 -0
  167. package/dist/backend/llvm/loop-state.js.map +1 -0
  168. package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
  169. package/dist/backend/llvm/map-number-lookup.js +91 -31
  170. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  171. package/dist/backend/llvm/map-number-lookup.test.js +55 -0
  172. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  173. package/dist/backend/llvm/map-read-lifetimes.js +4 -2
  174. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  175. package/dist/backend/llvm/nullable-unions.d.ts +2 -1
  176. package/dist/backend/llvm/nullable-unions.js +15 -3
  177. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  178. package/dist/backend/llvm/publish.d.ts +18 -1
  179. package/dist/backend/llvm/publish.js +76 -25
  180. package/dist/backend/llvm/publish.js.map +1 -1
  181. package/dist/backend/llvm/publish.test.js +3 -0
  182. package/dist/backend/llvm/publish.test.js.map +1 -1
  183. package/dist/backend/llvm/receivers.js +7 -2
  184. package/dist/backend/llvm/receivers.js.map +1 -1
  185. package/dist/backend/llvm/record-results.d.ts +1 -9
  186. package/dist/backend/llvm/record-results.js +2 -11
  187. package/dist/backend/llvm/record-results.js.map +1 -1
  188. package/dist/backend/llvm/reference-writes.d.ts +7 -2
  189. package/dist/backend/llvm/reference-writes.js +91 -72
  190. package/dist/backend/llvm/reference-writes.js.map +1 -1
  191. package/dist/backend/llvm/regex-matchers.js +161 -14
  192. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  193. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  194. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  195. package/dist/backend/llvm/running-extrema.d.ts +11 -0
  196. package/dist/backend/llvm/running-extrema.js +115 -0
  197. package/dist/backend/llvm/running-extrema.js.map +1 -0
  198. package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
  199. package/dist/backend/llvm/running-extrema.test.js +89 -0
  200. package/dist/backend/llvm/running-extrema.test.js.map +1 -0
  201. package/dist/backend/llvm/shapes.d.ts +79 -21
  202. package/dist/backend/llvm/shapes.js +233 -42
  203. package/dist/backend/llvm/shapes.js.map +1 -1
  204. package/dist/backend/llvm/shapes.test.js +53 -7
  205. package/dist/backend/llvm/shapes.test.js.map +1 -1
  206. package/dist/backend/llvm/speculative-integers.d.ts +6 -0
  207. package/dist/backend/llvm/speculative-integers.js +2 -2
  208. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  209. package/dist/backend/llvm/stack-objects.d.ts +3 -2
  210. package/dist/backend/llvm/stack-objects.js +5 -2
  211. package/dist/backend/llvm/stack-objects.js.map +1 -1
  212. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  213. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  214. package/dist/backend/llvm/string-reads.d.ts +15 -0
  215. package/dist/backend/llvm/string-reads.js +128 -0
  216. package/dist/backend/llvm/string-reads.js.map +1 -1
  217. package/dist/backend/llvm/walk-borrows.d.ts +3 -0
  218. package/dist/backend/llvm/walk-borrows.js +46 -41
  219. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  220. package/dist/backend/llvm/walkers.d.ts +3 -0
  221. package/dist/backend/llvm/walkers.js +88 -65
  222. package/dist/backend/llvm/walkers.js.map +1 -1
  223. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  224. package/dist/backend/llvm/wasm-modules.js +32 -9
  225. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  226. package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
  227. package/dist/backend/llvm/wrapping-sums.js +126 -0
  228. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  229. package/dist/backend/mangle.d.ts +3 -0
  230. package/dist/backend/mangle.js +5 -0
  231. package/dist/backend/mangle.js.map +1 -1
  232. package/dist/backend/may-throw.d.ts +8 -10
  233. package/dist/backend/may-throw.js +14 -10
  234. package/dist/backend/may-throw.js.map +1 -1
  235. package/dist/backend/native/contracts.d.ts +27 -4
  236. package/dist/backend/native/executable.js +31 -8
  237. package/dist/backend/native/executable.js.map +1 -1
  238. package/dist/backend/native/library.js +1 -0
  239. package/dist/backend/native/library.js.map +1 -1
  240. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  241. package/dist/backend/native/runtime-inputs.js +1 -0
  242. package/dist/backend/native/runtime-inputs.js.map +1 -1
  243. package/dist/backend/native-codegen.d.ts +11 -6
  244. package/dist/backend/native-codegen.js +36 -9
  245. package/dist/backend/native-codegen.js.map +1 -1
  246. package/dist/backend/native-codegen.test.js +0 -23
  247. package/dist/backend/native-codegen.test.js.map +1 -1
  248. package/dist/backend/native-link-info-core.d.ts +18 -4
  249. package/dist/backend/native-link-info-core.js.map +1 -1
  250. package/dist/backend/optimization.d.ts +2 -2
  251. package/dist/backend/publication.d.ts +12 -1
  252. package/dist/backend/publication.js +37 -14
  253. package/dist/backend/publication.js.map +1 -1
  254. package/dist/backend/publication.test.js +30 -0
  255. package/dist/backend/publication.test.js.map +1 -1
  256. package/dist/backend/result-slots.d.ts +16 -0
  257. package/dist/backend/result-slots.js +23 -0
  258. package/dist/backend/result-slots.js.map +1 -0
  259. package/dist/backend/runtime-abi.d.ts +2 -2
  260. package/dist/backend/runtime-abi.js +2 -2
  261. package/dist/backend/runtime-pack-core.d.ts +2 -1
  262. package/dist/backend/runtime-pack-core.js +2 -1
  263. package/dist/backend/runtime-pack-core.js.map +1 -1
  264. package/dist/backend/runtime-pack-targets.test.js +5 -1
  265. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  266. package/dist/backend/runtime-pack.d.ts +0 -21
  267. package/dist/backend/runtime-pack.js +0 -29
  268. package/dist/backend/runtime-pack.js.map +1 -1
  269. package/dist/backend/runtime-pack.test.js +10 -69
  270. package/dist/backend/runtime-pack.test.js.map +1 -1
  271. package/dist/backend/stack-observations.d.ts +2 -1
  272. package/dist/backend/stack-observations.js +67 -42
  273. package/dist/backend/stack-observations.js.map +1 -1
  274. package/dist/backend/target-diagnostics.js +33 -1
  275. package/dist/backend/target-diagnostics.js.map +1 -1
  276. package/dist/backend/warm-cache.js +4 -0
  277. package/dist/backend/warm-cache.js.map +1 -1
  278. package/dist/cli/command.js +26 -6
  279. package/dist/cli/command.js.map +1 -1
  280. package/dist/cli/usage.d.ts +5 -1
  281. package/dist/cli/usage.js +10 -5
  282. package/dist/cli/usage.js.map +1 -1
  283. package/dist/compat/fetch-profile.js +1 -1
  284. package/dist/compat/fetch-profile.js.map +1 -1
  285. package/dist/contracts/check.js +5 -4
  286. package/dist/contracts/check.js.map +1 -1
  287. package/dist/contracts/int32-elements.js +10 -2
  288. package/dist/contracts/int32-elements.js.map +1 -1
  289. package/dist/coverage/report.d.ts +7 -2
  290. package/dist/coverage/report.js +30 -3
  291. package/dist/coverage/report.js.map +1 -1
  292. package/dist/coverage/verdict-cache.d.ts +1 -0
  293. package/dist/coverage/verdict-cache.js +4 -0
  294. package/dist/coverage/verdict-cache.js.map +1 -1
  295. package/dist/coverage/verdict-semantic.js +4 -0
  296. package/dist/coverage/verdict-semantic.js.map +1 -1
  297. package/dist/diagnostics/diagnostic.d.ts +4 -0
  298. package/dist/diagnostics/diagnostic.js.map +1 -1
  299. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  300. package/dist/diagnostics/dynamic-tier.js +57 -0
  301. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  302. package/dist/diagnostics/envelope.d.ts +5 -1
  303. package/dist/diagnostics/envelope.js +6 -2
  304. package/dist/diagnostics/envelope.js.map +1 -1
  305. package/dist/executable/executable-cache.d.ts +25 -1
  306. package/dist/executable/executable-cache.js +60 -7
  307. package/dist/executable/executable-cache.js.map +1 -1
  308. package/dist/executable/executable-cache.test.js +46 -3
  309. package/dist/executable/executable-cache.test.js.map +1 -1
  310. package/dist/executable/prepare.js +3 -1
  311. package/dist/executable/prepare.js.map +1 -1
  312. package/dist/frontend/analysis.js +1 -0
  313. package/dist/frontend/analysis.js.map +1 -1
  314. package/dist/frontend/decl-projection.d.ts +41 -0
  315. package/dist/frontend/decl-projection.js +854 -0
  316. package/dist/frontend/decl-projection.js.map +1 -0
  317. package/dist/frontend/decl-projection.test.d.ts +1 -0
  318. package/dist/frontend/decl-projection.test.js +30 -0
  319. package/dist/frontend/decl-projection.test.js.map +1 -0
  320. package/dist/frontend/dispose-hook.d.ts +2 -0
  321. package/dist/frontend/dispose-hook.js +14 -0
  322. package/dist/frontend/dispose-hook.js.map +1 -0
  323. package/dist/frontend/dts-paths.d.ts +15 -0
  324. package/dist/frontend/dts-paths.js +25 -0
  325. package/dist/frontend/dts-paths.js.map +1 -1
  326. package/dist/frontend/input-tracker.d.ts +6 -0
  327. package/dist/frontend/input-tracker.js +51 -28
  328. package/dist/frontend/input-tracker.js.map +1 -1
  329. package/dist/frontend/input-tracker.test.js +19 -0
  330. package/dist/frontend/input-tracker.test.js.map +1 -1
  331. package/dist/frontend/jsx-entities.d.ts +4 -0
  332. package/dist/frontend/jsx-entities.js +259 -0
  333. package/dist/frontend/jsx-entities.js.map +1 -0
  334. package/dist/frontend/jsx-source.d.ts +71 -0
  335. package/dist/frontend/jsx-source.js +781 -0
  336. package/dist/frontend/jsx-source.js.map +1 -0
  337. package/dist/frontend/jsx-source.test.d.ts +1 -0
  338. package/dist/frontend/jsx-source.test.js +200 -0
  339. package/dist/frontend/jsx-source.test.js.map +1 -0
  340. package/dist/frontend/literal-values.test.js +8 -9
  341. package/dist/frontend/literal-values.test.js.map +1 -1
  342. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  343. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  344. package/dist/frontend/lowering/array-values.js +103 -4
  345. package/dist/frontend/lowering/array-values.js.map +1 -1
  346. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  347. package/dist/frontend/lowering/binding-analysis.js +2 -2
  348. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  349. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  350. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  351. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  353. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  355. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  356. package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
  357. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  358. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  359. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  360. package/dist/frontend/lowering/builtins/child-process.js +13 -2
  361. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  362. package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
  363. package/dist/frontend/lowering/builtins/crypto.js +136 -5
  364. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  365. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  366. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  367. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  368. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  369. package/dist/frontend/lowering/builtins/dates.js +55 -26
  370. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  372. package/dist/frontend/lowering/builtins/dh.js +151 -0
  373. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  374. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  375. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  376. package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
  377. package/dist/frontend/lowering/builtins/ecdh.js +7 -7
  378. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
  379. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  380. package/dist/frontend/lowering/builtins/errors.js +110 -0
  381. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  382. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  383. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  384. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  385. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  386. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  387. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  388. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  389. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  390. package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
  391. package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
  392. package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
  393. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  394. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  395. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/json.js +2 -1
  397. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  398. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  399. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  400. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  401. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  402. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  403. package/dist/frontend/lowering/builtins/numbers.js +18 -6
  404. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  405. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  406. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  407. package/dist/frontend/lowering/builtins/performance.js +3 -2
  408. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  409. package/dist/frontend/lowering/builtins/process.js +3 -2
  410. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  411. package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
  412. package/dist/frontend/lowering/builtins/promises.js +91 -4
  413. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  414. package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
  415. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  416. package/dist/frontend/lowering/builtins/readline.d.ts +7 -2
  417. package/dist/frontend/lowering/builtins/readline.js +58 -9
  418. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/strings.js +13 -5
  420. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  421. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  422. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  423. package/dist/frontend/lowering/builtins/timers.js +1 -1
  424. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  425. package/dist/frontend/lowering/builtins/url.js +28 -4
  426. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/v8.js +2 -1
  428. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  429. package/dist/frontend/lowering/builtins/webassembly.js +6 -3
  430. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  431. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  432. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  433. package/dist/frontend/lowering/call-arguments.js +2 -1
  434. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  435. package/dist/frontend/lowering/call-signatures.js +13 -6
  436. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  437. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  438. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  439. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  440. package/dist/frontend/lowering/class-assertions.js +3 -2
  441. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  442. package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
  443. package/dist/frontend/lowering/class-callbacks.js +82 -12
  444. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  445. package/dist/frontend/lowering/class-construction.d.ts +6 -2
  446. package/dist/frontend/lowering/class-construction.js +25 -16
  447. package/dist/frontend/lowering/class-construction.js.map +1 -1
  448. package/dist/frontend/lowering/class-descriptors.js +1 -1
  449. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  450. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +73 -2
  451. package/dist/frontend/lowering/class-dynamic-dispatch.js +1334 -259
  452. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  453. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +124 -0
  454. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  455. package/dist/frontend/lowering/class-iterables.d.ts +2 -1
  456. package/dist/frontend/lowering/class-iterables.js +9 -1
  457. package/dist/frontend/lowering/class-iterables.js.map +1 -1
  458. package/dist/frontend/lowering/class-method-mutations.js +35 -9
  459. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  460. package/dist/frontend/lowering/class-method-values.js +1 -1
  461. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  462. package/dist/frontend/lowering/class-protocols.d.ts +7 -0
  463. package/dist/frontend/lowering/class-protocols.js +64 -4
  464. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  465. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  466. package/dist/frontend/lowering/class-prototypes.js +67 -5
  467. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  468. package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
  469. package/dist/frontend/lowering/class-runtime-statics.js +29 -4
  470. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  471. package/dist/frontend/lowering/class-to-primitive.js +25 -5
  472. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  473. package/dist/frontend/lowering/class-unions.js +2 -1
  474. package/dist/frontend/lowering/class-unions.js.map +1 -1
  475. package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
  476. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  477. package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
  478. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  479. package/dist/frontend/lowering/coercions/structural.js +99 -8
  480. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  481. package/dist/frontend/lowering/coercions/unions.js +8 -7
  482. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  483. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  484. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  485. package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
  486. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  487. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
  488. package/dist/frontend/lowering/containers/array-callbacks.js +352 -31
  489. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  490. package/dist/frontend/lowering/containers/array-concat.js +12 -1
  491. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  492. package/dist/frontend/lowering/containers/array-construction.js +25 -4
  493. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  494. package/dist/frontend/lowering/containers/array-methods.js +21 -5
  495. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  496. package/dist/frontend/lowering/containers/array-pipelines.js +21 -9
  497. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  498. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  499. package/dist/frontend/lowering/containers/bytes.js +131 -29
  500. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  501. package/dist/frontend/lowering/containers/callback-arguments.js +55 -2
  502. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  503. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  504. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  505. package/dist/frontend/lowering/containers/collection-methods.js +15 -9
  506. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  507. package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
  508. package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
  509. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
  510. package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
  511. package/dist/frontend/lowering/containers/indexed-objects.js +54 -14
  512. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  513. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  514. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  515. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  516. package/dist/frontend/lowering/containers/string-and-regexp.js +87 -14
  517. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  518. package/dist/frontend/lowering/containers/string-replacement.js +45 -20
  519. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  520. package/dist/frontend/lowering/cycle-initialization.js +25 -4
  521. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  522. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  523. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  524. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  525. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  526. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  527. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  528. package/dist/frontend/lowering/dispatch-sites.js +218 -0
  529. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  530. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  531. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  532. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  533. package/dist/frontend/lowering/divergences.js +9 -1
  534. package/dist/frontend/lowering/divergences.js.map +1 -1
  535. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  536. package/dist/frontend/lowering/dyn-streams.js +1 -1
  537. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  538. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  539. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  540. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  541. package/dist/frontend/lowering/error-methods.js +51 -2
  542. package/dist/frontend/lowering/error-methods.js.map +1 -1
  543. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  544. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  545. package/dist/frontend/lowering/expressions/binary.js +81 -5
  546. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  547. package/dist/frontend/lowering/expressions/element-access.js +107 -14
  548. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  549. package/dist/frontend/lowering/expressions/identifiers.js +79 -11
  550. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  551. package/dist/frontend/lowering/expressions/narrowing.js +130 -6
  552. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  553. package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
  554. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  555. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -3
  556. package/dist/frontend/lowering/expressions/object-literals.js +164 -56
  557. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  558. package/dist/frontend/lowering/expressions/optional-chains.js +17 -5
  559. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  560. package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
  561. package/dist/frontend/lowering/expressions/property-access.js +211 -17
  562. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  563. package/dist/frontend/lowering/expressions/relational.js +267 -30
  564. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  565. package/dist/frontend/lowering/expressions/union-fields.js +4 -0
  566. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  567. package/dist/frontend/lowering/expressions/updates.js +85 -12
  568. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  569. package/dist/frontend/lowering/frozen-records.d.ts +28 -0
  570. package/dist/frontend/lowering/frozen-records.js +322 -0
  571. package/dist/frontend/lowering/frozen-records.js.map +1 -0
  572. package/dist/frontend/lowering/function-returns.js +49 -0
  573. package/dist/frontend/lowering/function-returns.js.map +1 -1
  574. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  575. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  576. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  577. package/dist/frontend/lowering/generic-functions.d.ts +42 -1
  578. package/dist/frontend/lowering/generic-functions.js +455 -20
  579. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  580. package/dist/frontend/lowering/intern-tables.js +2 -1
  581. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  582. package/dist/frontend/lowering/iterable-values.d.ts +49 -0
  583. package/dist/frontend/lowering/iterable-values.js +297 -0
  584. package/dist/frontend/lowering/iterable-values.js.map +1 -0
  585. package/dist/frontend/lowering/iterator-adapters.js +195 -9
  586. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  587. package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
  588. package/dist/frontend/lowering/js-class-fields.js +45 -10
  589. package/dist/frontend/lowering/js-class-fields.js.map +1 -1
  590. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  591. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  592. package/dist/frontend/lowering/json-require.js +2 -1
  593. package/dist/frontend/lowering/json-require.js.map +1 -1
  594. package/dist/frontend/lowering/key-order-witness.d.ts +24 -4
  595. package/dist/frontend/lowering/key-order-witness.js +790 -25
  596. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  597. package/dist/frontend/lowering/key-order-witness.test.js +466 -10
  598. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  599. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  600. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  601. package/dist/frontend/lowering/lower-assert.js +6 -5
  602. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  603. package/dist/frontend/lowering/lower-async-iteration.js +7 -2
  604. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  605. package/dist/frontend/lowering/lower-calls.d.ts +11 -0
  606. package/dist/frontend/lowering/lower-calls.js +776 -126
  607. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  608. package/dist/frontend/lowering/lower-classes.d.ts +29 -2
  609. package/dist/frontend/lowering/lower-classes.js +581 -46
  610. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  611. package/dist/frontend/lowering/lower-dgram.js +6 -3
  612. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  613. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  614. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  615. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  616. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  617. package/dist/frontend/lowering/lower-exprs.js +126 -13
  618. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  619. package/dist/frontend/lowering/lower-functions.d.ts +11 -0
  620. package/dist/frontend/lowering/lower-functions.js +387 -72
  621. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  622. package/dist/frontend/lowering/lower-generators.js +41 -31
  623. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  624. package/dist/frontend/lowering/lower-global-value.js +6 -3
  625. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  626. package/dist/frontend/lowering/lower-inspect.js +28 -12
  627. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  628. package/dist/frontend/lowering/lower-mixins.js +2 -1
  629. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  630. package/dist/frontend/lowering/lower-mock.js +2 -1
  631. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  632. package/dist/frontend/lowering/lower-modules.js +47 -5
  633. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  634. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  635. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  636. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  637. package/dist/frontend/lowering/lower-namespaces.js +9 -4
  638. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  639. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  640. package/dist/frontend/lowering/lower-server.js +239 -61
  641. package/dist/frontend/lowering/lower-server.js.map +1 -1
  642. package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
  643. package/dist/frontend/lowering/lower-stdlib.js +42 -10
  644. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  645. package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
  646. package/dist/frontend/lowering/lower-stmts.js +622 -68
  647. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  648. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  649. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  650. package/dist/frontend/lowering/lower-stream.d.ts +20 -2
  651. package/dist/frontend/lowering/lower-stream.js +2055 -318
  652. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  653. package/dist/frontend/lowering/lower-timers.js +4 -3
  654. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  655. package/dist/frontend/lowering/lowerer.d.ts +197 -29
  656. package/dist/frontend/lowering/lowerer.js +862 -84
  657. package/dist/frontend/lowering/lowerer.js.map +1 -1
  658. package/dist/frontend/lowering/lowerer.test.js +21 -9
  659. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  660. package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
  661. package/dist/frontend/lowering/module-namespace-elements.js +82 -5
  662. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  663. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  664. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  665. package/dist/frontend/lowering/native-ffi.js +1 -1
  666. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  667. package/dist/frontend/lowering/new-target.d.ts +12 -0
  668. package/dist/frontend/lowering/new-target.js +280 -0
  669. package/dist/frontend/lowering/new-target.js.map +1 -0
  670. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  671. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  672. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  673. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  674. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  675. package/dist/frontend/lowering/private-brands.js +66 -15
  676. package/dist/frontend/lowering/private-brands.js.map +1 -1
  677. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  678. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  679. package/dist/frontend/lowering/require-initialization.js +2 -1
  680. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  681. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  682. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  683. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  684. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  685. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  686. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  687. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  688. package/dist/frontend/lowering/site-dependencies.js +84 -0
  689. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  690. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  691. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  692. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  693. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  694. package/dist/frontend/lowering/stable-names.js +35 -0
  695. package/dist/frontend/lowering/stable-names.js.map +1 -0
  696. package/dist/frontend/lowering/static-typeof.d.ts +2 -2
  697. package/dist/frontend/lowering/static-typeof.js +42 -3
  698. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  699. package/dist/frontend/lowering/strict-equality.js +2 -1
  700. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  701. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  702. package/dist/frontend/lowering/structural-positions.js +108 -0
  703. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  704. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  705. package/dist/frontend/lowering/surfaces.js +60 -32
  706. package/dist/frontend/lowering/surfaces.js.map +1 -1
  707. package/dist/frontend/lowering/undefined-index.d.ts +27 -0
  708. package/dist/frontend/lowering/undefined-index.js +82 -0
  709. package/dist/frontend/lowering/undefined-index.js.map +1 -0
  710. package/dist/frontend/lowering/var-hoisting.js +66 -16
  711. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  712. package/dist/frontend/lowering/width-lift.d.ts +18 -0
  713. package/dist/frontend/npm-static-bundled-chunks.js +9 -11
  714. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  715. package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
  716. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  717. package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
  718. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  719. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  720. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  721. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  722. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  723. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  724. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  725. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  726. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  727. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  728. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  729. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  730. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  731. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  732. package/dist/frontend/npm-static-type-exports.js +261 -0
  733. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  734. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  735. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  736. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  737. package/dist/frontend/npm-static-umd.d.ts +6 -0
  738. package/dist/frontend/npm-static-umd.js +203 -0
  739. package/dist/frontend/npm-static-umd.js.map +1 -0
  740. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  741. package/dist/frontend/npm-static-umd.test.js +105 -0
  742. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  743. package/dist/frontend/npm-static.d.ts +8 -0
  744. package/dist/frontend/npm-static.js +51 -22
  745. package/dist/frontend/npm-static.js.map +1 -1
  746. package/dist/frontend/package-shims.d.ts +3 -0
  747. package/dist/frontend/package-shims.js +71 -8
  748. package/dist/frontend/package-shims.js.map +1 -1
  749. package/dist/frontend/pipeline.js +18 -10
  750. package/dist/frontend/pipeline.js.map +1 -1
  751. package/dist/frontend/process-fork.d.ts +25 -0
  752. package/dist/frontend/process-fork.js +2 -0
  753. package/dist/frontend/process-fork.js.map +1 -0
  754. package/dist/frontend/program.d.ts +21 -1
  755. package/dist/frontend/program.js +586 -74
  756. package/dist/frontend/program.js.map +1 -1
  757. package/dist/frontend/program.test.js +44 -4
  758. package/dist/frontend/program.test.js.map +1 -1
  759. package/dist/frontend/services.d.ts +6 -0
  760. package/dist/frontend/services.js +18 -0
  761. package/dist/frontend/services.js.map +1 -1
  762. package/dist/frontend/token-equivalence.d.ts +3 -0
  763. package/dist/frontend/token-equivalence.js +409 -0
  764. package/dist/frontend/token-equivalence.js.map +1 -0
  765. package/dist/frontend/token-equivalence.test.d.ts +1 -0
  766. package/dist/frontend/token-equivalence.test.js +67 -0
  767. package/dist/frontend/token-equivalence.test.js.map +1 -0
  768. package/dist/frontend/ts7/ast-node.d.ts +43 -7
  769. package/dist/frontend/ts7/ast-node.js +1176 -129
  770. package/dist/frontend/ts7/ast-node.js.map +1 -1
  771. package/dist/frontend/ts7/ast-node.test.js +84 -0
  772. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  773. package/dist/frontend/ts7/ast-wire.d.ts +29 -3
  774. package/dist/frontend/ts7/ast-wire.js +144 -31
  775. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  776. package/dist/frontend/ts7/ast-wire.test.js +23 -0
  777. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  778. package/dist/frontend/ts7/ast.d.ts +23 -2
  779. package/dist/frontend/ts7/ast.js +143 -2
  780. package/dist/frontend/ts7/ast.js.map +1 -1
  781. package/dist/frontend/ts7/checker-backend.d.ts +3 -4
  782. package/dist/frontend/ts7/checker-backend.js +2 -2
  783. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  784. package/dist/frontend/ts7/checker-backend.test.js +5 -9
  785. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  786. package/dist/frontend/ts7/checker.d.ts +17 -1
  787. package/dist/frontend/ts7/checker.js +82 -1
  788. package/dist/frontend/ts7/checker.js.map +1 -1
  789. package/dist/frontend/ts7/checker.test.js +9 -6
  790. package/dist/frontend/ts7/checker.test.js.map +1 -1
  791. package/dist/frontend/ts7/enums.d.ts +3 -3
  792. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  793. package/dist/frontend/ts7/enums.generated.js +21 -0
  794. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  795. package/dist/frontend/ts7/enums.js +19 -0
  796. package/dist/frontend/ts7/enums.js.map +1 -1
  797. package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
  798. package/dist/frontend/ts7/lib-diagnostics.js +307 -0
  799. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
  800. package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
  801. package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
  802. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
  803. package/dist/frontend/ts7/program-host.d.ts +7 -0
  804. package/dist/frontend/ts7/program-host.js +30 -4
  805. package/dist/frontend/ts7/program-host.js.map +1 -1
  806. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  807. package/dist/frontend/ts7/semantic-checker.js +25 -20
  808. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  809. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  810. package/dist/frontend/ts7/semantic-json.js +146 -0
  811. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  812. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  813. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  814. package/dist/frontend/ts7/semantic-model.d.ts +15 -0
  815. package/dist/frontend/ts7/semantic-model.js +67 -19
  816. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  817. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  818. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  819. package/dist/frontend/ts7/session.d.ts +14 -1
  820. package/dist/frontend/ts7/session.js +23 -1
  821. package/dist/frontend/ts7/session.js.map +1 -1
  822. package/dist/frontend/tsc-codes.d.ts +1 -1
  823. package/dist/frontend/tsc-codes.js +7 -0
  824. package/dist/frontend/tsc-codes.js.map +1 -1
  825. package/dist/frontend/type-mapper.d.ts +51 -7
  826. package/dist/frontend/type-mapper.js +456 -43
  827. package/dist/frontend/type-mapper.js.map +1 -1
  828. package/dist/frontend/type-mapper.test.js +1 -1
  829. package/dist/frontend/type-mapper.test.js.map +1 -1
  830. package/dist/frontend-process-args.d.ts +4 -0
  831. package/dist/frontend-process-args.js +52 -0
  832. package/dist/frontend-process-args.js.map +1 -0
  833. package/dist/frontend-process-args.test.d.ts +1 -0
  834. package/dist/frontend-process-args.test.js +47 -0
  835. package/dist/frontend-process-args.test.js.map +1 -0
  836. package/dist/frontend-process.d.ts +1 -0
  837. package/dist/frontend-process.js +23 -0
  838. package/dist/frontend-process.js.map +1 -0
  839. package/dist/heap-collection.d.ts +16 -0
  840. package/dist/heap-collection.js +42 -0
  841. package/dist/heap-collection.js.map +1 -0
  842. package/dist/heap-collection.test.d.ts +1 -0
  843. package/dist/heap-collection.test.js +59 -0
  844. package/dist/heap-collection.test.js.map +1 -0
  845. package/dist/heap-pressure.d.ts +2 -0
  846. package/dist/heap-pressure.js +12 -0
  847. package/dist/heap-pressure.js.map +1 -0
  848. package/dist/index.d.ts +2 -0
  849. package/dist/index.js +435 -89
  850. package/dist/index.js.map +1 -1
  851. package/dist/ir/analysis.js +5 -3
  852. package/dist/ir/analysis.js.map +1 -1
  853. package/dist/ir/array-length-stability.d.ts +4 -0
  854. package/dist/ir/array-length-stability.js +26 -6
  855. package/dist/ir/array-length-stability.js.map +1 -1
  856. package/dist/ir/array-length-stability.test.js +49 -0
  857. package/dist/ir/array-length-stability.test.js.map +1 -1
  858. package/dist/ir/builtin-effects.d.ts +7 -0
  859. package/dist/ir/builtin-effects.js +80 -0
  860. package/dist/ir/builtin-effects.js.map +1 -1
  861. package/dist/ir/builtin-signatures.d.ts +7 -1
  862. package/dist/ir/builtin-signatures.js +303 -21
  863. package/dist/ir/builtin-signatures.js.map +1 -1
  864. package/dist/ir/callback-specialization.d.ts +2 -1
  865. package/dist/ir/callback-specialization.js +23 -18
  866. package/dist/ir/callback-specialization.js.map +1 -1
  867. package/dist/ir/char-unit-locals.d.ts +19 -0
  868. package/dist/ir/char-unit-locals.js +185 -0
  869. package/dist/ir/char-unit-locals.js.map +1 -0
  870. package/dist/ir/char-unit-locals.test.d.ts +1 -0
  871. package/dist/ir/char-unit-locals.test.js +94 -0
  872. package/dist/ir/char-unit-locals.test.js.map +1 -0
  873. package/dist/ir/final-fields.d.ts +3 -1
  874. package/dist/ir/final-fields.js +15 -17
  875. package/dist/ir/final-fields.js.map +1 -1
  876. package/dist/ir/function-references.d.ts +2 -0
  877. package/dist/ir/function-references.js +2 -0
  878. package/dist/ir/function-references.js.map +1 -1
  879. package/dist/ir/function-references.test.js +5 -0
  880. package/dist/ir/function-references.test.js.map +1 -1
  881. package/dist/ir/initializer-bindings.d.ts +2 -1
  882. package/dist/ir/initializer-bindings.js +27 -20
  883. package/dist/ir/initializer-bindings.js.map +1 -1
  884. package/dist/ir/int32-arrays.d.ts +108 -0
  885. package/dist/ir/int32-arrays.js +831 -0
  886. package/dist/ir/int32-arrays.js.map +1 -0
  887. package/dist/ir/int32-slots.d.ts +36 -6
  888. package/dist/ir/int32-slots.js +370 -171
  889. package/dist/ir/int32-slots.js.map +1 -1
  890. package/dist/ir/int32-slots.test.js +3 -1
  891. package/dist/ir/int32-slots.test.js.map +1 -1
  892. package/dist/ir/integer-loop-facts.d.ts +9 -4
  893. package/dist/ir/integer-loop-facts.js +93 -18
  894. package/dist/ir/integer-loop-facts.js.map +1 -1
  895. package/dist/ir/integer-loops.d.ts +49 -0
  896. package/dist/ir/integer-loops.js +202 -40
  897. package/dist/ir/integer-loops.js.map +1 -1
  898. package/dist/ir/integer-loops.test.js +211 -1
  899. package/dist/ir/integer-loops.test.js.map +1 -1
  900. package/dist/ir/integer-ranges.d.ts +5 -0
  901. package/dist/ir/integer-ranges.js +125 -12
  902. package/dist/ir/integer-ranges.js.map +1 -1
  903. package/dist/ir/integer-ranges.test.js +94 -0
  904. package/dist/ir/integer-ranges.test.js.map +1 -1
  905. package/dist/ir/ir.d.ts +87 -9
  906. package/dist/ir/ir.js +61 -2
  907. package/dist/ir/ir.js.map +1 -1
  908. package/dist/ir/ir.test.js +21 -1
  909. package/dist/ir/ir.test.js.map +1 -1
  910. package/dist/ir/js-ic.d.ts +19 -2
  911. package/dist/ir/js-ic.js +95 -11
  912. package/dist/ir/js-ic.js.map +1 -1
  913. package/dist/ir/js-ic.test.js +188 -0
  914. package/dist/ir/js-ic.test.js.map +1 -1
  915. package/dist/ir/node-index.d.ts +57 -0
  916. package/dist/ir/node-index.js +215 -0
  917. package/dist/ir/node-index.js.map +1 -0
  918. package/dist/ir/paired-while-loops.d.ts +25 -0
  919. package/dist/ir/paired-while-loops.js +335 -0
  920. package/dist/ir/paired-while-loops.js.map +1 -0
  921. package/dist/ir/paired-while-loops.test.d.ts +1 -0
  922. package/dist/ir/paired-while-loops.test.js +163 -0
  923. package/dist/ir/paired-while-loops.test.js.map +1 -0
  924. package/dist/ir/parameter-versions.d.ts +25 -0
  925. package/dist/ir/parameter-versions.js +300 -0
  926. package/dist/ir/parameter-versions.js.map +1 -0
  927. package/dist/ir/runtime-features.d.ts +60 -15
  928. package/dist/ir/runtime-features.js +276 -35
  929. package/dist/ir/runtime-features.js.map +1 -1
  930. package/dist/ir/serialize.d.ts +12 -2
  931. package/dist/ir/serialize.js +16 -3
  932. package/dist/ir/serialize.js.map +1 -1
  933. package/dist/ir/serialize.test.js +17 -0
  934. package/dist/ir/serialize.test.js.map +1 -1
  935. package/dist/ir/tiers.js +1 -0
  936. package/dist/ir/tiers.js.map +1 -1
  937. package/dist/ir/traverse.d.ts +2 -0
  938. package/dist/ir/traverse.js +29 -5
  939. package/dist/ir/traverse.js.map +1 -1
  940. package/dist/ir/validate.js +171 -45
  941. package/dist/ir/validate.js.map +1 -1
  942. package/dist/library/ir-policy.js +12 -0
  943. package/dist/library/ir-policy.js.map +1 -1
  944. package/dist/library/library-cache.d.ts +2 -0
  945. package/dist/library/library-cache.js.map +1 -1
  946. package/dist/library/prepare.js +2 -0
  947. package/dist/library/prepare.js.map +1 -1
  948. package/dist/native/cache.d.ts +6 -1
  949. package/dist/native/cache.js +28 -5
  950. package/dist/native/cache.js.map +1 -1
  951. package/dist/native/cache.test.js +16 -2
  952. package/dist/native/cache.test.js.map +1 -1
  953. package/dist/native/cli.js +26 -1
  954. package/dist/native/cli.js.map +1 -1
  955. package/dist/native/compiler.js +8 -6
  956. package/dist/native/compiler.js.map +1 -1
  957. package/dist/native/executable-cache.d.ts +1 -1
  958. package/dist/native/executable-cache.js +2 -2
  959. package/dist/native/executable-cache.js.map +1 -1
  960. package/dist/native/prepare.d.ts +3 -1
  961. package/dist/native/prepare.js +123 -31
  962. package/dist/native/prepare.js.map +1 -1
  963. package/dist/native/prepare.test.js +78 -18
  964. package/dist/native/prepare.test.js.map +1 -1
  965. package/dist/native/sanitizer.test.js +6 -1
  966. package/dist/native/sanitizer.test.js.map +1 -1
  967. package/dist/native/text-file.d.ts +13 -3
  968. package/dist/native/text-file.js +63 -9
  969. package/dist/native/text-file.js.map +1 -1
  970. package/dist/native/text-file.test.d.ts +1 -0
  971. package/dist/native/text-file.test.js +49 -0
  972. package/dist/native/text-file.test.js.map +1 -0
  973. package/dist/native/toolchain.js +4 -4
  974. package/dist/native/toolchain.js.map +1 -1
  975. package/dist/native/toolchain.test.js +3 -3
  976. package/dist/native/toolchain.test.js.map +1 -1
  977. package/dist/startup-cache.d.ts +1 -0
  978. package/dist/startup-cache.js +1 -0
  979. package/dist/startup-cache.js.map +1 -1
  980. package/dist/text-parts.d.ts +7 -0
  981. package/dist/text-parts.js +44 -0
  982. package/dist/text-parts.js.map +1 -1
  983. package/dist/text-parts.test.d.ts +1 -0
  984. package/dist/text-parts.test.js +46 -0
  985. package/dist/text-parts.test.js.map +1 -0
  986. package/dist/timing.d.ts +9 -2
  987. package/dist/timing.js +7 -4
  988. package/dist/timing.js.map +1 -1
  989. package/dist/wasm/translate.d.ts +4 -0
  990. package/dist/wasm/translate.js +2 -2
  991. package/dist/wasm/translate.js.map +1 -1
  992. package/package.json +21 -21
  993. package/shims/chalk/v5.ts +688 -0
  994. package/shims/hono-node-server/v2.ts +645 -0
  995. package/shims/hot-shots/client.ts +1126 -0
  996. package/shims/hot-shots/v8-unix-dgram.ts +8 -0
  997. package/shims/hot-shots/v8.ts +8 -0
  998. package/shims/undici/core/client.ts +4 -4
  999. package/surface-manifest.json +44 -52
@@ -0,0 +1,1126 @@
1
+ // scriptc's built-in implementation of the `hot-shots` package, 8.x API:
2
+ // a typed port of hot-shots 8.5's StatsD client with the same datagrams,
3
+ // callbacks, error messages and child-client sharing, over node:dgram
4
+ // (udp), node:net (tcp) and a native Unix datagram socket (uds). The
5
+ // entry modules (v8.ts, v8-unix-dgram.ts) say whether the optional
6
+ // unix-dgram addon that hot-shots' uds protocol loads is installed.
7
+ import * as dgram from "node:dgram";
8
+ import * as dns from "node:dns";
9
+ import * as net from "node:net";
10
+ import * as os from "node:os";
11
+
12
+ export type Tags = { [key: string]: string } | string[];
13
+
14
+ export interface ClientOptions {
15
+ bufferFlushInterval?: number;
16
+ bufferHolder?: { buffer: string };
17
+ cacheDns?: boolean;
18
+ cacheDnsTtl?: number;
19
+ errorHandler?: (err: Error) => void;
20
+ globalTags?: Tags;
21
+ globalize?: boolean;
22
+ host?: string;
23
+ isChild?: boolean;
24
+ maxBufferSize?: number;
25
+ mock?: boolean;
26
+ path?: string;
27
+ port?: number;
28
+ prefix?: string;
29
+ protocol?: "tcp" | "udp" | "uds";
30
+ sampleRate?: number;
31
+ suffix?: string;
32
+ telegraf?: boolean;
33
+ useDefaultRoute?: boolean;
34
+ tagPrefix?: string;
35
+ tagSeparator?: string;
36
+ udsGracefulErrorHandling?: boolean;
37
+ udsGracefulRestartRateLimit?: number;
38
+ closingFlushInterval?: number;
39
+ }
40
+
41
+ export interface ChildClientOptions {
42
+ globalTags?: Tags;
43
+ prefix?: string;
44
+ suffix?: string;
45
+ errorHandler?: (err: Error) => void;
46
+ }
47
+
48
+ export interface CheckOptions {
49
+ /** A Unix timestamp; hot-shots also takes a Date, which this shim's
50
+ * option records cannot hold yet. */
51
+ date_happened?: number;
52
+ hostname?: string;
53
+ message?: string;
54
+ }
55
+
56
+ export interface DatadogChecks {
57
+ OK: 0;
58
+ WARNING: 1;
59
+ CRITICAL: 2;
60
+ UNKNOWN: 3;
61
+ }
62
+
63
+ export type DatadogChecksValues = 0 | 1 | 2 | 3;
64
+
65
+ export interface EventOptions {
66
+ aggregation_key?: string;
67
+ alert_type?: "info" | "warning" | "success" | "error";
68
+ /** A Unix timestamp; hot-shots also takes a Date, which this shim's
69
+ * option records cannot hold yet. */
70
+ date_happened?: number;
71
+ hostname?: string;
72
+ priority?: "low" | "normal";
73
+ source_type_name?: string;
74
+ }
75
+
76
+ /** A send's completion: hot-shots passes `null` on success. */
77
+ export type StatsCb = (error: Error | null | undefined, bytes?: any) => void;
78
+
79
+ type SampleArg = number | Tags | StatsCb | undefined;
80
+ type TagsArg = Tags | StatsCb | undefined;
81
+
82
+ const PROTOCOL_TCP = "tcp";
83
+ const PROTOCOL_UDS = "uds";
84
+ const PROTOCOL_UDP = "udp";
85
+ const UDS_DEFAULT_GRACEFUL_RESTART_LIMIT = 1000;
86
+ const CACHE_DNS_TTL_DEFAULT = 60000;
87
+
88
+ function udsErrorCodes(): number[] {
89
+ if (process.platform === "linux") {
90
+ return [os.constants.errno.ENOTCONN, os.constants.errno.ECONNREFUSED];
91
+ }
92
+ if (process.platform === "darwin") {
93
+ return [os.constants.errno.EDESTADDRREQ, os.constants.errno.ECONNRESET];
94
+ }
95
+ return [];
96
+ }
97
+ const UDS_ERROR_CODES = udsErrorCodes();
98
+
99
+ // ── helpers ──────────────────────────────────────────────────────────────
100
+
101
+ function sanitizeTags(value: string, telegraf: boolean): string {
102
+ const blacklist = telegraf ? /:|\||,/g : /:|\||@|,/g;
103
+ return String(value).replace(blacklist, "_");
104
+ }
105
+
106
+ function formatTags(tags: Tags, telegraf: boolean): string[] {
107
+ if (Array.isArray(tags)) return tags;
108
+ const out: string[] = [];
109
+ for (const key of Object.keys(tags)) {
110
+ out.push(`${sanitizeTags(key, telegraf)}:${sanitizeTags(tags[key]!, telegraf)}`);
111
+ }
112
+ return out;
113
+ }
114
+
115
+ function isArrayIndexKey(key: string): boolean {
116
+ return /^(0|[1-9]\d*)$/.test(key) && Number(key) < 4294967295;
117
+ }
118
+
119
+ function overrideTags(parent: string[], child: Tags, telegraf: boolean): string[] {
120
+ const childKeys: string[] = [];
121
+ const childValues = new Map<string, string[]>();
122
+ const toAppend: string[] = [];
123
+ for (const tag of formatTags(child, telegraf)) {
124
+ const idx = tag.indexOf(":");
125
+ if (idx < 1) {
126
+ toAppend.push(tag);
127
+ } else {
128
+ const key = tag.substring(0, idx);
129
+ const value = tag.substring(idx + 1);
130
+ let values = childValues.get(key);
131
+ if (values === undefined) {
132
+ values = [];
133
+ childValues.set(key, values);
134
+ childKeys.push(key);
135
+ }
136
+ values.push(value);
137
+ }
138
+ }
139
+ const result = parent.filter((tag) => {
140
+ const idx = tag.indexOf(":");
141
+ if (idx < 1) return true;
142
+ return !childValues.has(tag.substring(0, idx));
143
+ });
144
+ // hot-shots walks an object's keys: array-index keys ascending first,
145
+ // then the rest in insertion order.
146
+ const indexKeys = childKeys.filter(isArrayIndexKey).sort((a, b) => Number(a) - Number(b));
147
+ const ordered = indexKeys.concat(childKeys.filter((key) => !isArrayIndexKey(key)));
148
+ for (const key of ordered) {
149
+ for (const value of childValues.get(key)!) result.push(`${key}:${value}`);
150
+ }
151
+ return result.concat(toAppend);
152
+ }
153
+
154
+ function formatDate(date: number): number {
155
+ return Math.round(date);
156
+ }
157
+
158
+ /** console.error of an arbitrary value, as hot-shots logs errors. The
159
+ * value crosses as unknown: the typed Error path has no inspect lowering
160
+ * in programs whose Error subclasses define accessors. */
161
+ function logError(value: unknown): void {
162
+ console.error(value);
163
+ }
164
+
165
+ function errorWithCode(message: string, code: string | undefined): Error {
166
+ const error: NodeJS.ErrnoException = new Error(message);
167
+ error.code = code;
168
+ return error;
169
+ }
170
+
171
+ // ── transports ───────────────────────────────────────────────────────────
172
+
173
+ type SendCallback = (err: Error | null, bytes?: number) => void;
174
+
175
+ /** The socket a client sends through (hot-shots' transport interface). */
176
+ interface Transport {
177
+ createdAt: number;
178
+ send(buf: Buffer, callback: SendCallback): void;
179
+ close(): void;
180
+ onError(listener: (err: Error) => void): void;
181
+ offError(listener: (err: Error) => void): void;
182
+ /** Emits 'error' on the socket, as hot-shots' `socket.emit('error')`. */
183
+ emitError(err: Error): void;
184
+ onClose(listener: () => void): void;
185
+ }
186
+
187
+ /** A socket's 'error' listeners, kept by the transport (the typed
188
+ * sockets have no removeListener): one socket listener dispatches to a
189
+ * snapshot, and an error nobody listens for throws, as an unhandled
190
+ * 'error' event does. */
191
+ class ErrorListeners {
192
+ private listeners: ((err: Error) => void)[] = [];
193
+ add(listener: (err: Error) => void): void {
194
+ this.listeners.push(listener);
195
+ }
196
+ remove(listener: (err: Error) => void): void {
197
+ const index = this.listeners.indexOf(listener);
198
+ if (index !== -1) this.listeners.splice(index, 1);
199
+ }
200
+ emit(err: Error): void {
201
+ const snapshot = this.listeners.slice();
202
+ if (snapshot.length === 0) throw err;
203
+ for (const listener of snapshot) listener(err);
204
+ }
205
+ }
206
+
207
+ function addEol(buf: Buffer): string {
208
+ let msg = buf.toString();
209
+ if (msg.length > 0 && msg[msg.length - 1] !== "\n") msg += "\n";
210
+ return msg;
211
+ }
212
+
213
+ class UdpTransport implements Transport {
214
+ createdAt = 0;
215
+ private readonly socket: dgram.Socket;
216
+ private readonly errors = new ErrorListeners();
217
+ private resolvedAddress: string | undefined = undefined;
218
+ private resolvedAt = 0;
219
+ private readonly host: string | undefined;
220
+ private readonly port: number;
221
+ private readonly cacheDns: boolean;
222
+ private readonly cacheDnsTtl: number;
223
+ constructor(host: string | undefined, port: number, cacheDns: boolean, cacheDnsTtl: number) {
224
+ this.host = host;
225
+ this.port = port;
226
+ this.cacheDns = cacheDns;
227
+ this.cacheDnsTtl = cacheDnsTtl;
228
+ this.socket = dgram.createSocket("udp4");
229
+ this.socket.unref();
230
+ // The listener captures the list, not the transport: a socket that is
231
+ // never closed keeps its listener, and a capture of `this` would make
232
+ // a cycle the reference counts cannot free at exit.
233
+ const errors = this.errors;
234
+ this.socket.on("error", (err) => errors.emit(err));
235
+ }
236
+ send(buf: Buffer, callback: SendCallback): void {
237
+ if (!this.cacheDns) {
238
+ this.socket.send(buf, this.port, this.host || "127.0.0.1", callback);
239
+ return;
240
+ }
241
+ const now = Date.now();
242
+ const cached = this.resolvedAddress;
243
+ if (cached === undefined || now - this.resolvedAt > this.cacheDnsTtl) {
244
+ dns.lookup(this.host ?? "localhost", (error, address) => {
245
+ if (error) {
246
+ callback(error);
247
+ return;
248
+ }
249
+ this.resolvedAddress = address;
250
+ this.resolvedAt = now;
251
+ this.socket.send(buf, this.port, address, callback);
252
+ });
253
+ } else {
254
+ this.socket.send(buf, this.port, cached, callback);
255
+ }
256
+ }
257
+ close(): void {
258
+ this.socket.close();
259
+ }
260
+ onError(listener: (err: Error) => void): void {
261
+ this.errors.add(listener);
262
+ }
263
+ offError(listener: (err: Error) => void): void {
264
+ this.errors.remove(listener);
265
+ }
266
+ emitError(err: Error): void {
267
+ this.errors.emit(err);
268
+ }
269
+ onClose(listener: () => void): void {
270
+ this.socket.on("close", listener);
271
+ }
272
+ }
273
+
274
+ class TcpTransport implements Transport {
275
+ createdAt = 0;
276
+ private readonly socket: net.Socket;
277
+ private readonly errors = new ErrorListeners();
278
+ constructor(host: string | undefined, port: number) {
279
+ this.socket = net.connect(port, host ?? "localhost");
280
+ this.socket.setKeepAlive(true);
281
+ this.socket.unref();
282
+ // The listener captures the list, not the transport: a socket that is
283
+ // never closed keeps its listener, and a capture of `this` would make
284
+ // a cycle the reference counts cannot free at exit.
285
+ const errors = this.errors;
286
+ this.socket.on("error", (err) => errors.emit(err));
287
+ }
288
+ send(buf: Buffer, callback: SendCallback): void {
289
+ // hot-shots writes the line with the 'ascii' encoding, which encodes
290
+ // strings as 'latin1' does. The callback runs once the data is written,
291
+ // so a message held back by a full socket buffer stays in flight.
292
+ this.socket.write(Buffer.from(addEol(buf), "latin1"), (err) => callback(err ?? null));
293
+ }
294
+ close(): void {
295
+ this.socket.destroy();
296
+ }
297
+ onError(listener: (err: Error) => void): void {
298
+ this.errors.add(listener);
299
+ }
300
+ offError(listener: (err: Error) => void): void {
301
+ this.errors.remove(listener);
302
+ }
303
+ emitError(err: Error): void {
304
+ this.errors.emit(err);
305
+ }
306
+ onClose(listener: () => void): void {
307
+ this.socket.on("close", () => listener());
308
+ }
309
+ }
310
+
311
+ // The runtime's AF_UNIX datagram calls (the unix-dgram addon's binding):
312
+ // results >= 0, or a negative errno; send answers 1 when it would block.
313
+ declare function scriptcUnixDgramSocket(): number;
314
+ declare function scriptcUnixDgramConnect(fd: number, path: string): number;
315
+ declare function scriptcUnixDgramSend(fd: number, data: Buffer): number;
316
+ declare function scriptcUnixDgramClose(fd: number): number;
317
+
318
+ let unixDgramInstalled = false;
319
+
320
+ /** Whether the unix-dgram addon is installed beside hot-shots (set by the
321
+ * entry module). */
322
+ export function configureUnixDgram(installed: boolean): void {
323
+ unixDgramInstalled = installed;
324
+ }
325
+
326
+ const UDS_PATH_DEFAULT = "/var/run/datadog/dsd.socket";
327
+
328
+ /** unix-dgram's errnoException: "<syscall> <errno>" (the code is the
329
+ * negative errno; this Error's code field holds its decimal string). */
330
+ function errnoException(errorno: number, syscall: string): Error {
331
+ const error: NodeJS.ErrnoException = new Error(`${syscall} ${errorno}`);
332
+ error.errno = errorno;
333
+ error.code = String(errorno);
334
+ error.syscall = syscall;
335
+ return error;
336
+ }
337
+
338
+ /** hot-shots' uds transport over unix-dgram: a connected, non-blocking
339
+ * AF_UNIX datagram socket. Sends complete synchronously, as the addon's
340
+ * do. The addon polls the socket for reads, which holds the event loop
341
+ * until close; a ref'd timer stands in for that poll. */
342
+ class UdsTransport implements Transport {
343
+ createdAt = 0;
344
+ private fd: number;
345
+ private readonly errors = new ErrorListeners();
346
+ private readonly closeListeners: (() => void)[] = [];
347
+ private readonly stopHold: () => void;
348
+ constructor(path: string) {
349
+ const fd = scriptcUnixDgramSocket();
350
+ if (fd < 0) throw errnoException(fd, "socket");
351
+ this.fd = fd;
352
+ const hold = setInterval(() => {}, 2147483647);
353
+ this.stopHold = () => clearInterval(hold);
354
+ const err = scriptcUnixDgramConnect(fd, path);
355
+ if (err < 0) {
356
+ // The addon emits the connect failure as 'error' before anyone
357
+ // listens, which throws; hot-shots closes the socket and rethrows.
358
+ this.close();
359
+ throw errnoException(err, "connect");
360
+ }
361
+ }
362
+ send(buf: Buffer, callback: SendCallback): void {
363
+ const result = scriptcUnixDgramSend(this.fd, buf);
364
+ if (result < 0) {
365
+ callback(errnoException(result, "send"));
366
+ } else if (result === 1) {
367
+ const congestion: NodeJS.ErrnoException = new Error("congestion");
368
+ congestion.code = "1";
369
+ callback(congestion);
370
+ } else {
371
+ callback(null);
372
+ }
373
+ }
374
+ close(): void {
375
+ const result = scriptcUnixDgramClose(this.fd);
376
+ if (result < 0) throw errnoException(result, "close");
377
+ this.fd = -1;
378
+ this.stopHold();
379
+ for (const listener of this.closeListeners.slice()) listener();
380
+ }
381
+ onError(listener: (err: Error) => void): void {
382
+ this.errors.add(listener);
383
+ }
384
+ offError(listener: (err: Error) => void): void {
385
+ this.errors.remove(listener);
386
+ }
387
+ emitError(err: Error): void {
388
+ this.errors.emit(err);
389
+ }
390
+ onClose(listener: () => void): void {
391
+ this.closeListeners.push(listener);
392
+ }
393
+ }
394
+
395
+ /** hot-shots' createUdsTransport: without the unix-dgram addon the
396
+ * protocol reports it missing. */
397
+ function createUdsTransport(path: string | undefined): Transport {
398
+ if (!unixDgramInstalled) {
399
+ throw new Error(
400
+ "The library `unix_dgram`, needed for the uds protocol to work, is not installed. " +
401
+ "You need to pick another protocol to use hot-shots. " +
402
+ "See the hot-shots README for additional details.",
403
+ );
404
+ }
405
+ return new UdsTransport(path ? path : UDS_PATH_DEFAULT);
406
+ }
407
+
408
+ function createTransport(client: StatsD): Transport | null {
409
+ let transport: Transport | null = null;
410
+ const protocol = client.protocol;
411
+ try {
412
+ if (protocol === PROTOCOL_TCP) {
413
+ transport = new TcpTransport(client.host, client.port);
414
+ } else if (protocol === PROTOCOL_UDS) {
415
+ transport = createUdsTransport(client.path);
416
+ } else if (protocol === PROTOCOL_UDP) {
417
+ transport = new UdpTransport(client.host, client.port, client.cacheDns, client.cacheDnsTtl);
418
+ } else {
419
+ throw new Error(`Unsupported protocol '${protocol}'`);
420
+ }
421
+ transport.createdAt = Date.now();
422
+ } catch (e) {
423
+ const handler = client.errorHandler;
424
+ if (handler) {
425
+ handler(e as Error);
426
+ } else {
427
+ console.error(e);
428
+ }
429
+ }
430
+ return transport;
431
+ }
432
+
433
+ // ── the client ───────────────────────────────────────────────────────────
434
+
435
+ class BufferHolder {
436
+ buffer = "";
437
+ }
438
+
439
+ /** What a child client inherits from its parent. */
440
+ class ChildInit {
441
+ socket: Transport | null;
442
+ bufferHolder: BufferHolder;
443
+ dnsError: Error | undefined;
444
+ constructor(socket: Transport | null, bufferHolder: BufferHolder, dnsError: Error | undefined) {
445
+ this.socket = socket;
446
+ this.bufferHolder = bufferHolder;
447
+ this.dnsError = dnsError;
448
+ }
449
+ }
450
+
451
+ export class StatsD {
452
+ protocol: string;
453
+ cacheDns: boolean;
454
+ cacheDnsTtl: number;
455
+ host: string | undefined;
456
+ port: number;
457
+ path: string | undefined;
458
+ prefix: string;
459
+ suffix: string;
460
+ tagPrefix: string;
461
+ tagSeparator: string;
462
+ mock: boolean;
463
+ globalTags: string[];
464
+ telegraf: boolean;
465
+ maxBufferSize: number;
466
+ sampleRate: number;
467
+ bufferFlushInterval: number;
468
+ errorHandler: ((err: Error) => void) | undefined;
469
+ udsGracefulErrorHandling: boolean;
470
+ udsGracefulRestartRateLimit: number;
471
+ isChild: boolean;
472
+ closingFlushInterval: number;
473
+ mockBuffer: string[] | undefined = undefined;
474
+ messagesInFlight = 0;
475
+ CHECKS: DatadogChecks = { OK: 0, WARNING: 1, CRITICAL: 2, UNKNOWN: 3 };
476
+ private bufferHolder: BufferHolder;
477
+ private transport: Transport | null = null;
478
+ private dnsError: Error | undefined = undefined;
479
+ private stopFlushInterval: (() => void) | undefined = undefined;
480
+
481
+ constructor(options?: ClientOptions, child?: ChildInit) {
482
+ const o: ClientOptions = options ?? {};
483
+ const protocol = o.protocol ? o.protocol.toLowerCase() : "";
484
+ this.protocol = protocol ? protocol : PROTOCOL_UDP;
485
+ this.cacheDns = o.cacheDns === true;
486
+ this.cacheDnsTtl = o.cacheDnsTtl || CACHE_DNS_TTL_DEFAULT;
487
+ this.host = o.host || process.env["DD_AGENT_HOST"];
488
+ this.port = o.port || parseInt(process.env["DD_DOGSTATSD_PORT"] ?? "", 10) || 8125;
489
+ this.path = o.path;
490
+ this.prefix = o.prefix || "";
491
+ this.suffix = o.suffix || "";
492
+ this.tagPrefix = o.tagPrefix || "#";
493
+ this.tagSeparator = o.tagSeparator || ",";
494
+ this.mock = o.mock === true;
495
+ this.telegraf = o.telegraf || false;
496
+ const globalTags = o.globalTags;
497
+ this.globalTags = globalTags !== undefined ? formatTags(globalTags, this.telegraf) : [];
498
+ const entityId = process.env["DD_ENTITY_ID"];
499
+ if (entityId) {
500
+ this.globalTags = this.globalTags.filter(
501
+ (item) => item.indexOf("dd.internal.entity_id:") !== 0,
502
+ );
503
+ this.globalTags.push("dd.internal.entity_id:".concat(sanitizeTags(entityId, false)));
504
+ }
505
+ this.maxBufferSize = o.maxBufferSize || 0;
506
+ this.sampleRate = o.sampleRate || 1;
507
+ this.bufferFlushInterval = o.bufferFlushInterval || 1000;
508
+ this.bufferHolder = child !== undefined ? child.bufferHolder : new BufferHolder();
509
+ this.errorHandler = o.errorHandler;
510
+ const graceful = o.udsGracefulErrorHandling;
511
+ this.udsGracefulErrorHandling = graceful === undefined ? true : graceful;
512
+ this.udsGracefulRestartRateLimit =
513
+ o.udsGracefulRestartRateLimit || UDS_DEFAULT_GRACEFUL_RESTART_LIMIT;
514
+ this.isChild = child !== undefined;
515
+ this.closingFlushInterval = o.closingFlushInterval || 50;
516
+ if (this.mock) this.mockBuffer = [];
517
+ if (child === undefined && this.maxBufferSize > 0) {
518
+ const handle = setInterval(() => this.onBufferFlushInterval(), this.bufferFlushInterval);
519
+ handle.unref();
520
+ this.stopFlushInterval = () => clearInterval(handle);
521
+ }
522
+ if (child !== undefined) {
523
+ if (child.dnsError) this.dnsError = child.dnsError;
524
+ this.transport = child.socket;
525
+ }
526
+ if (!this.transport) this.transport = createTransport(this);
527
+ const handler = o.errorHandler;
528
+ const transport = this.transport;
529
+ if (transport !== null && child === undefined && handler) transport.onError(handler);
530
+ if (transport !== null && o.protocol === PROTOCOL_UDS) this.maybeAddUDSErrorHandler();
531
+ }
532
+
533
+ private maybeAddUDSErrorHandler(): void {
534
+ if (this.isChild || !this.udsGracefulErrorHandling) return;
535
+ const transport = this.transport;
536
+ if (transport !== null) transport.onError((err) => this.udsErrorHandler(err));
537
+ }
538
+
539
+ private udsErrorHandler(err: Error): void {
540
+ const code = Number((err as NodeJS.ErrnoException).code);
541
+ if (!UDS_ERROR_CODES.includes(-code)) return;
542
+ const socket = this.transport;
543
+ if (socket === null) return;
544
+ if (!socket.createdAt || Date.now() - socket.createdAt < this.udsGracefulRestartRateLimit) {
545
+ return;
546
+ }
547
+ const handler = this.errorHandler;
548
+ if (handler) socket.offError(handler);
549
+ const newSocket = createTransport(this);
550
+ if (newSocket === null) {
551
+ const errorMessage = "Could not replace UDS connection with new socket";
552
+ if (handler) {
553
+ handler(new Error(errorMessage));
554
+ } else {
555
+ console.error(errorMessage);
556
+ }
557
+ return;
558
+ }
559
+ socket.close();
560
+ this.transport = newSocket;
561
+ this.maybeAddUDSErrorHandler();
562
+ if (handler) {
563
+ newSocket.onError(handler);
564
+ } else {
565
+ newSocket.onError((error) => console.error(`hot-shots UDS error: ${String(error)}`));
566
+ }
567
+ }
568
+
569
+ // ── stats functions ──
570
+
571
+ timing(
572
+ stat: string | string[],
573
+ time: number,
574
+ sampleRate?: number,
575
+ tags?: Tags,
576
+ callback?: StatsCb,
577
+ ): void;
578
+ timing(stat: string | string[], time: number, tags?: Tags, callback?: StatsCb): void;
579
+ timing(stat: string | string[], time: number, callback?: StatsCb): void;
580
+ timing(stat: string | string[], time: number, sampleRate?: number, callback?: StatsCb): void;
581
+ timing(
582
+ stat: string | string[],
583
+ time: number,
584
+ sampleRate?: SampleArg,
585
+ tags?: TagsArg,
586
+ callback?: StatsCb,
587
+ ): void {
588
+ this.sendAll(stat, time, "ms", sampleRate, tags, callback);
589
+ }
590
+
591
+ increment(stat: string, tags?: Tags): void;
592
+ increment(
593
+ stat: string | string[],
594
+ value: number,
595
+ sampleRate?: number,
596
+ tags?: Tags,
597
+ callback?: StatsCb,
598
+ ): void;
599
+ increment(stat: string | string[], value: number, tags?: Tags, callback?: StatsCb): void;
600
+ increment(stat: string | string[], value: number, callback?: StatsCb): void;
601
+ increment(stat: string | string[], value: number, sampleRate?: number, callback?: StatsCb): void;
602
+ increment(
603
+ stat: string | string[],
604
+ value?: number | Tags,
605
+ sampleRate?: SampleArg,
606
+ tags?: TagsArg,
607
+ callback?: StatsCb,
608
+ ): void {
609
+ // A non-number second argument of a two-argument call is the tags.
610
+ let amount = 1;
611
+ let tagArg: TagsArg = tags;
612
+ if (typeof value === "number") {
613
+ amount = value;
614
+ } else if (sampleRate === undefined && tags === undefined && callback === undefined) {
615
+ tagArg = value;
616
+ }
617
+ this.sendAll(stat, amount, "c", sampleRate, tagArg, callback);
618
+ }
619
+
620
+ decrement(stat: string, tags?: Tags): void;
621
+ decrement(
622
+ stat: string | string[],
623
+ value: number,
624
+ sampleRate?: number,
625
+ tags?: Tags,
626
+ callback?: StatsCb,
627
+ ): void;
628
+ decrement(stat: string | string[], value: number, tags?: Tags, callback?: StatsCb): void;
629
+ decrement(stat: string | string[], value: number, callback?: StatsCb): void;
630
+ decrement(stat: string | string[], value: number, sampleRate?: number, callback?: StatsCb): void;
631
+ decrement(
632
+ stat: string | string[],
633
+ value?: number | Tags,
634
+ sampleRate?: SampleArg,
635
+ tags?: TagsArg,
636
+ callback?: StatsCb,
637
+ ): void {
638
+ let amount = 1;
639
+ let tagArg: TagsArg = tags;
640
+ if (typeof value === "number") {
641
+ amount = value;
642
+ } else if (sampleRate === undefined && tags === undefined && callback === undefined) {
643
+ tagArg = value;
644
+ }
645
+ this.sendAll(stat, -amount, "c", sampleRate, tagArg, callback);
646
+ }
647
+
648
+ histogram(
649
+ stat: string | string[],
650
+ value: number,
651
+ sampleRate?: number,
652
+ tags?: Tags,
653
+ callback?: StatsCb,
654
+ ): void;
655
+ histogram(stat: string | string[], value: number, tags?: Tags, callback?: StatsCb): void;
656
+ histogram(stat: string | string[], value: number, callback?: StatsCb): void;
657
+ histogram(stat: string | string[], value: number, sampleRate?: number, callback?: StatsCb): void;
658
+ histogram(
659
+ stat: string | string[],
660
+ value: number,
661
+ sampleRate?: SampleArg,
662
+ tags?: TagsArg,
663
+ callback?: StatsCb,
664
+ ): void {
665
+ this.sendAll(stat, value, "h", sampleRate, tags, callback);
666
+ }
667
+
668
+ distribution(
669
+ stat: string | string[],
670
+ value: number,
671
+ sampleRate?: number,
672
+ tags?: Tags,
673
+ callback?: StatsCb,
674
+ ): void;
675
+ distribution(stat: string | string[], value: number, tags?: Tags, callback?: StatsCb): void;
676
+ distribution(stat: string | string[], value: number, callback?: StatsCb): void;
677
+ distribution(
678
+ stat: string | string[],
679
+ value: number,
680
+ sampleRate?: number,
681
+ callback?: StatsCb,
682
+ ): void;
683
+ distribution(
684
+ stat: string | string[],
685
+ value: number,
686
+ sampleRate?: SampleArg,
687
+ tags?: TagsArg,
688
+ callback?: StatsCb,
689
+ ): void {
690
+ this.sendAll(stat, value, "d", sampleRate, tags, callback);
691
+ }
692
+
693
+ gauge(
694
+ stat: string | string[],
695
+ value: number,
696
+ sampleRate?: number,
697
+ tags?: Tags,
698
+ callback?: StatsCb,
699
+ ): void;
700
+ gauge(stat: string | string[], value: number, tags?: Tags, callback?: StatsCb): void;
701
+ gauge(stat: string | string[], value: number, callback?: StatsCb): void;
702
+ gauge(stat: string | string[], value: number, sampleRate?: number, callback?: StatsCb): void;
703
+ gauge(
704
+ stat: string | string[],
705
+ value: number,
706
+ sampleRate?: SampleArg,
707
+ tags?: TagsArg,
708
+ callback?: StatsCb,
709
+ ): void {
710
+ this.sendAll(stat, value, "g", sampleRate, tags, callback);
711
+ }
712
+
713
+ set(
714
+ stat: string | string[],
715
+ value: number | string,
716
+ sampleRate?: number,
717
+ tags?: Tags,
718
+ callback?: StatsCb,
719
+ ): void;
720
+ set(stat: string | string[], value: number | string, tags?: Tags, callback?: StatsCb): void;
721
+ set(stat: string | string[], value: number | string, callback?: StatsCb): void;
722
+ set(
723
+ stat: string | string[],
724
+ value: number | string,
725
+ sampleRate?: number,
726
+ callback?: StatsCb,
727
+ ): void;
728
+ set(
729
+ stat: string | string[],
730
+ value: number | string,
731
+ sampleRate?: SampleArg,
732
+ tags?: TagsArg,
733
+ callback?: StatsCb,
734
+ ): void {
735
+ this.sendAll(stat, value, "s", sampleRate, tags, callback);
736
+ }
737
+
738
+ unique(
739
+ stat: string | string[],
740
+ value: number | string,
741
+ sampleRate?: number,
742
+ tags?: Tags,
743
+ callback?: StatsCb,
744
+ ): void;
745
+ unique(stat: string | string[], value: number | string, tags?: Tags, callback?: StatsCb): void;
746
+ unique(stat: string | string[], value: number | string, callback?: StatsCb): void;
747
+ unique(
748
+ stat: string | string[],
749
+ value: number | string,
750
+ sampleRate?: number,
751
+ callback?: StatsCb,
752
+ ): void;
753
+ unique(
754
+ stat: string | string[],
755
+ value: number | string,
756
+ sampleRate?: SampleArg,
757
+ tags?: TagsArg,
758
+ callback?: StatsCb,
759
+ ): void {
760
+ this.sendAll(stat, value, "s", sampleRate, tags, callback);
761
+ }
762
+
763
+ check(
764
+ name: string,
765
+ status: DatadogChecksValues,
766
+ options?: CheckOptions,
767
+ tags?: Tags | StatsCb,
768
+ callback?: StatsCb,
769
+ ): void {
770
+ if (this.telegraf) {
771
+ const err = new Error("Not supported by Telegraf / InfluxDB");
772
+ if (callback) return callback(err);
773
+ const handler = this.errorHandler;
774
+ if (handler) return handler(err);
775
+ throw err;
776
+ }
777
+ const check: string[] = ["_sc", this.prefix + name + this.suffix, String(status)];
778
+ const metadata: CheckOptions = options ?? {};
779
+ const happened = metadata.date_happened;
780
+ if (happened) {
781
+ const timestamp = formatDate(happened);
782
+ if (timestamp) check.push(`d:${timestamp}`);
783
+ }
784
+ if (metadata.hostname) check.push(`h:${metadata.hostname}`);
785
+ let mergedTags = this.globalTags;
786
+ if (tags !== undefined && typeof tags !== "function") {
787
+ mergedTags = overrideTags(mergedTags, tags, this.telegraf);
788
+ }
789
+ if (mergedTags.length > 0) check.push(`#${mergedTags.join(",")}`);
790
+ if (metadata.message) check.push(`m:${metadata.message}`);
791
+ let cb = callback;
792
+ if (typeof tags === "function" && callback === undefined) cb = tags;
793
+ this.sendRaw(check.join("|"), cb);
794
+ }
795
+
796
+ event(
797
+ title: string,
798
+ text?: string,
799
+ options?: EventOptions,
800
+ tags?: Tags | StatsCb,
801
+ callback?: StatsCb,
802
+ ): void {
803
+ if (this.telegraf) {
804
+ const err = new Error("Not supported by Telegraf / InfluxDB");
805
+ if (callback) return callback(err);
806
+ const handler = this.errorHandler;
807
+ if (handler) return handler(err);
808
+ throw err;
809
+ }
810
+ const msgTitle = String(title ? title : "");
811
+ let msgText = String(text ? text : msgTitle);
812
+ msgText = msgText.replace(/\n/g, "\\n");
813
+ let message = `_e{${msgTitle.length},${msgText.length}}:${msgTitle}|${msgText}`;
814
+ if (options) {
815
+ const happened = options.date_happened;
816
+ if (happened) {
817
+ const timestamp = formatDate(happened);
818
+ if (timestamp) message += `|d:${timestamp}`;
819
+ }
820
+ if (options.hostname) message += `|h:${options.hostname}`;
821
+ if (options.aggregation_key) message += `|k:${options.aggregation_key}`;
822
+ if (options.priority) message += `|p:${options.priority}`;
823
+ if (options.source_type_name) message += `|s:${options.source_type_name}`;
824
+ if (options.alert_type) message += `|t:${options.alert_type}`;
825
+ }
826
+ let cb = callback;
827
+ let tagList: Tags | undefined = undefined;
828
+ if (typeof tags === "function") {
829
+ if (callback === undefined) cb = tags;
830
+ } else {
831
+ tagList = tags;
832
+ }
833
+ this.send(message, tagList, cb);
834
+ }
835
+
836
+ // ── sending ──
837
+
838
+ private sendAll(
839
+ stat: string | string[],
840
+ value: number | string,
841
+ type: string,
842
+ sampleRateArg: SampleArg,
843
+ tagsArg: TagsArg,
844
+ callbackArg: StatsCb | undefined,
845
+ ): void {
846
+ let sampleRate: number | undefined = undefined;
847
+ let tags: Tags | undefined = undefined;
848
+ let callback: StatsCb | undefined = callbackArg;
849
+ if (typeof sampleRateArg === "number") {
850
+ sampleRate = sampleRateArg;
851
+ if (typeof tagsArg === "function") {
852
+ callback = tagsArg;
853
+ } else {
854
+ tags = tagsArg;
855
+ }
856
+ } else if (sampleRateArg !== undefined) {
857
+ // A non-number sample rate shifts into the tags, and the tags
858
+ // argument into the callback.
859
+ if (typeof sampleRateArg === "function") {
860
+ callback = sampleRateArg;
861
+ } else {
862
+ tags = sampleRateArg;
863
+ callback = typeof tagsArg === "function" ? tagsArg : undefined;
864
+ }
865
+ } else if (typeof tagsArg === "function") {
866
+ callback = tagsArg;
867
+ } else {
868
+ tags = tagsArg;
869
+ }
870
+
871
+ if (!Array.isArray(stat)) {
872
+ this.sendStat(stat, value, type, sampleRate, tags, callback);
873
+ return;
874
+ }
875
+ let completed = 0;
876
+ let calledback = false;
877
+ let sentBytes = 0;
878
+ const count = stat.length;
879
+ const onSend: StatsCb = (error, bytes) => {
880
+ completed += 1;
881
+ if (calledback) return;
882
+ if (error) {
883
+ if (callback !== undefined) {
884
+ calledback = true;
885
+ callback(error);
886
+ } else {
887
+ const handler = this.errorHandler;
888
+ if (handler) {
889
+ calledback = true;
890
+ handler(error);
891
+ }
892
+ }
893
+ return;
894
+ }
895
+ if (bytes) sentBytes += bytes as number;
896
+ if (completed === count && callback !== undefined) callback(null, sentBytes);
897
+ };
898
+ for (const item of stat) this.sendStat(item, value, type, sampleRate, tags, onSend);
899
+ }
900
+
901
+ private sendStat(
902
+ stat: string,
903
+ value: number | string,
904
+ type: string,
905
+ sampleRateArg: number | undefined,
906
+ tags: Tags | undefined,
907
+ callback: StatsCb | undefined,
908
+ ): void {
909
+ let message = `${this.prefix + stat + this.suffix}:${value}|${type}`;
910
+ const sampleRate = sampleRateArg || this.sampleRate;
911
+ if (sampleRate && sampleRate < 1) {
912
+ if (Math.random() < sampleRate) {
913
+ message += `|@${sampleRate}`;
914
+ } else {
915
+ if (callback) callback(undefined);
916
+ return;
917
+ }
918
+ }
919
+ this.send(message, tags, callback);
920
+ }
921
+
922
+ private send(message: string, tags: Tags | undefined, callback: StatsCb | undefined): void {
923
+ let mergedTags = this.globalTags;
924
+ if (tags !== undefined) mergedTags = overrideTags(mergedTags, tags, this.telegraf);
925
+ if (mergedTags.length > 0) {
926
+ if (this.telegraf) {
927
+ const parts = message.split(":");
928
+ message = `${parts[0]!},${mergedTags.join(",").replace(/:/g, "=")}:${parts.slice(1).join(":")}`;
929
+ } else {
930
+ message += `|${this.tagPrefix}${mergedTags.join(this.tagSeparator)}`;
931
+ }
932
+ }
933
+ this.sendRaw(message, callback);
934
+ }
935
+
936
+ /** hot-shots' `_send`: the message with its tags. */
937
+ private sendRaw(message: string, callback: StatsCb | undefined): void {
938
+ const dnsError = this.dnsError;
939
+ if (dnsError) {
940
+ if (callback) return callback(dnsError);
941
+ const handler = this.errorHandler;
942
+ if (handler) return handler(dnsError);
943
+ throw dnsError;
944
+ }
945
+ if (!this.mock) {
946
+ if (this.maxBufferSize === 0) {
947
+ this.sendMessage(message, callback);
948
+ } else {
949
+ this.enqueue(message, callback);
950
+ }
951
+ } else {
952
+ const buffer = this.mockBuffer;
953
+ if (buffer !== undefined) buffer.push(message);
954
+ if (callback) callback(null, 0);
955
+ }
956
+ }
957
+
958
+ private enqueue(message: string, callback: StatsCb | undefined): void {
959
+ message += "\n";
960
+ if (this.bufferHolder.buffer.length + message.length > this.maxBufferSize) {
961
+ this.flushQueue(callback);
962
+ this.bufferHolder.buffer += message;
963
+ } else {
964
+ this.bufferHolder.buffer += message;
965
+ if (callback) callback(null);
966
+ }
967
+ }
968
+
969
+ private flushQueue(callback?: StatsCb): void {
970
+ this.sendMessage(this.bufferHolder.buffer, callback);
971
+ this.bufferHolder.buffer = "";
972
+ }
973
+
974
+ private sendMessage(message: string, callback: StatsCb | undefined): void {
975
+ if (message === "") {
976
+ if (callback) callback(null);
977
+ return;
978
+ }
979
+ const socketWasMissing = this.transport === null;
980
+ if (socketWasMissing && this.protocol === PROTOCOL_UDS) {
981
+ this.transport = createTransport(this);
982
+ if (this.transport !== null) this.maybeAddUDSErrorHandler();
983
+ }
984
+ const socket = this.transport;
985
+ if (socketWasMissing || socket === null) {
986
+ const error = new Error("Socket not created properly. Check previous errors for details.");
987
+ if (callback) return callback(error);
988
+ const handler = this.errorHandler;
989
+ if (handler) return handler(error);
990
+ console.error(String(error));
991
+ return;
992
+ }
993
+ const handleCallback = (err: Error | null, bytes?: number): void => {
994
+ this.messagesInFlight--;
995
+ let errFormatted: Error | null = null;
996
+ if (err) {
997
+ errFormatted = errorWithCode(
998
+ `Error sending hot-shots message: ${String(err)}`,
999
+ (err as NodeJS.ErrnoException).code,
1000
+ );
1001
+ if (this.protocol === PROTOCOL_UDS && (callback || this.errorHandler)) {
1002
+ this.udsErrorHandler(err);
1003
+ }
1004
+ }
1005
+ if (callback) {
1006
+ callback(errFormatted, bytes);
1007
+ } else if (errFormatted) {
1008
+ const handler = this.errorHandler;
1009
+ if (handler) {
1010
+ handler(errFormatted);
1011
+ } else {
1012
+ console.error(String(errFormatted));
1013
+ // hot-shots also emits the error on the current socket, where the
1014
+ // uds reconnection handler listens; with no listener it throws.
1015
+ const current = this.transport;
1016
+ if (current !== null) current.emitError(errFormatted);
1017
+ }
1018
+ }
1019
+ };
1020
+ try {
1021
+ this.messagesInFlight++;
1022
+ socket.send(Buffer.from(message), handleCallback);
1023
+ } catch (err) {
1024
+ handleCallback(err as Error);
1025
+ }
1026
+ }
1027
+
1028
+ private onBufferFlushInterval(): void {
1029
+ this.flushQueue();
1030
+ }
1031
+
1032
+ close(callback?: (error?: Error) => void): void {
1033
+ const stop = this.stopFlushInterval;
1034
+ if (stop !== undefined) stop();
1035
+ this.flushQueue((err) => {
1036
+ if (err) {
1037
+ if (callback) return callback(err);
1038
+ logError(err);
1039
+ return;
1040
+ }
1041
+ let intervalAttempts = 0;
1042
+ const waitForMessages = setInterval(() => {
1043
+ intervalAttempts++;
1044
+ if (intervalAttempts > 10) {
1045
+ console.log("hot-shots could not clear out messages in flight but closing anyways");
1046
+ this.messagesInFlight = 0;
1047
+ }
1048
+ if (this.messagesInFlight <= 0) {
1049
+ clearInterval(waitForMessages);
1050
+ this.closeSocket(callback);
1051
+ }
1052
+ }, this.closingFlushInterval);
1053
+ });
1054
+ }
1055
+
1056
+ private closeSocket(callback: ((error?: Error) => void) | undefined): void {
1057
+ let handledError = false;
1058
+ const handleErr = (err: unknown): void => {
1059
+ const errMessage = `Error closing hot-shots socket: ${String(err)}`;
1060
+ if (handledError) {
1061
+ console.error(errMessage);
1062
+ } else {
1063
+ handledError = true;
1064
+ if (callback) {
1065
+ callback(new Error(errMessage));
1066
+ } else {
1067
+ const handler = this.errorHandler;
1068
+ if (handler) {
1069
+ handler(new Error(errMessage));
1070
+ } else {
1071
+ console.error(errMessage);
1072
+ }
1073
+ }
1074
+ }
1075
+ };
1076
+ const socket = this.transport;
1077
+ if (socket === null) {
1078
+ handleErr(new TypeError("Cannot read properties of null (reading 'removeListener')"));
1079
+ return;
1080
+ }
1081
+ const handler = this.errorHandler;
1082
+ if (handler) socket.offError(handler);
1083
+ socket.onError(handleErr);
1084
+ if (callback) {
1085
+ socket.onClose(() => {
1086
+ if (!handledError) callback(undefined);
1087
+ });
1088
+ }
1089
+ try {
1090
+ socket.close();
1091
+ } catch (err) {
1092
+ handleErr(err);
1093
+ }
1094
+ }
1095
+
1096
+ childClient(options?: ChildClientOptions): StatsD {
1097
+ const o: ChildClientOptions = options ?? {};
1098
+ const childTags = o.globalTags;
1099
+ return new StatsD(
1100
+ {
1101
+ isChild: true,
1102
+ errorHandler: o.errorHandler || this.errorHandler,
1103
+ host: this.host,
1104
+ port: this.port,
1105
+ tagPrefix: this.tagPrefix,
1106
+ tagSeparator: this.tagSeparator,
1107
+ prefix: (o.prefix || "") + this.prefix,
1108
+ suffix: this.suffix + (o.suffix || ""),
1109
+ globalize: false,
1110
+ mock: this.mock,
1111
+ globalTags:
1112
+ childTags !== undefined
1113
+ ? overrideTags(this.globalTags, childTags, this.telegraf)
1114
+ : this.globalTags,
1115
+ maxBufferSize: this.maxBufferSize,
1116
+ bufferFlushInterval: this.bufferFlushInterval,
1117
+ telegraf: this.telegraf,
1118
+ protocol: this.protocol === "tcp" ? "tcp" : this.protocol === "uds" ? "uds" : "udp",
1119
+ closingFlushInterval: this.closingFlushInterval,
1120
+ },
1121
+ new ChildInit(this.transport, this.bufferHolder, this.dnsError),
1122
+ );
1123
+ }
1124
+ }
1125
+
1126
+ export default StatsD;