amd-gaia 0.14.2__py3-none-any.whl → 0.14.3__py3-none-any.whl

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 (788) hide show
  1. {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/METADATA +5 -2
  2. amd_gaia-0.14.3.dist-info/RECORD +168 -0
  3. {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/entry_points.txt +1 -0
  4. gaia/__init__.py +28 -1
  5. gaia/agents/__init__.py +1 -1
  6. gaia/agents/base/__init__.py +1 -1
  7. gaia/agents/base/agent.py +110 -33
  8. gaia/agents/base/api_agent.py +1 -1
  9. gaia/agents/base/console.py +399 -15
  10. gaia/agents/base/errors.py +237 -0
  11. gaia/agents/base/mcp_agent.py +1 -1
  12. gaia/agents/base/tools.py +1 -1
  13. gaia/agents/blender/agent.py +1 -1
  14. gaia/agents/blender/agent_simple.py +1 -1
  15. gaia/agents/blender/app.py +1 -1
  16. gaia/agents/blender/app_simple.py +1 -1
  17. gaia/agents/blender/core/__init__.py +1 -1
  18. gaia/agents/blender/core/materials.py +1 -1
  19. gaia/agents/blender/core/objects.py +1 -1
  20. gaia/agents/blender/core/rendering.py +1 -1
  21. gaia/agents/blender/core/scene.py +1 -1
  22. gaia/agents/blender/core/view.py +1 -1
  23. gaia/agents/chat/__init__.py +1 -1
  24. gaia/agents/chat/agent.py +36 -153
  25. gaia/agents/chat/app.py +1 -1
  26. gaia/agents/chat/session.py +1 -1
  27. gaia/agents/chat/tools/__init__.py +1 -1
  28. gaia/agents/chat/tools/file_tools.py +1 -1
  29. gaia/agents/chat/tools/rag_tools.py +1 -1
  30. gaia/agents/chat/tools/shell_tools.py +1 -1
  31. gaia/agents/code/__init__.py +1 -1
  32. gaia/agents/code/agent.py +3 -1
  33. gaia/agents/code/orchestration/__init__.py +1 -1
  34. gaia/agents/code/orchestration/checklist_executor.py +1 -1
  35. gaia/agents/code/orchestration/checklist_generator.py +1 -1
  36. gaia/agents/code/orchestration/factories/__init__.py +1 -1
  37. gaia/agents/code/orchestration/factories/base.py +1 -1
  38. gaia/agents/code/orchestration/factories/nextjs_factory.py +1 -1
  39. gaia/agents/code/orchestration/factories/python_factory.py +1 -1
  40. gaia/agents/code/orchestration/orchestrator.py +212 -1
  41. gaia/agents/code/orchestration/project_analyzer.py +1 -1
  42. gaia/agents/code/orchestration/steps/__init__.py +1 -1
  43. gaia/agents/code/orchestration/steps/base.py +1 -1
  44. gaia/agents/code/orchestration/steps/error_handler.py +1 -1
  45. gaia/agents/code/orchestration/steps/nextjs.py +1 -1
  46. gaia/agents/code/orchestration/steps/python.py +1 -1
  47. gaia/agents/code/orchestration/template_catalog.py +1 -1
  48. gaia/agents/code/orchestration/workflows/__init__.py +1 -1
  49. gaia/agents/code/orchestration/workflows/base.py +1 -1
  50. gaia/agents/code/orchestration/workflows/nextjs.py +1 -1
  51. gaia/agents/code/orchestration/workflows/python.py +1 -1
  52. gaia/agents/code/prompts/__init__.py +1 -1
  53. gaia/agents/code/prompts/base_prompt.py +1 -1
  54. gaia/agents/code/prompts/code_patterns.py +1 -1
  55. gaia/agents/code/prompts/nextjs_prompt.py +1 -1
  56. gaia/agents/code/prompts/python_prompt.py +1 -1
  57. gaia/agents/code/schema_inference.py +1 -1
  58. gaia/agents/code/system_prompt.py +1 -1
  59. gaia/agents/code/tools/__init__.py +1 -1
  60. gaia/agents/code/tools/cli_tools.py +1 -1
  61. gaia/agents/code/tools/code_formatting.py +1 -1
  62. gaia/agents/code/tools/code_tools.py +1 -1
  63. gaia/agents/code/tools/error_fixing.py +1 -1
  64. gaia/agents/code/tools/external_tools.py +1 -1
  65. gaia/agents/code/tools/prisma_tools.py +1 -1
  66. gaia/agents/code/tools/project_management.py +1 -1
  67. gaia/agents/code/tools/testing.py +1 -1
  68. gaia/agents/code/tools/typescript_tools.py +1 -1
  69. gaia/agents/code/tools/validation_parsing.py +1 -1
  70. gaia/agents/code/tools/validation_tools.py +5 -2
  71. gaia/agents/code/tools/web_dev_tools.py +1 -2
  72. gaia/agents/docker/__init__.py +1 -1
  73. gaia/agents/emr/__init__.py +8 -0
  74. gaia/agents/emr/agent.py +1506 -0
  75. gaia/agents/emr/cli.py +1322 -0
  76. gaia/agents/emr/constants.py +475 -0
  77. gaia/agents/emr/dashboard/__init__.py +4 -0
  78. gaia/agents/emr/dashboard/server.py +1974 -0
  79. gaia/agents/routing/__init__.py +1 -1
  80. gaia/agents/routing/agent.py +65 -7
  81. gaia/agents/routing/system_prompt.py +1 -1
  82. gaia/api/__init__.py +1 -1
  83. gaia/api/agent_registry.py +1 -1
  84. gaia/api/app.py +1 -1
  85. gaia/api/openai_server.py +1 -1
  86. gaia/api/schemas.py +1 -1
  87. gaia/api/sse_handler.py +5 -2
  88. gaia/apps/__init__.py +1 -1
  89. gaia/apps/llm/__init__.py +1 -1
  90. gaia/audio/__init__.py +1 -1
  91. gaia/audio/audio_client.py +1 -1
  92. gaia/audio/audio_recorder.py +1 -1
  93. gaia/audio/kokoro_tts.py +1 -1
  94. gaia/audio/whisper_asr.py +1 -1
  95. gaia/chat/__init__.py +1 -1
  96. gaia/chat/prompts.py +1 -1
  97. gaia/chat/sdk.py +25 -0
  98. gaia/cli.py +2 -2
  99. gaia/database/__init__.py +10 -0
  100. gaia/database/agent.py +176 -0
  101. gaia/database/mixin.py +290 -0
  102. gaia/database/testing.py +64 -0
  103. gaia/eval/batch_experiment.py +1 -1
  104. gaia/eval/claude.py +1 -1
  105. gaia/eval/config.py +1 -1
  106. gaia/eval/email_generator.py +1 -1
  107. gaia/eval/eval.py +1 -1
  108. gaia/eval/groundtruth.py +1 -1
  109. gaia/eval/transcript_generator.py +1 -1
  110. gaia/eval/webapp/public/app.js +1 -1
  111. gaia/eval/webapp/server.js +1 -1
  112. gaia/eval/webapp/test-setup.js +1 -1
  113. gaia/llm/__init__.py +1 -1
  114. gaia/llm/lemonade_client.py +149 -11
  115. gaia/llm/lemonade_manager.py +36 -11
  116. gaia/llm/llm_client.py +1 -1
  117. gaia/llm/vlm_client.py +93 -18
  118. gaia/logger.py +1 -1
  119. gaia/mcp/agent_mcp_server.py +1 -1
  120. gaia/mcp/blender_mcp_client.py +1 -1
  121. gaia/mcp/blender_mcp_server.py +1 -1
  122. gaia/mcp/context7_cache.py +1 -1
  123. gaia/mcp/servers/__init__.py +1 -1
  124. gaia/mcp/servers/docker_mcp.py +1 -1
  125. gaia/security.py +1 -1
  126. gaia/testing/__init__.py +87 -0
  127. gaia/testing/assertions.py +330 -0
  128. gaia/testing/fixtures.py +333 -0
  129. gaia/testing/mocks.py +493 -0
  130. gaia/util.py +1 -1
  131. gaia/utils/__init__.py +33 -0
  132. gaia/utils/file_watcher.py +675 -0
  133. gaia/utils/parsing.py +223 -0
  134. gaia/version.py +2 -2
  135. amd_gaia-0.14.2.dist-info/RECORD +0 -800
  136. gaia/eval/webapp/node_modules/.bin/mime +0 -16
  137. gaia/eval/webapp/node_modules/.bin/mime.cmd +0 -17
  138. gaia/eval/webapp/node_modules/.bin/mime.ps1 +0 -28
  139. gaia/eval/webapp/node_modules/.package-lock.json +0 -865
  140. gaia/eval/webapp/node_modules/accepts/HISTORY.md +0 -243
  141. gaia/eval/webapp/node_modules/accepts/LICENSE +0 -23
  142. gaia/eval/webapp/node_modules/accepts/README.md +0 -140
  143. gaia/eval/webapp/node_modules/accepts/index.js +0 -238
  144. gaia/eval/webapp/node_modules/accepts/package.json +0 -47
  145. gaia/eval/webapp/node_modules/array-flatten/LICENSE +0 -21
  146. gaia/eval/webapp/node_modules/array-flatten/README.md +0 -43
  147. gaia/eval/webapp/node_modules/array-flatten/array-flatten.js +0 -64
  148. gaia/eval/webapp/node_modules/array-flatten/package.json +0 -39
  149. gaia/eval/webapp/node_modules/body-parser/HISTORY.md +0 -672
  150. gaia/eval/webapp/node_modules/body-parser/LICENSE +0 -23
  151. gaia/eval/webapp/node_modules/body-parser/README.md +0 -476
  152. gaia/eval/webapp/node_modules/body-parser/SECURITY.md +0 -25
  153. gaia/eval/webapp/node_modules/body-parser/index.js +0 -156
  154. gaia/eval/webapp/node_modules/body-parser/lib/read.js +0 -205
  155. gaia/eval/webapp/node_modules/body-parser/lib/types/json.js +0 -247
  156. gaia/eval/webapp/node_modules/body-parser/lib/types/raw.js +0 -101
  157. gaia/eval/webapp/node_modules/body-parser/lib/types/text.js +0 -121
  158. gaia/eval/webapp/node_modules/body-parser/lib/types/urlencoded.js +0 -307
  159. gaia/eval/webapp/node_modules/body-parser/package.json +0 -56
  160. gaia/eval/webapp/node_modules/bytes/History.md +0 -97
  161. gaia/eval/webapp/node_modules/bytes/LICENSE +0 -23
  162. gaia/eval/webapp/node_modules/bytes/Readme.md +0 -152
  163. gaia/eval/webapp/node_modules/bytes/index.js +0 -170
  164. gaia/eval/webapp/node_modules/bytes/package.json +0 -42
  165. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
  166. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
  167. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.nycrc +0 -9
  168. gaia/eval/webapp/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
  169. gaia/eval/webapp/node_modules/call-bind-apply-helpers/LICENSE +0 -21
  170. gaia/eval/webapp/node_modules/call-bind-apply-helpers/README.md +0 -62
  171. gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
  172. gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
  173. gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
  174. gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
  175. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
  176. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
  177. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
  178. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
  179. gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
  180. gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.js +0 -15
  181. gaia/eval/webapp/node_modules/call-bind-apply-helpers/package.json +0 -85
  182. gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
  183. gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
  184. gaia/eval/webapp/node_modules/call-bind-apply-helpers/test/index.js +0 -63
  185. gaia/eval/webapp/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
  186. gaia/eval/webapp/node_modules/call-bound/.eslintrc +0 -13
  187. gaia/eval/webapp/node_modules/call-bound/.github/FUNDING.yml +0 -12
  188. gaia/eval/webapp/node_modules/call-bound/.nycrc +0 -9
  189. gaia/eval/webapp/node_modules/call-bound/CHANGELOG.md +0 -42
  190. gaia/eval/webapp/node_modules/call-bound/LICENSE +0 -21
  191. gaia/eval/webapp/node_modules/call-bound/README.md +0 -53
  192. gaia/eval/webapp/node_modules/call-bound/index.d.ts +0 -94
  193. gaia/eval/webapp/node_modules/call-bound/index.js +0 -19
  194. gaia/eval/webapp/node_modules/call-bound/package.json +0 -99
  195. gaia/eval/webapp/node_modules/call-bound/test/index.js +0 -61
  196. gaia/eval/webapp/node_modules/call-bound/tsconfig.json +0 -10
  197. gaia/eval/webapp/node_modules/content-disposition/HISTORY.md +0 -60
  198. gaia/eval/webapp/node_modules/content-disposition/LICENSE +0 -22
  199. gaia/eval/webapp/node_modules/content-disposition/README.md +0 -142
  200. gaia/eval/webapp/node_modules/content-disposition/index.js +0 -458
  201. gaia/eval/webapp/node_modules/content-disposition/package.json +0 -44
  202. gaia/eval/webapp/node_modules/content-type/HISTORY.md +0 -29
  203. gaia/eval/webapp/node_modules/content-type/LICENSE +0 -22
  204. gaia/eval/webapp/node_modules/content-type/README.md +0 -94
  205. gaia/eval/webapp/node_modules/content-type/index.js +0 -225
  206. gaia/eval/webapp/node_modules/content-type/package.json +0 -42
  207. gaia/eval/webapp/node_modules/cookie/LICENSE +0 -24
  208. gaia/eval/webapp/node_modules/cookie/README.md +0 -317
  209. gaia/eval/webapp/node_modules/cookie/SECURITY.md +0 -25
  210. gaia/eval/webapp/node_modules/cookie/index.js +0 -334
  211. gaia/eval/webapp/node_modules/cookie/package.json +0 -44
  212. gaia/eval/webapp/node_modules/cookie-signature/.npmignore +0 -4
  213. gaia/eval/webapp/node_modules/cookie-signature/History.md +0 -38
  214. gaia/eval/webapp/node_modules/cookie-signature/Readme.md +0 -42
  215. gaia/eval/webapp/node_modules/cookie-signature/index.js +0 -51
  216. gaia/eval/webapp/node_modules/cookie-signature/package.json +0 -18
  217. gaia/eval/webapp/node_modules/debug/.coveralls.yml +0 -1
  218. gaia/eval/webapp/node_modules/debug/.eslintrc +0 -11
  219. gaia/eval/webapp/node_modules/debug/.npmignore +0 -9
  220. gaia/eval/webapp/node_modules/debug/.travis.yml +0 -14
  221. gaia/eval/webapp/node_modules/debug/CHANGELOG.md +0 -362
  222. gaia/eval/webapp/node_modules/debug/LICENSE +0 -19
  223. gaia/eval/webapp/node_modules/debug/Makefile +0 -50
  224. gaia/eval/webapp/node_modules/debug/README.md +0 -312
  225. gaia/eval/webapp/node_modules/debug/component.json +0 -19
  226. gaia/eval/webapp/node_modules/debug/karma.conf.js +0 -70
  227. gaia/eval/webapp/node_modules/debug/node.js +0 -1
  228. gaia/eval/webapp/node_modules/debug/package.json +0 -49
  229. gaia/eval/webapp/node_modules/debug/src/browser.js +0 -185
  230. gaia/eval/webapp/node_modules/debug/src/debug.js +0 -202
  231. gaia/eval/webapp/node_modules/debug/src/index.js +0 -10
  232. gaia/eval/webapp/node_modules/debug/src/inspector-log.js +0 -15
  233. gaia/eval/webapp/node_modules/debug/src/node.js +0 -248
  234. gaia/eval/webapp/node_modules/depd/History.md +0 -103
  235. gaia/eval/webapp/node_modules/depd/LICENSE +0 -22
  236. gaia/eval/webapp/node_modules/depd/Readme.md +0 -280
  237. gaia/eval/webapp/node_modules/depd/index.js +0 -538
  238. gaia/eval/webapp/node_modules/depd/lib/browser/index.js +0 -77
  239. gaia/eval/webapp/node_modules/depd/package.json +0 -45
  240. gaia/eval/webapp/node_modules/destroy/LICENSE +0 -23
  241. gaia/eval/webapp/node_modules/destroy/README.md +0 -63
  242. gaia/eval/webapp/node_modules/destroy/index.js +0 -209
  243. gaia/eval/webapp/node_modules/destroy/package.json +0 -48
  244. gaia/eval/webapp/node_modules/dunder-proto/.eslintrc +0 -5
  245. gaia/eval/webapp/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
  246. gaia/eval/webapp/node_modules/dunder-proto/.nycrc +0 -13
  247. gaia/eval/webapp/node_modules/dunder-proto/CHANGELOG.md +0 -24
  248. gaia/eval/webapp/node_modules/dunder-proto/LICENSE +0 -21
  249. gaia/eval/webapp/node_modules/dunder-proto/README.md +0 -54
  250. gaia/eval/webapp/node_modules/dunder-proto/get.d.ts +0 -5
  251. gaia/eval/webapp/node_modules/dunder-proto/get.js +0 -30
  252. gaia/eval/webapp/node_modules/dunder-proto/package.json +0 -76
  253. gaia/eval/webapp/node_modules/dunder-proto/set.d.ts +0 -5
  254. gaia/eval/webapp/node_modules/dunder-proto/set.js +0 -35
  255. gaia/eval/webapp/node_modules/dunder-proto/test/get.js +0 -34
  256. gaia/eval/webapp/node_modules/dunder-proto/test/index.js +0 -4
  257. gaia/eval/webapp/node_modules/dunder-proto/test/set.js +0 -50
  258. gaia/eval/webapp/node_modules/dunder-proto/tsconfig.json +0 -9
  259. gaia/eval/webapp/node_modules/ee-first/LICENSE +0 -22
  260. gaia/eval/webapp/node_modules/ee-first/README.md +0 -80
  261. gaia/eval/webapp/node_modules/ee-first/index.js +0 -95
  262. gaia/eval/webapp/node_modules/ee-first/package.json +0 -29
  263. gaia/eval/webapp/node_modules/encodeurl/LICENSE +0 -22
  264. gaia/eval/webapp/node_modules/encodeurl/README.md +0 -109
  265. gaia/eval/webapp/node_modules/encodeurl/index.js +0 -60
  266. gaia/eval/webapp/node_modules/encodeurl/package.json +0 -40
  267. gaia/eval/webapp/node_modules/es-define-property/.eslintrc +0 -13
  268. gaia/eval/webapp/node_modules/es-define-property/.github/FUNDING.yml +0 -12
  269. gaia/eval/webapp/node_modules/es-define-property/.nycrc +0 -9
  270. gaia/eval/webapp/node_modules/es-define-property/CHANGELOG.md +0 -29
  271. gaia/eval/webapp/node_modules/es-define-property/LICENSE +0 -21
  272. gaia/eval/webapp/node_modules/es-define-property/README.md +0 -49
  273. gaia/eval/webapp/node_modules/es-define-property/index.d.ts +0 -3
  274. gaia/eval/webapp/node_modules/es-define-property/index.js +0 -14
  275. gaia/eval/webapp/node_modules/es-define-property/package.json +0 -81
  276. gaia/eval/webapp/node_modules/es-define-property/test/index.js +0 -56
  277. gaia/eval/webapp/node_modules/es-define-property/tsconfig.json +0 -10
  278. gaia/eval/webapp/node_modules/es-errors/.eslintrc +0 -5
  279. gaia/eval/webapp/node_modules/es-errors/.github/FUNDING.yml +0 -12
  280. gaia/eval/webapp/node_modules/es-errors/CHANGELOG.md +0 -40
  281. gaia/eval/webapp/node_modules/es-errors/LICENSE +0 -21
  282. gaia/eval/webapp/node_modules/es-errors/README.md +0 -55
  283. gaia/eval/webapp/node_modules/es-errors/eval.d.ts +0 -3
  284. gaia/eval/webapp/node_modules/es-errors/eval.js +0 -4
  285. gaia/eval/webapp/node_modules/es-errors/index.d.ts +0 -3
  286. gaia/eval/webapp/node_modules/es-errors/index.js +0 -4
  287. gaia/eval/webapp/node_modules/es-errors/package.json +0 -80
  288. gaia/eval/webapp/node_modules/es-errors/range.d.ts +0 -3
  289. gaia/eval/webapp/node_modules/es-errors/range.js +0 -4
  290. gaia/eval/webapp/node_modules/es-errors/ref.d.ts +0 -3
  291. gaia/eval/webapp/node_modules/es-errors/ref.js +0 -4
  292. gaia/eval/webapp/node_modules/es-errors/syntax.d.ts +0 -3
  293. gaia/eval/webapp/node_modules/es-errors/syntax.js +0 -4
  294. gaia/eval/webapp/node_modules/es-errors/test/index.js +0 -19
  295. gaia/eval/webapp/node_modules/es-errors/tsconfig.json +0 -49
  296. gaia/eval/webapp/node_modules/es-errors/type.d.ts +0 -3
  297. gaia/eval/webapp/node_modules/es-errors/type.js +0 -4
  298. gaia/eval/webapp/node_modules/es-errors/uri.d.ts +0 -3
  299. gaia/eval/webapp/node_modules/es-errors/uri.js +0 -4
  300. gaia/eval/webapp/node_modules/es-object-atoms/.eslintrc +0 -16
  301. gaia/eval/webapp/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
  302. gaia/eval/webapp/node_modules/es-object-atoms/CHANGELOG.md +0 -37
  303. gaia/eval/webapp/node_modules/es-object-atoms/LICENSE +0 -21
  304. gaia/eval/webapp/node_modules/es-object-atoms/README.md +0 -63
  305. gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
  306. gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
  307. gaia/eval/webapp/node_modules/es-object-atoms/ToObject.d.ts +0 -7
  308. gaia/eval/webapp/node_modules/es-object-atoms/ToObject.js +0 -10
  309. gaia/eval/webapp/node_modules/es-object-atoms/index.d.ts +0 -3
  310. gaia/eval/webapp/node_modules/es-object-atoms/index.js +0 -4
  311. gaia/eval/webapp/node_modules/es-object-atoms/isObject.d.ts +0 -3
  312. gaia/eval/webapp/node_modules/es-object-atoms/isObject.js +0 -6
  313. gaia/eval/webapp/node_modules/es-object-atoms/package.json +0 -80
  314. gaia/eval/webapp/node_modules/es-object-atoms/test/index.js +0 -38
  315. gaia/eval/webapp/node_modules/es-object-atoms/tsconfig.json +0 -6
  316. gaia/eval/webapp/node_modules/escape-html/LICENSE +0 -24
  317. gaia/eval/webapp/node_modules/escape-html/Readme.md +0 -43
  318. gaia/eval/webapp/node_modules/escape-html/index.js +0 -78
  319. gaia/eval/webapp/node_modules/escape-html/package.json +0 -24
  320. gaia/eval/webapp/node_modules/etag/HISTORY.md +0 -83
  321. gaia/eval/webapp/node_modules/etag/LICENSE +0 -22
  322. gaia/eval/webapp/node_modules/etag/README.md +0 -159
  323. gaia/eval/webapp/node_modules/etag/index.js +0 -131
  324. gaia/eval/webapp/node_modules/etag/package.json +0 -47
  325. gaia/eval/webapp/node_modules/express/History.md +0 -3656
  326. gaia/eval/webapp/node_modules/express/LICENSE +0 -24
  327. gaia/eval/webapp/node_modules/express/Readme.md +0 -260
  328. gaia/eval/webapp/node_modules/express/index.js +0 -11
  329. gaia/eval/webapp/node_modules/express/lib/application.js +0 -661
  330. gaia/eval/webapp/node_modules/express/lib/express.js +0 -116
  331. gaia/eval/webapp/node_modules/express/lib/middleware/init.js +0 -43
  332. gaia/eval/webapp/node_modules/express/lib/middleware/query.js +0 -47
  333. gaia/eval/webapp/node_modules/express/lib/request.js +0 -525
  334. gaia/eval/webapp/node_modules/express/lib/response.js +0 -1179
  335. gaia/eval/webapp/node_modules/express/lib/router/index.js +0 -673
  336. gaia/eval/webapp/node_modules/express/lib/router/layer.js +0 -181
  337. gaia/eval/webapp/node_modules/express/lib/router/route.js +0 -230
  338. gaia/eval/webapp/node_modules/express/lib/utils.js +0 -303
  339. gaia/eval/webapp/node_modules/express/lib/view.js +0 -182
  340. gaia/eval/webapp/node_modules/express/package.json +0 -102
  341. gaia/eval/webapp/node_modules/finalhandler/HISTORY.md +0 -210
  342. gaia/eval/webapp/node_modules/finalhandler/LICENSE +0 -22
  343. gaia/eval/webapp/node_modules/finalhandler/README.md +0 -147
  344. gaia/eval/webapp/node_modules/finalhandler/SECURITY.md +0 -25
  345. gaia/eval/webapp/node_modules/finalhandler/index.js +0 -341
  346. gaia/eval/webapp/node_modules/finalhandler/package.json +0 -47
  347. gaia/eval/webapp/node_modules/forwarded/HISTORY.md +0 -21
  348. gaia/eval/webapp/node_modules/forwarded/LICENSE +0 -22
  349. gaia/eval/webapp/node_modules/forwarded/README.md +0 -57
  350. gaia/eval/webapp/node_modules/forwarded/index.js +0 -90
  351. gaia/eval/webapp/node_modules/forwarded/package.json +0 -45
  352. gaia/eval/webapp/node_modules/fresh/HISTORY.md +0 -70
  353. gaia/eval/webapp/node_modules/fresh/LICENSE +0 -23
  354. gaia/eval/webapp/node_modules/fresh/README.md +0 -119
  355. gaia/eval/webapp/node_modules/fresh/index.js +0 -137
  356. gaia/eval/webapp/node_modules/fresh/package.json +0 -46
  357. gaia/eval/webapp/node_modules/fs/README.md +0 -9
  358. gaia/eval/webapp/node_modules/fs/package.json +0 -20
  359. gaia/eval/webapp/node_modules/function-bind/.eslintrc +0 -21
  360. gaia/eval/webapp/node_modules/function-bind/.github/FUNDING.yml +0 -12
  361. gaia/eval/webapp/node_modules/function-bind/.github/SECURITY.md +0 -3
  362. gaia/eval/webapp/node_modules/function-bind/.nycrc +0 -13
  363. gaia/eval/webapp/node_modules/function-bind/CHANGELOG.md +0 -136
  364. gaia/eval/webapp/node_modules/function-bind/LICENSE +0 -20
  365. gaia/eval/webapp/node_modules/function-bind/README.md +0 -46
  366. gaia/eval/webapp/node_modules/function-bind/implementation.js +0 -84
  367. gaia/eval/webapp/node_modules/function-bind/index.js +0 -5
  368. gaia/eval/webapp/node_modules/function-bind/package.json +0 -87
  369. gaia/eval/webapp/node_modules/function-bind/test/.eslintrc +0 -9
  370. gaia/eval/webapp/node_modules/function-bind/test/index.js +0 -252
  371. gaia/eval/webapp/node_modules/get-intrinsic/.eslintrc +0 -42
  372. gaia/eval/webapp/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  373. gaia/eval/webapp/node_modules/get-intrinsic/.nycrc +0 -9
  374. gaia/eval/webapp/node_modules/get-intrinsic/CHANGELOG.md +0 -186
  375. gaia/eval/webapp/node_modules/get-intrinsic/LICENSE +0 -21
  376. gaia/eval/webapp/node_modules/get-intrinsic/README.md +0 -71
  377. gaia/eval/webapp/node_modules/get-intrinsic/index.js +0 -378
  378. gaia/eval/webapp/node_modules/get-intrinsic/package.json +0 -97
  379. gaia/eval/webapp/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  380. gaia/eval/webapp/node_modules/get-proto/.eslintrc +0 -10
  381. gaia/eval/webapp/node_modules/get-proto/.github/FUNDING.yml +0 -12
  382. gaia/eval/webapp/node_modules/get-proto/.nycrc +0 -9
  383. gaia/eval/webapp/node_modules/get-proto/CHANGELOG.md +0 -21
  384. gaia/eval/webapp/node_modules/get-proto/LICENSE +0 -21
  385. gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
  386. gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
  387. gaia/eval/webapp/node_modules/get-proto/README.md +0 -50
  388. gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
  389. gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
  390. gaia/eval/webapp/node_modules/get-proto/index.d.ts +0 -5
  391. gaia/eval/webapp/node_modules/get-proto/index.js +0 -27
  392. gaia/eval/webapp/node_modules/get-proto/package.json +0 -81
  393. gaia/eval/webapp/node_modules/get-proto/test/index.js +0 -68
  394. gaia/eval/webapp/node_modules/get-proto/tsconfig.json +0 -9
  395. gaia/eval/webapp/node_modules/gopd/.eslintrc +0 -16
  396. gaia/eval/webapp/node_modules/gopd/.github/FUNDING.yml +0 -12
  397. gaia/eval/webapp/node_modules/gopd/CHANGELOG.md +0 -45
  398. gaia/eval/webapp/node_modules/gopd/LICENSE +0 -21
  399. gaia/eval/webapp/node_modules/gopd/README.md +0 -40
  400. gaia/eval/webapp/node_modules/gopd/gOPD.d.ts +0 -1
  401. gaia/eval/webapp/node_modules/gopd/gOPD.js +0 -4
  402. gaia/eval/webapp/node_modules/gopd/index.d.ts +0 -5
  403. gaia/eval/webapp/node_modules/gopd/index.js +0 -15
  404. gaia/eval/webapp/node_modules/gopd/package.json +0 -77
  405. gaia/eval/webapp/node_modules/gopd/test/index.js +0 -36
  406. gaia/eval/webapp/node_modules/gopd/tsconfig.json +0 -9
  407. gaia/eval/webapp/node_modules/has-symbols/.eslintrc +0 -11
  408. gaia/eval/webapp/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  409. gaia/eval/webapp/node_modules/has-symbols/.nycrc +0 -9
  410. gaia/eval/webapp/node_modules/has-symbols/CHANGELOG.md +0 -91
  411. gaia/eval/webapp/node_modules/has-symbols/LICENSE +0 -21
  412. gaia/eval/webapp/node_modules/has-symbols/README.md +0 -46
  413. gaia/eval/webapp/node_modules/has-symbols/index.d.ts +0 -3
  414. gaia/eval/webapp/node_modules/has-symbols/index.js +0 -14
  415. gaia/eval/webapp/node_modules/has-symbols/package.json +0 -111
  416. gaia/eval/webapp/node_modules/has-symbols/shams.d.ts +0 -3
  417. gaia/eval/webapp/node_modules/has-symbols/shams.js +0 -45
  418. gaia/eval/webapp/node_modules/has-symbols/test/index.js +0 -22
  419. gaia/eval/webapp/node_modules/has-symbols/test/shams/core-js.js +0 -29
  420. gaia/eval/webapp/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
  421. gaia/eval/webapp/node_modules/has-symbols/test/tests.js +0 -58
  422. gaia/eval/webapp/node_modules/has-symbols/tsconfig.json +0 -10
  423. gaia/eval/webapp/node_modules/hasown/.eslintrc +0 -5
  424. gaia/eval/webapp/node_modules/hasown/.github/FUNDING.yml +0 -12
  425. gaia/eval/webapp/node_modules/hasown/.nycrc +0 -13
  426. gaia/eval/webapp/node_modules/hasown/CHANGELOG.md +0 -40
  427. gaia/eval/webapp/node_modules/hasown/LICENSE +0 -21
  428. gaia/eval/webapp/node_modules/hasown/README.md +0 -40
  429. gaia/eval/webapp/node_modules/hasown/index.d.ts +0 -3
  430. gaia/eval/webapp/node_modules/hasown/index.js +0 -8
  431. gaia/eval/webapp/node_modules/hasown/package.json +0 -92
  432. gaia/eval/webapp/node_modules/hasown/tsconfig.json +0 -6
  433. gaia/eval/webapp/node_modules/http-errors/HISTORY.md +0 -180
  434. gaia/eval/webapp/node_modules/http-errors/LICENSE +0 -23
  435. gaia/eval/webapp/node_modules/http-errors/README.md +0 -169
  436. gaia/eval/webapp/node_modules/http-errors/index.js +0 -289
  437. gaia/eval/webapp/node_modules/http-errors/package.json +0 -50
  438. gaia/eval/webapp/node_modules/iconv-lite/Changelog.md +0 -162
  439. gaia/eval/webapp/node_modules/iconv-lite/LICENSE +0 -21
  440. gaia/eval/webapp/node_modules/iconv-lite/README.md +0 -156
  441. gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -555
  442. gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-data.js +0 -176
  443. gaia/eval/webapp/node_modules/iconv-lite/encodings/index.js +0 -22
  444. gaia/eval/webapp/node_modules/iconv-lite/encodings/internal.js +0 -188
  445. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -72
  446. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  447. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data.js +0 -174
  448. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  449. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  450. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  451. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  452. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  453. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  454. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -55
  455. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  456. gaia/eval/webapp/node_modules/iconv-lite/encodings/utf16.js +0 -177
  457. gaia/eval/webapp/node_modules/iconv-lite/encodings/utf7.js +0 -290
  458. gaia/eval/webapp/node_modules/iconv-lite/lib/bom-handling.js +0 -52
  459. gaia/eval/webapp/node_modules/iconv-lite/lib/extend-node.js +0 -217
  460. gaia/eval/webapp/node_modules/iconv-lite/lib/index.d.ts +0 -24
  461. gaia/eval/webapp/node_modules/iconv-lite/lib/index.js +0 -153
  462. gaia/eval/webapp/node_modules/iconv-lite/lib/streams.js +0 -121
  463. gaia/eval/webapp/node_modules/iconv-lite/package.json +0 -46
  464. gaia/eval/webapp/node_modules/inherits/LICENSE +0 -16
  465. gaia/eval/webapp/node_modules/inherits/README.md +0 -42
  466. gaia/eval/webapp/node_modules/inherits/inherits.js +0 -9
  467. gaia/eval/webapp/node_modules/inherits/inherits_browser.js +0 -27
  468. gaia/eval/webapp/node_modules/inherits/package.json +0 -29
  469. gaia/eval/webapp/node_modules/ipaddr.js/LICENSE +0 -19
  470. gaia/eval/webapp/node_modules/ipaddr.js/README.md +0 -233
  471. gaia/eval/webapp/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  472. gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  473. gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  474. gaia/eval/webapp/node_modules/ipaddr.js/package.json +0 -35
  475. gaia/eval/webapp/node_modules/math-intrinsics/.eslintrc +0 -16
  476. gaia/eval/webapp/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
  477. gaia/eval/webapp/node_modules/math-intrinsics/CHANGELOG.md +0 -24
  478. gaia/eval/webapp/node_modules/math-intrinsics/LICENSE +0 -21
  479. gaia/eval/webapp/node_modules/math-intrinsics/README.md +0 -50
  480. gaia/eval/webapp/node_modules/math-intrinsics/abs.d.ts +0 -1
  481. gaia/eval/webapp/node_modules/math-intrinsics/abs.js +0 -4
  482. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
  483. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
  484. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
  485. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
  486. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
  487. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.js +0 -5
  488. gaia/eval/webapp/node_modules/math-intrinsics/floor.d.ts +0 -1
  489. gaia/eval/webapp/node_modules/math-intrinsics/floor.js +0 -4
  490. gaia/eval/webapp/node_modules/math-intrinsics/isFinite.d.ts +0 -3
  491. gaia/eval/webapp/node_modules/math-intrinsics/isFinite.js +0 -12
  492. gaia/eval/webapp/node_modules/math-intrinsics/isInteger.d.ts +0 -3
  493. gaia/eval/webapp/node_modules/math-intrinsics/isInteger.js +0 -16
  494. gaia/eval/webapp/node_modules/math-intrinsics/isNaN.d.ts +0 -1
  495. gaia/eval/webapp/node_modules/math-intrinsics/isNaN.js +0 -6
  496. gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
  497. gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.js +0 -6
  498. gaia/eval/webapp/node_modules/math-intrinsics/max.d.ts +0 -1
  499. gaia/eval/webapp/node_modules/math-intrinsics/max.js +0 -4
  500. gaia/eval/webapp/node_modules/math-intrinsics/min.d.ts +0 -1
  501. gaia/eval/webapp/node_modules/math-intrinsics/min.js +0 -4
  502. gaia/eval/webapp/node_modules/math-intrinsics/mod.d.ts +0 -3
  503. gaia/eval/webapp/node_modules/math-intrinsics/mod.js +0 -9
  504. gaia/eval/webapp/node_modules/math-intrinsics/package.json +0 -86
  505. gaia/eval/webapp/node_modules/math-intrinsics/pow.d.ts +0 -1
  506. gaia/eval/webapp/node_modules/math-intrinsics/pow.js +0 -4
  507. gaia/eval/webapp/node_modules/math-intrinsics/round.d.ts +0 -1
  508. gaia/eval/webapp/node_modules/math-intrinsics/round.js +0 -4
  509. gaia/eval/webapp/node_modules/math-intrinsics/sign.d.ts +0 -3
  510. gaia/eval/webapp/node_modules/math-intrinsics/sign.js +0 -11
  511. gaia/eval/webapp/node_modules/math-intrinsics/test/index.js +0 -192
  512. gaia/eval/webapp/node_modules/math-intrinsics/tsconfig.json +0 -3
  513. gaia/eval/webapp/node_modules/media-typer/HISTORY.md +0 -22
  514. gaia/eval/webapp/node_modules/media-typer/LICENSE +0 -22
  515. gaia/eval/webapp/node_modules/media-typer/README.md +0 -81
  516. gaia/eval/webapp/node_modules/media-typer/index.js +0 -270
  517. gaia/eval/webapp/node_modules/media-typer/package.json +0 -26
  518. gaia/eval/webapp/node_modules/merge-descriptors/HISTORY.md +0 -21
  519. gaia/eval/webapp/node_modules/merge-descriptors/LICENSE +0 -23
  520. gaia/eval/webapp/node_modules/merge-descriptors/README.md +0 -49
  521. gaia/eval/webapp/node_modules/merge-descriptors/index.js +0 -60
  522. gaia/eval/webapp/node_modules/merge-descriptors/package.json +0 -39
  523. gaia/eval/webapp/node_modules/methods/HISTORY.md +0 -29
  524. gaia/eval/webapp/node_modules/methods/LICENSE +0 -24
  525. gaia/eval/webapp/node_modules/methods/README.md +0 -51
  526. gaia/eval/webapp/node_modules/methods/index.js +0 -69
  527. gaia/eval/webapp/node_modules/methods/package.json +0 -36
  528. gaia/eval/webapp/node_modules/mime/.npmignore +0 -0
  529. gaia/eval/webapp/node_modules/mime/CHANGELOG.md +0 -164
  530. gaia/eval/webapp/node_modules/mime/LICENSE +0 -21
  531. gaia/eval/webapp/node_modules/mime/README.md +0 -90
  532. gaia/eval/webapp/node_modules/mime/cli.js +0 -8
  533. gaia/eval/webapp/node_modules/mime/mime.js +0 -108
  534. gaia/eval/webapp/node_modules/mime/package.json +0 -44
  535. gaia/eval/webapp/node_modules/mime/src/build.js +0 -53
  536. gaia/eval/webapp/node_modules/mime/src/test.js +0 -60
  537. gaia/eval/webapp/node_modules/mime/types.json +0 -1
  538. gaia/eval/webapp/node_modules/mime-db/HISTORY.md +0 -507
  539. gaia/eval/webapp/node_modules/mime-db/LICENSE +0 -23
  540. gaia/eval/webapp/node_modules/mime-db/README.md +0 -100
  541. gaia/eval/webapp/node_modules/mime-db/db.json +0 -8519
  542. gaia/eval/webapp/node_modules/mime-db/index.js +0 -12
  543. gaia/eval/webapp/node_modules/mime-db/package.json +0 -60
  544. gaia/eval/webapp/node_modules/mime-types/HISTORY.md +0 -397
  545. gaia/eval/webapp/node_modules/mime-types/LICENSE +0 -23
  546. gaia/eval/webapp/node_modules/mime-types/README.md +0 -113
  547. gaia/eval/webapp/node_modules/mime-types/index.js +0 -188
  548. gaia/eval/webapp/node_modules/mime-types/package.json +0 -44
  549. gaia/eval/webapp/node_modules/ms/index.js +0 -152
  550. gaia/eval/webapp/node_modules/ms/license.md +0 -21
  551. gaia/eval/webapp/node_modules/ms/package.json +0 -37
  552. gaia/eval/webapp/node_modules/ms/readme.md +0 -51
  553. gaia/eval/webapp/node_modules/negotiator/HISTORY.md +0 -108
  554. gaia/eval/webapp/node_modules/negotiator/LICENSE +0 -24
  555. gaia/eval/webapp/node_modules/negotiator/README.md +0 -203
  556. gaia/eval/webapp/node_modules/negotiator/index.js +0 -82
  557. gaia/eval/webapp/node_modules/negotiator/lib/charset.js +0 -169
  558. gaia/eval/webapp/node_modules/negotiator/lib/encoding.js +0 -184
  559. gaia/eval/webapp/node_modules/negotiator/lib/language.js +0 -179
  560. gaia/eval/webapp/node_modules/negotiator/lib/mediaType.js +0 -294
  561. gaia/eval/webapp/node_modules/negotiator/package.json +0 -42
  562. gaia/eval/webapp/node_modules/object-inspect/.eslintrc +0 -53
  563. gaia/eval/webapp/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  564. gaia/eval/webapp/node_modules/object-inspect/.nycrc +0 -13
  565. gaia/eval/webapp/node_modules/object-inspect/CHANGELOG.md +0 -424
  566. gaia/eval/webapp/node_modules/object-inspect/LICENSE +0 -21
  567. gaia/eval/webapp/node_modules/object-inspect/example/all.js +0 -23
  568. gaia/eval/webapp/node_modules/object-inspect/example/circular.js +0 -6
  569. gaia/eval/webapp/node_modules/object-inspect/example/fn.js +0 -5
  570. gaia/eval/webapp/node_modules/object-inspect/example/inspect.js +0 -10
  571. gaia/eval/webapp/node_modules/object-inspect/index.js +0 -544
  572. gaia/eval/webapp/node_modules/object-inspect/package-support.json +0 -20
  573. gaia/eval/webapp/node_modules/object-inspect/package.json +0 -105
  574. gaia/eval/webapp/node_modules/object-inspect/readme.markdown +0 -84
  575. gaia/eval/webapp/node_modules/object-inspect/test/bigint.js +0 -58
  576. gaia/eval/webapp/node_modules/object-inspect/test/browser/dom.js +0 -15
  577. gaia/eval/webapp/node_modules/object-inspect/test/circular.js +0 -16
  578. gaia/eval/webapp/node_modules/object-inspect/test/deep.js +0 -12
  579. gaia/eval/webapp/node_modules/object-inspect/test/element.js +0 -53
  580. gaia/eval/webapp/node_modules/object-inspect/test/err.js +0 -48
  581. gaia/eval/webapp/node_modules/object-inspect/test/fakes.js +0 -29
  582. gaia/eval/webapp/node_modules/object-inspect/test/fn.js +0 -76
  583. gaia/eval/webapp/node_modules/object-inspect/test/global.js +0 -17
  584. gaia/eval/webapp/node_modules/object-inspect/test/has.js +0 -15
  585. gaia/eval/webapp/node_modules/object-inspect/test/holes.js +0 -15
  586. gaia/eval/webapp/node_modules/object-inspect/test/indent-option.js +0 -271
  587. gaia/eval/webapp/node_modules/object-inspect/test/inspect.js +0 -139
  588. gaia/eval/webapp/node_modules/object-inspect/test/lowbyte.js +0 -12
  589. gaia/eval/webapp/node_modules/object-inspect/test/number.js +0 -58
  590. gaia/eval/webapp/node_modules/object-inspect/test/quoteStyle.js +0 -26
  591. gaia/eval/webapp/node_modules/object-inspect/test/toStringTag.js +0 -40
  592. gaia/eval/webapp/node_modules/object-inspect/test/undef.js +0 -12
  593. gaia/eval/webapp/node_modules/object-inspect/test/values.js +0 -261
  594. gaia/eval/webapp/node_modules/object-inspect/test-core-js.js +0 -26
  595. gaia/eval/webapp/node_modules/object-inspect/util.inspect.js +0 -1
  596. gaia/eval/webapp/node_modules/on-finished/HISTORY.md +0 -98
  597. gaia/eval/webapp/node_modules/on-finished/LICENSE +0 -23
  598. gaia/eval/webapp/node_modules/on-finished/README.md +0 -162
  599. gaia/eval/webapp/node_modules/on-finished/index.js +0 -234
  600. gaia/eval/webapp/node_modules/on-finished/package.json +0 -39
  601. gaia/eval/webapp/node_modules/parseurl/HISTORY.md +0 -58
  602. gaia/eval/webapp/node_modules/parseurl/LICENSE +0 -24
  603. gaia/eval/webapp/node_modules/parseurl/README.md +0 -133
  604. gaia/eval/webapp/node_modules/parseurl/index.js +0 -158
  605. gaia/eval/webapp/node_modules/parseurl/package.json +0 -40
  606. gaia/eval/webapp/node_modules/path/.npmignore +0 -1
  607. gaia/eval/webapp/node_modules/path/LICENSE +0 -18
  608. gaia/eval/webapp/node_modules/path/README.md +0 -15
  609. gaia/eval/webapp/node_modules/path/package.json +0 -24
  610. gaia/eval/webapp/node_modules/path/path.js +0 -628
  611. gaia/eval/webapp/node_modules/path-to-regexp/LICENSE +0 -21
  612. gaia/eval/webapp/node_modules/path-to-regexp/Readme.md +0 -35
  613. gaia/eval/webapp/node_modules/path-to-regexp/index.js +0 -156
  614. gaia/eval/webapp/node_modules/path-to-regexp/package.json +0 -30
  615. gaia/eval/webapp/node_modules/process/.eslintrc +0 -21
  616. gaia/eval/webapp/node_modules/process/LICENSE +0 -22
  617. gaia/eval/webapp/node_modules/process/README.md +0 -26
  618. gaia/eval/webapp/node_modules/process/browser.js +0 -184
  619. gaia/eval/webapp/node_modules/process/index.js +0 -2
  620. gaia/eval/webapp/node_modules/process/package.json +0 -27
  621. gaia/eval/webapp/node_modules/process/test.js +0 -199
  622. gaia/eval/webapp/node_modules/proxy-addr/HISTORY.md +0 -161
  623. gaia/eval/webapp/node_modules/proxy-addr/LICENSE +0 -22
  624. gaia/eval/webapp/node_modules/proxy-addr/README.md +0 -139
  625. gaia/eval/webapp/node_modules/proxy-addr/index.js +0 -327
  626. gaia/eval/webapp/node_modules/proxy-addr/package.json +0 -47
  627. gaia/eval/webapp/node_modules/qs/.editorconfig +0 -46
  628. gaia/eval/webapp/node_modules/qs/.eslintrc +0 -38
  629. gaia/eval/webapp/node_modules/qs/.github/FUNDING.yml +0 -12
  630. gaia/eval/webapp/node_modules/qs/.nycrc +0 -13
  631. gaia/eval/webapp/node_modules/qs/CHANGELOG.md +0 -600
  632. gaia/eval/webapp/node_modules/qs/LICENSE.md +0 -29
  633. gaia/eval/webapp/node_modules/qs/README.md +0 -709
  634. gaia/eval/webapp/node_modules/qs/dist/qs.js +0 -90
  635. gaia/eval/webapp/node_modules/qs/lib/formats.js +0 -23
  636. gaia/eval/webapp/node_modules/qs/lib/index.js +0 -11
  637. gaia/eval/webapp/node_modules/qs/lib/parse.js +0 -296
  638. gaia/eval/webapp/node_modules/qs/lib/stringify.js +0 -351
  639. gaia/eval/webapp/node_modules/qs/lib/utils.js +0 -265
  640. gaia/eval/webapp/node_modules/qs/package.json +0 -91
  641. gaia/eval/webapp/node_modules/qs/test/empty-keys-cases.js +0 -267
  642. gaia/eval/webapp/node_modules/qs/test/parse.js +0 -1170
  643. gaia/eval/webapp/node_modules/qs/test/stringify.js +0 -1298
  644. gaia/eval/webapp/node_modules/qs/test/utils.js +0 -136
  645. gaia/eval/webapp/node_modules/range-parser/HISTORY.md +0 -56
  646. gaia/eval/webapp/node_modules/range-parser/LICENSE +0 -23
  647. gaia/eval/webapp/node_modules/range-parser/README.md +0 -84
  648. gaia/eval/webapp/node_modules/range-parser/index.js +0 -162
  649. gaia/eval/webapp/node_modules/range-parser/package.json +0 -44
  650. gaia/eval/webapp/node_modules/raw-body/HISTORY.md +0 -308
  651. gaia/eval/webapp/node_modules/raw-body/LICENSE +0 -22
  652. gaia/eval/webapp/node_modules/raw-body/README.md +0 -223
  653. gaia/eval/webapp/node_modules/raw-body/SECURITY.md +0 -24
  654. gaia/eval/webapp/node_modules/raw-body/index.d.ts +0 -87
  655. gaia/eval/webapp/node_modules/raw-body/index.js +0 -336
  656. gaia/eval/webapp/node_modules/raw-body/package.json +0 -49
  657. gaia/eval/webapp/node_modules/safe-buffer/LICENSE +0 -21
  658. gaia/eval/webapp/node_modules/safe-buffer/README.md +0 -584
  659. gaia/eval/webapp/node_modules/safe-buffer/index.d.ts +0 -187
  660. gaia/eval/webapp/node_modules/safe-buffer/index.js +0 -65
  661. gaia/eval/webapp/node_modules/safe-buffer/package.json +0 -51
  662. gaia/eval/webapp/node_modules/safer-buffer/LICENSE +0 -21
  663. gaia/eval/webapp/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  664. gaia/eval/webapp/node_modules/safer-buffer/Readme.md +0 -156
  665. gaia/eval/webapp/node_modules/safer-buffer/dangerous.js +0 -58
  666. gaia/eval/webapp/node_modules/safer-buffer/package.json +0 -34
  667. gaia/eval/webapp/node_modules/safer-buffer/safer.js +0 -77
  668. gaia/eval/webapp/node_modules/safer-buffer/tests.js +0 -406
  669. gaia/eval/webapp/node_modules/send/HISTORY.md +0 -526
  670. gaia/eval/webapp/node_modules/send/LICENSE +0 -23
  671. gaia/eval/webapp/node_modules/send/README.md +0 -327
  672. gaia/eval/webapp/node_modules/send/SECURITY.md +0 -24
  673. gaia/eval/webapp/node_modules/send/index.js +0 -1142
  674. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/HISTORY.md +0 -14
  675. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/LICENSE +0 -22
  676. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/README.md +0 -128
  677. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/index.js +0 -60
  678. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/package.json +0 -40
  679. gaia/eval/webapp/node_modules/send/node_modules/ms/index.js +0 -162
  680. gaia/eval/webapp/node_modules/send/node_modules/ms/license.md +0 -21
  681. gaia/eval/webapp/node_modules/send/node_modules/ms/package.json +0 -38
  682. gaia/eval/webapp/node_modules/send/node_modules/ms/readme.md +0 -59
  683. gaia/eval/webapp/node_modules/send/package.json +0 -62
  684. gaia/eval/webapp/node_modules/serve-static/HISTORY.md +0 -487
  685. gaia/eval/webapp/node_modules/serve-static/LICENSE +0 -25
  686. gaia/eval/webapp/node_modules/serve-static/README.md +0 -257
  687. gaia/eval/webapp/node_modules/serve-static/index.js +0 -209
  688. gaia/eval/webapp/node_modules/serve-static/package.json +0 -42
  689. gaia/eval/webapp/node_modules/setprototypeof/LICENSE +0 -13
  690. gaia/eval/webapp/node_modules/setprototypeof/README.md +0 -31
  691. gaia/eval/webapp/node_modules/setprototypeof/index.d.ts +0 -2
  692. gaia/eval/webapp/node_modules/setprototypeof/index.js +0 -17
  693. gaia/eval/webapp/node_modules/setprototypeof/package.json +0 -38
  694. gaia/eval/webapp/node_modules/setprototypeof/test/index.js +0 -24
  695. gaia/eval/webapp/node_modules/side-channel/.editorconfig +0 -9
  696. gaia/eval/webapp/node_modules/side-channel/.eslintrc +0 -12
  697. gaia/eval/webapp/node_modules/side-channel/.github/FUNDING.yml +0 -12
  698. gaia/eval/webapp/node_modules/side-channel/.nycrc +0 -13
  699. gaia/eval/webapp/node_modules/side-channel/CHANGELOG.md +0 -110
  700. gaia/eval/webapp/node_modules/side-channel/LICENSE +0 -21
  701. gaia/eval/webapp/node_modules/side-channel/README.md +0 -61
  702. gaia/eval/webapp/node_modules/side-channel/index.d.ts +0 -14
  703. gaia/eval/webapp/node_modules/side-channel/index.js +0 -43
  704. gaia/eval/webapp/node_modules/side-channel/package.json +0 -85
  705. gaia/eval/webapp/node_modules/side-channel/test/index.js +0 -104
  706. gaia/eval/webapp/node_modules/side-channel/tsconfig.json +0 -9
  707. gaia/eval/webapp/node_modules/side-channel-list/.editorconfig +0 -9
  708. gaia/eval/webapp/node_modules/side-channel-list/.eslintrc +0 -11
  709. gaia/eval/webapp/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
  710. gaia/eval/webapp/node_modules/side-channel-list/.nycrc +0 -13
  711. gaia/eval/webapp/node_modules/side-channel-list/CHANGELOG.md +0 -15
  712. gaia/eval/webapp/node_modules/side-channel-list/LICENSE +0 -21
  713. gaia/eval/webapp/node_modules/side-channel-list/README.md +0 -62
  714. gaia/eval/webapp/node_modules/side-channel-list/index.d.ts +0 -13
  715. gaia/eval/webapp/node_modules/side-channel-list/index.js +0 -113
  716. gaia/eval/webapp/node_modules/side-channel-list/list.d.ts +0 -14
  717. gaia/eval/webapp/node_modules/side-channel-list/package.json +0 -77
  718. gaia/eval/webapp/node_modules/side-channel-list/test/index.js +0 -104
  719. gaia/eval/webapp/node_modules/side-channel-list/tsconfig.json +0 -9
  720. gaia/eval/webapp/node_modules/side-channel-map/.editorconfig +0 -9
  721. gaia/eval/webapp/node_modules/side-channel-map/.eslintrc +0 -11
  722. gaia/eval/webapp/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
  723. gaia/eval/webapp/node_modules/side-channel-map/.nycrc +0 -13
  724. gaia/eval/webapp/node_modules/side-channel-map/CHANGELOG.md +0 -22
  725. gaia/eval/webapp/node_modules/side-channel-map/LICENSE +0 -21
  726. gaia/eval/webapp/node_modules/side-channel-map/README.md +0 -62
  727. gaia/eval/webapp/node_modules/side-channel-map/index.d.ts +0 -15
  728. gaia/eval/webapp/node_modules/side-channel-map/index.js +0 -68
  729. gaia/eval/webapp/node_modules/side-channel-map/package.json +0 -80
  730. gaia/eval/webapp/node_modules/side-channel-map/test/index.js +0 -114
  731. gaia/eval/webapp/node_modules/side-channel-map/tsconfig.json +0 -9
  732. gaia/eval/webapp/node_modules/side-channel-weakmap/.editorconfig +0 -9
  733. gaia/eval/webapp/node_modules/side-channel-weakmap/.eslintrc +0 -12
  734. gaia/eval/webapp/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
  735. gaia/eval/webapp/node_modules/side-channel-weakmap/.nycrc +0 -13
  736. gaia/eval/webapp/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
  737. gaia/eval/webapp/node_modules/side-channel-weakmap/LICENSE +0 -21
  738. gaia/eval/webapp/node_modules/side-channel-weakmap/README.md +0 -62
  739. gaia/eval/webapp/node_modules/side-channel-weakmap/index.d.ts +0 -15
  740. gaia/eval/webapp/node_modules/side-channel-weakmap/index.js +0 -84
  741. gaia/eval/webapp/node_modules/side-channel-weakmap/package.json +0 -87
  742. gaia/eval/webapp/node_modules/side-channel-weakmap/test/index.js +0 -114
  743. gaia/eval/webapp/node_modules/side-channel-weakmap/tsconfig.json +0 -9
  744. gaia/eval/webapp/node_modules/statuses/HISTORY.md +0 -82
  745. gaia/eval/webapp/node_modules/statuses/LICENSE +0 -23
  746. gaia/eval/webapp/node_modules/statuses/README.md +0 -136
  747. gaia/eval/webapp/node_modules/statuses/codes.json +0 -65
  748. gaia/eval/webapp/node_modules/statuses/index.js +0 -146
  749. gaia/eval/webapp/node_modules/statuses/package.json +0 -49
  750. gaia/eval/webapp/node_modules/toidentifier/HISTORY.md +0 -9
  751. gaia/eval/webapp/node_modules/toidentifier/LICENSE +0 -21
  752. gaia/eval/webapp/node_modules/toidentifier/README.md +0 -61
  753. gaia/eval/webapp/node_modules/toidentifier/index.js +0 -32
  754. gaia/eval/webapp/node_modules/toidentifier/package.json +0 -38
  755. gaia/eval/webapp/node_modules/type-is/HISTORY.md +0 -259
  756. gaia/eval/webapp/node_modules/type-is/LICENSE +0 -23
  757. gaia/eval/webapp/node_modules/type-is/README.md +0 -170
  758. gaia/eval/webapp/node_modules/type-is/index.js +0 -266
  759. gaia/eval/webapp/node_modules/type-is/package.json +0 -45
  760. gaia/eval/webapp/node_modules/unpipe/HISTORY.md +0 -4
  761. gaia/eval/webapp/node_modules/unpipe/LICENSE +0 -22
  762. gaia/eval/webapp/node_modules/unpipe/README.md +0 -43
  763. gaia/eval/webapp/node_modules/unpipe/index.js +0 -69
  764. gaia/eval/webapp/node_modules/unpipe/package.json +0 -27
  765. gaia/eval/webapp/node_modules/util/LICENSE +0 -18
  766. gaia/eval/webapp/node_modules/util/README.md +0 -15
  767. gaia/eval/webapp/node_modules/util/node_modules/inherits/LICENSE +0 -16
  768. gaia/eval/webapp/node_modules/util/node_modules/inherits/README.md +0 -42
  769. gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits.js +0 -7
  770. gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits_browser.js +0 -23
  771. gaia/eval/webapp/node_modules/util/node_modules/inherits/package.json +0 -29
  772. gaia/eval/webapp/node_modules/util/package.json +0 -35
  773. gaia/eval/webapp/node_modules/util/support/isBuffer.js +0 -3
  774. gaia/eval/webapp/node_modules/util/support/isBufferBrowser.js +0 -6
  775. gaia/eval/webapp/node_modules/util/util.js +0 -586
  776. gaia/eval/webapp/node_modules/utils-merge/.npmignore +0 -9
  777. gaia/eval/webapp/node_modules/utils-merge/LICENSE +0 -20
  778. gaia/eval/webapp/node_modules/utils-merge/README.md +0 -34
  779. gaia/eval/webapp/node_modules/utils-merge/index.js +0 -23
  780. gaia/eval/webapp/node_modules/utils-merge/package.json +0 -40
  781. gaia/eval/webapp/node_modules/vary/HISTORY.md +0 -39
  782. gaia/eval/webapp/node_modules/vary/LICENSE +0 -22
  783. gaia/eval/webapp/node_modules/vary/README.md +0 -101
  784. gaia/eval/webapp/node_modules/vary/index.js +0 -149
  785. gaia/eval/webapp/node_modules/vary/package.json +0 -43
  786. {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/WHEEL +0 -0
  787. {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/licenses/LICENSE.md +0 -0
  788. {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/top_level.txt +0 -0
@@ -1,1298 +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
- var hasSymbols = require('has-symbols');
9
- var mockProperty = require('mock-property');
10
- var emptyTestCases = require('./empty-keys-cases').emptyTestCases;
11
- var hasBigInt = typeof BigInt === 'function';
12
-
13
- test('stringify()', function (t) {
14
- t.test('stringifies a querystring object', function (st) {
15
- st.equal(qs.stringify({ a: 'b' }), 'a=b');
16
- st.equal(qs.stringify({ a: 1 }), 'a=1');
17
- st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2');
18
- st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z');
19
- st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC');
20
- st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80');
21
- st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90');
22
- st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7');
23
- st.end();
24
- });
25
-
26
- t.test('stringifies falsy values', function (st) {
27
- st.equal(qs.stringify(undefined), '');
28
- st.equal(qs.stringify(null), '');
29
- st.equal(qs.stringify(null, { strictNullHandling: true }), '');
30
- st.equal(qs.stringify(false), '');
31
- st.equal(qs.stringify(0), '');
32
- st.end();
33
- });
34
-
35
- t.test('stringifies symbols', { skip: !hasSymbols() }, function (st) {
36
- st.equal(qs.stringify(Symbol.iterator), '');
37
- st.equal(qs.stringify([Symbol.iterator]), '0=Symbol%28Symbol.iterator%29');
38
- st.equal(qs.stringify({ a: Symbol.iterator }), 'a=Symbol%28Symbol.iterator%29');
39
- st.equal(
40
- qs.stringify({ a: [Symbol.iterator] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
41
- 'a[]=Symbol%28Symbol.iterator%29'
42
- );
43
- st.end();
44
- });
45
-
46
- t.test('stringifies bigints', { skip: !hasBigInt }, function (st) {
47
- var three = BigInt(3);
48
- var encodeWithN = function (value, defaultEncoder, charset) {
49
- var result = defaultEncoder(value, defaultEncoder, charset);
50
- return typeof value === 'bigint' ? result + 'n' : result;
51
- };
52
- st.equal(qs.stringify(three), '');
53
- st.equal(qs.stringify([three]), '0=3');
54
- st.equal(qs.stringify([three], { encoder: encodeWithN }), '0=3n');
55
- st.equal(qs.stringify({ a: three }), 'a=3');
56
- st.equal(qs.stringify({ a: three }, { encoder: encodeWithN }), 'a=3n');
57
- st.equal(
58
- qs.stringify({ a: [three] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
59
- 'a[]=3'
60
- );
61
- st.equal(
62
- qs.stringify({ a: [three] }, { encodeValuesOnly: true, encoder: encodeWithN, arrayFormat: 'brackets' }),
63
- 'a[]=3n'
64
- );
65
- st.end();
66
- });
67
-
68
- t.test('encodes dot in key of object when encodeDotInKeys and allowDots is provided', function (st) {
69
- st.equal(
70
- qs.stringify(
71
- { 'name.obj': { first: 'John', last: 'Doe' } },
72
- { allowDots: false, encodeDotInKeys: false }
73
- ),
74
- 'name.obj%5Bfirst%5D=John&name.obj%5Blast%5D=Doe',
75
- 'with allowDots false and encodeDotInKeys false'
76
- );
77
- st.equal(
78
- qs.stringify(
79
- { 'name.obj': { first: 'John', last: 'Doe' } },
80
- { allowDots: true, encodeDotInKeys: false }
81
- ),
82
- 'name.obj.first=John&name.obj.last=Doe',
83
- 'with allowDots true and encodeDotInKeys false'
84
- );
85
- st.equal(
86
- qs.stringify(
87
- { 'name.obj': { first: 'John', last: 'Doe' } },
88
- { allowDots: false, encodeDotInKeys: true }
89
- ),
90
- 'name%252Eobj%5Bfirst%5D=John&name%252Eobj%5Blast%5D=Doe',
91
- 'with allowDots false and encodeDotInKeys true'
92
- );
93
- st.equal(
94
- qs.stringify(
95
- { 'name.obj': { first: 'John', last: 'Doe' } },
96
- { allowDots: true, encodeDotInKeys: true }
97
- ),
98
- 'name%252Eobj.first=John&name%252Eobj.last=Doe',
99
- 'with allowDots true and encodeDotInKeys true'
100
- );
101
-
102
- st.equal(
103
- qs.stringify(
104
- { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
105
- { allowDots: false, encodeDotInKeys: false }
106
- ),
107
- 'name.obj.subobject%5Bfirst.godly.name%5D=John&name.obj.subobject%5Blast%5D=Doe',
108
- 'with allowDots false and encodeDotInKeys false'
109
- );
110
- st.equal(
111
- qs.stringify(
112
- { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
113
- { allowDots: true, encodeDotInKeys: false }
114
- ),
115
- 'name.obj.subobject.first.godly.name=John&name.obj.subobject.last=Doe',
116
- 'with allowDots false and encodeDotInKeys false'
117
- );
118
- st.equal(
119
- qs.stringify(
120
- { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
121
- { allowDots: false, encodeDotInKeys: true }
122
- ),
123
- 'name%252Eobj%252Esubobject%5Bfirst.godly.name%5D=John&name%252Eobj%252Esubobject%5Blast%5D=Doe',
124
- 'with allowDots false and encodeDotInKeys true'
125
- );
126
- st.equal(
127
- qs.stringify(
128
- { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
129
- { allowDots: true, encodeDotInKeys: true }
130
- ),
131
- 'name%252Eobj%252Esubobject.first%252Egodly%252Ename=John&name%252Eobj%252Esubobject.last=Doe',
132
- 'with allowDots true and encodeDotInKeys true'
133
- );
134
-
135
- st.end();
136
- });
137
-
138
- 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) {
139
- st.equal(
140
- qs.stringify(
141
- { 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } },
142
- { encodeDotInKeys: true }
143
- ),
144
- 'name%252Eobj%252Esubobject.first%252Egodly%252Ename=John&name%252Eobj%252Esubobject.last=Doe',
145
- 'with allowDots undefined and encodeDotInKeys true'
146
- );
147
- st.end();
148
- });
149
-
150
- t.test('should encode dot in key of object when encodeDotInKeys and allowDots is provided, and nothing else when encodeValuesOnly is provided', function (st) {
151
- st.equal(
152
- qs.stringify({ 'name.obj': { first: 'John', last: 'Doe' } }, {
153
- encodeDotInKeys: true, allowDots: true, encodeValuesOnly: true
154
- }),
155
- 'name%2Eobj.first=John&name%2Eobj.last=Doe'
156
- );
157
-
158
- st.equal(
159
- qs.stringify({ 'name.obj.subobject': { 'first.godly.name': 'John', last: 'Doe' } }, { allowDots: true, encodeDotInKeys: true, encodeValuesOnly: true }),
160
- 'name%2Eobj%2Esubobject.first%2Egodly%2Ename=John&name%2Eobj%2Esubobject.last=Doe'
161
- );
162
-
163
- st.end();
164
- });
165
-
166
- t.test('throws when `commaRoundTrip` is not a boolean', function (st) {
167
- st['throws'](
168
- function () { qs.stringify({}, { commaRoundTrip: 'not a boolean' }); },
169
- TypeError,
170
- 'throws when `commaRoundTrip` is not a boolean'
171
- );
172
-
173
- st.end();
174
- });
175
-
176
- t.test('throws when `encodeDotInKeys` is not a boolean', function (st) {
177
- st['throws'](
178
- function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: 'foobar' }); },
179
- TypeError
180
- );
181
-
182
- st['throws'](
183
- function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: 0 }); },
184
- TypeError
185
- );
186
-
187
- st['throws'](
188
- function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: NaN }); },
189
- TypeError
190
- );
191
-
192
- st['throws'](
193
- function () { qs.stringify({ a: [], b: 'zz' }, { encodeDotInKeys: null }); },
194
- TypeError
195
- );
196
-
197
- st.end();
198
- });
199
-
200
- t.test('adds query prefix', function (st) {
201
- st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b');
202
- st.end();
203
- });
204
-
205
- t.test('with query prefix, outputs blank string given an empty object', function (st) {
206
- st.equal(qs.stringify({}, { addQueryPrefix: true }), '');
207
- st.end();
208
- });
209
-
210
- t.test('stringifies nested falsy values', function (st) {
211
- st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D=');
212
- st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D');
213
- st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false');
214
- st.end();
215
- });
216
-
217
- t.test('stringifies a nested object', function (st) {
218
- st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
219
- st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e');
220
- st.end();
221
- });
222
-
223
- t.test('`allowDots` option: stringifies a nested object with dots notation', function (st) {
224
- st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c');
225
- st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e');
226
- st.end();
227
- });
228
-
229
- t.test('stringifies an array value', function (st) {
230
- st.equal(
231
- qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }),
232
- 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d',
233
- 'indices => indices'
234
- );
235
- st.equal(
236
- qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }),
237
- 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d',
238
- 'brackets => brackets'
239
- );
240
- st.equal(
241
- qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }),
242
- 'a=b%2Cc%2Cd',
243
- 'comma => comma'
244
- );
245
- st.equal(
246
- qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma', commaRoundTrip: true }),
247
- 'a=b%2Cc%2Cd',
248
- 'comma round trip => comma'
249
- );
250
- st.equal(
251
- qs.stringify({ a: ['b', 'c', 'd'] }),
252
- 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d',
253
- 'default => indices'
254
- );
255
- st.end();
256
- });
257
-
258
- t.test('`skipNulls` option', function (st) {
259
- st.equal(
260
- qs.stringify({ a: 'b', c: null }, { skipNulls: true }),
261
- 'a=b',
262
- 'omits nulls when asked'
263
- );
264
-
265
- st.equal(
266
- qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }),
267
- 'a%5Bb%5D=c',
268
- 'omits nested nulls when asked'
269
- );
270
-
271
- st.end();
272
- });
273
-
274
- t.test('omits array indices when asked', function (st) {
275
- st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d');
276
-
277
- st.end();
278
- });
279
-
280
- t.test('omits object key/value pair when value is empty array', function (st) {
281
- st.equal(qs.stringify({ a: [], b: 'zz' }), 'b=zz');
282
-
283
- st.end();
284
- });
285
-
286
- t.test('should not omit object key/value pair when value is empty array and when asked', function (st) {
287
- st.equal(qs.stringify({ a: [], b: 'zz' }), 'b=zz');
288
- st.equal(qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: false }), 'b=zz');
289
- st.equal(qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: true }), 'a[]&b=zz');
290
-
291
- st.end();
292
- });
293
-
294
- t.test('should throw when allowEmptyArrays is not of type boolean', function (st) {
295
- st['throws'](
296
- function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: 'foobar' }); },
297
- TypeError
298
- );
299
-
300
- st['throws'](
301
- function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: 0 }); },
302
- TypeError
303
- );
304
-
305
- st['throws'](
306
- function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: NaN }); },
307
- TypeError
308
- );
309
-
310
- st['throws'](
311
- function () { qs.stringify({ a: [], b: 'zz' }, { allowEmptyArrays: null }); },
312
- TypeError
313
- );
314
-
315
- st.end();
316
- });
317
-
318
- t.test('allowEmptyArrays + strictNullHandling', function (st) {
319
- st.equal(
320
- qs.stringify(
321
- { testEmptyArray: [] },
322
- { strictNullHandling: true, allowEmptyArrays: true }
323
- ),
324
- 'testEmptyArray[]'
325
- );
326
-
327
- st.end();
328
- });
329
-
330
- t.test('stringifies an array value with one item vs multiple items', function (st) {
331
- st.test('non-array item', function (s2t) {
332
- s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a=c');
333
- s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a=c');
334
- s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c');
335
- s2t.equal(qs.stringify({ a: 'c' }, { encodeValuesOnly: true }), 'a=c');
336
-
337
- s2t.end();
338
- });
339
-
340
- st.test('array with a single item', function (s2t) {
341
- s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0]=c');
342
- s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=c');
343
- s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c');
344
- s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true, arrayFormat: 'comma', commaRoundTrip: true }), 'a[]=c'); // so it parses back as an array
345
- s2t.equal(qs.stringify({ a: ['c'] }, { encodeValuesOnly: true }), 'a[0]=c');
346
-
347
- s2t.end();
348
- });
349
-
350
- st.test('array with multiple items', function (s2t) {
351
- s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0]=c&a[1]=d');
352
- s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=c&a[]=d');
353
- s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c,d');
354
- s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true, arrayFormat: 'comma', commaRoundTrip: true }), 'a=c,d');
355
- s2t.equal(qs.stringify({ a: ['c', 'd'] }, { encodeValuesOnly: true }), 'a[0]=c&a[1]=d');
356
-
357
- s2t.end();
358
- });
359
-
360
- st.test('array with multiple items with a comma inside', function (s2t) {
361
- s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=c%2Cd,e');
362
- s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { arrayFormat: 'comma' }), 'a=c%2Cd%2Ce');
363
-
364
- s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { encodeValuesOnly: true, arrayFormat: 'comma', commaRoundTrip: true }), 'a=c%2Cd,e');
365
- s2t.equal(qs.stringify({ a: ['c,d', 'e'] }, { arrayFormat: 'comma', commaRoundTrip: true }), 'a=c%2Cd%2Ce');
366
-
367
- s2t.end();
368
- });
369
-
370
- st.end();
371
- });
372
-
373
- t.test('stringifies a nested array value', function (st) {
374
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[b][0]=c&a[b][1]=d');
375
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[b][]=c&a[b][]=d');
376
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a[b]=c,d');
377
- st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true }), 'a[b][0]=c&a[b][1]=d');
378
- st.end();
379
- });
380
-
381
- t.test('stringifies comma and empty array values', function (st) {
382
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'indices' }), 'a[0]=,&a[1]=&a[2]=c,d%');
383
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'brackets' }), 'a[]=,&a[]=&a[]=c,d%');
384
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'comma' }), 'a=,,,c,d%');
385
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: false, arrayFormat: 'repeat' }), 'a=,&a=&a=c,d%');
386
-
387
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0]=%2C&a[1]=&a[2]=c%2Cd%25');
388
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=%2C&a[]=&a[]=c%2Cd%25');
389
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=%2C,,c%2Cd%25');
390
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a=%2C&a=&a=c%2Cd%25');
391
-
392
- 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');
393
- 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');
394
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: false, arrayFormat: 'comma' }), 'a=%2C%2C%2Cc%2Cd%25');
395
- st.equal(qs.stringify({ a: [',', '', 'c,d%'] }, { encode: true, encodeValuesOnly: false, arrayFormat: 'repeat' }), 'a=%2C&a=&a=c%2Cd%25');
396
-
397
- st.end();
398
- });
399
-
400
- t.test('stringifies comma and empty non-array values', function (st) {
401
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'indices' }), 'a=,&b=&c=c,d%');
402
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'brackets' }), 'a=,&b=&c=c,d%');
403
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'comma' }), 'a=,&b=&c=c,d%');
404
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: false, arrayFormat: 'repeat' }), 'a=,&b=&c=c,d%');
405
-
406
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'indices' }), 'a=%2C&b=&c=c%2Cd%25');
407
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a=%2C&b=&c=c%2Cd%25');
408
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'comma' }), 'a=%2C&b=&c=c%2Cd%25');
409
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a=%2C&b=&c=c%2Cd%25');
410
-
411
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'indices' }), 'a=%2C&b=&c=c%2Cd%25');
412
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'brackets' }), 'a=%2C&b=&c=c%2Cd%25');
413
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'comma' }), 'a=%2C&b=&c=c%2Cd%25');
414
- st.equal(qs.stringify({ a: ',', b: '', c: 'c,d%' }, { encode: true, encodeValuesOnly: false, arrayFormat: 'repeat' }), 'a=%2C&b=&c=c%2Cd%25');
415
-
416
- st.end();
417
- });
418
-
419
- t.test('stringifies a nested array value with dots notation', function (st) {
420
- st.equal(
421
- qs.stringify(
422
- { a: { b: ['c', 'd'] } },
423
- { allowDots: true, encodeValuesOnly: true, arrayFormat: 'indices' }
424
- ),
425
- 'a.b[0]=c&a.b[1]=d',
426
- 'indices: stringifies with dots + indices'
427
- );
428
- st.equal(
429
- qs.stringify(
430
- { a: { b: ['c', 'd'] } },
431
- { allowDots: true, encodeValuesOnly: true, arrayFormat: 'brackets' }
432
- ),
433
- 'a.b[]=c&a.b[]=d',
434
- 'brackets: stringifies with dots + brackets'
435
- );
436
- st.equal(
437
- qs.stringify(
438
- { a: { b: ['c', 'd'] } },
439
- { allowDots: true, encodeValuesOnly: true, arrayFormat: 'comma' }
440
- ),
441
- 'a.b=c,d',
442
- 'comma: stringifies with dots + comma'
443
- );
444
- st.equal(
445
- qs.stringify(
446
- { a: { b: ['c', 'd'] } },
447
- { allowDots: true, encodeValuesOnly: true }
448
- ),
449
- 'a.b[0]=c&a.b[1]=d',
450
- 'default: stringifies with dots + indices'
451
- );
452
- st.end();
453
- });
454
-
455
- t.test('stringifies an object inside an array', function (st) {
456
- st.equal(
457
- qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices', encodeValuesOnly: true }),
458
- 'a[0][b]=c',
459
- 'indices => indices'
460
- );
461
- st.equal(
462
- qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'repeat', encodeValuesOnly: true }),
463
- 'a[b]=c',
464
- 'repeat => repeat'
465
- );
466
- st.equal(
467
- qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets', encodeValuesOnly: true }),
468
- 'a[][b]=c',
469
- 'brackets => brackets'
470
- );
471
- st.equal(
472
- qs.stringify({ a: [{ b: 'c' }] }, { encodeValuesOnly: true }),
473
- 'a[0][b]=c',
474
- 'default => indices'
475
- );
476
-
477
- st.equal(
478
- qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices', encodeValuesOnly: true }),
479
- 'a[0][b][c][0]=1',
480
- 'indices => indices'
481
- );
482
- st.equal(
483
- qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'repeat', encodeValuesOnly: true }),
484
- 'a[b][c]=1',
485
- 'repeat => repeat'
486
- );
487
- st.equal(
488
- qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets', encodeValuesOnly: true }),
489
- 'a[][b][c][]=1',
490
- 'brackets => brackets'
491
- );
492
- st.equal(
493
- qs.stringify({ a: [{ b: { c: [1] } }] }, { encodeValuesOnly: true }),
494
- 'a[0][b][c][0]=1',
495
- 'default => indices'
496
- );
497
-
498
- st.end();
499
- });
500
-
501
- t.test('stringifies an array with mixed objects and primitives', function (st) {
502
- st.equal(
503
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'indices' }),
504
- 'a[0][b]=1&a[1]=2&a[2]=3',
505
- 'indices => indices'
506
- );
507
- st.equal(
508
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
509
- 'a[][b]=1&a[]=2&a[]=3',
510
- 'brackets => brackets'
511
- );
512
- st.equal(
513
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'comma' }),
514
- '???',
515
- 'brackets => brackets',
516
- { skip: 'TODO: figure out what this should do' }
517
- );
518
- st.equal(
519
- qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true }),
520
- 'a[0][b]=1&a[1]=2&a[2]=3',
521
- 'default => indices'
522
- );
523
-
524
- st.end();
525
- });
526
-
527
- t.test('stringifies an object inside an array with dots notation', function (st) {
528
- st.equal(
529
- qs.stringify(
530
- { a: [{ b: 'c' }] },
531
- { allowDots: true, encode: false, arrayFormat: 'indices' }
532
- ),
533
- 'a[0].b=c',
534
- 'indices => indices'
535
- );
536
- st.equal(
537
- qs.stringify(
538
- { a: [{ b: 'c' }] },
539
- { allowDots: true, encode: false, arrayFormat: 'brackets' }
540
- ),
541
- 'a[].b=c',
542
- 'brackets => brackets'
543
- );
544
- st.equal(
545
- qs.stringify(
546
- { a: [{ b: 'c' }] },
547
- { allowDots: true, encode: false }
548
- ),
549
- 'a[0].b=c',
550
- 'default => indices'
551
- );
552
-
553
- st.equal(
554
- qs.stringify(
555
- { a: [{ b: { c: [1] } }] },
556
- { allowDots: true, encode: false, arrayFormat: 'indices' }
557
- ),
558
- 'a[0].b.c[0]=1',
559
- 'indices => indices'
560
- );
561
- st.equal(
562
- qs.stringify(
563
- { a: [{ b: { c: [1] } }] },
564
- { allowDots: true, encode: false, arrayFormat: 'brackets' }
565
- ),
566
- 'a[].b.c[]=1',
567
- 'brackets => brackets'
568
- );
569
- st.equal(
570
- qs.stringify(
571
- { a: [{ b: { c: [1] } }] },
572
- { allowDots: true, encode: false }
573
- ),
574
- 'a[0].b.c[0]=1',
575
- 'default => indices'
576
- );
577
-
578
- st.end();
579
- });
580
-
581
- t.test('does not omit object keys when indices = false', function (st) {
582
- st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c');
583
- st.end();
584
- });
585
-
586
- t.test('uses indices notation for arrays when indices=true', function (st) {
587
- st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c');
588
- st.end();
589
- });
590
-
591
- t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) {
592
- st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c');
593
- st.end();
594
- });
595
-
596
- t.test('uses indices notation for arrays when arrayFormat=indices', function (st) {
597
- st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c');
598
- st.end();
599
- });
600
-
601
- t.test('uses repeat notation for arrays when arrayFormat=repeat', function (st) {
602
- st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c');
603
- st.end();
604
- });
605
-
606
- t.test('uses brackets notation for arrays when arrayFormat=brackets', function (st) {
607
- st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c');
608
- st.end();
609
- });
610
-
611
- t.test('stringifies a complicated object', function (st) {
612
- st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e');
613
- st.end();
614
- });
615
-
616
- t.test('stringifies an empty value', function (st) {
617
- st.equal(qs.stringify({ a: '' }), 'a=');
618
- st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a');
619
-
620
- st.equal(qs.stringify({ a: '', b: '' }), 'a=&b=');
621
- st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b=');
622
-
623
- st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D=');
624
- st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D');
625
- st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D=');
626
-
627
- st.end();
628
- });
629
-
630
- t.test('stringifies an empty array in different arrayFormat', function (st) {
631
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false }), 'b[0]=&c=c');
632
- // arrayFormat default
633
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'indices' }), 'b[0]=&c=c');
634
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'brackets' }), 'b[]=&c=c');
635
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'repeat' }), 'b=&c=c');
636
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma' }), 'b=&c=c');
637
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', commaRoundTrip: true }), 'b[]=&c=c');
638
- // with strictNullHandling
639
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'indices', strictNullHandling: true }), 'b[0]&c=c');
640
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'brackets', strictNullHandling: true }), 'b[]&c=c');
641
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'repeat', strictNullHandling: true }), 'b&c=c');
642
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', strictNullHandling: true }), 'b&c=c');
643
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', strictNullHandling: true, commaRoundTrip: true }), 'b[]&c=c');
644
- // with skipNulls
645
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'indices', skipNulls: true }), 'c=c');
646
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'brackets', skipNulls: true }), 'c=c');
647
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'repeat', skipNulls: true }), 'c=c');
648
- st.equal(qs.stringify({ a: [], b: [null], c: 'c' }, { encode: false, arrayFormat: 'comma', skipNulls: true }), 'c=c');
649
-
650
- st.end();
651
- });
652
-
653
- t.test('stringifies a null object', { skip: !Object.create }, function (st) {
654
- var obj = Object.create(null);
655
- obj.a = 'b';
656
- st.equal(qs.stringify(obj), 'a=b');
657
- st.end();
658
- });
659
-
660
- t.test('returns an empty string for invalid input', function (st) {
661
- st.equal(qs.stringify(undefined), '');
662
- st.equal(qs.stringify(false), '');
663
- st.equal(qs.stringify(null), '');
664
- st.equal(qs.stringify(''), '');
665
- st.end();
666
- });
667
-
668
- t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) {
669
- var obj = { a: Object.create(null) };
670
-
671
- obj.a.b = 'c';
672
- st.equal(qs.stringify(obj), 'a%5Bb%5D=c');
673
- st.end();
674
- });
675
-
676
- t.test('drops keys with a value of undefined', function (st) {
677
- st.equal(qs.stringify({ a: undefined }), '');
678
-
679
- st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D');
680
- st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D=');
681
- st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D=');
682
- st.end();
683
- });
684
-
685
- t.test('url encodes values', function (st) {
686
- st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
687
- st.end();
688
- });
689
-
690
- t.test('stringifies a date', function (st) {
691
- var now = new Date();
692
- var str = 'a=' + encodeURIComponent(now.toISOString());
693
- st.equal(qs.stringify({ a: now }), str);
694
- st.end();
695
- });
696
-
697
- t.test('stringifies the weird object from qs', function (st) {
698
- 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');
699
- st.end();
700
- });
701
-
702
- t.test('skips properties that are part of the object prototype', function (st) {
703
- st.intercept(Object.prototype, 'crash', { value: 'test' });
704
-
705
- st.equal(qs.stringify({ a: 'b' }), 'a=b');
706
- st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
707
-
708
- st.end();
709
- });
710
-
711
- t.test('stringifies boolean values', function (st) {
712
- st.equal(qs.stringify({ a: true }), 'a=true');
713
- st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true');
714
- st.equal(qs.stringify({ b: false }), 'b=false');
715
- st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false');
716
- st.end();
717
- });
718
-
719
- t.test('stringifies buffer values', function (st) {
720
- st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test');
721
- st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test');
722
- st.end();
723
- });
724
-
725
- t.test('stringifies an object using an alternative delimiter', function (st) {
726
- st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d');
727
- st.end();
728
- });
729
-
730
- t.test('does not blow up when Buffer global is missing', function (st) {
731
- var restore = mockProperty(global, 'Buffer', { 'delete': true });
732
-
733
- var result = qs.stringify({ a: 'b', c: 'd' });
734
-
735
- restore();
736
-
737
- st.equal(result, 'a=b&c=d');
738
- st.end();
739
- });
740
-
741
- t.test('does not crash when parsing circular references', function (st) {
742
- var a = {};
743
- a.b = a;
744
-
745
- st['throws'](
746
- function () { qs.stringify({ 'foo[bar]': 'baz', 'foo[baz]': a }); },
747
- /RangeError: Cyclic object value/,
748
- 'cyclic values throw'
749
- );
750
-
751
- var circular = {
752
- a: 'value'
753
- };
754
- circular.a = circular;
755
- st['throws'](
756
- function () { qs.stringify(circular); },
757
- /RangeError: Cyclic object value/,
758
- 'cyclic values throw'
759
- );
760
-
761
- var arr = ['a'];
762
- st.doesNotThrow(
763
- function () { qs.stringify({ x: arr, y: arr }); },
764
- 'non-cyclic values do not throw'
765
- );
766
-
767
- st.end();
768
- });
769
-
770
- t.test('non-circular duplicated references can still work', function (st) {
771
- var hourOfDay = {
772
- 'function': 'hour_of_day'
773
- };
774
-
775
- var p1 = {
776
- 'function': 'gte',
777
- arguments: [hourOfDay, 0]
778
- };
779
- var p2 = {
780
- 'function': 'lte',
781
- arguments: [hourOfDay, 23]
782
- };
783
-
784
- st.equal(
785
- qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true, arrayFormat: 'indices' }),
786
- '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'
787
- );
788
- st.equal(
789
- qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true, arrayFormat: 'brackets' }),
790
- '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'
791
- );
792
- st.equal(
793
- qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true, arrayFormat: 'repeat' }),
794
- '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'
795
- );
796
-
797
- st.end();
798
- });
799
-
800
- t.test('selects properties when filter=array', function (st) {
801
- st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b');
802
- st.equal(qs.stringify({ a: 1 }, { filter: [] }), '');
803
-
804
- st.equal(
805
- qs.stringify(
806
- { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
807
- { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' }
808
- ),
809
- 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3',
810
- 'indices => indices'
811
- );
812
- st.equal(
813
- qs.stringify(
814
- { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
815
- { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' }
816
- ),
817
- 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3',
818
- 'brackets => brackets'
819
- );
820
- st.equal(
821
- qs.stringify(
822
- { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' },
823
- { filter: ['a', 'b', 0, 2] }
824
- ),
825
- 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3',
826
- 'default => indices'
827
- );
828
-
829
- st.end();
830
- });
831
-
832
- t.test('supports custom representations when filter=function', function (st) {
833
- var calls = 0;
834
- var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } };
835
- var filterFunc = function (prefix, value) {
836
- calls += 1;
837
- if (calls === 1) {
838
- st.equal(prefix, '', 'prefix is empty');
839
- st.equal(value, obj);
840
- } else if (prefix === 'c') {
841
- return void 0;
842
- } else if (value instanceof Date) {
843
- st.equal(prefix, 'e[f]');
844
- return value.getTime();
845
- }
846
- return value;
847
- };
848
-
849
- st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000');
850
- st.equal(calls, 5);
851
- st.end();
852
- });
853
-
854
- t.test('can disable uri encoding', function (st) {
855
- st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b');
856
- st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c');
857
- st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c');
858
- st.end();
859
- });
860
-
861
- t.test('can sort the keys', function (st) {
862
- var sort = function (a, b) {
863
- return a.localeCompare(b);
864
- };
865
- st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y');
866
- 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');
867
- st.end();
868
- });
869
-
870
- t.test('can sort the keys at depth 3 or more too', function (st) {
871
- var sort = function (a, b) {
872
- return a.localeCompare(b);
873
- };
874
- st.equal(
875
- qs.stringify(
876
- { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' },
877
- { sort: sort, encode: false }
878
- ),
879
- 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb'
880
- );
881
- st.equal(
882
- qs.stringify(
883
- { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' },
884
- { sort: null, encode: false }
885
- ),
886
- 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b'
887
- );
888
- st.end();
889
- });
890
-
891
- t.test('can stringify with custom encoding', function (st) {
892
- st.equal(qs.stringify({ 県: '大阪府', '': '' }, {
893
- encoder: function (str) {
894
- if (str.length === 0) {
895
- return '';
896
- }
897
- var buf = iconv.encode(str, 'shiftjis');
898
- var result = [];
899
- for (var i = 0; i < buf.length; ++i) {
900
- result.push(buf.readUInt8(i).toString(16));
901
- }
902
- return '%' + result.join('%');
903
- }
904
- }), '%8c%a7=%91%e5%8d%e3%95%7b&=');
905
- st.end();
906
- });
907
-
908
- t.test('receives the default encoder as a second argument', function (st) {
909
- st.plan(8);
910
-
911
- qs.stringify({ a: 1, b: new Date(), c: true, d: [1] }, {
912
- encoder: function (str) {
913
- st.match(typeof str, /^(?:string|number|boolean)$/);
914
- return '';
915
- }
916
- });
917
-
918
- st.end();
919
- });
920
-
921
- t.test('receives the default encoder as a second argument', function (st) {
922
- st.plan(2);
923
-
924
- qs.stringify({ a: 1 }, {
925
- encoder: function (str, defaultEncoder) {
926
- st.equal(defaultEncoder, utils.encode);
927
- }
928
- });
929
-
930
- st.end();
931
- });
932
-
933
- t.test('throws error with wrong encoder', function (st) {
934
- st['throws'](function () {
935
- qs.stringify({}, { encoder: 'string' });
936
- }, new TypeError('Encoder has to be a function.'));
937
- st.end();
938
- });
939
-
940
- t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) {
941
- st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, {
942
- encoder: function (buffer) {
943
- if (typeof buffer === 'string') {
944
- return buffer;
945
- }
946
- return String.fromCharCode(buffer.readUInt8(0) + 97);
947
- }
948
- }), 'a=b');
949
-
950
- st.equal(qs.stringify({ a: SaferBuffer.from('a b') }, {
951
- encoder: function (buffer) {
952
- return buffer;
953
- }
954
- }), 'a=a b');
955
- st.end();
956
- });
957
-
958
- t.test('serializeDate option', function (st) {
959
- var date = new Date();
960
- st.equal(
961
- qs.stringify({ a: date }),
962
- 'a=' + date.toISOString().replace(/:/g, '%3A'),
963
- 'default is toISOString'
964
- );
965
-
966
- var mutatedDate = new Date();
967
- mutatedDate.toISOString = function () {
968
- throw new SyntaxError();
969
- };
970
- st['throws'](function () {
971
- mutatedDate.toISOString();
972
- }, SyntaxError);
973
- st.equal(
974
- qs.stringify({ a: mutatedDate }),
975
- 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'),
976
- 'toISOString works even when method is not locally present'
977
- );
978
-
979
- var specificDate = new Date(6);
980
- st.equal(
981
- qs.stringify(
982
- { a: specificDate },
983
- { serializeDate: function (d) { return d.getTime() * 7; } }
984
- ),
985
- 'a=42',
986
- 'custom serializeDate function called'
987
- );
988
-
989
- st.equal(
990
- qs.stringify(
991
- { a: [date] },
992
- {
993
- serializeDate: function (d) { return d.getTime(); },
994
- arrayFormat: 'comma'
995
- }
996
- ),
997
- 'a=' + date.getTime(),
998
- 'works with arrayFormat comma'
999
- );
1000
- st.equal(
1001
- qs.stringify(
1002
- { a: [date] },
1003
- {
1004
- serializeDate: function (d) { return d.getTime(); },
1005
- arrayFormat: 'comma',
1006
- commaRoundTrip: true
1007
- }
1008
- ),
1009
- 'a%5B%5D=' + date.getTime(),
1010
- 'works with arrayFormat comma'
1011
- );
1012
-
1013
- st.end();
1014
- });
1015
-
1016
- t.test('RFC 1738 serialization', function (st) {
1017
- st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c');
1018
- st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d');
1019
- st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC1738 }), 'a+b=a+b');
1020
-
1021
- st.equal(qs.stringify({ 'foo(ref)': 'bar' }, { format: qs.formats.RFC1738 }), 'foo(ref)=bar');
1022
-
1023
- st.end();
1024
- });
1025
-
1026
- t.test('RFC 3986 spaces serialization', function (st) {
1027
- st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c');
1028
- st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d');
1029
- st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC3986 }), 'a%20b=a%20b');
1030
-
1031
- st.end();
1032
- });
1033
-
1034
- t.test('Backward compatibility to RFC 3986', function (st) {
1035
- st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
1036
- st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }), 'a%20b=a%20b');
1037
-
1038
- st.end();
1039
- });
1040
-
1041
- t.test('Edge cases and unknown formats', function (st) {
1042
- ['UFO1234', false, 1234, null, {}, []].forEach(function (format) {
1043
- st['throws'](
1044
- function () {
1045
- qs.stringify({ a: 'b c' }, { format: format });
1046
- },
1047
- new TypeError('Unknown format option provided.')
1048
- );
1049
- });
1050
- st.end();
1051
- });
1052
-
1053
- t.test('encodeValuesOnly', function (st) {
1054
- st.equal(
1055
- qs.stringify(
1056
- { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
1057
- { encodeValuesOnly: true, arrayFormat: 'indices' }
1058
- ),
1059
- 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h',
1060
- 'encodeValuesOnly + indices'
1061
- );
1062
- st.equal(
1063
- qs.stringify(
1064
- { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
1065
- { encodeValuesOnly: true, arrayFormat: 'brackets' }
1066
- ),
1067
- 'a=b&c[]=d&c[]=e%3Df&f[][]=g&f[][]=h',
1068
- 'encodeValuesOnly + brackets'
1069
- );
1070
- st.equal(
1071
- qs.stringify(
1072
- { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
1073
- { encodeValuesOnly: true, arrayFormat: 'repeat' }
1074
- ),
1075
- 'a=b&c=d&c=e%3Df&f=g&f=h',
1076
- 'encodeValuesOnly + repeat'
1077
- );
1078
-
1079
- st.equal(
1080
- qs.stringify(
1081
- { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] },
1082
- { arrayFormat: 'indices' }
1083
- ),
1084
- 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h',
1085
- 'no encodeValuesOnly + indices'
1086
- );
1087
- st.equal(
1088
- qs.stringify(
1089
- { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] },
1090
- { arrayFormat: 'brackets' }
1091
- ),
1092
- 'a=b&c%5B%5D=d&c%5B%5D=e&f%5B%5D%5B%5D=g&f%5B%5D%5B%5D=h',
1093
- 'no encodeValuesOnly + brackets'
1094
- );
1095
- st.equal(
1096
- qs.stringify(
1097
- { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] },
1098
- { arrayFormat: 'repeat' }
1099
- ),
1100
- 'a=b&c=d&c=e&f=g&f=h',
1101
- 'no encodeValuesOnly + repeat'
1102
- );
1103
-
1104
- st.end();
1105
- });
1106
-
1107
- t.test('encodeValuesOnly - strictNullHandling', function (st) {
1108
- st.equal(
1109
- qs.stringify(
1110
- { a: { b: null } },
1111
- { encodeValuesOnly: true, strictNullHandling: true }
1112
- ),
1113
- 'a[b]'
1114
- );
1115
- st.end();
1116
- });
1117
-
1118
- t.test('throws if an invalid charset is specified', function (st) {
1119
- st['throws'](function () {
1120
- qs.stringify({ a: 'b' }, { charset: 'foobar' });
1121
- }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'));
1122
- st.end();
1123
- });
1124
-
1125
- t.test('respects a charset of iso-8859-1', function (st) {
1126
- st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6');
1127
- st.end();
1128
- });
1129
-
1130
- t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) {
1131
- st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B');
1132
- st.end();
1133
- });
1134
-
1135
- t.test('respects an explicit charset of utf-8 (the default)', function (st) {
1136
- st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6');
1137
- st.end();
1138
- });
1139
-
1140
- t.test('`charsetSentinel` option', function (st) {
1141
- st.equal(
1142
- qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }),
1143
- 'utf8=%E2%9C%93&a=%C3%A6',
1144
- 'adds the right sentinel when instructed to and the charset is utf-8'
1145
- );
1146
-
1147
- st.equal(
1148
- qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }),
1149
- 'utf8=%26%2310003%3B&a=%E6',
1150
- 'adds the right sentinel when instructed to and the charset is iso-8859-1'
1151
- );
1152
-
1153
- st.end();
1154
- });
1155
-
1156
- t.test('does not mutate the options argument', function (st) {
1157
- var options = {};
1158
- qs.stringify({}, options);
1159
- st.deepEqual(options, {});
1160
- st.end();
1161
- });
1162
-
1163
- t.test('strictNullHandling works with custom filter', function (st) {
1164
- var filter = function (prefix, value) {
1165
- return value;
1166
- };
1167
-
1168
- var options = { strictNullHandling: true, filter: filter };
1169
- st.equal(qs.stringify({ key: null }, options), 'key');
1170
- st.end();
1171
- });
1172
-
1173
- t.test('strictNullHandling works with null serializeDate', function (st) {
1174
- var serializeDate = function () {
1175
- return null;
1176
- };
1177
- var options = { strictNullHandling: true, serializeDate: serializeDate };
1178
- var date = new Date();
1179
- st.equal(qs.stringify({ key: date }, options), 'key');
1180
- st.end();
1181
- });
1182
-
1183
- t.test('allows for encoding keys and values differently', function (st) {
1184
- var encoder = function (str, defaultEncoder, charset, type) {
1185
- if (type === 'key') {
1186
- return defaultEncoder(str, defaultEncoder, charset, type).toLowerCase();
1187
- }
1188
- if (type === 'value') {
1189
- return defaultEncoder(str, defaultEncoder, charset, type).toUpperCase();
1190
- }
1191
- throw 'this should never happen! type: ' + type;
1192
- };
1193
-
1194
- st.deepEqual(qs.stringify({ KeY: 'vAlUe' }, { encoder: encoder }), 'key=VALUE');
1195
- st.end();
1196
- });
1197
-
1198
- t.test('objects inside arrays', function (st) {
1199
- var obj = { a: { b: { c: 'd', e: 'f' } } };
1200
- var withArray = { a: { b: [{ c: 'd', e: 'f' }] } };
1201
-
1202
- st.equal(qs.stringify(obj, { encode: false }), 'a[b][c]=d&a[b][e]=f', 'no array, no arrayFormat');
1203
- st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'brackets' }), 'a[b][c]=d&a[b][e]=f', 'no array, bracket');
1204
- st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'indices' }), 'a[b][c]=d&a[b][e]=f', 'no array, indices');
1205
- st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'repeat' }), 'a[b][c]=d&a[b][e]=f', 'no array, repeat');
1206
- st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'comma' }), 'a[b][c]=d&a[b][e]=f', 'no array, comma');
1207
-
1208
- st.equal(qs.stringify(withArray, { encode: false }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, no arrayFormat');
1209
- st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'brackets' }), 'a[b][][c]=d&a[b][][e]=f', 'array, bracket');
1210
- st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'indices' }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, indices');
1211
- st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'repeat' }), 'a[b][c]=d&a[b][e]=f', 'array, repeat');
1212
- st.equal(
1213
- qs.stringify(withArray, { encode: false, arrayFormat: 'comma' }),
1214
- '???',
1215
- 'array, comma',
1216
- { skip: 'TODO: figure out what this should do' }
1217
- );
1218
-
1219
- st.end();
1220
- });
1221
-
1222
- t.test('stringifies sparse arrays', function (st) {
1223
- /* eslint no-sparse-arrays: 0 */
1224
- st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1]=2&a[4]=1');
1225
- st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[]=2&a[]=1');
1226
- st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a=2&a=1');
1227
-
1228
- st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1][b][2][c]=1');
1229
- st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][b][][c]=1');
1230
- st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a[b][c]=1');
1231
-
1232
- st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1][2][3][c]=1');
1233
- st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][][][c]=1');
1234
- st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a[c]=1');
1235
-
1236
- st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[1][2][3][c][1]=1');
1237
- st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][][][c][]=1');
1238
- st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true, arrayFormat: 'repeat' }), 'a[c]=1');
1239
-
1240
- st.end();
1241
- });
1242
-
1243
- t.test('encodes a very long string', function (st) {
1244
- var chars = [];
1245
- var expected = [];
1246
- for (var i = 0; i < 5e3; i++) {
1247
- chars.push(' ' + i);
1248
-
1249
- expected.push('%20' + i);
1250
- }
1251
-
1252
- var obj = {
1253
- foo: chars.join('')
1254
- };
1255
-
1256
- st.equal(
1257
- qs.stringify(obj, { arrayFormat: 'bracket', charset: 'utf-8' }),
1258
- 'foo=' + expected.join('')
1259
- );
1260
-
1261
- st.end();
1262
- });
1263
-
1264
- t.end();
1265
- });
1266
-
1267
- test('stringifies empty keys', function (t) {
1268
- emptyTestCases.forEach(function (testCase) {
1269
- t.test('stringifies an object with empty string key with ' + testCase.input, function (st) {
1270
- st.deepEqual(
1271
- qs.stringify(testCase.withEmptyKeys, { encode: false, arrayFormat: 'indices' }),
1272
- testCase.stringifyOutput.indices,
1273
- 'test case: ' + testCase.input + ', indices'
1274
- );
1275
- st.deepEqual(
1276
- qs.stringify(testCase.withEmptyKeys, { encode: false, arrayFormat: 'brackets' }),
1277
- testCase.stringifyOutput.brackets,
1278
- 'test case: ' + testCase.input + ', brackets'
1279
- );
1280
- st.deepEqual(
1281
- qs.stringify(testCase.withEmptyKeys, { encode: false, arrayFormat: 'repeat' }),
1282
- testCase.stringifyOutput.repeat,
1283
- 'test case: ' + testCase.input + ', repeat'
1284
- );
1285
-
1286
- st.end();
1287
- });
1288
- });
1289
-
1290
- t.test('edge case with object/arrays', function (st) {
1291
- st.deepEqual(qs.stringify({ '': { '': [2, 3] } }, { encode: false }), '[][0]=2&[][1]=3');
1292
- st.deepEqual(qs.stringify({ '': { '': [2, 3], a: 2 } }, { encode: false }), '[][0]=2&[][1]=3&[a]=2');
1293
- st.deepEqual(qs.stringify({ '': { '': [2, 3] } }, { encode: false, arrayFormat: 'indices' }), '[][0]=2&[][1]=3');
1294
- st.deepEqual(qs.stringify({ '': { '': [2, 3], a: 2 } }, { encode: false, arrayFormat: 'indices' }), '[][0]=2&[][1]=3&[a]=2');
1295
-
1296
- st.end();
1297
- });
1298
- });