@quantiya/codevibe-claude-plugin 2.0.26 → 2.0.27

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 (299) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/node_modules/@quantiya/codevibe-core/dist/__tests__/terminal-menu.test.d.ts +1 -0
  3. package/node_modules/@quantiya/codevibe-core/dist/index.d.ts +2 -0
  4. package/node_modules/@quantiya/codevibe-core/dist/index.js +321 -317
  5. package/node_modules/@quantiya/codevibe-core/dist/prompt-parser.d.ts +3 -1
  6. package/node_modules/@quantiya/codevibe-core/dist/terminal-menu.d.ts +22 -0
  7. package/node_modules/@quantiya/codevibe-core/package.json +1 -1
  8. package/node_modules/es-toolkit/CHANGELOG.md +38 -3
  9. package/node_modules/es-toolkit/dist/browser.global.js +4 -4
  10. package/node_modules/es-toolkit/dist/compat/array/differenceWith.js +2 -1
  11. package/node_modules/es-toolkit/dist/compat/array/differenceWith.mjs +2 -1
  12. package/node_modules/es-toolkit/dist/compat/array/findLastIndex.js +5 -3
  13. package/node_modules/es-toolkit/dist/compat/array/findLastIndex.mjs +5 -3
  14. package/node_modules/es-toolkit/dist/compat/array/sortedIndexBy.js +1 -1
  15. package/node_modules/es-toolkit/dist/compat/array/sortedIndexBy.mjs +1 -1
  16. package/node_modules/es-toolkit/dist/compat/array/without.js +8 -2
  17. package/node_modules/es-toolkit/dist/compat/array/without.mjs +8 -2
  18. package/node_modules/es-toolkit/dist/compat/array/xorWith.js +4 -6
  19. package/node_modules/es-toolkit/dist/compat/array/xorWith.mjs +4 -6
  20. package/node_modules/es-toolkit/dist/compat/compat.js +1 -1
  21. package/node_modules/es-toolkit/dist/compat/compat.mjs +1 -1
  22. package/node_modules/es-toolkit/dist/compat/function/debounce.js +1 -1
  23. package/node_modules/es-toolkit/dist/compat/function/debounce.mjs +1 -1
  24. package/node_modules/es-toolkit/dist/compat/index.js +1 -1
  25. package/node_modules/es-toolkit/dist/compat/index.mjs +1 -1
  26. package/node_modules/es-toolkit/dist/compat/object/has.js +3 -2
  27. package/node_modules/es-toolkit/dist/compat/object/has.mjs +3 -2
  28. package/node_modules/es-toolkit/dist/compat/object/hasIn.js +3 -2
  29. package/node_modules/es-toolkit/dist/compat/object/hasIn.mjs +3 -2
  30. package/node_modules/es-toolkit/dist/compat/object/mergeWith.js +1 -1
  31. package/node_modules/es-toolkit/dist/compat/object/mergeWith.mjs +1 -1
  32. package/node_modules/es-toolkit/dist/compat/object/omitBy.js +1 -1
  33. package/node_modules/es-toolkit/dist/compat/object/omitBy.mjs +1 -1
  34. package/node_modules/es-toolkit/dist/compat/object/pickBy.js +1 -1
  35. package/node_modules/es-toolkit/dist/compat/object/pickBy.mjs +1 -1
  36. package/node_modules/es-toolkit/dist/compat/util/toString.js +3 -1
  37. package/node_modules/es-toolkit/dist/compat/util/toString.mjs +3 -1
  38. package/node_modules/es-toolkit/dist/fp/flowAsync.d.mts +213 -0
  39. package/node_modules/es-toolkit/dist/fp/flowAsync.d.ts +213 -0
  40. package/node_modules/es-toolkit/dist/fp/flowAsync.js +37 -0
  41. package/node_modules/es-toolkit/dist/fp/flowAsync.mjs +37 -0
  42. package/node_modules/es-toolkit/dist/fp/index.d.mts +2 -1
  43. package/node_modules/es-toolkit/dist/fp/index.d.ts +2 -1
  44. package/node_modules/es-toolkit/dist/fp/index.js +2 -0
  45. package/node_modules/es-toolkit/dist/fp/index.mjs +2 -1
  46. package/node_modules/es-toolkit/dist/fp/iterator/cartesianProduct.d.mts +23 -0
  47. package/node_modules/es-toolkit/dist/fp/iterator/cartesianProduct.d.ts +23 -0
  48. package/node_modules/es-toolkit/dist/fp/iterator/cartesianProduct.js +28 -0
  49. package/node_modules/es-toolkit/dist/fp/iterator/cartesianProduct.mjs +28 -0
  50. package/node_modules/es-toolkit/dist/fp/iterator/chunk.d.mts +19 -0
  51. package/node_modules/es-toolkit/dist/fp/iterator/chunk.d.ts +19 -0
  52. package/node_modules/es-toolkit/dist/fp/iterator/chunk.js +24 -0
  53. package/node_modules/es-toolkit/dist/fp/iterator/chunk.mjs +24 -0
  54. package/node_modules/es-toolkit/dist/fp/iterator/count.d.mts +20 -0
  55. package/node_modules/es-toolkit/dist/fp/iterator/count.d.ts +20 -0
  56. package/node_modules/es-toolkit/dist/fp/iterator/count.js +25 -0
  57. package/node_modules/es-toolkit/dist/fp/iterator/count.mjs +25 -0
  58. package/node_modules/es-toolkit/dist/fp/iterator/drop.d.mts +20 -0
  59. package/node_modules/es-toolkit/dist/fp/iterator/drop.d.ts +20 -0
  60. package/node_modules/es-toolkit/dist/fp/iterator/drop.js +24 -0
  61. package/node_modules/es-toolkit/dist/fp/iterator/drop.mjs +24 -0
  62. package/node_modules/es-toolkit/dist/fp/iterator/dropWhile.d.mts +18 -0
  63. package/node_modules/es-toolkit/dist/fp/iterator/dropWhile.d.ts +18 -0
  64. package/node_modules/es-toolkit/dist/fp/iterator/dropWhile.js +23 -0
  65. package/node_modules/es-toolkit/dist/fp/iterator/dropWhile.mjs +23 -0
  66. package/node_modules/es-toolkit/dist/fp/iterator/every.d.mts +20 -0
  67. package/node_modules/es-toolkit/dist/fp/iterator/every.d.ts +20 -0
  68. package/node_modules/es-toolkit/dist/fp/iterator/every.js +24 -0
  69. package/node_modules/es-toolkit/dist/fp/iterator/every.mjs +24 -0
  70. package/node_modules/es-toolkit/dist/fp/iterator/filter.d.mts +37 -0
  71. package/node_modules/es-toolkit/dist/fp/iterator/filter.d.ts +37 -0
  72. package/node_modules/es-toolkit/dist/fp/iterator/filter.js +8 -0
  73. package/node_modules/es-toolkit/dist/fp/iterator/filter.mjs +8 -0
  74. package/node_modules/es-toolkit/dist/fp/iterator/find.d.mts +20 -0
  75. package/node_modules/es-toolkit/dist/fp/iterator/find.d.ts +20 -0
  76. package/node_modules/es-toolkit/dist/fp/iterator/find.js +24 -0
  77. package/node_modules/es-toolkit/dist/fp/iterator/find.mjs +24 -0
  78. package/node_modules/es-toolkit/dist/fp/iterator/flatMap.d.mts +20 -0
  79. package/node_modules/es-toolkit/dist/fp/iterator/flatMap.d.ts +20 -0
  80. package/node_modules/es-toolkit/dist/fp/iterator/flatMap.js +24 -0
  81. package/node_modules/es-toolkit/dist/fp/iterator/flatMap.mjs +24 -0
  82. package/node_modules/es-toolkit/dist/fp/iterator/forEach.d.mts +22 -0
  83. package/node_modules/es-toolkit/dist/fp/iterator/forEach.d.ts +22 -0
  84. package/node_modules/es-toolkit/dist/fp/iterator/forEach.js +26 -0
  85. package/node_modules/es-toolkit/dist/fp/iterator/forEach.mjs +26 -0
  86. package/node_modules/es-toolkit/dist/fp/iterator/head.d.mts +19 -0
  87. package/node_modules/es-toolkit/dist/fp/iterator/head.d.ts +19 -0
  88. package/node_modules/es-toolkit/dist/fp/iterator/head.js +24 -0
  89. package/node_modules/es-toolkit/dist/fp/iterator/head.mjs +24 -0
  90. package/node_modules/es-toolkit/dist/fp/iterator/index.d.mts +22 -0
  91. package/node_modules/es-toolkit/dist/fp/iterator/index.d.ts +22 -0
  92. package/node_modules/es-toolkit/dist/fp/iterator/index.js +43 -0
  93. package/node_modules/es-toolkit/dist/fp/iterator/index.mjs +22 -0
  94. package/node_modules/es-toolkit/dist/fp/iterator/map.d.mts +20 -0
  95. package/node_modules/es-toolkit/dist/fp/iterator/map.d.ts +20 -0
  96. package/node_modules/es-toolkit/dist/fp/iterator/map.js +24 -0
  97. package/node_modules/es-toolkit/dist/fp/iterator/map.mjs +24 -0
  98. package/node_modules/es-toolkit/dist/fp/iterator/partition.d.mts +22 -0
  99. package/node_modules/es-toolkit/dist/fp/iterator/partition.d.ts +22 -0
  100. package/node_modules/es-toolkit/dist/fp/iterator/partition.js +27 -0
  101. package/node_modules/es-toolkit/dist/fp/iterator/partition.mjs +27 -0
  102. package/node_modules/es-toolkit/dist/fp/iterator/reduce.d.mts +24 -0
  103. package/node_modules/es-toolkit/dist/fp/iterator/reduce.d.ts +24 -0
  104. package/node_modules/es-toolkit/dist/fp/iterator/reduce.js +28 -0
  105. package/node_modules/es-toolkit/dist/fp/iterator/reduce.mjs +28 -0
  106. package/node_modules/es-toolkit/dist/fp/iterator/scan.d.mts +21 -0
  107. package/node_modules/es-toolkit/dist/fp/iterator/scan.d.ts +21 -0
  108. package/node_modules/es-toolkit/dist/fp/iterator/scan.js +26 -0
  109. package/node_modules/es-toolkit/dist/fp/iterator/scan.mjs +26 -0
  110. package/node_modules/es-toolkit/dist/fp/iterator/some.d.mts +20 -0
  111. package/node_modules/es-toolkit/dist/fp/iterator/some.d.ts +20 -0
  112. package/node_modules/es-toolkit/dist/fp/iterator/some.js +24 -0
  113. package/node_modules/es-toolkit/dist/fp/iterator/some.mjs +24 -0
  114. package/node_modules/es-toolkit/dist/fp/iterator/take.d.mts +21 -0
  115. package/node_modules/es-toolkit/dist/fp/iterator/take.d.ts +21 -0
  116. package/node_modules/es-toolkit/dist/fp/iterator/take.js +25 -0
  117. package/node_modules/es-toolkit/dist/fp/iterator/take.mjs +25 -0
  118. package/node_modules/es-toolkit/dist/fp/iterator/takeWhile.d.mts +19 -0
  119. package/node_modules/es-toolkit/dist/fp/iterator/takeWhile.d.ts +19 -0
  120. package/node_modules/es-toolkit/dist/fp/iterator/takeWhile.js +24 -0
  121. package/node_modules/es-toolkit/dist/fp/iterator/takeWhile.mjs +24 -0
  122. package/node_modules/es-toolkit/dist/fp/iterator/toArray.d.mts +21 -0
  123. package/node_modules/es-toolkit/dist/fp/iterator/toArray.d.ts +21 -0
  124. package/node_modules/es-toolkit/dist/fp/iterator/toArray.js +25 -0
  125. package/node_modules/es-toolkit/dist/fp/iterator/toArray.mjs +25 -0
  126. package/node_modules/es-toolkit/dist/fp/iterator/uniqBy.d.mts +20 -0
  127. package/node_modules/es-toolkit/dist/fp/iterator/uniqBy.d.ts +20 -0
  128. package/node_modules/es-toolkit/dist/fp/iterator/uniqBy.js +25 -0
  129. package/node_modules/es-toolkit/dist/fp/iterator/uniqBy.mjs +25 -0
  130. package/node_modules/es-toolkit/dist/fp/iterator/zip.d.mts +20 -0
  131. package/node_modules/es-toolkit/dist/fp/iterator/zip.d.ts +20 -0
  132. package/node_modules/es-toolkit/dist/fp/iterator/zip.js +25 -0
  133. package/node_modules/es-toolkit/dist/fp/iterator/zip.mjs +25 -0
  134. package/node_modules/es-toolkit/dist/index.d.mts +3 -1
  135. package/node_modules/es-toolkit/dist/index.d.ts +3 -1
  136. package/node_modules/es-toolkit/dist/index.js +4 -0
  137. package/node_modules/es-toolkit/dist/index.mjs +3 -1
  138. package/node_modules/es-toolkit/dist/iterator/_internal/iterator.js +74 -0
  139. package/node_modules/es-toolkit/dist/iterator/_internal/iterator.mjs +74 -0
  140. package/node_modules/es-toolkit/dist/iterator/cartesianProduct.d.mts +33 -0
  141. package/node_modules/es-toolkit/dist/iterator/cartesianProduct.d.ts +33 -0
  142. package/node_modules/es-toolkit/dist/iterator/cartesianProduct.js +95 -0
  143. package/node_modules/es-toolkit/dist/iterator/cartesianProduct.mjs +95 -0
  144. package/node_modules/es-toolkit/dist/iterator/chunk.d.mts +21 -0
  145. package/node_modules/es-toolkit/dist/iterator/chunk.d.ts +21 -0
  146. package/node_modules/es-toolkit/dist/iterator/chunk.js +40 -0
  147. package/node_modules/es-toolkit/dist/iterator/chunk.mjs +40 -0
  148. package/node_modules/es-toolkit/dist/iterator/count.d.mts +18 -0
  149. package/node_modules/es-toolkit/dist/iterator/count.d.ts +18 -0
  150. package/node_modules/es-toolkit/dist/iterator/count.js +26 -0
  151. package/node_modules/es-toolkit/dist/iterator/count.mjs +26 -0
  152. package/node_modules/es-toolkit/dist/iterator/dropWhile.d.mts +20 -0
  153. package/node_modules/es-toolkit/dist/iterator/dropWhile.d.ts +20 -0
  154. package/node_modules/es-toolkit/dist/iterator/dropWhile.js +52 -0
  155. package/node_modules/es-toolkit/dist/iterator/dropWhile.mjs +52 -0
  156. package/node_modules/es-toolkit/dist/iterator/head.d.mts +21 -0
  157. package/node_modules/es-toolkit/dist/iterator/head.d.ts +21 -0
  158. package/node_modules/es-toolkit/dist/iterator/head.js +26 -0
  159. package/node_modules/es-toolkit/dist/iterator/head.mjs +26 -0
  160. package/node_modules/es-toolkit/dist/iterator/index.d.mts +13 -0
  161. package/node_modules/es-toolkit/dist/iterator/index.d.ts +13 -0
  162. package/node_modules/es-toolkit/dist/iterator/index.js +25 -0
  163. package/node_modules/es-toolkit/dist/iterator/index.mjs +13 -0
  164. package/node_modules/es-toolkit/dist/iterator/iterate.d.mts +20 -0
  165. package/node_modules/es-toolkit/dist/iterator/iterate.d.ts +20 -0
  166. package/node_modules/es-toolkit/dist/iterator/iterate.js +32 -0
  167. package/node_modules/es-toolkit/dist/iterator/iterate.mjs +32 -0
  168. package/node_modules/es-toolkit/dist/iterator/partition.d.mts +18 -0
  169. package/node_modules/es-toolkit/dist/iterator/partition.d.ts +18 -0
  170. package/node_modules/es-toolkit/dist/iterator/partition.js +36 -0
  171. package/node_modules/es-toolkit/dist/iterator/partition.mjs +36 -0
  172. package/node_modules/es-toolkit/dist/iterator/range.d.mts +42 -0
  173. package/node_modules/es-toolkit/dist/iterator/range.d.ts +42 -0
  174. package/node_modules/es-toolkit/dist/iterator/range.js +25 -0
  175. package/node_modules/es-toolkit/dist/iterator/range.mjs +25 -0
  176. package/node_modules/es-toolkit/dist/iterator/scan.d.mts +23 -0
  177. package/node_modules/es-toolkit/dist/iterator/scan.d.ts +23 -0
  178. package/node_modules/es-toolkit/dist/iterator/scan.js +47 -0
  179. package/node_modules/es-toolkit/dist/iterator/scan.mjs +47 -0
  180. package/node_modules/es-toolkit/dist/iterator/takeWhile.d.mts +20 -0
  181. package/node_modules/es-toolkit/dist/iterator/takeWhile.d.ts +20 -0
  182. package/node_modules/es-toolkit/dist/iterator/takeWhile.js +34 -0
  183. package/node_modules/es-toolkit/dist/iterator/takeWhile.mjs +34 -0
  184. package/node_modules/es-toolkit/dist/iterator/uniqBy.d.mts +22 -0
  185. package/node_modules/es-toolkit/dist/iterator/uniqBy.d.ts +22 -0
  186. package/node_modules/es-toolkit/dist/iterator/uniqBy.js +43 -0
  187. package/node_modules/es-toolkit/dist/iterator/uniqBy.mjs +43 -0
  188. package/node_modules/es-toolkit/dist/iterator/zip.d.mts +23 -0
  189. package/node_modules/es-toolkit/dist/iterator/zip.d.ts +23 -0
  190. package/node_modules/es-toolkit/dist/iterator/zip.js +45 -0
  191. package/node_modules/es-toolkit/dist/iterator/zip.mjs +45 -0
  192. package/node_modules/es-toolkit/dist/object/merge.d.mts +3 -1
  193. package/node_modules/es-toolkit/dist/object/merge.d.ts +3 -1
  194. package/node_modules/es-toolkit/dist/object/merge.js +0 -40
  195. package/node_modules/es-toolkit/dist/object/merge.mjs +0 -40
  196. package/node_modules/es-toolkit/dist/object/omitBy.d.mts +4 -2
  197. package/node_modules/es-toolkit/dist/object/omitBy.d.ts +4 -2
  198. package/node_modules/es-toolkit/dist/object/omitBy.js +4 -3
  199. package/node_modules/es-toolkit/dist/object/omitBy.mjs +4 -3
  200. package/node_modules/es-toolkit/dist/object/pickBy.d.mts +4 -2
  201. package/node_modules/es-toolkit/dist/object/pickBy.d.ts +4 -2
  202. package/node_modules/es-toolkit/dist/object/pickBy.js +4 -3
  203. package/node_modules/es-toolkit/dist/object/pickBy.mjs +4 -3
  204. package/node_modules/es-toolkit/dist/types/EmptyObject.d.mts +21 -0
  205. package/node_modules/es-toolkit/dist/types/EmptyObject.d.ts +21 -0
  206. package/node_modules/es-toolkit/dist/types/IsEqual.d.mts +18 -0
  207. package/node_modules/es-toolkit/dist/types/IsEqual.d.ts +18 -0
  208. package/node_modules/es-toolkit/dist/types/JSONValue.d.mts +24 -0
  209. package/node_modules/es-toolkit/dist/types/JSONValue.d.ts +24 -0
  210. package/node_modules/es-toolkit/dist/types/Merge.d.mts +37 -0
  211. package/node_modules/es-toolkit/dist/types/Merge.d.ts +37 -0
  212. package/node_modules/es-toolkit/dist/types/ObjectKeys.d.mts +19 -0
  213. package/node_modules/es-toolkit/dist/types/ObjectKeys.d.ts +19 -0
  214. package/node_modules/es-toolkit/dist/types/Primitive.d.mts +14 -0
  215. package/node_modules/es-toolkit/dist/types/Primitive.d.ts +14 -0
  216. package/node_modules/es-toolkit/dist/types/SetOptional.d.mts +20 -0
  217. package/node_modules/es-toolkit/dist/types/SetOptional.d.ts +20 -0
  218. package/node_modules/es-toolkit/dist/types/SetRequired.d.mts +20 -0
  219. package/node_modules/es-toolkit/dist/types/SetRequired.d.ts +20 -0
  220. package/node_modules/es-toolkit/dist/types/UnknownRecord.d.mts +24 -0
  221. package/node_modules/es-toolkit/dist/types/UnknownRecord.d.ts +24 -0
  222. package/node_modules/es-toolkit/dist/types/index.d.mts +11 -2
  223. package/node_modules/es-toolkit/dist/types/index.d.ts +11 -2
  224. package/node_modules/es-toolkit/dist/util/attempt.d.mts +1 -1
  225. package/node_modules/es-toolkit/dist/util/attempt.d.ts +1 -1
  226. package/node_modules/es-toolkit/dist/util/attemptAsync.d.mts +1 -1
  227. package/node_modules/es-toolkit/dist/util/attemptAsync.d.ts +1 -1
  228. package/node_modules/es-toolkit/dist/util/defer.d.mts +27 -0
  229. package/node_modules/es-toolkit/dist/util/defer.d.ts +27 -0
  230. package/node_modules/es-toolkit/dist/util/defer.js +31 -0
  231. package/node_modules/es-toolkit/dist/util/defer.mjs +31 -0
  232. package/node_modules/es-toolkit/dist/util/deferAsync.d.mts +30 -0
  233. package/node_modules/es-toolkit/dist/util/deferAsync.d.ts +30 -0
  234. package/node_modules/es-toolkit/dist/util/deferAsync.js +34 -0
  235. package/node_modules/es-toolkit/dist/util/deferAsync.mjs +34 -0
  236. package/node_modules/es-toolkit/dist/util/index.d.mts +3 -1
  237. package/node_modules/es-toolkit/dist/util/index.d.ts +3 -1
  238. package/node_modules/es-toolkit/dist/util/index.js +4 -0
  239. package/node_modules/es-toolkit/dist/util/index.mjs +3 -1
  240. package/node_modules/es-toolkit/fp/iterator.d.ts +1 -0
  241. package/node_modules/es-toolkit/fp/iterator.js +1 -0
  242. package/node_modules/es-toolkit/iterator.d.ts +1 -0
  243. package/node_modules/es-toolkit/iterator.js +1 -0
  244. package/node_modules/es-toolkit/package.json +44 -1
  245. package/node_modules/node-abi/abi_registry.json +7 -0
  246. package/node_modules/node-abi/package.json +1 -1
  247. package/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  248. package/node_modules/qs/CHANGELOG.md +15 -0
  249. package/node_modules/qs/README.md +19 -1
  250. package/node_modules/qs/dist/qs.js +21 -21
  251. package/node_modules/qs/eslint.config.mjs +1 -1
  252. package/node_modules/qs/lib/parse.js +3 -4
  253. package/node_modules/qs/lib/stringify.js +23 -8
  254. package/node_modules/qs/lib/utils.js +10 -3
  255. package/node_modules/qs/package.json +4 -4
  256. package/node_modules/qs/test/parse.js +192 -3
  257. package/node_modules/qs/test/stringify.js +317 -0
  258. package/node_modules/qs/test/utils.js +12 -0
  259. package/node_modules/type-fest/index.d.ts +6 -7
  260. package/node_modules/type-fest/package.json +1 -1
  261. package/node_modules/type-fest/readme.md +6 -5
  262. package/node_modules/type-fest/source/delimiter-case.d.ts +1 -1
  263. package/node_modules/type-fest/source/get.d.ts +1 -1
  264. package/node_modules/type-fest/source/internal/object.d.ts +30 -1
  265. package/node_modules/type-fest/source/is-boolean-literal.d.ts +39 -0
  266. package/node_modules/type-fest/source/is-literal.d.ts +43 -269
  267. package/node_modules/type-fest/source/is-numeric-literal.d.ts +50 -0
  268. package/node_modules/type-fest/source/is-string-literal.d.ts +72 -0
  269. package/node_modules/type-fest/source/is-symbol-literal.d.ts +39 -0
  270. package/node_modules/type-fest/source/jsonify.d.ts +1 -5
  271. package/node_modules/type-fest/source/remove-prefix.d.ts +1 -1
  272. package/node_modules/type-fest/source/remove-suffix.d.ts +1 -1
  273. package/node_modules/type-fest/source/rename-keys.d.ts +163 -0
  274. package/node_modules/type-fest/source/shared-union-fields-deep.d.ts +4 -3
  275. package/node_modules/type-fest/source/split.d.ts +1 -1
  276. package/node_modules/type-fest/source/string-repeat.d.ts +1 -1
  277. package/node_modules/type-fest/source/string-to-array.d.ts +1 -1
  278. package/node_modules/type-fest/source/tsconfig-json.d.ts +1 -1
  279. package/node_modules/type-fest/source/typed-array.d.ts +1 -0
  280. package/node_modules/type-fest/source/writable.d.ts +2 -2
  281. package/package.json +2 -2
  282. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/LICENSE.md +0 -0
  283. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/README.md +0 -0
  284. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/common.gypi +0 -0
  285. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/except.gypi +0 -0
  286. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/index.js +0 -0
  287. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/napi-inl.deprecated.h +0 -0
  288. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/napi-inl.h +0 -0
  289. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/napi.h +0 -0
  290. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/node_api.gyp +0 -0
  291. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/noexcept.gypi +0 -0
  292. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/nothing.c +0 -0
  293. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/package-support.json +0 -0
  294. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/package.json +0 -0
  295. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/tools/README.md +0 -0
  296. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/tools/check-napi.js +0 -0
  297. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/tools/clang-format.js +0 -0
  298. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/tools/conversion.js +0 -0
  299. /package/node_modules/{node-addon-api → keytar/node_modules/node-addon-api}/tools/eslint-format.js +0 -0
@@ -1,3 +1,6 @@
1
+ import { Simplify } from "./Simplify.mjs";
2
+ import { Merge } from "./Merge.mjs";
3
+ import { ObjectKeys } from "./ObjectKeys.mjs";
1
4
  import { ToCamelCaseKeys } from "./ToCamelCaseKeys.mjs";
2
5
  import { ToConstantCaseKeys } from "./ToConstantCaseKeys.mjs";
3
6
  import { ToKebabCaseKeys } from "./ToKebabCaseKeys.mjs";
@@ -5,8 +8,14 @@ import { ToPascalCaseKeys } from "./ToPascalCaseKeys.mjs";
5
8
  import { ToSnakeCaseKeys } from "./ToSnakeCaseKeys.mjs";
6
9
  import { DeepPartial } from "./DeepPartial.mjs";
7
10
  import { DeepReadonly } from "./DeepReadonly.mjs";
11
+ import { EmptyObject } from "./EmptyObject.mjs";
12
+ import { IsEqual } from "./IsEqual.mjs";
13
+ import { JSONValue } from "./JSONValue.mjs";
8
14
  import { NonEmptyArray } from "./NonEmptyArray.mjs";
9
- import { Simplify } from "./Simplify.mjs";
15
+ import { Primitive } from "./Primitive.mjs";
16
+ import { SetOptional } from "./SetOptional.mjs";
17
+ import { SetRequired } from "./SetRequired.mjs";
18
+ import { UnknownRecord } from "./UnknownRecord.mjs";
10
19
  import { ValueOf } from "./ValueOf.mjs";
11
20
  import { Writable } from "./Writable.mjs";
12
- export { type DeepPartial, type DeepReadonly, type NonEmptyArray, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type ValueOf, type Writable };
21
+ export { type DeepPartial, type DeepReadonly, type EmptyObject, type IsEqual, type JSONValue, type Merge, type NonEmptyArray, type ObjectKeys, type Primitive, type SetOptional, type SetRequired, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type UnknownRecord, type ValueOf, type Writable };
@@ -1,3 +1,6 @@
1
+ import { Simplify } from "./Simplify.js";
2
+ import { Merge } from "./Merge.js";
3
+ import { ObjectKeys } from "./ObjectKeys.js";
1
4
  import { ToCamelCaseKeys } from "./ToCamelCaseKeys.js";
2
5
  import { ToConstantCaseKeys } from "./ToConstantCaseKeys.js";
3
6
  import { ToKebabCaseKeys } from "./ToKebabCaseKeys.js";
@@ -5,8 +8,14 @@ import { ToPascalCaseKeys } from "./ToPascalCaseKeys.js";
5
8
  import { ToSnakeCaseKeys } from "./ToSnakeCaseKeys.js";
6
9
  import { DeepPartial } from "./DeepPartial.js";
7
10
  import { DeepReadonly } from "./DeepReadonly.js";
11
+ import { EmptyObject } from "./EmptyObject.js";
12
+ import { IsEqual } from "./IsEqual.js";
13
+ import { JSONValue } from "./JSONValue.js";
8
14
  import { NonEmptyArray } from "./NonEmptyArray.js";
9
- import { Simplify } from "./Simplify.js";
15
+ import { Primitive } from "./Primitive.js";
16
+ import { SetOptional } from "./SetOptional.js";
17
+ import { SetRequired } from "./SetRequired.js";
18
+ import { UnknownRecord } from "./UnknownRecord.js";
10
19
  import { ValueOf } from "./ValueOf.js";
11
20
  import { Writable } from "./Writable.js";
12
- export { type DeepPartial, type DeepReadonly, type NonEmptyArray, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type ValueOf, type Writable };
21
+ export { type DeepPartial, type DeepReadonly, type EmptyObject, type IsEqual, type JSONValue, type Merge, type NonEmptyArray, type ObjectKeys, type Primitive, type SetOptional, type SetRequired, type Simplify, type ToCamelCaseKeys, type ToConstantCaseKeys, type ToKebabCaseKeys, type ToPascalCaseKeys, type ToSnakeCaseKeys, type UnknownRecord, type ValueOf, type Writable };
@@ -38,6 +38,6 @@
38
38
  * });
39
39
  * ```
40
40
  */
41
- declare function attempt<T, E>(func: () => T): [null, T] | [E, null];
41
+ declare function attempt<T, E = unknown>(func: () => T): [null, T] | [E, null];
42
42
  //#endregion
43
43
  export { attempt };
@@ -38,6 +38,6 @@
38
38
  * });
39
39
  * ```
40
40
  */
41
- declare function attempt<T, E>(func: () => T): [null, T] | [E, null];
41
+ declare function attempt<T, E = unknown>(func: () => T): [null, T] | [E, null];
42
42
  //#endregion
43
43
  export { attempt };
@@ -31,6 +31,6 @@
31
31
  * });
32
32
  * // users is typed as User[]
33
33
  */
34
- declare function attemptAsync<T, E>(func: () => Promise<T>): Promise<[null, T] | [E, null]>;
34
+ declare function attemptAsync<T, E = unknown>(func: () => Promise<T>): Promise<[null, T] | [E, null]>;
35
35
  //#endregion
36
36
  export { attemptAsync };
@@ -31,6 +31,6 @@
31
31
  * });
32
32
  * // users is typed as User[]
33
33
  */
34
- declare function attemptAsync<T, E>(func: () => Promise<T>): Promise<[null, T] | [E, null]>;
34
+ declare function attemptAsync<T, E = unknown>(func: () => Promise<T>): Promise<[null, T] | [E, null]>;
35
35
  //#endregion
36
36
  export { attemptAsync };
@@ -0,0 +1,27 @@
1
+ //#region src/util/defer.d.ts
2
+ /**
3
+ * Creates a `Disposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure cleanup code runs when the enclosing scope exits, even if an error is thrown.
8
+ *
9
+ * For asynchronous cleanup, use {@link deferAsync} with `await using` instead.
10
+ *
11
+ * @param callback - The cleanup function to run on dispose.
12
+ * @returns A `Disposable` object that invokes `callback` when disposed.
13
+ *
14
+ * @example
15
+ * const logs: string[] = [];
16
+ *
17
+ * function run() {
18
+ * using cleanup = defer(() => logs.push('cleanup'));
19
+ * logs.push('body');
20
+ * }
21
+ *
22
+ * run();
23
+ * console.log(logs); // ['body', 'cleanup']
24
+ */
25
+ declare function defer(callback: () => void): Disposable;
26
+ //#endregion
27
+ export { defer };
@@ -0,0 +1,27 @@
1
+ //#region src/util/defer.d.ts
2
+ /**
3
+ * Creates a `Disposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure cleanup code runs when the enclosing scope exits, even if an error is thrown.
8
+ *
9
+ * For asynchronous cleanup, use {@link deferAsync} with `await using` instead.
10
+ *
11
+ * @param callback - The cleanup function to run on dispose.
12
+ * @returns A `Disposable` object that invokes `callback` when disposed.
13
+ *
14
+ * @example
15
+ * const logs: string[] = [];
16
+ *
17
+ * function run() {
18
+ * using cleanup = defer(() => logs.push('cleanup'));
19
+ * logs.push('body');
20
+ * }
21
+ *
22
+ * run();
23
+ * console.log(logs); // ['body', 'cleanup']
24
+ */
25
+ declare function defer(callback: () => void): Disposable;
26
+ //#endregion
27
+ export { defer };
@@ -0,0 +1,31 @@
1
+ //#region src/util/defer.ts
2
+ /**
3
+ * Creates a `Disposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure cleanup code runs when the enclosing scope exits, even if an error is thrown.
8
+ *
9
+ * For asynchronous cleanup, use {@link deferAsync} with `await using` instead.
10
+ *
11
+ * @param callback - The cleanup function to run on dispose.
12
+ * @returns A `Disposable` object that invokes `callback` when disposed.
13
+ *
14
+ * @example
15
+ * const logs: string[] = [];
16
+ *
17
+ * function run() {
18
+ * using cleanup = defer(() => logs.push('cleanup'));
19
+ * logs.push('body');
20
+ * }
21
+ *
22
+ * run();
23
+ * console.log(logs); // ['body', 'cleanup']
24
+ */
25
+ function defer(callback) {
26
+ return { [Symbol.dispose]: () => {
27
+ callback();
28
+ } };
29
+ }
30
+ //#endregion
31
+ exports.defer = defer;
@@ -0,0 +1,31 @@
1
+ //#region src/util/defer.ts
2
+ /**
3
+ * Creates a `Disposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure cleanup code runs when the enclosing scope exits, even if an error is thrown.
8
+ *
9
+ * For asynchronous cleanup, use {@link deferAsync} with `await using` instead.
10
+ *
11
+ * @param callback - The cleanup function to run on dispose.
12
+ * @returns A `Disposable` object that invokes `callback` when disposed.
13
+ *
14
+ * @example
15
+ * const logs: string[] = [];
16
+ *
17
+ * function run() {
18
+ * using cleanup = defer(() => logs.push('cleanup'));
19
+ * logs.push('body');
20
+ * }
21
+ *
22
+ * run();
23
+ * console.log(logs); // ['body', 'cleanup']
24
+ */
25
+ function defer(callback) {
26
+ return { [Symbol.dispose]: () => {
27
+ callback();
28
+ } };
29
+ }
30
+ //#endregion
31
+ export { defer };
@@ -0,0 +1,30 @@
1
+ //#region src/util/deferAsync.d.ts
2
+ /**
3
+ * Creates an `AsyncDisposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `await using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure asynchronous cleanup code runs and is awaited when the enclosing scope exits,
8
+ * even if an error is thrown.
9
+ *
10
+ * For synchronous cleanup, use {@link defer} with `using` instead.
11
+ *
12
+ * @param callback - The cleanup function to run on dispose. Its result is awaited.
13
+ * @returns An `AsyncDisposable` object that invokes and awaits `callback` when disposed.
14
+ *
15
+ * @example
16
+ * const connection = await connect();
17
+ *
18
+ * async function run() {
19
+ * await using cleanup = deferAsync(async () => {
20
+ * await connection.close();
21
+ * });
22
+ *
23
+ * await connection.query('SELECT 1');
24
+ * }
25
+ *
26
+ * await run(); // The connection is closed after `run` finishes.
27
+ */
28
+ declare function deferAsync(callback: () => void | PromiseLike<void>): AsyncDisposable;
29
+ //#endregion
30
+ export { deferAsync };
@@ -0,0 +1,30 @@
1
+ //#region src/util/deferAsync.d.ts
2
+ /**
3
+ * Creates an `AsyncDisposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `await using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure asynchronous cleanup code runs and is awaited when the enclosing scope exits,
8
+ * even if an error is thrown.
9
+ *
10
+ * For synchronous cleanup, use {@link defer} with `using` instead.
11
+ *
12
+ * @param callback - The cleanup function to run on dispose. Its result is awaited.
13
+ * @returns An `AsyncDisposable` object that invokes and awaits `callback` when disposed.
14
+ *
15
+ * @example
16
+ * const connection = await connect();
17
+ *
18
+ * async function run() {
19
+ * await using cleanup = deferAsync(async () => {
20
+ * await connection.close();
21
+ * });
22
+ *
23
+ * await connection.query('SELECT 1');
24
+ * }
25
+ *
26
+ * await run(); // The connection is closed after `run` finishes.
27
+ */
28
+ declare function deferAsync(callback: () => void | PromiseLike<void>): AsyncDisposable;
29
+ //#endregion
30
+ export { deferAsync };
@@ -0,0 +1,34 @@
1
+ //#region src/util/deferAsync.ts
2
+ /**
3
+ * Creates an `AsyncDisposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `await using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure asynchronous cleanup code runs and is awaited when the enclosing scope exits,
8
+ * even if an error is thrown.
9
+ *
10
+ * For synchronous cleanup, use {@link defer} with `using` instead.
11
+ *
12
+ * @param callback - The cleanup function to run on dispose. Its result is awaited.
13
+ * @returns An `AsyncDisposable` object that invokes and awaits `callback` when disposed.
14
+ *
15
+ * @example
16
+ * const connection = await connect();
17
+ *
18
+ * async function run() {
19
+ * await using cleanup = deferAsync(async () => {
20
+ * await connection.close();
21
+ * });
22
+ *
23
+ * await connection.query('SELECT 1');
24
+ * }
25
+ *
26
+ * await run(); // The connection is closed after `run` finishes.
27
+ */
28
+ function deferAsync(callback) {
29
+ return { [Symbol.asyncDispose]: async () => {
30
+ await callback();
31
+ } };
32
+ }
33
+ //#endregion
34
+ exports.deferAsync = deferAsync;
@@ -0,0 +1,34 @@
1
+ //#region src/util/deferAsync.ts
2
+ /**
3
+ * Creates an `AsyncDisposable` object that runs the given callback when it is disposed.
4
+ *
5
+ * Use it with `await using` declarations from
6
+ * [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management)
7
+ * to ensure asynchronous cleanup code runs and is awaited when the enclosing scope exits,
8
+ * even if an error is thrown.
9
+ *
10
+ * For synchronous cleanup, use {@link defer} with `using` instead.
11
+ *
12
+ * @param callback - The cleanup function to run on dispose. Its result is awaited.
13
+ * @returns An `AsyncDisposable` object that invokes and awaits `callback` when disposed.
14
+ *
15
+ * @example
16
+ * const connection = await connect();
17
+ *
18
+ * async function run() {
19
+ * await using cleanup = deferAsync(async () => {
20
+ * await connection.close();
21
+ * });
22
+ *
23
+ * await connection.query('SELECT 1');
24
+ * }
25
+ *
26
+ * await run(); // The connection is closed after `run` finishes.
27
+ */
28
+ function deferAsync(callback) {
29
+ return { [Symbol.asyncDispose]: async () => {
30
+ await callback();
31
+ } };
32
+ }
33
+ //#endregion
34
+ export { deferAsync };
@@ -1,4 +1,6 @@
1
1
  import { attempt } from "./attempt.mjs";
2
2
  import { attemptAsync } from "./attemptAsync.mjs";
3
+ import { defer } from "./defer.mjs";
4
+ import { deferAsync } from "./deferAsync.mjs";
3
5
  import { invariant } from "./invariant.mjs";
4
- export { invariant as assert, attempt, attemptAsync, invariant };
6
+ export { invariant as assert, attempt, attemptAsync, defer, deferAsync, invariant };
@@ -1,4 +1,6 @@
1
1
  import { attempt } from "./attempt.js";
2
2
  import { attemptAsync } from "./attemptAsync.js";
3
+ import { defer } from "./defer.js";
4
+ import { deferAsync } from "./deferAsync.js";
3
5
  import { invariant } from "./invariant.js";
4
- export { invariant as assert, attempt, attemptAsync, invariant };
6
+ export { invariant as assert, attempt, attemptAsync, defer, deferAsync, invariant };
@@ -1,8 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_attempt = require("./attempt.js");
3
3
  const require_attemptAsync = require("./attemptAsync.js");
4
+ const require_defer = require("./defer.js");
5
+ const require_deferAsync = require("./deferAsync.js");
4
6
  const require_invariant = require("./invariant.js");
5
7
  exports.assert = require_invariant.invariant;
6
8
  exports.attempt = require_attempt.attempt;
7
9
  exports.attemptAsync = require_attemptAsync.attemptAsync;
10
+ exports.defer = require_defer.defer;
11
+ exports.deferAsync = require_deferAsync.deferAsync;
8
12
  exports.invariant = require_invariant.invariant;
@@ -1,4 +1,6 @@
1
1
  import { attempt } from "./attempt.mjs";
2
2
  import { attemptAsync } from "./attemptAsync.mjs";
3
+ import { defer } from "./defer.mjs";
4
+ import { deferAsync } from "./deferAsync.mjs";
3
5
  import { invariant } from "./invariant.mjs";
4
- export { invariant as assert, attempt, attemptAsync, invariant };
6
+ export { invariant as assert, attempt, attemptAsync, defer, deferAsync, invariant };
@@ -0,0 +1 @@
1
+ export * from '../dist/fp/iterator';
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/fp/iterator');
@@ -0,0 +1 @@
1
+ export * from './dist/iterator';
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/iterator');
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-toolkit",
3
- "version": "1.51.0",
3
+ "version": "1.52.0",
4
4
  "description": "A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.",
5
5
  "homepage": "https://es-toolkit.dev",
6
6
  "bugs": "https://github.com/toss/es-toolkit/issues",
@@ -94,6 +94,16 @@
94
94
  "default": "./dist/fp/index.js"
95
95
  }
96
96
  },
97
+ "./fp/iterator": {
98
+ "import": {
99
+ "types": "./dist/fp/iterator/index.d.mts",
100
+ "default": "./dist/fp/iterator/index.mjs"
101
+ },
102
+ "require": {
103
+ "types": "./dist/fp/iterator/index.d.ts",
104
+ "default": "./dist/fp/iterator/index.js"
105
+ }
106
+ },
97
107
  "./function": {
98
108
  "import": {
99
109
  "types": "./dist/function/index.d.mts",
@@ -104,6 +114,16 @@
104
114
  "default": "./dist/function/index.js"
105
115
  }
106
116
  },
117
+ "./iterator": {
118
+ "import": {
119
+ "types": "./dist/iterator/index.d.mts",
120
+ "default": "./dist/iterator/index.mjs"
121
+ },
122
+ "require": {
123
+ "types": "./dist/iterator/index.d.ts",
124
+ "default": "./dist/iterator/index.js"
125
+ }
126
+ },
107
127
  "./map": {
108
128
  "import": {
109
129
  "types": "./dist/map/index.d.mts",
@@ -204,7 +224,10 @@
204
224
  "compat.js",
205
225
  "error.js",
206
226
  "fp.js",
227
+ "fp/iterator.js",
228
+ "fp/iterator.d.ts",
207
229
  "function.js",
230
+ "iterator.js",
208
231
  "map.js",
209
232
  "math.js",
210
233
  "object.js",
@@ -358,6 +381,16 @@
358
381
  "default": "./dist/fp/index.js"
359
382
  }
360
383
  },
384
+ "./fp/iterator": {
385
+ "import": {
386
+ "types": "./dist/fp/iterator/index.d.mts",
387
+ "default": "./dist/fp/iterator/index.mjs"
388
+ },
389
+ "require": {
390
+ "types": "./dist/fp/iterator/index.d.ts",
391
+ "default": "./dist/fp/iterator/index.js"
392
+ }
393
+ },
361
394
  "./function": {
362
395
  "import": {
363
396
  "types": "./dist/function/index.d.mts",
@@ -368,6 +401,16 @@
368
401
  "default": "./dist/function/index.js"
369
402
  }
370
403
  },
404
+ "./iterator": {
405
+ "import": {
406
+ "types": "./dist/iterator/index.d.mts",
407
+ "default": "./dist/iterator/index.mjs"
408
+ },
409
+ "require": {
410
+ "types": "./dist/iterator/index.d.ts",
411
+ "default": "./dist/iterator/index.js"
412
+ }
413
+ },
371
414
  "./map": {
372
415
  "import": {
373
416
  "types": "./dist/map/index.d.mts",
@@ -449,5 +449,12 @@
449
449
  "lts": false,
450
450
  "runtime": "electron",
451
451
  "target": "44.0.0-alpha.1"
452
+ },
453
+ {
454
+ "abi": "150",
455
+ "future": true,
456
+ "lts": false,
457
+ "runtime": "electron",
458
+ "target": "45.0.0-alpha.1"
452
459
  }
453
460
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-abi",
3
- "version": "3.95.0",
3
+ "version": "3.96.0",
4
4
  "description": "Get the Node ABI for a given target and runtime, and vice versa.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -25,7 +25,7 @@ Caller Application → qs.stringify(obj, options) → Stringifying Engine → Ou
25
25
 
26
26
  **Trust Boundaries:**
27
27
  - **Input string (parse):** May come from untrusted sources (e.g., user input, network requests)
28
- - **Input object (stringify):** May contain cycles, which can lead to infinite loops during stringification
28
+ - **Input object (stringify):** The calling application's own data, not a direct untrusted channel. May contain cycles (handled by the cycle detector). Deeply-nested non-cyclic input surfaces as a catchable synchronous `RangeError` (stack overflow), not unbounded resource consumption; callers that serialize externally-influenced objects should bound their depth/size beforehand.
29
29
  - **Options:** Provided by the caller
30
30
  - **Cycle Tracking:** Used only during stringification to detect and handle circular references
31
31
 
@@ -58,7 +58,7 @@ Caller Application → qs.stringify(obj, options) → Stringifying Engine → Ou
58
58
  |---------------------------------------------------|---------------------|
59
59
  | Tampering (malicious input, prototype pollution) | Strict input validation; keep `allowPrototypes: false` by default; use `plainObjects` for output; ensure builtins/globals are never modified by parse[4][8]. |
60
60
  | Information Disclosure (error messages) | Generic error messages without stack traces or internal paths. |
61
- | Denial of Service (memory/CPU exhaustion) | Enforce `arrayLimit` and `parameterLimit` with safe defaults; enable `throwOnLimitExceeded`; limit nesting depth[7]. |
61
+ | Denial of Service (memory/CPU exhaustion) | `arrayLimit`, `parameterLimit`, and depth limiting apply with safe defaults. Note that `arrayLimit` is a representation threshold (array vs. object), and `parameterLimit` bounds only the number of `&`-delimited parameters - neither caps the elements produced by `comma: true` splitting. For a hard cap that rejects oversized untrusted input, opt in to `throwOnLimitExceeded: true` (default `false`), and always bound input size at the transport layer[7]. On the `stringify` side, the input is the caller's own object rather than an untrusted string, so unbounded nesting manifests as a catchable `RangeError` (stack overflow) rather than exhaustion; callers serializing externally-influenced objects should bound depth/size beforehand, and may opt into `stringify`'s `depth` option (default `Infinity`) for a deterministic, catchable error. |
62
62
  | Elevation of Privilege (prototype pollution) | Keep `allowPrototypes: false`; validate options against allowlist; use `plainObjects` to avoid prototype pollution[4][8]. |
63
63
 
64
64
  ### 7. Risk Ranking
@@ -70,7 +70,7 @@ Caller Application → qs.stringify(obj, options) → Stringifying Engine → Ou
70
70
  ### 8. Next Steps & Review
71
71
 
72
72
  1. **Audit option validation logic.**
73
- 2. **Add depth limiting to nested parsing and stringification.**
73
+ 2. **Depth limiting:** `parse` enforces a `depth` bound by default (with `strictDepth` to throw); `stringify` offers an opt-in `depth` bound (default `Infinity`, since its input is caller-produced) for defense-in-depth.
74
74
  3. **Implement fuzz testing for parser and stringifier edge cases.**
75
75
  4. **Regularly review dependencies for vulnerabilities.**
76
76
  5. **Keep documentation and threat model up to date.**
@@ -1,3 +1,18 @@
1
+ ## **6.16.0**
2
+ - [New] `stringify`: add a `depth` option to bound recursion depth (default `Infinity`)
3
+ - [Fix] stringify: serialize Date values when a filter is provided
4
+ - [Fix] `parse`: enforce `arrayLimit` on comma groups under `[]=` when `throwOnLimitExceeded` is set
5
+ - [Fix] `parse`: flatten a collection appended to an overflowed array (#571)
6
+ - [Fix] `utils`: `isBuffer`: do not invoke a non-callable `constructor.isBuffer`
7
+ - [Fix] `stringify`: do not let `allowEmptyArrays` skip cycle detection (or drop own keys) on an empty array with own properties
8
+ - [Fix] `stringify`: encode dots in a top-level key with a primitive value when encodeDotInKeys is set (#562)
9
+ - [Docs] threat model: clarify `stringify` deep-nesting DoS is caller-bounded
10
+ - [Docs] clarify `arrayLimit` is a representation threshold, not an element-count cap
11
+ - [Tests] `parse`: remove a test that pinned `[]=` comma groups escaping `arrayLimit`
12
+ - [Tests] `stringify`: pin current `encodeDotInKeys` separator-dot behavior
13
+ - [Dev Deps] update `@ljharb/eslint-config`, `eslint`
14
+ - [Dev Deps] update `eslint`, `evalmd`
15
+
1
16
  ## **6.15.3**
2
17
  - [Fix] `parse`: enforce `throwOnLimitExceeded` for cumulative array growth via `combine`/`merge`
3
18
  - [Fix] `utils`: respect encoding of surrogate pairs across chunks (#559)
@@ -147,6 +147,8 @@ try {
147
147
 
148
148
  When `throwOnLimitExceeded` is set to `false` (default), **qs** will parse up to the specified `parameterLimit` and ignore the rest without throwing an error.
149
149
 
150
+ Note that `parameterLimit` only bounds the number of `&`-delimited parameters; it does not limit how many values a single parameter expands into. In particular, when `comma: true` is enabled, a single parameter's value is split on commas into arbitrarily many elements, which `parameterLimit` does not constrain. To bound the total element count from untrusted input, set `throwOnLimitExceeded: true` (see `arrayLimit` below), and always bound the input size at the transport layer (e.g. an HTTP body-size limit).
151
+
150
152
  To bypass the leading question mark, use `ignoreQueryPrefix`:
151
153
 
152
154
  ```javascript
@@ -313,7 +315,9 @@ try {
313
315
  }
314
316
  ```
315
317
 
316
- When `throwOnLimitExceeded` is set to `false` (default), **qs** will parse up to the specified `arrayLimit` and if the limit is exceeded, the array will instead be converted to an object with the index as the key
318
+ When `throwOnLimitExceeded` is set to `false` (default), **qs** will parse up to the specified `arrayLimit` and if the limit is exceeded, the array will instead be converted to an object with the index as the key.
319
+
320
+ Note that `arrayLimit` is a *representation* threshold that controls when a numerically-indexed collection switches from an array to an object — it is **not** a hard cap on the total number of elements parsed. With the default `throwOnLimitExceeded: false`, exceeding `arrayLimit` never rejects or truncates input; it only changes the container type, and the resulting object still holds every element (so its size stays proportional to the input). This conversion is itself a safeguard: it avoids allocating a huge sparse array for input like `a[999999999]`. If you need a hard limit that rejects oversized input from untrusted sources, set `throwOnLimitExceeded: true`.
317
321
 
318
322
  To prevent array syntax (`a[]`, `a[0]`) from being parsed as arrays, set `parseArrays` to `false`.
319
323
  Note that duplicate keys (e.g. `a=b&a=c`) may still produce arrays when `duplicates` is `'combine'` (the default).
@@ -410,6 +414,20 @@ var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) {
410
414
 
411
415
  _(Note: the `encoder` option does not apply if `encode` is `false`)_
412
416
 
417
+ By default, `qs.stringify` serializes an object of any nesting depth.
418
+ For backwards compatibility, and because its input is the caller's own object rather than a query string parsed by **qs**, this is unbounded.
419
+ If you serialize objects whose nesting can be influenced by untrusted input, bound it with the numeric `depth` option (default `Infinity`);
420
+ exceeding it throws a catchable `RangeError` instead of eventually overflowing the call stack:
421
+
422
+ ```javascript
423
+ try {
424
+ qs.stringify({ a: { b: { c: { d: 'e' } } } }, { depth: 2 });
425
+ } catch (err) {
426
+ assert(err instanceof RangeError);
427
+ assert.strictEqual(err.message, 'Input depth exceeded depth option of 2');
428
+ }
429
+ ```
430
+
413
431
  Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values:
414
432
 
415
433
  ```javascript