speaker-calibration 2.1.5 → 2.1.7

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 (426) hide show
  1. package/dist/example/speakerUI.js +7 -3
  2. package/dist/main.js +1110 -912
  3. package/dist/package-lock.json +1018 -1018
  4. package/dist/package.json +18 -18
  5. package/package.json +1 -1
  6. package/src/tasks/volume/volume.js +30 -3
  7. package/dist/node_modules/.bin/mime +0 -12
  8. package/dist/node_modules/.bin/mime.cmd +0 -17
  9. package/dist/node_modules/.bin/mime.ps1 +0 -28
  10. package/dist/node_modules/.package-lock.json +0 -584
  11. package/dist/node_modules/accepts/HISTORY.md +0 -243
  12. package/dist/node_modules/accepts/LICENSE +0 -23
  13. package/dist/node_modules/accepts/README.md +0 -140
  14. package/dist/node_modules/accepts/index.js +0 -238
  15. package/dist/node_modules/accepts/package.json +0 -47
  16. package/dist/node_modules/array-flatten/LICENSE +0 -21
  17. package/dist/node_modules/array-flatten/README.md +0 -43
  18. package/dist/node_modules/array-flatten/array-flatten.js +0 -64
  19. package/dist/node_modules/array-flatten/package.json +0 -39
  20. package/dist/node_modules/body-parser/HISTORY.md +0 -657
  21. package/dist/node_modules/body-parser/LICENSE +0 -23
  22. package/dist/node_modules/body-parser/README.md +0 -464
  23. package/dist/node_modules/body-parser/SECURITY.md +0 -25
  24. package/dist/node_modules/body-parser/index.js +0 -156
  25. package/dist/node_modules/body-parser/lib/read.js +0 -205
  26. package/dist/node_modules/body-parser/lib/types/json.js +0 -236
  27. package/dist/node_modules/body-parser/lib/types/raw.js +0 -101
  28. package/dist/node_modules/body-parser/lib/types/text.js +0 -121
  29. package/dist/node_modules/body-parser/lib/types/urlencoded.js +0 -284
  30. package/dist/node_modules/body-parser/package.json +0 -56
  31. package/dist/node_modules/bytes/History.md +0 -97
  32. package/dist/node_modules/bytes/LICENSE +0 -23
  33. package/dist/node_modules/bytes/Readme.md +0 -152
  34. package/dist/node_modules/bytes/index.js +0 -170
  35. package/dist/node_modules/bytes/package.json +0 -42
  36. package/dist/node_modules/call-bind/.eslintignore +0 -1
  37. package/dist/node_modules/call-bind/.eslintrc +0 -17
  38. package/dist/node_modules/call-bind/.github/FUNDING.yml +0 -12
  39. package/dist/node_modules/call-bind/.nycrc +0 -13
  40. package/dist/node_modules/call-bind/CHANGELOG.md +0 -42
  41. package/dist/node_modules/call-bind/LICENSE +0 -21
  42. package/dist/node_modules/call-bind/README.md +0 -2
  43. package/dist/node_modules/call-bind/callBound.js +0 -15
  44. package/dist/node_modules/call-bind/index.js +0 -47
  45. package/dist/node_modules/call-bind/package.json +0 -80
  46. package/dist/node_modules/call-bind/test/callBound.js +0 -55
  47. package/dist/node_modules/call-bind/test/index.js +0 -66
  48. package/dist/node_modules/content-disposition/HISTORY.md +0 -60
  49. package/dist/node_modules/content-disposition/LICENSE +0 -22
  50. package/dist/node_modules/content-disposition/README.md +0 -142
  51. package/dist/node_modules/content-disposition/index.js +0 -458
  52. package/dist/node_modules/content-disposition/package.json +0 -44
  53. package/dist/node_modules/content-type/HISTORY.md +0 -24
  54. package/dist/node_modules/content-type/LICENSE +0 -22
  55. package/dist/node_modules/content-type/README.md +0 -92
  56. package/dist/node_modules/content-type/index.js +0 -222
  57. package/dist/node_modules/content-type/package.json +0 -40
  58. package/dist/node_modules/cookie/HISTORY.md +0 -142
  59. package/dist/node_modules/cookie/LICENSE +0 -24
  60. package/dist/node_modules/cookie/README.md +0 -302
  61. package/dist/node_modules/cookie/SECURITY.md +0 -25
  62. package/dist/node_modules/cookie/index.js +0 -270
  63. package/dist/node_modules/cookie/package.json +0 -44
  64. package/dist/node_modules/cookie-signature/History.md +0 -38
  65. package/dist/node_modules/cookie-signature/Readme.md +0 -42
  66. package/dist/node_modules/cookie-signature/index.js +0 -51
  67. package/dist/node_modules/cookie-signature/package.json +0 -18
  68. package/dist/node_modules/debug/.coveralls.yml +0 -1
  69. package/dist/node_modules/debug/.eslintrc +0 -11
  70. package/dist/node_modules/debug/.travis.yml +0 -14
  71. package/dist/node_modules/debug/CHANGELOG.md +0 -362
  72. package/dist/node_modules/debug/LICENSE +0 -19
  73. package/dist/node_modules/debug/Makefile +0 -50
  74. package/dist/node_modules/debug/README.md +0 -312
  75. package/dist/node_modules/debug/component.json +0 -19
  76. package/dist/node_modules/debug/karma.conf.js +0 -70
  77. package/dist/node_modules/debug/node.js +0 -1
  78. package/dist/node_modules/debug/package.json +0 -49
  79. package/dist/node_modules/debug/src/browser.js +0 -185
  80. package/dist/node_modules/debug/src/debug.js +0 -202
  81. package/dist/node_modules/debug/src/index.js +0 -10
  82. package/dist/node_modules/debug/src/inspector-log.js +0 -15
  83. package/dist/node_modules/debug/src/node.js +0 -248
  84. package/dist/node_modules/depd/History.md +0 -103
  85. package/dist/node_modules/depd/LICENSE +0 -22
  86. package/dist/node_modules/depd/Readme.md +0 -280
  87. package/dist/node_modules/depd/index.js +0 -538
  88. package/dist/node_modules/depd/lib/browser/index.js +0 -77
  89. package/dist/node_modules/depd/package.json +0 -45
  90. package/dist/node_modules/destroy/LICENSE +0 -23
  91. package/dist/node_modules/destroy/README.md +0 -63
  92. package/dist/node_modules/destroy/index.js +0 -209
  93. package/dist/node_modules/destroy/package.json +0 -48
  94. package/dist/node_modules/ee-first/LICENSE +0 -22
  95. package/dist/node_modules/ee-first/README.md +0 -80
  96. package/dist/node_modules/ee-first/index.js +0 -95
  97. package/dist/node_modules/ee-first/package.json +0 -29
  98. package/dist/node_modules/encodeurl/HISTORY.md +0 -14
  99. package/dist/node_modules/encodeurl/LICENSE +0 -22
  100. package/dist/node_modules/encodeurl/README.md +0 -128
  101. package/dist/node_modules/encodeurl/index.js +0 -60
  102. package/dist/node_modules/encodeurl/package.json +0 -40
  103. package/dist/node_modules/escape-html/LICENSE +0 -24
  104. package/dist/node_modules/escape-html/Readme.md +0 -43
  105. package/dist/node_modules/escape-html/index.js +0 -78
  106. package/dist/node_modules/escape-html/package.json +0 -24
  107. package/dist/node_modules/etag/HISTORY.md +0 -83
  108. package/dist/node_modules/etag/LICENSE +0 -22
  109. package/dist/node_modules/etag/README.md +0 -159
  110. package/dist/node_modules/etag/index.js +0 -131
  111. package/dist/node_modules/etag/package.json +0 -47
  112. package/dist/node_modules/express/History.md +0 -3588
  113. package/dist/node_modules/express/LICENSE +0 -24
  114. package/dist/node_modules/express/Readme.md +0 -166
  115. package/dist/node_modules/express/index.js +0 -11
  116. package/dist/node_modules/express/lib/application.js +0 -661
  117. package/dist/node_modules/express/lib/express.js +0 -116
  118. package/dist/node_modules/express/lib/middleware/init.js +0 -43
  119. package/dist/node_modules/express/lib/middleware/query.js +0 -47
  120. package/dist/node_modules/express/lib/request.js +0 -525
  121. package/dist/node_modules/express/lib/response.js +0 -1169
  122. package/dist/node_modules/express/lib/router/index.js +0 -673
  123. package/dist/node_modules/express/lib/router/layer.js +0 -181
  124. package/dist/node_modules/express/lib/router/route.js +0 -225
  125. package/dist/node_modules/express/lib/utils.js +0 -304
  126. package/dist/node_modules/express/lib/view.js +0 -182
  127. package/dist/node_modules/express/package.json +0 -99
  128. package/dist/node_modules/finalhandler/HISTORY.md +0 -195
  129. package/dist/node_modules/finalhandler/LICENSE +0 -22
  130. package/dist/node_modules/finalhandler/README.md +0 -147
  131. package/dist/node_modules/finalhandler/SECURITY.md +0 -25
  132. package/dist/node_modules/finalhandler/index.js +0 -336
  133. package/dist/node_modules/finalhandler/package.json +0 -46
  134. package/dist/node_modules/forwarded/HISTORY.md +0 -21
  135. package/dist/node_modules/forwarded/LICENSE +0 -22
  136. package/dist/node_modules/forwarded/README.md +0 -57
  137. package/dist/node_modules/forwarded/index.js +0 -90
  138. package/dist/node_modules/forwarded/package.json +0 -45
  139. package/dist/node_modules/fresh/HISTORY.md +0 -70
  140. package/dist/node_modules/fresh/LICENSE +0 -23
  141. package/dist/node_modules/fresh/README.md +0 -119
  142. package/dist/node_modules/fresh/index.js +0 -137
  143. package/dist/node_modules/fresh/package.json +0 -46
  144. package/dist/node_modules/function-bind/.editorconfig +0 -20
  145. package/dist/node_modules/function-bind/.eslintrc +0 -15
  146. package/dist/node_modules/function-bind/.jscs.json +0 -176
  147. package/dist/node_modules/function-bind/.travis.yml +0 -168
  148. package/dist/node_modules/function-bind/LICENSE +0 -20
  149. package/dist/node_modules/function-bind/README.md +0 -48
  150. package/dist/node_modules/function-bind/implementation.js +0 -52
  151. package/dist/node_modules/function-bind/index.js +0 -5
  152. package/dist/node_modules/function-bind/package.json +0 -63
  153. package/dist/node_modules/function-bind/test/.eslintrc +0 -9
  154. package/dist/node_modules/function-bind/test/index.js +0 -252
  155. package/dist/node_modules/get-intrinsic/.eslintrc +0 -37
  156. package/dist/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  157. package/dist/node_modules/get-intrinsic/.nycrc +0 -9
  158. package/dist/node_modules/get-intrinsic/CHANGELOG.md +0 -98
  159. package/dist/node_modules/get-intrinsic/LICENSE +0 -21
  160. package/dist/node_modules/get-intrinsic/README.md +0 -71
  161. package/dist/node_modules/get-intrinsic/index.js +0 -334
  162. package/dist/node_modules/get-intrinsic/package.json +0 -91
  163. package/dist/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  164. package/dist/node_modules/has/LICENSE-MIT +0 -22
  165. package/dist/node_modules/has/README.md +0 -18
  166. package/dist/node_modules/has/package.json +0 -48
  167. package/dist/node_modules/has/src/index.js +0 -5
  168. package/dist/node_modules/has/test/index.js +0 -10
  169. package/dist/node_modules/has-symbols/.eslintrc +0 -11
  170. package/dist/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  171. package/dist/node_modules/has-symbols/.nycrc +0 -9
  172. package/dist/node_modules/has-symbols/CHANGELOG.md +0 -75
  173. package/dist/node_modules/has-symbols/LICENSE +0 -21
  174. package/dist/node_modules/has-symbols/README.md +0 -46
  175. package/dist/node_modules/has-symbols/index.js +0 -13
  176. package/dist/node_modules/has-symbols/package.json +0 -101
  177. package/dist/node_modules/has-symbols/shams.js +0 -42
  178. package/dist/node_modules/has-symbols/test/index.js +0 -22
  179. package/dist/node_modules/has-symbols/test/shams/core-js.js +0 -28
  180. package/dist/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -28
  181. package/dist/node_modules/has-symbols/test/tests.js +0 -56
  182. package/dist/node_modules/http-errors/HISTORY.md +0 -180
  183. package/dist/node_modules/http-errors/LICENSE +0 -23
  184. package/dist/node_modules/http-errors/README.md +0 -169
  185. package/dist/node_modules/http-errors/index.js +0 -289
  186. package/dist/node_modules/http-errors/package.json +0 -50
  187. package/dist/node_modules/iconv-lite/Changelog.md +0 -162
  188. package/dist/node_modules/iconv-lite/LICENSE +0 -21
  189. package/dist/node_modules/iconv-lite/README.md +0 -156
  190. package/dist/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -555
  191. package/dist/node_modules/iconv-lite/encodings/dbcs-data.js +0 -176
  192. package/dist/node_modules/iconv-lite/encodings/index.js +0 -22
  193. package/dist/node_modules/iconv-lite/encodings/internal.js +0 -188
  194. package/dist/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -72
  195. package/dist/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  196. package/dist/node_modules/iconv-lite/encodings/sbcs-data.js +0 -174
  197. package/dist/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  198. package/dist/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  199. package/dist/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  200. package/dist/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  201. package/dist/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  202. package/dist/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  203. package/dist/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -55
  204. package/dist/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  205. package/dist/node_modules/iconv-lite/encodings/utf16.js +0 -177
  206. package/dist/node_modules/iconv-lite/encodings/utf7.js +0 -290
  207. package/dist/node_modules/iconv-lite/lib/bom-handling.js +0 -52
  208. package/dist/node_modules/iconv-lite/lib/extend-node.js +0 -217
  209. package/dist/node_modules/iconv-lite/lib/index.d.ts +0 -24
  210. package/dist/node_modules/iconv-lite/lib/index.js +0 -153
  211. package/dist/node_modules/iconv-lite/lib/streams.js +0 -121
  212. package/dist/node_modules/iconv-lite/package.json +0 -46
  213. package/dist/node_modules/inherits/LICENSE +0 -16
  214. package/dist/node_modules/inherits/README.md +0 -42
  215. package/dist/node_modules/inherits/inherits.js +0 -9
  216. package/dist/node_modules/inherits/inherits_browser.js +0 -27
  217. package/dist/node_modules/inherits/package.json +0 -29
  218. package/dist/node_modules/ipaddr.js/LICENSE +0 -19
  219. package/dist/node_modules/ipaddr.js/README.md +0 -233
  220. package/dist/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  221. package/dist/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  222. package/dist/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  223. package/dist/node_modules/ipaddr.js/package.json +0 -35
  224. package/dist/node_modules/media-typer/HISTORY.md +0 -22
  225. package/dist/node_modules/media-typer/LICENSE +0 -22
  226. package/dist/node_modules/media-typer/README.md +0 -81
  227. package/dist/node_modules/media-typer/index.js +0 -270
  228. package/dist/node_modules/media-typer/package.json +0 -26
  229. package/dist/node_modules/merge-descriptors/HISTORY.md +0 -21
  230. package/dist/node_modules/merge-descriptors/LICENSE +0 -23
  231. package/dist/node_modules/merge-descriptors/README.md +0 -48
  232. package/dist/node_modules/merge-descriptors/index.js +0 -60
  233. package/dist/node_modules/merge-descriptors/package.json +0 -32
  234. package/dist/node_modules/methods/HISTORY.md +0 -29
  235. package/dist/node_modules/methods/LICENSE +0 -24
  236. package/dist/node_modules/methods/README.md +0 -51
  237. package/dist/node_modules/methods/index.js +0 -69
  238. package/dist/node_modules/methods/package.json +0 -36
  239. package/dist/node_modules/mime/CHANGELOG.md +0 -164
  240. package/dist/node_modules/mime/LICENSE +0 -21
  241. package/dist/node_modules/mime/README.md +0 -90
  242. package/dist/node_modules/mime/cli.js +0 -8
  243. package/dist/node_modules/mime/mime.js +0 -108
  244. package/dist/node_modules/mime/package.json +0 -44
  245. package/dist/node_modules/mime/src/build.js +0 -53
  246. package/dist/node_modules/mime/src/test.js +0 -60
  247. package/dist/node_modules/mime/types.json +0 -1
  248. package/dist/node_modules/mime-db/HISTORY.md +0 -507
  249. package/dist/node_modules/mime-db/LICENSE +0 -23
  250. package/dist/node_modules/mime-db/README.md +0 -100
  251. package/dist/node_modules/mime-db/db.json +0 -8519
  252. package/dist/node_modules/mime-db/index.js +0 -12
  253. package/dist/node_modules/mime-db/package.json +0 -60
  254. package/dist/node_modules/mime-types/HISTORY.md +0 -397
  255. package/dist/node_modules/mime-types/LICENSE +0 -23
  256. package/dist/node_modules/mime-types/README.md +0 -113
  257. package/dist/node_modules/mime-types/index.js +0 -188
  258. package/dist/node_modules/mime-types/package.json +0 -44
  259. package/dist/node_modules/ms/index.js +0 -152
  260. package/dist/node_modules/ms/license.md +0 -21
  261. package/dist/node_modules/ms/package.json +0 -37
  262. package/dist/node_modules/ms/readme.md +0 -51
  263. package/dist/node_modules/negotiator/HISTORY.md +0 -108
  264. package/dist/node_modules/negotiator/LICENSE +0 -24
  265. package/dist/node_modules/negotiator/README.md +0 -203
  266. package/dist/node_modules/negotiator/index.js +0 -82
  267. package/dist/node_modules/negotiator/lib/charset.js +0 -169
  268. package/dist/node_modules/negotiator/lib/encoding.js +0 -184
  269. package/dist/node_modules/negotiator/lib/language.js +0 -179
  270. package/dist/node_modules/negotiator/lib/mediaType.js +0 -294
  271. package/dist/node_modules/negotiator/package.json +0 -42
  272. package/dist/node_modules/object-inspect/.eslintrc +0 -53
  273. package/dist/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  274. package/dist/node_modules/object-inspect/.nycrc +0 -13
  275. package/dist/node_modules/object-inspect/CHANGELOG.md +0 -360
  276. package/dist/node_modules/object-inspect/LICENSE +0 -21
  277. package/dist/node_modules/object-inspect/example/all.js +0 -23
  278. package/dist/node_modules/object-inspect/example/circular.js +0 -6
  279. package/dist/node_modules/object-inspect/example/fn.js +0 -5
  280. package/dist/node_modules/object-inspect/example/inspect.js +0 -10
  281. package/dist/node_modules/object-inspect/index.js +0 -512
  282. package/dist/node_modules/object-inspect/package-support.json +0 -20
  283. package/dist/node_modules/object-inspect/package.json +0 -94
  284. package/dist/node_modules/object-inspect/readme.markdown +0 -86
  285. package/dist/node_modules/object-inspect/test/bigint.js +0 -58
  286. package/dist/node_modules/object-inspect/test/browser/dom.js +0 -15
  287. package/dist/node_modules/object-inspect/test/circular.js +0 -16
  288. package/dist/node_modules/object-inspect/test/deep.js +0 -12
  289. package/dist/node_modules/object-inspect/test/element.js +0 -53
  290. package/dist/node_modules/object-inspect/test/err.js +0 -48
  291. package/dist/node_modules/object-inspect/test/fakes.js +0 -29
  292. package/dist/node_modules/object-inspect/test/fn.js +0 -76
  293. package/dist/node_modules/object-inspect/test/has.js +0 -15
  294. package/dist/node_modules/object-inspect/test/holes.js +0 -15
  295. package/dist/node_modules/object-inspect/test/indent-option.js +0 -271
  296. package/dist/node_modules/object-inspect/test/inspect.js +0 -139
  297. package/dist/node_modules/object-inspect/test/lowbyte.js +0 -12
  298. package/dist/node_modules/object-inspect/test/number.js +0 -58
  299. package/dist/node_modules/object-inspect/test/quoteStyle.js +0 -17
  300. package/dist/node_modules/object-inspect/test/toStringTag.js +0 -40
  301. package/dist/node_modules/object-inspect/test/undef.js +0 -12
  302. package/dist/node_modules/object-inspect/test/values.js +0 -211
  303. package/dist/node_modules/object-inspect/test-core-js.js +0 -26
  304. package/dist/node_modules/object-inspect/util.inspect.js +0 -1
  305. package/dist/node_modules/on-finished/HISTORY.md +0 -98
  306. package/dist/node_modules/on-finished/LICENSE +0 -23
  307. package/dist/node_modules/on-finished/README.md +0 -162
  308. package/dist/node_modules/on-finished/index.js +0 -234
  309. package/dist/node_modules/on-finished/package.json +0 -39
  310. package/dist/node_modules/parseurl/HISTORY.md +0 -58
  311. package/dist/node_modules/parseurl/LICENSE +0 -24
  312. package/dist/node_modules/parseurl/README.md +0 -133
  313. package/dist/node_modules/parseurl/index.js +0 -158
  314. package/dist/node_modules/parseurl/package.json +0 -40
  315. package/dist/node_modules/path-to-regexp/History.md +0 -36
  316. package/dist/node_modules/path-to-regexp/LICENSE +0 -21
  317. package/dist/node_modules/path-to-regexp/Readme.md +0 -35
  318. package/dist/node_modules/path-to-regexp/index.js +0 -129
  319. package/dist/node_modules/path-to-regexp/package.json +0 -30
  320. package/dist/node_modules/proxy-addr/HISTORY.md +0 -161
  321. package/dist/node_modules/proxy-addr/LICENSE +0 -22
  322. package/dist/node_modules/proxy-addr/README.md +0 -139
  323. package/dist/node_modules/proxy-addr/index.js +0 -327
  324. package/dist/node_modules/proxy-addr/package.json +0 -47
  325. package/dist/node_modules/qs/.editorconfig +0 -43
  326. package/dist/node_modules/qs/.eslintrc +0 -38
  327. package/dist/node_modules/qs/.github/FUNDING.yml +0 -12
  328. package/dist/node_modules/qs/.nycrc +0 -13
  329. package/dist/node_modules/qs/CHANGELOG.md +0 -546
  330. package/dist/node_modules/qs/LICENSE.md +0 -29
  331. package/dist/node_modules/qs/README.md +0 -625
  332. package/dist/node_modules/qs/dist/qs.js +0 -2054
  333. package/dist/node_modules/qs/lib/formats.js +0 -23
  334. package/dist/node_modules/qs/lib/index.js +0 -11
  335. package/dist/node_modules/qs/lib/parse.js +0 -263
  336. package/dist/node_modules/qs/lib/stringify.js +0 -326
  337. package/dist/node_modules/qs/lib/utils.js +0 -252
  338. package/dist/node_modules/qs/package.json +0 -77
  339. package/dist/node_modules/qs/test/parse.js +0 -855
  340. package/dist/node_modules/qs/test/stringify.js +0 -909
  341. package/dist/node_modules/qs/test/utils.js +0 -136
  342. package/dist/node_modules/range-parser/HISTORY.md +0 -56
  343. package/dist/node_modules/range-parser/LICENSE +0 -23
  344. package/dist/node_modules/range-parser/README.md +0 -84
  345. package/dist/node_modules/range-parser/index.js +0 -162
  346. package/dist/node_modules/range-parser/package.json +0 -44
  347. package/dist/node_modules/raw-body/HISTORY.md +0 -303
  348. package/dist/node_modules/raw-body/LICENSE +0 -22
  349. package/dist/node_modules/raw-body/README.md +0 -223
  350. package/dist/node_modules/raw-body/SECURITY.md +0 -24
  351. package/dist/node_modules/raw-body/index.d.ts +0 -87
  352. package/dist/node_modules/raw-body/index.js +0 -329
  353. package/dist/node_modules/raw-body/package.json +0 -49
  354. package/dist/node_modules/safe-buffer/LICENSE +0 -21
  355. package/dist/node_modules/safe-buffer/README.md +0 -584
  356. package/dist/node_modules/safe-buffer/index.d.ts +0 -187
  357. package/dist/node_modules/safe-buffer/index.js +0 -65
  358. package/dist/node_modules/safe-buffer/package.json +0 -51
  359. package/dist/node_modules/safer-buffer/LICENSE +0 -21
  360. package/dist/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  361. package/dist/node_modules/safer-buffer/Readme.md +0 -156
  362. package/dist/node_modules/safer-buffer/dangerous.js +0 -58
  363. package/dist/node_modules/safer-buffer/package.json +0 -34
  364. package/dist/node_modules/safer-buffer/safer.js +0 -77
  365. package/dist/node_modules/safer-buffer/tests.js +0 -406
  366. package/dist/node_modules/send/HISTORY.md +0 -521
  367. package/dist/node_modules/send/LICENSE +0 -23
  368. package/dist/node_modules/send/README.md +0 -327
  369. package/dist/node_modules/send/SECURITY.md +0 -24
  370. package/dist/node_modules/send/index.js +0 -1143
  371. package/dist/node_modules/send/node_modules/ms/index.js +0 -162
  372. package/dist/node_modules/send/node_modules/ms/license.md +0 -21
  373. package/dist/node_modules/send/node_modules/ms/package.json +0 -38
  374. package/dist/node_modules/send/node_modules/ms/readme.md +0 -59
  375. package/dist/node_modules/send/package.json +0 -62
  376. package/dist/node_modules/serve-static/HISTORY.md +0 -471
  377. package/dist/node_modules/serve-static/LICENSE +0 -25
  378. package/dist/node_modules/serve-static/README.md +0 -257
  379. package/dist/node_modules/serve-static/index.js +0 -210
  380. package/dist/node_modules/serve-static/package.json +0 -42
  381. package/dist/node_modules/setprototypeof/LICENSE +0 -13
  382. package/dist/node_modules/setprototypeof/README.md +0 -31
  383. package/dist/node_modules/setprototypeof/index.d.ts +0 -2
  384. package/dist/node_modules/setprototypeof/index.js +0 -17
  385. package/dist/node_modules/setprototypeof/package.json +0 -38
  386. package/dist/node_modules/setprototypeof/test/index.js +0 -24
  387. package/dist/node_modules/side-channel/.eslintignore +0 -1
  388. package/dist/node_modules/side-channel/.eslintrc +0 -11
  389. package/dist/node_modules/side-channel/.github/FUNDING.yml +0 -12
  390. package/dist/node_modules/side-channel/.nycrc +0 -13
  391. package/dist/node_modules/side-channel/CHANGELOG.md +0 -65
  392. package/dist/node_modules/side-channel/LICENSE +0 -21
  393. package/dist/node_modules/side-channel/README.md +0 -2
  394. package/dist/node_modules/side-channel/index.js +0 -124
  395. package/dist/node_modules/side-channel/package.json +0 -67
  396. package/dist/node_modules/side-channel/test/index.js +0 -78
  397. package/dist/node_modules/statuses/HISTORY.md +0 -82
  398. package/dist/node_modules/statuses/LICENSE +0 -23
  399. package/dist/node_modules/statuses/README.md +0 -136
  400. package/dist/node_modules/statuses/codes.json +0 -65
  401. package/dist/node_modules/statuses/index.js +0 -146
  402. package/dist/node_modules/statuses/package.json +0 -49
  403. package/dist/node_modules/toidentifier/HISTORY.md +0 -9
  404. package/dist/node_modules/toidentifier/LICENSE +0 -21
  405. package/dist/node_modules/toidentifier/README.md +0 -61
  406. package/dist/node_modules/toidentifier/index.js +0 -32
  407. package/dist/node_modules/toidentifier/package.json +0 -38
  408. package/dist/node_modules/type-is/HISTORY.md +0 -259
  409. package/dist/node_modules/type-is/LICENSE +0 -23
  410. package/dist/node_modules/type-is/README.md +0 -170
  411. package/dist/node_modules/type-is/index.js +0 -266
  412. package/dist/node_modules/type-is/package.json +0 -45
  413. package/dist/node_modules/unpipe/HISTORY.md +0 -4
  414. package/dist/node_modules/unpipe/LICENSE +0 -22
  415. package/dist/node_modules/unpipe/README.md +0 -43
  416. package/dist/node_modules/unpipe/index.js +0 -69
  417. package/dist/node_modules/unpipe/package.json +0 -27
  418. package/dist/node_modules/utils-merge/LICENSE +0 -20
  419. package/dist/node_modules/utils-merge/README.md +0 -34
  420. package/dist/node_modules/utils-merge/index.js +0 -23
  421. package/dist/node_modules/utils-merge/package.json +0 -40
  422. package/dist/node_modules/vary/HISTORY.md +0 -39
  423. package/dist/node_modules/vary/LICENSE +0 -22
  424. package/dist/node_modules/vary/README.md +0 -101
  425. package/dist/node_modules/vary/index.js +0 -149
  426. package/dist/node_modules/vary/package.json +0 -43
@@ -1,855 +0,0 @@
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
-
9
- test('parse()', function (t) {
10
- t.test('parses a simple string', function (st) {
11
- st.deepEqual(qs.parse('0=foo'), { 0: 'foo' });
12
- st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' });
13
- st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } });
14
- st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } });
15
- st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } });
16
- st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null });
17
- st.deepEqual(qs.parse('foo'), { foo: '' });
18
- st.deepEqual(qs.parse('foo='), { foo: '' });
19
- st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' });
20
- st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' });
21
- st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' });
22
- st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' });
23
- st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' });
24
- st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null });
25
- st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' });
26
- st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), {
27
- cht: 'p3',
28
- chd: 't:60,40',
29
- chs: '250x100',
30
- chl: 'Hello|World'
31
- });
32
- st.end();
33
- });
34
-
35
- t.test('arrayFormat: brackets allows only explicit arrays', function (st) {
36
- st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] });
37
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] });
38
- st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'brackets' }), { a: 'b,c' });
39
- st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] });
40
- st.end();
41
- });
42
-
43
- t.test('arrayFormat: indices allows only indexed arrays', function (st) {
44
- st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] });
45
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] });
46
- st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'indices' }), { a: 'b,c' });
47
- st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] });
48
- st.end();
49
- });
50
-
51
- t.test('arrayFormat: comma allows only comma-separated arrays', function (st) {
52
- st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] });
53
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] });
54
- st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'comma' }), { a: 'b,c' });
55
- st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] });
56
- st.end();
57
- });
58
-
59
- t.test('arrayFormat: repeat allows only repeated values', function (st) {
60
- st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] });
61
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] });
62
- st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'repeat' }), { a: 'b,c' });
63
- st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] });
64
- st.end();
65
- });
66
-
67
- t.test('allows enabling dot notation', function (st) {
68
- st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' });
69
- st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } });
70
- st.end();
71
- });
72
-
73
- t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string');
74
- t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string');
75
- t.deepEqual(
76
- qs.parse('a[b][c][d][e][f][g][h]=i'),
77
- { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } },
78
- 'defaults to a depth of 5'
79
- );
80
-
81
- t.test('only parses one level when depth = 1', function (st) {
82
- st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } });
83
- st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } });
84
- st.end();
85
- });
86
-
87
- t.test('uses original key when depth = 0', function (st) {
88
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: 0 }), { 'a[0]': 'b', 'a[1]': 'c' });
89
- st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: 0 }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' });
90
- st.end();
91
- });
92
-
93
- t.test('uses original key when depth = false', function (st) {
94
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: false }), { 'a[0]': 'b', 'a[1]': 'c' });
95
- st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: false }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' });
96
- st.end();
97
- });
98
-
99
- t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array');
100
-
101
- t.test('parses an explicit array', function (st) {
102
- st.deepEqual(qs.parse('a[]=b'), { a: ['b'] });
103
- st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] });
104
- st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] });
105
- st.end();
106
- });
107
-
108
- t.test('parses a mix of simple and explicit arrays', function (st) {
109
- st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] });
110
- st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] });
111
- st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] });
112
- st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] });
113
-
114
- st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] });
115
- st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] });
116
- st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] });
117
-
118
- st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] });
119
- st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] });
120
- st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] });
121
-
122
- st.end();
123
- });
124
-
125
- t.test('parses a nested array', function (st) {
126
- st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } });
127
- st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } });
128
- st.end();
129
- });
130
-
131
- t.test('allows to specify array indices', function (st) {
132
- st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] });
133
- st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] });
134
- st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] });
135
- st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } });
136
- st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] });
137
- st.end();
138
- });
139
-
140
- t.test('limits specific array indices to arrayLimit', function (st) {
141
- st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] });
142
- st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } });
143
-
144
- st.deepEqual(qs.parse('a[20]=a'), { a: ['a'] });
145
- st.deepEqual(qs.parse('a[21]=a'), { a: { 21: 'a' } });
146
- st.end();
147
- });
148
-
149
- t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number');
150
-
151
- t.test('supports encoded = signs', function (st) {
152
- st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' });
153
- st.end();
154
- });
155
-
156
- t.test('is ok with url encoded strings', function (st) {
157
- st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } });
158
- st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } });
159
- st.end();
160
- });
161
-
162
- t.test('allows brackets in the value', function (st) {
163
- st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' });
164
- st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' });
165
- st.end();
166
- });
167
-
168
- t.test('allows empty values', function (st) {
169
- st.deepEqual(qs.parse(''), {});
170
- st.deepEqual(qs.parse(null), {});
171
- st.deepEqual(qs.parse(undefined), {});
172
- st.end();
173
- });
174
-
175
- t.test('transforms arrays to objects', function (st) {
176
- st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } });
177
- st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } });
178
- st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } });
179
- st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } });
180
- st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } });
181
- st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] });
182
-
183
- st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } });
184
- st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } });
185
- st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } });
186
- st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } });
187
- st.end();
188
- });
189
-
190
- t.test('transforms arrays to objects (dot notation)', function (st) {
191
- st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } });
192
- st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } });
193
- st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } });
194
- st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] });
195
- st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] });
196
- st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } });
197
- st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } });
198
- st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } });
199
- st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } });
200
- st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] });
201
- st.end();
202
- });
203
-
204
- t.test('correctly prunes undefined values when converting an array to an object', function (st) {
205
- st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } });
206
- st.end();
207
- });
208
-
209
- t.test('supports malformed uri characters', function (st) {
210
- st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null });
211
- st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' });
212
- st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' });
213
- st.end();
214
- });
215
-
216
- t.test('doesn\'t produce empty keys', function (st) {
217
- st.deepEqual(qs.parse('_r=1&'), { _r: '1' });
218
- st.end();
219
- });
220
-
221
- t.test('cannot access Object prototype', function (st) {
222
- qs.parse('constructor[prototype][bad]=bad');
223
- qs.parse('bad[constructor][prototype][bad]=bad');
224
- st.equal(typeof Object.prototype.bad, 'undefined');
225
- st.end();
226
- });
227
-
228
- t.test('parses arrays of objects', function (st) {
229
- st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] });
230
- st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] });
231
- st.end();
232
- });
233
-
234
- t.test('allows for empty strings in arrays', function (st) {
235
- st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] });
236
-
237
- st.deepEqual(
238
- qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }),
239
- { a: ['b', null, 'c', ''] },
240
- 'with arrayLimit 20 + array indices: null then empty string works'
241
- );
242
- st.deepEqual(
243
- qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }),
244
- { a: ['b', null, 'c', ''] },
245
- 'with arrayLimit 0 + array brackets: null then empty string works'
246
- );
247
-
248
- st.deepEqual(
249
- qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }),
250
- { a: ['b', '', 'c', null] },
251
- 'with arrayLimit 20 + array indices: empty string then null works'
252
- );
253
- st.deepEqual(
254
- qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }),
255
- { a: ['b', '', 'c', null] },
256
- 'with arrayLimit 0 + array brackets: empty string then null works'
257
- );
258
-
259
- st.deepEqual(
260
- qs.parse('a[]=&a[]=b&a[]=c'),
261
- { a: ['', 'b', 'c'] },
262
- 'array brackets: empty strings work'
263
- );
264
- st.end();
265
- });
266
-
267
- t.test('compacts sparse arrays', function (st) {
268
- st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] });
269
- st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] });
270
- st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] });
271
- st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] });
272
- st.end();
273
- });
274
-
275
- t.test('parses sparse arrays', function (st) {
276
- /* eslint no-sparse-arrays: 0 */
277
- st.deepEqual(qs.parse('a[4]=1&a[1]=2', { allowSparse: true }), { a: [, '2', , , '1'] });
278
- st.deepEqual(qs.parse('a[1][b][2][c]=1', { allowSparse: true }), { a: [, { b: [, , { c: '1' }] }] });
279
- st.deepEqual(qs.parse('a[1][2][3][c]=1', { allowSparse: true }), { a: [, [, , [, , , { c: '1' }]]] });
280
- st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { allowSparse: true }), { a: [, [, , [, , , { c: [, '1'] }]]] });
281
- st.end();
282
- });
283
-
284
- t.test('parses semi-parsed strings', function (st) {
285
- st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } });
286
- st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } });
287
- st.end();
288
- });
289
-
290
- t.test('parses buffers correctly', function (st) {
291
- var b = SaferBuffer.from('test');
292
- st.deepEqual(qs.parse({ a: b }), { a: b });
293
- st.end();
294
- });
295
-
296
- t.test('parses jquery-param strings', function (st) {
297
- // readable = 'filter[0][]=int1&filter[0][]==&filter[0][]=77&filter[]=and&filter[2][]=int2&filter[2][]==&filter[2][]=8'
298
- var encoded = 'filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8';
299
- var expected = { filter: [['int1', '=', '77'], 'and', ['int2', '=', '8']] };
300
- st.deepEqual(qs.parse(encoded), expected);
301
- st.end();
302
- });
303
-
304
- t.test('continues parsing when no parent is found', function (st) {
305
- st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' });
306
- st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' });
307
- st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' });
308
- st.end();
309
- });
310
-
311
- t.test('does not error when parsing a very long array', function (st) {
312
- var str = 'a[]=a';
313
- while (Buffer.byteLength(str) < 128 * 1024) {
314
- str = str + '&' + str;
315
- }
316
-
317
- st.doesNotThrow(function () {
318
- qs.parse(str);
319
- });
320
-
321
- st.end();
322
- });
323
-
324
- t.test('should not throw when a native prototype has an enumerable property', function (st) {
325
- Object.prototype.crash = '';
326
- Array.prototype.crash = '';
327
- st.doesNotThrow(qs.parse.bind(null, 'a=b'));
328
- st.deepEqual(qs.parse('a=b'), { a: 'b' });
329
- st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c'));
330
- st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] });
331
- delete Object.prototype.crash;
332
- delete Array.prototype.crash;
333
- st.end();
334
- });
335
-
336
- t.test('parses a string with an alternative string delimiter', function (st) {
337
- st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' });
338
- st.end();
339
- });
340
-
341
- t.test('parses a string with an alternative RegExp delimiter', function (st) {
342
- st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' });
343
- st.end();
344
- });
345
-
346
- t.test('does not use non-splittable objects as delimiters', function (st) {
347
- st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' });
348
- st.end();
349
- });
350
-
351
- t.test('allows overriding parameter limit', function (st) {
352
- st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' });
353
- st.end();
354
- });
355
-
356
- t.test('allows setting the parameter limit to Infinity', function (st) {
357
- st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' });
358
- st.end();
359
- });
360
-
361
- t.test('allows overriding array limit', function (st) {
362
- st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } });
363
- st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } });
364
- st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } });
365
- st.end();
366
- });
367
-
368
- t.test('allows disabling array parsing', function (st) {
369
- var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false });
370
- st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } });
371
- st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array');
372
-
373
- var emptyBrackets = qs.parse('a[]=b', { parseArrays: false });
374
- st.deepEqual(emptyBrackets, { a: { 0: 'b' } });
375
- st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array');
376
-
377
- st.end();
378
- });
379
-
380
- t.test('allows for query string prefix', function (st) {
381
- st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' });
382
- st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' });
383
- st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' });
384
-
385
- st.end();
386
- });
387
-
388
- t.test('parses an object', function (st) {
389
- var input = {
390
- 'user[name]': { 'pop[bob]': 3 },
391
- 'user[email]': null
392
- };
393
-
394
- var expected = {
395
- user: {
396
- name: { 'pop[bob]': 3 },
397
- email: null
398
- }
399
- };
400
-
401
- var result = qs.parse(input);
402
-
403
- st.deepEqual(result, expected);
404
- st.end();
405
- });
406
-
407
- t.test('parses string with comma as array divider', function (st) {
408
- st.deepEqual(qs.parse('foo=bar,tee', { comma: true }), { foo: ['bar', 'tee'] });
409
- st.deepEqual(qs.parse('foo[bar]=coffee,tee', { comma: true }), { foo: { bar: ['coffee', 'tee'] } });
410
- st.deepEqual(qs.parse('foo=', { comma: true }), { foo: '' });
411
- st.deepEqual(qs.parse('foo', { comma: true }), { foo: '' });
412
- st.deepEqual(qs.parse('foo', { comma: true, strictNullHandling: true }), { foo: null });
413
-
414
- // test cases inversed from from stringify tests
415
- st.deepEqual(qs.parse('a[0]=c'), { a: ['c'] });
416
- st.deepEqual(qs.parse('a[]=c'), { a: ['c'] });
417
- st.deepEqual(qs.parse('a[]=c', { comma: true }), { a: ['c'] });
418
-
419
- st.deepEqual(qs.parse('a[0]=c&a[1]=d'), { a: ['c', 'd'] });
420
- st.deepEqual(qs.parse('a[]=c&a[]=d'), { a: ['c', 'd'] });
421
- st.deepEqual(qs.parse('a=c,d', { comma: true }), { a: ['c', 'd'] });
422
-
423
- st.end();
424
- });
425
-
426
- t.test('parses values with comma as array divider', function (st) {
427
- st.deepEqual(qs.parse({ foo: 'bar,tee' }, { comma: false }), { foo: 'bar,tee' });
428
- st.deepEqual(qs.parse({ foo: 'bar,tee' }, { comma: true }), { foo: ['bar', 'tee'] });
429
- st.end();
430
- });
431
-
432
- t.test('use number decoder, parses string that has one number with comma option enabled', function (st) {
433
- var decoder = function (str, defaultDecoder, charset, type) {
434
- if (!isNaN(Number(str))) {
435
- return parseFloat(str);
436
- }
437
- return defaultDecoder(str, defaultDecoder, charset, type);
438
- };
439
-
440
- st.deepEqual(qs.parse('foo=1', { comma: true, decoder: decoder }), { foo: 1 });
441
- st.deepEqual(qs.parse('foo=0', { comma: true, decoder: decoder }), { foo: 0 });
442
-
443
- st.end();
444
- });
445
-
446
- t.test('parses brackets holds array of arrays when having two parts of strings with comma as array divider', function (st) {
447
- st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=4,5,6', { comma: true }), { foo: [['1', '2', '3'], ['4', '5', '6']] });
448
- st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=', { comma: true }), { foo: [['1', '2', '3'], ''] });
449
- st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=,', { comma: true }), { foo: [['1', '2', '3'], ['', '']] });
450
- st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=a', { comma: true }), { foo: [['1', '2', '3'], 'a'] });
451
-
452
- st.end();
453
- });
454
-
455
- t.test('parses comma delimited array while having percent-encoded comma treated as normal text', function (st) {
456
- st.deepEqual(qs.parse('foo=a%2Cb', { comma: true }), { foo: 'a,b' });
457
- st.deepEqual(qs.parse('foo=a%2C%20b,d', { comma: true }), { foo: ['a, b', 'd'] });
458
- st.deepEqual(qs.parse('foo=a%2C%20b,c%2C%20d', { comma: true }), { foo: ['a, b', 'c, d'] });
459
-
460
- st.end();
461
- });
462
-
463
- t.test('parses an object in dot notation', function (st) {
464
- var input = {
465
- 'user.name': { 'pop[bob]': 3 },
466
- 'user.email.': null
467
- };
468
-
469
- var expected = {
470
- user: {
471
- name: { 'pop[bob]': 3 },
472
- email: null
473
- }
474
- };
475
-
476
- var result = qs.parse(input, { allowDots: true });
477
-
478
- st.deepEqual(result, expected);
479
- st.end();
480
- });
481
-
482
- t.test('parses an object and not child values', function (st) {
483
- var input = {
484
- 'user[name]': { 'pop[bob]': { test: 3 } },
485
- 'user[email]': null
486
- };
487
-
488
- var expected = {
489
- user: {
490
- name: { 'pop[bob]': { test: 3 } },
491
- email: null
492
- }
493
- };
494
-
495
- var result = qs.parse(input);
496
-
497
- st.deepEqual(result, expected);
498
- st.end();
499
- });
500
-
501
- t.test('does not blow up when Buffer global is missing', function (st) {
502
- var tempBuffer = global.Buffer;
503
- delete global.Buffer;
504
- var result = qs.parse('a=b&c=d');
505
- global.Buffer = tempBuffer;
506
- st.deepEqual(result, { a: 'b', c: 'd' });
507
- st.end();
508
- });
509
-
510
- t.test('does not crash when parsing circular references', function (st) {
511
- var a = {};
512
- a.b = a;
513
-
514
- var parsed;
515
-
516
- st.doesNotThrow(function () {
517
- parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a });
518
- });
519
-
520
- st.equal('foo' in parsed, true, 'parsed has "foo" property');
521
- st.equal('bar' in parsed.foo, true);
522
- st.equal('baz' in parsed.foo, true);
523
- st.equal(parsed.foo.bar, 'baz');
524
- st.deepEqual(parsed.foo.baz, a);
525
- st.end();
526
- });
527
-
528
- t.test('does not crash when parsing deep objects', function (st) {
529
- var parsed;
530
- var str = 'foo';
531
-
532
- for (var i = 0; i < 5000; i++) {
533
- str += '[p]';
534
- }
535
-
536
- str += '=bar';
537
-
538
- st.doesNotThrow(function () {
539
- parsed = qs.parse(str, { depth: 5000 });
540
- });
541
-
542
- st.equal('foo' in parsed, true, 'parsed has "foo" property');
543
-
544
- var depth = 0;
545
- var ref = parsed.foo;
546
- while ((ref = ref.p)) {
547
- depth += 1;
548
- }
549
-
550
- st.equal(depth, 5000, 'parsed is 5000 properties deep');
551
-
552
- st.end();
553
- });
554
-
555
- t.test('parses null objects correctly', { skip: !Object.create }, function (st) {
556
- var a = Object.create(null);
557
- a.b = 'c';
558
-
559
- st.deepEqual(qs.parse(a), { b: 'c' });
560
- var result = qs.parse({ a: a });
561
- st.equal('a' in result, true, 'result has "a" property');
562
- st.deepEqual(result.a, a);
563
- st.end();
564
- });
565
-
566
- t.test('parses dates correctly', function (st) {
567
- var now = new Date();
568
- st.deepEqual(qs.parse({ a: now }), { a: now });
569
- st.end();
570
- });
571
-
572
- t.test('parses regular expressions correctly', function (st) {
573
- var re = /^test$/;
574
- st.deepEqual(qs.parse({ a: re }), { a: re });
575
- st.end();
576
- });
577
-
578
- t.test('does not allow overwriting prototype properties', function (st) {
579
- st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {});
580
- st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {});
581
-
582
- st.deepEqual(
583
- qs.parse('toString', { allowPrototypes: false }),
584
- {},
585
- 'bare "toString" results in {}'
586
- );
587
-
588
- st.end();
589
- });
590
-
591
- t.test('can allow overwriting prototype properties', function (st) {
592
- st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } });
593
- st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' });
594
-
595
- st.deepEqual(
596
- qs.parse('toString', { allowPrototypes: true }),
597
- { toString: '' },
598
- 'bare "toString" results in { toString: "" }'
599
- );
600
-
601
- st.end();
602
- });
603
-
604
- t.test('params starting with a closing bracket', function (st) {
605
- st.deepEqual(qs.parse(']=toString'), { ']': 'toString' });
606
- st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' });
607
- st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' });
608
- st.end();
609
- });
610
-
611
- t.test('params starting with a starting bracket', function (st) {
612
- st.deepEqual(qs.parse('[=toString'), { '[': 'toString' });
613
- st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' });
614
- st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' });
615
- st.end();
616
- });
617
-
618
- t.test('add keys to objects', function (st) {
619
- st.deepEqual(
620
- qs.parse('a[b]=c&a=d'),
621
- { a: { b: 'c', d: true } },
622
- 'can add keys to objects'
623
- );
624
-
625
- st.deepEqual(
626
- qs.parse('a[b]=c&a=toString'),
627
- { a: { b: 'c' } },
628
- 'can not overwrite prototype'
629
- );
630
-
631
- st.deepEqual(
632
- qs.parse('a[b]=c&a=toString', { allowPrototypes: true }),
633
- { a: { b: 'c', toString: true } },
634
- 'can overwrite prototype with allowPrototypes true'
635
- );
636
-
637
- st.deepEqual(
638
- qs.parse('a[b]=c&a=toString', { plainObjects: true }),
639
- { __proto__: null, a: { __proto__: null, b: 'c', toString: true } },
640
- 'can overwrite prototype with plainObjects true'
641
- );
642
-
643
- st.end();
644
- });
645
-
646
- t.test('dunder proto is ignored', function (st) {
647
- var payload = 'categories[__proto__]=login&categories[__proto__]&categories[length]=42';
648
- var result = qs.parse(payload, { allowPrototypes: true });
649
-
650
- st.deepEqual(
651
- result,
652
- {
653
- categories: {
654
- length: '42'
655
- }
656
- },
657
- 'silent [[Prototype]] payload'
658
- );
659
-
660
- var plainResult = qs.parse(payload, { allowPrototypes: true, plainObjects: true });
661
-
662
- st.deepEqual(
663
- plainResult,
664
- {
665
- __proto__: null,
666
- categories: {
667
- __proto__: null,
668
- length: '42'
669
- }
670
- },
671
- 'silent [[Prototype]] payload: plain objects'
672
- );
673
-
674
- var query = qs.parse('categories[__proto__]=cats&categories[__proto__]=dogs&categories[some][json]=toInject', { allowPrototypes: true });
675
-
676
- st.notOk(Array.isArray(query.categories), 'is not an array');
677
- st.notOk(query.categories instanceof Array, 'is not instanceof an array');
678
- st.deepEqual(query.categories, { some: { json: 'toInject' } });
679
- st.equal(JSON.stringify(query.categories), '{"some":{"json":"toInject"}}', 'stringifies as a non-array');
680
-
681
- st.deepEqual(
682
- qs.parse('foo[__proto__][hidden]=value&foo[bar]=stuffs', { allowPrototypes: true }),
683
- {
684
- foo: {
685
- bar: 'stuffs'
686
- }
687
- },
688
- 'hidden values'
689
- );
690
-
691
- st.deepEqual(
692
- qs.parse('foo[__proto__][hidden]=value&foo[bar]=stuffs', { allowPrototypes: true, plainObjects: true }),
693
- {
694
- __proto__: null,
695
- foo: {
696
- __proto__: null,
697
- bar: 'stuffs'
698
- }
699
- },
700
- 'hidden values: plain objects'
701
- );
702
-
703
- st.end();
704
- });
705
-
706
- t.test('can return null objects', { skip: !Object.create }, function (st) {
707
- var expected = Object.create(null);
708
- expected.a = Object.create(null);
709
- expected.a.b = 'c';
710
- expected.a.hasOwnProperty = 'd';
711
- st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected);
712
- st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null));
713
- var expectedArray = Object.create(null);
714
- expectedArray.a = Object.create(null);
715
- expectedArray.a[0] = 'b';
716
- expectedArray.a.c = 'd';
717
- st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray);
718
- st.end();
719
- });
720
-
721
- t.test('can parse with custom encoding', function (st) {
722
- st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', {
723
- decoder: function (str) {
724
- var reg = /%([0-9A-F]{2})/ig;
725
- var result = [];
726
- var parts = reg.exec(str);
727
- while (parts) {
728
- result.push(parseInt(parts[1], 16));
729
- parts = reg.exec(str);
730
- }
731
- return String(iconv.decode(SaferBuffer.from(result), 'shift_jis'));
732
- }
733
- }), { 県: '大阪府' });
734
- st.end();
735
- });
736
-
737
- t.test('receives the default decoder as a second argument', function (st) {
738
- st.plan(1);
739
- qs.parse('a', {
740
- decoder: function (str, defaultDecoder) {
741
- st.equal(defaultDecoder, utils.decode);
742
- }
743
- });
744
- st.end();
745
- });
746
-
747
- t.test('throws error with wrong decoder', function (st) {
748
- st['throws'](function () {
749
- qs.parse({}, { decoder: 'string' });
750
- }, new TypeError('Decoder has to be a function.'));
751
- st.end();
752
- });
753
-
754
- t.test('does not mutate the options argument', function (st) {
755
- var options = {};
756
- qs.parse('a[b]=true', options);
757
- st.deepEqual(options, {});
758
- st.end();
759
- });
760
-
761
- t.test('throws if an invalid charset is specified', function (st) {
762
- st['throws'](function () {
763
- qs.parse('a=b', { charset: 'foobar' });
764
- }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'));
765
- st.end();
766
- });
767
-
768
- t.test('parses an iso-8859-1 string if asked to', function (st) {
769
- st.deepEqual(qs.parse('%A2=%BD', { charset: 'iso-8859-1' }), { '¢': '½' });
770
- st.end();
771
- });
772
-
773
- var urlEncodedCheckmarkInUtf8 = '%E2%9C%93';
774
- var urlEncodedOSlashInUtf8 = '%C3%B8';
775
- var urlEncodedNumCheckmark = '%26%2310003%3B';
776
- var urlEncodedNumSmiley = '%26%239786%3B';
777
-
778
- t.test('prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1', function (st) {
779
- st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'iso-8859-1' }), { ø: 'ø' });
780
- st.end();
781
- });
782
-
783
- t.test('prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8', function (st) {
784
- st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { 'ø': 'ø' });
785
- st.end();
786
- });
787
-
788
- t.test('does not require the utf8 sentinel to be defined before the parameters whose decoding it affects', function (st) {
789
- st.deepEqual(qs.parse('a=' + urlEncodedOSlashInUtf8 + '&utf8=' + urlEncodedNumCheckmark, { charsetSentinel: true, charset: 'utf-8' }), { a: 'ø' });
790
- st.end();
791
- });
792
-
793
- t.test('should ignore an utf8 sentinel with an unknown value', function (st) {
794
- st.deepEqual(qs.parse('utf8=foo&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' });
795
- st.end();
796
- });
797
-
798
- t.test('uses the utf8 sentinel to switch to utf-8 when no default charset is given', function (st) {
799
- st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { ø: 'ø' });
800
- st.end();
801
- });
802
-
803
- t.test('uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given', function (st) {
804
- st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { 'ø': 'ø' });
805
- st.end();
806
- });
807
-
808
- t.test('interprets numeric entities in iso-8859-1 when `interpretNumericEntities`', function (st) {
809
- st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1', interpretNumericEntities: true }), { foo: '☺' });
810
- st.end();
811
- });
812
-
813
- t.test('handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`', function (st) {
814
- st.deepEqual(qs.parse('foo=&bar=' + urlEncodedNumSmiley, {
815
- charset: 'iso-8859-1',
816
- decoder: function (str, defaultDecoder, charset) {
817
- return str ? defaultDecoder(str, defaultDecoder, charset) : null;
818
- },
819
- interpretNumericEntities: true
820
- }), { foo: null, bar: '☺' });
821
- st.end();
822
- });
823
-
824
- t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) {
825
- st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '&#9786;' });
826
- st.end();
827
- });
828
-
829
- t.test('does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`', function (st) {
830
- st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'utf-8', interpretNumericEntities: true }), { foo: '&#9786;' });
831
- st.end();
832
- });
833
-
834
- t.test('does not interpret %uXXXX syntax in iso-8859-1 mode', function (st) {
835
- st.deepEqual(qs.parse('%u263A=%u263A', { charset: 'iso-8859-1' }), { '%u263A': '%u263A' });
836
- st.end();
837
- });
838
-
839
- t.test('allows for decoding keys and values differently', function (st) {
840
- var decoder = function (str, defaultDecoder, charset, type) {
841
- if (type === 'key') {
842
- return defaultDecoder(str, defaultDecoder, charset, type).toLowerCase();
843
- }
844
- if (type === 'value') {
845
- return defaultDecoder(str, defaultDecoder, charset, type).toUpperCase();
846
- }
847
- throw 'this should never happen! type: ' + type;
848
- };
849
-
850
- st.deepEqual(qs.parse('KeY=vAlUe', { decoder: decoder }), { key: 'VALUE' });
851
- st.end();
852
- });
853
-
854
- t.end();
855
- });