@socketsecurity/lib 5.18.1 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +6 -5
  3. package/dist/abort.d.ts +3 -0
  4. package/dist/abort.js +1 -0
  5. package/dist/agent.d.ts +66 -49
  6. package/dist/agent.js +51 -50
  7. package/dist/ansi.d.ts +2 -5
  8. package/dist/ansi.js +3 -2
  9. package/dist/archives.d.ts +25 -21
  10. package/dist/archives.js +35 -34
  11. package/dist/argv/flags.d.ts +100 -91
  12. package/dist/argv/flags.js +88 -87
  13. package/dist/argv/parse.d.ts +30 -40
  14. package/dist/argv/parse.js +33 -32
  15. package/dist/arrays.d.ts +4 -8
  16. package/dist/arrays.js +1 -0
  17. package/dist/bin.d.ts +7 -5
  18. package/dist/bin.js +52 -29
  19. package/dist/cacache.d.ts +13 -12
  20. package/dist/cacache.js +9 -8
  21. package/dist/cache-with-ttl.d.ts +53 -35
  22. package/dist/cache-with-ttl.js +1 -0
  23. package/dist/colors.d.ts +5 -5
  24. package/dist/colors.js +1 -0
  25. package/dist/constants/agents.d.ts +5 -9
  26. package/dist/constants/agents.js +3 -2
  27. package/dist/constants/core.d.ts +5 -10
  28. package/dist/constants/core.js +2 -1
  29. package/dist/constants/encoding.d.ts +3 -3
  30. package/dist/constants/encoding.js +1 -0
  31. package/dist/constants/github.d.ts +3 -3
  32. package/dist/constants/github.js +1 -0
  33. package/dist/constants/licenses.d.ts +9 -2
  34. package/dist/constants/licenses.js +1 -0
  35. package/dist/constants/lifecycle-script-names.js +1 -0
  36. package/dist/constants/maintained-node-versions.d.ts +3 -0
  37. package/dist/constants/maintained-node-versions.js +1 -0
  38. package/dist/constants/node.d.ts +125 -16
  39. package/dist/constants/node.js +74 -73
  40. package/dist/constants/package-default-node-range.d.ts +3 -1
  41. package/dist/constants/package-default-node-range.js +2 -1
  42. package/dist/constants/package-default-socket-categories.d.ts +0 -1
  43. package/dist/constants/package-default-socket-categories.js +1 -0
  44. package/dist/constants/packages.d.ts +12 -17
  45. package/dist/constants/packages.js +31 -16
  46. package/dist/constants/platform.d.ts +1 -2
  47. package/dist/constants/platform.js +2 -1
  48. package/dist/constants/process.d.ts +18 -0
  49. package/dist/constants/process.js +1 -0
  50. package/dist/constants/socket.d.ts +4 -10
  51. package/dist/constants/socket.js +2 -1
  52. package/dist/constants/testing.d.ts +3 -3
  53. package/dist/constants/testing.js +1 -0
  54. package/dist/constants/time.d.ts +3 -4
  55. package/dist/constants/time.js +1 -0
  56. package/dist/constants/typescript.d.ts +10 -3
  57. package/dist/constants/typescript.js +5 -4
  58. package/dist/cover/code.d.ts +3 -0
  59. package/dist/cover/code.js +12 -12
  60. package/dist/cover/formatters.d.ts +12 -9
  61. package/dist/cover/formatters.js +19 -18
  62. package/dist/cover/type.d.ts +3 -0
  63. package/dist/cover/type.js +1 -0
  64. package/dist/cover/types.js +1 -0
  65. package/dist/debug.d.ts +32 -47
  66. package/dist/debug.js +97 -96
  67. package/dist/dlx/arborist.d.ts +134 -0
  68. package/dist/dlx/arborist.js +177 -0
  69. package/dist/dlx/binary.d.ts +25 -9
  70. package/dist/dlx/binary.js +34 -12
  71. package/dist/dlx/cache.d.ts +1 -0
  72. package/dist/dlx/cache.js +2 -1
  73. package/dist/dlx/detect.d.ts +15 -0
  74. package/dist/dlx/detect.js +28 -20
  75. package/dist/dlx/dir.d.ts +1 -11
  76. package/dist/dlx/dir.js +2 -12
  77. package/dist/dlx/integrity.d.ts +86 -0
  78. package/dist/dlx/integrity.js +112 -0
  79. package/dist/dlx/lockfile.d.ts +115 -0
  80. package/dist/dlx/lockfile.js +139 -0
  81. package/dist/dlx/manifest.d.ts +26 -1
  82. package/dist/dlx/manifest.js +9 -6
  83. package/dist/dlx/package.d.ts +58 -3
  84. package/dist/dlx/package.js +101 -74
  85. package/dist/dlx/packages.d.ts +1 -11
  86. package/dist/dlx/packages.js +3 -14
  87. package/dist/dlx/paths.d.ts +1 -0
  88. package/dist/dlx/paths.js +2 -1
  89. package/dist/effects/pulse-frames.js +1 -0
  90. package/dist/effects/text-shimmer.d.ts +13 -2
  91. package/dist/effects/text-shimmer.js +50 -46
  92. package/dist/effects/types.js +1 -0
  93. package/dist/effects/ultra.js +1 -0
  94. package/dist/env/ci.d.ts +6 -1
  95. package/dist/env/ci.js +1 -0
  96. package/dist/env/debug.d.ts +5 -1
  97. package/dist/env/debug.js +1 -0
  98. package/dist/env/github.d.ts +19 -23
  99. package/dist/env/github.js +5 -4
  100. package/dist/env/helpers.d.ts +21 -9
  101. package/dist/env/helpers.js +5 -11
  102. package/dist/env/home.d.ts +17 -4
  103. package/dist/env/home.js +2 -1
  104. package/dist/env/locale.d.ts +4 -3
  105. package/dist/env/locale.js +1 -0
  106. package/dist/env/node-auth-token.d.ts +5 -1
  107. package/dist/env/node-auth-token.js +1 -0
  108. package/dist/env/node-env.d.ts +5 -1
  109. package/dist/env/node-env.js +1 -0
  110. package/dist/env/npm.d.ts +4 -5
  111. package/dist/env/npm.js +1 -0
  112. package/dist/env/package-manager.d.ts +4 -3
  113. package/dist/env/package-manager.js +2 -1
  114. package/dist/env/path.d.ts +5 -1
  115. package/dist/env/path.js +1 -0
  116. package/dist/env/pre-commit.d.ts +5 -1
  117. package/dist/env/pre-commit.js +1 -0
  118. package/dist/env/rewire.d.ts +10 -0
  119. package/dist/env/rewire.js +7 -5
  120. package/dist/env/shell.d.ts +5 -1
  121. package/dist/env/shell.js +1 -0
  122. package/dist/env/socket-cli-shadow.d.ts +4 -5
  123. package/dist/env/socket-cli-shadow.js +1 -0
  124. package/dist/env/socket-cli.d.ts +4 -14
  125. package/dist/env/socket-cli.js +1 -0
  126. package/dist/env/socket.d.ts +6 -18
  127. package/dist/env/socket.js +4 -3
  128. package/dist/env/temp-dir.d.ts +4 -3
  129. package/dist/env/temp-dir.js +1 -0
  130. package/dist/env/term.d.ts +5 -1
  131. package/dist/env/term.js +1 -0
  132. package/dist/env/test.d.ts +4 -3
  133. package/dist/env/test.js +1 -0
  134. package/dist/env/windows.d.ts +4 -4
  135. package/dist/env/windows.js +1 -0
  136. package/dist/env/xdg.d.ts +4 -3
  137. package/dist/env/xdg.js +1 -0
  138. package/dist/env.d.ts +83 -23
  139. package/dist/env.js +112 -80
  140. package/dist/errors.js +1 -0
  141. package/dist/external/@npmcli/package-json.js +9 -3968
  142. package/dist/external/@socketregistry/packageurl-js.js +2 -2
  143. package/dist/external/debug.js +162 -328
  144. package/dist/external/external-pack.js +3 -2835
  145. package/dist/external/npm-pack.js +13939 -33342
  146. package/dist/external/zod.js +160 -7558
  147. package/dist/fs.d.ts +92 -113
  148. package/dist/fs.js +35 -35
  149. package/dist/git.d.ts +170 -164
  150. package/dist/git.js +113 -87
  151. package/dist/github.d.ts +249 -227
  152. package/dist/github.js +82 -81
  153. package/dist/globs.d.ts +31 -17
  154. package/dist/globs.js +51 -58
  155. package/dist/http-request.d.ts +99 -99
  156. package/dist/http-request.js +182 -156
  157. package/dist/ipc-cli.d.ts +28 -0
  158. package/dist/{utils/get-ipc.js → ipc-cli.js} +4 -3
  159. package/dist/ipc.d.ts +9 -299
  160. package/dist/ipc.js +18 -204
  161. package/dist/json/edit.d.ts +3 -1
  162. package/dist/json/edit.js +30 -30
  163. package/dist/json/format.d.ts +36 -36
  164. package/dist/json/format.js +22 -21
  165. package/dist/json/parse.d.ts +4 -2
  166. package/dist/json/parse.js +1 -0
  167. package/dist/json/types.js +1 -0
  168. package/dist/{links/index.d.ts → links.d.ts} +6 -2
  169. package/dist/{links/index.js → links.js} +5 -4
  170. package/dist/logger.d.ts +4 -6
  171. package/dist/logger.js +61 -53
  172. package/dist/memoization.d.ts +52 -49
  173. package/dist/memoization.js +55 -33
  174. package/dist/objects.d.ts +25 -44
  175. package/dist/objects.js +2 -1
  176. package/dist/package-extensions.d.ts +6 -0
  177. package/dist/package-extensions.js +2 -1
  178. package/dist/packages/edit.d.ts +3 -5
  179. package/dist/packages/edit.js +4 -3
  180. package/dist/packages/exports.d.ts +11 -14
  181. package/dist/packages/exports.js +11 -10
  182. package/dist/packages/isolation.d.ts +4 -0
  183. package/dist/packages/isolation.js +20 -19
  184. package/dist/packages/licenses.d.ts +3 -10
  185. package/dist/packages/licenses.js +2 -1
  186. package/dist/packages/manifest.d.ts +3 -3
  187. package/dist/packages/manifest.js +1 -0
  188. package/dist/packages/normalize.d.ts +3 -4
  189. package/dist/packages/normalize.js +1 -0
  190. package/dist/packages/operations.d.ts +3 -10
  191. package/dist/packages/operations.js +1 -0
  192. package/dist/packages/provenance.d.ts +10 -8
  193. package/dist/packages/provenance.js +55 -54
  194. package/dist/packages/specs.d.ts +3 -5
  195. package/dist/packages/specs.js +1 -0
  196. package/dist/packages/validation.d.ts +3 -3
  197. package/dist/packages/validation.js +1 -0
  198. package/dist/packages.d.ts +2 -17
  199. package/dist/packages.js +2 -1
  200. package/dist/paths/dirnames.d.ts +0 -2
  201. package/dist/paths/dirnames.js +1 -0
  202. package/dist/paths/exts.d.ts +0 -1
  203. package/dist/paths/exts.js +1 -0
  204. package/dist/paths/filenames.d.ts +0 -1
  205. package/dist/paths/filenames.js +1 -0
  206. package/dist/paths/globs.d.ts +0 -1
  207. package/dist/paths/globs.js +1 -0
  208. package/dist/paths/normalize.d.ts +115 -123
  209. package/dist/paths/normalize.js +128 -127
  210. package/dist/paths/packages.d.ts +3 -2
  211. package/dist/paths/packages.js +2 -1
  212. package/dist/paths/rewire.d.ts +9 -0
  213. package/dist/paths/rewire.js +5 -3
  214. package/dist/paths/socket.d.ts +37 -23
  215. package/dist/paths/socket.js +26 -25
  216. package/dist/performance.d.ts +87 -84
  217. package/dist/performance.js +97 -96
  218. package/dist/process-lock.d.ts +41 -1
  219. package/dist/process-lock.js +24 -17
  220. package/dist/promise-queue.d.ts +6 -0
  221. package/dist/promise-queue.js +1 -0
  222. package/dist/promises.d.ts +40 -55
  223. package/dist/promises.js +12 -11
  224. package/dist/regexps.d.ts +0 -5
  225. package/dist/regexps.js +1 -0
  226. package/dist/releases/github.d.ts +59 -63
  227. package/dist/releases/github.js +95 -100
  228. package/dist/releases/socket-btm.d.ts +9 -2
  229. package/dist/releases/socket-btm.js +32 -25
  230. package/dist/sea.d.ts +5 -0
  231. package/dist/sea.js +1 -0
  232. package/dist/shadow.d.ts +4 -0
  233. package/dist/shadow.js +1 -0
  234. package/dist/signal-exit.d.ts +7 -7
  235. package/dist/signal-exit.js +46 -45
  236. package/dist/sorts.d.ts +5 -7
  237. package/dist/sorts.js +11 -10
  238. package/dist/spawn.d.ts +96 -77
  239. package/dist/spawn.js +39 -38
  240. package/dist/spinner.d.ts +21 -22
  241. package/dist/spinner.js +15 -11
  242. package/dist/ssri.d.ts +31 -36
  243. package/dist/ssri.js +15 -14
  244. package/dist/stdio/_stream.d.ts +31 -0
  245. package/dist/stdio/_stream.js +57 -0
  246. package/dist/stdio/divider.d.ts +40 -36
  247. package/dist/stdio/divider.js +10 -9
  248. package/dist/stdio/footer.d.ts +20 -0
  249. package/dist/stdio/footer.js +12 -2
  250. package/dist/stdio/header.d.ts +4 -16
  251. package/dist/stdio/header.js +1 -9
  252. package/dist/stdio/stderr.d.ts +51 -39
  253. package/dist/stdio/stderr.js +19 -22
  254. package/dist/stdio/stdout.d.ts +54 -52
  255. package/dist/stdio/stdout.js +35 -33
  256. package/dist/streams.d.ts +4 -3
  257. package/dist/streams.js +1 -0
  258. package/dist/strings.d.ts +31 -85
  259. package/dist/strings.js +5 -49
  260. package/dist/suppress-warnings.d.ts +32 -15
  261. package/dist/suppress-warnings.js +14 -13
  262. package/dist/tables.d.ts +30 -26
  263. package/dist/tables.js +24 -23
  264. package/dist/temporary-executor.d.ts +4 -0
  265. package/dist/temporary-executor.js +1 -0
  266. package/dist/themes/context.d.ts +30 -26
  267. package/dist/themes/context.js +19 -18
  268. package/dist/themes/index.d.ts +0 -4
  269. package/dist/themes/index.js +1 -0
  270. package/dist/themes/themes.d.ts +1 -1
  271. package/dist/themes/themes.js +1 -0
  272. package/dist/themes/types.js +1 -0
  273. package/dist/themes/utils.d.ts +46 -43
  274. package/dist/themes/utils.js +45 -44
  275. package/dist/types.d.ts +48 -52
  276. package/dist/types.js +35 -35
  277. package/dist/url.d.ts +48 -53
  278. package/dist/url.js +38 -37
  279. package/dist/validation/json-parser.d.ts +19 -190
  280. package/dist/validation/json-parser.js +5 -69
  281. package/dist/validation/types.d.ts +9 -33
  282. package/dist/validation/types.js +1 -0
  283. package/dist/versions.d.ts +1 -0
  284. package/dist/versions.js +2 -1
  285. package/dist/words.d.ts +3 -6
  286. package/dist/words.js +1 -0
  287. package/dist/zod.js +1 -0
  288. package/package.json +34 -70
  289. package/dist/external/@inquirer/checkbox.js +0 -5
  290. package/dist/external/@inquirer/confirm.js +0 -5
  291. package/dist/external/@inquirer/input.js +0 -5
  292. package/dist/external/@inquirer/password.js +0 -5
  293. package/dist/external/@inquirer/search.js +0 -5
  294. package/dist/external/@inquirer/select.js +0 -5
  295. package/dist/functions.d.ts +0 -57
  296. package/dist/functions.js +0 -70
  297. package/dist/stdio/clear.d.ts +0 -140
  298. package/dist/stdio/clear.js +0 -95
  299. package/dist/stdio/mask.d.ts +0 -151
  300. package/dist/stdio/mask.js +0 -224
  301. package/dist/stdio/progress.d.ts +0 -148
  302. package/dist/stdio/progress.js +0 -212
  303. package/dist/stdio/prompts.d.ts +0 -195
  304. package/dist/stdio/prompts.js +0 -176
  305. package/dist/utils/get-ipc.d.ts +0 -15
package/dist/url.d.ts CHANGED
@@ -1,3 +1,32 @@
1
+ /**
2
+ * @fileoverview URL parsing and validation utilities.
3
+ * Provides URL validation, normalization, and parsing helpers.
4
+ */
5
+ export interface CreateRelativeUrlOptions {
6
+ base?: string;
7
+ }
8
+ export interface UrlSearchParamAsBooleanOptions {
9
+ defaultValue?: boolean;
10
+ }
11
+ export interface UrlSearchParamAsNumberOptions {
12
+ defaultValue?: number;
13
+ }
14
+ export interface UrlSearchParamAsStringOptions {
15
+ defaultValue?: string;
16
+ }
17
+ export interface UrlSearchParamsGetBooleanOptions {
18
+ defaultValue?: boolean;
19
+ }
20
+ /**
21
+ * Create a relative URL for testing.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * createRelativeUrl('/api/test') // 'api/test'
26
+ * createRelativeUrl('/api/test', { base: 'https://example.com' }) // 'https://example.com/api/test'
27
+ * ```
28
+ */
29
+ export declare function createRelativeUrl(path: string, options?: CreateRelativeUrlOptions | undefined): string;
1
30
  /**
2
31
  * Check if a value is a valid URL.
3
32
  *
@@ -8,7 +37,6 @@
8
37
  * isUrl(null) // false
9
38
  * ```
10
39
  */
11
- /*@__NO_SIDE_EFFECTS__*/
12
40
  export declare function isUrl(value: string | URL | null | undefined): boolean;
13
41
  /**
14
42
  * Parse a value as a URL.
@@ -19,7 +47,6 @@ export declare function isUrl(value: string | URL | null | undefined): boolean;
19
47
  * parseUrl('invalid') // undefined
20
48
  * ```
21
49
  */
22
- /*@__NO_SIDE_EFFECTS__*/
23
50
  export declare function parseUrl(value: string | URL): URL | undefined;
24
51
  /**
25
52
  * Convert a URL search parameter to an array.
@@ -30,11 +57,7 @@ export declare function parseUrl(value: string | URL): URL | undefined;
30
57
  * urlSearchParamAsArray(null) // []
31
58
  * ```
32
59
  */
33
- /*@__NO_SIDE_EFFECTS__*/
34
60
  export declare function urlSearchParamAsArray(value: string | null | undefined): string[];
35
- export interface UrlSearchParamAsBooleanOptions {
36
- defaultValue?: boolean;
37
- }
38
61
  /**
39
62
  * Convert a URL search parameter to a boolean.
40
63
  *
@@ -45,75 +68,47 @@ export interface UrlSearchParamAsBooleanOptions {
45
68
  * urlSearchParamAsBoolean(null) // false
46
69
  * ```
47
70
  */
48
- /*@__NO_SIDE_EFFECTS__*/
49
71
  export declare function urlSearchParamAsBoolean(value: string | null | undefined, options?: UrlSearchParamAsBooleanOptions | undefined): boolean;
50
72
  /**
51
- * Helper to get array from URLSearchParams.
52
- *
53
- * @example
54
- * ```typescript
55
- * const params = new URLSearchParams('tags=a,b,c')
56
- * urlSearchParamsGetArray(params, 'tags') // ['a', 'b', 'c']
57
- * ```
58
- */
59
- /*@__NO_SIDE_EFFECTS__*/
60
- export declare function urlSearchParamsGetArray(params: URLSearchParams | null | undefined, key: string): string[];
61
- export interface UrlSearchParamsGetBooleanOptions {
62
- defaultValue?: boolean;
63
- }
64
- /**
65
- * Helper to get boolean from URLSearchParams.
73
+ * Get number value from URLSearchParams with a default.
66
74
  *
67
75
  * @example
68
76
  * ```typescript
69
- * const params = new URLSearchParams('debug=true')
70
- * urlSearchParamsGetBoolean(params, 'debug') // true
71
- * urlSearchParamsGetBoolean(params, 'other') // false
77
+ * const params = new URLSearchParams('limit=10')
78
+ * urlSearchParamAsNumber(params, 'limit') // 10
79
+ * urlSearchParamAsNumber(params, 'other') // 0
72
80
  * ```
73
81
  */
74
- /*@__NO_SIDE_EFFECTS__*/
75
- export declare function urlSearchParamsGetBoolean(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamsGetBooleanOptions | undefined): boolean;
76
- export interface CreateRelativeUrlOptions {
77
- base?: string;
78
- }
82
+ export declare function urlSearchParamAsNumber(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamAsNumberOptions | undefined): number;
79
83
  /**
80
- * Create a relative URL for testing.
84
+ * Get string value from URLSearchParams with a default.
81
85
  *
82
86
  * @example
83
87
  * ```typescript
84
- * createRelativeUrl('/api/test') // 'api/test'
85
- * createRelativeUrl('/api/test', { base: 'https://example.com' }) // 'https://example.com/api/test'
88
+ * const params = new URLSearchParams('name=socket')
89
+ * urlSearchParamAsString(params, 'name') // 'socket'
90
+ * urlSearchParamAsString(params, 'other') // ''
86
91
  * ```
87
92
  */
88
- /*@__NO_SIDE_EFFECTS__*/
89
- export declare function createRelativeUrl(path: string, options?: CreateRelativeUrlOptions | undefined): string;
90
- export interface UrlSearchParamAsStringOptions {
91
- defaultValue?: string;
92
- }
93
+ export declare function urlSearchParamAsString(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamAsStringOptions | undefined): string;
93
94
  /**
94
- * Get string value from URLSearchParams with a default.
95
+ * Helper to get array from URLSearchParams.
95
96
  *
96
97
  * @example
97
98
  * ```typescript
98
- * const params = new URLSearchParams('name=socket')
99
- * urlSearchParamAsString(params, 'name') // 'socket'
100
- * urlSearchParamAsString(params, 'other') // ''
99
+ * const params = new URLSearchParams('tags=a,b,c')
100
+ * urlSearchParamsGetArray(params, 'tags') // ['a', 'b', 'c']
101
101
  * ```
102
102
  */
103
- /*@__NO_SIDE_EFFECTS__*/
104
- export declare function urlSearchParamAsString(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamAsStringOptions | undefined): string;
105
- export interface UrlSearchParamAsNumberOptions {
106
- defaultValue?: number;
107
- }
103
+ export declare function urlSearchParamsGetArray(params: URLSearchParams | null | undefined, key: string): string[];
108
104
  /**
109
- * Get number value from URLSearchParams with a default.
105
+ * Helper to get boolean from URLSearchParams.
110
106
  *
111
107
  * @example
112
108
  * ```typescript
113
- * const params = new URLSearchParams('limit=10')
114
- * urlSearchParamAsNumber(params, 'limit') // 10
115
- * urlSearchParamAsNumber(params, 'other') // 0
109
+ * const params = new URLSearchParams('debug=true')
110
+ * urlSearchParamsGetBoolean(params, 'debug') // true
111
+ * urlSearchParamsGetBoolean(params, 'other') // false
116
112
  * ```
117
113
  */
118
- /*@__NO_SIDE_EFFECTS__*/
119
- export declare function urlSearchParamAsNumber(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamAsNumberOptions | undefined): number;
114
+ export declare function urlSearchParamsGetBoolean(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamsGetBooleanOptions | undefined): boolean;
package/dist/url.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  /* Socket Lib - Built with esbuild */
3
+ "use strict";
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -33,6 +34,22 @@ module.exports = __toCommonJS(url_exports);
33
34
  const BooleanCtor = Boolean;
34
35
  const UrlCtor = URL;
35
36
  // @__NO_SIDE_EFFECTS__
37
+ function createRelativeUrl(path, options) {
38
+ const { base = "" } = {
39
+ __proto__: null,
40
+ ...options
41
+ };
42
+ const relativePath = path.replace(/^\//, "");
43
+ if (base) {
44
+ let baseUrl = base;
45
+ if (!baseUrl.endsWith("/")) {
46
+ baseUrl += "/";
47
+ }
48
+ return baseUrl + relativePath;
49
+ }
50
+ return relativePath;
51
+ }
52
+ // @__NO_SIDE_EFFECTS__
36
53
  function isUrl(value) {
37
54
  return (typeof value === "string" && value !== "" || value !== null && typeof value === "object") && !!/* @__PURE__ */ parseUrl(value);
38
55
  }
@@ -64,44 +81,19 @@ function urlSearchParamAsBoolean(value, options) {
64
81
  return !!value;
65
82
  }
66
83
  // @__NO_SIDE_EFFECTS__
67
- function urlSearchParamsGetArray(params, key) {
68
- if (params && typeof params.getAll === "function") {
69
- const values = params.getAll(key);
70
- const firstValue = values[0];
71
- if (values.length === 1 && firstValue && firstValue.includes(",")) {
72
- return /* @__PURE__ */ urlSearchParamAsArray(firstValue);
73
- }
74
- return values;
75
- }
76
- return [];
77
- }
78
- // @__NO_SIDE_EFFECTS__
79
- function urlSearchParamsGetBoolean(params, key, options) {
80
- const { defaultValue = false } = {
84
+ function urlSearchParamAsNumber(params, key, options) {
85
+ const { defaultValue = 0 } = {
81
86
  __proto__: null,
82
87
  ...options
83
88
  };
84
89
  if (params && typeof params.get === "function") {
85
90
  const value = params.get(key);
86
- return value !== null ? /* @__PURE__ */ urlSearchParamAsBoolean(value, { defaultValue }) : defaultValue;
87
- }
88
- return defaultValue;
89
- }
90
- // @__NO_SIDE_EFFECTS__
91
- function createRelativeUrl(path, options) {
92
- const { base = "" } = {
93
- __proto__: null,
94
- ...options
95
- };
96
- const relativePath = path.replace(/^\//, "");
97
- if (base) {
98
- let baseUrl = base;
99
- if (!baseUrl.endsWith("/")) {
100
- baseUrl += "/";
91
+ if (value !== null) {
92
+ const num = Number(value);
93
+ return !Number.isNaN(num) ? num : defaultValue;
101
94
  }
102
- return baseUrl + relativePath;
103
95
  }
104
- return relativePath;
96
+ return defaultValue;
105
97
  }
106
98
  // @__NO_SIDE_EFFECTS__
107
99
  function urlSearchParamAsString(params, key, options) {
@@ -116,17 +108,26 @@ function urlSearchParamAsString(params, key, options) {
116
108
  return defaultValue;
117
109
  }
118
110
  // @__NO_SIDE_EFFECTS__
119
- function urlSearchParamAsNumber(params, key, options) {
120
- const { defaultValue = 0 } = {
111
+ function urlSearchParamsGetArray(params, key) {
112
+ if (params && typeof params.getAll === "function") {
113
+ const values = params.getAll(key);
114
+ const firstValue = values[0];
115
+ if (values.length === 1 && firstValue && firstValue.includes(",")) {
116
+ return /* @__PURE__ */ urlSearchParamAsArray(firstValue);
117
+ }
118
+ return values;
119
+ }
120
+ return [];
121
+ }
122
+ // @__NO_SIDE_EFFECTS__
123
+ function urlSearchParamsGetBoolean(params, key, options) {
124
+ const { defaultValue = false } = {
121
125
  __proto__: null,
122
126
  ...options
123
127
  };
124
128
  if (params && typeof params.get === "function") {
125
129
  const value = params.get(key);
126
- if (value !== null) {
127
- const num = Number(value);
128
- return !Number.isNaN(num) ? num : defaultValue;
129
- }
130
+ return value !== null ? /* @__PURE__ */ urlSearchParamAsBoolean(value, { defaultValue }) : defaultValue;
130
131
  }
131
132
  return defaultValue;
132
133
  }
@@ -1,21 +1,23 @@
1
1
  /**
2
2
  * @fileoverview Safe JSON parsing with validation and security controls.
3
- * Provides protection against prototype pollution, size limits, and schema validation.
3
+ * Provides protection against prototype pollution, size limits, and schema
4
+ * validation.
4
5
  *
5
6
  * Key Features:
6
- * - Prototype pollution protection: Blocks `__proto__`, `constructor`, and `prototype` keys
7
- * - Size limits: Configurable maximum JSON string size (default 10MB)
8
- * - Schema validation: Optional Zod-compatible schema validation
9
- * - NDJSON support: Parse newline-delimited JSON streams
10
- * - Memory safety: Prevents memory exhaustion attacks
7
+ * - Prototype pollution protection: Blocks `__proto__`, `constructor`, and
8
+ * `prototype` keys via JSON.parse reviver at any depth.
9
+ * - Size limits: Configurable maximum JSON string size (default 10MB).
10
+ * - Schema validation: Optional Zod-compatible schema validation.
11
+ * - Memory safety: Prevents memory exhaustion attacks.
11
12
  */
12
- import type { JsonParseOptions, JsonParseResult, Schema } from './types';
13
+ import type { SafeJsonParseOptions, Schema } from './types';
13
14
  /**
14
15
  * Safely parse JSON with optional schema validation and security controls.
15
16
  * Throws errors on parse failures, validation failures, or security violations.
16
17
  *
17
- * This is the recommended method for parsing untrusted JSON input as it provides
18
- * multiple layers of security including prototype pollution protection and size limits.
18
+ * This is the recommended method for parsing untrusted JSON input as it
19
+ * provides multiple layers of security including prototype pollution
20
+ * protection and size limits.
19
21
  *
20
22
  * @template T - The expected type of the parsed data
21
23
  * @param jsonString - The JSON string to parse
@@ -23,10 +25,11 @@ import type { JsonParseOptions, JsonParseResult, Schema } from './types';
23
25
  * @param options - Parsing options for security and behavior control
24
26
  * @returns The parsed and validated data
25
27
  *
26
- * @throws {Error} When JSON string exceeds `maxSize`
27
- * @throws {Error} When JSON parsing fails
28
- * @throws {Error} When prototype pollution keys are detected (unless `allowPrototype` is `true`)
29
- * @throws {Error} When schema validation fails
28
+ * @throws {Error} When JSON string exceeds `maxSize`.
29
+ * @throws {Error} When JSON parsing fails.
30
+ * @throws {Error} When prototype pollution keys are detected (unless
31
+ * `allowPrototype` is `true`).
32
+ * @throws {Error} When schema validation fails.
30
33
  *
31
34
  * @example
32
35
  * ```ts
@@ -46,184 +49,10 @@ import type { JsonParseOptions, JsonParseResult, Schema } from './types';
46
49
  * maxSize: 1024 * 1024 // 1MB
47
50
  * })
48
51
  *
49
- * // Allow prototype keys (dangerous - only for trusted sources)
50
- * const data = safeJsonParse(jsonString, undefined, {
52
+ * // Allow prototype keys (DANGEROUS only for trusted sources)
53
+ * const data = safeJsonParse('{"__proto__": {}}', undefined, {
51
54
  * allowPrototype: true
52
55
  * })
53
56
  * ```
54
57
  */
55
- export declare function safeJsonParse<T = unknown>(jsonString: string, schema?: Schema<T> | undefined, options?: JsonParseOptions): T;
56
- /**
57
- * Attempt to parse JSON, returning `undefined` on any error.
58
- * This is a non-throwing wrapper around `safeJsonParse` for cases where
59
- * you want to gracefully handle parse failures without try-catch blocks.
60
- *
61
- * Use this when parsing is optional or you have a fallback strategy.
62
- * For critical parsing where you need error details, use `safeJsonParse` or `parseJsonWithResult`.
63
- *
64
- * @template T - The expected type of the parsed data
65
- * @param jsonString - The JSON string to parse
66
- * @param schema - Optional Zod-compatible schema for validation
67
- * @param options - Parsing options for security and behavior control
68
- * @returns The parsed data on success, or `undefined` on any error
69
- *
70
- * @example
71
- * ```ts
72
- * // Graceful fallback to default
73
- * const config = tryJsonParse<Config>(jsonString) ?? defaultConfig
74
- *
75
- * // Optional parsing
76
- * const data = tryJsonParse(possiblyInvalidJson)
77
- * if (data) {
78
- * console.log('Parsed successfully:', data)
79
- * }
80
- *
81
- * // With schema validation
82
- * const user = tryJsonParse(jsonString, userSchema)
83
- * ```
84
- */
85
- export declare function tryJsonParse<T = unknown>(jsonString: string, schema?: Schema<T> | undefined, options?: JsonParseOptions | undefined): T | undefined;
86
- /**
87
- * Parse JSON and return a discriminated union result.
88
- * Never throws - always returns a result object with success/failure information.
89
- *
90
- * This is ideal when you need detailed error messages and type-safe result handling.
91
- * The discriminated union allows TypeScript to narrow types based on the `success` flag.
92
- *
93
- * @template T - The expected type of the parsed data
94
- * @param jsonString - The JSON string to parse
95
- * @param schema - Optional Zod-compatible schema for validation
96
- * @param options - Parsing options for security and behavior control
97
- * @returns Result object with either `{success: true, data}` or `{success: false, error}`
98
- *
99
- * @example
100
- * ```ts
101
- * // Type-safe error handling
102
- * const result = parseJsonWithResult<User>(jsonString, userSchema)
103
- *
104
- * if (result.success) {
105
- * // TypeScript knows result.data is available
106
- * console.log(`User: ${result.data.name}`)
107
- * } else {
108
- * // TypeScript knows result.error is available
109
- * console.error(`Parse failed: ${result.error}`)
110
- * }
111
- *
112
- * // Early return pattern
113
- * const result = parseJsonWithResult(jsonString)
114
- * if (!result.success) {
115
- * logger.error(result.error)
116
- * return
117
- * }
118
- * processData(result.data)
119
- * ```
120
- */
121
- export declare function parseJsonWithResult<T = unknown>(jsonString: string, schema?: Schema<T> | undefined, options?: JsonParseOptions | undefined): JsonParseResult<T>;
122
- /**
123
- * Create a reusable JSON parser with pre-configured schema and options.
124
- * Useful for parsing multiple JSON strings with the same validation rules.
125
- *
126
- * The returned parser function can accept per-call options that override the defaults.
127
- * This factory pattern reduces repetition when parsing many similar JSON payloads.
128
- *
129
- * @template T - The expected type of the parsed data
130
- * @param schema - Optional Zod-compatible schema for validation
131
- * @param defaultOptions - Default parsing options applied to all parse calls
132
- * @returns A parser function that accepts a JSON string and optional per-call options
133
- *
134
- * @example
135
- * ```ts
136
- * // Create a parser for API responses
137
- * import { z } from 'zod'
138
- * const apiResponseSchema = z.object({
139
- * status: z.string(),
140
- * data: z.unknown()
141
- * })
142
- *
143
- * const parseApiResponse = createJsonParser(apiResponseSchema, {
144
- * maxSize: 5 * 1024 * 1024 // 5MB limit for API responses
145
- * })
146
- *
147
- * // Use the parser multiple times
148
- * const response1 = parseApiResponse(json1)
149
- * const response2 = parseApiResponse(json2)
150
- *
151
- * // Override options for specific calls
152
- * const response3 = parseApiResponse(json3, { maxSize: 10 * 1024 * 1024 })
153
- * ```
154
- */
155
- export declare function createJsonParser<T = unknown>(schema?: Schema<T> | undefined, defaultOptions?: JsonParseOptions | undefined): (jsonString: string, options?: JsonParseOptions) => T;
156
- /**
157
- * Parse newline-delimited JSON (NDJSON) into an array.
158
- * Each line is treated as a separate JSON object. Empty lines are skipped.
159
- *
160
- * NDJSON format is commonly used for streaming logs, bulk data transfers,
161
- * and event streams where each line represents a complete JSON document.
162
- *
163
- * @template T - The expected type of each parsed JSON object
164
- * @param ndjson - Newline-delimited JSON string (supports both `\n` and `\r\n`)
165
- * @param schema - Optional Zod-compatible schema for validation of each line
166
- * @param options - Parsing options applied to each line
167
- * @returns Array of parsed objects, one per non-empty line
168
- *
169
- * @throws {Error} When any line fails to parse (includes line number in error message)
170
- *
171
- * @example
172
- * ```ts
173
- * // Parse NDJSON logs
174
- * const ndjsonString = `
175
- * {"level":"info","message":"Server started"}
176
- * {"level":"error","message":"Connection failed"}
177
- * {"level":"info","message":"Retrying..."}
178
- * `
179
- * const logs = parseNdjson<LogEntry>(ndjsonString, logSchema)
180
- * console.log(logs.length) // 3
181
- *
182
- * // Parse with size limits per line
183
- * const entries = parseNdjson(ndjson, undefined, { maxSize: 1024 })
184
- *
185
- * // Empty lines are automatically skipped
186
- * const data = parseNdjson('{"a":1}\n\n{"b":2}\n') // 2 objects
187
- * ```
188
- */
189
- export declare function parseNdjson<T = unknown>(ndjson: string, schema?: Schema<T> | undefined, options?: JsonParseOptions | undefined): T[];
190
- /**
191
- * Stream-parse newline-delimited JSON (NDJSON) using a generator.
192
- * Yields one parsed object at a time, enabling memory-efficient processing of large NDJSON files.
193
- *
194
- * Unlike `parseNdjson` which loads all results into memory, this generator allows
195
- * processing each line individually, making it ideal for large datasets or streaming scenarios.
196
- *
197
- * @template T - The expected type of each parsed JSON object
198
- * @param ndjson - Newline-delimited JSON string (supports both `\n` and `\r\n`)
199
- * @param schema - Optional Zod-compatible schema for validation of each line
200
- * @param options - Parsing options applied to each line
201
- * @yields Parsed objects one at a time as the generator iterates
202
- *
203
- * @throws {Error} When any line fails to parse (includes line number in error message)
204
- *
205
- * @example
206
- * ```ts
207
- * // Memory-efficient processing of large NDJSON files
208
- * const ndjsonString = readLargeFile('logs.ndjson')
209
- *
210
- * for (const log of streamNdjson<LogEntry>(ndjsonString, logSchema)) {
211
- * if (log.level === 'error') {
212
- * console.error('Error found:', log.message)
213
- * }
214
- * }
215
- *
216
- * // Collect filtered results without loading everything
217
- * const errors = [...streamNdjson(ndjson)]
218
- * .filter(log => log.level === 'error')
219
- *
220
- * // Early termination when condition is met
221
- * for (const entry of streamNdjson(ndjson)) {
222
- * if (entry.id === targetId) {
223
- * processEntry(entry)
224
- * break // Stop processing remaining lines
225
- * }
226
- * }
227
- * ```
228
- */
229
- export declare function streamNdjson<T = unknown>(ndjson: string, schema?: Schema<T> | undefined, options?: JsonParseOptions | undefined): Generator<T, void, unknown>;
58
+ export declare function safeJsonParse<T = unknown>(jsonString: string, schema?: Schema<T> | undefined, options?: SafeJsonParseOptions): T;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  /* Socket Lib - Built with esbuild */
3
+ "use strict";
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -19,12 +20,7 @@ var __copyProps = (to, from, except, desc) => {
19
20
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
21
  var json_parser_exports = {};
21
22
  __export(json_parser_exports, {
22
- createJsonParser: () => createJsonParser,
23
- parseJsonWithResult: () => parseJsonWithResult,
24
- parseNdjson: () => parseNdjson,
25
- safeJsonParse: () => safeJsonParse,
26
- streamNdjson: () => streamNdjson,
27
- tryJsonParse: () => tryJsonParse
23
+ safeJsonParse: () => safeJsonParse
28
24
  });
29
25
  module.exports = __toCommonJS(json_parser_exports);
30
26
  const DANGEROUS_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
@@ -53,75 +49,15 @@ function safeJsonParse(jsonString, schema, options = {}) {
53
49
  if (schema) {
54
50
  const result = schema.safeParse(parsed);
55
51
  if (!result.success) {
56
- const errors = result.error.issues.map(
57
- (issue) => `${issue.path.join(".")}: ${issue.message}`
58
- ).join(", ");
52
+ const error = result.error;
53
+ const errors = error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join(", ");
59
54
  throw new Error(`Validation failed: ${errors}`);
60
55
  }
61
56
  return result.data;
62
57
  }
63
58
  return parsed;
64
59
  }
65
- function tryJsonParse(jsonString, schema, options) {
66
- try {
67
- return safeJsonParse(jsonString, schema, options);
68
- } catch {
69
- return void 0;
70
- }
71
- }
72
- function parseJsonWithResult(jsonString, schema, options) {
73
- try {
74
- const data = safeJsonParse(jsonString, schema, options);
75
- return { success: true, data };
76
- } catch (error) {
77
- const message = error instanceof Error ? error.message : "Unknown error";
78
- return { success: false, error: message };
79
- }
80
- }
81
- function createJsonParser(schema, defaultOptions) {
82
- return (jsonString, options) => {
83
- return safeJsonParse(jsonString, schema, { ...defaultOptions, ...options });
84
- };
85
- }
86
- function parseNdjson(ndjson, schema, options) {
87
- const results = [];
88
- const lines = ndjson.split(/\r?\n/);
89
- for (let i = 0; i < lines.length; i++) {
90
- const line = lines[i]?.trim();
91
- if (!line || line === "") {
92
- continue;
93
- }
94
- try {
95
- const parsed = safeJsonParse(line, schema, options);
96
- results.push(parsed);
97
- } catch (error) {
98
- const message = error instanceof Error ? error.message : String(error);
99
- throw new Error(`Failed to parse NDJSON at line ${i + 1}: ${message}`);
100
- }
101
- }
102
- return results;
103
- }
104
- function* streamNdjson(ndjson, schema, options) {
105
- const lines = ndjson.split(/\r?\n/);
106
- for (let i = 0; i < lines.length; i++) {
107
- const line = lines[i]?.trim();
108
- if (!line || line === "") {
109
- continue;
110
- }
111
- try {
112
- yield safeJsonParse(line, schema, options);
113
- } catch (error) {
114
- const message = error instanceof Error ? error.message : String(error);
115
- throw new Error(`Failed to parse NDJSON at line ${i + 1}: ${message}`);
116
- }
117
- }
118
- }
119
60
  // Annotate the CommonJS export names for ESM import in node:
120
61
  0 && (module.exports = {
121
- createJsonParser,
122
- parseJsonWithResult,
123
- parseNdjson,
124
- safeJsonParse,
125
- streamNdjson,
126
- tryJsonParse
62
+ safeJsonParse
127
63
  });