@socketsecurity/lib 6.0.3 → 6.0.5

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 (542) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/_virtual/_rolldown/runtime.js +45 -0
  3. package/dist/abort/signal.js +53 -59
  4. package/dist/ai/discover.js +110 -110
  5. package/dist/ai/profiles.js +94 -65
  6. package/dist/ai/spawn.js +172 -194
  7. package/dist/ai/types.js +1 -17
  8. package/dist/ai/worktree.js +160 -183
  9. package/dist/ansi/constants.js +16 -38
  10. package/dist/ansi/strip.js +44 -41
  11. package/dist/archives/_internal.js +64 -73
  12. package/dist/archives/detect.js +30 -43
  13. package/dist/archives/extract.js +43 -50
  14. package/dist/archives/tar.js +197 -228
  15. package/dist/archives/types.js +1 -17
  16. package/dist/archives/zip.js +85 -121
  17. package/dist/argv/flag-predicates.js +203 -101
  18. package/dist/argv/flag-types.js +96 -113
  19. package/dist/argv/parse-args-string.d.ts +16 -14
  20. package/dist/argv/parse-args-string.js +42 -39
  21. package/dist/argv/parse.js +145 -163
  22. package/dist/arrays/_internal.js +65 -48
  23. package/dist/arrays/chunk.js +51 -40
  24. package/dist/arrays/join.js +87 -35
  25. package/dist/arrays/predicates.js +46 -28
  26. package/dist/arrays/unique.js +45 -31
  27. package/dist/bin/_internal.js +34 -42
  28. package/dist/bin/check-primordials.js +175 -233
  29. package/dist/bin/check.js +51 -72
  30. package/dist/bin/exec.js +70 -74
  31. package/dist/bin/find.js +151 -134
  32. package/dist/bin/resolve.js +180 -246
  33. package/dist/bin/shadow.js +24 -33
  34. package/dist/bin/socket-lib.js +51 -73
  35. package/dist/bin/types.js +1 -17
  36. package/dist/bin/which.js +211 -146
  37. package/dist/cacache/_internal.js +25 -40
  38. package/dist/cacache/clear.js +79 -72
  39. package/dist/cacache/read.js +48 -46
  40. package/dist/cacache/tmp.js +29 -36
  41. package/dist/cacache/types.js +1 -17
  42. package/dist/cacache/write.js +43 -48
  43. package/dist/cache/ttl/store.js +232 -288
  44. package/dist/cache/ttl/types.js +1 -17
  45. package/dist/checks/primordials-defaults.js +83 -89
  46. package/dist/checks/primordials.js +225 -277
  47. package/dist/colors/convert.js +45 -37
  48. package/dist/colors/palette.js +88 -45
  49. package/dist/colors/socket-palette.js +74 -84
  50. package/dist/colors/types.js +1 -17
  51. package/dist/compression/_internal.js +57 -72
  52. package/dist/compression/brotli.js +94 -127
  53. package/dist/compression/gzip.js +95 -121
  54. package/dist/compression/types.js +1 -17
  55. package/dist/constants/agents.js +61 -113
  56. package/dist/constants/encoding.js +19 -42
  57. package/dist/constants/github.js +12 -30
  58. package/dist/constants/licenses.js +48 -63
  59. package/dist/constants/lifecycle-script-names.js +31 -45
  60. package/dist/constants/maintained-node-versions.js +22 -37
  61. package/dist/constants/node.js +226 -167
  62. package/dist/constants/package-default-node-range.js +16 -41
  63. package/dist/constants/package-default-socket-categories.js +12 -30
  64. package/dist/constants/packages.js +77 -126
  65. package/dist/constants/platform.js +27 -49
  66. package/dist/constants/sentinels.js +23 -48
  67. package/dist/constants/socket.js +42 -87
  68. package/dist/constants/testing.js +15 -34
  69. package/dist/constants/time.js +16 -36
  70. package/dist/constants/typescript.js +32 -52
  71. package/dist/cover/code.js +111 -142
  72. package/dist/cover/formatters.js +118 -101
  73. package/dist/cover/type.js +50 -76
  74. package/dist/cover/types.js +1 -17
  75. package/dist/crypto/hash.js +54 -46
  76. package/dist/debug/_internal.js +62 -71
  77. package/dist/debug/caller-info.js +53 -64
  78. package/dist/debug/namespace.js +80 -90
  79. package/dist/debug/output.js +172 -188
  80. package/dist/debug/types.js +1 -17
  81. package/dist/dlx/_internal.js +24 -43
  82. package/dist/dlx/arborist.js +162 -160
  83. package/dist/dlx/binary-cache.js +228 -200
  84. package/dist/dlx/binary-download.js +172 -211
  85. package/dist/dlx/binary-resolution.js +165 -157
  86. package/dist/dlx/binary-types.js +1 -17
  87. package/dist/dlx/binary.js +149 -189
  88. package/dist/dlx/cache.js +45 -30
  89. package/dist/dlx/detect.js +245 -159
  90. package/dist/dlx/dir.js +67 -51
  91. package/dist/dlx/firewall.js +62 -100
  92. package/dist/dlx/lockfile.js +122 -127
  93. package/dist/dlx/manifest.js +264 -274
  94. package/dist/dlx/package.js +241 -244
  95. package/dist/dlx/packages.js +99 -96
  96. package/dist/dlx/paths.js +73 -59
  97. package/dist/dlx/spec.js +52 -60
  98. package/dist/dlx/types.js +1 -17
  99. package/dist/eco/cargo/lockfile-format.js +19 -36
  100. package/dist/eco/cargo/manifest-format.js +17 -35
  101. package/dist/eco/cargo/parse-lockfile.js +210 -237
  102. package/dist/eco/manifest/analyze-lockfile.js +46 -63
  103. package/dist/eco/manifest/detect-format.js +66 -90
  104. package/dist/eco/manifest/find-packages.js +39 -64
  105. package/dist/eco/manifest/get-package-versions.js +27 -48
  106. package/dist/eco/manifest/get-package.js +21 -40
  107. package/dist/eco/manifest/manifest-error.js +14 -35
  108. package/dist/eco/manifest/parse-lockfile.js +40 -86
  109. package/dist/eco/manifest/parse-manifest.js +26 -43
  110. package/dist/eco/manifest/parse.js +26 -47
  111. package/dist/eco/manifest/types.js +1 -17
  112. package/dist/eco/npm/bun/exec.js +23 -32
  113. package/dist/eco/npm/manifest-format.js +21 -35
  114. package/dist/eco/npm/npm/exec.js +51 -61
  115. package/dist/eco/npm/npm/extract-package-name-from-path.js +28 -50
  116. package/dist/eco/npm/npm/flags.js +80 -52
  117. package/dist/eco/npm/npm/lockfile-format.js +21 -40
  118. package/dist/eco/npm/npm/parse-git-url.js +26 -40
  119. package/dist/eco/npm/npm/parse-lockfile.js +184 -210
  120. package/dist/eco/npm/parse-package-json.js +71 -102
  121. package/dist/eco/npm/pnpm/detect-pnpm-version.js +22 -43
  122. package/dist/eco/npm/pnpm/exec.js +51 -62
  123. package/dist/eco/npm/pnpm/flags.js +75 -68
  124. package/dist/eco/npm/pnpm/lockfile-format.js +19 -36
  125. package/dist/eco/npm/pnpm/parse-lockfile.js +235 -259
  126. package/dist/eco/npm/pnpm/parse-pnpm-package-id-v5.js +37 -47
  127. package/dist/eco/npm/pnpm/parse-pnpm-package-id-v6-v9.js +36 -49
  128. package/dist/eco/npm/script.js +82 -90
  129. package/dist/eco/npm/vlt/exec.js +24 -32
  130. package/dist/eco/npm/yarnpkg/yarn/exec.js +60 -59
  131. package/dist/eco/npm/yarnpkg/yarn/lockfile-format.js +20 -36
  132. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +194 -242
  133. package/dist/eco/npm/yarnpkg/yarn/parse-yarn-descriptor.js +37 -61
  134. package/dist/eco/purl.js +50 -60
  135. package/dist/eco/types.js +1 -17
  136. package/dist/effects/pulse-frames.js +64 -65
  137. package/dist/effects/shimmer-keyframes.js +71 -52
  138. package/dist/effects/shimmer-terminal.js +81 -50
  139. package/dist/effects/shimmer.js +290 -153
  140. package/dist/env/boolean.js +42 -43
  141. package/dist/env/case-insensitive.js +54 -39
  142. package/dist/env/ci.js +29 -31
  143. package/dist/env/debug.js +28 -31
  144. package/dist/env/github.js +144 -59
  145. package/dist/env/home.js +38 -31
  146. package/dist/env/locale.js +59 -39
  147. package/dist/env/node-auth-token.js +28 -31
  148. package/dist/env/node-env.js +28 -31
  149. package/dist/env/npm.js +94 -47
  150. package/dist/env/number.js +50 -51
  151. package/dist/env/package-manager.js +95 -83
  152. package/dist/env/path.js +28 -31
  153. package/dist/env/pre-commit.js +30 -32
  154. package/dist/env/proxy.js +121 -122
  155. package/dist/env/rewire.js +204 -96
  156. package/dist/env/shell.js +28 -31
  157. package/dist/env/socket-cli.js +233 -81
  158. package/dist/env/socket.js +521 -156
  159. package/dist/env/string.js +43 -44
  160. package/dist/env/temp-dir.js +59 -39
  161. package/dist/env/term.js +28 -31
  162. package/dist/env/test.js +65 -43
  163. package/dist/env/types.js +1 -17
  164. package/dist/env/windows.js +78 -43
  165. package/dist/env/xdg.js +62 -39
  166. package/dist/errors/message.js +40 -46
  167. package/dist/errors/predicates.js +61 -49
  168. package/dist/errors/stack.js +24 -36
  169. package/dist/events/exit/_internal.js +86 -103
  170. package/dist/events/exit/handler.js +48 -55
  171. package/dist/events/exit/intercept.js +49 -70
  172. package/dist/events/exit/lifecycle.js +92 -101
  173. package/dist/events/exit/signals.js +25 -31
  174. package/dist/events/exit/types.js +1 -17
  175. package/dist/events/warning/handler.js +43 -40
  176. package/dist/events/warning/suppress.js +111 -90
  177. package/dist/external/@npmcli/package-json/lib/read-package.js +132 -153
  178. package/dist/external/@npmcli/package-json/lib/sort.js +73 -105
  179. package/dist/external/@npmcli/package-json.js +12705 -15140
  180. package/dist/external/@npmcli/promise-spawn.js +451 -472
  181. package/dist/external/@sinclair/typebox/value.js +7443 -9002
  182. package/dist/external/@sinclair/typebox.js +7516 -7885
  183. package/dist/external/@socketregistry/is-unicode-supported.js +31 -39
  184. package/dist/external/@socketregistry/packageurl-js.js +6127 -7369
  185. package/dist/external/@socketregistry/yocto-spinner.js +394 -455
  186. package/dist/external/@yarnpkg/extensions.js +435 -1022
  187. package/dist/external/adm-zip.js +2313 -2673
  188. package/dist/external/debug.js +700 -687
  189. package/dist/external/external-pack.js +2658 -3171
  190. package/dist/external/fast-sort.js +124 -138
  191. package/dist/external/get-east-asian-width.js +70 -64
  192. package/dist/external/libnpmexec.js +28 -31
  193. package/dist/external/npm-pack.js +43617 -50137
  194. package/dist/external/p-map.js +198 -222
  195. package/dist/external/pico-pack.js +6735 -7304
  196. package/dist/external/pony-cause.js +143 -139
  197. package/dist/external/shell-quote.js +226 -0
  198. package/dist/external/spdx-pack.js +1283 -1403
  199. package/dist/external/streaming-iterables.js +835 -1052
  200. package/dist/external/tar-fs.js +2769 -3048
  201. package/dist/external/which.js +267 -251
  202. package/dist/external/yargs-parser.js +851 -1074
  203. package/dist/external-tools/bazel/asset-names.js +98 -90
  204. package/dist/external-tools/bazel/from-download.js +52 -46
  205. package/dist/external-tools/bazel/from-path.js +27 -38
  206. package/dist/external-tools/bazel/read-bazel-version-file.js +35 -57
  207. package/dist/external-tools/bazel/resolve-asset-url.js +24 -39
  208. package/dist/external-tools/bazel/resolve-bazel-version.js +34 -56
  209. package/dist/external-tools/bazel/resolve.js +44 -58
  210. package/dist/external-tools/bazel/types.js +1 -17
  211. package/dist/external-tools/cdxgen/asset-names.js +59 -66
  212. package/dist/external-tools/cdxgen/from-download.js +52 -80
  213. package/dist/external-tools/cdxgen/from-path.js +19 -37
  214. package/dist/external-tools/cdxgen/from-vfs.js +22 -43
  215. package/dist/external-tools/cdxgen/resolve.js +48 -63
  216. package/dist/external-tools/cdxgen/types.js +1 -17
  217. package/dist/external-tools/from-download.js +107 -67
  218. package/dist/external-tools/janus/asset-names.js +44 -51
  219. package/dist/external-tools/janus/from-download.js +45 -70
  220. package/dist/external-tools/janus/from-path.js +19 -37
  221. package/dist/external-tools/janus/from-vfs.js +22 -43
  222. package/dist/external-tools/janus/resolve.js +45 -63
  223. package/dist/external-tools/janus/types.js +1 -17
  224. package/dist/external-tools/jre/asset-names.js +109 -82
  225. package/dist/external-tools/jre/detect-platform-arch.js +25 -49
  226. package/dist/external-tools/jre/from-download.js +71 -67
  227. package/dist/external-tools/jre/from-java-home.js +27 -54
  228. package/dist/external-tools/jre/from-path.js +27 -49
  229. package/dist/external-tools/jre/from-vfs.js +39 -60
  230. package/dist/external-tools/jre/resolve.js +55 -68
  231. package/dist/external-tools/jre/types.js +1 -17
  232. package/dist/external-tools/manifest.js +130 -150
  233. package/dist/external-tools/opengrep/asset-names.js +60 -72
  234. package/dist/external-tools/opengrep/from-download.js +58 -80
  235. package/dist/external-tools/opengrep/from-path.js +19 -37
  236. package/dist/external-tools/opengrep/from-vfs.js +23 -43
  237. package/dist/external-tools/opengrep/resolve.js +43 -63
  238. package/dist/external-tools/opengrep/types.js +1 -17
  239. package/dist/external-tools/sbt/asset-names.js +21 -30
  240. package/dist/external-tools/sbt/from-download.js +50 -61
  241. package/dist/external-tools/sbt/from-path.js +23 -38
  242. package/dist/external-tools/sbt/from-vfs.js +30 -44
  243. package/dist/external-tools/sbt/resolve.js +45 -63
  244. package/dist/external-tools/sbt/types.js +1 -17
  245. package/dist/external-tools/synp/asset-names.js +11 -29
  246. package/dist/external-tools/synp/from-download.js +24 -41
  247. package/dist/external-tools/synp/from-path.js +19 -37
  248. package/dist/external-tools/synp/from-vfs.js +22 -43
  249. package/dist/external-tools/synp/resolve.js +43 -62
  250. package/dist/external-tools/synp/types.js +1 -17
  251. package/dist/external-tools/trivy/asset-names.js +51 -62
  252. package/dist/external-tools/trivy/from-download.js +42 -64
  253. package/dist/external-tools/trivy/from-path.js +19 -37
  254. package/dist/external-tools/trivy/from-vfs.js +22 -43
  255. package/dist/external-tools/trivy/resolve.js +43 -63
  256. package/dist/external-tools/trivy/types.js +1 -17
  257. package/dist/external-tools/trufflehog/asset-names.js +54 -66
  258. package/dist/external-tools/trufflehog/from-download.js +44 -62
  259. package/dist/external-tools/trufflehog/from-path.js +21 -37
  260. package/dist/external-tools/trufflehog/from-vfs.js +26 -43
  261. package/dist/external-tools/trufflehog/resolve.js +43 -63
  262. package/dist/external-tools/trufflehog/types.js +1 -17
  263. package/dist/external-tools/uv/asset-names.js +64 -74
  264. package/dist/external-tools/uv/from-download.js +44 -65
  265. package/dist/external-tools/uv/from-path.js +19 -37
  266. package/dist/external-tools/uv/from-vfs.js +22 -43
  267. package/dist/external-tools/uv/resolve.js +42 -63
  268. package/dist/external-tools/uv/types.js +1 -17
  269. package/dist/fs/_internal.js +40 -42
  270. package/dist/fs/access.js +57 -54
  271. package/dist/fs/encoding.js +80 -97
  272. package/dist/fs/find-up.js +126 -125
  273. package/dist/fs/inspect.js +168 -99
  274. package/dist/fs/path-cache.js +31 -32
  275. package/dist/fs/read-dir.js +102 -79
  276. package/dist/fs/read-file.js +177 -118
  277. package/dist/fs/read-json-cache.js +150 -134
  278. package/dist/fs/read-json.js +172 -187
  279. package/dist/fs/resolve-module.js +35 -58
  280. package/dist/fs/safe.js +278 -169
  281. package/dist/fs/types.js +1 -17
  282. package/dist/fs/unique.js +52 -48
  283. package/dist/fs/validate.js +56 -40
  284. package/dist/fs/write-json.js +109 -75
  285. package/dist/git/_internal.js +251 -216
  286. package/dist/git/changed.js +191 -74
  287. package/dist/git/repo.js +118 -104
  288. package/dist/git/staged.js +172 -62
  289. package/dist/git/types.js +1 -17
  290. package/dist/git/unstaged.js +175 -62
  291. package/dist/github/constants.js +25 -33
  292. package/dist/github/errors.js +46 -38
  293. package/dist/github/fetch.js +137 -82
  294. package/dist/github/ghsa.js +217 -151
  295. package/dist/github/refs-cache.js +54 -43
  296. package/dist/github/refs-graphql.js +97 -89
  297. package/dist/github/refs-rest.js +70 -101
  298. package/dist/github/refs.js +105 -64
  299. package/dist/github/token.js +96 -48
  300. package/dist/github/types.js +1 -17
  301. package/dist/globs/_internal.js +73 -82
  302. package/dist/globs/defaults.js +40 -59
  303. package/dist/globs/match.js +93 -77
  304. package/dist/globs/matcher.js +104 -92
  305. package/dist/globs/stream.js +43 -55
  306. package/dist/globs/types.js +1 -17
  307. package/dist/http-request/_internal.js +11 -38
  308. package/dist/http-request/browser-fetch.js +19 -29
  309. package/dist/http-request/browser.js +188 -206
  310. package/dist/http-request/checksums.js +101 -65
  311. package/dist/http-request/download-types.js +1 -17
  312. package/dist/http-request/download.js +195 -196
  313. package/dist/http-request/errors.js +39 -47
  314. package/dist/http-request/headers.js +95 -80
  315. package/dist/http-request/http-request.js +10 -35
  316. package/dist/http-request/node.js +71 -97
  317. package/dist/http-request/request-attempt.js +232 -285
  318. package/dist/http-request/request-types.js +1 -17
  319. package/dist/http-request/request.js +106 -108
  320. package/dist/http-request/response-reader.js +47 -51
  321. package/dist/http-request/response-types.js +22 -38
  322. package/dist/http-request/user-agent.js +73 -55
  323. package/dist/integrity.js +105 -106
  324. package/dist/ipc/_internal.js +34 -48
  325. package/dist/ipc/directory.js +55 -63
  326. package/dist/ipc/paths.js +52 -45
  327. package/dist/ipc/types.js +1 -17
  328. package/dist/ipc/write.js +81 -74
  329. package/dist/ipc-cli/get.js +29 -56
  330. package/dist/ipc-cli/types.js +1 -17
  331. package/dist/json/edit.js +182 -242
  332. package/dist/json/format.js +202 -103
  333. package/dist/json/parse.js +206 -109
  334. package/dist/json/types.js +1 -17
  335. package/dist/links/create.js +93 -60
  336. package/dist/links/types.js +1 -17
  337. package/dist/logger/_internal.js +109 -73
  338. package/dist/logger/browser.js +45 -56
  339. package/dist/logger/colors.js +31 -49
  340. package/dist/logger/console.js +89 -112
  341. package/dist/logger/default.js +19 -33
  342. package/dist/logger/logger.js +5 -29
  343. package/dist/logger/node.js +793 -854
  344. package/dist/logger/symbols-builder.js +54 -56
  345. package/dist/logger/symbols.js +135 -118
  346. package/dist/logger/types.js +1 -17
  347. package/dist/memo/_internal.js +39 -49
  348. package/dist/memo/async.js +133 -117
  349. package/dist/memo/clear.js +25 -34
  350. package/dist/memo/decorator.js +43 -37
  351. package/dist/memo/memoize.js +97 -88
  352. package/dist/memo/once.js +42 -41
  353. package/dist/memo/types.js +1 -17
  354. package/dist/memo/weak.js +45 -41
  355. package/dist/node/async-hooks.js +9 -30
  356. package/dist/node/child-process.js +9 -30
  357. package/dist/node/crypto.js +9 -30
  358. package/dist/node/events.js +9 -30
  359. package/dist/node/fs-promises.js +9 -30
  360. package/dist/node/fs.js +9 -30
  361. package/dist/node/http.js +9 -30
  362. package/dist/node/https.js +9 -30
  363. package/dist/node/module.js +20 -34
  364. package/dist/node/os.js +9 -30
  365. package/dist/node/path.js +9 -30
  366. package/dist/node/timers-promises.js +9 -30
  367. package/dist/node/url.js +9 -30
  368. package/dist/node/util.js +9 -30
  369. package/dist/objects/getters.js +185 -126
  370. package/dist/objects/inspect.js +85 -52
  371. package/dist/objects/mutate.js +96 -76
  372. package/dist/objects/predicates.js +112 -59
  373. package/dist/objects/sort.js +120 -76
  374. package/dist/objects/types.js +1 -17
  375. package/dist/packages/edit-class.js +198 -265
  376. package/dist/packages/edit.js +79 -86
  377. package/dist/packages/exports.js +146 -157
  378. package/dist/packages/isolation.js +159 -209
  379. package/dist/packages/licenses.js +207 -189
  380. package/dist/packages/manifest.js +134 -172
  381. package/dist/packages/normalize.js +91 -102
  382. package/dist/packages/operations.d.ts +2 -0
  383. package/dist/packages/operations.js +283 -254
  384. package/dist/packages/provenance.js +195 -245
  385. package/dist/packages/specs.js +94 -84
  386. package/dist/packages/types.js +1 -17
  387. package/dist/packages/validation.js +49 -50
  388. package/dist/paths/_internal.js +82 -86
  389. package/dist/paths/conversion.js +112 -65
  390. package/dist/paths/dirnames.js +17 -42
  391. package/dist/paths/exts.js +23 -54
  392. package/dist/paths/filenames.js +21 -50
  393. package/dist/paths/globs.js +15 -38
  394. package/dist/paths/normalize.js +215 -236
  395. package/dist/paths/packages.js +34 -49
  396. package/dist/paths/predicates.js +184 -106
  397. package/dist/paths/resolve.js +146 -128
  398. package/dist/paths/rewire.js +108 -72
  399. package/dist/paths/socket.js +252 -132
  400. package/dist/paths/walk.js +55 -60
  401. package/dist/perf/_internal.js +10 -28
  402. package/dist/perf/enabled.js +21 -30
  403. package/dist/perf/metrics.js +81 -67
  404. package/dist/perf/report.js +79 -80
  405. package/dist/perf/timer.js +180 -126
  406. package/dist/perf/types.js +1 -17
  407. package/dist/pkg-ext/data.js +29 -82
  408. package/dist/pkg-ext/types.js +1 -17
  409. package/dist/primordials/array.js +120 -198
  410. package/dist/primordials/buffer.js +28 -51
  411. package/dist/primordials/date.js +26 -51
  412. package/dist/primordials/error.js +33 -59
  413. package/dist/primordials/function.js +21 -41
  414. package/dist/primordials/globals.js +25 -48
  415. package/dist/primordials/json.js +14 -30
  416. package/dist/primordials/map-set.js +88 -152
  417. package/dist/primordials/math.js +59 -116
  418. package/dist/primordials/number.js +41 -76
  419. package/dist/primordials/object.js +56 -116
  420. package/dist/primordials/promise.js +28 -52
  421. package/dist/primordials/reflect.js +24 -52
  422. package/dist/primordials/regexp.js +25 -47
  423. package/dist/primordials/string.js +114 -167
  424. package/dist/primordials/symbol.js +40 -72
  425. package/dist/primordials/uncurry.js +38 -55
  426. package/dist/primordials/url.js +27 -66
  427. package/dist/process/_internal.js +7 -32
  428. package/dist/process/abort.js +29 -35
  429. package/dist/process/lock-instance.js +26 -30
  430. package/dist/process/lock-manager.js +279 -307
  431. package/dist/process/lock-types.js +1 -17
  432. package/dist/process/spawn/_internal.js +43 -55
  433. package/dist/process/spawn/child.js +172 -211
  434. package/dist/process/spawn/errors.js +116 -113
  435. package/dist/process/spawn/stdio.js +51 -35
  436. package/dist/process/spawn/types.js +1 -17
  437. package/dist/process/transient.js +49 -66
  438. package/dist/promises/_internal.js +31 -34
  439. package/dist/promises/iterate.js +238 -102
  440. package/dist/promises/options.js +123 -101
  441. package/dist/promises/queue.js +115 -136
  442. package/dist/promises/resolvers.js +77 -46
  443. package/dist/promises/retry.js +156 -101
  444. package/dist/promises/types.js +1 -17
  445. package/dist/regexps/escape.js +32 -30
  446. package/dist/regexps/hex.js +16 -33
  447. package/dist/regexps/spec.js +53 -81
  448. package/dist/releases/github-archives.js +127 -118
  449. package/dist/releases/github-asset-url.js +162 -146
  450. package/dist/releases/github-assets.js +37 -49
  451. package/dist/releases/github-auth.js +32 -48
  452. package/dist/releases/github-downloads.js +118 -138
  453. package/dist/releases/github-listing.js +175 -145
  454. package/dist/releases/github-retry-config.js +41 -47
  455. package/dist/releases/github-types.js +1 -17
  456. package/dist/releases/socket-btm.js +273 -192
  457. package/dist/schema/parse.js +35 -36
  458. package/dist/schema/types.js +1 -17
  459. package/dist/schema/validate.js +118 -99
  460. package/dist/sea/detect.js +57 -52
  461. package/dist/secrets/_internal.js +86 -67
  462. package/dist/secrets/find.js +96 -77
  463. package/dist/secrets/keychain.js +315 -309
  464. package/dist/secrets/linux.js +133 -135
  465. package/dist/secrets/macos.js +151 -147
  466. package/dist/secrets/rc.js +182 -181
  467. package/dist/secrets/socket-api-token.js +28 -43
  468. package/dist/secrets/types.js +1 -17
  469. package/dist/secrets/windows.js +184 -242
  470. package/dist/shadow/skip.js +51 -70
  471. package/dist/shadow/types.js +1 -17
  472. package/dist/shell/parse.d.ts +26 -0
  473. package/dist/shell/parse.js +35 -0
  474. package/dist/shell/quote.d.ts +19 -0
  475. package/dist/shell/quote.js +30 -0
  476. package/dist/smol/detect.js +67 -43
  477. package/dist/smol/http.js +33 -37
  478. package/dist/smol/https.js +31 -37
  479. package/dist/smol/manifest.js +33 -37
  480. package/dist/smol/path.js +33 -37
  481. package/dist/smol/primordial.js +35 -37
  482. package/dist/smol/purl.js +34 -37
  483. package/dist/smol/versions.js +31 -37
  484. package/dist/smol/vfs.js +46 -38
  485. package/dist/sorts/_internal.js +14 -40
  486. package/dist/sorts/natural.js +57 -64
  487. package/dist/sorts/semver.js +33 -43
  488. package/dist/sorts/strings.js +24 -30
  489. package/dist/sorts/types.js +1 -17
  490. package/dist/spinner/default.js +72 -63
  491. package/dist/spinner/format.js +86 -71
  492. package/dist/spinner/spinner.js +749 -797
  493. package/dist/spinner/types.js +1 -17
  494. package/dist/spinner/with.js +193 -137
  495. package/dist/ssri/convert.js +64 -47
  496. package/dist/ssri/parse.js +38 -37
  497. package/dist/ssri/validate.js +51 -34
  498. package/dist/stdio/_internal.js +50 -46
  499. package/dist/stdio/clear.js +208 -86
  500. package/dist/stdio/divider.js +170 -97
  501. package/dist/stdio/footer.js +116 -110
  502. package/dist/stdio/header.js +117 -90
  503. package/dist/stdio/progress.js +189 -218
  504. package/dist/stdio/prompts.js +244 -168
  505. package/dist/stdio/stderr.js +173 -78
  506. package/dist/stdio/stdout.js +177 -94
  507. package/dist/streams/parallel.js +58 -50
  508. package/dist/streams/transform.js +36 -45
  509. package/dist/strings/format.js +145 -63
  510. package/dist/strings/predicates.js +56 -34
  511. package/dist/strings/search.js +52 -42
  512. package/dist/strings/transform.js +113 -72
  513. package/dist/strings/types.js +1 -17
  514. package/dist/strings/width.js +89 -82
  515. package/dist/tables/bordered.js +81 -81
  516. package/dist/tables/padding.js +36 -46
  517. package/dist/tables/simple.js +62 -70
  518. package/dist/tables/types.js +1 -17
  519. package/dist/temporal/instant.js +72 -81
  520. package/dist/temporal/now.js +40 -31
  521. package/dist/temporal/slots.js +42 -36
  522. package/dist/temporal/system.js +36 -36
  523. package/dist/temporal/temporal.js +11 -41
  524. package/dist/themes/context.js +131 -69
  525. package/dist/themes/resolve.js +207 -132
  526. package/dist/themes/themes.js +225 -194
  527. package/dist/themes/types.js +1 -17
  528. package/dist/url/parse.js +48 -51
  529. package/dist/url/predicates.js +24 -31
  530. package/dist/url/search-params.js +133 -101
  531. package/dist/url/types.js +1 -17
  532. package/dist/versions/_internal.js +31 -33
  533. package/dist/versions/compare.js +80 -58
  534. package/dist/versions/modify.js +41 -39
  535. package/dist/versions/parse.js +88 -64
  536. package/dist/versions/range.js +58 -41
  537. package/dist/versions/types.js +1 -17
  538. package/dist/words/article.js +22 -30
  539. package/dist/words/capitalize.js +25 -34
  540. package/dist/words/pluralize.js +23 -31
  541. package/dist/words/types.js +1 -17
  542. package/package.json +17 -5
@@ -1,124 +1,223 @@
1
1
  "use strict";
2
- /* Socket Lib - Built with esbuild */
3
- "use strict";
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
- var format_exports = {};
22
- __export(format_exports, {
23
- INDENT_SYMBOL: () => INDENT_SYMBOL,
24
- NEWLINE_SYMBOL: () => NEWLINE_SYMBOL,
25
- detectIndent: () => detectIndent,
26
- detectNewline: () => detectNewline,
27
- extractFormatting: () => extractFormatting,
28
- getDefaultFormatting: () => getDefaultFormatting,
29
- getFormattingFromContent: () => getFormattingFromContent,
30
- shouldSave: () => shouldSave,
31
- sortKeys: () => sortKeys,
32
- stringifyWithFormatting: () => stringifyWithFormatting,
33
- stripFormattingSymbols: () => stripFormattingSymbols
34
- });
35
- module.exports = __toCommonJS(format_exports);
36
- var import_json = require("../primordials/json");
37
- var import_object = require("../primordials/object");
2
+ /* Socket Lib - Built with rolldown */
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_primordials_object = require('../primordials/object.js');
5
+ const require_primordials_json = require('../primordials/json.js');
6
+
7
+ //#region src/json/format.ts
8
+ /**
9
+ * @file Shared utilities for JSON formatting preservation and manipulation.
10
+ * Provides functions for detecting and preserving indentation, line endings,
11
+ * and determining when JSON files should be saved based on content changes.
12
+ */
13
+ /**
14
+ * Symbols used to store formatting metadata in JSON objects.
15
+ */
38
16
  const INDENT_SYMBOL = Symbol.for("indent");
39
17
  const NEWLINE_SYMBOL = Symbol.for("newline");
18
+ /**
19
+ * Detect indentation from a JSON string. Supports space-based indentation
20
+ * (returns count) or mixed indentation (returns string).
21
+ *
22
+ * @example
23
+ * ;```ts
24
+ * detectIndent('{\n "key": "value"\n}') // => 2
25
+ * detectIndent('{\n "key": "value"\n}') // => 4
26
+ * detectIndent('{\n\t"key": "value"\n}') // => '\t'
27
+ * ```
28
+ *
29
+ * @param json - JSON string to analyze.
30
+ *
31
+ * @returns Number of spaces or indentation string, defaults to 2 if not
32
+ * detected.
33
+ */
40
34
  function detectIndent(json) {
41
- const match = json.match(/^[{[][\r\n]+(\s+)/m);
42
- if (!match) {
43
- return 2;
44
- }
45
- const indent = match[1];
46
- if (/^ +$/.test(indent)) {
47
- return indent.length;
48
- }
49
- return indent;
35
+ const match = json.match(/^[{[][\r\n]+(\s+)/m);
36
+ if (!match) return 2;
37
+ const indent = match[1];
38
+ if (/^ +$/.test(indent)) return indent.length;
39
+ return indent;
50
40
  }
41
+ /**
42
+ * Detect newline character(s) from a JSON string. Supports LF (\n) and CRLF
43
+ * (\r\n) line endings.
44
+ *
45
+ * @example
46
+ * ;```ts
47
+ * detectNewline('{\n "key": "value"\n}') // => '\n'
48
+ * detectNewline('{\r\n "key": "value"\r\n}') // => '\r\n'
49
+ * ```
50
+ *
51
+ * @param json - JSON string to analyze.
52
+ *
53
+ * @returns Line ending string ('\n' or '\r\n'), defaults to '\n' if not
54
+ * detected.
55
+ */
51
56
  function detectNewline(json) {
52
- const match = json.match(/\r?\n/);
53
- return match ? match[0] : "\n";
57
+ const match = json.match(/\r?\n/);
58
+ return match ? match[0] : "\n";
54
59
  }
60
+ /**
61
+ * Extract formatting metadata from a JSON string.
62
+ *
63
+ * @example
64
+ * ;```ts
65
+ * const formatting = extractFormatting('{\n "key": "value"\n}')
66
+ * // => { indent: 2, newline: '\n' }
67
+ * ```
68
+ *
69
+ * @param json - JSON string to analyze.
70
+ *
71
+ * @returns Object containing indent and newline formatting
72
+ */
55
73
  function extractFormatting(json) {
56
- return {
57
- indent: detectIndent(json),
58
- newline: detectNewline(json)
59
- };
74
+ return {
75
+ indent: detectIndent(json),
76
+ newline: detectNewline(json)
77
+ };
60
78
  }
79
+ /**
80
+ * Get default formatting for JSON files.
81
+ *
82
+ * @example
83
+ * ;```typescript
84
+ * const fmt = getDefaultFormatting()
85
+ * // { indent: 2, newline: '\n' }
86
+ * ```
87
+ *
88
+ * @returns Default formatting (2 spaces, LF line endings)
89
+ */
61
90
  function getDefaultFormatting() {
62
- return {
63
- indent: 2,
64
- newline: "\n"
65
- };
91
+ return {
92
+ indent: 2,
93
+ newline: "\n"
94
+ };
66
95
  }
96
+ /**
97
+ * Extract formatting from content object that has symbol-based metadata.
98
+ *
99
+ * @example
100
+ * ;```typescript
101
+ * const content = {
102
+ * [Symbol.for('indent')]: 4,
103
+ * [Symbol.for('newline')]: '\r\n',
104
+ * }
105
+ * getFormattingFromContent(content) // { indent: 4, newline: "\r\n" }
106
+ * ```
107
+ *
108
+ * @param content - Content object with Symbol.for('indent') and
109
+ * Symbol.for('newline')
110
+ *
111
+ * @returns Formatting metadata, or defaults if symbols not present
112
+ */
67
113
  function getFormattingFromContent(content) {
68
- const indent = content[INDENT_SYMBOL];
69
- const newline = content[NEWLINE_SYMBOL];
70
- return {
71
- indent: indent === void 0 || indent === null ? 2 : indent,
72
- newline: newline === void 0 || newline === null ? "\n" : newline
73
- };
114
+ const indent = content[INDENT_SYMBOL];
115
+ const newline = content[NEWLINE_SYMBOL];
116
+ return {
117
+ indent: indent === void 0 || indent === null ? 2 : indent,
118
+ newline: newline === void 0 || newline === null ? "\n" : newline
119
+ };
74
120
  }
121
+ /**
122
+ * Determine if content should be saved based on changes and options. Compares
123
+ * current content with original content and respects options like
124
+ * ignoreWhitespace and sort.
125
+ *
126
+ * @example
127
+ * ;```ts
128
+ * const current = { key: 'new-value', [Symbol.for('indent')]: 2 }
129
+ * const original = { key: 'old-value', [Symbol.for('indent')]: 2 }
130
+ * shouldSave(current, original, '{\n "key": "old-value"\n}\n')
131
+ * // => true
132
+ * ```
133
+ *
134
+ * @param currentContent - Current content object (may include formatting
135
+ * symbols)
136
+ * @param originalContent - Original content for comparison (may include
137
+ * formatting symbols)
138
+ * @param originalFileContent - Original file content as string (for whitespace
139
+ * comparison)
140
+ * @param options - Options controlling save behavior.
141
+ *
142
+ * @returns True if content should be saved, false otherwise
143
+ */
75
144
  function shouldSave(currentContent, originalContent, originalFileContent, options = {}) {
76
- const { ignoreWhitespace = false, sort = false, sortFn } = options;
77
- const content = stripFormattingSymbols(currentContent);
78
- const sortedContent = sortFn ? sortFn(content) : sort ? sortKeys(content) : content;
79
- const origContent = originalContent ? stripFormattingSymbols(originalContent) : {};
80
- if (ignoreWhitespace) {
81
- const util = require("node:util");
82
- return !util.isDeepStrictEqual(sortedContent, origContent);
83
- }
84
- const formatting = getFormattingFromContent(currentContent);
85
- const newFileContent = stringifyWithFormatting(sortedContent, formatting);
86
- return newFileContent.trim() !== originalFileContent.trim();
145
+ const { ignoreWhitespace = false, sort = false, sortFn } = options;
146
+ const content = stripFormattingSymbols(currentContent);
147
+ const sortedContent = sortFn ? sortFn(content) : sort ? sortKeys(content) : content;
148
+ const origContent = originalContent ? stripFormattingSymbols(originalContent) : {};
149
+ if (ignoreWhitespace) return !require("node:util").isDeepStrictEqual(sortedContent, origContent);
150
+ return stringifyWithFormatting(sortedContent, getFormattingFromContent(currentContent)).trim() !== originalFileContent.trim();
87
151
  }
152
+ /**
153
+ * Sort object keys alphabetically. Creates a new object with sorted keys (does
154
+ * not mutate input).
155
+ *
156
+ * @example
157
+ * ;```ts
158
+ * sortKeys({ z: 3, a: 1, m: 2 })
159
+ * // => { a: 1, m: 2, z: 3 }
160
+ * ```
161
+ *
162
+ * @param obj - Object to sort.
163
+ *
164
+ * @returns New object with alphabetically sorted keys
165
+ */
88
166
  function sortKeys(obj) {
89
- const sorted = { __proto__: null };
90
- const keys = (0, import_object.ObjectKeys)(obj).sort();
91
- for (const key of keys) {
92
- sorted[key] = obj[key];
93
- }
94
- return sorted;
167
+ const sorted = { __proto__: null };
168
+ const keys = require_primordials_object.ObjectKeys(obj).sort();
169
+ for (const key of keys) sorted[key] = obj[key];
170
+ return sorted;
95
171
  }
172
+ /**
173
+ * Stringify JSON with specific formatting. Applies indentation and line ending
174
+ * preferences.
175
+ *
176
+ * @example
177
+ * ;```ts
178
+ * stringifyWithFormatting({ key: 'value' }, { indent: 4, newline: '\r\n' })
179
+ * // => '{\r\n "key": "value"\r\n}\r\n'
180
+ * ```
181
+ *
182
+ * @param content - Object to stringify.
183
+ * @param formatting - Formatting preferences (indent and newline)
184
+ *
185
+ * @returns Formatted JSON string with trailing newline
186
+ */
96
187
  function stringifyWithFormatting(content, formatting) {
97
- const { indent, newline } = formatting;
98
- const format = indent === void 0 || indent === null ? " " : indent;
99
- const eol = newline === void 0 || newline === null ? "\n" : newline;
100
- return `${(0, import_json.JSONStringify)(content, void 0, format)}
101
- `.replace(/\n/g, eol);
188
+ const { indent, newline } = formatting;
189
+ const format = indent === void 0 || indent === null ? " " : indent;
190
+ const eol = newline === void 0 || newline === null ? "\n" : newline;
191
+ return `${require_primordials_json.JSONStringify(content, void 0, format)}\n`.replace(/\n/g, eol);
102
192
  }
193
+ /**
194
+ * Strip formatting symbols from content object. Removes Symbol.for('indent')
195
+ * and Symbol.for('newline') from the object.
196
+ *
197
+ * @example
198
+ * ;```typescript
199
+ * const obj = { key: 'value', [Symbol.for('indent')]: 2 }
200
+ * stripFormattingSymbols(obj) // { key: "value" }
201
+ * ```
202
+ *
203
+ * @param content - Content object with potential symbol properties.
204
+ *
205
+ * @returns Object with symbols removed
206
+ */
103
207
  function stripFormattingSymbols(content) {
104
- const {
105
- [INDENT_SYMBOL]: _indent,
106
- [NEWLINE_SYMBOL]: _newline,
107
- ...rest
108
- } = content;
109
- return rest;
208
+ const { [INDENT_SYMBOL]: _indent, [NEWLINE_SYMBOL]: _newline, ...rest } = content;
209
+ return rest;
110
210
  }
111
- // Annotate the CommonJS export names for ESM import in node:
112
- 0 && (module.exports = {
113
- INDENT_SYMBOL,
114
- NEWLINE_SYMBOL,
115
- detectIndent,
116
- detectNewline,
117
- extractFormatting,
118
- getDefaultFormatting,
119
- getFormattingFromContent,
120
- shouldSave,
121
- sortKeys,
122
- stringifyWithFormatting,
123
- stripFormattingSymbols
124
- });
211
+
212
+ //#endregion
213
+ exports.INDENT_SYMBOL = INDENT_SYMBOL;
214
+ exports.NEWLINE_SYMBOL = NEWLINE_SYMBOL;
215
+ exports.detectIndent = detectIndent;
216
+ exports.detectNewline = detectNewline;
217
+ exports.extractFormatting = extractFormatting;
218
+ exports.getDefaultFormatting = getDefaultFormatting;
219
+ exports.getFormattingFromContent = getFormattingFromContent;
220
+ exports.shouldSave = shouldSave;
221
+ exports.sortKeys = sortKeys;
222
+ exports.stringifyWithFormatting = stringifyWithFormatting;
223
+ exports.stripFormattingSymbols = stripFormattingSymbols;
@@ -1,121 +1,218 @@
1
1
  "use strict";
2
- /* Socket Lib - Built with esbuild */
3
- "use strict";
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
- var parse_exports = {};
22
- __export(parse_exports, {
23
- isBuffer: () => isBuffer,
24
- isJsonPrimitive: () => isJsonPrimitive,
25
- parseJson: () => parseJson,
26
- parseJsonSafe: () => parseJsonSafe,
27
- prototypePollutionReviver: () => prototypePollutionReviver
28
- });
29
- module.exports = __toCommonJS(parse_exports);
30
- var import_validate = require("../schema/validate");
31
- var import_transform = require("../strings/transform");
32
- var import_buffer = require("../primordials/buffer");
33
- var import_error = require("../primordials/error");
34
- var import_json = require("../primordials/json");
35
- var import_map_set = require("../primordials/map-set");
36
- // @__NO_SIDE_EFFECTS__
2
+ /* Socket Lib - Built with rolldown */
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_primordials_buffer = require('../primordials/buffer.js');
5
+ const require_primordials_error = require('../primordials/error.js');
6
+ const require_primordials_map_set = require('../primordials/map-set.js');
7
+ const require_schema_validate = require('../schema/validate.js');
8
+ const require_strings_transform = require('../strings/transform.js');
9
+ const require_primordials_json = require('../primordials/json.js');
10
+
11
+ //#region src/json/parse.ts
12
+ /**
13
+ * @file JSON parsing utilities with Buffer detection and BOM stripping.
14
+ * Provides safe JSON parsing with automatic encoding handling, plus
15
+ * `parseJsonSafe` for untrusted input (prototype-pollution protection + size
16
+ * limits + optional schema validation).
17
+ */
18
+ /**
19
+ * Check if a value is a Buffer instance. Uses duck-typing to detect Buffer
20
+ * without requiring Node.js Buffer in type system.
21
+ *
22
+ * @example
23
+ * ;```ts
24
+ * isBuffer(Buffer.from('hello')) // => true
25
+ * isBuffer('hello') // => false
26
+ * isBuffer({ length: 5 }) // => false
27
+ * ```
28
+ *
29
+ * @param x - Value to check.
30
+ *
31
+ * @returns `true` if value is a Buffer, `false` otherwise
32
+ */
33
+ /* @__NO_SIDE_EFFECTS__ */
37
34
  function isBuffer(x) {
38
- if (!x || typeof x !== "object") {
39
- return false;
40
- }
41
- const obj = x;
42
- if (typeof obj["length"] !== "number") {
43
- return false;
44
- }
45
- if (typeof obj["copy"] !== "function" || typeof obj["slice"] !== "function") {
46
- return false;
47
- }
48
- if (typeof obj["length"] === "number" && obj["length"] > 0 && typeof obj[0] !== "number") {
49
- return false;
50
- }
51
- const Ctor = x.constructor;
52
- return !!(typeof Ctor?.isBuffer === "function" && Ctor.isBuffer(x));
35
+ if (!x || typeof x !== "object") return false;
36
+ const obj = x;
37
+ if (typeof obj["length"] !== "number") return false;
38
+ if (typeof obj["copy"] !== "function" || typeof obj["slice"] !== "function") return false;
39
+ if (typeof obj["length"] === "number" && obj["length"] > 0 && typeof obj[0] !== "number") return false;
40
+ const Ctor = x.constructor;
41
+ return !!(typeof Ctor?.isBuffer === "function" && Ctor.isBuffer(x));
53
42
  }
54
- // @__NO_SIDE_EFFECTS__
43
+ /**
44
+ * Check if a value is a JSON primitive type. JSON primitives are: `null`,
45
+ * `boolean`, `number`, or `string`.
46
+ *
47
+ * @example
48
+ * ;```ts
49
+ * isJsonPrimitive(null) // => true
50
+ * isJsonPrimitive(true) // => true
51
+ * isJsonPrimitive(42) // => true
52
+ * isJsonPrimitive('hello') // => true
53
+ * isJsonPrimitive({}) // => false
54
+ * isJsonPrimitive([]) // => false
55
+ * isJsonPrimitive(undefined) // => false
56
+ * ```
57
+ *
58
+ * @param value - Value to check.
59
+ *
60
+ * @returns `true` if value is a JSON primitive, `false` otherwise
61
+ */
62
+ /* @__NO_SIDE_EFFECTS__ */
55
63
  function isJsonPrimitive(value) {
56
- return value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "string";
64
+ return value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "string";
57
65
  }
58
- // @__NO_SIDE_EFFECTS__
66
+ /**
67
+ * Parse JSON content with automatic Buffer handling and BOM stripping. Provides
68
+ * safer JSON parsing with helpful error messages and optional error
69
+ * suppression.
70
+ *
71
+ * Features: - Automatic UTF-8 Buffer conversion - BOM (Byte Order Mark)
72
+ * stripping for cross-platform compatibility - Enhanced error messages with
73
+ * filepath context - Optional error suppression (returns `undefined` instead of
74
+ * throwing) - Optional reviver for transforming parsed values.
75
+ *
76
+ * @example
77
+ * ;```ts
78
+ * // Basic usage
79
+ * const data = parseJson('{"name":"example"}')
80
+ * console.log(data.name) // => 'example'
81
+ *
82
+ * // Parse Buffer with UTF-8 BOM
83
+ * const buffer = Buffer.from('\uFEFF{"value":42}')
84
+ * const data = parseJson(buffer)
85
+ * console.log(data.value) // => 42
86
+ *
87
+ * // Enhanced error messages with filepath
88
+ * try {
89
+ * parseJson('invalid', { filepath: 'config.json' })
90
+ * } catch (e) {
91
+ * console.error(e.message)
92
+ * // => "config.json: Unexpected token i in JSON at position 0"
93
+ * }
94
+ *
95
+ * // Suppress errors
96
+ * const result = parseJson('invalid', { throws: false })
97
+ * console.log(result) // => undefined
98
+ *
99
+ * // Transform values with reviver
100
+ * const json = '{"created":"2024-01-15T10:30:00Z"}'
101
+ * const data = parseJson(json, {
102
+ * reviver: (key, value) => {
103
+ * if (key === 'created' && typeof value === 'string') {
104
+ * return new Date(value)
105
+ * }
106
+ * return value
107
+ * },
108
+ * })
109
+ * console.log(data.created instanceof Date) // => true
110
+ * ```
111
+ *
112
+ * @param content - JSON string or Buffer to parse.
113
+ * @param options - Optional parsing configuration.
114
+ *
115
+ * @returns Parsed JSON value, or `undefined` if parsing fails and `throws` is
116
+ * `false`
117
+ *
118
+ * @throws {SyntaxError} When JSON is invalid and `throws` is `true` (default)
119
+ */
120
+ /* @__NO_SIDE_EFFECTS__ */
59
121
  function parseJson(content, options) {
60
- const { filepath, reviver, throws } = {
61
- __proto__: null,
62
- ...options
63
- };
64
- const shouldThrow = throws === void 0 || !!throws;
65
- const jsonStr = /* @__PURE__ */ isBuffer(content) ? content.toString("utf8") : content;
66
- try {
67
- return (0, import_json.JSONParse)((0, import_transform.stripBom)(jsonStr), reviver);
68
- } catch (e) {
69
- if (shouldThrow) {
70
- const error = e;
71
- if (error && typeof filepath === "string") {
72
- error.message = `${filepath}: ${error.message}`;
73
- }
74
- throw error;
75
- }
76
- }
77
- return void 0;
122
+ const { filepath, reviver, throws } = {
123
+ __proto__: null,
124
+ ...options
125
+ };
126
+ const shouldThrow = throws === void 0 || !!throws;
127
+ const jsonStr = /* @__PURE__ */ isBuffer(content) ? content.toString("utf8") : content;
128
+ try {
129
+ return require_primordials_json.JSONParse(/* @__PURE__ */ require_strings_transform.stripBom(jsonStr), reviver);
130
+ } catch (e) {
131
+ if (shouldThrow) {
132
+ const error = e;
133
+ if (error && typeof filepath === "string") error.message = `${filepath}: ${error.message}`;
134
+ throw error;
135
+ }
136
+ }
78
137
  }
79
- const DANGEROUS_KEYS = new import_map_set.SetCtor(["__proto__", "constructor", "prototype"]);
138
+ const DANGEROUS_KEYS = new require_primordials_map_set.SetCtor([
139
+ "__proto__",
140
+ "constructor",
141
+ "prototype"
142
+ ]);
80
143
  const DEFAULT_MAX_SIZE = 10 * 1024 * 1024;
81
- // @__NO_SIDE_EFFECTS__
144
+ /**
145
+ * Safely parse JSON with optional schema validation and security controls.
146
+ * Throws on parse failure, validation failure, or security violation.
147
+ *
148
+ * Recommended for parsing untrusted JSON (user input, network payloads,
149
+ * anything beyond a trust boundary). Layers:
150
+ *
151
+ * 1. Size cap (default 10 MB) prevents memory exhaustion.
152
+ * 2. Prototype-pollution reviver rejects `__proto__` / `constructor` / `prototype`
153
+ * keys at any depth (unless `allowPrototype: true`).
154
+ * 3. Optional Zod-shaped schema validation via
155
+ * `@socketsecurity/lib/schema/validate`.
156
+ *
157
+ * For trusted-source reads (package.json, local config files), prefer
158
+ * `parseJson()` — it offers Buffer/BOM handling and filepath-aware error
159
+ * messages, without the untrusted-input overhead.
160
+ *
161
+ * @example
162
+ * ;```ts
163
+ * // Basic parsing with type inference.
164
+ * const data = parseJsonSafe<User>('{"name":"Alice","age":30}')
165
+ *
166
+ * // With schema validation.
167
+ * import { z } from 'zod'
168
+ * const userSchema = z.object({ name: z.string(), age: z.number() })
169
+ * const user = parseJsonSafe('{"name":"Alice","age":30}', userSchema)
170
+ *
171
+ * // With size limit.
172
+ * const data = parseJsonSafe(jsonString, undefined, { maxSize: 1024 })
173
+ *
174
+ * // Allow prototype keys (DANGEROUS — only for trusted sources).
175
+ * const data = parseJsonSafe('{"__proto__":{}}', undefined, {
176
+ * allowPrototype: true,
177
+ * })
178
+ * ```
179
+ *
180
+ * @throws {Error} When `jsonString` exceeds `maxSize`.
181
+ * @throws {Error} When JSON parsing fails.
182
+ * @throws {Error} When prototype-pollution keys are detected (and
183
+ * `allowPrototype` is not `true`).
184
+ * @throws {Error} When schema validation fails.
185
+ */
186
+ /* @__NO_SIDE_EFFECTS__ */
82
187
  function parseJsonSafe(jsonString, schema, options = {}) {
83
- const { allowPrototype = false, maxSize = DEFAULT_MAX_SIZE } = options;
84
- const byteLength = (0, import_buffer.BufferByteLength)(jsonString, "utf8");
85
- if (byteLength > maxSize) {
86
- throw new import_error.ErrorCtor(
87
- `JSON string exceeds maximum size limit${maxSize !== DEFAULT_MAX_SIZE ? ` of ${maxSize} bytes` : ""}`
88
- );
89
- }
90
- let parsed;
91
- try {
92
- parsed = allowPrototype ? (0, import_json.JSONParse)(jsonString) : (0, import_json.JSONParse)(jsonString, prototypePollutionReviver);
93
- } catch (e) {
94
- throw new import_error.ErrorCtor(`Failed to parse JSON: ${e}`);
95
- }
96
- if (schema) {
97
- const result = (0, import_validate.validateSchema)(schema, parsed);
98
- if (!result.ok) {
99
- const summary = result.errors.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join(", ");
100
- throw new import_error.ErrorCtor(`Validation failed: ${summary}`);
101
- }
102
- return result.value;
103
- }
104
- return parsed;
188
+ const { allowPrototype = false, maxSize = DEFAULT_MAX_SIZE } = options;
189
+ if (require_primordials_buffer.BufferByteLength(jsonString, "utf8") > maxSize) throw new require_primordials_error.ErrorCtor(`JSON string exceeds maximum size limit${maxSize !== DEFAULT_MAX_SIZE ? ` of ${maxSize} bytes` : ""}`);
190
+ let parsed;
191
+ try {
192
+ parsed = allowPrototype ? require_primordials_json.JSONParse(jsonString) : require_primordials_json.JSONParse(jsonString, prototypePollutionReviver);
193
+ } catch (e) {
194
+ throw new require_primordials_error.ErrorCtor(`Failed to parse JSON: ${e}`);
195
+ }
196
+ if (schema) {
197
+ const result = require_schema_validate.validateSchema(schema, parsed);
198
+ if (!result.ok) throw new require_primordials_error.ErrorCtor(`Validation failed: ${result.errors.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join(", ")}`);
199
+ return result.value;
200
+ }
201
+ return parsed;
105
202
  }
203
+ /**
204
+ * JSON.parse reviver that rejects prototype pollution keys at any depth.
205
+ *
206
+ * @internal
207
+ */
106
208
  function prototypePollutionReviver(key, value) {
107
- if (DANGEROUS_KEYS.has(key)) {
108
- throw new import_error.ErrorCtor(
109
- "JSON contains potentially malicious prototype pollution keys"
110
- );
111
- }
112
- return value;
209
+ if (DANGEROUS_KEYS.has(key)) throw new require_primordials_error.ErrorCtor("JSON contains potentially malicious prototype pollution keys");
210
+ return value;
113
211
  }
114
- // Annotate the CommonJS export names for ESM import in node:
115
- 0 && (module.exports = {
116
- isBuffer,
117
- isJsonPrimitive,
118
- parseJson,
119
- parseJsonSafe,
120
- prototypePollutionReviver
121
- });
212
+
213
+ //#endregion
214
+ exports.isBuffer = isBuffer;
215
+ exports.isJsonPrimitive = isJsonPrimitive;
216
+ exports.parseJson = parseJson;
217
+ exports.parseJsonSafe = parseJsonSafe;
218
+ exports.prototypePollutionReviver = prototypePollutionReviver;