@socketsecurity/lib 0.0.0 → 1.0.1

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 (555) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/LICENSE +21 -0
  3. package/README.md +80 -2
  4. package/data/extensions.json +28 -0
  5. package/dist/abort.d.ts +11 -0
  6. package/dist/abort.js +62 -0
  7. package/dist/abort.js.map +7 -0
  8. package/dist/agent.d.ts +102 -0
  9. package/dist/agent.js +288 -0
  10. package/dist/agent.js.map +7 -0
  11. package/dist/ansi.d.ts +29 -0
  12. package/dist/ansi.js +62 -0
  13. package/dist/ansi.js.map +7 -0
  14. package/dist/argv/flags.d.ts +199 -0
  15. package/dist/argv/flags.js +284 -0
  16. package/dist/argv/flags.js.map +7 -0
  17. package/dist/argv/parse.d.ts +76 -0
  18. package/dist/argv/parse.js +173 -0
  19. package/dist/argv/parse.js.map +7 -0
  20. package/dist/arrays.d.ts +29 -0
  21. package/dist/arrays.js +87 -0
  22. package/dist/arrays.js.map +7 -0
  23. package/dist/bin.d.ts +50 -0
  24. package/dist/bin.js +405 -0
  25. package/dist/bin.js.map +7 -0
  26. package/dist/cacache.d.ts +86 -0
  27. package/dist/cacache.js +140 -0
  28. package/dist/cacache.js.map +7 -0
  29. package/dist/cache-with-ttl.d.ts +133 -0
  30. package/dist/cache-with-ttl.js +225 -0
  31. package/dist/cache-with-ttl.js.map +7 -0
  32. package/dist/constants/agents.d.ts +37 -0
  33. package/dist/constants/agents.js +128 -0
  34. package/dist/constants/agents.js.map +7 -0
  35. package/dist/constants/core.d.ts +22 -0
  36. package/dist/constants/core.js +59 -0
  37. package/dist/constants/core.js.map +7 -0
  38. package/dist/constants/encoding.d.ts +13 -0
  39. package/dist/constants/encoding.js +50 -0
  40. package/dist/constants/encoding.js.map +7 -0
  41. package/dist/constants/github.d.ts +7 -0
  42. package/dist/constants/github.js +32 -0
  43. package/dist/constants/github.js.map +7 -0
  44. package/dist/constants/licenses.d.ts +8 -0
  45. package/dist/constants/licenses.js +68 -0
  46. package/dist/constants/licenses.js.map +7 -0
  47. package/dist/constants/node.d.ts +29 -0
  48. package/dist/constants/node.js +173 -0
  49. package/dist/constants/node.js.map +7 -0
  50. package/dist/constants/packages.d.ts +19 -0
  51. package/dist/constants/packages.js +130 -0
  52. package/dist/constants/packages.js.map +7 -0
  53. package/dist/constants/paths.d.ts +51 -0
  54. package/dist/constants/paths.js +152 -0
  55. package/dist/constants/paths.js.map +7 -0
  56. package/dist/constants/platform.d.ts +6 -0
  57. package/dist/constants/platform.js +43 -0
  58. package/dist/constants/platform.js.map +7 -0
  59. package/dist/constants/process.d.ts +7 -0
  60. package/dist/constants/process.js +54 -0
  61. package/dist/constants/process.js.map +7 -0
  62. package/dist/constants/socket.d.ts +29 -0
  63. package/dist/constants/socket.js +83 -0
  64. package/dist/constants/socket.js.map +7 -0
  65. package/dist/constants/testing.d.ts +9 -0
  66. package/dist/constants/testing.js +38 -0
  67. package/dist/constants/testing.js.map +7 -0
  68. package/dist/constants/time.d.ts +11 -0
  69. package/dist/constants/time.js +41 -0
  70. package/dist/constants/time.js.map +7 -0
  71. package/dist/constants/typescript.d.ts +6 -0
  72. package/dist/constants/typescript.js +56 -0
  73. package/dist/constants/typescript.js.map +7 -0
  74. package/dist/cover/code.d.ts +8 -0
  75. package/dist/cover/code.js +137 -0
  76. package/dist/cover/code.js.map +7 -0
  77. package/dist/cover/formatters.d.ts +9 -0
  78. package/dist/cover/formatters.js +103 -0
  79. package/dist/cover/formatters.js.map +7 -0
  80. package/dist/cover/type.d.ts +7 -0
  81. package/dist/cover/type.js +65 -0
  82. package/dist/cover/type.js.map +7 -0
  83. package/dist/cover/types.d.ts +70 -0
  84. package/dist/cover/types.js +17 -0
  85. package/dist/cover/types.js.map +7 -0
  86. package/dist/debug.d.ts +99 -0
  87. package/dist/debug.js +345 -0
  88. package/dist/debug.js.map +7 -0
  89. package/dist/dlx-binary.d.ts +49 -0
  90. package/dist/dlx-binary.js +261 -0
  91. package/dist/dlx-binary.js.map +7 -0
  92. package/dist/dlx.d.ts +64 -0
  93. package/dist/dlx.js +168 -0
  94. package/dist/dlx.js.map +7 -0
  95. package/dist/download-lock.d.ts +48 -0
  96. package/dist/download-lock.js +139 -0
  97. package/dist/download-lock.js.map +7 -0
  98. package/dist/effects/pulse-frames.d.ts +23 -0
  99. package/dist/effects/pulse-frames.js +66 -0
  100. package/dist/effects/pulse-frames.js.map +7 -0
  101. package/dist/effects/text-shimmer.d.ts +37 -0
  102. package/dist/effects/text-shimmer.js +175 -0
  103. package/dist/effects/text-shimmer.js.map +7 -0
  104. package/dist/effects/types.d.ts +41 -0
  105. package/dist/effects/types.js +17 -0
  106. package/dist/effects/types.js.map +7 -0
  107. package/dist/effects/ultra.d.ts +16 -0
  108. package/dist/effects/ultra.js +63 -0
  109. package/dist/effects/ultra.js.map +7 -0
  110. package/dist/env/appdata.d.ts +1 -0
  111. package/dist/env/appdata.js +30 -0
  112. package/dist/env/appdata.js.map +7 -0
  113. package/dist/env/ci.d.ts +1 -0
  114. package/dist/env/ci.js +31 -0
  115. package/dist/env/ci.js.map +7 -0
  116. package/dist/env/comspec.d.ts +1 -0
  117. package/dist/env/comspec.js +30 -0
  118. package/dist/env/comspec.js.map +7 -0
  119. package/dist/env/debug.d.ts +1 -0
  120. package/dist/env/debug.js +30 -0
  121. package/dist/env/debug.js.map +7 -0
  122. package/dist/env/getters.d.ts +40 -0
  123. package/dist/env/getters.js +283 -0
  124. package/dist/env/getters.js.map +7 -0
  125. package/dist/env/github-api-url.d.ts +1 -0
  126. package/dist/env/github-api-url.js +30 -0
  127. package/dist/env/github-api-url.js.map +7 -0
  128. package/dist/env/github-base-ref.d.ts +1 -0
  129. package/dist/env/github-base-ref.js +30 -0
  130. package/dist/env/github-base-ref.js.map +7 -0
  131. package/dist/env/github-ref-name.d.ts +1 -0
  132. package/dist/env/github-ref-name.js +30 -0
  133. package/dist/env/github-ref-name.js.map +7 -0
  134. package/dist/env/github-ref-type.d.ts +1 -0
  135. package/dist/env/github-ref-type.js +30 -0
  136. package/dist/env/github-ref-type.js.map +7 -0
  137. package/dist/env/github-repository.d.ts +1 -0
  138. package/dist/env/github-repository.js +30 -0
  139. package/dist/env/github-repository.js.map +7 -0
  140. package/dist/env/github-server-url.d.ts +1 -0
  141. package/dist/env/github-server-url.js +30 -0
  142. package/dist/env/github-server-url.js.map +7 -0
  143. package/dist/env/github-token.d.ts +1 -0
  144. package/dist/env/github-token.js +30 -0
  145. package/dist/env/github-token.js.map +7 -0
  146. package/dist/env/helpers.d.ts +6 -0
  147. package/dist/env/helpers.js +49 -0
  148. package/dist/env/helpers.js.map +7 -0
  149. package/dist/env/home.d.ts +1 -0
  150. package/dist/env/home.js +30 -0
  151. package/dist/env/home.js.map +7 -0
  152. package/dist/env/jest-worker-id.d.ts +1 -0
  153. package/dist/env/jest-worker-id.js +30 -0
  154. package/dist/env/jest-worker-id.js.map +7 -0
  155. package/dist/env/lang.d.ts +1 -0
  156. package/dist/env/lang.js +30 -0
  157. package/dist/env/lang.js.map +7 -0
  158. package/dist/env/lc-all.d.ts +1 -0
  159. package/dist/env/lc-all.js +30 -0
  160. package/dist/env/lc-all.js.map +7 -0
  161. package/dist/env/lc-messages.d.ts +1 -0
  162. package/dist/env/lc-messages.js +30 -0
  163. package/dist/env/lc-messages.js.map +7 -0
  164. package/dist/env/localappdata.d.ts +1 -0
  165. package/dist/env/localappdata.js +30 -0
  166. package/dist/env/localappdata.js.map +7 -0
  167. package/dist/env/node-auth-token.d.ts +1 -0
  168. package/dist/env/node-auth-token.js +30 -0
  169. package/dist/env/node-auth-token.js.map +7 -0
  170. package/dist/env/node-env.d.ts +1 -0
  171. package/dist/env/node-env.js +30 -0
  172. package/dist/env/node-env.js.map +7 -0
  173. package/dist/env/npm-config-registry.d.ts +1 -0
  174. package/dist/env/npm-config-registry.js +30 -0
  175. package/dist/env/npm-config-registry.js.map +7 -0
  176. package/dist/env/npm-config-user-agent.d.ts +1 -0
  177. package/dist/env/npm-config-user-agent.js +30 -0
  178. package/dist/env/npm-config-user-agent.js.map +7 -0
  179. package/dist/env/npm-lifecycle-event.d.ts +1 -0
  180. package/dist/env/npm-lifecycle-event.js +30 -0
  181. package/dist/env/npm-lifecycle-event.js.map +7 -0
  182. package/dist/env/npm-registry.d.ts +1 -0
  183. package/dist/env/npm-registry.js +30 -0
  184. package/dist/env/npm-registry.js.map +7 -0
  185. package/dist/env/npm-token.d.ts +1 -0
  186. package/dist/env/npm-token.js +30 -0
  187. package/dist/env/npm-token.js.map +7 -0
  188. package/dist/env/path.d.ts +1 -0
  189. package/dist/env/path.js +30 -0
  190. package/dist/env/path.js.map +7 -0
  191. package/dist/env/pre-commit.d.ts +1 -0
  192. package/dist/env/pre-commit.js +31 -0
  193. package/dist/env/pre-commit.js.map +7 -0
  194. package/dist/env/shell.d.ts +1 -0
  195. package/dist/env/shell.js +30 -0
  196. package/dist/env/shell.js.map +7 -0
  197. package/dist/env/socket-accept-risks.d.ts +1 -0
  198. package/dist/env/socket-accept-risks.js +31 -0
  199. package/dist/env/socket-accept-risks.js.map +7 -0
  200. package/dist/env/socket-api-base-url.d.ts +1 -0
  201. package/dist/env/socket-api-base-url.js +30 -0
  202. package/dist/env/socket-api-base-url.js.map +7 -0
  203. package/dist/env/socket-api-proxy.d.ts +1 -0
  204. package/dist/env/socket-api-proxy.js +30 -0
  205. package/dist/env/socket-api-proxy.js.map +7 -0
  206. package/dist/env/socket-api-timeout.d.ts +1 -0
  207. package/dist/env/socket-api-timeout.js +31 -0
  208. package/dist/env/socket-api-timeout.js.map +7 -0
  209. package/dist/env/socket-api-token.d.ts +1 -0
  210. package/dist/env/socket-api-token.js +30 -0
  211. package/dist/env/socket-api-token.js.map +7 -0
  212. package/dist/env/socket-cacache-dir.d.ts +1 -0
  213. package/dist/env/socket-cacache-dir.js +30 -0
  214. package/dist/env/socket-cacache-dir.js.map +7 -0
  215. package/dist/env/socket-cli-accept-risks.d.ts +1 -0
  216. package/dist/env/socket-cli-accept-risks.js +33 -0
  217. package/dist/env/socket-cli-accept-risks.js.map +7 -0
  218. package/dist/env/socket-cli-api-base-url.d.ts +1 -0
  219. package/dist/env/socket-cli-api-base-url.js +30 -0
  220. package/dist/env/socket-cli-api-base-url.js.map +7 -0
  221. package/dist/env/socket-cli-api-proxy.d.ts +1 -0
  222. package/dist/env/socket-cli-api-proxy.js +30 -0
  223. package/dist/env/socket-cli-api-proxy.js.map +7 -0
  224. package/dist/env/socket-cli-api-timeout.d.ts +1 -0
  225. package/dist/env/socket-cli-api-timeout.js +31 -0
  226. package/dist/env/socket-cli-api-timeout.js.map +7 -0
  227. package/dist/env/socket-cli-api-token.d.ts +1 -0
  228. package/dist/env/socket-cli-api-token.js +30 -0
  229. package/dist/env/socket-cli-api-token.js.map +7 -0
  230. package/dist/env/socket-cli-config.d.ts +1 -0
  231. package/dist/env/socket-cli-config.js +30 -0
  232. package/dist/env/socket-cli-config.js.map +7 -0
  233. package/dist/env/socket-cli-fix.d.ts +1 -0
  234. package/dist/env/socket-cli-fix.js +30 -0
  235. package/dist/env/socket-cli-fix.js.map +7 -0
  236. package/dist/env/socket-cli-no-api-token.d.ts +1 -0
  237. package/dist/env/socket-cli-no-api-token.js +33 -0
  238. package/dist/env/socket-cli-no-api-token.js.map +7 -0
  239. package/dist/env/socket-cli-optimize.d.ts +1 -0
  240. package/dist/env/socket-cli-optimize.js +31 -0
  241. package/dist/env/socket-cli-optimize.js.map +7 -0
  242. package/dist/env/socket-cli-org-slug.d.ts +1 -0
  243. package/dist/env/socket-cli-org-slug.js +30 -0
  244. package/dist/env/socket-cli-org-slug.js.map +7 -0
  245. package/dist/env/socket-cli-shadow-accept-risks.d.ts +1 -0
  246. package/dist/env/socket-cli-shadow-accept-risks.js +33 -0
  247. package/dist/env/socket-cli-shadow-accept-risks.js.map +7 -0
  248. package/dist/env/socket-cli-shadow-api-token.d.ts +1 -0
  249. package/dist/env/socket-cli-shadow-api-token.js +30 -0
  250. package/dist/env/socket-cli-shadow-api-token.js.map +7 -0
  251. package/dist/env/socket-cli-shadow-bin.d.ts +1 -0
  252. package/dist/env/socket-cli-shadow-bin.js +30 -0
  253. package/dist/env/socket-cli-shadow-bin.js.map +7 -0
  254. package/dist/env/socket-cli-shadow-progress.d.ts +1 -0
  255. package/dist/env/socket-cli-shadow-progress.js +33 -0
  256. package/dist/env/socket-cli-shadow-progress.js.map +7 -0
  257. package/dist/env/socket-cli-shadow-silent.d.ts +1 -0
  258. package/dist/env/socket-cli-shadow-silent.js +33 -0
  259. package/dist/env/socket-cli-shadow-silent.js.map +7 -0
  260. package/dist/env/socket-cli-view-all-risks.d.ts +1 -0
  261. package/dist/env/socket-cli-view-all-risks.js +33 -0
  262. package/dist/env/socket-cli-view-all-risks.js.map +7 -0
  263. package/dist/env/socket-config.d.ts +1 -0
  264. package/dist/env/socket-config.js +30 -0
  265. package/dist/env/socket-config.js.map +7 -0
  266. package/dist/env/socket-debug.d.ts +1 -0
  267. package/dist/env/socket-debug.js +30 -0
  268. package/dist/env/socket-debug.js.map +7 -0
  269. package/dist/env/socket-home.d.ts +1 -0
  270. package/dist/env/socket-home.js +30 -0
  271. package/dist/env/socket-home.js.map +7 -0
  272. package/dist/env/socket-no-api-token.d.ts +1 -0
  273. package/dist/env/socket-no-api-token.js +31 -0
  274. package/dist/env/socket-no-api-token.js.map +7 -0
  275. package/dist/env/socket-npm-registry.d.ts +1 -0
  276. package/dist/env/socket-npm-registry.js +30 -0
  277. package/dist/env/socket-npm-registry.js.map +7 -0
  278. package/dist/env/socket-org-slug.d.ts +1 -0
  279. package/dist/env/socket-org-slug.js +30 -0
  280. package/dist/env/socket-org-slug.js.map +7 -0
  281. package/dist/env/socket-registry-url.d.ts +1 -0
  282. package/dist/env/socket-registry-url.js +30 -0
  283. package/dist/env/socket-registry-url.js.map +7 -0
  284. package/dist/env/socket-view-all-risks.d.ts +1 -0
  285. package/dist/env/socket-view-all-risks.js +31 -0
  286. package/dist/env/socket-view-all-risks.js.map +7 -0
  287. package/dist/env/temp.d.ts +1 -0
  288. package/dist/env/temp.js +30 -0
  289. package/dist/env/temp.js.map +7 -0
  290. package/dist/env/term.d.ts +1 -0
  291. package/dist/env/term.js +30 -0
  292. package/dist/env/term.js.map +7 -0
  293. package/dist/env/tmp.d.ts +1 -0
  294. package/dist/env/tmp.js +30 -0
  295. package/dist/env/tmp.js.map +7 -0
  296. package/dist/env/tmpdir.d.ts +1 -0
  297. package/dist/env/tmpdir.js +30 -0
  298. package/dist/env/tmpdir.js.map +7 -0
  299. package/dist/env/userprofile.d.ts +1 -0
  300. package/dist/env/userprofile.js +30 -0
  301. package/dist/env/userprofile.js.map +7 -0
  302. package/dist/env/vitest.d.ts +1 -0
  303. package/dist/env/vitest.js +31 -0
  304. package/dist/env/vitest.js.map +7 -0
  305. package/dist/env/xdg-cache-home.d.ts +1 -0
  306. package/dist/env/xdg-cache-home.js +30 -0
  307. package/dist/env/xdg-cache-home.js.map +7 -0
  308. package/dist/env/xdg-config-home.d.ts +1 -0
  309. package/dist/env/xdg-config-home.js +30 -0
  310. package/dist/env/xdg-config-home.js.map +7 -0
  311. package/dist/env/xdg-data-home.d.ts +1 -0
  312. package/dist/env/xdg-data-home.js +30 -0
  313. package/dist/env/xdg-data-home.js.map +7 -0
  314. package/dist/env.d.ts +15 -0
  315. package/dist/env.js +63 -0
  316. package/dist/env.js.map +7 -0
  317. package/dist/external/@inquirer/checkbox.js +4 -0
  318. package/dist/external/@inquirer/confirm.js +22 -0
  319. package/dist/external/@inquirer/core.js +4 -0
  320. package/dist/external/@inquirer/input.js +1 -0
  321. package/dist/external/@inquirer/password.js +1 -0
  322. package/dist/external/@inquirer/prompts.js +4 -0
  323. package/dist/external/@inquirer/search.js +1 -0
  324. package/dist/external/@inquirer/select.js +25 -0
  325. package/dist/external/@npmcli/package-json/index.js +1 -0
  326. package/dist/external/@npmcli/package-json/lib/read-package.js +1 -0
  327. package/dist/external/@npmcli/package-json/lib/sort.js +1 -0
  328. package/dist/external/@npmcli/promise-spawn.js +5 -0
  329. package/dist/external/@socketregistry/is-unicode-supported.d.ts +2 -0
  330. package/dist/external/@socketregistry/is-unicode-supported.js +5 -0
  331. package/dist/external/@socketregistry/packageurl-js.js +34 -0
  332. package/dist/external/@socketregistry/yocto-spinner.d.ts +12 -0
  333. package/dist/external/@socketregistry/yocto-spinner.js +8 -0
  334. package/dist/external/@yarnpkg/extensions.d.ts +5 -0
  335. package/dist/external/@yarnpkg/extensions.js +5 -0
  336. package/dist/external/cacache.d.ts +93 -0
  337. package/dist/external/cacache.js +32 -0
  338. package/dist/external/debug.d.ts +25 -0
  339. package/dist/external/debug.js +9 -0
  340. package/dist/external/del.d.ts +1 -0
  341. package/dist/external/del.js +54 -0
  342. package/dist/external/fast-glob.js +54 -0
  343. package/dist/external/fast-sort.d.ts +4 -0
  344. package/dist/external/fast-sort.js +5 -0
  345. package/dist/external/get-east-asian-width.d.ts +5 -0
  346. package/dist/external/get-east-asian-width.js +5 -0
  347. package/dist/external/libnpmpack.d.ts +3 -0
  348. package/dist/external/libnpmpack.js +225 -0
  349. package/dist/external/make-fetch-happen.d.ts +16 -0
  350. package/dist/external/make-fetch-happen.js +69 -0
  351. package/dist/external/normalize-package-data.js +6 -0
  352. package/dist/external/npm-package-arg.js +6 -0
  353. package/dist/external/pacote.d.ts +19 -0
  354. package/dist/external/pacote.js +105 -0
  355. package/dist/external/picomatch.js +5 -0
  356. package/dist/external/semver.d.ts +3 -0
  357. package/dist/external/semver.js +5 -0
  358. package/dist/external/spdx-correct.js +5 -0
  359. package/dist/external/spdx-expression-parse.js +5 -0
  360. package/dist/external/streaming-iterables.js +5 -0
  361. package/dist/external/validate-npm-package-name.js +5 -0
  362. package/dist/external/which.js +5 -0
  363. package/dist/external/yargs-parser.d.ts +3 -0
  364. package/dist/external/yargs-parser.js +26 -0
  365. package/dist/external/yoctocolors-cjs.d.ts +38 -0
  366. package/dist/external/yoctocolors-cjs.js +5 -0
  367. package/dist/external/zod.d.ts +1 -0
  368. package/dist/external/zod.js +27 -0
  369. package/dist/fs.d.ts +184 -0
  370. package/dist/fs.js +610 -0
  371. package/dist/fs.js.map +7 -0
  372. package/dist/functions.d.ts +27 -0
  373. package/dist/functions.js +70 -0
  374. package/dist/functions.js.map +7 -0
  375. package/dist/git.d.ts +93 -0
  376. package/dist/git.js +321 -0
  377. package/dist/git.js.map +7 -0
  378. package/dist/github.d.ts +121 -0
  379. package/dist/github.js +203 -0
  380. package/dist/github.js.map +7 -0
  381. package/dist/globs.d.ts +46 -0
  382. package/dist/globs.js +154 -0
  383. package/dist/globs.js.map +7 -0
  384. package/dist/http-request.d.ts +53 -0
  385. package/dist/http-request.js +315 -0
  386. package/dist/http-request.js.map +7 -0
  387. package/dist/index.d.ts +13 -0
  388. package/dist/index.js +64 -0
  389. package/dist/index.js.map +7 -0
  390. package/dist/ipc.d.ts +366 -0
  391. package/dist/ipc.js +234 -0
  392. package/dist/ipc.js.map +7 -0
  393. package/dist/json.d.ts +23 -0
  394. package/dist/json.js +75 -0
  395. package/dist/json.js.map +7 -0
  396. package/dist/logger.d.ts +183 -0
  397. package/dist/logger.js +653 -0
  398. package/dist/logger.js.map +7 -0
  399. package/dist/maintained-node-versions.d.ts +7 -0
  400. package/dist/maintained-node-versions.js +37 -0
  401. package/dist/maintained-node-versions.js.map +7 -0
  402. package/dist/memoization.d.ts +142 -0
  403. package/dist/memoization.js +212 -0
  404. package/dist/memoization.js.map +7 -0
  405. package/dist/objects.d.ts +146 -0
  406. package/dist/objects.js +321 -0
  407. package/dist/objects.js.map +7 -0
  408. package/dist/packages/editable.d.ts +107 -0
  409. package/dist/packages/editable.js +358 -0
  410. package/dist/packages/editable.js.map +7 -0
  411. package/dist/packages/exports.d.ts +30 -0
  412. package/dist/packages/exports.js +164 -0
  413. package/dist/packages/exports.js.map +7 -0
  414. package/dist/packages/isolation.d.ts +22 -0
  415. package/dist/packages/isolation.js +197 -0
  416. package/dist/packages/isolation.js.map +7 -0
  417. package/dist/packages/licenses.d.ts +68 -0
  418. package/dist/packages/licenses.js +216 -0
  419. package/dist/packages/licenses.js.map +7 -0
  420. package/dist/packages/manifest.d.ts +16 -0
  421. package/dist/packages/manifest.js +192 -0
  422. package/dist/packages/manifest.js.map +7 -0
  423. package/dist/packages/normalize.d.ts +21 -0
  424. package/dist/packages/normalize.js +122 -0
  425. package/dist/packages/normalize.js.map +7 -0
  426. package/dist/packages/operations.d.ts +54 -0
  427. package/dist/packages/operations.js +306 -0
  428. package/dist/packages/operations.js.map +7 -0
  429. package/dist/packages/paths.d.ts +10 -0
  430. package/dist/packages/paths.js +55 -0
  431. package/dist/packages/paths.js.map +7 -0
  432. package/dist/packages/provenance.d.ts +10 -0
  433. package/dist/packages/provenance.js +180 -0
  434. package/dist/packages/provenance.js.map +7 -0
  435. package/dist/packages/registry.d.ts +8 -0
  436. package/dist/packages/registry.js +30 -0
  437. package/dist/packages/registry.js.map +7 -0
  438. package/dist/packages/specs.d.ts +28 -0
  439. package/dist/packages/specs.js +85 -0
  440. package/dist/packages/specs.js.map +7 -0
  441. package/dist/packages/validation.d.ts +15 -0
  442. package/dist/packages/validation.js +53 -0
  443. package/dist/packages/validation.js.map +7 -0
  444. package/dist/packages.d.ts +154 -0
  445. package/dist/packages.js +131 -0
  446. package/dist/packages.js.map +7 -0
  447. package/dist/path.d.ts +74 -0
  448. package/dist/path.js +442 -0
  449. package/dist/path.js.map +7 -0
  450. package/dist/paths.d.ts +42 -0
  451. package/dist/paths.js +145 -0
  452. package/dist/paths.js.map +7 -0
  453. package/dist/performance.d.ts +178 -0
  454. package/dist/performance.js +219 -0
  455. package/dist/performance.js.map +7 -0
  456. package/dist/promise-queue.d.ts +35 -0
  457. package/dist/promise-queue.js +111 -0
  458. package/dist/promise-queue.js.map +7 -0
  459. package/dist/promises.d.ts +67 -0
  460. package/dist/promises.js +268 -0
  461. package/dist/promises.js.map +7 -0
  462. package/dist/prompts.d.ts +27 -0
  463. package/dist/prompts.js +60 -0
  464. package/dist/prompts.js.map +7 -0
  465. package/dist/regexps.d.ts +13 -0
  466. package/dist/regexps.js +32 -0
  467. package/dist/regexps.js.map +7 -0
  468. package/dist/sea.d.ts +10 -0
  469. package/dist/sea.js +46 -0
  470. package/dist/sea.js.map +7 -0
  471. package/dist/shadow.d.ts +17 -0
  472. package/dist/shadow.js +60 -0
  473. package/dist/shadow.js.map +7 -0
  474. package/dist/signal-exit.d.ts +23 -0
  475. package/dist/signal-exit.js +250 -0
  476. package/dist/signal-exit.js.map +7 -0
  477. package/dist/sorts.d.ts +28 -0
  478. package/dist/sorts.js +96 -0
  479. package/dist/sorts.js.map +7 -0
  480. package/dist/spawn.d.ts +207 -0
  481. package/dist/spawn.js +201 -0
  482. package/dist/spawn.js.map +7 -0
  483. package/dist/spinner.d.ts +208 -0
  484. package/dist/spinner.js +729 -0
  485. package/dist/spinner.js.map +7 -0
  486. package/dist/ssri.d.ts +95 -0
  487. package/dist/ssri.js +73 -0
  488. package/dist/ssri.js.map +7 -0
  489. package/dist/stdio/clear.d.ts +40 -0
  490. package/dist/stdio/clear.js +84 -0
  491. package/dist/stdio/clear.js.map +7 -0
  492. package/dist/stdio/divider.d.ts +48 -0
  493. package/dist/stdio/divider.js +81 -0
  494. package/dist/stdio/divider.js.map +7 -0
  495. package/dist/stdio/footer.d.ts +25 -0
  496. package/dist/stdio/footer.js +96 -0
  497. package/dist/stdio/footer.js.map +7 -0
  498. package/dist/stdio/header.d.ts +25 -0
  499. package/dist/stdio/header.js +102 -0
  500. package/dist/stdio/header.js.map +7 -0
  501. package/dist/stdio/mask.d.ts +72 -0
  502. package/dist/stdio/mask.js +187 -0
  503. package/dist/stdio/mask.js.map +7 -0
  504. package/dist/stdio/progress.d.ts +51 -0
  505. package/dist/stdio/progress.js +171 -0
  506. package/dist/stdio/progress.js.map +7 -0
  507. package/dist/stdio/prompts.d.ts +46 -0
  508. package/dist/stdio/prompts.js +90 -0
  509. package/dist/stdio/prompts.js.map +7 -0
  510. package/dist/stdio/stderr.d.ts +48 -0
  511. package/dist/stdio/stderr.js +91 -0
  512. package/dist/stdio/stderr.js.map +7 -0
  513. package/dist/stdio/stdout.d.ts +48 -0
  514. package/dist/stdio/stdout.js +105 -0
  515. package/dist/stdio/stdout.js.map +7 -0
  516. package/dist/streams.d.ts +20 -0
  517. package/dist/streams.js +80 -0
  518. package/dist/streams.js.map +7 -0
  519. package/dist/strings.d.ts +139 -0
  520. package/dist/strings.js +253 -0
  521. package/dist/strings.js.map +7 -0
  522. package/dist/suppress-warnings.d.ts +66 -0
  523. package/dist/suppress-warnings.js +100 -0
  524. package/dist/suppress-warnings.js.map +7 -0
  525. package/dist/tables.d.ts +69 -0
  526. package/dist/tables.js +130 -0
  527. package/dist/tables.js.map +7 -0
  528. package/dist/temporary-executor.d.ts +9 -0
  529. package/dist/temporary-executor.js +54 -0
  530. package/dist/temporary-executor.js.map +7 -0
  531. package/dist/types.d.ts +65 -0
  532. package/dist/types.js +74 -0
  533. package/dist/types.js.map +7 -0
  534. package/dist/url.d.ts +60 -0
  535. package/dist/url.js +144 -0
  536. package/dist/url.js.map +7 -0
  537. package/dist/utils/get-ipc.d.ts +16 -0
  538. package/dist/utils/get-ipc.js +60 -0
  539. package/dist/utils/get-ipc.js.map +7 -0
  540. package/dist/validation/json-parser.d.ts +10 -0
  541. package/dist/validation/json-parser.js +129 -0
  542. package/dist/validation/json-parser.js.map +7 -0
  543. package/dist/validation/types.d.ts +40 -0
  544. package/dist/validation/types.js +17 -0
  545. package/dist/validation/types.js.map +7 -0
  546. package/dist/versions.d.ts +87 -0
  547. package/dist/versions.js +155 -0
  548. package/dist/versions.js.map +7 -0
  549. package/dist/words.d.ts +22 -0
  550. package/dist/words.js +52 -0
  551. package/dist/words.js.map +7 -0
  552. package/dist/zod.d.ts +5 -0
  553. package/dist/zod.js +29 -0
  554. package/dist/zod.js.map +7 -0
  555. package/package.json +856 -7
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/logger.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview Console logging utilities with line prefix support.\n * Provides enhanced console methods with formatted output capabilities.\n */\n\nimport isUnicodeSupported from './external/@socketregistry/is-unicode-supported'\nimport yoctocolorsCjs from './external/yoctocolors-cjs'\nimport { objectAssign, objectFreeze } from './objects'\nimport { applyLinePrefix, isBlankString } from './strings'\n\n// Type definitions\ntype LogSymbols = {\n fail: string\n info: string\n success: string\n warn: string\n}\n\ntype LoggerMethods = {\n [K in keyof typeof console]: (typeof console)[K] extends (\n ...args: infer A\n // biome-ignore lint/suspicious/noExplicitAny: Console method return types are dynamic.\n ) => any\n ? (...args: A) => Logger\n : (typeof console)[K]\n}\n\ninterface Task {\n run<T>(f: () => T): T\n}\n\nexport type { LogSymbols, LoggerMethods, Task }\n\nconst globalConsole = console\n// IMPORTANT: Do not use destructuring here - use direct assignment instead.\n// tsgo has a bug that incorrectly transpiles destructured exports, resulting in\n// `exports.SomeName = void 0;` which causes runtime errors.\n// See: https://github.com/SocketDev/socket-packageurl-js/issues/3\nconst ReflectApply = Reflect.apply\nconst ReflectConstruct = Reflect.construct\n\nlet _Console: typeof import('console').Console | undefined\n/**\n * Construct a new Console instance.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction constructConsole(...args: unknown[]) {\n if (_Console === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n const nodeConsole = /*@__PURE__*/ require('node:console')\n _Console = nodeConsole.Console\n }\n return ReflectConstruct(\n // biome-ignore lint/style/noNonNullAssertion: Initialized above.\n _Console! as new (\n ...args: unknown[]\n ) => Console, // eslint-disable-line no-undef\n args,\n )\n}\n\n/**\n * Get the yoctocolors module for terminal colors.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getYoctocolors() {\n return yoctocolorsCjs\n}\n\nexport const LOG_SYMBOLS = /*@__PURE__*/ (() => {\n const target: Record<string, string> = {\n __proto__: null,\n } as unknown as Record<string, string>\n // Mutable handler to simulate a frozen target.\n const handler: ProxyHandler<Record<string, string>> = {\n __proto__: null,\n } as unknown as ProxyHandler<Record<string, string>>\n const init = () => {\n const supported = isUnicodeSupported()\n const colors = getYoctocolors()\n objectAssign(target, {\n fail: colors.red(supported ? '\u2716' : '\u00D7'),\n info: colors.blue(supported ? '\u2139' : 'i'),\n success: colors.green(supported ? '\u2714' : '\u221A'),\n warn: colors.yellow(supported ? '\u26A0' : '\u203C'),\n })\n objectFreeze(target)\n // The handler of a Proxy is mutable after proxy instantiation.\n // We delete the traps to defer to native behavior.\n for (const trapName in handler) {\n delete handler[trapName as keyof ProxyHandler<Record<string, string>>]\n }\n }\n for (const trapName of Reflect.ownKeys(Reflect)) {\n const fn = (Reflect as Record<PropertyKey, unknown>)[trapName]\n if (typeof fn === 'function') {\n ;(handler as Record<string, (...args: unknown[]) => unknown>)[\n trapName as string\n ] = (...args: unknown[]) => {\n init()\n return fn(...args)\n }\n }\n }\n return new Proxy(target, handler)\n})()\n\nconst boundConsoleEntries = [\n // Add bound properties from console[kBindProperties](ignoreErrors, colorMode, groupIndentation).\n // https://github.com/nodejs/node/blob/v24.0.1/lib/internal/console/constructor.js#L230-L265\n '_stderrErrorHandler',\n '_stdoutErrorHandler',\n // Add methods that need to be bound to function properly.\n 'assert',\n 'clear',\n 'count',\n 'countReset',\n 'createTask',\n 'debug',\n 'dir',\n 'dirxml',\n 'error',\n // Skip group methods because in at least Node 20 with the Node --frozen-intrinsics\n // flag it triggers a readonly property for Symbol(kGroupIndent). Instead, we\n // implement these methods ourselves.\n //'group',\n //'groupCollapsed',\n //'groupEnd',\n 'info',\n 'log',\n 'table',\n 'time',\n 'timeEnd',\n 'timeLog',\n 'trace',\n 'warn',\n]\n // biome-ignore lint/suspicious/noExplicitAny: Dynamic console method access.\n .filter(n => typeof (globalConsole as any)[n] === 'function')\n // biome-ignore lint/suspicious/noExplicitAny: Dynamic console method access.\n .map(n => [n, (globalConsole as any)[n].bind(globalConsole)])\n\nconst consolePropAttributes = {\n __proto__: null,\n writable: true,\n enumerable: false,\n configurable: true,\n}\nconst maxIndentation = 1000\nconst privateConsole = new WeakMap()\n\nconst consoleSymbols = Object.getOwnPropertySymbols(globalConsole)\nexport const incLogCallCountSymbol = Symbol.for('logger.logCallCount++')\nconst kGroupIndentationWidthSymbol =\n // biome-ignore lint/suspicious/noExplicitAny: Symbol property access.\n consoleSymbols.find(s => (s as any).label === 'kGroupIndentWidth') ??\n Symbol('kGroupIndentWidth')\nexport const lastWasBlankSymbol = Symbol.for('logger.lastWasBlank')\n\n/**\n * Custom Logger class that wraps console with additional features.\n * Supports indentation, symbols, and blank line tracking.\n */\n/*@__PURE__*/\nexport class Logger {\n static LOG_SYMBOLS = LOG_SYMBOLS\n\n #parent?: Logger\n #boundStream?: 'stderr' | 'stdout'\n #stderrLogger?: Logger\n #stdoutLogger?: Logger\n #stderrIndention = ''\n #stdoutIndention = ''\n #lastWasBlank = false\n #logCallCount = 0\n #constructorArgs: unknown[]\n #options: Record<string, unknown>\n\n constructor(...args: unknown[]) {\n // Store constructor args for child loggers\n this.#constructorArgs = args\n\n // Store options if provided (for future extensibility)\n const options = args['0']\n if (typeof options === 'object' && options !== null) {\n this.#options = { __proto__: null, ...options }\n } else {\n this.#options = { __proto__: null }\n }\n\n if (args.length) {\n privateConsole.set(this, constructConsole(...args))\n } else {\n // Create a new console that acts like the builtin one so that it will\n // work with Node's --frozen-intrinsics flag.\n const con = constructConsole({\n stdout: process.stdout,\n stderr: process.stderr,\n }) as typeof console & Record<string, unknown>\n for (const { 0: key, 1: method } of boundConsoleEntries) {\n con[key] = method\n }\n privateConsole.set(this, con)\n }\n }\n\n /**\n * Get a logger instance bound to stderr.\n * All operations on this instance will use stderr.\n */\n get stderr(): Logger {\n if (!this.#stderrLogger) {\n // Pass parent's constructor args to maintain config\n const instance = new Logger(...this.#constructorArgs)\n instance.#parent = this\n instance.#boundStream = 'stderr'\n instance.#options = { __proto__: null, ...this.#options }\n this.#stderrLogger = instance\n }\n return this.#stderrLogger\n }\n\n /**\n * Get a logger instance bound to stdout.\n * All operations on this instance will use stdout.\n */\n get stdout(): Logger {\n if (!this.#stdoutLogger) {\n // Pass parent's constructor args to maintain config\n const instance = new Logger(...this.#constructorArgs)\n instance.#parent = this\n instance.#boundStream = 'stdout'\n instance.#options = { __proto__: null, ...this.#options }\n this.#stdoutLogger = instance\n }\n return this.#stdoutLogger\n }\n\n /**\n * Get the root logger (for accessing shared indentation state).\n * @private\n */\n #getRoot(): Logger {\n return this.#parent || this\n }\n\n /**\n * Get indentation for a specific stream.\n * @private\n */\n #getIndent(stream: 'stderr' | 'stdout'): string {\n const root = this.#getRoot()\n return stream === 'stderr' ? root.#stderrIndention : root.#stdoutIndention\n }\n\n /**\n * Set indentation for a specific stream.\n * @private\n */\n #setIndent(stream: 'stderr' | 'stdout', value: string): void {\n const root = this.#getRoot()\n if (stream === 'stderr') {\n root.#stderrIndention = value\n } else {\n root.#stdoutIndention = value\n }\n }\n\n /**\n * Get the target stream for this logger instance.\n * @private\n */\n #getTargetStream(): 'stderr' | 'stdout' {\n return this.#boundStream || 'stderr'\n }\n\n /**\n * Apply a console method with indentation.\n * @private\n */\n #apply(\n methodName: string,\n args: unknown[],\n stream?: 'stderr' | 'stdout',\n ): this {\n const con = privateConsole.get(this) as typeof console &\n Record<string, unknown>\n const text = args.at(0)\n const hasText = typeof text === 'string'\n // Determine which stream this method writes to\n const targetStream = stream || (methodName === 'log' ? 'stdout' : 'stderr')\n const indent = this.#getIndent(targetStream)\n const logArgs = hasText\n ? [applyLinePrefix(text, { prefix: indent }), ...args.slice(1)]\n : args\n ReflectApply(\n con[methodName] as (...args: unknown[]) => unknown,\n con,\n logArgs,\n )\n this[lastWasBlankSymbol](hasText && isBlankString(logArgs[0]))\n // biome-ignore lint/suspicious/noExplicitAny: Symbol method access.\n ;(this as any)[incLogCallCountSymbol]()\n return this\n }\n\n /**\n * Strip log symbols from the start of text.\n * @private\n */\n #stripSymbols(text: string): string {\n // Strip both unicode and emoji forms of log symbols from the start.\n // Matches: \u2716, \u2717, \u00D7, \u2716\uFE0F, \u26A0, \u203C, \u26A0\uFE0F, \u2714, \u2713, \u221A, \u2714\uFE0F, \u2713\uFE0F, \u2139, \u2139\uFE0F\n // Also handles variation selectors (U+FE0F) and whitespace after symbol.\n // Note: We don't strip standalone 'i' to avoid breaking words like 'info'.\n return text.replace(/^[\u2716\u2717\u00D7\u26A0\u203C\u2714\u2713\u221A\u2139]\\uFE0F?\\s*/u, '')\n }\n\n /**\n * Apply a method with a symbol prefix.\n * @private\n */\n #symbolApply(symbolType: string, args: unknown[]): this {\n const con = privateConsole.get(this)\n let text = args.at(0)\n // biome-ignore lint/suspicious/noImplicitAnyLet: Flexible argument handling.\n let extras\n if (typeof text === 'string') {\n text = this.#stripSymbols(text)\n extras = args.slice(1)\n } else {\n extras = args\n text = ''\n }\n // Note: Meta status messages (info/fail/etc) always go to stderr.\n const indent = this.#getIndent('stderr')\n con.error(\n applyLinePrefix(`${LOG_SYMBOLS[symbolType]} ${text}`, {\n prefix: indent,\n }),\n ...extras,\n )\n this.#lastWasBlank = false\n // biome-ignore lint/suspicious/noExplicitAny: Symbol method access.\n ;(this as any)[incLogCallCountSymbol]()\n return this\n }\n\n /**\n * Get the current log call count.\n */\n get logCallCount() {\n return this.#logCallCount\n }\n\n /**\n * Increment the log call count.\n */\n [incLogCallCountSymbol]() {\n this.#logCallCount += 1\n return this\n }\n\n /**\n * Set whether the last logged line was blank.\n */\n [lastWasBlankSymbol](value: unknown): this {\n this.#lastWasBlank = !!value\n return this\n }\n\n /**\n * Log an assertion.\n */\n assert(value: unknown, ...message: unknown[]): this {\n const con = privateConsole.get(this)\n con.assert(value, ...message)\n this[lastWasBlankSymbol](false)\n return value ? this : this[incLogCallCountSymbol]()\n }\n\n /**\n * Clear the visible terminal screen.\n * Only available on the main logger instance.\n */\n clearVisible() {\n if (this.#boundStream) {\n throw new Error(\n 'clearVisible() is only available on the main logger instance, not on stream-bound instances',\n )\n }\n const con = privateConsole.get(this)\n con.clear()\n // biome-ignore lint/suspicious/noExplicitAny: Internal console property access.\n if ((con as any)._stdout.isTTY) {\n // biome-ignore lint/suspicious/noExplicitAny: Symbol method access.\n ;(this as any)[lastWasBlankSymbol](true)\n this.#logCallCount = 0\n }\n return this\n }\n\n /**\n * Log a count for the given label.\n */\n count(label?: string): this {\n const con = privateConsole.get(this)\n con.count(label)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * Create a task with a given name.\n */\n createTask(name: string): Task {\n return {\n run: <T>(f: () => T): T => {\n this.log(`Starting task: ${name}`)\n const result = f()\n this.log(`Completed task: ${name}`)\n return result\n },\n }\n }\n\n /**\n * Decrease indentation level.\n * If called on main logger, affects both streams.\n * If called on stream-bound logger, affects only that stream.\n */\n dedent(spaces = 2) {\n if (this.#boundStream) {\n // Only affect bound stream\n const current = this.#getIndent(this.#boundStream)\n this.#setIndent(this.#boundStream, current.slice(0, -spaces))\n } else {\n // Affect both streams\n const stderrCurrent = this.#getIndent('stderr')\n const stdoutCurrent = this.#getIndent('stdout')\n this.#setIndent('stderr', stderrCurrent.slice(0, -spaces))\n this.#setIndent('stdout', stdoutCurrent.slice(0, -spaces))\n }\n return this\n }\n\n /**\n * Display an object's properties.\n */\n dir(obj: unknown, options?: unknown): this {\n const con = privateConsole.get(this)\n con.dir(obj, options)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * Display data as XML.\n */\n dirxml(...data: unknown[]): this {\n const con = privateConsole.get(this)\n con.dirxml(data)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * Log an error message.\n */\n error(...args: unknown[]): this {\n return this.#apply('error', args)\n }\n\n /**\n * Log a newline to stderr if last line wasn't blank.\n */\n errorNewline() {\n return this.#lastWasBlank ? this : this.error('')\n }\n\n /**\n * Log a failure message with symbol.\n */\n fail(...args: unknown[]): this {\n return this.#symbolApply('fail', args)\n }\n\n /**\n * Start a new log group.\n */\n group(...label: unknown[]): this {\n const { length } = label\n if (length) {\n ReflectApply(this.log, this, label)\n }\n // biome-ignore lint/suspicious/noExplicitAny: Symbol property access.\n this.indent((this as any)[kGroupIndentationWidthSymbol])\n if (length) {\n // biome-ignore lint/suspicious/noExplicitAny: Symbol method access.\n ;(this as any)[lastWasBlankSymbol](false)\n // biome-ignore lint/suspicious/noExplicitAny: Symbol method access.\n ;(this as any)[incLogCallCountSymbol]()\n }\n return this\n }\n\n /**\n * Start a new collapsed log group (alias for group).\n */\n // groupCollapsed is an alias of group.\n // https://nodejs.org/api/console.html#consolegroupcollapsed\n groupCollapsed(...label: unknown[]): this {\n return ReflectApply(this.group, this, label)\n }\n\n /**\n * End the current log group.\n */\n groupEnd() {\n // biome-ignore lint/suspicious/noExplicitAny: Symbol property access.\n this.dedent((this as any)[kGroupIndentationWidthSymbol])\n return this\n }\n\n /**\n * Increase indentation level.\n * If called on main logger, affects both streams.\n * If called on stream-bound logger, affects only that stream.\n */\n indent(spaces = 2) {\n const spacesToAdd = ' '.repeat(Math.min(spaces, maxIndentation))\n if (this.#boundStream) {\n // Only affect bound stream\n const current = this.#getIndent(this.#boundStream)\n this.#setIndent(this.#boundStream, current + spacesToAdd)\n } else {\n // Affect both streams\n const stderrCurrent = this.#getIndent('stderr')\n const stdoutCurrent = this.#getIndent('stdout')\n this.#setIndent('stderr', stderrCurrent + spacesToAdd)\n this.#setIndent('stdout', stdoutCurrent + spacesToAdd)\n }\n return this\n }\n\n /**\n * Log an info message with symbol.\n */\n info(...args: unknown[]): this {\n return this.#symbolApply('info', args)\n }\n\n /**\n * Log a message.\n */\n log(...args: unknown[]): this {\n return this.#apply('log', args)\n }\n\n /**\n * Log a newline to stdout if last line wasn't blank.\n */\n logNewline() {\n return this.#lastWasBlank ? this : this.log('')\n }\n\n /**\n * Reset indentation to zero.\n * If called on main logger, resets both streams.\n * If called on stream-bound logger, resets only that stream.\n */\n resetIndent() {\n if (this.#boundStream) {\n // Only reset bound stream\n this.#setIndent(this.#boundStream, '')\n } else {\n // Reset both streams\n this.#setIndent('stderr', '')\n this.#setIndent('stdout', '')\n }\n return this\n }\n\n /**\n * Log a main step with blank line before (stateless).\n */\n step(msg: string, ...extras: unknown[]): this {\n // Add blank line before the step message.\n if (!this.#lastWasBlank) {\n // Use this.log() to properly track the blank line.\n this.log('')\n }\n // Let log() handle all tracking.\n return this.log(msg, ...extras)\n }\n\n /**\n * Log an indented substep (stateless).\n */\n substep(msg: string, ...extras: unknown[]): this {\n // Add 2-space indent to the message.\n const indentedMsg = ` ${msg}`\n // Let log() handle all tracking.\n return this.log(indentedMsg, ...extras)\n }\n\n /**\n * Log a success message with symbol.\n */\n success(...args: unknown[]): this {\n return this.#symbolApply('success', args)\n }\n\n /**\n * Log a done message (alias for success).\n * Does NOT auto-clear. Call clearLine() first if needed after progress().\n */\n done(...args: unknown[]): this {\n return this.#symbolApply('success', args)\n }\n\n /**\n * Display data in a table format.\n */\n table(tabularData: unknown, properties?: readonly string[]): this {\n const con = privateConsole.get(this)\n con.table(tabularData, properties)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * End a timer and log the elapsed time.\n */\n timeEnd(label?: string): this {\n const con = privateConsole.get(this)\n con.timeEnd(label)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * Log the current timer value.\n */\n timeLog(label?: string, ...data: unknown[]): this {\n const con = privateConsole.get(this)\n con.timeLog(label, ...data)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * Log a stack trace.\n */\n trace(message?: unknown, ...args: unknown[]): this {\n const con = privateConsole.get(this)\n con.trace(message, ...args)\n this[lastWasBlankSymbol](false)\n return this[incLogCallCountSymbol]()\n }\n\n /**\n * Log a warning message with symbol.\n */\n warn(...args: unknown[]): this {\n return this.#symbolApply('warn', args)\n }\n\n /**\n * Write to stdout without a newline or indentation.\n */\n write(text: string): this {\n const con = privateConsole.get(this)\n con._stdout.write(text)\n this[lastWasBlankSymbol](false)\n return this\n }\n\n /**\n * Show a progress indicator (can be cleared with clearLine).\n * Simple status message without spinner animation.\n */\n progress(text: string): this {\n const con = privateConsole.get(this)\n const stream = this.#getTargetStream()\n const streamObj = stream === 'stderr' ? con._stderr : con._stdout\n streamObj.write(`\u2234 ${text}`)\n this[lastWasBlankSymbol](false)\n return this\n }\n\n /**\n * Clear the current line.\n */\n clearLine(): this {\n const con = privateConsole.get(this)\n const stream = this.#getTargetStream()\n const streamObj = stream === 'stderr' ? con._stderr : con._stdout\n if (streamObj.isTTY) {\n streamObj.cursorTo(0)\n streamObj.clearLine(0)\n } else {\n streamObj.write('\\r\\x1b[K')\n }\n return this\n }\n}\n\nObject.defineProperties(\n Logger.prototype,\n Object.fromEntries(\n (() => {\n const entries: Array<[string | symbol, PropertyDescriptor]> = [\n [\n kGroupIndentationWidthSymbol,\n {\n ...consolePropAttributes,\n value: 2,\n },\n ],\n [\n Symbol.toStringTag,\n {\n __proto__: null,\n configurable: true,\n value: 'logger',\n } as PropertyDescriptor,\n ],\n ]\n for (const { 0: key, 1: value } of Object.entries(globalConsole)) {\n // biome-ignore lint/suspicious/noExplicitAny: Dynamic prototype check.\n if (!(Logger.prototype as any)[key] && typeof value === 'function') {\n // Dynamically name the log method without using Object.defineProperty.\n const { [key]: func } = {\n [key](...args: unknown[]) {\n const con = privateConsole.get(this)\n // biome-ignore lint/suspicious/noExplicitAny: Dynamic console method access.\n const result = (con as any)[key](...args)\n return result === undefined || result === con ? this : result\n },\n }\n entries.push([\n key,\n {\n ...consolePropAttributes,\n value: func,\n },\n ])\n }\n }\n return entries\n })(),\n ),\n)\n\nexport const logger = new Logger()\n"],
5
+ "mappings": "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",
6
+ "names": ["yoctocolorsCjs", "isUnicodeSupported"]
7
+ }
@@ -0,0 +1,7 @@
1
+ declare const _default: readonly string[] & {
2
+ current: string;
3
+ last: string;
4
+ next: string;
5
+ previous: string;
6
+ };
7
+ export default _default;
@@ -0,0 +1,37 @@
1
+ /* Socket Lib - Built with esbuild */
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var maintained_node_versions_exports = {};
20
+ __export(maintained_node_versions_exports, {
21
+ default: () => maintained_node_versions_default
22
+ });
23
+ module.exports = __toCommonJS(maintained_node_versions_exports);
24
+ const ObjectFreeze = Object.freeze;
25
+ const next = "25.0.0";
26
+ const current = "22.20.0";
27
+ const previous = "20.19.5";
28
+ const last = "18.20.8";
29
+ var maintained_node_versions_default = ObjectFreeze(
30
+ Object.assign([last, previous, current, next], {
31
+ current,
32
+ last,
33
+ next,
34
+ previous
35
+ })
36
+ );
37
+ //# sourceMappingURL=maintained-node-versions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/maintained-node-versions.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview Maintained Node.js versions without external dependencies.\n */\n\n// IMPORTANT: Do not use destructuring here - use direct assignment instead.\n// tsgo has a bug that incorrectly transpiles destructured exports, resulting in\n// `exports.SomeName = void 0;` which causes runtime errors.\n// See: https://github.com/SocketDev/socket-packageurl-js/issues/3\nconst ObjectFreeze = Object.freeze\n\n// Manually maintained Node.js version list.\n// https://nodejs.org/en/about/previous-releases#looking-for-latest-release-of-a-version-branch\n//\n// Updated October 16th, 2025.\n// - v25: 25.0.0 (Current)\n// - v24: 24.10.0 (Current)\n// - v22: 22.20.0 (Active LTS)\n// - v20: 20.19.5 (Maintenance LTS)\n// - v18: 18.20.8 (End-of-life)\nconst next = '25.0.0'\nconst current = '22.20.0'\nconst previous = '20.19.5'\nconst last = '18.20.8'\n\nexport default ObjectFreeze(\n Object.assign([last, previous, current, next], {\n current,\n last,\n next,\n previous,\n }),\n) as readonly string[] & {\n current: string\n last: string\n next: string\n previous: string\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,MAAM,eAAe,OAAO;AAW5B,MAAM,OAAO;AACb,MAAM,UAAU;AAChB,MAAM,WAAW;AACjB,MAAM,OAAO;AAEb,IAAO,mCAAQ;AAAA,EACb,OAAO,OAAO,CAAC,MAAM,UAAU,SAAS,IAAI,GAAG;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Options for memoization behavior.
3
+ */
4
+ type MemoizeOptions<Args extends unknown[], _Result = unknown> = {
5
+ /** Custom cache key generator (defaults to JSON.stringify) */
6
+ keyGen?: (...args: Args) => string;
7
+ /** Maximum cache size (LRU eviction when exceeded) */
8
+ maxSize?: number;
9
+ /** TTL in milliseconds (cache entries expire after this time) */
10
+ ttl?: number;
11
+ /** Cache name for debugging */
12
+ name?: string;
13
+ /** Weak cache for object keys (enables GC) */
14
+ weak?: boolean;
15
+ /** Custom equality check for cache hits */
16
+ equals?: (a: Args, b: Args) => boolean;
17
+ };
18
+ /**
19
+ * Memoize a function with configurable caching behavior.
20
+ * Caches function results to avoid repeated computation.
21
+ *
22
+ * @param fn - Function to memoize
23
+ * @param options - Memoization options
24
+ * @returns Memoized version of the function
25
+ *
26
+ * @example
27
+ * import { memoize } from '@socketsecurity/registry/lib/memoization'
28
+ *
29
+ * const expensiveOperation = memoize((n: number) => {
30
+ * // Heavy computation
31
+ * return Array(n).fill(0).reduce((a, _, i) => a + i, 0)
32
+ * }, { maxSize: 100, ttl: 60000, name: 'sum' })
33
+ *
34
+ * expensiveOperation(1000) // Computed
35
+ * expensiveOperation(1000) // Cached
36
+ */
37
+ export declare function memoize<Args extends unknown[], Result>(fn: (...args: Args) => Result, options?: MemoizeOptions<Args, Result>): (...args: Args) => Result;
38
+ /**
39
+ * Memoize an async function.
40
+ * Similar to memoize() but handles promises properly.
41
+ *
42
+ * @param fn - Async function to memoize
43
+ * @param options - Memoization options
44
+ * @returns Memoized version of the async function
45
+ *
46
+ * @example
47
+ * import { memoizeAsync } from '@socketsecurity/registry/lib/memoization'
48
+ *
49
+ * const fetchUser = memoizeAsync(async (id: string) => {
50
+ * const response = await fetch(`/api/users/${id}`)
51
+ * return response.json()
52
+ * }, { ttl: 300000, name: 'fetchUser' })
53
+ *
54
+ * await fetchUser('123') // Fetches from API
55
+ * await fetchUser('123') // Returns cached result
56
+ */
57
+ export declare function memoizeAsync<Args extends unknown[], Result>(fn: (...args: Args) => Promise<Result>, options?: MemoizeOptions<Args, Result>): (...args: Args) => Promise<Result>;
58
+ /**
59
+ * Create a memoized version of a method.
60
+ * Preserves 'this' context for class methods.
61
+ *
62
+ * @param target - Object containing the method
63
+ * @param propertyKey - Method name
64
+ * @param descriptor - Property descriptor
65
+ * @returns Modified descriptor with memoized method
66
+ *
67
+ * @example
68
+ * import { Memoize } from '@socketsecurity/registry/lib/memoization'
69
+ *
70
+ * class Calculator {
71
+ * @Memoize()
72
+ * fibonacci(n: number): number {
73
+ * if (n <= 1) return n
74
+ * return this.fibonacci(n - 1) + this.fibonacci(n - 2)
75
+ * }
76
+ * }
77
+ */
78
+ export declare function Memoize(options?: MemoizeOptions<unknown[], unknown>): (_target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
79
+ /**
80
+ * Clear all memoization caches.
81
+ * Useful for testing or when you need to force recomputation.
82
+ */
83
+ export declare function clearAllMemoizationCaches(): void;
84
+ /**
85
+ * Memoize with WeakMap for object keys.
86
+ * Allows garbage collection when objects are no longer referenced.
87
+ * Only works when first argument is an object.
88
+ *
89
+ * @param fn - Function to memoize
90
+ * @returns Memoized version using WeakMap
91
+ *
92
+ * @example
93
+ * import { memoizeWeak } from '@socketsecurity/registry/lib/memoization'
94
+ *
95
+ * const processConfig = memoizeWeak((config: Config) => {
96
+ * return expensiveTransform(config)
97
+ * })
98
+ *
99
+ * processConfig(config1) // Computed
100
+ * processConfig(config1) // Cached
101
+ * // When config1 is no longer referenced, cache entry is GC'd
102
+ */
103
+ export declare function memoizeWeak<K extends object, Result>(fn: (key: K) => Result): (key: K) => Result;
104
+ /**
105
+ * Simple once() implementation - caches single result forever.
106
+ * Useful for initialization functions that should only run once.
107
+ *
108
+ * @param fn - Function to run once
109
+ * @returns Memoized version that only executes once
110
+ *
111
+ * @example
112
+ * import { once } from '@socketsecurity/registry/lib/memoization'
113
+ *
114
+ * const initialize = once(() => {
115
+ * console.log('Initializing…')
116
+ * return loadConfig()
117
+ * })
118
+ *
119
+ * initialize() // Logs "Initializing…" and returns config
120
+ * initialize() // Returns cached config (no log)
121
+ */
122
+ export declare function once<Result>(fn: () => Result): () => Result;
123
+ /**
124
+ * Create a debounced memoized function.
125
+ * Combines memoization with debouncing for expensive operations.
126
+ *
127
+ * @param fn - Function to memoize and debounce
128
+ * @param wait - Debounce wait time in milliseconds
129
+ * @param options - Memoization options
130
+ * @returns Debounced memoized function
131
+ *
132
+ * @example
133
+ * import { memoizeDebounced } from '@socketsecurity/registry/lib/memoization'
134
+ *
135
+ * const search = memoizeDebounced(
136
+ * (query: string) => performSearch(query),
137
+ * 300,
138
+ * { name: 'search' }
139
+ * )
140
+ */
141
+ export declare function memoizeDebounced<Args extends unknown[], Result>(fn: (...args: Args) => Result, wait: number, options?: MemoizeOptions<Args, Result>): (...args: Args) => Result;
142
+ export {};
@@ -0,0 +1,212 @@
1
+ /* Socket Lib - Built with esbuild */
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var memoization_exports = {};
20
+ __export(memoization_exports, {
21
+ Memoize: () => Memoize,
22
+ clearAllMemoizationCaches: () => clearAllMemoizationCaches,
23
+ memoize: () => memoize,
24
+ memoizeAsync: () => memoizeAsync,
25
+ memoizeDebounced: () => memoizeDebounced,
26
+ memoizeWeak: () => memoizeWeak,
27
+ once: () => once
28
+ });
29
+ module.exports = __toCommonJS(memoization_exports);
30
+ var import_debug = require("./debug");
31
+ function memoize(fn, options = {}) {
32
+ const {
33
+ keyGen = (...args) => JSON.stringify(args),
34
+ maxSize = Number.POSITIVE_INFINITY,
35
+ name = fn.name || "anonymous",
36
+ ttl = Number.POSITIVE_INFINITY
37
+ } = options;
38
+ const cache = /* @__PURE__ */ new Map();
39
+ const accessOrder = [];
40
+ function evictLRU() {
41
+ if (cache.size >= maxSize && accessOrder.length > 0) {
42
+ const oldest = accessOrder.shift();
43
+ if (oldest) {
44
+ cache.delete(oldest);
45
+ (0, import_debug.debugLog)(`[memoize:${name}] clear`, {
46
+ key: oldest,
47
+ reason: "LRU"
48
+ });
49
+ }
50
+ }
51
+ }
52
+ function isExpired(entry) {
53
+ if (ttl === Number.POSITIVE_INFINITY) {
54
+ return false;
55
+ }
56
+ return Date.now() - entry.timestamp > ttl;
57
+ }
58
+ return function memoized(...args) {
59
+ const key = keyGen(...args);
60
+ const cached = cache.get(key);
61
+ if (cached && !isExpired(cached)) {
62
+ cached.hits++;
63
+ const index = accessOrder.indexOf(key);
64
+ if (index !== -1) {
65
+ accessOrder.splice(index, 1);
66
+ }
67
+ accessOrder.push(key);
68
+ (0, import_debug.debugLog)(`[memoize:${name}] hit`, { key, hits: cached.hits });
69
+ return cached.value;
70
+ }
71
+ (0, import_debug.debugLog)(`[memoize:${name}] miss`, { key });
72
+ const value = fn(...args);
73
+ evictLRU();
74
+ cache.set(key, {
75
+ value,
76
+ timestamp: Date.now(),
77
+ hits: 0
78
+ });
79
+ accessOrder.push(key);
80
+ (0, import_debug.debugLog)(`[memoize:${name}] set`, { key, cacheSize: cache.size });
81
+ return value;
82
+ };
83
+ }
84
+ function memoizeAsync(fn, options = {}) {
85
+ const {
86
+ keyGen = (...args) => JSON.stringify(args),
87
+ maxSize = Number.POSITIVE_INFINITY,
88
+ name = fn.name || "anonymous",
89
+ ttl = Number.POSITIVE_INFINITY
90
+ } = options;
91
+ const cache = /* @__PURE__ */ new Map();
92
+ const accessOrder = [];
93
+ function evictLRU() {
94
+ if (cache.size >= maxSize && accessOrder.length > 0) {
95
+ const oldest = accessOrder.shift();
96
+ if (oldest) {
97
+ cache.delete(oldest);
98
+ (0, import_debug.debugLog)(`[memoizeAsync:${name}] clear`, {
99
+ key: oldest,
100
+ reason: "LRU"
101
+ });
102
+ }
103
+ }
104
+ }
105
+ function isExpired(entry) {
106
+ if (ttl === Number.POSITIVE_INFINITY) {
107
+ return false;
108
+ }
109
+ return Date.now() - entry.timestamp > ttl;
110
+ }
111
+ return async function memoized(...args) {
112
+ const key = keyGen(...args);
113
+ const cached = cache.get(key);
114
+ if (cached && !isExpired(cached)) {
115
+ cached.hits++;
116
+ const index = accessOrder.indexOf(key);
117
+ if (index !== -1) {
118
+ accessOrder.splice(index, 1);
119
+ }
120
+ accessOrder.push(key);
121
+ (0, import_debug.debugLog)(`[memoizeAsync:${name}] hit`, { key, hits: cached.hits });
122
+ return await cached.value;
123
+ }
124
+ (0, import_debug.debugLog)(`[memoizeAsync:${name}] miss`, { key });
125
+ const promise = fn(...args);
126
+ evictLRU();
127
+ cache.set(key, {
128
+ value: promise,
129
+ timestamp: Date.now(),
130
+ hits: 0
131
+ });
132
+ accessOrder.push(key);
133
+ (0, import_debug.debugLog)(`[memoizeAsync:${name}] set`, { key, cacheSize: cache.size });
134
+ try {
135
+ const result = await promise;
136
+ return result;
137
+ } catch (e) {
138
+ cache.delete(key);
139
+ const orderIndex = accessOrder.indexOf(key);
140
+ if (orderIndex !== -1) {
141
+ accessOrder.splice(orderIndex, 1);
142
+ }
143
+ (0, import_debug.debugLog)(`[memoizeAsync:${name}] clear`, { key, reason: "error" });
144
+ throw e;
145
+ }
146
+ };
147
+ }
148
+ function Memoize(options = {}) {
149
+ return (_target, propertyKey, descriptor) => {
150
+ const originalMethod = descriptor.value;
151
+ descriptor.value = memoize(originalMethod, {
152
+ ...options,
153
+ name: options.name || propertyKey
154
+ });
155
+ return descriptor;
156
+ };
157
+ }
158
+ function clearAllMemoizationCaches() {
159
+ (0, import_debug.debugLog)("[memoize:all] clear", { action: "clear-all-caches" });
160
+ }
161
+ function memoizeWeak(fn) {
162
+ const cache = /* @__PURE__ */ new WeakMap();
163
+ return function memoized(key) {
164
+ const cached = cache.get(key);
165
+ if (cached !== void 0) {
166
+ (0, import_debug.debugLog)(`[memoizeWeak:${fn.name}] hit`);
167
+ return cached;
168
+ }
169
+ (0, import_debug.debugLog)(`[memoizeWeak:${fn.name}] miss`);
170
+ const result = fn(key);
171
+ cache.set(key, result);
172
+ return result;
173
+ };
174
+ }
175
+ function once(fn) {
176
+ let called = false;
177
+ let result;
178
+ return function memoized() {
179
+ if (!called) {
180
+ result = fn();
181
+ called = true;
182
+ (0, import_debug.debugLog)(`[once:${fn.name}] set`);
183
+ } else {
184
+ (0, import_debug.debugLog)(`[once:${fn.name}] hit`);
185
+ }
186
+ return result;
187
+ };
188
+ }
189
+ function memoizeDebounced(fn, wait, options = {}) {
190
+ const memoized = memoize(fn, options);
191
+ let timeoutId;
192
+ return function debounced(...args) {
193
+ if (timeoutId) {
194
+ clearTimeout(timeoutId);
195
+ }
196
+ timeoutId = setTimeout(() => {
197
+ memoized(...args);
198
+ }, wait);
199
+ return memoized(...args);
200
+ };
201
+ }
202
+ // Annotate the CommonJS export names for ESM import in node:
203
+ 0 && (module.exports = {
204
+ Memoize,
205
+ clearAllMemoizationCaches,
206
+ memoize,
207
+ memoizeAsync,
208
+ memoizeDebounced,
209
+ memoizeWeak,
210
+ once
211
+ });
212
+ //# sourceMappingURL=memoization.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/memoization.ts"],
4
+ "sourcesContent": ["/**\n * @fileoverview Memoization utilities for caching function results.\n * Provides function result caching to optimize repeated computations and expensive operations.\n */\n\nimport { debugLog } from './debug'\n\n/**\n * Options for memoization behavior.\n */\ntype MemoizeOptions<Args extends unknown[], _Result = unknown> = {\n /** Custom cache key generator (defaults to JSON.stringify) */\n keyGen?: (...args: Args) => string\n /** Maximum cache size (LRU eviction when exceeded) */\n maxSize?: number\n /** TTL in milliseconds (cache entries expire after this time) */\n ttl?: number\n /** Cache name for debugging */\n name?: string\n /** Weak cache for object keys (enables GC) */\n weak?: boolean\n /** Custom equality check for cache hits */\n equals?: (a: Args, b: Args) => boolean\n}\n\n/**\n * Cache entry with metadata.\n */\ntype CacheEntry<T> = {\n value: T\n timestamp: number\n hits: number\n}\n\n/**\n * Memoize a function with configurable caching behavior.\n * Caches function results to avoid repeated computation.\n *\n * @param fn - Function to memoize\n * @param options - Memoization options\n * @returns Memoized version of the function\n *\n * @example\n * import { memoize } from '@socketsecurity/registry/lib/memoization'\n *\n * const expensiveOperation = memoize((n: number) => {\n * // Heavy computation\n * return Array(n).fill(0).reduce((a, _, i) => a + i, 0)\n * }, { maxSize: 100, ttl: 60000, name: 'sum' })\n *\n * expensiveOperation(1000) // Computed\n * expensiveOperation(1000) // Cached\n */\nexport function memoize<Args extends unknown[], Result>(\n fn: (...args: Args) => Result,\n options: MemoizeOptions<Args, Result> = {},\n): (...args: Args) => Result {\n const {\n keyGen = (...args) => JSON.stringify(args),\n maxSize = Number.POSITIVE_INFINITY,\n name = fn.name || 'anonymous',\n ttl = Number.POSITIVE_INFINITY,\n } = options\n\n const cache = new Map<string, CacheEntry<Result>>()\n const accessOrder: string[] = []\n\n function evictLRU(): void {\n if (cache.size >= maxSize && accessOrder.length > 0) {\n const oldest = accessOrder.shift()\n if (oldest) {\n cache.delete(oldest)\n debugLog(`[memoize:${name}] clear`, {\n key: oldest,\n reason: 'LRU',\n })\n }\n }\n }\n\n function isExpired(entry: CacheEntry<Result>): boolean {\n if (ttl === Number.POSITIVE_INFINITY) {\n return false\n }\n return Date.now() - entry.timestamp > ttl\n }\n\n return function memoized(...args: Args): Result {\n const key = keyGen(...args)\n\n // Check cache\n const cached = cache.get(key)\n if (cached && !isExpired(cached)) {\n cached.hits++\n // Move to end of access order (LRU)\n const index = accessOrder.indexOf(key)\n if (index !== -1) {\n accessOrder.splice(index, 1)\n }\n accessOrder.push(key)\n\n debugLog(`[memoize:${name}] hit`, { key, hits: cached.hits })\n return cached.value\n }\n\n // Cache miss - compute value\n debugLog(`[memoize:${name}] miss`, { key })\n const value = fn(...args)\n\n // Store in cache\n evictLRU()\n cache.set(key, {\n value,\n timestamp: Date.now(),\n hits: 0,\n })\n accessOrder.push(key)\n\n debugLog(`[memoize:${name}] set`, { key, cacheSize: cache.size })\n return value\n }\n}\n\n/**\n * Memoize an async function.\n * Similar to memoize() but handles promises properly.\n *\n * @param fn - Async function to memoize\n * @param options - Memoization options\n * @returns Memoized version of the async function\n *\n * @example\n * import { memoizeAsync } from '@socketsecurity/registry/lib/memoization'\n *\n * const fetchUser = memoizeAsync(async (id: string) => {\n * const response = await fetch(`/api/users/${id}`)\n * return response.json()\n * }, { ttl: 300000, name: 'fetchUser' })\n *\n * await fetchUser('123') // Fetches from API\n * await fetchUser('123') // Returns cached result\n */\nexport function memoizeAsync<Args extends unknown[], Result>(\n fn: (...args: Args) => Promise<Result>,\n options: MemoizeOptions<Args, Result> = {},\n): (...args: Args) => Promise<Result> {\n const {\n keyGen = (...args) => JSON.stringify(args),\n maxSize = Number.POSITIVE_INFINITY,\n name = fn.name || 'anonymous',\n ttl = Number.POSITIVE_INFINITY,\n } = options\n\n const cache = new Map<string, CacheEntry<Promise<Result>>>()\n const accessOrder: string[] = []\n\n function evictLRU(): void {\n if (cache.size >= maxSize && accessOrder.length > 0) {\n const oldest = accessOrder.shift()\n if (oldest) {\n cache.delete(oldest)\n debugLog(`[memoizeAsync:${name}] clear`, {\n key: oldest,\n reason: 'LRU',\n })\n }\n }\n }\n\n function isExpired(entry: CacheEntry<Promise<Result>>): boolean {\n if (ttl === Number.POSITIVE_INFINITY) {\n return false\n }\n return Date.now() - entry.timestamp > ttl\n }\n\n return async function memoized(...args: Args): Promise<Result> {\n const key = keyGen(...args)\n\n // Check cache\n const cached = cache.get(key)\n if (cached && !isExpired(cached)) {\n cached.hits++\n // Move to end of access order (LRU)\n const index = accessOrder.indexOf(key)\n if (index !== -1) {\n accessOrder.splice(index, 1)\n }\n accessOrder.push(key)\n\n debugLog(`[memoizeAsync:${name}] hit`, { key, hits: cached.hits })\n return await cached.value\n }\n\n // Cache miss - compute value\n debugLog(`[memoizeAsync:${name}] miss`, { key })\n const promise = fn(...args)\n\n // Store promise in cache (handles concurrent calls)\n evictLRU()\n cache.set(key, {\n value: promise,\n timestamp: Date.now(),\n hits: 0,\n })\n accessOrder.push(key)\n\n debugLog(`[memoizeAsync:${name}] set`, { key, cacheSize: cache.size })\n\n try {\n const result = await promise\n return result\n } catch (e) {\n // Remove failed promise from cache\n cache.delete(key)\n const orderIndex = accessOrder.indexOf(key)\n if (orderIndex !== -1) {\n accessOrder.splice(orderIndex, 1)\n }\n debugLog(`[memoizeAsync:${name}] clear`, { key, reason: 'error' })\n throw e\n }\n }\n}\n\n/**\n * Create a memoized version of a method.\n * Preserves 'this' context for class methods.\n *\n * @param target - Object containing the method\n * @param propertyKey - Method name\n * @param descriptor - Property descriptor\n * @returns Modified descriptor with memoized method\n *\n * @example\n * import { Memoize } from '@socketsecurity/registry/lib/memoization'\n *\n * class Calculator {\n * @Memoize()\n * fibonacci(n: number): number {\n * if (n <= 1) return n\n * return this.fibonacci(n - 1) + this.fibonacci(n - 2)\n * }\n * }\n */\nexport function Memoize(options: MemoizeOptions<unknown[], unknown> = {}) {\n return (\n _target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor => {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown\n\n descriptor.value = memoize(originalMethod, {\n ...options,\n name: options.name || propertyKey,\n })\n\n return descriptor\n }\n}\n\n/**\n * Clear all memoization caches.\n * Useful for testing or when you need to force recomputation.\n */\nexport function clearAllMemoizationCaches(): void {\n // Note: This requires the memoized functions to be tracked globally.\n // For now, this is a placeholder that logs the intent.\n debugLog('[memoize:all] clear', { action: 'clear-all-caches' })\n}\n\n/**\n * Memoize with WeakMap for object keys.\n * Allows garbage collection when objects are no longer referenced.\n * Only works when first argument is an object.\n *\n * @param fn - Function to memoize\n * @returns Memoized version using WeakMap\n *\n * @example\n * import { memoizeWeak } from '@socketsecurity/registry/lib/memoization'\n *\n * const processConfig = memoizeWeak((config: Config) => {\n * return expensiveTransform(config)\n * })\n *\n * processConfig(config1) // Computed\n * processConfig(config1) // Cached\n * // When config1 is no longer referenced, cache entry is GC'd\n */\nexport function memoizeWeak<K extends object, Result>(\n fn: (key: K) => Result,\n): (key: K) => Result {\n const cache = new WeakMap<K, Result>()\n\n return function memoized(key: K): Result {\n const cached = cache.get(key)\n if (cached !== undefined) {\n debugLog(`[memoizeWeak:${fn.name}] hit`)\n return cached\n }\n\n debugLog(`[memoizeWeak:${fn.name}] miss`)\n const result = fn(key)\n cache.set(key, result)\n return result\n }\n}\n\n/**\n * Simple once() implementation - caches single result forever.\n * Useful for initialization functions that should only run once.\n *\n * @param fn - Function to run once\n * @returns Memoized version that only executes once\n *\n * @example\n * import { once } from '@socketsecurity/registry/lib/memoization'\n *\n * const initialize = once(() => {\n * console.log('Initializing\u2026')\n * return loadConfig()\n * })\n *\n * initialize() // Logs \"Initializing\u2026\" and returns config\n * initialize() // Returns cached config (no log)\n */\nexport function once<Result>(fn: () => Result): () => Result {\n let called = false\n let result: Result\n\n return function memoized(): Result {\n if (!called) {\n result = fn()\n called = true\n debugLog(`[once:${fn.name}] set`)\n } else {\n debugLog(`[once:${fn.name}] hit`)\n }\n return result\n }\n}\n\n/**\n * Create a debounced memoized function.\n * Combines memoization with debouncing for expensive operations.\n *\n * @param fn - Function to memoize and debounce\n * @param wait - Debounce wait time in milliseconds\n * @param options - Memoization options\n * @returns Debounced memoized function\n *\n * @example\n * import { memoizeDebounced } from '@socketsecurity/registry/lib/memoization'\n *\n * const search = memoizeDebounced(\n * (query: string) => performSearch(query),\n * 300,\n * { name: 'search' }\n * )\n */\nexport function memoizeDebounced<Args extends unknown[], Result>(\n fn: (...args: Args) => Result,\n wait: number,\n options: MemoizeOptions<Args, Result> = {},\n): (...args: Args) => Result {\n const memoized = memoize(fn, options)\n let timeoutId: NodeJS.Timeout | undefined\n\n return function debounced(...args: Args): Result {\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n\n timeoutId = setTimeout(() => {\n memoized(...args)\n }, wait)\n\n // For immediate return, try cached value or compute synchronously\n return memoized(...args)\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }