appium-mac2-driver 4.5.0 → 4.6.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 (1531) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/lib/commands/clipboard.js +2 -2
  3. package/build/lib/commands/clipboard.js.map +1 -1
  4. package/build/lib/commands/context.d.ts +66 -0
  5. package/build/lib/commands/context.d.ts.map +1 -0
  6. package/build/lib/commands/context.js +206 -0
  7. package/build/lib/commands/context.js.map +1 -0
  8. package/build/lib/commands/execute.d.ts.map +1 -1
  9. package/build/lib/commands/execute.js +4 -0
  10. package/build/lib/commands/execute.js.map +1 -1
  11. package/build/lib/commands/find.d.ts.map +1 -1
  12. package/build/lib/commands/find.js +4 -0
  13. package/build/lib/commands/find.js.map +1 -1
  14. package/build/lib/constraints.d.ts +12 -0
  15. package/build/lib/constraints.d.ts.map +1 -1
  16. package/build/lib/constraints.js +12 -0
  17. package/build/lib/constraints.js.map +1 -1
  18. package/build/lib/driver.d.ts +26 -0
  19. package/build/lib/driver.d.ts.map +1 -1
  20. package/build/lib/driver.js +83 -3
  21. package/build/lib/driver.js.map +1 -1
  22. package/build/lib/execute-method-map.d.ts +6 -0
  23. package/build/lib/execute-method-map.d.ts.map +1 -1
  24. package/build/lib/execute-method-map.js +6 -0
  25. package/build/lib/execute-method-map.js.map +1 -1
  26. package/build/lib/session-claim-handler.d.ts.map +1 -1
  27. package/build/lib/session-claim-handler.js +1 -2
  28. package/build/lib/session-claim-handler.js.map +1 -1
  29. package/build/lib/types.d.ts +19 -0
  30. package/build/lib/types.d.ts.map +1 -1
  31. package/build/lib/wda-mac.d.ts +0 -1
  32. package/build/lib/wda-mac.d.ts.map +1 -1
  33. package/build/lib/wda-mac.js +1 -1
  34. package/lib/commands/clipboard.ts +2 -2
  35. package/lib/commands/context.ts +228 -0
  36. package/lib/commands/execute.ts +4 -0
  37. package/lib/commands/find.ts +5 -0
  38. package/lib/constraints.ts +12 -0
  39. package/lib/driver.ts +93 -3
  40. package/lib/execute-method-map.ts +6 -0
  41. package/lib/session-claim-handler.ts +1 -2
  42. package/lib/types.ts +22 -0
  43. package/lib/wda-mac.ts +1 -2
  44. package/node_modules/@appium/base-driver/LICENSE +201 -0
  45. package/node_modules/@appium/base-driver/README.md +15 -0
  46. package/node_modules/@appium/base-driver/build/lib/basedriver/capabilities.d.ts +59 -0
  47. package/node_modules/@appium/base-driver/build/lib/basedriver/capabilities.d.ts.map +1 -0
  48. package/node_modules/@appium/base-driver/build/lib/basedriver/capabilities.js +315 -0
  49. package/node_modules/@appium/base-driver/build/lib/basedriver/capabilities.js.map +1 -0
  50. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi-subscriptions.d.ts +12 -0
  51. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi-subscriptions.d.ts.map +1 -0
  52. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi-subscriptions.js +33 -0
  53. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi-subscriptions.js.map +1 -0
  54. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi.d.ts +6 -0
  55. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi.d.ts.map +1 -0
  56. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi.js +72 -0
  57. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/bidi.js.map +1 -0
  58. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/event.d.ts +6 -0
  59. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/event.d.ts.map +1 -0
  60. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/event.js +36 -0
  61. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/event.js.map +1 -0
  62. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/execute.d.ts +6 -0
  63. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/execute.d.ts.map +1 -0
  64. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/execute.js +33 -0
  65. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/execute.js.map +1 -0
  66. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/find.d.ts +6 -0
  67. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/find.d.ts.map +1 -0
  68. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/find.js +55 -0
  69. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/find.js.map +1 -0
  70. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/index.d.ts +7 -0
  71. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/index.d.ts.map +1 -0
  72. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/index.js +9 -0
  73. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/index.js.map +1 -0
  74. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/log.d.ts +6 -0
  75. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/log.d.ts.map +1 -0
  76. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/log.js +20 -0
  77. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/log.js.map +1 -0
  78. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/mixin.d.ts +12 -0
  79. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/mixin.d.ts.map +1 -0
  80. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/mixin.js +16 -0
  81. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/mixin.js.map +1 -0
  82. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/timeout.d.ts +6 -0
  83. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/timeout.d.ts.map +1 -0
  84. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/timeout.js +110 -0
  85. package/node_modules/@appium/base-driver/build/lib/basedriver/commands/timeout.js.map +1 -0
  86. package/node_modules/@appium/base-driver/build/lib/basedriver/core.d.ts +154 -0
  87. package/node_modules/@appium/base-driver/build/lib/basedriver/core.d.ts.map +1 -0
  88. package/node_modules/@appium/base-driver/build/lib/basedriver/core.js +364 -0
  89. package/node_modules/@appium/base-driver/build/lib/basedriver/core.js.map +1 -0
  90. package/node_modules/@appium/base-driver/build/lib/basedriver/device-settings.d.ts +27 -0
  91. package/node_modules/@appium/base-driver/build/lib/basedriver/device-settings.d.ts.map +1 -0
  92. package/node_modules/@appium/base-driver/build/lib/basedriver/device-settings.js +56 -0
  93. package/node_modules/@appium/base-driver/build/lib/basedriver/device-settings.js.map +1 -0
  94. package/node_modules/@appium/base-driver/build/lib/basedriver/driver.d.ts +68 -0
  95. package/node_modules/@appium/base-driver/build/lib/basedriver/driver.d.ts.map +1 -0
  96. package/node_modules/@appium/base-driver/build/lib/basedriver/driver.js +378 -0
  97. package/node_modules/@appium/base-driver/build/lib/basedriver/driver.js.map +1 -0
  98. package/node_modules/@appium/base-driver/build/lib/basedriver/extension-core.d.ts +19 -0
  99. package/node_modules/@appium/base-driver/build/lib/basedriver/extension-core.d.ts.map +1 -0
  100. package/node_modules/@appium/base-driver/build/lib/basedriver/extension-core.js +132 -0
  101. package/node_modules/@appium/base-driver/build/lib/basedriver/extension-core.js.map +1 -0
  102. package/node_modules/@appium/base-driver/build/lib/basedriver/helpers.d.ts +59 -0
  103. package/node_modules/@appium/base-driver/build/lib/basedriver/helpers.d.ts.map +1 -0
  104. package/node_modules/@appium/base-driver/build/lib/basedriver/helpers.js +556 -0
  105. package/node_modules/@appium/base-driver/build/lib/basedriver/helpers.js.map +1 -0
  106. package/node_modules/@appium/base-driver/build/lib/basedriver/ipc.d.ts +36 -0
  107. package/node_modules/@appium/base-driver/build/lib/basedriver/ipc.d.ts.map +1 -0
  108. package/node_modules/@appium/base-driver/build/lib/basedriver/ipc.js +155 -0
  109. package/node_modules/@appium/base-driver/build/lib/basedriver/ipc.js.map +1 -0
  110. package/node_modules/@appium/base-driver/build/lib/basedriver/logger.d.ts +2 -0
  111. package/node_modules/@appium/base-driver/build/lib/basedriver/logger.d.ts.map +1 -0
  112. package/node_modules/@appium/base-driver/build/lib/basedriver/logger.js +6 -0
  113. package/node_modules/@appium/base-driver/build/lib/basedriver/logger.js.map +1 -0
  114. package/node_modules/@appium/base-driver/build/lib/basedriver/validation.d.ts +7 -0
  115. package/node_modules/@appium/base-driver/build/lib/basedriver/validation.d.ts.map +1 -0
  116. package/node_modules/@appium/base-driver/build/lib/basedriver/validation.js +125 -0
  117. package/node_modules/@appium/base-driver/build/lib/basedriver/validation.js.map +1 -0
  118. package/node_modules/@appium/base-driver/build/lib/constants.d.ts +9 -0
  119. package/node_modules/@appium/base-driver/build/lib/constants.d.ts.map +1 -0
  120. package/node_modules/@appium/base-driver/build/lib/constants.js +20 -0
  121. package/node_modules/@appium/base-driver/build/lib/constants.js.map +1 -0
  122. package/node_modules/@appium/base-driver/build/lib/express/express-logging.d.ts +12 -0
  123. package/node_modules/@appium/base-driver/build/lib/express/express-logging.d.ts.map +1 -0
  124. package/node_modules/@appium/base-driver/build/lib/express/express-logging.js +71 -0
  125. package/node_modules/@appium/base-driver/build/lib/express/express-logging.js.map +1 -0
  126. package/node_modules/@appium/base-driver/build/lib/express/idempotency.d.ts +7 -0
  127. package/node_modules/@appium/base-driver/build/lib/express/idempotency.d.ts.map +1 -0
  128. package/node_modules/@appium/base-driver/build/lib/express/idempotency.js +167 -0
  129. package/node_modules/@appium/base-driver/build/lib/express/idempotency.js.map +1 -0
  130. package/node_modules/@appium/base-driver/build/lib/express/logger.d.ts +2 -0
  131. package/node_modules/@appium/base-driver/build/lib/express/logger.d.ts.map +1 -0
  132. package/node_modules/@appium/base-driver/build/lib/express/logger.js +6 -0
  133. package/node_modules/@appium/base-driver/build/lib/express/logger.js.map +1 -0
  134. package/node_modules/@appium/base-driver/build/lib/express/middleware.d.ts +67 -0
  135. package/node_modules/@appium/base-driver/build/lib/express/middleware.d.ts.map +1 -0
  136. package/node_modules/@appium/base-driver/build/lib/express/middleware.js +164 -0
  137. package/node_modules/@appium/base-driver/build/lib/express/middleware.js.map +1 -0
  138. package/node_modules/@appium/base-driver/build/lib/express/server.d.ts +70 -0
  139. package/node_modules/@appium/base-driver/build/lib/express/server.d.ts.map +1 -0
  140. package/node_modules/@appium/base-driver/build/lib/express/server.js +287 -0
  141. package/node_modules/@appium/base-driver/build/lib/express/server.js.map +1 -0
  142. package/node_modules/@appium/base-driver/build/lib/express/websocket.d.ts +23 -0
  143. package/node_modules/@appium/base-driver/build/lib/express/websocket.d.ts.map +1 -0
  144. package/node_modules/@appium/base-driver/build/lib/express/websocket.js +64 -0
  145. package/node_modules/@appium/base-driver/build/lib/express/websocket.js.map +1 -0
  146. package/node_modules/@appium/base-driver/build/lib/helpers/capabilities.d.ts +11 -0
  147. package/node_modules/@appium/base-driver/build/lib/helpers/capabilities.d.ts.map +1 -0
  148. package/node_modules/@appium/base-driver/build/lib/helpers/capabilities.js +70 -0
  149. package/node_modules/@appium/base-driver/build/lib/helpers/capabilities.js.map +1 -0
  150. package/node_modules/@appium/base-driver/build/lib/helpers/extension-command-name.d.ts +11 -0
  151. package/node_modules/@appium/base-driver/build/lib/helpers/extension-command-name.d.ts.map +1 -0
  152. package/node_modules/@appium/base-driver/build/lib/helpers/extension-command-name.js +23 -0
  153. package/node_modules/@appium/base-driver/build/lib/helpers/extension-command-name.js.map +1 -0
  154. package/node_modules/@appium/base-driver/build/lib/helpers/levenshtein-match.d.ts +27 -0
  155. package/node_modules/@appium/base-driver/build/lib/helpers/levenshtein-match.d.ts.map +1 -0
  156. package/node_modules/@appium/base-driver/build/lib/helpers/levenshtein-match.js +57 -0
  157. package/node_modules/@appium/base-driver/build/lib/helpers/levenshtein-match.js.map +1 -0
  158. package/node_modules/@appium/base-driver/build/lib/helpers/session.d.ts +7 -0
  159. package/node_modules/@appium/base-driver/build/lib/helpers/session.d.ts.map +1 -0
  160. package/node_modules/@appium/base-driver/build/lib/helpers/session.js +12 -0
  161. package/node_modules/@appium/base-driver/build/lib/helpers/session.js.map +1 -0
  162. package/node_modules/@appium/base-driver/build/lib/index.d.ts +24 -0
  163. package/node_modules/@appium/base-driver/build/lib/index.d.ts.map +1 -0
  164. package/node_modules/@appium/base-driver/build/lib/index.js +75 -0
  165. package/node_modules/@appium/base-driver/build/lib/index.js.map +1 -0
  166. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/protocol-converter.d.ts +53 -0
  167. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -0
  168. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/protocol-converter.js +213 -0
  169. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/protocol-converter.js.map +1 -0
  170. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy-request.d.ts +12 -0
  171. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy-request.d.ts.map +1 -0
  172. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy-request.js +55 -0
  173. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy-request.js.map +1 -0
  174. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy.d.ts +83 -0
  175. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -0
  176. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy.js +413 -0
  177. package/node_modules/@appium/base-driver/build/lib/jsonwp-proxy/proxy.js.map +1 -0
  178. package/node_modules/@appium/base-driver/build/lib/jsonwp-status/status.d.ts +114 -0
  179. package/node_modules/@appium/base-driver/build/lib/jsonwp-status/status.d.ts.map +1 -0
  180. package/node_modules/@appium/base-driver/build/lib/jsonwp-status/status.js +122 -0
  181. package/node_modules/@appium/base-driver/build/lib/jsonwp-status/status.js.map +1 -0
  182. package/node_modules/@appium/base-driver/build/lib/protocol/bidi-commands.d.ts +31 -0
  183. package/node_modules/@appium/base-driver/build/lib/protocol/bidi-commands.d.ts.map +1 -0
  184. package/node_modules/@appium/base-driver/build/lib/protocol/bidi-commands.js +40 -0
  185. package/node_modules/@appium/base-driver/build/lib/protocol/bidi-commands.js.map +1 -0
  186. package/node_modules/@appium/base-driver/build/lib/protocol/errors.d.ts +346 -0
  187. package/node_modules/@appium/base-driver/build/lib/protocol/errors.d.ts.map +1 -0
  188. package/node_modules/@appium/base-driver/build/lib/protocol/errors.js +831 -0
  189. package/node_modules/@appium/base-driver/build/lib/protocol/errors.js.map +1 -0
  190. package/node_modules/@appium/base-driver/build/lib/protocol/helpers.d.ts +18 -0
  191. package/node_modules/@appium/base-driver/build/lib/protocol/helpers.d.ts.map +1 -0
  192. package/node_modules/@appium/base-driver/build/lib/protocol/helpers.js +43 -0
  193. package/node_modules/@appium/base-driver/build/lib/protocol/helpers.js.map +1 -0
  194. package/node_modules/@appium/base-driver/build/lib/protocol/index.d.ts +5 -0
  195. package/node_modules/@appium/base-driver/build/lib/protocol/index.d.ts.map +1 -0
  196. package/node_modules/@appium/base-driver/build/lib/protocol/index.js +27 -0
  197. package/node_modules/@appium/base-driver/build/lib/protocol/index.js.map +1 -0
  198. package/node_modules/@appium/base-driver/build/lib/protocol/protocol.d.ts +66 -0
  199. package/node_modules/@appium/base-driver/build/lib/protocol/protocol.d.ts.map +1 -0
  200. package/node_modules/@appium/base-driver/build/lib/protocol/protocol.js +513 -0
  201. package/node_modules/@appium/base-driver/build/lib/protocol/protocol.js.map +1 -0
  202. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium-device.d.ts +128 -0
  203. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium-device.d.ts.map +1 -0
  204. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium-device.js +94 -0
  205. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium-device.js.map +1 -0
  206. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium.d.ts +70 -0
  207. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium.d.ts.map +1 -0
  208. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium.js +42 -0
  209. package/node_modules/@appium/base-driver/build/lib/protocol/routes/appium.js.map +1 -0
  210. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/chromium-cdp.d.ts +15 -0
  211. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/chromium-cdp.d.ts.map +1 -0
  212. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/chromium-cdp.js +13 -0
  213. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/chromium-cdp.js.map +1 -0
  214. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/custom-handlers.d.ts +15 -0
  215. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/custom-handlers.d.ts.map +1 -0
  216. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/custom-handlers.js +13 -0
  217. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/custom-handlers.js.map +1 -0
  218. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/device-posture.d.ts +18 -0
  219. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/device-posture.d.ts.map +1 -0
  220. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/device-posture.js +14 -0
  221. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/device-posture.js.map +1 -0
  222. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/fedcm.d.ts +56 -0
  223. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/fedcm.d.ts.map +1 -0
  224. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/fedcm.js +34 -0
  225. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/fedcm.js.map +1 -0
  226. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/index.d.ts +228 -0
  227. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/index.d.ts.map +1 -0
  228. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/index.js +37 -0
  229. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/index.js.map +1 -0
  230. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/payment.d.ts +15 -0
  231. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/payment.d.ts.map +1 -0
  232. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/payment.js +13 -0
  233. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/payment.js.map +1 -0
  234. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/permissions.d.ts +15 -0
  235. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/permissions.d.ts.map +1 -0
  236. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/permissions.js +13 -0
  237. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/permissions.js.map +1 -0
  238. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/pressure.d.ts +27 -0
  239. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/pressure.d.ts.map +1 -0
  240. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/pressure.js +20 -0
  241. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/pressure.js.map +1 -0
  242. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/privacy.d.ts +18 -0
  243. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/privacy.d.ts.map +1 -0
  244. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/privacy.js +14 -0
  245. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/privacy.js.map +1 -0
  246. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/reporting.d.ts +16 -0
  247. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/reporting.d.ts.map +1 -0
  248. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/reporting.js +16 -0
  249. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/reporting.js.map +1 -0
  250. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/selenium.d.ts +19 -0
  251. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/selenium.d.ts.map +1 -0
  252. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/selenium.js +15 -0
  253. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/selenium.js.map +1 -0
  254. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/sensor.d.ts +30 -0
  255. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/sensor.d.ts.map +1 -0
  256. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/sensor.js +24 -0
  257. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/sensor.js.map +1 -0
  258. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/storage-access.d.ts +15 -0
  259. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/storage-access.d.ts.map +1 -0
  260. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/storage-access.js +13 -0
  261. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/storage-access.js.map +1 -0
  262. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/webauthn.d.ts +51 -0
  263. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/webauthn.d.ts.map +1 -0
  264. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/webauthn.js +48 -0
  265. package/node_modules/@appium/base-driver/build/lib/protocol/routes/extensions/webauthn.js.map +1 -0
  266. package/node_modules/@appium/base-driver/build/lib/protocol/routes/index.d.ts +898 -0
  267. package/node_modules/@appium/base-driver/build/lib/protocol/routes/index.d.ts.map +1 -0
  268. package/node_modules/@appium/base-driver/build/lib/protocol/routes/index.js +90 -0
  269. package/node_modules/@appium/base-driver/build/lib/protocol/routes/index.js.map +1 -0
  270. package/node_modules/@appium/base-driver/build/lib/protocol/routes/jsonwp.d.ts +80 -0
  271. package/node_modules/@appium/base-driver/build/lib/protocol/routes/jsonwp.d.ts.map +1 -0
  272. package/node_modules/@appium/base-driver/build/lib/protocol/routes/jsonwp.js +58 -0
  273. package/node_modules/@appium/base-driver/build/lib/protocol/routes/jsonwp.js.map +1 -0
  274. package/node_modules/@appium/base-driver/build/lib/protocol/routes/mjsonwp.d.ts +53 -0
  275. package/node_modules/@appium/base-driver/build/lib/protocol/routes/mjsonwp.d.ts.map +1 -0
  276. package/node_modules/@appium/base-driver/build/lib/protocol/routes/mjsonwp.js +29 -0
  277. package/node_modules/@appium/base-driver/build/lib/protocol/routes/mjsonwp.js.map +1 -0
  278. package/node_modules/@appium/base-driver/build/lib/protocol/routes/w3c.d.ts +361 -0
  279. package/node_modules/@appium/base-driver/build/lib/protocol/routes/w3c.d.ts.map +1 -0
  280. package/node_modules/@appium/base-driver/build/lib/protocol/routes/w3c.js +246 -0
  281. package/node_modules/@appium/base-driver/build/lib/protocol/routes/w3c.js.map +1 -0
  282. package/node_modules/@appium/base-driver/build/lib/protocol/validators.d.ts +5 -0
  283. package/node_modules/@appium/base-driver/build/lib/protocol/validators.d.ts.map +1 -0
  284. package/node_modules/@appium/base-driver/build/lib/protocol/validators.js +21 -0
  285. package/node_modules/@appium/base-driver/build/lib/protocol/validators.js.map +1 -0
  286. package/node_modules/@appium/base-driver/build/lib/test-pages/crash.d.ts +9 -0
  287. package/node_modules/@appium/base-driver/build/lib/test-pages/crash.d.ts.map +1 -0
  288. package/node_modules/@appium/base-driver/build/lib/test-pages/crash.js +18 -0
  289. package/node_modules/@appium/base-driver/build/lib/test-pages/crash.js.map +1 -0
  290. package/node_modules/@appium/base-driver/build/lib/test-pages/env.d.ts +5 -0
  291. package/node_modules/@appium/base-driver/build/lib/test-pages/env.d.ts.map +1 -0
  292. package/node_modules/@appium/base-driver/build/lib/test-pages/env.js +12 -0
  293. package/node_modules/@appium/base-driver/build/lib/test-pages/env.js.map +1 -0
  294. package/node_modules/@appium/base-driver/build/lib/test-pages/handlers.d.ts +10 -0
  295. package/node_modules/@appium/base-driver/build/lib/test-pages/handlers.d.ts.map +1 -0
  296. package/node_modules/@appium/base-driver/build/lib/test-pages/handlers.js +66 -0
  297. package/node_modules/@appium/base-driver/build/lib/test-pages/handlers.js.map +1 -0
  298. package/node_modules/@appium/base-driver/build/lib/test-pages/index.d.ts +6 -0
  299. package/node_modules/@appium/base-driver/build/lib/test-pages/index.d.ts.map +1 -0
  300. package/node_modules/@appium/base-driver/build/lib/test-pages/index.js +35 -0
  301. package/node_modules/@appium/base-driver/build/lib/test-pages/index.js.map +1 -0
  302. package/node_modules/@appium/base-driver/build/lib/test-pages/static-dir.d.ts +8 -0
  303. package/node_modules/@appium/base-driver/build/lib/test-pages/static-dir.d.ts.map +1 -0
  304. package/node_modules/@appium/base-driver/build/lib/test-pages/static-dir.js +23 -0
  305. package/node_modules/@appium/base-driver/build/lib/test-pages/static-dir.js.map +1 -0
  306. package/node_modules/@appium/base-driver/build/lib/test-pages/template.d.ts +3 -0
  307. package/node_modules/@appium/base-driver/build/lib/test-pages/template.d.ts.map +1 -0
  308. package/node_modules/@appium/base-driver/build/lib/test-pages/template.js +19 -0
  309. package/node_modules/@appium/base-driver/build/lib/test-pages/template.js.map +1 -0
  310. package/node_modules/@appium/base-driver/build/lib/utils.d.ts +14 -0
  311. package/node_modules/@appium/base-driver/build/lib/utils.d.ts.map +1 -0
  312. package/node_modules/@appium/base-driver/build/lib/utils.js +55 -0
  313. package/node_modules/@appium/base-driver/build/lib/utils.js.map +1 -0
  314. package/node_modules/@appium/base-driver/lib/basedriver/capabilities.ts +413 -0
  315. package/node_modules/@appium/base-driver/lib/basedriver/commands/bidi-subscriptions.ts +36 -0
  316. package/node_modules/@appium/base-driver/lib/basedriver/commands/bidi.ts +88 -0
  317. package/node_modules/@appium/base-driver/lib/basedriver/commands/event.ts +49 -0
  318. package/node_modules/@appium/base-driver/lib/basedriver/commands/execute.ts +48 -0
  319. package/node_modules/@appium/base-driver/lib/basedriver/commands/find.ts +120 -0
  320. package/node_modules/@appium/base-driver/lib/basedriver/commands/index.ts +6 -0
  321. package/node_modules/@appium/base-driver/lib/basedriver/commands/log.ts +35 -0
  322. package/node_modules/@appium/base-driver/lib/basedriver/commands/mixin.ts +15 -0
  323. package/node_modules/@appium/base-driver/lib/basedriver/commands/timeout.ts +136 -0
  324. package/node_modules/@appium/base-driver/lib/basedriver/core.ts +406 -0
  325. package/node_modules/@appium/base-driver/lib/basedriver/device-settings.ts +64 -0
  326. package/node_modules/@appium/base-driver/lib/basedriver/driver.ts +451 -0
  327. package/node_modules/@appium/base-driver/lib/basedriver/extension-core.ts +165 -0
  328. package/node_modules/@appium/base-driver/lib/basedriver/helpers.ts +621 -0
  329. package/node_modules/@appium/base-driver/lib/basedriver/ipc.ts +193 -0
  330. package/node_modules/@appium/base-driver/lib/basedriver/logger.ts +3 -0
  331. package/node_modules/@appium/base-driver/lib/basedriver/validation.ts +142 -0
  332. package/node_modules/@appium/base-driver/lib/constants.ts +19 -0
  333. package/node_modules/@appium/base-driver/lib/express/express-logging.ts +80 -0
  334. package/node_modules/@appium/base-driver/lib/express/idempotency.ts +198 -0
  335. package/node_modules/@appium/base-driver/lib/express/logger.ts +3 -0
  336. package/node_modules/@appium/base-driver/lib/express/middleware.ts +207 -0
  337. package/node_modules/@appium/base-driver/lib/express/server.ts +443 -0
  338. package/node_modules/@appium/base-driver/lib/express/websocket.ts +71 -0
  339. package/node_modules/@appium/base-driver/lib/helpers/capabilities.ts +87 -0
  340. package/node_modules/@appium/base-driver/lib/helpers/extension-command-name.ts +25 -0
  341. package/node_modules/@appium/base-driver/lib/helpers/levenshtein-match.ts +75 -0
  342. package/node_modules/@appium/base-driver/lib/helpers/session.ts +8 -0
  343. package/node_modules/@appium/base-driver/lib/index.ts +50 -0
  344. package/node_modules/@appium/base-driver/lib/jsonwp-proxy/protocol-converter.ts +246 -0
  345. package/node_modules/@appium/base-driver/lib/jsonwp-proxy/proxy-request.ts +52 -0
  346. package/node_modules/@appium/base-driver/lib/jsonwp-proxy/proxy.ts +478 -0
  347. package/node_modules/@appium/base-driver/lib/jsonwp-status/status.ts +120 -0
  348. package/node_modules/@appium/base-driver/lib/protocol/bidi-commands.ts +41 -0
  349. package/node_modules/@appium/base-driver/lib/protocol/errors.ts +1125 -0
  350. package/node_modules/@appium/base-driver/lib/protocol/helpers.ts +41 -0
  351. package/node_modules/@appium/base-driver/lib/protocol/index.ts +38 -0
  352. package/node_modules/@appium/base-driver/lib/protocol/protocol.ts +624 -0
  353. package/node_modules/@appium/base-driver/lib/protocol/routes/appium-device.ts +92 -0
  354. package/node_modules/@appium/base-driver/lib/protocol/routes/appium.ts +40 -0
  355. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/chromium-cdp.ts +11 -0
  356. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/custom-handlers.ts +11 -0
  357. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/device-posture.ts +12 -0
  358. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/fedcm.ts +32 -0
  359. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/index.ts +36 -0
  360. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/payment.ts +11 -0
  361. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/permissions.ts +11 -0
  362. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/pressure.ts +18 -0
  363. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/privacy.ts +12 -0
  364. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/reporting.ts +14 -0
  365. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/selenium.ts +13 -0
  366. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/sensor.ts +22 -0
  367. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/storage-access.ts +11 -0
  368. package/node_modules/@appium/base-driver/lib/protocol/routes/extensions/webauthn.ts +46 -0
  369. package/node_modules/@appium/base-driver/lib/protocol/routes/index.ts +94 -0
  370. package/node_modules/@appium/base-driver/lib/protocol/routes/jsonwp.ts +56 -0
  371. package/node_modules/@appium/base-driver/lib/protocol/routes/mjsonwp.ts +27 -0
  372. package/node_modules/@appium/base-driver/lib/protocol/routes/w3c.ts +253 -0
  373. package/node_modules/@appium/base-driver/lib/protocol/validators.ts +20 -0
  374. package/node_modules/@appium/base-driver/lib/test-pages/crash.ts +15 -0
  375. package/node_modules/@appium/base-driver/lib/test-pages/env.ts +9 -0
  376. package/node_modules/@appium/base-driver/lib/test-pages/handlers.ts +67 -0
  377. package/node_modules/@appium/base-driver/lib/test-pages/index.ts +36 -0
  378. package/node_modules/@appium/base-driver/lib/test-pages/static-dir.ts +19 -0
  379. package/node_modules/@appium/base-driver/lib/test-pages/template.ts +15 -0
  380. package/node_modules/@appium/base-driver/lib/utils.ts +62 -0
  381. package/node_modules/@appium/base-driver/node_modules/axios/CHANGELOG.md +1934 -0
  382. package/node_modules/@appium/base-driver/node_modules/axios/LICENSE +7 -0
  383. package/node_modules/@appium/base-driver/node_modules/axios/MIGRATION_GUIDE.md +877 -0
  384. package/node_modules/@appium/base-driver/node_modules/axios/README.md +2851 -0
  385. package/node_modules/@appium/base-driver/node_modules/axios/dist/axios.js +5807 -0
  386. package/node_modules/@appium/base-driver/node_modules/axios/dist/axios.min.js +5 -0
  387. package/node_modules/@appium/base-driver/node_modules/axios/dist/axios.min.js.map +1 -0
  388. package/node_modules/@appium/base-driver/node_modules/axios/dist/browser/axios.cjs +5829 -0
  389. package/node_modules/@appium/base-driver/node_modules/axios/dist/esm/axios.js +5850 -0
  390. package/node_modules/@appium/base-driver/node_modules/axios/dist/esm/axios.min.js +3 -0
  391. package/node_modules/@appium/base-driver/node_modules/axios/dist/esm/axios.min.js.map +1 -0
  392. package/node_modules/@appium/base-driver/node_modules/axios/dist/node/axios.cjs +6808 -0
  393. package/node_modules/@appium/base-driver/node_modules/axios/index.d.cts +766 -0
  394. package/node_modules/@appium/base-driver/node_modules/axios/index.d.ts +787 -0
  395. package/node_modules/@appium/base-driver/node_modules/axios/index.js +45 -0
  396. package/node_modules/@appium/base-driver/node_modules/axios/lib/adapters/README.md +36 -0
  397. package/node_modules/@appium/base-driver/node_modules/axios/lib/adapters/adapters.js +132 -0
  398. package/node_modules/@appium/base-driver/node_modules/axios/lib/adapters/fetch.js +696 -0
  399. package/node_modules/@appium/base-driver/node_modules/axios/lib/adapters/http.js +1490 -0
  400. package/node_modules/@appium/base-driver/node_modules/axios/lib/adapters/xhr.js +277 -0
  401. package/node_modules/@appium/base-driver/node_modules/axios/lib/axios.js +89 -0
  402. package/node_modules/@appium/base-driver/node_modules/axios/lib/cancel/CancelToken.js +135 -0
  403. package/node_modules/@appium/base-driver/node_modules/axios/lib/cancel/CanceledError.js +22 -0
  404. package/node_modules/@appium/base-driver/node_modules/axios/lib/cancel/isCancel.js +5 -0
  405. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/Axios.js +306 -0
  406. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/AxiosError.js +219 -0
  407. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/AxiosHeaders.js +474 -0
  408. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/InterceptorManager.js +171 -0
  409. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/README.md +8 -0
  410. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/buildFullPath.js +76 -0
  411. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/dispatchRequest.js +95 -0
  412. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/mergeConfig.js +174 -0
  413. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/methodList.js +17 -0
  414. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/setFormDataHeaders.js +27 -0
  415. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/settle.js +27 -0
  416. package/node_modules/@appium/base-driver/node_modules/axios/lib/core/transformData.js +28 -0
  417. package/node_modules/@appium/base-driver/node_modules/axios/lib/defaults/index.js +178 -0
  418. package/node_modules/@appium/base-driver/node_modules/axios/lib/defaults/transitional.js +10 -0
  419. package/node_modules/@appium/base-driver/node_modules/axios/lib/env/README.md +3 -0
  420. package/node_modules/@appium/base-driver/node_modules/axios/lib/env/classes/FormData.js +2 -0
  421. package/node_modules/@appium/base-driver/node_modules/axios/lib/env/data.js +1 -0
  422. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/AxiosTransformStream.js +156 -0
  423. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +59 -0
  424. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/Http2Sessions.js +121 -0
  425. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/HttpStatusCode.js +88 -0
  426. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/README.md +7 -0
  427. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js +29 -0
  428. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/bind.js +14 -0
  429. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/buildURL.js +69 -0
  430. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/callbackify.js +18 -0
  431. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/combineURLs.js +23 -0
  432. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/composeSignals.js +68 -0
  433. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/cookies.js +64 -0
  434. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/deprecatedMethod.js +31 -0
  435. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +166 -0
  436. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/formDataToJSON.js +125 -0
  437. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/formDataToStream.js +119 -0
  438. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/fromDataURI.js +69 -0
  439. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/isAbsoluteURL.js +19 -0
  440. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/isAxiosError.js +14 -0
  441. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/isURLSameOrigin.js +16 -0
  442. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js +24 -0
  443. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/null.js +2 -0
  444. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/parseHeaders.js +71 -0
  445. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/parseProtocol.js +6 -0
  446. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/progressEventReducer.js +54 -0
  447. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/readBlob.js +15 -0
  448. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/resolveConfig.js +107 -0
  449. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/sanitizeHeaderValue.js +60 -0
  450. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/shouldBypassProxy.js +505 -0
  451. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/speedometer.js +55 -0
  452. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/spread.js +28 -0
  453. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/throttle.js +45 -0
  454. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/toFormData.js +279 -0
  455. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/toURLEncodedForm.js +19 -0
  456. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/trackStream.js +89 -0
  457. package/node_modules/@appium/base-driver/node_modules/axios/lib/helpers/validator.js +112 -0
  458. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/browser/classes/Blob.js +3 -0
  459. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/browser/classes/FormData.js +3 -0
  460. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +4 -0
  461. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/browser/index.js +13 -0
  462. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/common/utils.js +52 -0
  463. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/index.js +7 -0
  464. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/node/classes/Buffer.js +11 -0
  465. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/node/classes/FormData.js +3 -0
  466. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/node/classes/URLSearchParams.js +4 -0
  467. package/node_modules/@appium/base-driver/node_modules/axios/lib/platform/node/index.js +37 -0
  468. package/node_modules/@appium/base-driver/node_modules/axios/lib/utils.js +1150 -0
  469. package/node_modules/@appium/base-driver/node_modules/axios/package.json +203 -0
  470. package/node_modules/@appium/base-driver/package.json +75 -0
  471. package/node_modules/@appium/base-driver/test-fixtures/static/appium.png +0 -0
  472. package/node_modules/@appium/base-driver/test-fixtures/static/favicon.ico +0 -0
  473. package/node_modules/@appium/base-driver/test-fixtures/static/js/jquery.min.js +5 -0
  474. package/node_modules/@appium/base-driver/test-fixtures/static/test/frameset.html +10 -0
  475. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig-app-banner.html +84 -0
  476. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig-scrollable.html +135 -0
  477. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig.html +90 -0
  478. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig2.html +11 -0
  479. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig3.html +11 -0
  480. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig4.html +11 -0
  481. package/node_modules/@appium/base-driver/test-fixtures/static/test/guinea-pig5.html +11 -0
  482. package/node_modules/@appium/base-driver/test-fixtures/static/test/iframes.html +14 -0
  483. package/node_modules/@appium/base-driver/test-fixtures/static/test/shadow-dom.html +34 -0
  484. package/node_modules/@appium/base-driver/test-fixtures/static/test/subframe1.html +9 -0
  485. package/node_modules/@appium/base-driver/test-fixtures/static/test/subframe2.html +8 -0
  486. package/node_modules/@appium/base-driver/test-fixtures/static/test/subframe3.html +11 -0
  487. package/node_modules/@appium/base-driver/test-fixtures/static/test/touch.html +56 -0
  488. package/node_modules/@appium/base-driver/test-fixtures/static/test/welcome.html +10 -0
  489. package/node_modules/@appium/base-driver/tsconfig.json +28 -0
  490. package/node_modules/@appium/support/build/lib/npm.d.ts.map +1 -1
  491. package/node_modules/@appium/support/build/lib/npm.js +2 -1
  492. package/node_modules/@appium/support/build/lib/npm.js.map +1 -1
  493. package/node_modules/@appium/support/build/lib/util.d.ts.map +1 -1
  494. package/node_modules/@appium/support/build/lib/util.js +13 -1
  495. package/node_modules/@appium/support/build/lib/util.js.map +1 -1
  496. package/node_modules/@appium/support/build/lib/zip.d.ts +2 -1
  497. package/node_modules/@appium/support/build/lib/zip.d.ts.map +1 -1
  498. package/node_modules/@appium/support/build/lib/zip.js +193 -64
  499. package/node_modules/@appium/support/build/lib/zip.js.map +1 -1
  500. package/node_modules/@appium/support/lib/npm.ts +2 -1
  501. package/node_modules/@appium/support/lib/util.ts +13 -1
  502. package/node_modules/@appium/support/lib/zip.ts +231 -71
  503. package/node_modules/@appium/support/node_modules/axios/CHANGELOG.md +1934 -0
  504. package/node_modules/@appium/support/node_modules/axios/LICENSE +7 -0
  505. package/node_modules/@appium/support/node_modules/axios/MIGRATION_GUIDE.md +877 -0
  506. package/node_modules/@appium/support/node_modules/axios/README.md +2851 -0
  507. package/node_modules/@appium/support/node_modules/axios/dist/axios.js +5807 -0
  508. package/node_modules/@appium/support/node_modules/axios/dist/axios.min.js +5 -0
  509. package/node_modules/@appium/support/node_modules/axios/dist/axios.min.js.map +1 -0
  510. package/node_modules/@appium/support/node_modules/axios/dist/browser/axios.cjs +5829 -0
  511. package/node_modules/@appium/support/node_modules/axios/dist/esm/axios.js +5850 -0
  512. package/node_modules/@appium/support/node_modules/axios/dist/esm/axios.min.js +3 -0
  513. package/node_modules/@appium/support/node_modules/axios/dist/esm/axios.min.js.map +1 -0
  514. package/node_modules/@appium/support/node_modules/axios/dist/node/axios.cjs +6808 -0
  515. package/node_modules/@appium/support/node_modules/axios/index.d.cts +766 -0
  516. package/node_modules/@appium/support/node_modules/axios/index.d.ts +787 -0
  517. package/node_modules/@appium/support/node_modules/axios/index.js +45 -0
  518. package/node_modules/@appium/support/node_modules/axios/lib/adapters/README.md +36 -0
  519. package/node_modules/@appium/support/node_modules/axios/lib/adapters/adapters.js +132 -0
  520. package/node_modules/@appium/support/node_modules/axios/lib/adapters/fetch.js +696 -0
  521. package/node_modules/@appium/support/node_modules/axios/lib/adapters/http.js +1490 -0
  522. package/node_modules/@appium/support/node_modules/axios/lib/adapters/xhr.js +277 -0
  523. package/node_modules/@appium/support/node_modules/axios/lib/axios.js +89 -0
  524. package/node_modules/@appium/support/node_modules/axios/lib/cancel/CancelToken.js +135 -0
  525. package/node_modules/@appium/support/node_modules/axios/lib/cancel/CanceledError.js +22 -0
  526. package/node_modules/@appium/support/node_modules/axios/lib/cancel/isCancel.js +5 -0
  527. package/node_modules/@appium/support/node_modules/axios/lib/core/Axios.js +306 -0
  528. package/node_modules/@appium/support/node_modules/axios/lib/core/AxiosError.js +219 -0
  529. package/node_modules/@appium/support/node_modules/axios/lib/core/AxiosHeaders.js +474 -0
  530. package/node_modules/@appium/support/node_modules/axios/lib/core/InterceptorManager.js +171 -0
  531. package/node_modules/@appium/support/node_modules/axios/lib/core/README.md +8 -0
  532. package/node_modules/@appium/support/node_modules/axios/lib/core/buildFullPath.js +76 -0
  533. package/node_modules/@appium/support/node_modules/axios/lib/core/dispatchRequest.js +95 -0
  534. package/node_modules/@appium/support/node_modules/axios/lib/core/mergeConfig.js +174 -0
  535. package/node_modules/@appium/support/node_modules/axios/lib/core/methodList.js +17 -0
  536. package/node_modules/@appium/support/node_modules/axios/lib/core/setFormDataHeaders.js +27 -0
  537. package/node_modules/@appium/support/node_modules/axios/lib/core/settle.js +27 -0
  538. package/node_modules/@appium/support/node_modules/axios/lib/core/transformData.js +28 -0
  539. package/node_modules/@appium/support/node_modules/axios/lib/defaults/index.js +178 -0
  540. package/node_modules/@appium/support/node_modules/axios/lib/defaults/transitional.js +10 -0
  541. package/node_modules/@appium/support/node_modules/axios/lib/env/README.md +3 -0
  542. package/node_modules/@appium/support/node_modules/axios/lib/env/classes/FormData.js +2 -0
  543. package/node_modules/@appium/support/node_modules/axios/lib/env/data.js +1 -0
  544. package/node_modules/@appium/support/node_modules/axios/lib/helpers/AxiosTransformStream.js +156 -0
  545. package/node_modules/@appium/support/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +59 -0
  546. package/node_modules/@appium/support/node_modules/axios/lib/helpers/Http2Sessions.js +121 -0
  547. package/node_modules/@appium/support/node_modules/axios/lib/helpers/HttpStatusCode.js +88 -0
  548. package/node_modules/@appium/support/node_modules/axios/lib/helpers/README.md +7 -0
  549. package/node_modules/@appium/support/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js +29 -0
  550. package/node_modules/@appium/support/node_modules/axios/lib/helpers/bind.js +14 -0
  551. package/node_modules/@appium/support/node_modules/axios/lib/helpers/buildURL.js +69 -0
  552. package/node_modules/@appium/support/node_modules/axios/lib/helpers/callbackify.js +18 -0
  553. package/node_modules/@appium/support/node_modules/axios/lib/helpers/combineURLs.js +23 -0
  554. package/node_modules/@appium/support/node_modules/axios/lib/helpers/composeSignals.js +68 -0
  555. package/node_modules/@appium/support/node_modules/axios/lib/helpers/cookies.js +64 -0
  556. package/node_modules/@appium/support/node_modules/axios/lib/helpers/deprecatedMethod.js +31 -0
  557. package/node_modules/@appium/support/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +166 -0
  558. package/node_modules/@appium/support/node_modules/axios/lib/helpers/formDataToJSON.js +125 -0
  559. package/node_modules/@appium/support/node_modules/axios/lib/helpers/formDataToStream.js +119 -0
  560. package/node_modules/@appium/support/node_modules/axios/lib/helpers/fromDataURI.js +69 -0
  561. package/node_modules/@appium/support/node_modules/axios/lib/helpers/isAbsoluteURL.js +19 -0
  562. package/node_modules/@appium/support/node_modules/axios/lib/helpers/isAxiosError.js +14 -0
  563. package/node_modules/@appium/support/node_modules/axios/lib/helpers/isURLSameOrigin.js +16 -0
  564. package/node_modules/@appium/support/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js +24 -0
  565. package/node_modules/@appium/support/node_modules/axios/lib/helpers/null.js +2 -0
  566. package/node_modules/@appium/support/node_modules/axios/lib/helpers/parseHeaders.js +71 -0
  567. package/node_modules/@appium/support/node_modules/axios/lib/helpers/parseProtocol.js +6 -0
  568. package/node_modules/@appium/support/node_modules/axios/lib/helpers/progressEventReducer.js +54 -0
  569. package/node_modules/@appium/support/node_modules/axios/lib/helpers/readBlob.js +15 -0
  570. package/node_modules/@appium/support/node_modules/axios/lib/helpers/resolveConfig.js +107 -0
  571. package/node_modules/@appium/support/node_modules/axios/lib/helpers/sanitizeHeaderValue.js +60 -0
  572. package/node_modules/@appium/support/node_modules/axios/lib/helpers/shouldBypassProxy.js +505 -0
  573. package/node_modules/@appium/support/node_modules/axios/lib/helpers/speedometer.js +55 -0
  574. package/node_modules/@appium/support/node_modules/axios/lib/helpers/spread.js +28 -0
  575. package/node_modules/@appium/support/node_modules/axios/lib/helpers/throttle.js +45 -0
  576. package/node_modules/@appium/support/node_modules/axios/lib/helpers/toFormData.js +279 -0
  577. package/node_modules/@appium/support/node_modules/axios/lib/helpers/toURLEncodedForm.js +19 -0
  578. package/node_modules/@appium/support/node_modules/axios/lib/helpers/trackStream.js +89 -0
  579. package/node_modules/@appium/support/node_modules/axios/lib/helpers/validator.js +112 -0
  580. package/node_modules/@appium/support/node_modules/axios/lib/platform/browser/classes/Blob.js +3 -0
  581. package/node_modules/@appium/support/node_modules/axios/lib/platform/browser/classes/FormData.js +3 -0
  582. package/node_modules/@appium/support/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +4 -0
  583. package/node_modules/@appium/support/node_modules/axios/lib/platform/browser/index.js +13 -0
  584. package/node_modules/@appium/support/node_modules/axios/lib/platform/common/utils.js +52 -0
  585. package/node_modules/@appium/support/node_modules/axios/lib/platform/index.js +7 -0
  586. package/node_modules/@appium/support/node_modules/axios/lib/platform/node/classes/Buffer.js +11 -0
  587. package/node_modules/@appium/support/node_modules/axios/lib/platform/node/classes/FormData.js +3 -0
  588. package/node_modules/@appium/support/node_modules/axios/lib/platform/node/classes/URLSearchParams.js +4 -0
  589. package/node_modules/@appium/support/node_modules/axios/lib/platform/node/index.js +37 -0
  590. package/node_modules/@appium/support/node_modules/axios/lib/utils.js +1150 -0
  591. package/node_modules/@appium/support/node_modules/axios/package.json +203 -0
  592. package/node_modules/@appium/support/package.json +6 -6
  593. package/node_modules/@appium/types/build/lib/commands/basedriver.d.ts +6 -4
  594. package/node_modules/@appium/types/build/lib/commands/basedriver.d.ts.map +1 -1
  595. package/node_modules/@appium/types/lib/commands/basedriver.ts +4 -4
  596. package/node_modules/@appium/types/package.json +2 -2
  597. package/node_modules/accepts/HISTORY.md +250 -0
  598. package/node_modules/accepts/LICENSE +23 -0
  599. package/node_modules/accepts/README.md +140 -0
  600. package/node_modules/accepts/index.js +238 -0
  601. package/node_modules/accepts/package.json +47 -0
  602. package/node_modules/appium-chromedriver/CHANGELOG.md +1932 -0
  603. package/node_modules/appium-chromedriver/LICENSE +201 -0
  604. package/node_modules/appium-chromedriver/README.md +146 -0
  605. package/node_modules/appium-chromedriver/build/lib/chromedriver.d.ts +121 -0
  606. package/node_modules/appium-chromedriver/build/lib/chromedriver.d.ts.map +1 -0
  607. package/node_modules/appium-chromedriver/build/lib/chromedriver.js +307 -0
  608. package/node_modules/appium-chromedriver/build/lib/chromedriver.js.map +1 -0
  609. package/node_modules/appium-chromedriver/build/lib/commands/binary.d.ts +28 -0
  610. package/node_modules/appium-chromedriver/build/lib/commands/binary.d.ts.map +1 -0
  611. package/node_modules/appium-chromedriver/build/lib/commands/binary.js +300 -0
  612. package/node_modules/appium-chromedriver/build/lib/commands/binary.js.map +1 -0
  613. package/node_modules/appium-chromedriver/build/lib/commands/process.d.ts +18 -0
  614. package/node_modules/appium-chromedriver/build/lib/commands/process.d.ts.map +1 -0
  615. package/node_modules/appium-chromedriver/build/lib/commands/process.js +104 -0
  616. package/node_modules/appium-chromedriver/build/lib/commands/process.js.map +1 -0
  617. package/node_modules/appium-chromedriver/build/lib/commands/session.d.ts +28 -0
  618. package/node_modules/appium-chromedriver/build/lib/commands/session.d.ts.map +1 -0
  619. package/node_modules/appium-chromedriver/build/lib/commands/session.js +88 -0
  620. package/node_modules/appium-chromedriver/build/lib/commands/session.js.map +1 -0
  621. package/node_modules/appium-chromedriver/build/lib/commands/types.d.ts +32 -0
  622. package/node_modules/appium-chromedriver/build/lib/commands/types.d.ts.map +1 -0
  623. package/node_modules/appium-chromedriver/build/lib/commands/types.js +2 -0
  624. package/node_modules/appium-chromedriver/build/lib/commands/types.js.map +1 -0
  625. package/node_modules/appium-chromedriver/build/lib/commands/version.d.ts +7 -0
  626. package/node_modules/appium-chromedriver/build/lib/commands/version.d.ts.map +1 -0
  627. package/node_modules/appium-chromedriver/build/lib/commands/version.js +94 -0
  628. package/node_modules/appium-chromedriver/build/lib/commands/version.js.map +1 -0
  629. package/node_modules/appium-chromedriver/build/lib/constants.d.ts +30 -0
  630. package/node_modules/appium-chromedriver/build/lib/constants.d.ts.map +1 -0
  631. package/node_modules/appium-chromedriver/build/lib/constants.js +32 -0
  632. package/node_modules/appium-chromedriver/build/lib/constants.js.map +1 -0
  633. package/node_modules/appium-chromedriver/build/lib/index.d.ts +6 -0
  634. package/node_modules/appium-chromedriver/build/lib/index.d.ts.map +1 -0
  635. package/node_modules/appium-chromedriver/build/lib/index.js +5 -0
  636. package/node_modules/appium-chromedriver/build/lib/index.js.map +1 -0
  637. package/node_modules/appium-chromedriver/build/lib/storage-client/chromelabs.d.ts +22 -0
  638. package/node_modules/appium-chromedriver/build/lib/storage-client/chromelabs.d.ts.map +1 -0
  639. package/node_modules/appium-chromedriver/build/lib/storage-client/chromelabs.js +136 -0
  640. package/node_modules/appium-chromedriver/build/lib/storage-client/chromelabs.js.map +1 -0
  641. package/node_modules/appium-chromedriver/build/lib/storage-client/googleapis.d.ts +30 -0
  642. package/node_modules/appium-chromedriver/build/lib/storage-client/googleapis.d.ts.map +1 -0
  643. package/node_modules/appium-chromedriver/build/lib/storage-client/googleapis.js +162 -0
  644. package/node_modules/appium-chromedriver/build/lib/storage-client/googleapis.js.map +1 -0
  645. package/node_modules/appium-chromedriver/build/lib/storage-client/storage-client.d.ts +73 -0
  646. package/node_modules/appium-chromedriver/build/lib/storage-client/storage-client.d.ts.map +1 -0
  647. package/node_modules/appium-chromedriver/build/lib/storage-client/storage-client.js +347 -0
  648. package/node_modules/appium-chromedriver/build/lib/storage-client/storage-client.js.map +1 -0
  649. package/node_modules/appium-chromedriver/build/lib/types.d.ts +117 -0
  650. package/node_modules/appium-chromedriver/build/lib/types.d.ts.map +1 -0
  651. package/node_modules/appium-chromedriver/build/lib/types.js +2 -0
  652. package/node_modules/appium-chromedriver/build/lib/types.js.map +1 -0
  653. package/node_modules/appium-chromedriver/build/lib/utils.d.ts +81 -0
  654. package/node_modules/appium-chromedriver/build/lib/utils.d.ts.map +1 -0
  655. package/node_modules/appium-chromedriver/build/lib/utils.js +164 -0
  656. package/node_modules/appium-chromedriver/build/lib/utils.js.map +1 -0
  657. package/node_modules/appium-chromedriver/config/mapping.json +283 -0
  658. package/node_modules/appium-chromedriver/lib/chromedriver.ts +363 -0
  659. package/node_modules/appium-chromedriver/lib/commands/binary.ts +379 -0
  660. package/node_modules/appium-chromedriver/lib/commands/process.ts +110 -0
  661. package/node_modules/appium-chromedriver/lib/commands/session.ts +105 -0
  662. package/node_modules/appium-chromedriver/lib/commands/types.ts +36 -0
  663. package/node_modules/appium-chromedriver/lib/commands/version.ts +108 -0
  664. package/node_modules/appium-chromedriver/lib/constants.ts +35 -0
  665. package/node_modules/appium-chromedriver/lib/index.ts +5 -0
  666. package/node_modules/appium-chromedriver/lib/storage-client/chromelabs.ts +167 -0
  667. package/node_modules/appium-chromedriver/lib/storage-client/googleapis.ts +199 -0
  668. package/node_modules/appium-chromedriver/lib/storage-client/storage-client.ts +413 -0
  669. package/node_modules/appium-chromedriver/lib/types.ts +116 -0
  670. package/node_modules/appium-chromedriver/lib/utils.ts +196 -0
  671. package/node_modules/appium-chromedriver/package.json +71 -0
  672. package/node_modules/appium-xcode/CHANGELOG.md +7 -0
  673. package/node_modules/appium-xcode/package.json +4 -4
  674. package/node_modules/asyncbox/README.md +43 -0
  675. package/node_modules/asyncbox/build/cjs/lib/asyncfilter.d.ts +9 -0
  676. package/node_modules/asyncbox/build/cjs/lib/asyncfilter.d.ts.map +1 -0
  677. package/node_modules/asyncbox/build/cjs/lib/asyncfilter.js +35 -0
  678. package/node_modules/asyncbox/build/cjs/lib/asyncfilter.js.map +1 -0
  679. package/node_modules/asyncbox/build/cjs/lib/asyncmap.d.ts +9 -0
  680. package/node_modules/asyncbox/build/cjs/lib/asyncmap.d.ts.map +1 -0
  681. package/node_modules/asyncbox/build/cjs/lib/asyncmap.js +23 -0
  682. package/node_modules/asyncbox/build/cjs/lib/asyncmap.js.map +1 -0
  683. package/node_modules/asyncbox/build/cjs/lib/errors.d.ts +9 -0
  684. package/node_modules/asyncbox/build/cjs/lib/errors.d.ts.map +1 -0
  685. package/node_modules/asyncbox/build/cjs/lib/errors.js +20 -0
  686. package/node_modules/asyncbox/build/cjs/lib/errors.js.map +1 -0
  687. package/node_modules/asyncbox/build/cjs/lib/index.d.ts +12 -0
  688. package/node_modules/asyncbox/build/cjs/lib/index.d.ts.map +1 -0
  689. package/node_modules/asyncbox/build/cjs/lib/index.js +24 -0
  690. package/node_modules/asyncbox/build/cjs/lib/index.js.map +1 -0
  691. package/node_modules/asyncbox/build/cjs/lib/limit-function.d.ts +3 -0
  692. package/node_modules/asyncbox/build/cjs/lib/limit-function.d.ts.map +1 -0
  693. package/node_modules/asyncbox/build/cjs/lib/limit-function.js +15 -0
  694. package/node_modules/asyncbox/build/cjs/lib/limit-function.js.map +1 -0
  695. package/node_modules/asyncbox/build/cjs/lib/lock.d.ts +74 -0
  696. package/node_modules/asyncbox/build/cjs/lib/lock.d.ts.map +1 -0
  697. package/node_modules/asyncbox/build/cjs/lib/lock.js +295 -0
  698. package/node_modules/asyncbox/build/cjs/lib/lock.js.map +1 -0
  699. package/node_modules/asyncbox/build/cjs/lib/long-sleep.d.ts +15 -0
  700. package/node_modules/asyncbox/build/cjs/lib/long-sleep.d.ts.map +1 -0
  701. package/node_modules/asyncbox/build/cjs/lib/long-sleep.js +36 -0
  702. package/node_modules/asyncbox/build/cjs/lib/long-sleep.js.map +1 -0
  703. package/node_modules/asyncbox/build/cjs/lib/retry.d.ts +17 -0
  704. package/node_modules/asyncbox/build/cjs/lib/retry.d.ts.map +1 -0
  705. package/node_modules/asyncbox/build/cjs/lib/retry.js +57 -0
  706. package/node_modules/asyncbox/build/cjs/lib/retry.js.map +1 -0
  707. package/node_modules/asyncbox/build/cjs/lib/sleep.d.ts +20 -0
  708. package/node_modules/asyncbox/build/cjs/lib/sleep.d.ts.map +1 -0
  709. package/node_modules/asyncbox/build/cjs/lib/sleep.js +61 -0
  710. package/node_modules/asyncbox/build/cjs/lib/sleep.js.map +1 -0
  711. package/node_modules/asyncbox/build/cjs/lib/wait-for-condition.d.ts +18 -0
  712. package/node_modules/asyncbox/build/cjs/lib/wait-for-condition.d.ts.map +1 -0
  713. package/node_modules/asyncbox/build/cjs/lib/wait-for-condition.js +51 -0
  714. package/node_modules/asyncbox/build/cjs/lib/wait-for-condition.js.map +1 -0
  715. package/node_modules/asyncbox/build/cjs/lib/with-timeout.d.ts +16 -0
  716. package/node_modules/asyncbox/build/cjs/lib/with-timeout.d.ts.map +1 -0
  717. package/node_modules/asyncbox/build/cjs/lib/with-timeout.js +45 -0
  718. package/node_modules/asyncbox/build/cjs/lib/with-timeout.js.map +1 -0
  719. package/node_modules/asyncbox/build/esm/lib/asyncfilter.d.ts +9 -0
  720. package/node_modules/asyncbox/build/esm/lib/asyncfilter.d.ts.map +1 -0
  721. package/node_modules/asyncbox/build/esm/lib/asyncfilter.js +32 -0
  722. package/node_modules/asyncbox/build/esm/lib/asyncfilter.js.map +1 -0
  723. package/node_modules/asyncbox/build/esm/lib/asyncmap.d.ts +9 -0
  724. package/node_modules/asyncbox/build/esm/lib/asyncmap.d.ts.map +1 -0
  725. package/node_modules/asyncbox/build/esm/lib/asyncmap.js +20 -0
  726. package/node_modules/asyncbox/build/esm/lib/asyncmap.js.map +1 -0
  727. package/node_modules/asyncbox/build/esm/lib/errors.d.ts +9 -0
  728. package/node_modules/asyncbox/build/esm/lib/errors.d.ts.map +1 -0
  729. package/node_modules/asyncbox/build/esm/lib/errors.js +15 -0
  730. package/node_modules/asyncbox/build/esm/lib/errors.js.map +1 -0
  731. package/node_modules/asyncbox/build/esm/lib/index.d.ts +12 -0
  732. package/node_modules/asyncbox/build/esm/lib/index.d.ts.map +1 -0
  733. package/node_modules/asyncbox/build/esm/lib/index.js +10 -0
  734. package/node_modules/asyncbox/build/esm/lib/index.js.map +1 -0
  735. package/node_modules/asyncbox/build/esm/lib/limit-function.d.ts +3 -0
  736. package/node_modules/asyncbox/build/esm/lib/limit-function.d.ts.map +1 -0
  737. package/node_modules/asyncbox/build/esm/lib/limit-function.js +12 -0
  738. package/node_modules/asyncbox/build/esm/lib/limit-function.js.map +1 -0
  739. package/node_modules/asyncbox/build/esm/lib/lock.d.ts +74 -0
  740. package/node_modules/asyncbox/build/esm/lib/lock.d.ts.map +1 -0
  741. package/node_modules/asyncbox/build/esm/lib/lock.js +291 -0
  742. package/node_modules/asyncbox/build/esm/lib/lock.js.map +1 -0
  743. package/node_modules/asyncbox/build/esm/lib/long-sleep.d.ts +15 -0
  744. package/node_modules/asyncbox/build/esm/lib/long-sleep.d.ts.map +1 -0
  745. package/node_modules/asyncbox/build/esm/lib/long-sleep.js +33 -0
  746. package/node_modules/asyncbox/build/esm/lib/long-sleep.js.map +1 -0
  747. package/node_modules/asyncbox/build/esm/lib/retry.d.ts +17 -0
  748. package/node_modules/asyncbox/build/esm/lib/retry.d.ts.map +1 -0
  749. package/node_modules/asyncbox/build/esm/lib/retry.js +53 -0
  750. package/node_modules/asyncbox/build/esm/lib/retry.js.map +1 -0
  751. package/node_modules/asyncbox/build/esm/lib/sleep.d.ts +20 -0
  752. package/node_modules/asyncbox/build/esm/lib/sleep.d.ts.map +1 -0
  753. package/node_modules/asyncbox/build/esm/lib/sleep.js +58 -0
  754. package/node_modules/asyncbox/build/esm/lib/sleep.js.map +1 -0
  755. package/node_modules/asyncbox/build/esm/lib/wait-for-condition.d.ts +18 -0
  756. package/node_modules/asyncbox/build/esm/lib/wait-for-condition.d.ts.map +1 -0
  757. package/node_modules/asyncbox/build/esm/lib/wait-for-condition.js +48 -0
  758. package/node_modules/asyncbox/build/esm/lib/wait-for-condition.js.map +1 -0
  759. package/node_modules/asyncbox/build/esm/lib/with-timeout.d.ts +16 -0
  760. package/node_modules/asyncbox/build/esm/lib/with-timeout.d.ts.map +1 -0
  761. package/node_modules/asyncbox/build/esm/lib/with-timeout.js +42 -0
  762. package/node_modules/asyncbox/build/esm/lib/with-timeout.js.map +1 -0
  763. package/node_modules/asyncbox/lib/asyncfilter.ts +38 -0
  764. package/node_modules/asyncbox/lib/asyncmap.ts +29 -0
  765. package/node_modules/asyncbox/lib/errors.ts +15 -0
  766. package/node_modules/asyncbox/lib/index.ts +21 -0
  767. package/node_modules/asyncbox/lib/limit-function.ts +18 -0
  768. package/node_modules/asyncbox/lib/lock.ts +360 -0
  769. package/node_modules/asyncbox/lib/long-sleep.ts +38 -0
  770. package/node_modules/asyncbox/lib/retry.ts +61 -0
  771. package/node_modules/asyncbox/lib/sleep.ts +79 -0
  772. package/node_modules/asyncbox/lib/wait-for-condition.ts +52 -0
  773. package/node_modules/asyncbox/lib/with-timeout.ts +43 -0
  774. package/node_modules/asyncbox/package.json +8 -8
  775. package/node_modules/axios/README.md +41 -106
  776. package/node_modules/axios/dist/axios.js +931 -278
  777. package/node_modules/axios/dist/axios.min.js +2 -2
  778. package/node_modules/axios/dist/axios.min.js.map +1 -1
  779. package/node_modules/axios/dist/browser/axios.cjs +948 -268
  780. package/node_modules/axios/dist/esm/axios.js +948 -268
  781. package/node_modules/axios/dist/esm/axios.min.js +2 -2
  782. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  783. package/node_modules/axios/dist/node/axios.cjs +925 -242
  784. package/node_modules/axios/index.d.cts +20 -1
  785. package/node_modules/axios/index.d.ts +18 -1
  786. package/node_modules/axios/lib/adapters/fetch.js +73 -20
  787. package/node_modules/axios/lib/adapters/http.js +145 -26
  788. package/node_modules/axios/lib/adapters/xhr.js +120 -13
  789. package/node_modules/axios/lib/core/Axios.js +67 -12
  790. package/node_modules/axios/lib/core/AxiosError.js +59 -0
  791. package/node_modules/axios/lib/core/AxiosHeaders.js +17 -4
  792. package/node_modules/axios/lib/core/InterceptorManager.js +13 -2
  793. package/node_modules/axios/lib/core/assertParamsAcyclic.js +49 -0
  794. package/node_modules/axios/lib/core/createMultipartBody.js +37 -0
  795. package/node_modules/axios/lib/core/dispatchRequest.js +20 -0
  796. package/node_modules/axios/lib/core/mergeConfig.js +183 -120
  797. package/node_modules/axios/lib/defaults/transitional.js +1 -0
  798. package/node_modules/axios/lib/env/data.js +1 -1
  799. package/node_modules/axios/lib/helpers/AxiosTransformStream.js +11 -2
  800. package/node_modules/axios/lib/helpers/Http2Sessions.js +2 -1
  801. package/node_modules/axios/lib/helpers/composeSignals.js +6 -3
  802. package/node_modules/axios/lib/helpers/cookies.js +30 -6
  803. package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +34 -7
  804. package/node_modules/axios/lib/helpers/formDataToBlob.js +113 -0
  805. package/node_modules/axios/lib/helpers/formDataToJSON.js +25 -1
  806. package/node_modules/axios/lib/helpers/fromDataURI.js +8 -2
  807. package/node_modules/axios/lib/helpers/isURLSameOrigin.js +4 -9
  808. package/node_modules/axios/lib/helpers/parseHeaders.js +2 -1
  809. package/node_modules/axios/lib/helpers/parseProtocol.js +1 -1
  810. package/node_modules/axios/lib/helpers/resolveConfig.js +16 -3
  811. package/node_modules/axios/lib/helpers/shouldBypassProxy.js +16 -1
  812. package/node_modules/axios/lib/utils.js +61 -10
  813. package/node_modules/axios/package.json +1 -2
  814. package/node_modules/bare-buffer/CMakeLists.txt +30 -0
  815. package/node_modules/bare-buffer/LICENSE +201 -0
  816. package/node_modules/bare-buffer/README.md +26 -0
  817. package/node_modules/bare-buffer/binding.c +2041 -0
  818. package/node_modules/bare-buffer/binding.js +1 -0
  819. package/node_modules/bare-buffer/global.d.ts +21 -0
  820. package/node_modules/bare-buffer/global.js +6 -0
  821. package/node_modules/bare-buffer/index.d.ts +769 -0
  822. package/node_modules/bare-buffer/index.js +1339 -0
  823. package/node_modules/bare-buffer/lib/ascii.js +36 -0
  824. package/node_modules/bare-buffer/lib/base64.js +25 -0
  825. package/node_modules/bare-buffer/lib/base64url.js +25 -0
  826. package/node_modules/bare-buffer/lib/checked.js +23 -0
  827. package/node_modules/bare-buffer/lib/constants.d.ts +7 -0
  828. package/node_modules/bare-buffer/lib/constants.js +3 -0
  829. package/node_modules/bare-buffer/lib/hex.js +20 -0
  830. package/node_modules/bare-buffer/lib/latin1.js +14 -0
  831. package/node_modules/bare-buffer/lib/utf16le.js +20 -0
  832. package/node_modules/bare-buffer/lib/utf8.js +18 -0
  833. package/node_modules/bare-buffer/package.json +59 -0
  834. package/node_modules/bare-buffer/prebuilds/android-arm/bare-buffer.bare +0 -0
  835. package/node_modules/bare-buffer/prebuilds/android-arm64/bare-buffer.bare +0 -0
  836. package/node_modules/bare-buffer/prebuilds/android-ia32/bare-buffer.bare +0 -0
  837. package/node_modules/bare-buffer/prebuilds/android-x64/bare-buffer.bare +0 -0
  838. package/node_modules/bare-buffer/prebuilds/darwin-arm64/bare-buffer.bare +0 -0
  839. package/node_modules/bare-buffer/prebuilds/darwin-x64/bare-buffer.bare +0 -0
  840. package/node_modules/bare-buffer/prebuilds/ios-arm64/bare-buffer.bare +0 -0
  841. package/node_modules/bare-buffer/prebuilds/ios-arm64-simulator/bare-buffer.bare +0 -0
  842. package/node_modules/bare-buffer/prebuilds/ios-x64-simulator/bare-buffer.bare +0 -0
  843. package/node_modules/bare-buffer/prebuilds/linux-arm64/bare-buffer.bare +0 -0
  844. package/node_modules/bare-buffer/prebuilds/linux-x64/bare-buffer.bare +0 -0
  845. package/node_modules/bare-buffer/prebuilds/win32-arm64/bare-buffer.bare +0 -0
  846. package/node_modules/bare-buffer/prebuilds/win32-x64/bare-buffer.bare +0 -0
  847. package/node_modules/bare-url/lib/url-search-params.js +16 -1
  848. package/node_modules/bare-url/package.json +2 -1
  849. package/node_modules/bare-url/prebuilds/android-arm/bare-url.bare +0 -0
  850. package/node_modules/bare-url/prebuilds/android-arm64/bare-url.bare +0 -0
  851. package/node_modules/bare-url/prebuilds/android-ia32/bare-url.bare +0 -0
  852. package/node_modules/bare-url/prebuilds/android-x64/bare-url.bare +0 -0
  853. package/node_modules/bare-url/prebuilds/darwin-arm64/bare-url.bare +0 -0
  854. package/node_modules/bare-url/prebuilds/darwin-x64/bare-url.bare +0 -0
  855. package/node_modules/bare-url/prebuilds/ios-arm64/bare-url.bare +0 -0
  856. package/node_modules/bare-url/prebuilds/ios-arm64-simulator/bare-url.bare +0 -0
  857. package/node_modules/bare-url/prebuilds/ios-x64-simulator/bare-url.bare +0 -0
  858. package/node_modules/bare-url/prebuilds/linux-arm64/bare-url.bare +0 -0
  859. package/node_modules/bare-url/prebuilds/linux-x64/bare-url.bare +0 -0
  860. package/node_modules/bare-url/prebuilds/win32-arm64/bare-url.bare +0 -0
  861. package/node_modules/bare-url/prebuilds/win32-x64/bare-url.bare +0 -0
  862. package/node_modules/basic-auth/HISTORY.md +52 -0
  863. package/node_modules/basic-auth/LICENSE +24 -0
  864. package/node_modules/basic-auth/README.md +113 -0
  865. package/node_modules/basic-auth/index.js +133 -0
  866. package/node_modules/basic-auth/package.json +41 -0
  867. package/node_modules/body-parser/LICENSE +23 -0
  868. package/node_modules/body-parser/README.md +513 -0
  869. package/node_modules/body-parser/index.js +55 -0
  870. package/node_modules/body-parser/lib/read.js +264 -0
  871. package/node_modules/body-parser/lib/types/json.js +186 -0
  872. package/node_modules/body-parser/lib/types/raw.js +42 -0
  873. package/node_modules/body-parser/lib/types/text.js +36 -0
  874. package/node_modules/body-parser/lib/types/urlencoded.js +138 -0
  875. package/node_modules/body-parser/lib/utils.js +85 -0
  876. package/node_modules/body-parser/package.json +60 -0
  877. package/node_modules/bytes/History.md +97 -0
  878. package/node_modules/bytes/LICENSE +23 -0
  879. package/node_modules/bytes/Readme.md +152 -0
  880. package/node_modules/bytes/index.js +170 -0
  881. package/node_modules/bytes/package.json +42 -0
  882. package/node_modules/call-bound/.eslintrc +13 -0
  883. package/node_modules/call-bound/.github/FUNDING.yml +12 -0
  884. package/node_modules/call-bound/.nycrc +9 -0
  885. package/node_modules/call-bound/CHANGELOG.md +42 -0
  886. package/node_modules/call-bound/LICENSE +21 -0
  887. package/node_modules/call-bound/README.md +53 -0
  888. package/node_modules/call-bound/index.d.ts +94 -0
  889. package/node_modules/call-bound/index.js +19 -0
  890. package/node_modules/call-bound/package.json +99 -0
  891. package/node_modules/call-bound/test/index.js +61 -0
  892. package/node_modules/call-bound/tsconfig.json +10 -0
  893. package/node_modules/content-disposition/LICENSE +22 -0
  894. package/node_modules/content-disposition/README.md +141 -0
  895. package/node_modules/content-disposition/index.js +536 -0
  896. package/node_modules/content-disposition/package.json +40 -0
  897. package/node_modules/content-type/LICENSE +22 -0
  898. package/node_modules/content-type/README.md +71 -0
  899. package/node_modules/content-type/dist/index.d.ts +46 -0
  900. package/node_modules/content-type/dist/index.js +176 -0
  901. package/node_modules/content-type/dist/index.js.map +1 -0
  902. package/node_modules/content-type/package.json +52 -0
  903. package/node_modules/cookie/LICENSE +24 -0
  904. package/node_modules/cookie/README.md +317 -0
  905. package/node_modules/cookie/SECURITY.md +25 -0
  906. package/node_modules/cookie/index.js +335 -0
  907. package/node_modules/cookie/package.json +44 -0
  908. package/node_modules/cookie-signature/History.md +70 -0
  909. package/node_modules/cookie-signature/LICENSE +22 -0
  910. package/node_modules/cookie-signature/Readme.md +23 -0
  911. package/node_modules/cookie-signature/index.js +47 -0
  912. package/node_modules/cookie-signature/package.json +24 -0
  913. package/node_modules/depd/History.md +103 -0
  914. package/node_modules/depd/LICENSE +22 -0
  915. package/node_modules/depd/Readme.md +280 -0
  916. package/node_modules/depd/index.js +538 -0
  917. package/node_modules/depd/lib/browser/index.js +77 -0
  918. package/node_modules/depd/package.json +45 -0
  919. package/node_modules/detect-node/LICENSE +21 -0
  920. package/node_modules/detect-node/Readme.md +30 -0
  921. package/node_modules/detect-node/browser.js +2 -0
  922. package/node_modules/detect-node/index.esm.js +2 -0
  923. package/node_modules/detect-node/index.js +2 -0
  924. package/node_modules/detect-node/package.json +25 -0
  925. package/node_modules/ee-first/LICENSE +22 -0
  926. package/node_modules/ee-first/README.md +80 -0
  927. package/node_modules/ee-first/index.js +95 -0
  928. package/node_modules/ee-first/package.json +29 -0
  929. package/node_modules/encodeurl/LICENSE +22 -0
  930. package/node_modules/encodeurl/README.md +123 -0
  931. package/node_modules/encodeurl/index.js +55 -0
  932. package/node_modules/encodeurl/package.json +44 -0
  933. package/node_modules/escape-html/LICENSE +24 -0
  934. package/node_modules/escape-html/Readme.md +43 -0
  935. package/node_modules/escape-html/index.js +78 -0
  936. package/node_modules/escape-html/package.json +24 -0
  937. package/node_modules/etag/HISTORY.md +83 -0
  938. package/node_modules/etag/LICENSE +22 -0
  939. package/node_modules/etag/README.md +159 -0
  940. package/node_modules/etag/index.js +131 -0
  941. package/node_modules/etag/package.json +47 -0
  942. package/node_modules/express/LICENSE +24 -0
  943. package/node_modules/express/Readme.md +276 -0
  944. package/node_modules/express/index.js +11 -0
  945. package/node_modules/express/lib/application.js +631 -0
  946. package/node_modules/express/lib/express.js +81 -0
  947. package/node_modules/express/lib/request.js +514 -0
  948. package/node_modules/express/lib/response.js +1053 -0
  949. package/node_modules/express/lib/utils.js +271 -0
  950. package/node_modules/express/lib/view.js +205 -0
  951. package/node_modules/express/node_modules/content-type/HISTORY.md +29 -0
  952. package/node_modules/express/node_modules/content-type/LICENSE +22 -0
  953. package/node_modules/express/node_modules/content-type/README.md +94 -0
  954. package/node_modules/express/node_modules/content-type/index.js +225 -0
  955. package/node_modules/express/node_modules/content-type/package.json +42 -0
  956. package/node_modules/express/package.json +99 -0
  957. package/node_modules/fastest-levenshtein/.eslintrc.json +30 -0
  958. package/node_modules/fastest-levenshtein/.prettierrc +4 -0
  959. package/node_modules/fastest-levenshtein/.travis.yml +21 -0
  960. package/node_modules/fastest-levenshtein/LICENSE.md +21 -0
  961. package/node_modules/fastest-levenshtein/README.md +57 -0
  962. package/node_modules/fastest-levenshtein/bench.js +96 -0
  963. package/node_modules/fastest-levenshtein/esm/mod.d.ts +4 -0
  964. package/node_modules/fastest-levenshtein/esm/mod.d.ts.map +1 -0
  965. package/node_modules/fastest-levenshtein/esm/mod.js +138 -0
  966. package/node_modules/fastest-levenshtein/mod.d.ts +3 -0
  967. package/node_modules/fastest-levenshtein/mod.js +142 -0
  968. package/node_modules/fastest-levenshtein/package.json +72 -0
  969. package/node_modules/fastest-levenshtein/test.js +55 -0
  970. package/node_modules/fastest-levenshtein/test.ts +67 -0
  971. package/node_modules/finalhandler/HISTORY.md +239 -0
  972. package/node_modules/finalhandler/LICENSE +22 -0
  973. package/node_modules/finalhandler/README.md +150 -0
  974. package/node_modules/finalhandler/index.js +293 -0
  975. package/node_modules/finalhandler/package.json +47 -0
  976. package/node_modules/follow-redirects/README.md +27 -1
  977. package/node_modules/follow-redirects/index.js +1 -5
  978. package/node_modules/follow-redirects/package.json +1 -1
  979. package/node_modules/forwarded/HISTORY.md +21 -0
  980. package/node_modules/forwarded/LICENSE +22 -0
  981. package/node_modules/forwarded/README.md +57 -0
  982. package/node_modules/forwarded/index.js +90 -0
  983. package/node_modules/forwarded/package.json +45 -0
  984. package/node_modules/fresh/HISTORY.md +80 -0
  985. package/node_modules/fresh/LICENSE +23 -0
  986. package/node_modules/fresh/README.md +117 -0
  987. package/node_modules/fresh/index.js +136 -0
  988. package/node_modules/fresh/package.json +46 -0
  989. package/node_modules/handle-thing/.travis.yml +15 -0
  990. package/node_modules/handle-thing/README.md +44 -0
  991. package/node_modules/handle-thing/lib/handle.js +263 -0
  992. package/node_modules/handle-thing/lib/queue.js +48 -0
  993. package/node_modules/handle-thing/package.json +38 -0
  994. package/node_modules/handle-thing/test/api-test.js +110 -0
  995. package/node_modules/hpack.js/.npmignore +2 -0
  996. package/node_modules/hpack.js/.travis.yml +6 -0
  997. package/node_modules/hpack.js/README.md +52 -0
  998. package/node_modules/hpack.js/bin/benchmark +34 -0
  999. package/node_modules/hpack.js/lib/hpack/compressor.js +127 -0
  1000. package/node_modules/hpack.js/lib/hpack/decoder.js +169 -0
  1001. package/node_modules/hpack.js/lib/hpack/decompressor.js +116 -0
  1002. package/node_modules/hpack.js/lib/hpack/encoder.js +129 -0
  1003. package/node_modules/hpack.js/lib/hpack/huffman.js +159 -0
  1004. package/node_modules/hpack.js/lib/hpack/static-table.js +691 -0
  1005. package/node_modules/hpack.js/lib/hpack/table.js +85 -0
  1006. package/node_modules/hpack.js/lib/hpack/utils.js +25 -0
  1007. package/node_modules/hpack.js/lib/hpack.js +12 -0
  1008. package/node_modules/hpack.js/node_modules/readable-stream/.travis.yml +34 -0
  1009. package/node_modules/hpack.js/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  1010. package/node_modules/hpack.js/node_modules/readable-stream/GOVERNANCE.md +136 -0
  1011. package/node_modules/hpack.js/node_modules/readable-stream/LICENSE +47 -0
  1012. package/node_modules/hpack.js/node_modules/readable-stream/README.md +58 -0
  1013. package/node_modules/hpack.js/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
  1014. package/node_modules/hpack.js/node_modules/readable-stream/duplex-browser.js +1 -0
  1015. package/node_modules/hpack.js/node_modules/readable-stream/duplex.js +1 -0
  1016. package/node_modules/hpack.js/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
  1017. package/node_modules/hpack.js/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
  1018. package/node_modules/hpack.js/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
  1019. package/node_modules/hpack.js/node_modules/readable-stream/lib/_stream_transform.js +214 -0
  1020. package/node_modules/hpack.js/node_modules/readable-stream/lib/_stream_writable.js +685 -0
  1021. package/node_modules/hpack.js/node_modules/readable-stream/lib/internal/streams/BufferList.js +78 -0
  1022. package/node_modules/hpack.js/node_modules/readable-stream/lib/internal/streams/destroy.js +84 -0
  1023. package/node_modules/hpack.js/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  1024. package/node_modules/hpack.js/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  1025. package/node_modules/hpack.js/node_modules/readable-stream/package.json +52 -0
  1026. package/node_modules/hpack.js/node_modules/readable-stream/passthrough.js +1 -0
  1027. package/node_modules/hpack.js/node_modules/readable-stream/readable-browser.js +7 -0
  1028. package/node_modules/hpack.js/node_modules/readable-stream/readable.js +19 -0
  1029. package/node_modules/hpack.js/node_modules/readable-stream/transform.js +1 -0
  1030. package/node_modules/hpack.js/node_modules/readable-stream/writable-browser.js +1 -0
  1031. package/node_modules/hpack.js/node_modules/readable-stream/writable.js +8 -0
  1032. package/node_modules/hpack.js/node_modules/string_decoder/.travis.yml +50 -0
  1033. package/node_modules/hpack.js/node_modules/string_decoder/LICENSE +48 -0
  1034. package/node_modules/hpack.js/node_modules/string_decoder/README.md +47 -0
  1035. package/node_modules/hpack.js/node_modules/string_decoder/lib/string_decoder.js +296 -0
  1036. package/node_modules/hpack.js/node_modules/string_decoder/package.json +31 -0
  1037. package/node_modules/hpack.js/package.json +35 -0
  1038. package/node_modules/hpack.js/test/compressor-test.js +136 -0
  1039. package/node_modules/hpack.js/test/decoder-test.js +181 -0
  1040. package/node_modules/hpack.js/test/decompressor-test.js +184 -0
  1041. package/node_modules/hpack.js/test/encoder-test.js +166 -0
  1042. package/node_modules/hpack.js/test/fixtures.js +232 -0
  1043. package/node_modules/hpack.js/tools/gen-huffman.js +309 -0
  1044. package/node_modules/hpack.js/tools/gen-static-table.js +103 -0
  1045. package/node_modules/hpack.js/tools/utils.js +23 -0
  1046. package/node_modules/http-deceiver/.npmignore +2 -0
  1047. package/node_modules/http-deceiver/.travis.yml +5 -0
  1048. package/node_modules/http-deceiver/README.md +31 -0
  1049. package/node_modules/http-deceiver/lib/deceiver.js +250 -0
  1050. package/node_modules/http-deceiver/package.json +30 -0
  1051. package/node_modules/http-deceiver/test/api-test.js +226 -0
  1052. package/node_modules/http-errors/HISTORY.md +186 -0
  1053. package/node_modules/http-errors/LICENSE +23 -0
  1054. package/node_modules/http-errors/README.md +169 -0
  1055. package/node_modules/http-errors/index.js +290 -0
  1056. package/node_modules/http-errors/package.json +54 -0
  1057. package/node_modules/http-status-codes/LICENSE +19 -0
  1058. package/node_modules/http-status-codes/README.md +140 -0
  1059. package/node_modules/http-status-codes/build/cjs/index.d.ts +63 -0
  1060. package/node_modules/http-status-codes/build/cjs/index.js +39 -0
  1061. package/node_modules/http-status-codes/build/cjs/legacy.d.ts +326 -0
  1062. package/node_modules/http-status-codes/build/cjs/legacy.js +330 -0
  1063. package/node_modules/http-status-codes/build/cjs/reason-phrases.d.ts +356 -0
  1064. package/node_modules/http-status-codes/build/cjs/reason-phrases.js +361 -0
  1065. package/node_modules/http-status-codes/build/cjs/status-codes.d.ts +356 -0
  1066. package/node_modules/http-status-codes/build/cjs/status-codes.js +361 -0
  1067. package/node_modules/http-status-codes/build/cjs/utils-functions.d.ts +28 -0
  1068. package/node_modules/http-status-codes/build/cjs/utils-functions.js +46 -0
  1069. package/node_modules/http-status-codes/build/cjs/utils.d.ts +2 -0
  1070. package/node_modules/http-status-codes/build/cjs/utils.js +124 -0
  1071. package/node_modules/http-status-codes/build/es/index.d.ts +63 -0
  1072. package/node_modules/http-status-codes/build/es/index.js +19 -0
  1073. package/node_modules/http-status-codes/build/es/legacy.d.ts +326 -0
  1074. package/node_modules/http-status-codes/build/es/legacy.js +327 -0
  1075. package/node_modules/http-status-codes/build/es/reason-phrases.d.ts +356 -0
  1076. package/node_modules/http-status-codes/build/es/reason-phrases.js +358 -0
  1077. package/node_modules/http-status-codes/build/es/status-codes.d.ts +356 -0
  1078. package/node_modules/http-status-codes/build/es/status-codes.js +358 -0
  1079. package/node_modules/http-status-codes/build/es/utils-functions.d.ts +28 -0
  1080. package/node_modules/http-status-codes/build/es/utils-functions.js +41 -0
  1081. package/node_modules/http-status-codes/build/es/utils.d.ts +2 -0
  1082. package/node_modules/http-status-codes/build/es/utils.js +121 -0
  1083. package/node_modules/http-status-codes/package.json +51 -0
  1084. package/node_modules/iconv-lite/LICENSE +21 -0
  1085. package/node_modules/iconv-lite/README.md +138 -0
  1086. package/node_modules/iconv-lite/encodings/dbcs-codec.js +532 -0
  1087. package/node_modules/iconv-lite/encodings/dbcs-data.js +185 -0
  1088. package/node_modules/iconv-lite/encodings/index.js +23 -0
  1089. package/node_modules/iconv-lite/encodings/internal.js +218 -0
  1090. package/node_modules/iconv-lite/encodings/sbcs-codec.js +75 -0
  1091. package/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  1092. package/node_modules/iconv-lite/encodings/sbcs-data.js +180 -0
  1093. package/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  1094. package/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  1095. package/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  1096. package/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  1097. package/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  1098. package/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  1099. package/node_modules/iconv-lite/encodings/tables/gbk-added.json +56 -0
  1100. package/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  1101. package/node_modules/iconv-lite/encodings/utf16.js +187 -0
  1102. package/node_modules/iconv-lite/encodings/utf32.js +314 -0
  1103. package/node_modules/iconv-lite/encodings/utf7.js +283 -0
  1104. package/node_modules/iconv-lite/lib/bom-handling.js +48 -0
  1105. package/node_modules/iconv-lite/lib/helpers/merge-exports.js +13 -0
  1106. package/node_modules/iconv-lite/lib/index.d.ts +129 -0
  1107. package/node_modules/iconv-lite/lib/index.js +182 -0
  1108. package/node_modules/iconv-lite/lib/streams.js +105 -0
  1109. package/node_modules/iconv-lite/package.json +70 -0
  1110. package/node_modules/iconv-lite/types/encodings.d.ts +425 -0
  1111. package/node_modules/ipaddr.js/LICENSE +19 -0
  1112. package/node_modules/ipaddr.js/README.md +233 -0
  1113. package/node_modules/ipaddr.js/ipaddr.min.js +1 -0
  1114. package/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
  1115. package/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
  1116. package/node_modules/ipaddr.js/package.json +35 -0
  1117. package/node_modules/is-promise/LICENSE +19 -0
  1118. package/node_modules/is-promise/index.d.ts +2 -0
  1119. package/node_modules/is-promise/index.js +6 -0
  1120. package/node_modules/is-promise/index.mjs +3 -0
  1121. package/node_modules/is-promise/package.json +30 -0
  1122. package/node_modules/is-promise/readme.md +33 -0
  1123. package/node_modules/media-typer/HISTORY.md +50 -0
  1124. package/node_modules/media-typer/LICENSE +22 -0
  1125. package/node_modules/media-typer/README.md +94 -0
  1126. package/node_modules/media-typer/index.js +135 -0
  1127. package/node_modules/media-typer/package.json +37 -0
  1128. package/node_modules/merge-descriptors/index.d.ts +11 -0
  1129. package/node_modules/merge-descriptors/index.js +26 -0
  1130. package/node_modules/merge-descriptors/license +11 -0
  1131. package/node_modules/merge-descriptors/package.json +50 -0
  1132. package/node_modules/merge-descriptors/readme.md +55 -0
  1133. package/node_modules/method-override/HISTORY.md +163 -0
  1134. package/node_modules/method-override/LICENSE +23 -0
  1135. package/node_modules/method-override/README.md +180 -0
  1136. package/node_modules/method-override/index.js +144 -0
  1137. package/node_modules/method-override/node_modules/debug/.coveralls.yml +1 -0
  1138. package/node_modules/method-override/node_modules/debug/.eslintrc +14 -0
  1139. package/node_modules/method-override/node_modules/debug/.npmignore +9 -0
  1140. package/node_modules/method-override/node_modules/debug/.travis.yml +20 -0
  1141. package/node_modules/method-override/node_modules/debug/CHANGELOG.md +395 -0
  1142. package/node_modules/method-override/node_modules/debug/LICENSE +19 -0
  1143. package/node_modules/method-override/node_modules/debug/Makefile +58 -0
  1144. package/node_modules/method-override/node_modules/debug/README.md +368 -0
  1145. package/node_modules/method-override/node_modules/debug/karma.conf.js +70 -0
  1146. package/node_modules/method-override/node_modules/debug/node.js +1 -0
  1147. package/node_modules/method-override/node_modules/debug/package.json +43 -0
  1148. package/node_modules/method-override/node_modules/debug/src/browser.js +195 -0
  1149. package/node_modules/method-override/node_modules/debug/src/debug.js +225 -0
  1150. package/node_modules/method-override/node_modules/debug/src/index.js +10 -0
  1151. package/node_modules/method-override/node_modules/debug/src/node.js +186 -0
  1152. package/node_modules/method-override/node_modules/ms/index.js +152 -0
  1153. package/node_modules/method-override/node_modules/ms/license.md +21 -0
  1154. package/node_modules/method-override/node_modules/ms/package.json +37 -0
  1155. package/node_modules/method-override/node_modules/ms/readme.md +51 -0
  1156. package/node_modules/method-override/package.json +43 -0
  1157. package/node_modules/methods/HISTORY.md +29 -0
  1158. package/node_modules/methods/LICENSE +24 -0
  1159. package/node_modules/methods/README.md +51 -0
  1160. package/node_modules/methods/index.js +69 -0
  1161. package/node_modules/methods/package.json +36 -0
  1162. package/node_modules/mime-db/HISTORY.md +541 -0
  1163. package/node_modules/mime-db/LICENSE +23 -0
  1164. package/node_modules/mime-db/README.md +109 -0
  1165. package/node_modules/mime-db/db.json +9342 -0
  1166. package/node_modules/mime-db/index.js +12 -0
  1167. package/node_modules/mime-db/package.json +56 -0
  1168. package/node_modules/mime-types/HISTORY.md +428 -0
  1169. package/node_modules/mime-types/LICENSE +23 -0
  1170. package/node_modules/mime-types/README.md +126 -0
  1171. package/node_modules/mime-types/index.js +211 -0
  1172. package/node_modules/mime-types/mimeScore.js +57 -0
  1173. package/node_modules/mime-types/package.json +49 -0
  1174. package/node_modules/minimalistic-assert/LICENSE +13 -0
  1175. package/node_modules/minimalistic-assert/index.js +11 -0
  1176. package/node_modules/minimalistic-assert/package.json +19 -0
  1177. package/node_modules/minimalistic-assert/readme.md +4 -0
  1178. package/node_modules/morgan/LICENSE +23 -0
  1179. package/node_modules/morgan/README.md +479 -0
  1180. package/node_modules/morgan/index.js +596 -0
  1181. package/node_modules/morgan/node_modules/debug/.coveralls.yml +1 -0
  1182. package/node_modules/morgan/node_modules/debug/.eslintrc +11 -0
  1183. package/node_modules/morgan/node_modules/debug/.npmignore +9 -0
  1184. package/node_modules/morgan/node_modules/debug/.travis.yml +14 -0
  1185. package/node_modules/morgan/node_modules/debug/CHANGELOG.md +362 -0
  1186. package/node_modules/morgan/node_modules/debug/LICENSE +19 -0
  1187. package/node_modules/morgan/node_modules/debug/Makefile +50 -0
  1188. package/node_modules/morgan/node_modules/debug/README.md +312 -0
  1189. package/node_modules/morgan/node_modules/debug/component.json +19 -0
  1190. package/node_modules/morgan/node_modules/debug/karma.conf.js +70 -0
  1191. package/node_modules/morgan/node_modules/debug/node.js +1 -0
  1192. package/node_modules/morgan/node_modules/debug/package.json +49 -0
  1193. package/node_modules/morgan/node_modules/debug/src/browser.js +185 -0
  1194. package/node_modules/morgan/node_modules/debug/src/debug.js +202 -0
  1195. package/node_modules/morgan/node_modules/debug/src/index.js +10 -0
  1196. package/node_modules/morgan/node_modules/debug/src/inspector-log.js +15 -0
  1197. package/node_modules/morgan/node_modules/debug/src/node.js +248 -0
  1198. package/node_modules/morgan/node_modules/ms/index.js +152 -0
  1199. package/node_modules/morgan/node_modules/ms/license.md +21 -0
  1200. package/node_modules/morgan/node_modules/ms/package.json +37 -0
  1201. package/node_modules/morgan/node_modules/ms/readme.md +51 -0
  1202. package/node_modules/morgan/package.json +55 -0
  1203. package/node_modules/negotiator/LICENSE +24 -0
  1204. package/node_modules/negotiator/README.md +212 -0
  1205. package/node_modules/negotiator/index.js +83 -0
  1206. package/node_modules/negotiator/lib/accept.js +54 -0
  1207. package/node_modules/negotiator/lib/charset.js +145 -0
  1208. package/node_modules/negotiator/lib/encoding.js +184 -0
  1209. package/node_modules/negotiator/lib/language.js +158 -0
  1210. package/node_modules/negotiator/lib/mediaType.js +176 -0
  1211. package/node_modules/negotiator/package.json +49 -0
  1212. package/node_modules/object-inspect/.eslintrc +53 -0
  1213. package/node_modules/object-inspect/.github/FUNDING.yml +12 -0
  1214. package/node_modules/object-inspect/.nycrc +13 -0
  1215. package/node_modules/object-inspect/CHANGELOG.md +424 -0
  1216. package/node_modules/object-inspect/LICENSE +21 -0
  1217. package/node_modules/object-inspect/example/all.js +23 -0
  1218. package/node_modules/object-inspect/example/circular.js +6 -0
  1219. package/node_modules/object-inspect/example/fn.js +5 -0
  1220. package/node_modules/object-inspect/example/inspect.js +10 -0
  1221. package/node_modules/object-inspect/index.js +544 -0
  1222. package/node_modules/object-inspect/package-support.json +20 -0
  1223. package/node_modules/object-inspect/package.json +105 -0
  1224. package/node_modules/object-inspect/readme.markdown +84 -0
  1225. package/node_modules/object-inspect/test/bigint.js +58 -0
  1226. package/node_modules/object-inspect/test/browser/dom.js +15 -0
  1227. package/node_modules/object-inspect/test/circular.js +16 -0
  1228. package/node_modules/object-inspect/test/deep.js +12 -0
  1229. package/node_modules/object-inspect/test/element.js +53 -0
  1230. package/node_modules/object-inspect/test/err.js +48 -0
  1231. package/node_modules/object-inspect/test/fakes.js +29 -0
  1232. package/node_modules/object-inspect/test/fn.js +76 -0
  1233. package/node_modules/object-inspect/test/global.js +17 -0
  1234. package/node_modules/object-inspect/test/has.js +15 -0
  1235. package/node_modules/object-inspect/test/holes.js +15 -0
  1236. package/node_modules/object-inspect/test/indent-option.js +271 -0
  1237. package/node_modules/object-inspect/test/inspect.js +139 -0
  1238. package/node_modules/object-inspect/test/lowbyte.js +12 -0
  1239. package/node_modules/object-inspect/test/number.js +58 -0
  1240. package/node_modules/object-inspect/test/quoteStyle.js +26 -0
  1241. package/node_modules/object-inspect/test/toStringTag.js +40 -0
  1242. package/node_modules/object-inspect/test/undef.js +12 -0
  1243. package/node_modules/object-inspect/test/values.js +261 -0
  1244. package/node_modules/object-inspect/test-core-js.js +26 -0
  1245. package/node_modules/object-inspect/util.inspect.js +1 -0
  1246. package/node_modules/obuf/LICENSE +20 -0
  1247. package/node_modules/obuf/README.md +12 -0
  1248. package/node_modules/obuf/index.js +396 -0
  1249. package/node_modules/obuf/package.json +27 -0
  1250. package/node_modules/obuf/test/buffer-test.js +268 -0
  1251. package/node_modules/on-finished/LICENSE +23 -0
  1252. package/node_modules/on-finished/README.md +162 -0
  1253. package/node_modules/on-finished/index.js +246 -0
  1254. package/node_modules/on-finished/package.json +43 -0
  1255. package/node_modules/on-headers/HISTORY.md +26 -0
  1256. package/node_modules/on-headers/LICENSE +22 -0
  1257. package/node_modules/on-headers/README.md +81 -0
  1258. package/node_modules/on-headers/index.js +180 -0
  1259. package/node_modules/on-headers/package.json +44 -0
  1260. package/node_modules/parseurl/HISTORY.md +58 -0
  1261. package/node_modules/parseurl/LICENSE +24 -0
  1262. package/node_modules/parseurl/README.md +133 -0
  1263. package/node_modules/parseurl/index.js +158 -0
  1264. package/node_modules/parseurl/package.json +40 -0
  1265. package/node_modules/path-to-regexp/LICENSE +21 -0
  1266. package/node_modules/path-to-regexp/Readme.md +224 -0
  1267. package/node_modules/path-to-regexp/dist/index.d.ts +147 -0
  1268. package/node_modules/path-to-regexp/dist/index.js +431 -0
  1269. package/node_modules/path-to-regexp/dist/index.js.map +1 -0
  1270. package/node_modules/path-to-regexp/package.json +64 -0
  1271. package/node_modules/proxy-addr/HISTORY.md +167 -0
  1272. package/node_modules/proxy-addr/LICENSE +22 -0
  1273. package/node_modules/proxy-addr/README.md +139 -0
  1274. package/node_modules/proxy-addr/index.js +359 -0
  1275. package/node_modules/proxy-addr/package.json +51 -0
  1276. package/node_modules/qs/.editorconfig +46 -0
  1277. package/node_modules/qs/.github/FUNDING.yml +12 -0
  1278. package/node_modules/qs/.github/SECURITY.md +11 -0
  1279. package/node_modules/qs/.github/THREAT_MODEL.md +80 -0
  1280. package/node_modules/qs/.nycrc +13 -0
  1281. package/node_modules/qs/CHANGELOG.md +937 -0
  1282. package/node_modules/qs/LICENSE.md +29 -0
  1283. package/node_modules/qs/README.md +857 -0
  1284. package/node_modules/qs/dist/qs.js +141 -0
  1285. package/node_modules/qs/eslint.config.mjs +68 -0
  1286. package/node_modules/qs/lib/formats.js +28 -0
  1287. package/node_modules/qs/lib/index.js +11 -0
  1288. package/node_modules/qs/lib/parse.js +522 -0
  1289. package/node_modules/qs/lib/stringify.js +380 -0
  1290. package/node_modules/qs/lib/utils.js +531 -0
  1291. package/node_modules/qs/package.json +95 -0
  1292. package/node_modules/qs/test/empty-keys-cases.js +267 -0
  1293. package/node_modules/qs/test/parse.js +2629 -0
  1294. package/node_modules/qs/test/stringify.js +2217 -0
  1295. package/node_modules/qs/test/utils.js +880 -0
  1296. package/node_modules/range-parser/HISTORY.md +56 -0
  1297. package/node_modules/range-parser/LICENSE +23 -0
  1298. package/node_modules/range-parser/README.md +85 -0
  1299. package/node_modules/range-parser/index.js +181 -0
  1300. package/node_modules/range-parser/package.json +48 -0
  1301. package/node_modules/raw-body/LICENSE +22 -0
  1302. package/node_modules/raw-body/README.md +223 -0
  1303. package/node_modules/raw-body/index.d.ts +85 -0
  1304. package/node_modules/raw-body/index.js +336 -0
  1305. package/node_modules/raw-body/package.json +46 -0
  1306. package/node_modules/router/HISTORY.md +228 -0
  1307. package/node_modules/router/LICENSE +23 -0
  1308. package/node_modules/router/README.md +416 -0
  1309. package/node_modules/router/index.js +748 -0
  1310. package/node_modules/router/lib/layer.js +247 -0
  1311. package/node_modules/router/lib/route.js +242 -0
  1312. package/node_modules/router/package.json +44 -0
  1313. package/node_modules/safer-buffer/LICENSE +21 -0
  1314. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  1315. package/node_modules/safer-buffer/Readme.md +156 -0
  1316. package/node_modules/safer-buffer/dangerous.js +58 -0
  1317. package/node_modules/safer-buffer/package.json +34 -0
  1318. package/node_modules/safer-buffer/safer.js +77 -0
  1319. package/node_modules/safer-buffer/tests.js +406 -0
  1320. package/node_modules/select-hose/.jscsrc +46 -0
  1321. package/node_modules/select-hose/.jshintrc +89 -0
  1322. package/node_modules/select-hose/.npmignore +2 -0
  1323. package/node_modules/select-hose/.travis.yml +5 -0
  1324. package/node_modules/select-hose/README.md +31 -0
  1325. package/node_modules/select-hose/lib/hose.js +101 -0
  1326. package/node_modules/select-hose/package.json +31 -0
  1327. package/node_modules/select-hose/test/api-test.js +111 -0
  1328. package/node_modules/select-hose/test/fixtures.js +14 -0
  1329. package/node_modules/send/LICENSE +23 -0
  1330. package/node_modules/send/README.md +317 -0
  1331. package/node_modules/send/index.js +997 -0
  1332. package/node_modules/send/package.json +63 -0
  1333. package/node_modules/serve-favicon/HISTORY.md +194 -0
  1334. package/node_modules/serve-favicon/LICENSE +25 -0
  1335. package/node_modules/serve-favicon/README.md +136 -0
  1336. package/node_modules/serve-favicon/index.js +226 -0
  1337. package/node_modules/serve-favicon/node_modules/fresh/HISTORY.md +70 -0
  1338. package/node_modules/serve-favicon/node_modules/fresh/LICENSE +23 -0
  1339. package/node_modules/serve-favicon/node_modules/fresh/README.md +119 -0
  1340. package/node_modules/serve-favicon/node_modules/fresh/index.js +137 -0
  1341. package/node_modules/serve-favicon/node_modules/fresh/package.json +46 -0
  1342. package/node_modules/serve-favicon/node_modules/safe-buffer/LICENSE +21 -0
  1343. package/node_modules/serve-favicon/node_modules/safe-buffer/README.md +584 -0
  1344. package/node_modules/serve-favicon/node_modules/safe-buffer/index.d.ts +187 -0
  1345. package/node_modules/serve-favicon/node_modules/safe-buffer/index.js +65 -0
  1346. package/node_modules/serve-favicon/node_modules/safe-buffer/package.json +51 -0
  1347. package/node_modules/serve-favicon/package.json +47 -0
  1348. package/node_modules/serve-static/LICENSE +25 -0
  1349. package/node_modules/serve-static/README.md +253 -0
  1350. package/node_modules/serve-static/index.js +208 -0
  1351. package/node_modules/serve-static/package.json +44 -0
  1352. package/node_modules/setprototypeof/LICENSE +13 -0
  1353. package/node_modules/setprototypeof/README.md +31 -0
  1354. package/node_modules/setprototypeof/index.d.ts +2 -0
  1355. package/node_modules/setprototypeof/index.js +17 -0
  1356. package/node_modules/setprototypeof/package.json +38 -0
  1357. package/node_modules/setprototypeof/test/index.js +24 -0
  1358. package/node_modules/shell-quote/README.md +37 -4
  1359. package/node_modules/shell-quote/package.json +10 -6
  1360. package/node_modules/shell-quote/parse.d.ts +1 -1
  1361. package/node_modules/shell-quote/parse.js +63 -11
  1362. package/node_modules/shell-quote/quote.d.ts +2 -1
  1363. package/node_modules/shell-quote/quote.js +23 -3
  1364. package/node_modules/side-channel/.editorconfig +9 -0
  1365. package/node_modules/side-channel/.eslintrc +12 -0
  1366. package/node_modules/side-channel/.github/FUNDING.yml +12 -0
  1367. package/node_modules/side-channel/.nycrc +13 -0
  1368. package/node_modules/side-channel/CHANGELOG.md +120 -0
  1369. package/node_modules/side-channel/LICENSE +21 -0
  1370. package/node_modules/side-channel/README.md +61 -0
  1371. package/node_modules/side-channel/index.d.ts +14 -0
  1372. package/node_modules/side-channel/index.js +46 -0
  1373. package/node_modules/side-channel/package.json +85 -0
  1374. package/node_modules/side-channel/test/index.js +120 -0
  1375. package/node_modules/side-channel/tsconfig.json +9 -0
  1376. package/node_modules/side-channel-list/.editorconfig +9 -0
  1377. package/node_modules/side-channel-list/.eslintrc +11 -0
  1378. package/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
  1379. package/node_modules/{shell-quote → side-channel-list}/.nycrc +0 -1
  1380. package/node_modules/side-channel-list/CHANGELOG.md +36 -0
  1381. package/node_modules/side-channel-list/LICENSE +21 -0
  1382. package/node_modules/side-channel-list/README.md +62 -0
  1383. package/node_modules/side-channel-list/index.d.ts +13 -0
  1384. package/node_modules/side-channel-list/index.js +111 -0
  1385. package/node_modules/side-channel-list/list.d.ts +14 -0
  1386. package/node_modules/side-channel-list/package.json +77 -0
  1387. package/node_modules/side-channel-list/test/index.js +154 -0
  1388. package/node_modules/side-channel-list/tsconfig.json +9 -0
  1389. package/node_modules/side-channel-map/.editorconfig +9 -0
  1390. package/node_modules/side-channel-map/.eslintrc +11 -0
  1391. package/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
  1392. package/node_modules/side-channel-map/.nycrc +13 -0
  1393. package/node_modules/side-channel-map/CHANGELOG.md +22 -0
  1394. package/node_modules/side-channel-map/LICENSE +21 -0
  1395. package/node_modules/side-channel-map/README.md +62 -0
  1396. package/node_modules/side-channel-map/index.d.ts +15 -0
  1397. package/node_modules/side-channel-map/index.js +68 -0
  1398. package/node_modules/side-channel-map/package.json +80 -0
  1399. package/node_modules/side-channel-map/test/index.js +114 -0
  1400. package/node_modules/side-channel-map/tsconfig.json +9 -0
  1401. package/node_modules/side-channel-weakmap/.editorconfig +9 -0
  1402. package/node_modules/side-channel-weakmap/.eslintrc +12 -0
  1403. package/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
  1404. package/node_modules/side-channel-weakmap/.nycrc +13 -0
  1405. package/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
  1406. package/node_modules/side-channel-weakmap/LICENSE +21 -0
  1407. package/node_modules/side-channel-weakmap/README.md +62 -0
  1408. package/node_modules/side-channel-weakmap/index.d.ts +15 -0
  1409. package/node_modules/side-channel-weakmap/index.js +84 -0
  1410. package/node_modules/side-channel-weakmap/package.json +87 -0
  1411. package/node_modules/side-channel-weakmap/test/index.js +114 -0
  1412. package/node_modules/side-channel-weakmap/tsconfig.json +9 -0
  1413. package/node_modules/spdy/.travis.yml +13 -0
  1414. package/node_modules/spdy/README.md +267 -0
  1415. package/node_modules/spdy/lib/spdy/agent.js +295 -0
  1416. package/node_modules/spdy/lib/spdy/handle.js +247 -0
  1417. package/node_modules/spdy/lib/spdy/request.js +33 -0
  1418. package/node_modules/spdy/lib/spdy/response.js +100 -0
  1419. package/node_modules/spdy/lib/spdy/server.js +288 -0
  1420. package/node_modules/spdy/lib/spdy/socket.js +39 -0
  1421. package/node_modules/spdy/lib/spdy.js +20 -0
  1422. package/node_modules/spdy/package.json +54 -0
  1423. package/node_modules/spdy/test/client-test.js +242 -0
  1424. package/node_modules/spdy/test/fixtures.js +95 -0
  1425. package/node_modules/spdy/test/server-test.js +487 -0
  1426. package/node_modules/spdy-transport/.travis.yml +14 -0
  1427. package/node_modules/spdy-transport/README.md +76 -0
  1428. package/node_modules/spdy-transport/lib/spdy-transport/connection.js +845 -0
  1429. package/node_modules/spdy-transport/lib/spdy-transport/priority.js +188 -0
  1430. package/node_modules/spdy-transport/lib/spdy-transport/protocol/base/constants.js +4 -0
  1431. package/node_modules/spdy-transport/lib/spdy-transport/protocol/base/framer.js +58 -0
  1432. package/node_modules/spdy-transport/lib/spdy-transport/protocol/base/index.js +7 -0
  1433. package/node_modules/spdy-transport/lib/spdy-transport/protocol/base/parser.js +106 -0
  1434. package/node_modules/spdy-transport/lib/spdy-transport/protocol/base/scheduler.js +216 -0
  1435. package/node_modules/spdy-transport/lib/spdy-transport/protocol/base/utils.js +94 -0
  1436. package/node_modules/spdy-transport/lib/spdy-transport/protocol/http2/constants.js +93 -0
  1437. package/node_modules/spdy-transport/lib/spdy-transport/protocol/http2/framer.js +542 -0
  1438. package/node_modules/spdy-transport/lib/spdy-transport/protocol/http2/hpack-pool.js +34 -0
  1439. package/node_modules/spdy-transport/lib/spdy-transport/protocol/http2/index.js +8 -0
  1440. package/node_modules/spdy-transport/lib/spdy-transport/protocol/http2/parser.js +578 -0
  1441. package/node_modules/spdy-transport/lib/spdy-transport/protocol/spdy/constants.js +146 -0
  1442. package/node_modules/spdy-transport/lib/spdy-transport/protocol/spdy/dictionary.js +203 -0
  1443. package/node_modules/spdy-transport/lib/spdy-transport/protocol/spdy/framer.js +519 -0
  1444. package/node_modules/spdy-transport/lib/spdy-transport/protocol/spdy/index.js +9 -0
  1445. package/node_modules/spdy-transport/lib/spdy-transport/protocol/spdy/parser.js +485 -0
  1446. package/node_modules/spdy-transport/lib/spdy-transport/protocol/spdy/zlib-pool.js +65 -0
  1447. package/node_modules/spdy-transport/lib/spdy-transport/stream.js +710 -0
  1448. package/node_modules/spdy-transport/lib/spdy-transport/utils.js +196 -0
  1449. package/node_modules/spdy-transport/lib/spdy-transport/window.js +174 -0
  1450. package/node_modules/spdy-transport/lib/spdy-transport.js +25 -0
  1451. package/node_modules/spdy-transport/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  1452. package/node_modules/spdy-transport/node_modules/readable-stream/GOVERNANCE.md +136 -0
  1453. package/node_modules/spdy-transport/node_modules/readable-stream/LICENSE +47 -0
  1454. package/node_modules/spdy-transport/node_modules/readable-stream/README.md +106 -0
  1455. package/node_modules/spdy-transport/node_modules/readable-stream/errors-browser.js +127 -0
  1456. package/node_modules/spdy-transport/node_modules/readable-stream/errors.js +116 -0
  1457. package/node_modules/spdy-transport/node_modules/readable-stream/experimentalWarning.js +17 -0
  1458. package/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
  1459. package/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
  1460. package/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
  1461. package/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_transform.js +190 -0
  1462. package/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js +641 -0
  1463. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
  1464. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
  1465. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
  1466. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
  1467. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  1468. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
  1469. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
  1470. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
  1471. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  1472. package/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  1473. package/node_modules/spdy-transport/node_modules/readable-stream/package.json +68 -0
  1474. package/node_modules/spdy-transport/node_modules/readable-stream/readable-browser.js +9 -0
  1475. package/node_modules/spdy-transport/node_modules/readable-stream/readable.js +16 -0
  1476. package/node_modules/spdy-transport/package.json +43 -0
  1477. package/node_modules/statuses/HISTORY.md +87 -0
  1478. package/node_modules/statuses/LICENSE +23 -0
  1479. package/node_modules/statuses/README.md +139 -0
  1480. package/node_modules/statuses/codes.json +65 -0
  1481. package/node_modules/statuses/index.js +146 -0
  1482. package/node_modules/statuses/package.json +49 -0
  1483. package/node_modules/toidentifier/HISTORY.md +9 -0
  1484. package/node_modules/toidentifier/LICENSE +21 -0
  1485. package/node_modules/toidentifier/README.md +61 -0
  1486. package/node_modules/toidentifier/index.js +32 -0
  1487. package/node_modules/toidentifier/package.json +38 -0
  1488. package/node_modules/type-is/HISTORY.md +292 -0
  1489. package/node_modules/type-is/LICENSE +23 -0
  1490. package/node_modules/type-is/README.md +198 -0
  1491. package/node_modules/type-is/index.js +240 -0
  1492. package/node_modules/type-is/package.json +51 -0
  1493. package/node_modules/unpipe/HISTORY.md +4 -0
  1494. package/node_modules/unpipe/LICENSE +22 -0
  1495. package/node_modules/unpipe/README.md +43 -0
  1496. package/node_modules/unpipe/index.js +69 -0
  1497. package/node_modules/unpipe/package.json +27 -0
  1498. package/node_modules/uuid/package.json +17 -17
  1499. package/node_modules/vary/HISTORY.md +39 -0
  1500. package/node_modules/vary/LICENSE +22 -0
  1501. package/node_modules/vary/README.md +101 -0
  1502. package/node_modules/vary/index.js +149 -0
  1503. package/node_modules/vary/package.json +43 -0
  1504. package/node_modules/wbuf/README.md +26 -0
  1505. package/node_modules/wbuf/index.js +425 -0
  1506. package/node_modules/wbuf/package.json +29 -0
  1507. package/node_modules/wbuf/test/wbuf-test.js +357 -0
  1508. package/node_modules/xpath/LICENSE +22 -0
  1509. package/node_modules/xpath/README.md +133 -0
  1510. package/node_modules/xpath/package.json +43 -0
  1511. package/node_modules/xpath/xpath.d.ts +110 -0
  1512. package/node_modules/xpath/xpath.js +5056 -0
  1513. package/package.json +6 -6
  1514. package/node_modules/asyncbox/build/cjs/lib/asyncbox.d.ts +0 -103
  1515. package/node_modules/asyncbox/build/cjs/lib/asyncbox.d.ts.map +0 -1
  1516. package/node_modules/asyncbox/build/cjs/lib/asyncbox.js +0 -311
  1517. package/node_modules/asyncbox/build/cjs/lib/asyncbox.js.map +0 -1
  1518. package/node_modules/asyncbox/build/esm/lib/asyncbox.d.ts +0 -103
  1519. package/node_modules/asyncbox/build/esm/lib/asyncbox.d.ts.map +0 -1
  1520. package/node_modules/asyncbox/build/esm/lib/asyncbox.js +0 -298
  1521. package/node_modules/asyncbox/build/esm/lib/asyncbox.js.map +0 -1
  1522. package/node_modules/asyncbox/lib/asyncbox.ts +0 -382
  1523. package/node_modules/shell-quote/eslint.config.mjs +0 -29
  1524. package/node_modules/shell-quote/security.md +0 -11
  1525. package/node_modules/shell-quote/test/comment.js +0 -16
  1526. package/node_modules/shell-quote/test/env.js +0 -52
  1527. package/node_modules/shell-quote/test/env_fn.js +0 -21
  1528. package/node_modules/shell-quote/test/op.js +0 -102
  1529. package/node_modules/shell-quote/test/parse.js +0 -149
  1530. package/node_modules/shell-quote/test/quote.js +0 -145
  1531. package/node_modules/shell-quote/test/set.js +0 -31
@@ -0,0 +1,2217 @@
1
+ 'use strict';
2
+
3
+ var test = require('tape');
4
+ var qs = require('../');
5
+ var utils = require('../lib/utils');
6
+ var iconv = require('iconv-lite');
7
+ var SaferBuffer = require('safer-buffer').Buffer;
8
+ var url = require('url');
9
+ var hasSymbols = require('has-symbols');
10
+ var mockProperty = require('mock-property');
11
+ var emptyTestCases = require('./empty-keys-cases').emptyTestCases;
12
+ var hasProto = require('has-proto')();
13
+ var hasBigInt = require('has-bigints')();
14
+
15
+ test('stringify()', function (t) {
16
+ t.test('stringifies a querystring object', function (st) {
17
+ st.equal(qs.stringify({ a: 'b' }), 'a=b');
18
+ st.equal(qs.stringify({ a: 1 }), 'a=1');
19
+ st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2');
20
+ st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z');
21
+ st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC');
22
+ st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80');
23
+ st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90');
24
+ st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7');
25
+ st.end();
26
+ });
27
+
28
+ t.test('stringifies lone surrogates as U+FFFD', function (st) {
29
+ st.equal(qs.stringify({ a: '\uD800x' }), 'a=%EF%BF%BDx', 'lone high surrogate does not swallow the next character');
30
+ st.equal(qs.stringify({ a: '\uDC00x' }), 'a=%EF%BF%BDx', 'lone low surrogate does not swallow the next character');
31
+ st.equal(qs.stringify({ '\uD800': 'b' }), '%EF%BF%BD=b', 'lone surrogate in a key');
32
+ st.deepEqual(qs.parse(qs.stringify({ a: 'x\uD800y' })), { a: 'x\uFFFDy' }, 'parses back with U+FFFD in place of the lone surrogate');
33
+ st.equal(qs.stringify({ '\uDC00': 'b' }), '%EF%BF%BD=b', 'lone low surrogate in a key');
34
+ st.equal(qs.stringify({ a: { 'b\uD800': 'c' } }), 'a%5Bb%EF%BF%BD%5D=c', 'lone surrogate in a nested key does not swallow the closing bracket');
35
+ st.equal(qs.stringify({ a: '\uD800 x' }, { format: 'RFC1738' }), 'a=%EF%BF%BD+x', 'lone surrogate does not swallow a space in RFC1738');
36
+ st.equal(
37
+ qs.stringify({ 'a\uD800': { b: 'c' } }, { allowDots: true, encodeDotInKeys: true }),
38
+ 'a%EF%BF%BD.b=c',
39
+ 'lone surrogate does not swallow a dot separator'
40
+ );
41
+ st.equal(qs.stringify({ a: ['x\uD800', 'y'] }, { arrayFormat: 'comma' }), 'a=x%EF%BF%BD%2Cy', 'lone surrogate does not swallow a comma');
42
+ st.equal(
43
+ qs.stringify({ a: ['x\uD800', 'y'] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
44
+ 'a=x%EF%BF%BD,y',
45
+ 'lone surrogate at the end of a comma-joined element encodes as U+FFFD'
46
+ );
47
+ st.end();
48
+ });
49
+
50
+ t.test('stringifies falsy values', function (st) {
51
+ st.equal(qs.stringify(undefined), '');
52
+ st.equal(qs.stringify(null), '');
53
+ st.equal(qs.stringify(null, { strictNullHandling: true }), '');
54
+ st.equal(qs.stringify(false), '');
55
+ st.equal(qs.stringify(0), '');
56
+ st.end();
57
+ });
58
+
59
+ t.test('stringifies symbols', { skip: !hasSymbols() }, function (st) {
60
+ st.equal(qs.stringify(Symbol.iterator), '');
61
+ st.equal(qs.stringify([Symbol.iterator]), '0=Symbol%28Symbol.iterator%29');
62
+ st.equal(qs.stringify({ a: Symbol.iterator }), 'a=Symbol%28Symbol.iterator%29');
63
+ st.equal(
64
+ qs.stringify({ a: [Symbol.iterator] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
65
+ 'a[]=Symbol%28Symbol.iterator%29'
66
+ );
67
+ st.end();
68
+ });
69
+
70
+ t.test('stringifies bigints', { skip: !hasBigInt }, function (st) {
71
+ var three = BigInt(3);
72
+ var encodeWithN = function (value, defaultEncoder, charset) {
73
+ var result = defaultEncoder(value, defaultEncoder, charset);
74
+ return typeof value === 'bigint' ? result + 'n' : result;
75
+ };
76
+ st.equal(qs.stringify(three), '');
77
+ st.equal(qs.stringify([three]), '0=3');
78
+ st.equal(qs.stringify([three], { encoder: encodeWithN }), '0=3n');
79
+ st.equal(qs.stringify({ a: three }), 'a=3');
80
+ st.equal(qs.stringify({ a: three }, { encoder: encodeWithN }), 'a=3n');
81
+ st.equal(
82
+ qs.stringify({ a: [three] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
83
+ 'a[]=3'
84
+ );
85
+ st.equal(
86
+ qs.stringify({ a: [three] }, { encodeValuesOnly: true, encoder: encodeWithN, arrayFormat: 'brackets' }),
87
+ 'a[]=3n'
88
+ );
89
+ st.end();
90
+ });
91
+
92
+ t.test('encodes dot in key of object when encodeDotInKeys and allowDots is provided', function (st) {
93
+ st.equal(
94
+ qs.stringify(
95
+ { 'name.obj': { first: 'John', last: 'Doe' } },
96
+ { allowDots: false, encodeDotInKeys: false }
97
+ ),
98
+ 'name.obj%5Bfirst%5D=John&name.obj%5Blast%5D=Doe',
99
+ 'with allowDots false and encodeDotInKeys false'
100
+ );
101
+ st.equal(
102
+ qs.stringify(
103
+ { 'name.obj': { first: 'John', last: 'Doe' } },
104
+ { allowDots: true, encodeDotInKeys: false }
105
+ ),
106
+ 'name.obj.first=John&name.obj.last=Doe',
107
+ 'with allowDots true and encodeDotInKeys false'
108
+ );
109
+ st.equal(
110
+ qs.stringify(
111
+ { 'name.obj': { first: 'John', last: 'Doe' } },
112
+ { allowDots: false, encodeDotInKeys: true }
113
+ ),
114
+ 'name%252Eobj%5Bfirst%5D=John&name%252Eobj%5Blast%5D=Doe',
115
+ 'with allowDots false and encodeDotInKeys true'
116
+ );
117
+ st.equal(
118
+ qs.stringify(
119
+ { 'name.obj': { first: 'John', last: 'Doe' } },
120
+ { allowDots: true, encodeDotInKeys: true }
121
+ ),
122
+ 'name%252Eobj.first=John&name%252Eobj.last=Doe',
123
+ 'with allowDots true and encodeDotInKeys true'
124
+ );
125
+
126
+ st.equal(
127
+ qs.stringify(
128
+ { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
129
+ { allowDots: false, encodeDotInKeys: false }
130
+ ),
131
+ 'name.obj.subobject%5Bfirst.godly.name%5D=John&name.obj.subobject%5Blast%5D=Doe',
132
+ 'with allowDots false and encodeDotInKeys false'
133
+ );
134
+ st.equal(
135
+ qs.stringify(
136
+ { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
137
+ { allowDots: true, encodeDotInKeys: false }
138
+ ),
139
+ 'name.obj.subobject.first.godly.name=John&name.obj.subobject.last=Doe',
140
+ 'with allowDots false and encodeDotInKeys false'
141
+ );
142
+ st.equal(
143
+ qs.stringify(
144
+ { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
145
+ { allowDots: false, encodeDotInKeys: true }
146
+ ),
147
+ 'name%252Eobj%252Esubobject%5Bfirst.godly.name%5D=John&name%252Eobj%252Esubobject%5Blast%5D=Doe',
148
+ 'with allowDots false and encodeDotInKeys true'
149
+ );
150
+ st.equal(
151
+ qs.stringify(
152
+ { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
153
+ { allowDots: true, encodeDotInKeys: true }
154
+ ),
155
+ 'name%252Eobj%252Esubobject.first%252Egodly%252Ename=John&name%252Eobj%252Esubobject.last=Doe',
156
+ 'with allowDots true and encodeDotInKeys true'
157
+ );
158
+
159
+ st.end();
160
+ });
161
+
162
+ t.test('encodes dot in key of object with a primitive value when encodeDotInKeys and allowDots is provided', function (st) {
163
+ st.equal(
164
+ qs.stringify(
165
+ { 'name.obj': 'John' },
166
+ { allowDots: true, encodeDotInKeys: true }
167
+ ),
168
+ 'name%252Eobj=John',
169
+ 'with allowDots true and encodeDotInKeys true'
170
+ );
171
+ st.equal(
172
+ qs.stringify(
173
+ { 'name.obj': 'John' },
174
+ { allowDots: false, encodeDotInKeys: true }
175
+ ),
176
+ 'name%252Eobj=John',
177
+ 'with allowDots false and encodeDotInKeys true'
178
+ );
179
+ st.equal(
180
+ qs.stringify(
181
+ { 'name.obj': 'John' },
182
+ { encodeDotInKeys: true, allowDots: true, encodeValuesOnly: true }
183
+ ),
184
+ 'name%2Eobj=John',
185
+ 'with encodeValuesOnly true'
186
+ );
187
+
188
+ // With `encodeValuesOnly` the key encoder is skipped, so the dot is encoded once
189
+ // (`%2E`) rather than twice. That single `%2E` decodes back to a structural dot, so
190
+ // unlike the default output below this does not round-trip to the original dotted key
191
+ // (a pre-existing `encodeValuesOnly` + `encodeDotInKeys` limitation, not new here).
192
+ st.deepEqual(
193
+ qs.parse(
194
+ qs.stringify(
195
+ { 'name.obj': 'John' },
196
+ { encodeDotInKeys: true, allowDots: true, encodeValuesOnly: true }
197
+ ),
198
+ { allowDots: true, decodeDotInKeys: true }
199
+ ),
200
+ { name: { obj: 'John' } },
201
+ 'with encodeValuesOnly the single-encoded dot decodes structurally (does not round-trip)'
202
+ );
203
+
204
+ st.deepEqual(
205
+ qs.parse(
206
+ qs.stringify({ 'name.obj': 'John' }, { allowDots: true, encodeDotInKeys: true }),
207
+ { allowDots: true, decodeDotInKeys: true }
208
+ ),
209
+ { 'name.obj': 'John' },
210
+ 'round-trips a dotted key with a primitive value'
211
+ );
212
+
213
+ st.equal(
214
+ qs.stringify({ 'a.b': null }, { allowDots: true, encodeDotInKeys: true, strictNullHandling: true }),
215
+ 'a%252Eb',
216
+ 'encodes a dotted key with a null value'
217
+ );
218
+ st.equal(
219
+ qs.stringify({ 'a.b': '1', 'c.d': '2' }, { allowDots: true, encodeDotInKeys: true }),
220
+ 'a%252Eb=1&c%252Ed=2',
221
+ 'encodes dots in every top-level key, not just the first'
222
+ );
223
+ st.equal(
224
+ qs.stringify({ 'a.b.c': 'x' }, { allowDots: true, encodeDotInKeys: true }),
225
+ 'a%252Eb%252Ec=x',
226
+ 'encodes every dot in a key'
227
+ );
228
+ var primitiveKey = qs.stringify({ 'a.b': 'c' }, { allowDots: true, encodeDotInKeys: true }).split('=')[0];
229
+ st.equal(
230
+ qs.stringify({ 'a.b': { x: 'c' } }, { allowDots: true, encodeDotInKeys: true }).indexOf(primitiveKey + '.'),
231
+ 0,
232
+ 'a top-level dotted key encodes identically for primitive and object values'
233
+ );
234
+
235
+ st.end();
236
+ });
237
+
238
+ t.test('does not encode the structural separator dots between nested keys when encodeDotInKeys and allowDots are provided', function (st) {
239
+ st.equal(
240
+ qs.stringify(
241
+ { a: { b: { c: 'd' } } },
242
+ { allowDots: true, encodeDotInKeys: true }
243
+ ),
244
+ 'a.b.c=d',
245
+ 'no key contains a literal dot, so encodeDotInKeys is a no-op on the separators'
246
+ );
247
+ st.equal(
248
+ qs.stringify(
249
+ { a: { b: { c: { d: 'e' } } } },
250
+ { allowDots: true, encodeDotInKeys: true }
251
+ ),
252
+ 'a.b.c.d=e',
253
+ 'every nesting separator is preserved, not just the last one'
254
+ );
255
+
256
+ st.deepEqual(
257
+ qs.parse(
258
+ qs.stringify({ a: { b: { c: 'd' } } }, { allowDots: true, encodeDotInKeys: true }),
259
+ { allowDots: true, decodeDotInKeys: true }
260
+ ),
261
+ { a: { b: { c: 'd' } } },
262
+ 'stringify -> parse round-trips a deeply nested object'
263
+ );
264
+
265
+ st.end();
266
+ });
267
+
268
+ t.test('encodeDotInKeys encodes only literal dots inside nested keys, never the structural separators, at any depth', function (st) {
269
+ st.equal(
270
+ qs.stringify({ a: { 'b.c': { d: 'e' } } }, { allowDots: true, encodeDotInKeys: true }),
271
+ 'a.b%252Ec.d=e',
272
+ 'a nested key with a literal dot and an object value encodes only its own dot'
273
+ );
274
+ st.equal(
275
+ qs.stringify({ 'a.b': { c: { d: 'e' } } }, { allowDots: true, encodeDotInKeys: true }),
276
+ 'a%252Eb.c.d=e',
277
+ 'a top-level dotted key stays encoded while deeper separators stay literal'
278
+ );
279
+ st.equal(
280
+ qs.stringify({ a: { b: { 'c.d': { e: 'f' } } } }, { allowDots: true, encodeDotInKeys: true }),
281
+ 'a.b.c%252Ed.e=f',
282
+ 'a literal dot in a deeply nested key is encoded without touching the separators around it'
283
+ );
284
+
285
+ st.equal(
286
+ qs.stringify({ a: { b: [1, 2] } }, { allowDots: true, encodeDotInKeys: true }),
287
+ 'a.b%5B0%5D=1&a.b%5B1%5D=2',
288
+ 'separator dots are preserved for an array value nested under keys'
289
+ );
290
+ st.equal(
291
+ qs.stringify({ a: { 'b.c': [1, 2] } }, { allowDots: true, encodeDotInKeys: true }),
292
+ 'a.b%252Ec%5B0%5D=1&a.b%252Ec%5B1%5D=2',
293
+ 'a nested dotted key with an array value encodes only its own dot'
294
+ );
295
+
296
+ st.deepEqual(
297
+ qs.parse(
298
+ qs.stringify({ a: { 'b.c': { d: 'e' } } }, { allowDots: true, encodeDotInKeys: true }),
299
+ { allowDots: true, decodeDotInKeys: true }
300
+ ),
301
+ { a: { 'b.c': { d: 'e' } } },
302
+ 'stringify -> parse round-trips a nested dotted key with an object value'
303
+ );
304
+ st.deepEqual(
305
+ qs.parse(
306
+ qs.stringify({ 'a.b': { c: { d: 'e' } } }, { allowDots: true, encodeDotInKeys: true }),
307
+ { allowDots: true, decodeDotInKeys: true }
308
+ ),
309
+ { 'a.b': { c: { d: 'e' } } },
310
+ 'stringify -> parse round-trips a top-level dotted key with deep nesting'
311
+ );
312
+
313
+ st.end();
314
+ });
315
+
316
+ t.test('with allowDots false, encodeDotInKeys leaves nested-key dots literal, consistently for object and primitive values', function (st) {
317
+ st.equal(
318
+ qs.stringify({ a: { 'b.c': { d: 'e' } } }, { allowDots: false, encodeDotInKeys: true }),
319
+ 'a%5Bb.c%5D%5Bd%5D=e',
320
+ 'nested dotted key with an object value'
321
+ );
322
+ st.equal(
323
+ qs.stringify({ a: { 'b.c': 'e' } }, { allowDots: false, encodeDotInKeys: true }),
324
+ 'a%5Bb.c%5D=e',
325
+ 'nested dotted key with a primitive value matches the object-value case'
326
+ );
327
+
328
+ st.end();
329
+ });
330
+
331
+ t.test('should encode dot in key of object, and automatically set allowDots to `true` when encodeDotInKeys is true and allowDots in undefined', function (st) {
332
+ st.equal(
333
+ qs.stringify(
334
+ { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
335
+ { encodeDotInKeys: true }
336
+ ),
337
+ 'name%252Eobj%252Esubobject.first%252Egodly%252Ename=John&name%252Eobj%252Esubobject.last=Doe',
338
+ 'with allowDots undefined and encodeDotInKeys true'
339
+ );
340
+ st.end();
341
+ });
342
+
343
+ t.test('should encode dot in key of object when encodeDotInKeys and allowDots is provided, and nothing else when encodeValuesOnly is provided', function (st) {
344
+ st.equal(
345
+ qs.stringify({ 'name.obj': { first: 'John', last: 'Doe' } }, {
346
+ encodeDotInKeys: true, allowDots: true, encodeValuesOnly: true
347
+ }),
348
+ 'name%2Eobj.first=John&name%2Eobj.last=Doe'
349
+ );
350
+
351
+ st.equal(
352
+ qs.stringify({ 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } }, { allowDots: true, encodeDotInKeys: true, encodeValuesOnly: true }),
353
+ 'name%2Eobj%2Esubobject.first%2Egodly%2Ename=John&name%2Eobj%2Esubobject.last=Doe'
354
+ );
355
+
356
+ st.end();
357
+ });
358
+
359
+ t.test('throws when `commaRoundTrip` is not a boolean', function (st) {
360
+ st['throws'](
361
+ function () { qs.stringify({}, { commaRoundTrip: 'not a boolean' }); },
362
+ TypeError,
363
+ 'throws when `commaRoundTrip` is not a boolean'
364
+ );
365
+
366
+ st.end();
367
+ });
368
+
369
+ t.test('throws when `encodeDotInKeys` is not a boolean', function (st) {
370
+ st['throws'](
371
+ function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: 'foobar' }); },
372
+ TypeError
373
+ );
374
+
375
+ st['throws'](
376
+ function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: 0 }); },
377
+ TypeError
378
+ );
379
+
380
+ st['throws'](
381
+ function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: NaN }); },
382
+ TypeError
383
+ );
384
+
385
+ st['throws'](
386
+ function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: null }); },
387
+ TypeError
388
+ );
389
+
390
+ st.end();
391
+ });
392
+
393
+ t.test('adds query prefix', function (st) {
394
+ st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b');
395
+ st.end();
396
+ });
397
+
398
+ t.test('with query prefix, outputs blank string given an empty object', function (st) {
399
+ st.equal(qs.stringify({}, { addQueryPrefix: true }), '');
400
+ st.end();
401
+ });
402
+
403
+ t.test('stringifies nested falsy values', function (st) {
404
+ st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D=');
405
+ st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D');
406
+ st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false');
407
+ st.end();
408
+ });
409
+
410
+ t.test('stringifies a nested object', function (st) {
411
+ st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
412
+ st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e');
413
+ st.end();
414
+ });
415
+
416
+ t.test('`allowDots` option: stringifies a nested object with dots notation', function (st) {
417
+ st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c');
418
+ st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e');
419
+ st.end();
420
+ });
421
+
422
+ t.test('stringifies an array value', function (st) {
423
+ st.equal(
424
+ qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }),
425
+ 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d',
426
+ 'indices => indices'
427
+ );
428
+ st.equal(
429
+ qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }),
430
+ 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d',
431
+ 'brackets => brackets'
432
+ );
433
+ st.equal(
434
+ qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }),
435
+ 'a=b%2Cc%2Cd',
436
+ 'comma => comma'
437
+ );
438
+ st.equal(
439
+ qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma', commaRoundTrip: true }),
440
+ 'a=b%2Cc%2Cd',
441
+ 'comma round trip => comma'
442
+ );
443
+ st.equal(
444
+ qs.stringify({ a: ['b', 'c', 'd'] }),
445
+ 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d',
446
+ 'default => indices'
447
+ );
448
+ st.end();
449
+ });
450
+
451
+ t.test('ignores inherited array format names', function (st) {
452
+ var array = { a: ['b', 'c'] };
453
+ var indices = 'a%5B0%5D=b&a%5B1%5D=c';
454
+ var repeat = 'a=b&a=c';
455
+
456
+ st.equal(qs.stringify(array, { arrayFormat: 'unsupported' }), indices, 'unknown format falls back to `indices`');
457
+
458
+ var names = [
459
+ 'constructor',
460
+ 'toString',
461
+ '__proto__',
462
+ 'valueOf',
463
+ 'hasOwnProperty',
464
+ 'isPrototypeOf',
465
+ 'propertyIsEnumerable',
466
+ 'toLocaleString'
467
+ ];
468
+ for (var i = 0; i < names.length; i++) {
469
+ var name = names[i];
470
+ st.equal(qs.stringify(array, { arrayFormat: name }), indices, '`' + name + '` falls back to `indices`');
471
+ st.equal(
472
+ qs.stringify(array, { arrayFormat: name, indices: true }),
473
+ indices,
474
+ '`' + name + '` with `indices: true` falls back to `indices`'
475
+ );
476
+ st.equal(
477
+ qs.stringify(array, { arrayFormat: name, indices: false }),
478
+ repeat,
479
+ '`' + name + '` with `indices: false` falls back to `repeat`'
480
+ );
481
+ }
482
+
483
+ st.end();
484
+ });
485
+
486
+ t.test('`skipNulls` option', function (st) {
487
+ st.equal(
488
+ qs.stringify({ a: 'b', c: null }, { skipNulls: true }),
489
+ 'a=b',
490
+ 'omits nulls when asked'
491
+ );
492
+
493
+ st.equal(
494
+ qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }),
495
+ 'a%5Bb%5D=c',
496
+ 'omits nested nulls when asked'
497
+ );
498
+
499
+ st.end();
500
+ });
501
+
502
+ t.test('omits array indices when asked', function (st) {
503
+ st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d');
504
+
505
+ st.end();
506
+ });
507
+
508
+ t.test('omits object key/value pair when value is empty array', function (st) {
509
+ st.equal(qs.stringify({ a: [], b: 'zz' }), 'b=zz');
510
+
511
+ st.end();
512
+ });
513
+
514
+ t.test('should not omit object key/value pair when value is empty array and when asked', function (st) {
515
+ st.equal(qs.stringify({ a: [], b: 'zz' }), 'b=zz');
516
+ st.equal(qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: false }), 'b=zz');
517
+ st.equal(qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: true }), 'a[]&b=zz');
518
+
519
+ st.end();
520
+ });
521
+
522
+ t.test('should throw when allowEmptyArrays is not of type boolean', function (st) {
523
+ st['throws'](
524
+ function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: 'foobar' }); },
525
+ TypeError
526
+ );
527
+
528
+ st['throws'](
529
+ function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: 0 }); },
530
+ TypeError
531
+ );
532
+
533
+ st['throws'](
534
+ function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: NaN }); },
535
+ TypeError
536
+ );
537
+
538
+ st['throws'](
539
+ function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: null }); },
540
+ TypeError
541
+ );
542
+
543
+ st.end();
544
+ });
545
+
546
+ t.test('allowEmptyArrays keys that need no encoding', function (st) {
547
+ st.equal(qs.stringify({ foo: [] }, { allowEmptyArrays: true, format: 'RFC1738' }), 'foo[]', 'a top-level key in RFC1738');
548
+ st.equal(
549
+ qs.stringify({ a: { b: [] }, c: 'd e' }, { allowEmptyArrays: true, encodeValuesOnly: true }),
550
+ 'a[b][]&c=d%20e',
551
+ 'a nested key with encodeValuesOnly'
552
+ );
553
+ st.equal(qs.stringify({ a: { b: [] } }, { allowEmptyArrays: true, encode: false }), 'a[b][]', 'a nested key with encode: false');
554
+ st.equal(qs.stringify({ a: { b: [] } }, { allowEmptyArrays: true, allowDots: true }), 'a.b[]', 'a nested key with allowDots');
555
+ st.equal(
556
+ qs.stringify({ a: { b: [] } }, { allowEmptyArrays: true, allowDots: true, format: 'RFC1738' }),
557
+ 'a.b[]',
558
+ 'a nested key with allowDots in RFC1738'
559
+ );
560
+
561
+ st.end();
562
+ });
563
+
564
+ t.test('allowEmptyArrays + strictNullHandling', function (st) {
565
+ st.equal(
566
+ qs.stringify(
567
+ { testEmptyArray: [] },
568
+ { strictNullHandling: true, allowEmptyArrays: true }
569
+ ),
570
+ 'testEmptyArray[]'
571
+ );
572
+
573
+ st.end();
574
+ });
575
+
576
+ t.test('allowEmptyArrays only short-circuits arrays with no own keys', function (st) {
577
+ st.equal(
578
+ qs.stringify({ a: [] }, { allowEmptyArrays: true }),
579
+ 'a[]',
580
+ 'a genuinely empty array is still emitted as `[]`'
581
+ );
582
+
583
+ var withKey = [];
584
+ withKey.extra = 'x';
585
+ st.equal(
586
+ qs.stringify({ a: withKey }, { allowEmptyArrays: true }),
587
+ 'a%5Bextra%5D=x',
588
+ 'an own key on an empty array is serialized rather than dropped'
589
+ );
590
+ st.equal(
591
+ qs.stringify({ a: withKey }, { allowEmptyArrays: true }),
592
+ qs.stringify({ a: withKey }),
593
+ 'the allowEmptyArrays fast path matches the default path when the array has own keys'
594
+ );
595
+
596
+ var container = {};
597
+ var cyclic = [];
598
+ cyclic.back = container;
599
+ container.a = cyclic;
600
+ st['throws'](
601
+ function () { qs.stringify(container, { allowEmptyArrays: true }); },
602
+ RangeError,
603
+ 'a cycle through an empty array with an own key is still detected'
604
+ );
605
+
606
+ st.end();
607
+ });
608
+
609
+ t.test('should encode the key of an empty array when allowEmptyArrays is set', function (st) {
610
+ st.equal(
611
+ qs.stringify({ 'a b': [] }, { allowEmptyArrays: true }),
612
+ 'a%20b[]',
613
+ 'default (RFC3986) percent-encodes the space in the key'
614
+ );
615
+ st.equal(
616
+ qs.stringify({ 'a b': [] }, { allowEmptyArrays: true, format: 'RFC1738' }),
617
+ 'a+b[]',
618
+ 'RFC1738 encodes the space in the key as a plus'
619
+ );
620
+ st.equal(
621
+ qs.stringify({ 'a b': [] }, { allowEmptyArrays: true, encodeValuesOnly: true }),
622
+ 'a b[]',
623
+ 'encodeValuesOnly leaves the key unencoded'
624
+ );
625
+ st.equal(
626
+ qs.stringify({ 'a b': [] }, { allowEmptyArrays: true, encode: false }),
627
+ 'a b[]',
628
+ 'encode: false leaves the key unencoded'
629
+ );
630
+
631
+ st.deepEqual(
632
+ qs.parse(qs.stringify({ 'a b': [], 'a&b=c': [] }, { allowEmptyArrays: true }), { allowEmptyArrays: true }),
633
+ { 'a b': [], 'a&b=c': [] },
634
+ 'the encoded keys round-trip back to the original, including `&` and `=`'
635
+ );
636
+ st.equal(
637
+ qs.stringify({ 'a b': ['x'] }, { allowEmptyArrays: true, arrayFormat: 'brackets' }),
638
+ 'a%20b%5B%5D=x',
639
+ 'the same key with a value encodes the key prefix identically'
640
+ );
641
+ st.equal(
642
+ qs.stringify({ a: { 'b c': [] } }, { allowEmptyArrays: true }),
643
+ 'a%5Bb%20c%5D[]',
644
+ 'a nested key prefix is encoded like the value path encodes it'
645
+ );
646
+ st.equal(
647
+ qs.stringify({ a: { b: [] } }, { allowEmptyArrays: true }),
648
+ 'a%5Bb%5D[]',
649
+ 'a nested key that needs no encoding still has its brackets encoded'
650
+ );
651
+ st.equal(
652
+ qs.stringify({ 'a.b': [] }, { allowEmptyArrays: true, allowDots: true, encodeDotInKeys: true }),
653
+ 'a%252Eb[]',
654
+ 'encodeDotInKeys double-encodes the dot, as on the value path'
655
+ );
656
+ st.deepEqual(
657
+ qs.parse('a%252Eb[]', { allowEmptyArrays: true, allowDots: true, decodeDotInKeys: true }),
658
+ { 'a.b': [] },
659
+ 'the encodeDotInKeys output round-trips'
660
+ );
661
+
662
+ st.end();
663
+ });
664
+
665
+ t.test('stringifies an array value with one item vs multiple items', function (st) {
666
+ st.test('non-array item', function (s2t) {
667
+ s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a=c');
668
+ s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a=c');
669
+ s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c');
670
+ s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true }), 'a=c');
671
+
672
+ s2t.end();
673
+ });
674
+
675
+ st.test('array with a single item', function (s2t) {
676
+ s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0]=c');
677
+ s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=c');
678
+ s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c');
679
+ s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'comma', commaRoundTrip: true }), 'a[]=c'); // so it parses back as an array
680
+ s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true }), 'a[0]=c');
681
+
682
+ s2t.end();
683
+ });
684
+
685
+ st.test('array with multiple items', function (s2t) {
686
+ s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0]=c&a[1]=d');
687
+ s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=c&a[]=d');
688
+ s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c,d');
689
+ s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'comma', commaRoundTrip: true }), 'a=c,d');
690
+ s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true }), 'a[0]=c&a[1]=d');
691
+
692
+ s2t.end();
693
+ });
694
+
695
+ st.test('array with multiple items with a comma inside', function (s2t) {
696
+ s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c%2Cd,e');
697
+ s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { arrayFormat: 'comma' }), 'a=c%2Cd%2Ce');
698
+
699
+ s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { encodeValuesOnly: true, arrayFormat: 'comma', commaRoundTrip: true }), 'a=c%2Cd,e');
700
+ s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { arrayFormat: 'comma', commaRoundTrip: true }), 'a=c%2Cd%2Ce');
701
+
702
+ s2t.end();
703
+ });
704
+
705
+ st.end();
706
+ });
707
+
708
+ t.test('stringifies a nested array value', function (st) {
709
+ st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[b][0]=c&a[b][1]=d');
710
+ st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[b][]=c&a[b][]=d');
711
+ st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a[b]=c,d');
712
+ st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true }), 'a[b][0]=c&a[b][1]=d');
713
+ st.end();
714
+ });
715
+
716
+ t.test('stringifies comma and empty array values', function (st) {
717
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'indices' }), 'a[0]=,&a[1]=&a[2]=c,d%');
718
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'brackets' }), 'a[]=,&a[]=&a[]=c,d%');
719
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'comma' }), 'a=,,,c,d%');
720
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'repeat' }), 'a=,&a=&a=c,d%');
721
+
722
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0]=%2C&a[1]=&a[2]=c%2Cd%25');
723
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=%2C&a[]=&a[]=c%2Cd%25');
724
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=%2C,,c%2Cd%25');
725
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a=%2C&a=&a=c%2Cd%25');
726
+
727
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: false, arrayFormat: 'indices' }), 'a%5B0%5D=%2C&a%5B1%5D=&a%5B2%5D=c%2Cd%25');
728
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: false, arrayFormat: 'brackets' }), 'a%5B%5D=%2C&a%5B%5D=&a%5B%5D=c%2Cd%25');
729
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: false, arrayFormat: 'comma' }), 'a=%2C%2C%2Cc%2Cd%25');
730
+ st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: false, arrayFormat: 'repeat' }), 'a=%2C&a=&a=c%2Cd%25');
731
+
732
+ st.end();
733
+ });
734
+
735
+ t.test('encodes comma array values with the same encoder arguments as other values, with encodeValuesOnly', function (st) {
736
+ var commaValuesOnly = { arrayFormat: 'comma', encodeValuesOnly: true };
737
+
738
+ st.equal(
739
+ qs.stringify({ a: ['é', 'x'], b: 'é' }, utils.assign({ charset: 'iso-8859-1' }, commaValuesOnly)),
740
+ 'a=%E9,x&b=%E9',
741
+ 'respects charset iso-8859-1'
742
+ );
743
+ st.deepEqual(
744
+ qs.parse(qs.stringify({ a: ['é', 'x'] }, utils.assign({ charset: 'iso-8859-1' }, commaValuesOnly)), { charset: 'iso-8859-1', comma: true }),
745
+ { a: ['é', 'x'] },
746
+ 'round-trips in iso-8859-1'
747
+ );
748
+ st.equal(
749
+ qs.stringify({ a: ['☺'] }, utils.assign({ charset: 'iso-8859-1' }, commaValuesOnly)),
750
+ 'a=%26%239786%3B',
751
+ 'encodes unrepresentable chars as numeric entities in iso-8859-1'
752
+ );
753
+ st.equal(
754
+ qs.stringify({ a: ['(x)', 'y z'], b: '(x)' }, utils.assign({ format: qs.formats.RFC1738 }, commaValuesOnly)),
755
+ 'a=(x),y+z&b=(x)',
756
+ 'respects format RFC1738'
757
+ );
758
+
759
+ var calls = [];
760
+ st.equal(
761
+ qs.stringify({ a: ['b', 'c'] }, utils.assign({
762
+ encoder: function (str, defaultEncoder, charset, kind, format) {
763
+ calls[calls.length] = [str, typeof defaultEncoder, charset, kind, format];
764
+ return defaultEncoder(str, defaultEncoder, charset, kind, format).toUpperCase();
765
+ }
766
+ }, commaValuesOnly)),
767
+ 'a=B,C',
768
+ 'a custom encoder can call defaultEncoder'
769
+ );
770
+ st.deepEqual(
771
+ calls,
772
+ [
773
+ ['b', 'function', 'utf-8', 'value', qs.formats.RFC3986],
774
+ ['c', 'function', 'utf-8', 'value', qs.formats.RFC3986]
775
+ ],
776
+ 'a custom encoder receives defaultEncoder, charset, kind, and format'
777
+ );
778
+
779
+ st.end();
780
+ });
781
+
782
+ t.test('stringifies comma and empty non-array values', function (st) {
783
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'indices' }), 'a=,&b=&c=c,d%');
784
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'brackets' }), 'a=,&b=&c=c,d%');
785
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'comma' }), 'a=,&b=&c=c,d%');
786
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'repeat' }), 'a=,&b=&c=c,d%');
787
+
788
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'indices' }), 'a=%2C&b=&c=c%2Cd%25');
789
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a=%2C&b=&c=c%2Cd%25');
790
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=%2C&b=&c=c%2Cd%25');
791
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a=%2C&b=&c=c%2Cd%25');
792
+
793
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'indices' }), 'a=%2C&b=&c=c%2Cd%25');
794
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'brackets' }), 'a=%2C&b=&c=c%2Cd%25');
795
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'comma' }), 'a=%2C&b=&c=c%2Cd%25');
796
+ st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'repeat' }), 'a=%2C&b=&c=c%2Cd%25');
797
+
798
+ st.end();
799
+ });
800
+
801
+ t.test('stringifies a nested array value with dots notation', function (st) {
802
+ st.equal(
803
+ qs.stringify(
804
+ { a: { b: ['c', 'd'] } },
805
+ { allowDots: true, encodeValuesOnly: true, arrayFormat: 'indices' }
806
+ ),
807
+ 'a.b[0]=c&a.b[1]=d',
808
+ 'indices: stringifies with dots + indices'
809
+ );
810
+ st.equal(
811
+ qs.stringify(
812
+ { a: { b: ['c', 'd'] } },
813
+ { allowDots: true, encodeValuesOnly: true, arrayFormat: 'brackets' }
814
+ ),
815
+ 'a.b[]=c&a.b[]=d',
816
+ 'brackets: stringifies with dots + brackets'
817
+ );
818
+ st.equal(
819
+ qs.stringify(
820
+ { a: { b: ['c', 'd'] } },
821
+ { allowDots: true, encodeValuesOnly: true, arrayFormat: 'comma' }
822
+ ),
823
+ 'a.b=c,d',
824
+ 'comma: stringifies with dots + comma'
825
+ );
826
+ st.equal(
827
+ qs.stringify(
828
+ { a: { b: ['c', 'd'] } },
829
+ { allowDots: true, encodeValuesOnly: true }
830
+ ),
831
+ 'a.b[0]=c&a.b[1]=d',
832
+ 'default: stringifies with dots + indices'
833
+ );
834
+ st.end();
835
+ });
836
+
837
+ t.test('stringifies an object inside an array', function (st) {
838
+ st.equal(
839
+ qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices', encodeValuesOnly: true }),
840
+ 'a[0][b]=c',
841
+ 'indices => indices'
842
+ );
843
+ st.equal(
844
+ qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'repeat', encodeValuesOnly: true }),
845
+ 'a[b]=c',
846
+ 'repeat => repeat'
847
+ );
848
+ st.equal(
849
+ qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets', encodeValuesOnly: true }),
850
+ 'a[][b]=c',
851
+ 'brackets => brackets'
852
+ );
853
+ st.equal(
854
+ qs.stringify({ a: [{ b: 'c' }] }, { encodeValuesOnly: true }),
855
+ 'a[0][b]=c',
856
+ 'default => indices'
857
+ );
858
+
859
+ st.equal(
860
+ qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices', encodeValuesOnly: true }),
861
+ 'a[0][b][c][0]=1',
862
+ 'indices => indices'
863
+ );
864
+ st.equal(
865
+ qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'repeat', encodeValuesOnly: true }),
866
+ 'a[b][c]=1',
867
+ 'repeat => repeat'
868
+ );
869
+ st.equal(
870
+ qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets', encodeValuesOnly: true }),
871
+ 'a[][b][c][]=1',
872
+ 'brackets => brackets'
873
+ );
874
+ st.equal(
875
+ qs.stringify({ a: [{ b: { c: [1] } }] }, { encodeValuesOnly: true }),
876
+ 'a[0][b][c][0]=1',
877
+ 'default => indices'
878
+ );
879
+
880
+ st.end();
881
+ });
882
+
883
+ t.test('stringifies an array with mixed objects and primitives', function (st) {
884
+ st.equal(
885
+ qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'indices' }),
886
+ 'a[0][b]=1&a[1]=2&a[2]=3',
887
+ 'indices => indices'
888
+ );
889
+ st.equal(
890
+ qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
891
+ 'a[][b]=1&a[]=2&a[]=3',
892
+ 'brackets => brackets'
893
+ );
894
+ st.equal(
895
+ qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'comma' }),
896
+ '???',
897
+ 'brackets => brackets',
898
+ { skip: 'TODO: figure out what this should do' }
899
+ );
900
+ st.equal(
901
+ qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true }),
902
+ 'a[0][b]=1&a[1]=2&a[2]=3',
903
+ 'default => indices'
904
+ );
905
+
906
+ st.end();
907
+ });
908
+
909
+ t.test('stringifies an object inside an array with dots notation', function (st) {
910
+ st.equal(
911
+ qs.stringify(
912
+ { a: [{ b: 'c' }] },
913
+ { allowDots: true, encode: false, arrayFormat: 'indices' }
914
+ ),
915
+ 'a[0].b=c',
916
+ 'indices => indices'
917
+ );
918
+ st.equal(
919
+ qs.stringify(
920
+ { a: [{ b: 'c' }] },
921
+ { allowDots: true, encode: false, arrayFormat: 'brackets' }
922
+ ),
923
+ 'a[].b=c',
924
+ 'brackets => brackets'
925
+ );
926
+ st.equal(
927
+ qs.stringify(
928
+ { a: [{ b: 'c' }] },
929
+ { allowDots: true, encode: false }
930
+ ),
931
+ 'a[0].b=c',
932
+ 'default => indices'
933
+ );
934
+
935
+ st.equal(
936
+ qs.stringify(
937
+ { a: [{ b: { c: [1] } }] },
938
+ { allowDots: true, encode: false, arrayFormat: 'indices' }
939
+ ),
940
+ 'a[0].b.c[0]=1',
941
+ 'indices => indices'
942
+ );
943
+ st.equal(
944
+ qs.stringify(
945
+ { a: [{ b: { c: [1] } }] },
946
+ { allowDots: true, encode: false, arrayFormat: 'brackets' }
947
+ ),
948
+ 'a[].b.c[]=1',
949
+ 'brackets => brackets'
950
+ );
951
+ st.equal(
952
+ qs.stringify(
953
+ { a: [{ b: { c: [1] } }] },
954
+ { allowDots: true, encode: false }
955
+ ),
956
+ 'a[0].b.c[0]=1',
957
+ 'default => indices'
958
+ );
959
+
960
+ st.end();
961
+ });
962
+
963
+ t.test('does not omit object keys when indices = false', function (st) {
964
+ st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c');
965
+ st.end();
966
+ });
967
+
968
+ t.test('uses indices notation for arrays when indices=true', function (st) {
969
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c');
970
+ st.end();
971
+ });
972
+
973
+ t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) {
974
+ st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c');
975
+ st.end();
976
+ });
977
+
978
+ t.test('uses indices notation for arrays when arrayFormat=indices', function (st) {
979
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c');
980
+ st.end();
981
+ });
982
+
983
+ t.test('uses repeat notation for arrays when arrayFormat=repeat', function (st) {
984
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c');
985
+ st.end();
986
+ });
987
+
988
+ t.test('uses brackets notation for arrays when arrayFormat=brackets', function (st) {
989
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c');
990
+ st.end();
991
+ });
992
+
993
+ t.test('stringifies a complicated object', function (st) {
994
+ st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e');
995
+ st.end();
996
+ });
997
+
998
+ t.test('stringifies an empty value', function (st) {
999
+ st.equal(qs.stringify({ a: '' }), 'a=');
1000
+ st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a');
1001
+
1002
+ st.equal(qs.stringify({ a: '', b: '' }), 'a=&b=');
1003
+ st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b=');
1004
+
1005
+ st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D=');
1006
+ st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D');
1007
+ st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D=');
1008
+
1009
+ st.end();
1010
+ });
1011
+
1012
+ t.test('stringifies an empty array in different arrayFormat', function (st) {
1013
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false }), 'b[0]=&c=c');
1014
+ // arrayFormat default
1015
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'indices' }), 'b[0]=&c=c');
1016
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'brackets' }), 'b[]=&c=c');
1017
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'repeat' }), 'b=&c=c');
1018
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma' }), 'b=&c=c');
1019
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', commaRoundTrip: true }), 'b[]=&c=c');
1020
+ // with strictNullHandling
1021
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'indices', strictNullHandling: true }), 'b[0]&c=c');
1022
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'brackets', strictNullHandling: true }), 'b[]&c=c');
1023
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'repeat', strictNullHandling: true }), 'b&c=c');
1024
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', strictNullHandling: true }), 'b&c=c');
1025
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', strictNullHandling: true, commaRoundTrip: true }), 'b[]&c=c');
1026
+ // with skipNulls
1027
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'indices', skipNulls: true }), 'c=c');
1028
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'brackets', skipNulls: true }), 'c=c');
1029
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'repeat', skipNulls: true }), 'c=c');
1030
+ st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', skipNulls: true }), 'c=c');
1031
+
1032
+ st.end();
1033
+ });
1034
+
1035
+ t.test('does not crash on null/undefined entries in arrayFormat=comma with encodeValuesOnly', function (st) {
1036
+ st.doesNotThrow(
1037
+ function () { qs.stringify({ a: [null, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }); },
1038
+ 'does not pass a raw null array entry to the encoder'
1039
+ );
1040
+ st.doesNotThrow(
1041
+ function () { qs.stringify({ a: [undefined, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }); },
1042
+ 'does not pass a raw undefined array entry to the encoder'
1043
+ );
1044
+ st.doesNotThrow(
1045
+ function () { qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true }); },
1046
+ 'does not crash on a single-null array'
1047
+ );
1048
+
1049
+ st.equal(
1050
+ qs.stringify({ a: [null, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
1051
+ 'a=,b',
1052
+ 'null entry joins as empty, comma stays unencoded under encodeValuesOnly'
1053
+ );
1054
+ st.equal(
1055
+ qs.stringify({ a: [undefined, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
1056
+ 'a=,b',
1057
+ 'undefined entry joins as empty, comma stays unencoded under encodeValuesOnly'
1058
+ );
1059
+ st.equal(
1060
+ qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true }),
1061
+ 'a=',
1062
+ 'single-null array stringifies as empty value'
1063
+ );
1064
+ st.equal(
1065
+ qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true, strictNullHandling: true }),
1066
+ 'a',
1067
+ 'strictNullHandling drops the equals sign for a single-null array'
1068
+ );
1069
+ st.equal(
1070
+ qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true, skipNulls: true }),
1071
+ '',
1072
+ 'skipNulls drops a single-null array entirely'
1073
+ );
1074
+
1075
+ st.end();
1076
+ });
1077
+
1078
+ t.test('arrayFormat=comma: does not crash on entries with no callable `toString`', function (st) {
1079
+ var json = JSON.parse('{ "a": ["b", { "toString": "x" }, "c"] }');
1080
+ st.equal(qs.stringify(json, { arrayFormat: 'comma' }), 'a=b%2C%5Bobject%20Object%5D%2Cc', 'JSON own `toString`');
1081
+ st.equal(qs.stringify(json, { arrayFormat: 'comma', encode: false }), 'a=b,[object Object],c', 'with encode: false');
1082
+ st.equal(
1083
+ qs.stringify(json, { arrayFormat: 'comma', encodeValuesOnly: true }),
1084
+ 'a=b,%5Bobject%20Object%5D,c',
1085
+ 'with encodeValuesOnly'
1086
+ );
1087
+ st.equal(
1088
+ qs.stringify(JSON.parse('{ "a": [{ "toString": "x" }] }'), { arrayFormat: 'comma', commaRoundTrip: true }),
1089
+ 'a%5B%5D=%5Bobject%20Object%5D',
1090
+ 'with commaRoundTrip'
1091
+ );
1092
+ st.equal(
1093
+ qs.stringify(JSON.parse('{ "a": [{ "toString": "x" }] }'), { arrayFormat: 'comma' }),
1094
+ qs.stringify({ a: [{ b: 1 }] }, { arrayFormat: 'comma' }),
1095
+ 'renders the same as a plain object entry'
1096
+ );
1097
+
1098
+ st.equal(
1099
+ qs.stringify(qs.parse('a[][b]=c', { plainObjects: true }), { arrayFormat: 'comma' }),
1100
+ 'a=%5Bobject%20Object%5D',
1101
+ 'null-prototype entry from `parse` with plainObjects'
1102
+ );
1103
+ st.equal(
1104
+ qs.stringify(qs.parse('a[][b]=c', { plainObjects: true }), { arrayFormat: 'comma', encodeValuesOnly: true }),
1105
+ 'a=%5Bobject%20Object%5D',
1106
+ 'null-prototype entry from `parse` with plainObjects, with encodeValuesOnly'
1107
+ );
1108
+ st.equal(
1109
+ qs.stringify(qs.parse('a[0][toString]=x', { allowPrototypes: true }), { arrayFormat: 'comma' }),
1110
+ 'a=%5Bobject%20Object%5D',
1111
+ 'own `toString` entry from `parse` with allowPrototypes'
1112
+ );
1113
+
1114
+ var nested = JSON.parse('{ "a": [[1, [{ "toString": "x" }]], "y"] }');
1115
+ st.equal(qs.stringify(nested, { arrayFormat: 'comma', encode: false }), 'a=1,[object Object],y', 'nested array');
1116
+ st.equal(
1117
+ qs.stringify(nested, { arrayFormat: 'comma', encodeValuesOnly: true }),
1118
+ 'a=1%2C%5Bobject%20Object%5D,y',
1119
+ 'nested array, with encodeValuesOnly'
1120
+ );
1121
+ st.equal(qs.stringify({ a: [[1, 2], 3] }, { arrayFormat: 'comma', encode: false }), 'a=1,2,3', 'nested array is still flattened');
1122
+
1123
+ var cyclic = [{ toString: 'x' }];
1124
+ cyclic[cyclic.length] = cyclic;
1125
+ st.equal(
1126
+ qs.stringify({ a: cyclic }, { arrayFormat: 'comma', encode: false }),
1127
+ 'a=[object Object],[object Object],',
1128
+ 'cyclic nested array joins its cycle as empty'
1129
+ );
1130
+
1131
+ var customJoin = [{ toString: 'x' }];
1132
+ customJoin.join = function () { return 'j'; };
1133
+ st.equal(qs.stringify({ a: [customJoin, 'y'] }, { arrayFormat: 'comma', encode: false }), 'a=j,y', 'own `join` is still used');
1134
+
1135
+ st.equal(
1136
+ qs.stringify({ a: [{ toString: 'x', valueOf: function () { return 7; } }] }, { arrayFormat: 'comma' }),
1137
+ 'a=7',
1138
+ 'primitive `valueOf` is still used'
1139
+ );
1140
+ st.equal(
1141
+ qs.stringify({ a: [{ toString: 'x', valueOf: function () { return null; } }] }, { arrayFormat: 'comma' }),
1142
+ 'a=null',
1143
+ 'null `valueOf` is still used'
1144
+ );
1145
+ st.equal(
1146
+ qs.stringify({ a: [{ toString: 'x', valueOf: function () { return {}; } }] }, { arrayFormat: 'comma' }),
1147
+ 'a=%5Bobject%20Object%5D',
1148
+ 'non-primitive `valueOf` falls back'
1149
+ );
1150
+
1151
+ st.equal(
1152
+ qs.stringify({ a: [{ toString: function () { return 't'; } }, new Date(0)] }, { arrayFormat: 'comma', encode: false }),
1153
+ 'a=t,1970-01-01T00:00:00.000Z',
1154
+ 'callable `toString` and dates are unaffected'
1155
+ );
1156
+
1157
+ st['throws'](
1158
+ function () {
1159
+ qs.stringify({ a: [{ toString: function () { throw new SyntaxError('mine'); } }] }, { arrayFormat: 'comma' });
1160
+ },
1161
+ SyntaxError,
1162
+ 'a throwing `toString` still throws'
1163
+ );
1164
+ st['throws'](
1165
+ function () {
1166
+ qs.stringify({ a: [{ toString: 'x', valueOf: function () { throw new EvalError('mine'); } }] }, { arrayFormat: 'comma' });
1167
+ },
1168
+ EvalError,
1169
+ 'a throwing `valueOf` still throws'
1170
+ );
1171
+
1172
+ st.end();
1173
+ });
1174
+
1175
+ t.test('arrayFormat=comma: entries with `Symbol.toPrimitive` are unaffected', { skip: !hasSymbols() || typeof Symbol.toPrimitive !== 'symbol' }, function (st) {
1176
+ var entry = { toString: 'x' };
1177
+ entry[Symbol.toPrimitive] = function () { return 'p'; };
1178
+ st.equal(qs.stringify({ a: [entry] }, { arrayFormat: 'comma' }), 'a=p');
1179
+ st.equal(qs.stringify({ a: [entry] }, { arrayFormat: 'comma', encodeValuesOnly: true }), 'a=p');
1180
+
1181
+ st.end();
1182
+ });
1183
+
1184
+ t.test('stringifies a null object', { skip: !hasProto }, function (st) {
1185
+ st.equal(qs.stringify({ __proto__: null, a: 'b' }), 'a=b');
1186
+ st.end();
1187
+ });
1188
+
1189
+ t.test('returns an empty string for invalid input', function (st) {
1190
+ st.equal(qs.stringify(undefined), '');
1191
+ st.equal(qs.stringify(false), '');
1192
+ st.equal(qs.stringify(null), '');
1193
+ st.equal(qs.stringify(''), '');
1194
+ st.end();
1195
+ });
1196
+
1197
+ t.test('stringifies an object with a null object as a child', { skip: !hasProto }, function (st) {
1198
+ st.equal(qs.stringify({ a: { __proto__: null, b: 'c' } }), 'a%5Bb%5D=c');
1199
+ st.end();
1200
+ });
1201
+
1202
+ t.test('drops keys with a value of undefined', function (st) {
1203
+ st.equal(qs.stringify({ a: undefined }), '');
1204
+
1205
+ st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D');
1206
+ st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D=');
1207
+ st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D=');
1208
+ st.end();
1209
+ });
1210
+
1211
+ t.test('url encodes values', function (st) {
1212
+ st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
1213
+ st.end();
1214
+ });
1215
+
1216
+ t.test('stringifies a date', function (st) {
1217
+ var now = new Date();
1218
+ var str = 'a=' + encodeURIComponent(now.toISOString());
1219
+ st.equal(qs.stringify({ a: now }), str);
1220
+ st.end();
1221
+ });
1222
+
1223
+ t.test('stringifies the weird object from qs', function (st) {
1224
+ st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F');
1225
+ st.end();
1226
+ });
1227
+
1228
+ t.test('skips properties that are part of the object prototype', function (st) {
1229
+ st.intercept(Object.prototype, 'crash', { value: 'test' });
1230
+
1231
+ st.equal(qs.stringify({ a: 'b' }), 'a=b');
1232
+ st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
1233
+
1234
+ st.end();
1235
+ });
1236
+
1237
+ t.test('stringifies boolean values', function (st) {
1238
+ st.equal(qs.stringify({ a: true }), 'a=true');
1239
+ st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true');
1240
+ st.equal(qs.stringify({ b: false }), 'b=false');
1241
+ st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false');
1242
+ st.end();
1243
+ });
1244
+
1245
+ t.test('stringifies buffer values', function (st) {
1246
+ st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test');
1247
+ st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test');
1248
+ st.end();
1249
+ });
1250
+
1251
+ t.test('does not throw on a non-callable `constructor.isBuffer` key', function (st) {
1252
+ var input = { a: { constructor: { isBuffer: 'x' } } };
1253
+ st.doesNotThrow(function () { qs.stringify(input); });
1254
+ st.equal(qs.stringify(input), 'a%5Bconstructor%5D%5BisBuffer%5D=x');
1255
+ st.equal(qs.stringify({ a: { constructor: { isBuffer: { b: 'c' } } } }), 'a%5Bconstructor%5D%5BisBuffer%5D%5Bb%5D=c');
1256
+ st.equal(qs.stringify({ a: { constructor: { isBuffer: ['b'] } } }), 'a%5Bconstructor%5D%5BisBuffer%5D%5B0%5D=b');
1257
+ st.equal(qs.stringify({ a: { constructor: { isBuffer: true } } }), 'a%5Bconstructor%5D%5BisBuffer%5D=true');
1258
+ st.end();
1259
+ });
1260
+
1261
+ t.test('round-trips a parsed `constructor[isBuffer]` key', function (st) {
1262
+ var str = 'x%5Bconstructor%5D%5BisBuffer%5D=y';
1263
+
1264
+ var plain = qs.parse(str, { plainObjects: true });
1265
+ st.deepEqual(plain, { __proto__: null, x: { __proto__: null, constructor: { __proto__: null, isBuffer: 'y' } } }, 'plainObjects keeps the key');
1266
+ st.doesNotThrow(function () { qs.stringify(plain); });
1267
+ st.equal(qs.stringify(plain), str, 'plainObjects round-trips');
1268
+
1269
+ var proto = qs.parse(str, { allowPrototypes: true });
1270
+ st.deepEqual(proto, { x: { constructor: { isBuffer: 'y' } } }, 'allowPrototypes keeps the key');
1271
+ st.doesNotThrow(function () { qs.stringify(proto); });
1272
+ st.equal(qs.stringify(proto), str, 'allowPrototypes round-trips');
1273
+
1274
+ st.equal(qs.stringify(qs.parse(str)), '', 'default options drop the key');
1275
+ st.end();
1276
+ });
1277
+
1278
+ t.test('stringifies an object using an alternative delimiter', function (st) {
1279
+ st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d');
1280
+ st.end();
1281
+ });
1282
+
1283
+ t.test('does not blow up when Buffer global is missing', function (st) {
1284
+ var restore = mockProperty(global, 'Buffer', { 'delete': true });
1285
+
1286
+ var result = qs.stringify({ a: 'b', c: 'd' });
1287
+
1288
+ restore();
1289
+
1290
+ st.equal(result, 'a=b&c=d');
1291
+ st.end();
1292
+ });
1293
+
1294
+ t.test('does not crash when parsing circular references', function (st) {
1295
+ var a = {};
1296
+ a.b = a;
1297
+
1298
+ st['throws'](
1299
+ function () { qs.stringify({ 'foo[bar]': 'baz', 'foo[baz]': a }); },
1300
+ /RangeError: Cyclic object value/,
1301
+ 'cyclic values throw'
1302
+ );
1303
+
1304
+ var circular = {
1305
+ a: 'value'
1306
+ };
1307
+ circular.a = circular;
1308
+ st['throws'](
1309
+ function () { qs.stringify(circular); },
1310
+ /RangeError: Cyclic object value/,
1311
+ 'cyclic values throw'
1312
+ );
1313
+
1314
+ var arr = ['a'];
1315
+ st.doesNotThrow(
1316
+ function () { qs.stringify({ x: arr, y: arr }); },
1317
+ 'non-cyclic values do not throw'
1318
+ );
1319
+
1320
+ st.end();
1321
+ });
1322
+
1323
+ t.test('non-circular duplicated references can still work', function (st) {
1324
+ var hourOfDay = {
1325
+ 'function': 'hour_of_day'
1326
+ };
1327
+
1328
+ var p1 = {
1329
+ 'function': 'gte',
1330
+ arguments: [hourOfDay, 0]
1331
+ };
1332
+ var p2 = {
1333
+ 'function': 'lte',
1334
+ arguments: [hourOfDay, 23]
1335
+ };
1336
+
1337
+ st.equal(
1338
+ qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true, arrayFormat: 'indices' }),
1339
+ 'filters[$and][0][function]=gte&filters[$and][0][arguments][0][function]=hour_of_day&filters[$and][0][arguments][1]=0&filters[$and][1][function]=lte&filters[$and][1][arguments][0][function]=hour_of_day&filters[$and][1][arguments][1]=23'
1340
+ );
1341
+ st.equal(
1342
+ qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
1343
+ 'filters[$and][][function]=gte&filters[$and][][arguments][][function]=hour_of_day&filters[$and][][arguments][]=0&filters[$and][][function]=lte&filters[$and][][arguments][][function]=hour_of_day&filters[$and][][arguments][]=23'
1344
+ );
1345
+ st.equal(
1346
+ qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true, arrayFormat: 'repeat' }),
1347
+ 'filters[$and][function]=gte&filters[$and][arguments][function]=hour_of_day&filters[$and][arguments]=0&filters[$and][function]=lte&filters[$and][arguments][function]=hour_of_day&filters[$and][arguments]=23'
1348
+ );
1349
+
1350
+ st.end();
1351
+ });
1352
+
1353
+ t.test('selects properties when filter=array', function (st) {
1354
+ st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b');
1355
+ st.equal(qs.stringify({ a: 1 }, { filter: [] }), '');
1356
+
1357
+ st.equal(
1358
+ qs.stringify(
1359
+ { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
1360
+ { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' }
1361
+ ),
1362
+ 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3',
1363
+ 'indices => indices'
1364
+ );
1365
+ st.equal(
1366
+ qs.stringify(
1367
+ { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
1368
+ { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' }
1369
+ ),
1370
+ 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3',
1371
+ 'brackets => brackets'
1372
+ );
1373
+ st.equal(
1374
+ qs.stringify(
1375
+ { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
1376
+ { filter: ['a', 'b', 0, 2] }
1377
+ ),
1378
+ 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3',
1379
+ 'default => indices'
1380
+ );
1381
+
1382
+ st.end();
1383
+ });
1384
+
1385
+ t.test('skips null/undefined entries in filter=array', function (st) {
1386
+ st.doesNotThrow(
1387
+ function () { qs.stringify({ a: 'b', undefined: 'x' }, { filter: ['a', undefined] }); },
1388
+ 'does not pass a raw undefined filter entry to the encoder'
1389
+ );
1390
+ st.doesNotThrow(
1391
+ function () { qs.stringify({ a: 'b', 'null': 'x' }, { filter: ['a', null] }); },
1392
+ 'does not pass a raw null filter entry to the encoder'
1393
+ );
1394
+
1395
+ st.equal(
1396
+ qs.stringify({ a: 'b', undefined: 'x', c: 'd' }, { filter: ['a', undefined, 'c'] }),
1397
+ 'a=b&c=d',
1398
+ 'undefined filter entry is skipped, remaining keys are kept'
1399
+ );
1400
+ st.equal(
1401
+ qs.stringify({ a: 'b', 'null': 'x', c: 'd' }, { filter: ['a', null, 'c'] }),
1402
+ 'a=b&c=d',
1403
+ 'null filter entry is skipped, remaining keys are kept'
1404
+ );
1405
+ st.equal(
1406
+ qs.stringify({ a: 'b', 'null': 'x' }, { filter: [null] }),
1407
+ '',
1408
+ 'filter array containing only null yields empty string'
1409
+ );
1410
+
1411
+ st.end();
1412
+ });
1413
+
1414
+ t.test('applies sort to nested keys selected by filter=array', function (st) {
1415
+ var asc = function (a, b) { return a.localeCompare(b); };
1416
+ var desc = function (a, b) { return b.localeCompare(a); };
1417
+
1418
+ st.equal(
1419
+ qs.stringify({ a: { c: 1, b: 2 }, z: 3 }, { filter: ['z', 'a', 'c', 'b'], sort: asc, encode: false }),
1420
+ 'a[b]=2&a[c]=1&z=3',
1421
+ 'nested keys are sorted, not left in filter order'
1422
+ );
1423
+ st.equal(
1424
+ qs.stringify({ a: { c: 1, b: 2 }, z: 3 }, { filter: ['z', 'b', 'a', 'c'], sort: desc, encode: false }),
1425
+ 'z=3&a[c]=1&a[b]=2',
1426
+ 'nested keys follow a descending sort'
1427
+ );
1428
+ st.equal(
1429
+ qs.stringify({ a: [{ y: 1, x: 2 }] }, { filter: ['a', '0', 'y', 'x'], sort: asc, encode: false }),
1430
+ 'a[0][x]=2&a[0][y]=1',
1431
+ 'keys of objects nested in arrays are sorted'
1432
+ );
1433
+ st.equal(
1434
+ qs.stringify({ a: { c: 1, b: 2 }, z: 3 }, { filter: ['z', 'a', 'c', 'b'], encode: false }),
1435
+ 'z=3&a[c]=1&a[b]=2',
1436
+ 'without sort, keys keep filter order at every level'
1437
+ );
1438
+
1439
+ st.end();
1440
+ });
1441
+
1442
+ t.test('does not reorder the caller\'s filter array when sorting', function (st) {
1443
+ var filter = ['z', 'a', 'c', 'b'];
1444
+ var asc = function (a, b) { return a.localeCompare(b); };
1445
+
1446
+ st.equal(
1447
+ qs.stringify({ a: { c: 1, b: 2 }, z: 3 }, { filter: filter, sort: asc, encode: false }),
1448
+ 'a[b]=2&a[c]=1&z=3',
1449
+ 'keys are sorted at every level'
1450
+ );
1451
+ st.deepEqual(filter, ['z', 'a', 'c', 'b'], 'filter array is not mutated');
1452
+ st.equal(
1453
+ qs.stringify({ a: { c: 1, b: 2 }, z: 3 }, { filter: filter, encode: false }),
1454
+ 'z=3&a[c]=1&a[b]=2',
1455
+ 'reusing the filter without sort keeps its own order'
1456
+ );
1457
+
1458
+ st.end();
1459
+ });
1460
+
1461
+ t.test('supports custom representations when filter=function', function (st) {
1462
+ var calls = 0;
1463
+ var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } };
1464
+ var filterFunc = function (prefix, value) {
1465
+ calls += 1;
1466
+ if (calls === 1) {
1467
+ st.equal(prefix, '', 'prefix is empty');
1468
+ st.equal(value, obj);
1469
+ } else if (prefix === 'c') {
1470
+ return void 0;
1471
+ } else if (value instanceof Date) {
1472
+ st.equal(prefix, 'e[f]');
1473
+ return value.getTime();
1474
+ }
1475
+ return value;
1476
+ };
1477
+
1478
+ st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000');
1479
+ st.equal(calls, 5);
1480
+ st.end();
1481
+ });
1482
+
1483
+ t.test('serializes Date values unless filter transforms them', function (st) {
1484
+ var obj = {
1485
+ a: new Date(Date.UTC(2023, 2, 7, 9, 2, 41, 260)),
1486
+ b: [new Date(Date.UTC(2023, 2, 7, 9, 2, 41, 260))]
1487
+ };
1488
+ var iso = '2023-03-07T09%3A02%3A41.260Z';
1489
+ st.equal(
1490
+ qs.stringify(obj, { filter: function (prefix, value) { return value; } }),
1491
+ 'a=' + iso + '&b%5B0%5D=' + iso,
1492
+ 'Dates returned unchanged by a filter are serialized'
1493
+ );
1494
+ st.equal(
1495
+ qs.stringify({ a: new Date(0) }, { filter: function (prefix, value) { return value instanceof Date ? 'kept' : value; } }),
1496
+ 'a=kept',
1497
+ 'a filter that transforms a Date wins over default serialization'
1498
+ );
1499
+ st.end();
1500
+ });
1501
+
1502
+ t.test('applies default Date handling to whatever a filter function returns', function (st) {
1503
+ var date = new Date(Date.UTC(2023, 2, 7, 9, 2, 41, 260));
1504
+ var iso = '2023-03-07T09%3A02%3A41.260Z';
1505
+ var identity = function (prefix, value) { return value; };
1506
+
1507
+ st.equal(
1508
+ qs.stringify({ a: { b: date } }, { filter: identity }),
1509
+ 'a%5Bb%5D=' + iso,
1510
+ 'a nested Date is serialized through a filter'
1511
+ );
1512
+ st.equal(
1513
+ qs.stringify(
1514
+ { a: date },
1515
+ { filter: identity, serializeDate: function (d) { return String(d.getTime()); } }
1516
+ ),
1517
+ 'a=1678179761260',
1518
+ '`serializeDate` is honored after a filter'
1519
+ );
1520
+ st.equal(
1521
+ qs.stringify({ a: [date, 'x'] }, { filter: identity, arrayFormat: 'comma' }),
1522
+ 'a=' + iso + '%2Cx',
1523
+ 'Dates inside a comma array are serialized through a filter, not stringified as locale text'
1524
+ );
1525
+ st.equal(
1526
+ qs.stringify({ a: 'x' }, { filter: function (prefix, value) { return prefix === 'a' ? date : value; } }),
1527
+ 'a=' + iso,
1528
+ 'a Date produced by the filter is serialized'
1529
+ );
1530
+ st.equal(
1531
+ qs.stringify({ a: date, b: 1 }, { filter: ['a'] }),
1532
+ 'a=' + iso,
1533
+ 'an array filter still serializes Dates'
1534
+ );
1535
+ st['throws'](
1536
+ function () { qs.stringify({ a: new Date(NaN) }, { filter: identity }); },
1537
+ RangeError,
1538
+ 'an invalid Date through a filter throws like the no-filter path'
1539
+ );
1540
+ st.end();
1541
+ });
1542
+
1543
+ t.test('can disable uri encoding', function (st) {
1544
+ st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b');
1545
+ st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c');
1546
+ st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c');
1547
+ st.end();
1548
+ });
1549
+
1550
+ t.test('can sort the keys', function (st) {
1551
+ var sort = function (a, b) {
1552
+ return a.localeCompare(b);
1553
+ };
1554
+ st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y');
1555
+ st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a');
1556
+ st.end();
1557
+ });
1558
+
1559
+ t.test('can sort the keys at depth 3 or more too', function (st) {
1560
+ var sort = function (a, b) {
1561
+ return a.localeCompare(b);
1562
+ };
1563
+ st.equal(
1564
+ qs.stringify(
1565
+ { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' },
1566
+ { sort: sort, encode: false }
1567
+ ),
1568
+ 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb'
1569
+ );
1570
+ st.equal(
1571
+ qs.stringify(
1572
+ { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' },
1573
+ { sort: null, encode: false }
1574
+ ),
1575
+ 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b'
1576
+ );
1577
+ st.end();
1578
+ });
1579
+
1580
+ t.test('can stringify with custom encoding', function (st) {
1581
+ st.equal(qs.stringify({ 県: '大阪府', '': '' }, {
1582
+ encoder: function (str) {
1583
+ if (str.length === 0) {
1584
+ return '';
1585
+ }
1586
+ var buf = iconv.encode(str, 'shiftjis');
1587
+ var result = [];
1588
+ for (var i = 0; i < buf.length; ++i) {
1589
+ result.push(buf.readUInt8(i).toString(16));
1590
+ }
1591
+ return '%' + result.join('%');
1592
+ }
1593
+ }), '%8c%a7=%91%e5%8d%e3%95%7b&=');
1594
+ st.end();
1595
+ });
1596
+
1597
+ t.test('receives the default encoder as a second argument', function (st) {
1598
+ st.plan(8);
1599
+
1600
+ qs.stringify({ a: 1, b: new Date(), c: true, d: [1] }, {
1601
+ encoder: function (str) {
1602
+ st.match(typeof str, /^(?:string|number|boolean)$/);
1603
+ return '';
1604
+ }
1605
+ });
1606
+
1607
+ st.end();
1608
+ });
1609
+
1610
+ t.test('receives the default encoder as a second argument', function (st) {
1611
+ st.plan(2);
1612
+
1613
+ qs.stringify({ a: 1 }, {
1614
+ encoder: function (str, defaultEncoder) {
1615
+ st.equal(defaultEncoder, utils.encode);
1616
+ }
1617
+ });
1618
+
1619
+ st.end();
1620
+ });
1621
+
1622
+ t.test('throws error with wrong encoder', function (st) {
1623
+ st['throws'](function () {
1624
+ qs.stringify({}, { encoder: 'string' });
1625
+ }, new TypeError('Encoder has to be a function.'));
1626
+ st.end();
1627
+ });
1628
+
1629
+ t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) {
1630
+ st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, {
1631
+ encoder: function (buffer) {
1632
+ if (typeof buffer === 'string') {
1633
+ return buffer;
1634
+ }
1635
+ return String.fromCharCode(buffer.readUInt8(0) + 97);
1636
+ }
1637
+ }), 'a=b');
1638
+
1639
+ st.equal(qs.stringify({ a: SaferBuffer.from('a b') }, {
1640
+ encoder: function (buffer) {
1641
+ return buffer;
1642
+ }
1643
+ }), 'a=a b');
1644
+ st.end();
1645
+ });
1646
+
1647
+ t.test('serializeDate option', function (st) {
1648
+ var date = new Date();
1649
+ st.equal(
1650
+ qs.stringify({ a: date }),
1651
+ 'a=' + date.toISOString().replace(/:/g, '%3A'),
1652
+ 'default is toISOString'
1653
+ );
1654
+
1655
+ var mutatedDate = new Date();
1656
+ mutatedDate.toISOString = function () {
1657
+ throw new SyntaxError();
1658
+ };
1659
+ st['throws'](function () {
1660
+ mutatedDate.toISOString();
1661
+ }, SyntaxError);
1662
+ st.equal(
1663
+ qs.stringify({ a: mutatedDate }),
1664
+ 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'),
1665
+ 'toISOString works even when method is not locally present'
1666
+ );
1667
+
1668
+ var specificDate = new Date(6);
1669
+ st.equal(
1670
+ qs.stringify(
1671
+ { a: specificDate },
1672
+ { serializeDate: function (d) { return d.getTime() * 7; } }
1673
+ ),
1674
+ 'a=42',
1675
+ 'custom serializeDate function called'
1676
+ );
1677
+
1678
+ st.equal(
1679
+ qs.stringify(
1680
+ { a: [date] },
1681
+ {
1682
+ serializeDate: function (d) { return d.getTime(); },
1683
+ arrayFormat: 'comma'
1684
+ }
1685
+ ),
1686
+ 'a=' + date.getTime(),
1687
+ 'works with arrayFormat comma'
1688
+ );
1689
+ st.equal(
1690
+ qs.stringify(
1691
+ { a: [date] },
1692
+ {
1693
+ serializeDate: function (d) { return d.getTime(); },
1694
+ arrayFormat: 'comma',
1695
+ commaRoundTrip: true
1696
+ }
1697
+ ),
1698
+ 'a%5B%5D=' + date.getTime(),
1699
+ 'works with arrayFormat comma'
1700
+ );
1701
+
1702
+ st.end();
1703
+ });
1704
+
1705
+ t.test('RFC 1738 serialization', function (st) {
1706
+ st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c');
1707
+ st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d');
1708
+ st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC1738 }), 'a+b=a+b');
1709
+
1710
+ st.equal(qs.stringify({ 'foo(ref)': 'bar' }, { format: qs.formats.RFC1738 }), 'foo(ref)=bar');
1711
+ st.equal(qs.stringify({ 'a~*': '~*()' }, { format: qs.formats.RFC1738 }), 'a~%2A=~%2A()', 'leaves `~` unencoded and encodes `*`');
1712
+
1713
+ st.end();
1714
+ });
1715
+
1716
+ t.test('RFC 3986 spaces serialization', function (st) {
1717
+ st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c');
1718
+ st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d');
1719
+ st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC3986 }), 'a%20b=a%20b');
1720
+ st.equal(qs.stringify({ 'a~*': '~*()' }, { format: qs.formats.RFC3986 }), 'a~%2A=~%2A%28%29', 'leaves `~` unencoded, and encodes `*` and parens');
1721
+
1722
+ st.end();
1723
+ });
1724
+
1725
+ t.test('WHATWG serialization', function (st) {
1726
+ st.equal(qs.formats.WHATWG, 'WHATWG', 'is exported');
1727
+ st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.WHATWG }), 'a=b+c');
1728
+ st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.WHATWG }), 'a+b=c+d');
1729
+ st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.WHATWG }), 'a+b=a+b');
1730
+
1731
+ st.equal(qs.stringify({ a: '~' }, { format: qs.formats.WHATWG }), 'a=%7E', 'encodes `~`');
1732
+ st.equal(qs.stringify({ a: '*' }, { format: qs.formats.WHATWG }), 'a=*', 'does not encode `*`');
1733
+ st.equal(qs.stringify({ 'foo(ref)': 'bar' }, { format: qs.formats.WHATWG }), 'foo%28ref%29=bar', 'encodes parentheses');
1734
+ st.equal(qs.stringify({ a: '-._' }, { format: qs.formats.WHATWG }), 'a=-._');
1735
+ st.equal(qs.stringify({ a: '+&=' }, { format: qs.formats.WHATWG }), 'a=%2B%26%3D');
1736
+ st.equal(qs.stringify({ a: { b: 'c d' } }, { format: qs.formats.WHATWG }), 'a%5Bb%5D=c+d');
1737
+ st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.WHATWG, encode: false }), 'a=b c', 'encode: false leaves the value alone');
1738
+
1739
+ st.equal(
1740
+ qs.stringify({ 'a~b*': { 'c d': '~* ' } }, { format: qs.formats.WHATWG, encodeValuesOnly: true }),
1741
+ 'a~b*[c d]=%7E*+',
1742
+ 'encodeValuesOnly: leaves keys alone'
1743
+ );
1744
+ st.equal(
1745
+ qs.stringify({ a: '~*\u00e9 ' }, { format: qs.formats.WHATWG, charset: 'iso-8859-1' }),
1746
+ 'a=%7E*%E9+',
1747
+ 'charset iso-8859-1'
1748
+ );
1749
+ st.equal(
1750
+ qs.stringify({ a: '~* ' }, {
1751
+ format: qs.formats.WHATWG,
1752
+ encoder: function (str, defaultEncoder, charset, type, format) {
1753
+ return defaultEncoder(str, defaultEncoder, charset, type, format);
1754
+ }
1755
+ }),
1756
+ 'a=%7E*+',
1757
+ 'an encoder wrapping the default encoder'
1758
+ );
1759
+ st.equal(
1760
+ qs.stringify({ a: ['~ x', '*'] }, { format: qs.formats.WHATWG, arrayFormat: 'comma' }),
1761
+ 'a=%7E+x%2C*',
1762
+ 'arrayFormat comma'
1763
+ );
1764
+
1765
+ st.end();
1766
+ });
1767
+
1768
+ var USP = typeof URLSearchParams === 'function' ? URLSearchParams : url.URLSearchParams;
1769
+
1770
+ t.test('WHATWG serialization matches URLSearchParams', { skip: typeof USP !== 'function' }, function (st) {
1771
+ var chars = [];
1772
+ for (var c = 0; c < 0x80; c++) {
1773
+ chars[chars.length] = String.fromCharCode(c);
1774
+ }
1775
+ chars.push('\u00e9', '\u20ac', '\uFFFF', '\uD83D\uDCA9', 'a b~c*d(e)f', '\uD800', '\uDC00', 'x\uDC00y');
1776
+
1777
+ for (var i = 0; i < chars.length; i++) {
1778
+ var key = {};
1779
+ key[chars[i]] = 'v';
1780
+ st.equal(
1781
+ qs.stringify({ k: chars[i] }, { format: qs.formats.WHATWG }),
1782
+ new USP([['k', chars[i]]]).toString(),
1783
+ 'value ' + JSON.stringify(chars[i])
1784
+ );
1785
+ st.equal(
1786
+ qs.stringify(key, { format: qs.formats.WHATWG }),
1787
+ new USP([[chars[i], 'v']]).toString(),
1788
+ 'key ' + JSON.stringify(chars[i])
1789
+ );
1790
+ }
1791
+
1792
+ st.equal(
1793
+ qs.stringify({ a: { 'b~': 'c d' } }, { format: qs.formats.WHATWG }),
1794
+ new USP([['a[b~]', 'c d']]).toString(),
1795
+ 'nested key'
1796
+ );
1797
+
1798
+ st.end();
1799
+ });
1800
+
1801
+ t.test('Backward compatibility to RFC 3986', function (st) {
1802
+ st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
1803
+ st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }), 'a%20b=a%20b');
1804
+
1805
+ st.end();
1806
+ });
1807
+
1808
+ t.test('Edge cases and unknown formats', function (st) {
1809
+ ['UFO1234', false, 1234, null, {}, []].forEach(function (format) {
1810
+ st['throws'](
1811
+ function () {
1812
+ qs.stringify({ a: 'b c' }, { format: format });
1813
+ },
1814
+ new TypeError('Unknown format option provided.')
1815
+ );
1816
+ });
1817
+ st.end();
1818
+ });
1819
+
1820
+ t.test('encodeValuesOnly', function (st) {
1821
+ st.equal(
1822
+ qs.stringify(
1823
+ { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
1824
+ { encodeValuesOnly: true, arrayFormat: 'indices' }
1825
+ ),
1826
+ 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h',
1827
+ 'encodeValuesOnly + indices'
1828
+ );
1829
+ st.equal(
1830
+ qs.stringify(
1831
+ { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
1832
+ { encodeValuesOnly: true, arrayFormat: 'brackets' }
1833
+ ),
1834
+ 'a=b&c[]=d&c[]=e%3Df&f[][]=g&f[][]=h',
1835
+ 'encodeValuesOnly + brackets'
1836
+ );
1837
+ st.equal(
1838
+ qs.stringify(
1839
+ { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
1840
+ { encodeValuesOnly: true, arrayFormat: 'repeat' }
1841
+ ),
1842
+ 'a=b&c=d&c=e%3Df&f=g&f=h',
1843
+ 'encodeValuesOnly + repeat'
1844
+ );
1845
+
1846
+ st.equal(
1847
+ qs.stringify(
1848
+ { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] },
1849
+ { arrayFormat: 'indices' }
1850
+ ),
1851
+ 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h',
1852
+ 'no encodeValuesOnly + indices'
1853
+ );
1854
+ st.equal(
1855
+ qs.stringify(
1856
+ { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] },
1857
+ { arrayFormat: 'brackets' }
1858
+ ),
1859
+ 'a=b&c%5B%5D=d&c%5B%5D=e&f%5B%5D%5B%5D=g&f%5B%5D%5B%5D=h',
1860
+ 'no encodeValuesOnly + brackets'
1861
+ );
1862
+ st.equal(
1863
+ qs.stringify(
1864
+ { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] },
1865
+ { arrayFormat: 'repeat' }
1866
+ ),
1867
+ 'a=b&c=d&c=e&f=g&f=h',
1868
+ 'no encodeValuesOnly + repeat'
1869
+ );
1870
+
1871
+ st.end();
1872
+ });
1873
+
1874
+ t.test('encodeValuesOnly - strictNullHandling', function (st) {
1875
+ st.equal(
1876
+ qs.stringify(
1877
+ { a: { b: null } },
1878
+ { encodeValuesOnly: true, strictNullHandling: true }
1879
+ ),
1880
+ 'a[b]'
1881
+ );
1882
+ st.end();
1883
+ });
1884
+
1885
+ t.test('strictNullHandling: applies the formatter to the encoded key (RFC1738)', function (st) {
1886
+ st.equal(
1887
+ qs.stringify(
1888
+ { 'a b': null, 'c d': 'e f' },
1889
+ { strictNullHandling: false, format: 'RFC1738' }
1890
+ ),
1891
+ 'a+b=&c+d=e+f',
1892
+ 'without: as expected'
1893
+ );
1894
+
1895
+ st.equal(
1896
+ qs.stringify(
1897
+ { 'a b': null, 'c d': 'e f' },
1898
+ { strictNullHandling: true, format: 'RFC1738' }
1899
+ ),
1900
+ 'a+b&c+d=e+f',
1901
+ 'with: as expected'
1902
+ );
1903
+
1904
+ st.end();
1905
+ });
1906
+
1907
+ t.test('throws if an invalid charset is specified', function (st) {
1908
+ st['throws'](function () {
1909
+ qs.stringify({ a: 'b' }, { charset: 'foobar' });
1910
+ }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'));
1911
+ st.end();
1912
+ });
1913
+
1914
+ t.test('respects a charset of iso-8859-1', function (st) {
1915
+ st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6');
1916
+ st.end();
1917
+ });
1918
+
1919
+ t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) {
1920
+ st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B');
1921
+ st.end();
1922
+ });
1923
+
1924
+ t.test('encodes a literal `+` as `%2B` in iso-8859-1 mode so it round-trips', function (st) {
1925
+ st.equal(qs.stringify({ a: 'b+c' }, { charset: 'iso-8859-1' }), 'a=b%2Bc', 'a `+` in a value is percent-encoded');
1926
+ st.equal(qs.stringify({ 'a+b': 'c' }, { charset: 'iso-8859-1' }), 'a%2Bb=c', 'a `+` in a key is percent-encoded');
1927
+ st.deepEqual(
1928
+ qs.parse(qs.stringify({ a: 'b+c' }, { charset: 'iso-8859-1' }), { charset: 'iso-8859-1' }),
1929
+ { a: 'b+c' },
1930
+ 'the `+` survives a round-trip instead of decoding to a space'
1931
+ );
1932
+ st.end();
1933
+ });
1934
+
1935
+ t.test('respects an explicit charset of utf-8 (the default)', function (st) {
1936
+ st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6');
1937
+ st.end();
1938
+ });
1939
+
1940
+ t.test('`charsetSentinel` option', function (st) {
1941
+ st.equal(
1942
+ qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }),
1943
+ 'utf8=%E2%9C%93&a=%C3%A6',
1944
+ 'adds the right sentinel when instructed to and the charset is utf-8'
1945
+ );
1946
+
1947
+ st.equal(
1948
+ qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }),
1949
+ 'utf8=%26%2310003%3B&a=%E6',
1950
+ 'adds the right sentinel when instructed to and the charset is iso-8859-1'
1951
+ );
1952
+
1953
+ st.equal(
1954
+ qs.stringify({ a: 1, b: 2 }, { charsetSentinel: true, delimiter: ';' }),
1955
+ 'utf8=%E2%9C%93;a=1;b=2',
1956
+ 'uses the configured delimiter after the sentinel'
1957
+ );
1958
+
1959
+ st.end();
1960
+ });
1961
+
1962
+ t.test('does not mutate the options argument', function (st) {
1963
+ var options = {};
1964
+ qs.stringify({}, options);
1965
+ st.deepEqual(options, {});
1966
+ st.end();
1967
+ });
1968
+
1969
+ t.test('strictNullHandling works with custom filter', function (st) {
1970
+ var filter = function (prefix, value) {
1971
+ return value;
1972
+ };
1973
+
1974
+ var options = { strictNullHandling: true, filter: filter };
1975
+ st.equal(qs.stringify({ key: null }, options), 'key');
1976
+ st.end();
1977
+ });
1978
+
1979
+ t.test('strictNullHandling works with null serializeDate', function (st) {
1980
+ var serializeDate = function () {
1981
+ return null;
1982
+ };
1983
+ var options = { strictNullHandling: true, serializeDate: serializeDate };
1984
+ var date = new Date();
1985
+ st.equal(qs.stringify({ key: date }, options), 'key');
1986
+ st.end();
1987
+ });
1988
+
1989
+ t.test('allows for encoding keys and values differently', function (st) {
1990
+ var encoder = function (str, defaultEncoder, charset, type) {
1991
+ if (type === 'key') {
1992
+ return defaultEncoder(str, defaultEncoder, charset, type).toLowerCase();
1993
+ }
1994
+ if (type === 'value') {
1995
+ return defaultEncoder(str, defaultEncoder, charset, type).toUpperCase();
1996
+ }
1997
+ throw 'this should never happen! type: ' + type;
1998
+ };
1999
+
2000
+ st.deepEqual(qs.stringify({ KeY: 'vAlUe' }, { encoder: encoder }), 'key=VALUE');
2001
+
2002
+ var noopEncoder = function () { return 'x'; };
2003
+ noopEncoder();
2004
+ st['throws'](
2005
+ function () { encoder('x', noopEncoder, 'utf-8', 'unknown'); },
2006
+ 'this should never happen! type: unknown',
2007
+ 'encoder throws for unexpected type'
2008
+ );
2009
+
2010
+ st.end();
2011
+ });
2012
+
2013
+ t.test('objects inside arrays', function (st) {
2014
+ var obj = { a: { b: { c: 'd', e: 'f' } } };
2015
+ var withArray = { a: { b: [{ c: 'd', e: 'f' }] } };
2016
+
2017
+ st.equal(qs.stringify(obj, { encode: false }), 'a[b][c]=d&a[b][e]=f', 'no array, no arrayFormat');
2018
+ st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'brackets' }), 'a[b][c]=d&a[b][e]=f', 'no array, bracket');
2019
+ st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'indices' }), 'a[b][c]=d&a[b][e]=f', 'no array, indices');
2020
+ st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'repeat' }), 'a[b][c]=d&a[b][e]=f', 'no array, repeat');
2021
+ st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'comma' }), 'a[b][c]=d&a[b][e]=f', 'no array, comma');
2022
+
2023
+ st.equal(qs.stringify(withArray, { encode: false }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, no arrayFormat');
2024
+ st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'brackets' }), 'a[b][][c]=d&a[b][][e]=f', 'array, bracket');
2025
+ st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'indices' }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, indices');
2026
+ st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'repeat' }), 'a[b][c]=d&a[b][e]=f', 'array, repeat');
2027
+ st.equal(
2028
+ qs.stringify(withArray, { encode: false, arrayFormat: 'comma' }),
2029
+ '???',
2030
+ 'array, comma',
2031
+ { skip: 'TODO: figure out what this should do' }
2032
+ );
2033
+
2034
+ st.end();
2035
+ });
2036
+
2037
+ t.test('stringifies sparse arrays', function (st) {
2038
+ /* eslint no-sparse-arrays: 0 */
2039
+ st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1]=2&a[4]=1');
2040
+ st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=2&a[]=1');
2041
+ st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a=2&a=1');
2042
+
2043
+ st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1][b][2][c]=1');
2044
+ st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][b][][c]=1');
2045
+ st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a[b][c]=1');
2046
+
2047
+ st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1][2][3][c]=1');
2048
+ st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][][][c]=1');
2049
+ st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a[c]=1');
2050
+
2051
+ st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1][2][3][c][1]=1');
2052
+ st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][][][c][]=1');
2053
+ st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a[c]=1');
2054
+
2055
+ st.end();
2056
+ });
2057
+
2058
+ t.test('encodes a very long string', function (st) {
2059
+ var chars = [];
2060
+ var expected = [];
2061
+ for (var i = 0; i < 5e3; i++) {
2062
+ chars.push(' ' + i);
2063
+
2064
+ expected.push('%20' + i);
2065
+ }
2066
+
2067
+ var obj = {
2068
+ foo: chars.join('')
2069
+ };
2070
+
2071
+ st.equal(
2072
+ qs.stringify(obj, { arrayFormat: 'brackets', charset: 'utf-8' }),
2073
+ 'foo=' + expected.join('')
2074
+ );
2075
+
2076
+ st.end();
2077
+ });
2078
+
2079
+ t.end();
2080
+ });
2081
+
2082
+ test('stringifies empty keys', function (t) {
2083
+ emptyTestCases.forEach(function (testCase) {
2084
+ t.test('stringifies an object with empty string key with ' + testCase.input, function (st) {
2085
+ st.deepEqual(
2086
+ qs.stringify(testCase.withEmptyKeys, { encode: false, arrayFormat: 'indices' }),
2087
+ testCase.stringifyOutput.indices,
2088
+ 'test case: ' + testCase.input + ', indices'
2089
+ );
2090
+ st.deepEqual(
2091
+ qs.stringify(testCase.withEmptyKeys, { encode: false, arrayFormat: 'brackets' }),
2092
+ testCase.stringifyOutput.brackets,
2093
+ 'test case: ' + testCase.input + ', brackets'
2094
+ );
2095
+ st.deepEqual(
2096
+ qs.stringify(testCase.withEmptyKeys, { encode: false, arrayFormat: 'repeat' }),
2097
+ testCase.stringifyOutput.repeat,
2098
+ 'test case: ' + testCase.input + ', repeat'
2099
+ );
2100
+
2101
+ st.end();
2102
+ });
2103
+ });
2104
+
2105
+ t.test('edge case with object/arrays', function (st) {
2106
+ st.deepEqual(qs.stringify({ '': { '': [2, 3] } }, { encode: false }), '[][0]=2&[][1]=3');
2107
+ st.deepEqual(qs.stringify({ '': { '': [2, 3], a: 2 } }, { encode: false }), '[][0]=2&[][1]=3&[a]=2');
2108
+ st.deepEqual(qs.stringify({ '': { '': [2, 3] } }, { encode: false, arrayFormat: 'indices' }), '[][0]=2&[][1]=3');
2109
+ st.deepEqual(qs.stringify({ '': { '': [2, 3], a: 2 } }, { encode: false, arrayFormat: 'indices' }), '[][0]=2&[][1]=3&[a]=2');
2110
+
2111
+ st.end();
2112
+ });
2113
+
2114
+ t.test('stringifies non-string keys', function (st) {
2115
+ var S = Object('abc');
2116
+ S.toString = function () {
2117
+ return 'd';
2118
+ };
2119
+ var actual = qs.stringify({ a: 'b', 'false': {}, 1e+22: 'c', d: 'e' }, {
2120
+ filter: ['a', false, null, 10000000000000000000000, S],
2121
+ allowDots: true,
2122
+ encodeDotInKeys: true
2123
+ });
2124
+
2125
+ st.equal(actual, 'a=b&1e%2B22=c&d=e', 'stringifies correctly');
2126
+
2127
+ st.end();
2128
+ });
2129
+
2130
+ t.test('round-trips keys containing percent-encoded bracket text', function (st) {
2131
+ var cases = [
2132
+ { 'a%5Bb': 'c' },
2133
+ { 'a%5Db': 'c' },
2134
+ { 'a%255Bb': 'c' },
2135
+ { 'a%255Db': 'c' },
2136
+ { a: { 'b%5Bc': 'd' } },
2137
+ { a: { 'b%255Bc': 'd' } },
2138
+ { 'a%5B%255Bb': 'c' }
2139
+ ];
2140
+ for (var i = 0; i < cases.length; i++) {
2141
+ st.deepEqual(
2142
+ qs.parse(qs.stringify(cases[i])),
2143
+ cases[i],
2144
+ 'round-trips ' + JSON.stringify(cases[i])
2145
+ );
2146
+ }
2147
+
2148
+ st.end();
2149
+ });
2150
+
2151
+ t.test('parses input containing percent-encoded bracket text without mangling', function (st) {
2152
+ st.deepEqual(qs.parse('a%25255Bb=c'), { 'a%255Bb': 'c' }, 'a%25255Bb decodes to a%255Bb, not a%5Bb');
2153
+ st.deepEqual(qs.parse('a%25255Db=c'), { 'a%255Db': 'c' }, 'a%25255Db decodes to a%255Db, not a%5Db');
2154
+ st.deepEqual(qs.parse('a%5Bb%25255Bc%5D=d'), { a: { 'b%255Bc': 'd' } }, 'nested %25255B decodes to %255B inside segment, not %5B');
2155
+
2156
+ st.end();
2157
+ });
2158
+
2159
+ t.test('limits nesting depth with the `depth` option', function (st) {
2160
+ st.equal(
2161
+ qs.stringify({ a: { b: { c: 'd' } } }),
2162
+ 'a%5Bb%5D%5Bc%5D=d',
2163
+ 'the default depth is unlimited and does not alter output'
2164
+ );
2165
+ st.equal(
2166
+ qs.stringify({ a: { b: { c: 'd' } } }, { depth: 2 }),
2167
+ 'a%5Bb%5D%5Bc%5D=d',
2168
+ 'does not throw when nesting is within the depth limit'
2169
+ );
2170
+ st.equal(
2171
+ qs.stringify({ a: { b: 'c' } }, { depth: Infinity }),
2172
+ 'a%5Bb%5D=c',
2173
+ 'an explicit Infinity depth is unlimited'
2174
+ );
2175
+ st.equal(
2176
+ qs.stringify({ a: { b: { c: { d: 'e' } } } }, { depth: null }),
2177
+ qs.stringify({ a: { b: { c: { d: 'e' } } } }),
2178
+ 'a non-number depth is ignored and treated as unlimited'
2179
+ );
2180
+ st.equal(
2181
+ qs.stringify({ a: 'b' }, { depth: 0 }),
2182
+ 'a=b',
2183
+ 'a flat object serializes with a depth of 0'
2184
+ );
2185
+
2186
+ var deep = {};
2187
+ var cursor = deep;
2188
+ for (var i = 0; i < 250; i++) {
2189
+ cursor.a = {};
2190
+ cursor = cursor.a;
2191
+ }
2192
+ cursor.b = 'c';
2193
+ st.equal(typeof qs.stringify(deep), 'string', 'the default depth serializes deeply nested objects without throwing');
2194
+
2195
+ st['throws'](
2196
+ function () { qs.stringify({ a: { b: { c: { d: 'e' } } } }, { depth: 2 }); },
2197
+ RangeError,
2198
+ 'throws a RangeError when nesting exceeds the depth limit'
2199
+ );
2200
+ st['throws'](
2201
+ function () { qs.stringify({ a: { b: 'c' } }, { depth: 0 }); },
2202
+ RangeError,
2203
+ 'a depth of 0 throws for any nested object'
2204
+ );
2205
+
2206
+ var caught;
2207
+ try {
2208
+ qs.stringify({ a: { b: { c: { d: 'e' } } } }, { depth: 2 });
2209
+ } catch (e) {
2210
+ caught = e;
2211
+ }
2212
+ st.ok(caught instanceof RangeError, 'the thrown value is a RangeError');
2213
+ st.equal(caught.message, 'Input depth exceeded depth option of 2', 'the RangeError names the exceeded depth');
2214
+
2215
+ st.end();
2216
+ });
2217
+ });