@st-gr/sail-proxy 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/bundled/gateway/node_modules/.package-lock.json +132 -83
  2. package/bundled/gateway/node_modules/axios/CHANGELOG.md +0 -42
  3. package/bundled/gateway/node_modules/axios/README.md +237 -237
  4. package/bundled/gateway/node_modules/axios/dist/axios.js +21 -113
  5. package/bundled/gateway/node_modules/axios/dist/axios.js.map +1 -0
  6. package/bundled/gateway/node_modules/axios/dist/axios.min.js +2 -2
  7. package/bundled/gateway/node_modules/axios/dist/axios.min.js.map +1 -1
  8. package/bundled/gateway/node_modules/axios/dist/browser/axios.cjs +15 -121
  9. package/bundled/gateway/node_modules/axios/dist/browser/axios.cjs.map +1 -0
  10. package/bundled/gateway/node_modules/axios/dist/esm/axios.js +15 -121
  11. package/bundled/gateway/node_modules/axios/dist/esm/axios.js.map +1 -0
  12. package/bundled/gateway/node_modules/axios/dist/esm/axios.min.js +2 -2
  13. package/bundled/gateway/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  14. package/bundled/gateway/node_modules/axios/dist/node/axios.cjs +107 -249
  15. package/bundled/gateway/node_modules/axios/dist/node/axios.cjs.map +1 -0
  16. package/bundled/gateway/node_modules/axios/index.d.cts +3 -8
  17. package/bundled/gateway/node_modules/axios/index.d.ts +1 -4
  18. package/bundled/gateway/node_modules/axios/lib/adapters/fetch.js +0 -79
  19. package/bundled/gateway/node_modules/axios/lib/adapters/http.js +118 -62
  20. package/bundled/gateway/node_modules/axios/lib/core/Axios.js +0 -1
  21. package/bundled/gateway/node_modules/axios/lib/core/AxiosHeaders.js +2 -2
  22. package/bundled/gateway/node_modules/axios/lib/defaults/transitional.js +0 -1
  23. package/bundled/gateway/node_modules/axios/lib/env/data.js +1 -1
  24. package/bundled/gateway/node_modules/axios/lib/helpers/buildURL.js +1 -1
  25. package/bundled/gateway/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
  26. package/bundled/gateway/node_modules/axios/lib/helpers/resolveConfig.js +6 -12
  27. package/bundled/gateway/node_modules/axios/lib/helpers/toFormData.js +1 -1
  28. package/bundled/gateway/node_modules/axios/lib/utils.js +2 -23
  29. package/bundled/gateway/node_modules/axios/package.json +13 -29
  30. package/bundled/gateway/node_modules/body-parser/HISTORY.md +0 -14
  31. package/bundled/gateway/node_modules/body-parser/SECURITY.md +25 -0
  32. package/bundled/gateway/node_modules/body-parser/lib/types/json.js +5 -1
  33. package/bundled/gateway/node_modules/body-parser/lib/types/urlencoded.js +15 -7
  34. package/bundled/gateway/node_modules/body-parser/node_modules/qs/.editorconfig +46 -0
  35. package/bundled/gateway/node_modules/body-parser/node_modules/qs/.eslintrc +38 -0
  36. package/bundled/gateway/node_modules/body-parser/node_modules/qs/.github/FUNDING.yml +12 -0
  37. package/bundled/gateway/node_modules/body-parser/node_modules/qs/.nycrc +13 -0
  38. package/bundled/gateway/node_modules/body-parser/node_modules/qs/CHANGELOG.md +600 -0
  39. package/bundled/gateway/node_modules/body-parser/node_modules/qs/LICENSE.md +29 -0
  40. package/bundled/gateway/node_modules/body-parser/node_modules/qs/README.md +709 -0
  41. package/bundled/gateway/node_modules/body-parser/node_modules/qs/dist/qs.js +90 -0
  42. package/bundled/gateway/node_modules/body-parser/node_modules/qs/lib/formats.js +23 -0
  43. package/bundled/gateway/node_modules/body-parser/node_modules/qs/lib/index.js +11 -0
  44. package/bundled/gateway/node_modules/body-parser/node_modules/qs/lib/parse.js +296 -0
  45. package/bundled/gateway/node_modules/body-parser/node_modules/qs/lib/stringify.js +351 -0
  46. package/bundled/gateway/node_modules/body-parser/node_modules/qs/lib/utils.js +265 -0
  47. package/bundled/gateway/node_modules/body-parser/node_modules/qs/package.json +91 -0
  48. package/bundled/gateway/node_modules/body-parser/node_modules/qs/test/empty-keys-cases.js +267 -0
  49. package/bundled/gateway/node_modules/body-parser/node_modules/qs/test/parse.js +1170 -0
  50. package/bundled/gateway/node_modules/body-parser/node_modules/qs/test/stringify.js +1298 -0
  51. package/bundled/gateway/node_modules/body-parser/node_modules/qs/test/utils.js +136 -0
  52. package/bundled/gateway/node_modules/body-parser/package.json +10 -9
  53. package/bundled/gateway/node_modules/cookie/index.js +35 -24
  54. package/bundled/gateway/node_modules/cookie/package.json +1 -1
  55. package/bundled/gateway/node_modules/cookie-signature/History.md +1 -5
  56. package/bundled/gateway/node_modules/cookie-signature/index.js +6 -6
  57. package/bundled/gateway/node_modules/cookie-signature/package.json +2 -2
  58. package/bundled/gateway/node_modules/express/History.md +0 -43
  59. package/bundled/gateway/node_modules/express/lib/response.js +0 -1
  60. package/bundled/gateway/node_modules/express/lib/utils.js +1 -2
  61. package/bundled/gateway/node_modules/express/node_modules/qs/.editorconfig +43 -0
  62. package/bundled/gateway/node_modules/express/node_modules/qs/.eslintrc +38 -0
  63. package/bundled/gateway/node_modules/express/node_modules/qs/.github/FUNDING.yml +12 -0
  64. package/bundled/gateway/node_modules/express/node_modules/qs/.nycrc +13 -0
  65. package/bundled/gateway/node_modules/express/node_modules/qs/CHANGELOG.md +546 -0
  66. package/bundled/gateway/node_modules/express/node_modules/qs/LICENSE.md +29 -0
  67. package/bundled/gateway/node_modules/express/node_modules/qs/README.md +625 -0
  68. package/bundled/gateway/node_modules/express/node_modules/qs/dist/qs.js +2054 -0
  69. package/bundled/gateway/node_modules/express/node_modules/qs/lib/formats.js +23 -0
  70. package/bundled/gateway/node_modules/express/node_modules/qs/lib/index.js +11 -0
  71. package/bundled/gateway/node_modules/express/node_modules/qs/lib/parse.js +263 -0
  72. package/bundled/gateway/node_modules/express/node_modules/qs/lib/stringify.js +326 -0
  73. package/bundled/gateway/node_modules/express/node_modules/qs/lib/utils.js +252 -0
  74. package/bundled/gateway/node_modules/express/node_modules/qs/package.json +77 -0
  75. package/bundled/gateway/node_modules/express/node_modules/qs/test/parse.js +855 -0
  76. package/bundled/gateway/node_modules/express/node_modules/qs/test/stringify.js +909 -0
  77. package/bundled/gateway/node_modules/express/node_modules/qs/test/utils.js +136 -0
  78. package/bundled/gateway/node_modules/express/package.json +17 -21
  79. package/bundled/gateway/node_modules/finalhandler/HISTORY.md +0 -21
  80. package/bundled/gateway/node_modules/finalhandler/README.md +2 -2
  81. package/bundled/gateway/node_modules/finalhandler/index.js +2 -7
  82. package/bundled/gateway/node_modules/finalhandler/node_modules/encodeurl/HISTORY.md +14 -0
  83. package/bundled/gateway/node_modules/finalhandler/node_modules/encodeurl/LICENSE +22 -0
  84. package/bundled/gateway/node_modules/finalhandler/node_modules/encodeurl/README.md +128 -0
  85. package/bundled/gateway/node_modules/finalhandler/node_modules/encodeurl/index.js +60 -0
  86. package/bundled/gateway/node_modules/finalhandler/node_modules/encodeurl/package.json +40 -0
  87. package/bundled/gateway/node_modules/finalhandler/package.json +9 -10
  88. package/bundled/gateway/node_modules/http-errors/HISTORY.md +0 -6
  89. package/bundled/gateway/node_modules/http-errors/index.js +3 -4
  90. package/bundled/gateway/node_modules/http-errors/package.json +8 -12
  91. package/bundled/gateway/node_modules/qs/CHANGELOG.md +0 -16
  92. package/bundled/gateway/node_modules/qs/README.md +1 -1
  93. package/bundled/gateway/node_modules/qs/dist/qs.js +15 -15
  94. package/bundled/gateway/node_modules/qs/eslint.config.mjs +0 -1
  95. package/bundled/gateway/node_modules/qs/lib/parse.js +24 -54
  96. package/bundled/gateway/node_modules/qs/lib/stringify.js +4 -11
  97. package/bundled/gateway/node_modules/qs/package.json +3 -3
  98. package/bundled/gateway/node_modules/qs/test/parse.js +0 -135
  99. package/bundled/gateway/node_modules/qs/test/stringify.js +0 -138
  100. package/bundled/gateway/node_modules/qs/test/utils.js +3 -31
  101. package/bundled/gateway/node_modules/raw-body/HISTORY.md +308 -0
  102. package/bundled/gateway/node_modules/raw-body/SECURITY.md +24 -0
  103. package/bundled/gateway/node_modules/raw-body/package.json +7 -5
  104. package/bundled/gateway/node_modules/send/HISTORY.md +7 -19
  105. package/bundled/gateway/node_modules/send/node_modules/encodeurl/HISTORY.md +14 -0
  106. package/bundled/gateway/node_modules/send/node_modules/encodeurl/LICENSE +22 -0
  107. package/bundled/gateway/node_modules/send/node_modules/encodeurl/README.md +128 -0
  108. package/bundled/gateway/node_modules/send/node_modules/encodeurl/index.js +60 -0
  109. package/bundled/gateway/node_modules/send/node_modules/encodeurl/package.json +40 -0
  110. package/bundled/gateway/node_modules/send/package.json +6 -6
  111. package/bundled/gateway/node_modules/serve-static/HISTORY.md +0 -16
  112. package/bundled/gateway/node_modules/serve-static/node_modules/encodeurl/HISTORY.md +14 -0
  113. package/bundled/gateway/node_modules/serve-static/node_modules/encodeurl/LICENSE +22 -0
  114. package/bundled/gateway/node_modules/serve-static/node_modules/encodeurl/README.md +128 -0
  115. package/bundled/gateway/node_modules/serve-static/node_modules/encodeurl/index.js +60 -0
  116. package/bundled/gateway/node_modules/serve-static/node_modules/encodeurl/package.json +40 -0
  117. package/bundled/gateway/node_modules/serve-static/package.json +3 -3
  118. package/bundled/gateway/node_modules/statuses/HISTORY.md +0 -5
  119. package/bundled/gateway/node_modules/statuses/README.md +0 -3
  120. package/bundled/gateway/node_modules/statuses/package.json +7 -7
  121. package/bundled/gateway/package-lock.json +137 -88
  122. package/bundled/gateway/package.json +23 -5
  123. package/bundled/ollama/node_modules/.package-lock.json +104 -85
  124. package/bundled/ollama/node_modules/axios/CHANGELOG.md +0 -42
  125. package/bundled/ollama/node_modules/axios/README.md +237 -237
  126. package/bundled/ollama/node_modules/axios/dist/axios.js +21 -113
  127. package/bundled/ollama/node_modules/axios/dist/axios.js.map +1 -0
  128. package/bundled/ollama/node_modules/axios/dist/axios.min.js +2 -2
  129. package/bundled/ollama/node_modules/axios/dist/axios.min.js.map +1 -1
  130. package/bundled/ollama/node_modules/axios/dist/browser/axios.cjs +15 -121
  131. package/bundled/ollama/node_modules/axios/dist/browser/axios.cjs.map +1 -0
  132. package/bundled/ollama/node_modules/axios/dist/esm/axios.js +15 -121
  133. package/bundled/ollama/node_modules/axios/dist/esm/axios.js.map +1 -0
  134. package/bundled/ollama/node_modules/axios/dist/esm/axios.min.js +2 -2
  135. package/bundled/ollama/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  136. package/bundled/ollama/node_modules/axios/dist/node/axios.cjs +107 -249
  137. package/bundled/ollama/node_modules/axios/dist/node/axios.cjs.map +1 -0
  138. package/bundled/ollama/node_modules/axios/index.d.cts +3 -8
  139. package/bundled/ollama/node_modules/axios/index.d.ts +1 -4
  140. package/bundled/ollama/node_modules/axios/lib/adapters/fetch.js +0 -79
  141. package/bundled/ollama/node_modules/axios/lib/adapters/http.js +118 -62
  142. package/bundled/ollama/node_modules/axios/lib/core/Axios.js +0 -1
  143. package/bundled/ollama/node_modules/axios/lib/core/AxiosHeaders.js +2 -2
  144. package/bundled/ollama/node_modules/axios/lib/defaults/transitional.js +0 -1
  145. package/bundled/ollama/node_modules/axios/lib/env/data.js +1 -1
  146. package/bundled/ollama/node_modules/axios/lib/helpers/buildURL.js +1 -1
  147. package/bundled/ollama/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
  148. package/bundled/ollama/node_modules/axios/lib/helpers/resolveConfig.js +6 -12
  149. package/bundled/ollama/node_modules/axios/lib/helpers/toFormData.js +1 -1
  150. package/bundled/ollama/node_modules/axios/lib/utils.js +2 -23
  151. package/bundled/ollama/node_modules/axios/package.json +13 -29
  152. package/bundled/ollama/node_modules/body-parser/HISTORY.md +0 -14
  153. package/bundled/ollama/node_modules/body-parser/SECURITY.md +25 -0
  154. package/bundled/ollama/node_modules/body-parser/lib/types/json.js +5 -1
  155. package/bundled/ollama/node_modules/body-parser/lib/types/urlencoded.js +15 -7
  156. package/bundled/ollama/node_modules/body-parser/package.json +10 -9
  157. package/bundled/ollama/node_modules/cookie/index.js +35 -24
  158. package/bundled/ollama/node_modules/cookie/package.json +1 -1
  159. package/bundled/ollama/node_modules/cookie-signature/History.md +1 -5
  160. package/bundled/ollama/node_modules/cookie-signature/index.js +6 -6
  161. package/bundled/ollama/node_modules/cookie-signature/package.json +2 -2
  162. package/bundled/ollama/node_modules/express/History.md +0 -43
  163. package/bundled/ollama/node_modules/express/lib/response.js +0 -1
  164. package/bundled/ollama/node_modules/express/lib/utils.js +1 -2
  165. package/bundled/ollama/node_modules/express/package.json +17 -21
  166. package/bundled/ollama/node_modules/finalhandler/HISTORY.md +0 -21
  167. package/bundled/ollama/node_modules/finalhandler/README.md +2 -2
  168. package/bundled/ollama/node_modules/finalhandler/index.js +2 -7
  169. package/bundled/ollama/node_modules/finalhandler/node_modules/encodeurl/HISTORY.md +14 -0
  170. package/bundled/ollama/node_modules/finalhandler/node_modules/encodeurl/LICENSE +22 -0
  171. package/bundled/ollama/node_modules/finalhandler/node_modules/encodeurl/README.md +128 -0
  172. package/bundled/ollama/node_modules/finalhandler/node_modules/encodeurl/index.js +60 -0
  173. package/bundled/ollama/node_modules/finalhandler/node_modules/encodeurl/package.json +40 -0
  174. package/bundled/ollama/node_modules/finalhandler/package.json +9 -10
  175. package/bundled/ollama/node_modules/http-errors/HISTORY.md +0 -6
  176. package/bundled/ollama/node_modules/http-errors/index.js +3 -4
  177. package/bundled/ollama/node_modules/http-errors/package.json +8 -12
  178. package/bundled/ollama/node_modules/qs/CHANGELOG.md +0 -16
  179. package/bundled/ollama/node_modules/qs/README.md +1 -1
  180. package/bundled/ollama/node_modules/qs/dist/qs.js +15 -15
  181. package/bundled/ollama/node_modules/qs/eslint.config.mjs +0 -1
  182. package/bundled/ollama/node_modules/qs/lib/parse.js +24 -54
  183. package/bundled/ollama/node_modules/qs/lib/stringify.js +4 -11
  184. package/bundled/ollama/node_modules/qs/package.json +3 -3
  185. package/bundled/ollama/node_modules/qs/test/parse.js +0 -135
  186. package/bundled/ollama/node_modules/qs/test/stringify.js +0 -138
  187. package/bundled/ollama/node_modules/qs/test/utils.js +3 -31
  188. package/bundled/ollama/node_modules/raw-body/HISTORY.md +308 -0
  189. package/bundled/ollama/node_modules/raw-body/SECURITY.md +24 -0
  190. package/bundled/ollama/node_modules/raw-body/package.json +7 -5
  191. package/bundled/ollama/node_modules/send/HISTORY.md +7 -19
  192. package/bundled/ollama/node_modules/send/node_modules/encodeurl/HISTORY.md +14 -0
  193. package/bundled/ollama/node_modules/send/node_modules/encodeurl/LICENSE +22 -0
  194. package/bundled/ollama/node_modules/send/node_modules/encodeurl/README.md +128 -0
  195. package/bundled/ollama/node_modules/send/node_modules/encodeurl/index.js +60 -0
  196. package/bundled/ollama/node_modules/send/node_modules/encodeurl/package.json +40 -0
  197. package/bundled/ollama/node_modules/send/package.json +6 -6
  198. package/bundled/ollama/node_modules/serve-static/HISTORY.md +0 -16
  199. package/bundled/ollama/node_modules/serve-static/node_modules/encodeurl/HISTORY.md +14 -0
  200. package/bundled/ollama/node_modules/serve-static/node_modules/encodeurl/LICENSE +22 -0
  201. package/bundled/ollama/node_modules/serve-static/node_modules/encodeurl/README.md +128 -0
  202. package/bundled/ollama/node_modules/serve-static/node_modules/encodeurl/index.js +60 -0
  203. package/bundled/ollama/node_modules/serve-static/node_modules/encodeurl/package.json +40 -0
  204. package/bundled/ollama/node_modules/serve-static/package.json +3 -3
  205. package/bundled/ollama/node_modules/statuses/HISTORY.md +0 -5
  206. package/bundled/ollama/node_modules/statuses/README.md +0 -3
  207. package/bundled/ollama/node_modules/statuses/package.json +7 -7
  208. package/bundled/ollama/package-lock.json +107 -88
  209. package/bundled/ollama/package.json +24 -4
  210. package/node_modules/@sap-llm-gateway/service-key-parser/package.json +1 -1
  211. package/package.json +2 -2
  212. package/bundled/gateway/node_modules/axios/lib/helpers/Http2Sessions.js +0 -119
  213. package/bundled/ollama/node_modules/axios/lib/helpers/Http2Sessions.js +0 -119
@@ -67,10 +67,10 @@ var parseValues = function parseQueryStringValues(str, options) {
67
67
  var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;
68
68
  var parts = cleanStr.split(
69
69
  options.delimiter,
70
- options.throwOnLimitExceeded && typeof limit !== 'undefined' ? limit + 1 : limit
70
+ options.throwOnLimitExceeded ? limit + 1 : limit
71
71
  );
72
72
 
73
- if (options.throwOnLimitExceeded && typeof limit !== 'undefined' && parts.length > limit) {
73
+ if (options.throwOnLimitExceeded && parts.length > limit) {
74
74
  throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');
75
75
  }
76
76
 
@@ -214,12 +214,9 @@ var parseObject = function (chain, val, options, valuesParsed) {
214
214
  return leaf;
215
215
  };
216
216
 
217
- // Split a key like "a[b][c[]]" into ['a', '[b]', '[c[]]'] while preserving
218
- // qs parse semantics for depth/prototype guards.
219
- var splitKeyIntoSegments = function splitKeyIntoSegments(originalKey, options) {
220
- var key = options.allowDots ? originalKey.replace(/\.([^.[]+)/g, '[$1]') : originalKey;
217
+ var splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) {
218
+ var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey;
221
219
 
222
- // depth <= 0 keeps the whole key as one segment
223
220
  if (options.depth <= 0) {
224
221
  if (!options.plainObjects && has.call(Object.prototype, key)) {
225
222
  if (!options.allowPrototypes) {
@@ -230,11 +227,14 @@ var splitKeyIntoSegments = function splitKeyIntoSegments(originalKey, options) {
230
227
  return [key];
231
228
  }
232
229
 
233
- var segments = [];
230
+ var brackets = /(\[[^[\]]*])/;
231
+ var child = /(\[[^[\]]*])/g;
232
+
233
+ var segment = brackets.exec(key);
234
+ var parent = segment ? key.slice(0, segment.index) : key;
235
+
236
+ var keys = [];
234
237
 
235
- // parent before the first '[' (may be empty if key starts with '[')
236
- var first = key.indexOf('[');
237
- var parent = first >= 0 ? key.slice(0, first) : key;
238
238
  if (parent) {
239
239
  if (!options.plainObjects && has.call(Object.prototype, parent)) {
240
240
  if (!options.allowPrototypes) {
@@ -242,62 +242,32 @@ var splitKeyIntoSegments = function splitKeyIntoSegments(originalKey, options) {
242
242
  }
243
243
  }
244
244
 
245
- segments[segments.length] = parent;
245
+ keys[keys.length] = parent;
246
246
  }
247
247
 
248
- var n = key.length;
249
- var open = first;
250
- var collected = 0;
251
-
252
- while (open >= 0 && collected < options.depth) {
253
- var level = 1;
254
- var i = open + 1;
255
- var close = -1;
256
-
257
- // balance nested '[' and ']' inside this bracket group using a nesting level counter
258
- while (i < n && close < 0) {
259
- var cu = key.charCodeAt(i);
260
- if (cu === 0x5B) { // '['
261
- level += 1;
262
- } else if (cu === 0x5D) { // ']'
263
- level -= 1;
264
- if (level === 0) {
265
- close = i; // found matching close; loop will exit by condition
266
- }
267
- }
268
- i += 1;
269
- }
248
+ var i = 0;
249
+ while ((segment = child.exec(key)) !== null && i < options.depth) {
250
+ i += 1;
270
251
 
271
- if (close < 0) {
272
- // Unterminated group: wrap the raw remainder in one bracket pair so it stays
273
- // a single literal segment (e.g. "[[]b" -> "[[]b]"); we do not infer missing ']'.
274
- segments[segments.length] = '[' + key.slice(open) + ']';
275
- return segments;
276
- }
277
-
278
- var seg = key.slice(open, close + 1);
279
- // prototype guard for the content of this group
280
- var content = seg.slice(1, -1);
281
- if (!options.plainObjects && has.call(Object.prototype, content) && !options.allowPrototypes) {
282
- return;
252
+ var segmentContent = segment[1].slice(1, -1);
253
+ if (!options.plainObjects && has.call(Object.prototype, segmentContent)) {
254
+ if (!options.allowPrototypes) {
255
+ return;
256
+ }
283
257
  }
284
258
 
285
- segments[segments.length] = seg;
286
- collected += 1;
287
-
288
- // find the next '[' after this balanced group
289
- open = key.indexOf('[', close + 1);
259
+ keys[keys.length] = segment[1];
290
260
  }
291
261
 
292
- if (open >= 0) {
262
+ if (segment) {
293
263
  if (options.strictDepth === true) {
294
264
  throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');
295
265
  }
296
266
 
297
- segments[segments.length] = '[' + key.slice(open) + ']';
267
+ keys[keys.length] = '[' + key.slice(segment.index) + ']';
298
268
  }
299
269
 
300
- return segments;
270
+ return keys;
301
271
  };
302
272
 
303
273
  var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {
@@ -118,7 +118,7 @@ var stringify = function stringify(
118
118
 
119
119
  if (obj === null) {
120
120
  if (strictNullHandling) {
121
- return formatter(encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix);
121
+ return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;
122
122
  }
123
123
 
124
124
  obj = '';
@@ -142,9 +142,7 @@ var stringify = function stringify(
142
142
  if (generateArrayPrefix === 'comma' && isArray(obj)) {
143
143
  // we need to join elements in
144
144
  if (encodeValuesOnly && encoder) {
145
- obj = utils.maybeMap(obj, function (v) {
146
- return v == null ? v : encoder(v);
147
- });
145
+ obj = utils.maybeMap(obj, encoder);
148
146
  }
149
147
  objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];
150
148
  } else if (isArray(filter)) {
@@ -314,11 +312,6 @@ module.exports = function (object, opts) {
314
312
  var sideChannel = getSideChannel();
315
313
  for (var i = 0; i < objKeys.length; ++i) {
316
314
  var key = objKeys[i];
317
-
318
- if (typeof key === 'undefined' || key === null) {
319
- continue;
320
- }
321
-
322
315
  var value = obj[key];
323
316
 
324
317
  if (options.skipNulls && value === null) {
@@ -352,10 +345,10 @@ module.exports = function (object, opts) {
352
345
  if (options.charsetSentinel) {
353
346
  if (options.charset === 'iso-8859-1') {
354
347
  // encodeURIComponent('&#10003;'), the "numeric entity" representation of a checkmark
355
- prefix += 'utf8=%26%2310003%3B' + options.delimiter;
348
+ prefix += 'utf8=%26%2310003%3B&';
356
349
  } else {
357
350
  // encodeURIComponent('✓')
358
- prefix += 'utf8=%E2%9C%93' + options.delimiter;
351
+ prefix += 'utf8=%E2%9C%93&';
359
352
  }
360
353
  }
361
354
 
@@ -2,7 +2,7 @@
2
2
  "name": "qs",
3
3
  "description": "A querystring parser that supports nesting and arrays, with a depth limit",
4
4
  "homepage": "https://github.com/ljharb/qs",
5
- "version": "6.15.2",
5
+ "version": "6.15.0",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/ljharb/qs.git"
@@ -36,7 +36,7 @@
36
36
  "devDependencies": {
37
37
  "@browserify/envify": "^6.0.0",
38
38
  "@browserify/uglifyify": "^6.0.0",
39
- "@ljharb/eslint-config": "^22.2.3",
39
+ "@ljharb/eslint-config": "^22.1.3",
40
40
  "browserify": "^16.5.2",
41
41
  "bundle-collapser": "^1.4.0",
42
42
  "common-shakeify": "~1.0.0",
@@ -51,7 +51,7 @@
51
51
  "has-property-descriptors": "^1.0.2",
52
52
  "has-proto": "^1.2.0",
53
53
  "has-symbols": "^1.1.0",
54
- "iconv-lite": "^0.5.2",
54
+ "iconv-lite": "^0.5.1",
55
55
  "in-publish": "^2.0.1",
56
56
  "jackspeak": "=2.1.1",
57
57
  "jiti": "^0.0.0",
@@ -210,21 +210,6 @@ test('parse()', function (t) {
210
210
  t.test('uses original key when depth = 0', function (st) {
211
211
  st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: 0 }), { 'a[0]': 'b', 'a[1]': 'c' });
212
212
  st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: 0 }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' });
213
- st.deepEqual(qs.parse('a.b=c', { depth: 0, allowDots: true }), { 'a[b]': 'c' }, 'normalizes dots before applying depth-0 behavior');
214
- st.deepEqual(qs.parse('toString=foo', { depth: 0 }), {}, 'respects prototype guard at depth 0');
215
- st.deepEqual(qs.parse('toString=foo', { depth: 0, allowPrototypes: true }), { toString: 'foo' }, 'allows prototypes at depth 0 when enabled');
216
- st.end();
217
- });
218
-
219
- t.test('ignores prototype keys when depth = 0 and allowPrototypes is false', function (st) {
220
- st.deepEqual(qs.parse('toString=foo', { depth: 0 }), {});
221
- st.deepEqual(qs.parse('hasOwnProperty=bar', { depth: 0 }), {});
222
- st.deepEqual(qs.parse('toString=foo&a=b', { depth: 0 }), { a: 'b' });
223
- st.end();
224
- });
225
-
226
- t.test('allows prototype keys when depth = 0 and allowPrototypes is true', function (st) {
227
- st.deepEqual(qs.parse('toString=foo', { depth: 0, allowPrototypes: true }), { toString: 'foo' });
228
213
  st.end();
229
214
  });
230
215
 
@@ -266,52 +251,6 @@ test('parse()', function (t) {
266
251
  st.end();
267
252
  });
268
253
 
269
- t.test('parses keys with literal [] inside a bracket group (#493)', function (st) {
270
- // A bracket pair inside a bracket group should be treated literally as part of the key
271
- st.deepEqual(
272
- qs.parse('search[withbracket[]]=foobar'),
273
- { search: { 'withbracket[]': 'foobar' } },
274
- 'treats inner [] literally when inside a bracket group'
275
- );
276
-
277
- // Single-level variant
278
- st.deepEqual(
279
- qs.parse('a[b[]]=c'),
280
- { a: { 'b[]': 'c' } },
281
- 'keeps "b[]" as a literal key'
282
- );
283
-
284
- // Nested with an array push on the outer level
285
- st.deepEqual(
286
- qs.parse('list[][x[]]=y'),
287
- { list: [{ 'x[]': 'y' }] },
288
- 'preserves inner [] while still treating outer [] as array push'
289
- );
290
-
291
- // Multiple nested bracket pairs: inner [] remains literal as part of the key
292
- st.deepEqual(
293
- qs.parse('a[b[c[]]]=d'),
294
- { a: { 'b[c[]]': 'd' } },
295
- 'treats "b[c[]]" as a literal key inside the bracket group'
296
- );
297
-
298
- // Depth limits with literal brackets: preserve inner [] while limiting bracket-group parsing
299
- st.deepEqual(
300
- qs.parse('a[b[c[]]][d]=e', { depth: 1 }),
301
- { a: { 'b[c[]]': { '[d]': 'e' } } },
302
- 'respects depth: 1 and preserves literal inner [] in the parsed key'
303
- );
304
-
305
- // Unterminated inner bracket group is wrapped as a literal remainder segment
306
- st.deepEqual(
307
- qs.parse('a[[]b=c'),
308
- { a: { '[[]b': 'c' } },
309
- 'handles unterminated inner bracket groups without throwing'
310
- );
311
-
312
- st.end();
313
- });
314
-
315
254
  t.test('allows to specify array indices', function (st) {
316
255
  st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] });
317
256
  st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] });
@@ -1135,15 +1074,6 @@ test('parse()', function (t) {
1135
1074
  };
1136
1075
 
1137
1076
  st.deepEqual(qs.parse('KeY=vAlUe', { decoder: decoder }), { key: 'VALUE' });
1138
-
1139
- var noopDecoder = function () { return 'x'; };
1140
- noopDecoder();
1141
- st['throws'](
1142
- function () { decoder('x', noopDecoder, 'utf-8', 'unknown'); },
1143
- 'this should never happen! type: unknown',
1144
- 'decoder throws for unexpected type'
1145
- );
1146
-
1147
1077
  st.end();
1148
1078
  });
1149
1079
 
@@ -1173,14 +1103,6 @@ test('parse()', function (t) {
1173
1103
  new RangeError('Parameter limit exceeded. Only 3 parameters allowed.'),
1174
1104
  'throws error when parameter limit is exceeded'
1175
1105
  );
1176
-
1177
- sst['throws'](
1178
- function () {
1179
- qs.parse('a=1&b=2', { parameterLimit: 1, throwOnLimitExceeded: true });
1180
- },
1181
- new RangeError('Parameter limit exceeded. Only 1 parameter allowed.'),
1182
- 'throws error with singular "parameter" when parameterLimit is 1'
1183
- );
1184
1106
  sst.end();
1185
1107
  });
1186
1108
 
@@ -1202,12 +1124,6 @@ test('parse()', function (t) {
1202
1124
  sst.end();
1203
1125
  });
1204
1126
 
1205
- st.test('allows unlimited parameters when parameterLimit is Infinity and throwOnLimitExceeded is true', function (sst) {
1206
- var result = qs.parse('a=1&b=2&c=3&d=4&e=5&f=6', { parameterLimit: Infinity, throwOnLimitExceeded: true });
1207
- sst.deepEqual(result, { a: '1', b: '2', c: '3', d: '4', e: '5', f: '6' }, 'parses all parameters without truncation or throwing');
1208
- sst.end();
1209
- });
1210
-
1211
1127
  st.end();
1212
1128
  });
1213
1129
 
@@ -1273,14 +1189,6 @@ test('parse()', function (t) {
1273
1189
  'throws error when a sparse index exceeds arrayLimit'
1274
1190
  );
1275
1191
 
1276
- sst['throws'](
1277
- function () {
1278
- qs.parse('a[2]=b', { arrayLimit: 1, throwOnLimitExceeded: true });
1279
- },
1280
- new RangeError('Array limit exceeded. Only 1 element allowed in an array.'),
1281
- 'throws error with singular "element" when arrayLimit is 1'
1282
- );
1283
-
1284
1192
  sst.end();
1285
1193
  });
1286
1194
 
@@ -1298,17 +1206,6 @@ test('parse()', function (t) {
1298
1206
  sst.end();
1299
1207
  });
1300
1208
 
1301
- st.test('throws when duplicate bracket keys exceed arrayLimit with throwOnLimitExceeded', function (sst) {
1302
- sst['throws'](
1303
- function () {
1304
- qs.parse('a[]=1&a[]=2&a[]=3&a[]=4&a[]=5&a[]=6', { arrayLimit: 5, throwOnLimitExceeded: true });
1305
- },
1306
- new RangeError('Array limit exceeded. Only 5 elements allowed in an array.'),
1307
- 'throws error when duplicate bracket notation exceeds array limit'
1308
- );
1309
- sst.end();
1310
- });
1311
-
1312
1209
  st.end();
1313
1210
  });
1314
1211
 
@@ -1565,14 +1462,6 @@ test('comma + arrayLimit', function (t) {
1565
1462
  new RangeError('Array limit exceeded. Only 3 elements allowed in an array.'),
1566
1463
  'throws error when comma-split exceeds array limit'
1567
1464
  );
1568
-
1569
- st['throws'](
1570
- function () {
1571
- qs.parse('a=1,2,3', { comma: true, arrayLimit: 1, throwOnLimitExceeded: true });
1572
- },
1573
- new RangeError('Array limit exceeded. Only 1 element allowed in an array.'),
1574
- 'throws error with singular "element" when arrayLimit is 1'
1575
- );
1576
1465
  st.end();
1577
1466
  });
1578
1467
 
@@ -1675,29 +1564,5 @@ test('mixed array and object notation', function (t) {
1675
1564
  st.end();
1676
1565
  });
1677
1566
 
1678
- t.test('uses existing array length for currentArrayLength when parsing object input with bracket keys', function (st) {
1679
- var input = {};
1680
- var arr = ['x', 'y'];
1681
- arr.a = ['z', 'w'];
1682
- input['a[]'] = arr;
1683
- st.deepEqual(qs.parse(input), { a: ['x', 'y'] }, 'parses object input with bracket keys using existing array values');
1684
- st.end();
1685
- });
1686
-
1687
- t.test('throws with singular message when object input bracket key exceeds arrayLimit of 1', function (st) {
1688
- var input = {};
1689
- var arr = ['x'];
1690
- arr.a = ['z', 'w'];
1691
- input['a[]'] = arr;
1692
- st['throws'](
1693
- function () {
1694
- qs.parse(input, { throwOnLimitExceeded: true, arrayLimit: 1 });
1695
- },
1696
- new RangeError('Array limit exceeded. Only 1 element allowed in an array.'),
1697
- 'throws singular error for object input exceeding arrayLimit 1'
1698
- );
1699
- st.end();
1700
- });
1701
-
1702
1567
  t.end();
1703
1568
  });
@@ -651,49 +651,6 @@ test('stringify()', function (t) {
651
651
  st.end();
652
652
  });
653
653
 
654
- t.test('does not crash on null/undefined entries in arrayFormat=comma with encodeValuesOnly', function (st) {
655
- st.doesNotThrow(
656
- function () { qs.stringify({ a: [null, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }); },
657
- 'does not pass a raw null array entry to the encoder'
658
- );
659
- st.doesNotThrow(
660
- function () { qs.stringify({ a: [undefined, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }); },
661
- 'does not pass a raw undefined array entry to the encoder'
662
- );
663
- st.doesNotThrow(
664
- function () { qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true }); },
665
- 'does not crash on a single-null array'
666
- );
667
-
668
- st.equal(
669
- qs.stringify({ a: [null, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
670
- 'a=,b',
671
- 'null entry joins as empty, comma stays unencoded under encodeValuesOnly'
672
- );
673
- st.equal(
674
- qs.stringify({ a: [undefined, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
675
- 'a=,b',
676
- 'undefined entry joins as empty, comma stays unencoded under encodeValuesOnly'
677
- );
678
- st.equal(
679
- qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
680
- 'a=',
681
- 'single-null array stringifies as empty value'
682
- );
683
- st.equal(
684
- qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true, strictNullHandling: true }),
685
- 'a',
686
- 'strictNullHandling drops the equals sign for a single-null array'
687
- );
688
- st.equal(
689
- qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true, skipNulls: true }),
690
- '',
691
- 'skipNulls drops a single-null array entirely'
692
- );
693
-
694
- st.end();
695
- });
696
-
697
654
  t.test('stringifies a null object', { skip: !hasProto }, function (st) {
698
655
  st.equal(qs.stringify({ __proto__: null, a: 'b' }), 'a=b');
699
656
  st.end();
@@ -868,35 +825,6 @@ test('stringify()', function (t) {
868
825
  st.end();
869
826
  });
870
827
 
871
- t.test('skips null/undefined entries in filter=array', function (st) {
872
- st.doesNotThrow(
873
- function () { qs.stringify({ a: 'b', undefined: 'x' }, { filter: ['a', undefined] }); },
874
- 'does not pass a raw undefined filter entry to the encoder'
875
- );
876
- st.doesNotThrow(
877
- function () { qs.stringify({ a: 'b', 'null': 'x' }, { filter: ['a', null] }); },
878
- 'does not pass a raw null filter entry to the encoder'
879
- );
880
-
881
- st.equal(
882
- qs.stringify({ a: 'b', undefined: 'x', c: 'd' }, { filter: ['a', undefined, 'c'] }),
883
- 'a=b&c=d',
884
- 'undefined filter entry is skipped, remaining keys are kept'
885
- );
886
- st.equal(
887
- qs.stringify({ a: 'b', 'null': 'x', c: 'd' }, { filter: ['a', null, 'c'] }),
888
- 'a=b&c=d',
889
- 'null filter entry is skipped, remaining keys are kept'
890
- );
891
- st.equal(
892
- qs.stringify({ a: 'b', 'null': 'x' }, { filter: [null] }),
893
- '',
894
- 'filter array containing only null yields empty string'
895
- );
896
-
897
- st.end();
898
- });
899
-
900
828
  t.test('supports custom representations when filter=function', function (st) {
901
829
  var calls = 0;
902
830
  var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } };
@@ -1183,28 +1111,6 @@ test('stringify()', function (t) {
1183
1111
  st.end();
1184
1112
  });
1185
1113
 
1186
- t.test('strictNullHandling: applies the formatter to the encoded key (RFC1738)', function (st) {
1187
- st.equal(
1188
- qs.stringify(
1189
- { 'a b': null, 'c d': 'e f' },
1190
- { strictNullHandling: false, format: 'RFC1738' }
1191
- ),
1192
- 'a+b=&c+d=e+f',
1193
- 'without: as expected'
1194
- );
1195
-
1196
- st.equal(
1197
- qs.stringify(
1198
- { 'a b': null, 'c d': 'e f' },
1199
- { strictNullHandling: true, format: 'RFC1738' }
1200
- ),
1201
- 'a+b&c+d=e+f',
1202
- 'with: as expected'
1203
- );
1204
-
1205
- st.end();
1206
- });
1207
-
1208
1114
  t.test('throws if an invalid charset is specified', function (st) {
1209
1115
  st['throws'](function () {
1210
1116
  qs.stringify({ a: 'b' }, { charset: 'foobar' });
@@ -1240,12 +1146,6 @@ test('stringify()', function (t) {
1240
1146
  'adds the right sentinel when instructed to and the charset is iso-8859-1'
1241
1147
  );
1242
1148
 
1243
- st.equal(
1244
- qs.stringify({ a: 1, b: 2 }, { charsetSentinel: true, delimiter: ';' }),
1245
- 'utf8=%E2%9C%93;a=1;b=2',
1246
- 'uses the configured delimiter after the sentinel'
1247
- );
1248
-
1249
1149
  st.end();
1250
1150
  });
1251
1151
 
@@ -1288,15 +1188,6 @@ test('stringify()', function (t) {
1288
1188
  };
1289
1189
 
1290
1190
  st.deepEqual(qs.stringify({ KeY: 'vAlUe' }, { encoder: encoder }), 'key=VALUE');
1291
-
1292
- var noopEncoder = function () { return 'x'; };
1293
- noopEncoder();
1294
- st['throws'](
1295
- function () { encoder('x', noopEncoder, 'utf-8', 'unknown'); },
1296
- 'this should never happen! type: unknown',
1297
- 'encoder throws for unexpected type'
1298
- );
1299
-
1300
1191
  st.end();
1301
1192
  });
1302
1193
 
@@ -1416,33 +1307,4 @@ test('stringifies empty keys', function (t) {
1416
1307
 
1417
1308
  st.end();
1418
1309
  });
1419
-
1420
- t.test('round-trips keys containing percent-encoded bracket text', function (st) {
1421
- var cases = [
1422
- { 'a%5Bb': 'c' },
1423
- { 'a%5Db': 'c' },
1424
- { 'a%255Bb': 'c' },
1425
- { 'a%255Db': 'c' },
1426
- { a: { 'b%5Bc': 'd' } },
1427
- { a: { 'b%255Bc': 'd' } },
1428
- { 'a%5B%255Bb': 'c' }
1429
- ];
1430
- for (var i = 0; i < cases.length; i++) {
1431
- st.deepEqual(
1432
- qs.parse(qs.stringify(cases[i])),
1433
- cases[i],
1434
- 'round-trips ' + JSON.stringify(cases[i])
1435
- );
1436
- }
1437
-
1438
- st.end();
1439
- });
1440
-
1441
- t.test('parses input containing percent-encoded bracket text without mangling', function (st) {
1442
- st.deepEqual(qs.parse('a%25255Bb=c'), { 'a%255Bb': 'c' }, 'a%25255Bb decodes to a%255Bb, not a%5Bb');
1443
- st.deepEqual(qs.parse('a%25255Db=c'), { 'a%255Db': 'c' }, 'a%25255Db decodes to a%255Db, not a%5Db');
1444
- st.deepEqual(qs.parse('a%5Bb%25255Bc%5D=d'), { a: { 'b%255Bc': 'd' } }, 'nested %25255B decodes to %255B inside segment, not %5B');
1445
-
1446
- st.end();
1447
- });
1448
1310
  });
@@ -31,7 +31,6 @@ test('merge()', function (t) {
31
31
  t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true });
32
32
 
33
33
  var func = function f() {};
34
- func();
35
34
  t.deepEqual(
36
35
  utils.merge(func, { foo: 'bar' }),
37
36
  [func, { foo: 'bar' }],
@@ -113,15 +112,6 @@ test('merge()', function (t) {
113
112
  s2t.end();
114
113
  });
115
114
 
116
- st.test('merges overflow object into primitive with plainObjects', function (s2t) {
117
- var overflow = utils.combine(['a'], 'b', 0, false);
118
- s2t.ok(utils.isOverflow(overflow), 'overflow object is marked');
119
- var merged = utils.merge('c', overflow, { plainObjects: true });
120
- s2t.ok(utils.isOverflow(merged), 'result is also marked as overflow');
121
- s2t.deepEqual(merged, { __proto__: null, 0: 'c', 1: 'a', 2: 'b' }, 'creates null-proto object with primitive at 0');
122
- s2t.end();
123
- });
124
-
125
115
  st.test('merges overflow object with multiple values into primitive', function (s2t) {
126
116
  // Create an overflow object via combine: 3 elements (indices 0-2) with limit 0
127
117
  var overflow = utils.combine(['b', 'c'], 'd', 0, false);
@@ -138,21 +128,6 @@ test('merge()', function (t) {
138
128
  s2t.end();
139
129
  });
140
130
 
141
- st.test('merges primitive into array that exceeds arrayLimit', function (s2t) {
142
- var arr = ['a', 'b', 'c'];
143
- var merged = utils.merge(arr, 'd', { arrayLimit: 1 });
144
- s2t.ok(utils.isOverflow(merged), 'result is marked as overflow');
145
- s2t.deepEqual(merged, { 0: 'a', 1: 'b', 2: 'c', 3: 'd' }, 'converts to overflow object with primitive appended');
146
- s2t.end();
147
- });
148
-
149
- st.test('merges array into primitive that exceeds arrayLimit', function (s2t) {
150
- var merged = utils.merge('a', ['b', 'c'], { arrayLimit: 1 });
151
- s2t.ok(utils.isOverflow(merged), 'result is marked as overflow');
152
- s2t.deepEqual(merged, { 0: 'a', 1: 'b', 2: 'c' }, 'converts to overflow object');
153
- s2t.end();
154
- });
155
-
156
131
  st.end();
157
132
  });
158
133
 
@@ -401,9 +376,7 @@ test('encode', function (t) {
401
376
  });
402
377
 
403
378
  test('isBuffer()', function (t) {
404
- var fn = function () {};
405
- fn();
406
- forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], fn, /a/g], function (x) {
379
+ forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], function () {}, /a/g], function (x) {
407
380
  t.equal(utils.isBuffer(x), false, inspect(x) + ' is not a buffer');
408
381
  });
409
382
 
@@ -413,9 +386,8 @@ test('isBuffer()', function (t) {
413
386
  var saferBuffer = SaferBuffer.from('abc');
414
387
  t.equal(utils.isBuffer(saferBuffer), true, 'SaferBuffer instance is a buffer');
415
388
 
416
- var buffer = SaferBuffer.from('abc');
417
- t.notEqual(saferBuffer, buffer, 'different buffer instances');
418
- t.equal(utils.isBuffer(buffer), true, 'another Buffer instance is a buffer');
389
+ var buffer = Buffer.from && Buffer.alloc ? Buffer.from('abc') : new Buffer('abc');
390
+ t.equal(utils.isBuffer(buffer), true, 'real Buffer instance is a buffer');
419
391
  t.end();
420
392
  });
421
393