@skyramp/mcp 0.4.1 → 0.4.2-rc.2

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 (583) hide show
  1. package/build/commands/localDevTestChangesCommand.js +2 -1
  2. package/build/commands/recommendTestsAndExecuteCommand.js +15 -7
  3. package/build/commands/testThisEndpointCommand.js +35 -6
  4. package/build/execution/wrapperConfig.d.ts +56 -0
  5. package/build/execution/wrapperConfig.js +155 -0
  6. package/build/index.js +40 -10
  7. package/build/playwright/blueprintDigest.js +28 -7
  8. package/build/playwright/registerPlaywrightTools.js +47 -28
  9. package/build/playwright/traceExportStore.d.ts +22 -0
  10. package/build/playwright/traceExportStore.js +81 -0
  11. package/build/playwright/traceRecordingPrompt.js +11 -3
  12. package/build/prompts/code-reuse.js +118 -49
  13. package/build/prompts/fix-error-prompt.d.ts +9 -1
  14. package/build/prompts/fix-error-prompt.js +31 -28
  15. package/build/prompts/local-dev/local-dev-plan.d.ts +3 -0
  16. package/build/prompts/local-dev/local-dev-plan.js +8 -23
  17. package/build/prompts/local-dev/local-dev-prompts.d.ts +1 -1
  18. package/build/prompts/local-dev/local-dev-prompts.js +31 -4
  19. package/build/prompts/modularization/integration-test-modularization.js +13 -6
  20. package/build/prompts/modularization/ui-test-modularization.js +1 -1
  21. package/build/prompts/personas.js +1 -1
  22. package/build/prompts/pom-aware-code-reuse.js +7 -9
  23. package/build/prompts/reuse-hand-off.d.ts +64 -0
  24. package/build/prompts/reuse-hand-off.js +130 -0
  25. package/build/prompts/shared-helper-policy.d.ts +124 -2
  26. package/build/prompts/shared-helper-policy.js +178 -12
  27. package/build/prompts/startTraceCollectionPrompts.js +1 -1
  28. package/build/prompts/sut-setup/modes/adaptWorkflowPrompt.js +7 -8
  29. package/build/prompts/sut-setup/modes/dockerComposePrompt.js +1 -1
  30. package/build/prompts/sut-setup/shared.d.ts +4 -1
  31. package/build/prompts/sut-setup/shared.js +6 -4
  32. package/build/prompts/test-maintenance/actionsInstructions.d.ts +19 -11
  33. package/build/prompts/test-maintenance/actionsInstructions.js +47 -26
  34. package/build/prompts/test-maintenance/drift-analysis-prompt.d.ts +16 -8
  35. package/build/prompts/test-maintenance/drift-analysis-prompt.js +93 -38
  36. package/build/prompts/test-maintenance/driftAnalysisSections.js +5 -3
  37. package/build/prompts/test-maintenance/driftAnalysisShared.js +4 -2
  38. package/build/prompts/test-maintenance/uiDriftAnalysisSections.js +8 -5
  39. package/build/prompts/test-recommendation/recommendationSections.js +19 -8
  40. package/build/prompts/test-recommendation/recommendationShared.d.ts +1 -1
  41. package/build/prompts/test-recommendation/recommendationShared.js +0 -1
  42. package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +5 -2
  43. package/build/prompts/test-recommendation/test-recommendation-prompt.js +10 -7
  44. package/build/prompts/testbot/testbot-prompts.js +133 -63
  45. package/build/recommendation/answers.js +18 -9
  46. package/build/recommendation/pullRequestText.js +1 -1
  47. package/build/recommendation/registerPlan.js +31 -17
  48. package/build/recommendation/subjectStep.d.ts +8 -10
  49. package/build/recommendation/subjectStep.js +17 -16
  50. package/build/recommendation/types.d.ts +71 -17
  51. package/build/recommendation/types.js +9 -15
  52. package/build/recommendation/verifierContracts.d.ts +7 -3
  53. package/build/recommendation/verifierContracts.js +8 -4
  54. package/build/recommendation/verifiers/changedFile.js +11 -13
  55. package/build/recommendation/verifiers/citedPath.d.ts +8 -0
  56. package/build/recommendation/verifiers/citedPath.js +16 -2
  57. package/build/recommendation/verifiers/coverage.d.ts +2 -2
  58. package/build/recommendation/verifiers/coverage.js +190 -134
  59. package/build/recommendation/verifiers/defects.js +56 -16
  60. package/build/recommendation/verifiers/deliveredMatchesPlan.d.ts +7 -1
  61. package/build/recommendation/verifiers/deliveredMatchesPlan.js +28 -14
  62. package/build/recommendation/verifiers/endpointGrounded.js +14 -8
  63. package/build/recommendation/verifiers/existingCoverage.d.ts +6 -0
  64. package/build/recommendation/verifiers/existingCoverage.js +30 -21
  65. package/build/recommendation/verifiers/expectedOutcome.js +17 -8
  66. package/build/recommendation/verifiers/expectedValueSourced.js +54 -43
  67. package/build/recommendation/verifiers/issueTraceability.d.ts +5 -0
  68. package/build/recommendation/verifiers/issueTraceability.js +64 -7
  69. package/build/recommendation/verifiers/removedElementGuarded.js +19 -11
  70. package/build/recommendation/verifiers/reportedCategory.js +9 -4
  71. package/build/recommendation/verifiers/requirementSourced.js +34 -21
  72. package/build/recommendation/verifiers/screenRoute.js +15 -10
  73. package/build/recommendation/verifiers/statedDifference.js +15 -8
  74. package/build/recommendation/verifiers/uiElementGrounded.js +50 -16
  75. package/build/resources/analysisResources.js +7 -3
  76. package/build/resources/progressResource.js +4 -2
  77. package/build/resources/sutSetupResource.js +20 -2
  78. package/build/resources/testbotResource.js +19 -1
  79. package/build/services/AnalyticsService.js +3 -1
  80. package/build/services/ScenarioGenerationService.js +5 -5
  81. package/build/services/TestDiscoveryService.js +53 -9
  82. package/build/services/TestExecutionService.js +63 -21
  83. package/build/services/TestGenerationService.d.ts +1 -1
  84. package/build/services/TestGenerationService.js +43 -24
  85. package/build/skills/enhanceAssertionsSkill.d.ts +45 -0
  86. package/build/skills/enhanceAssertionsSkill.js +103 -0
  87. package/build/skills/fixTestImportErrorsSkill.d.ts +2 -2
  88. package/build/skills/fixTestImportErrorsSkill.js +2 -2
  89. package/build/skills/runTestSkill.d.ts +6 -0
  90. package/build/skills/runTestSkill.js +17 -0
  91. package/build/skills/skillFiles.d.ts +38 -0
  92. package/build/skills/skillFiles.js +94 -0
  93. package/build/skills/validateAssertionAlignmentSkill.d.ts +34 -0
  94. package/build/skills/validateAssertionAlignmentSkill.js +59 -0
  95. package/build/tool-phases.js +4 -1
  96. package/build/tools/auth/loginTool.js +3 -1
  97. package/build/tools/auth/logoutTool.js +3 -1
  98. package/build/tools/budgetExcuse.d.ts +15 -0
  99. package/build/tools/budgetExcuse.js +113 -0
  100. package/build/tools/code-refactor/alignAssertionsTool.d.ts +2 -0
  101. package/build/tools/code-refactor/alignAssertionsTool.js +51 -0
  102. package/build/tools/code-refactor/assertion-state.d.ts +1 -1
  103. package/build/tools/code-refactor/assertion-state.js +1 -1
  104. package/build/tools/code-refactor/assertionOperations.d.ts +44 -0
  105. package/build/tools/code-refactor/assertionOperations.js +82 -0
  106. package/build/tools/code-refactor/assertionSkillTools.d.ts +3 -0
  107. package/build/tools/code-refactor/assertionSkillTools.js +86 -0
  108. package/build/tools/code-refactor/codeReuseTool.js +27 -3
  109. package/build/tools/code-refactor/enhanceAssertionsTool.js +19 -83
  110. package/build/tools/code-refactor/gate-markers.d.ts +51 -0
  111. package/build/tools/code-refactor/gate-markers.js +95 -0
  112. package/build/tools/code-refactor/retrofit-state.d.ts +3 -1
  113. package/build/tools/code-refactor/retrofit-state.js +44 -2
  114. package/build/tools/code-refactor/reuse-outcome.d.ts +23 -1
  115. package/build/tools/code-refactor/reuse-outcome.js +36 -13
  116. package/build/tools/code-refactor/reuse-state.d.ts +90 -16
  117. package/build/tools/code-refactor/reuse-state.js +191 -61
  118. package/build/tools/code-refactor/utils-verify-gates.d.ts +4 -0
  119. package/build/tools/code-refactor/utils-verify-gates.js +269 -30
  120. package/build/tools/code-refactor/verify-gates.d.ts +15 -1
  121. package/build/tools/code-refactor/verify-gates.js +36 -4
  122. package/build/tools/enrichTestWithMocksTool.d.ts +1 -1
  123. package/build/tools/enrichTestWithMocksTool.js +9 -5
  124. package/build/tools/executeSkyrampTestTool.d.ts +118 -48
  125. package/build/tools/executeSkyrampTestTool.js +998 -372
  126. package/build/tools/execution-video-state.js +1 -1
  127. package/build/tools/fixErrorTool.js +5 -6
  128. package/build/tools/generate-tests/batchMockGenerationTool.js +1 -1
  129. package/build/tools/generate-tests/generateBatchScenarioRestTool.js +114 -73
  130. package/build/tools/generate-tests/generateContractRestTool.js +34 -16
  131. package/build/tools/generate-tests/generateE2ERestTool.d.ts +1 -0
  132. package/build/tools/generate-tests/generateE2ERestTool.js +9 -1
  133. package/build/tools/generate-tests/generateIntegrationRestTool.js +22 -7
  134. package/build/tools/generate-tests/generateMockRestTool.js +3 -1
  135. package/build/tools/generate-tests/generateUIRestTool.d.ts +2 -0
  136. package/build/tools/generate-tests/generateUIRestTool.js +11 -2
  137. package/build/tools/generate-tests/loadTestSchema.js +1 -3
  138. package/build/tools/generate-tests/planGuard.js +6 -3
  139. package/build/tools/generate-tests/scenarioFileIdentity.js +4 -1
  140. package/build/tools/generate-tests/scenarioLint.js +17 -5
  141. package/build/tools/generate-tests/trace-reuse-guard.js +5 -2
  142. package/build/tools/generateEnrichedIntegrationTestTool.js +9 -3
  143. package/build/tools/one-click/oneClickTool.js +3 -1
  144. package/build/tools/preflightMockCheckTool.js +23 -7
  145. package/build/tools/submitReportTool.d.ts +51 -12
  146. package/build/tools/submitReportTool.js +988 -161
  147. package/build/tools/test-management/actionsTool.js +241 -51
  148. package/build/tools/test-management/analyzeChangesTool.d.ts +8 -9
  149. package/build/tools/test-management/analyzeChangesTool.js +127 -68
  150. package/build/tools/test-management/analyzeTestHealthTool.d.ts +0 -11
  151. package/build/tools/test-management/analyzeTestHealthTool.js +42 -76
  152. package/build/tools/test-management/registerTestPlanTool.d.ts +44 -34
  153. package/build/tools/test-management/registerTestPlanTool.js +255 -111
  154. package/build/tools/test-management/resolveScreenTool.js +33 -9
  155. package/build/tools/test-management/testsOwedBeforeRun.d.ts +28 -0
  156. package/build/tools/test-management/testsOwedBeforeRun.js +53 -0
  157. package/build/tools/trace/startTraceCollectionTool.js +3 -1
  158. package/build/tools/trace/stopTraceCollectionTool.js +42 -6
  159. package/build/tools/verifyTestDependenciesTool.d.ts +3 -0
  160. package/build/tools/verifyTestDependenciesTool.js +54 -0
  161. package/build/tools/workspace/initScanWorkspaceTool.js +9 -3
  162. package/build/tools/workspace/initializeWorkspaceTool.js +3 -1
  163. package/build/types/AssertionOutcome.d.ts +1 -1
  164. package/build/types/EnhanceType.d.ts +6 -0
  165. package/build/types/EnhanceType.js +1 -0
  166. package/build/types/RepositoryAnalysis.d.ts +32 -72
  167. package/build/types/ReuseOutcome.d.ts +100 -7
  168. package/build/types/ReuseOutcome.js +16 -0
  169. package/build/types/StepMethod.js +20 -6
  170. package/build/types/TestAnalysis.d.ts +10 -2
  171. package/build/types/TestExecution.d.ts +45 -0
  172. package/build/types/TestRecommendation.d.ts +1 -1
  173. package/build/types/TestRecommendation.js +4 -1
  174. package/build/types/TestTypes.d.ts +16 -0
  175. package/build/types/TestTypes.js +40 -3
  176. package/build/types/TestbotPromptOptions.d.ts +9 -1
  177. package/build/types/TestbotReport.d.ts +45 -9
  178. package/build/utils/AnalysisStateManager.d.ts +137 -34
  179. package/build/utils/AnalysisStateManager.js +228 -44
  180. package/build/utils/assertion-verify/api-shared-lints.js +34 -16
  181. package/build/utils/assertion-verify/metrics.js +39 -6
  182. package/build/utils/assertion-verify/ui-lints.js +4 -2
  183. package/build/utils/branchDiff.js +47 -12
  184. package/build/utils/canonicalJson.js +3 -1
  185. package/build/utils/connectionErrors.d.ts +10 -0
  186. package/build/utils/connectionErrors.js +10 -0
  187. package/build/utils/dartRouteExtractor.js +36 -7
  188. package/build/utils/fixAttempts.d.ts +26 -0
  189. package/build/utils/fixAttempts.js +109 -0
  190. package/build/utils/frontendSelectors.js +23 -4
  191. package/build/utils/generatedTestRecord.d.ts +19 -0
  192. package/build/utils/generatedTestRecord.js +61 -0
  193. package/build/utils/gitStaging.js +7 -2
  194. package/build/utils/initAgent.js +26 -6
  195. package/build/utils/language-helper.js +60 -45
  196. package/build/utils/pathMatching.js +2 -1
  197. package/build/utils/pathSignatures.js +6 -2
  198. package/build/utils/planMatchKeys.d.ts +2 -2
  199. package/build/utils/planMatchKeys.js +20 -14
  200. package/build/utils/pom-catalog-parse.js +7 -2
  201. package/build/utils/pom-scope/import-expansion.js +6 -1
  202. package/build/utils/pom-scope/index.js +50 -12
  203. package/build/utils/pom-scope/scoring.js +13 -3
  204. package/build/utils/pom-scope/selector-extractor.js +16 -3
  205. package/build/utils/pom-scope/strip.d.ts +8 -0
  206. package/build/utils/pom-scope/strip.js +238 -0
  207. package/build/utils/pom-scope/testIdDiscovery.js +14 -2
  208. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.d.ts +1 -1
  209. package/build/utils/pom-verify/__fixtures__/af-style/asset-list.page.js +4 -2
  210. package/build/utils/pom-verify/__fixtures__/af-style/report.iframe.page.js +3 -1
  211. package/build/utils/pom-verify/__fixtures__/af-style/workflow-footer.page.js +3 -1
  212. package/build/utils/pom-verify/bindings.js +5 -1
  213. package/build/utils/pom-verify/calls.js +9 -2
  214. package/build/utils/pom-verify/verify.js +27 -5
  215. package/build/utils/pr-comment-parser.js +20 -7
  216. package/build/utils/progress.d.ts +1 -1
  217. package/build/utils/progress.js +1 -1
  218. package/build/utils/proxy-terminal.d.ts +19 -1
  219. package/build/utils/proxy-terminal.js +346 -21
  220. package/build/utils/rebaselineSnapshots.d.ts +1 -1
  221. package/build/utils/rebaselineSnapshots.js +6 -16
  222. package/build/utils/removedUiElements.js +1 -1
  223. package/build/utils/reportLanguage.js +35 -7
  224. package/build/utils/reportVerification.d.ts +14 -8
  225. package/build/utils/reportVerification.js +19 -19
  226. package/build/utils/repositorySlug.d.ts +32 -0
  227. package/build/utils/repositorySlug.js +77 -0
  228. package/build/utils/reuseRouting.d.ts +10 -0
  229. package/build/utils/reuseRouting.js +21 -2
  230. package/build/utils/runContextGauge.d.ts +27 -0
  231. package/build/utils/runContextGauge.js +181 -0
  232. package/build/utils/runSerialized.d.ts +3 -0
  233. package/build/utils/runSerialized.js +39 -0
  234. package/build/utils/screenRoutes.js +74 -18
  235. package/build/utils/skyrampMdContent.d.ts +1 -1
  236. package/build/utils/skyrampMdContent.js +1 -1
  237. package/build/utils/skyrampSdkVersion.d.ts +9 -0
  238. package/build/utils/skyrampSdkVersion.js +16 -0
  239. package/build/utils/sourceRouteExtractor.js +13 -6
  240. package/build/utils/telemetry.d.ts +1 -0
  241. package/build/utils/telemetry.js +8 -5
  242. package/build/utils/testDependencyPolicy.d.ts +9 -0
  243. package/build/utils/testDependencyPolicy.js +809 -0
  244. package/build/utils/testExecutionRecord.d.ts +94 -0
  245. package/build/utils/testExecutionRecord.js +269 -0
  246. package/build/utils/testFileClassification.d.ts +8 -0
  247. package/build/utils/testFileClassification.js +39 -4
  248. package/build/utils/trace-parser.js +62 -14
  249. package/build/utils/urlPath.js +3 -1
  250. package/build/utils/utils-verify/action-key.d.ts +46 -0
  251. package/build/utils/utils-verify/action-key.js +120 -38
  252. package/build/utils/utils-verify/action-sites.d.ts +32 -0
  253. package/build/utils/utils-verify/action-sites.js +202 -0
  254. package/build/utils/utils-verify/allow.d.ts +122 -3
  255. package/build/utils/utils-verify/allow.js +146 -21
  256. package/build/utils/utils-verify/body-reach.d.ts +120 -0
  257. package/build/utils/utils-verify/body-reach.js +333 -0
  258. package/build/utils/utils-verify/call-sites.d.ts +31 -7
  259. package/build/utils/utils-verify/call-sites.js +80 -13
  260. package/build/utils/utils-verify/delivered-imports.d.ts +43 -0
  261. package/build/utils/utils-verify/delivered-imports.js +84 -0
  262. package/build/utils/utils-verify/fixed-sleep.d.ts +96 -0
  263. package/build/utils/utils-verify/fixed-sleep.js +461 -0
  264. package/build/utils/utils-verify/in-house.d.ts +93 -0
  265. package/build/utils/utils-verify/in-house.js +719 -0
  266. package/build/utils/utils-verify/incumbent.d.ts +3 -0
  267. package/build/utils/utils-verify/incumbent.js +75 -0
  268. package/build/utils/utils-verify/index.d.ts +2 -0
  269. package/build/utils/utils-verify/index.js +2 -0
  270. package/build/utils/utils-verify/language-spec.d.ts +51 -10
  271. package/build/utils/utils-verify/language-spec.js +232 -21
  272. package/build/utils/utils-verify/locate.d.ts +26 -0
  273. package/build/utils/utils-verify/locate.js +125 -23
  274. package/build/utils/utils-verify/module-name.d.ts +40 -0
  275. package/build/utils/utils-verify/module-name.js +98 -0
  276. package/build/utils/utils-verify/parse.d.ts +56 -7
  277. package/build/utils/utils-verify/parse.js +195 -40
  278. package/build/utils/utils-verify/retrofit-equivalence.d.ts +5 -0
  279. package/build/utils/utils-verify/retrofit-equivalence.js +4 -2
  280. package/build/utils/utils-verify/stage.d.ts +5 -0
  281. package/build/utils/utils-verify/stage.js +47 -2
  282. package/build/utils/utils-verify/status-once.d.ts +62 -0
  283. package/build/utils/utils-verify/status-once.js +207 -0
  284. package/build/utils/utils-verify/typecheck.d.ts +61 -0
  285. package/build/utils/utils-verify/typecheck.js +338 -0
  286. package/build/utils/utils-verify/verify.d.ts +79 -3
  287. package/build/utils/utils-verify/verify.js +531 -61
  288. package/build/utils/versions.d.ts +3 -3
  289. package/build/utils/versions.js +1 -1
  290. package/build/utils/workspaceAuth.js +107 -37
  291. package/build/workspace/queryParamResolution.js +11 -4
  292. package/build/workspace/workspace.d.ts +72 -52
  293. package/build/workspace/workspace.js +19 -15
  294. package/node_modules/playwright/ThirdPartyNotices.txt +19 -19
  295. package/node_modules/playwright/lib/mcp/skyramp/assertTool.js +8 -2
  296. package/node_modules/playwright/lib/mcp/skyramp/common/cssValue.js +87 -0
  297. package/node_modules/playwright/lib/mcp/skyramp/loadTraceTool.js +31 -0
  298. package/node_modules/playwright/lib/mcp/skyramp/skyRampImport.js +3 -0
  299. package/node_modules/playwright/lib/mcp/skyramp/traceRecordingBackend.js +181 -15
  300. package/node_modules/playwright/lib/mcp/test/skyRampExport.js +24 -0
  301. package/node_modules/playwright/lib/transform/babelBundleImpl.js +2353 -190
  302. package/node_modules/playwright/node_modules/playwright-core/ThirdPartyNotices.txt +62 -34
  303. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/.package-lock.json +72 -41
  304. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.js +1 -1
  305. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/dist/serve-static.mjs +1 -1
  306. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/@hono/node-server/package.json +2 -2
  307. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/README.md +16 -1
  308. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/index.js +4 -20
  309. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/read.js +17 -17
  310. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/json.js +60 -32
  311. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/raw.js +3 -3
  312. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/text.js +3 -3
  313. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/types/urlencoded.js +16 -20
  314. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/lib/utils.js +18 -16
  315. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/LICENSE +22 -0
  316. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/README.md +71 -0
  317. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.d.ts +46 -0
  318. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js +176 -0
  319. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/dist/index.js.map +1 -0
  320. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/node_modules/content-type/package.json +52 -0
  321. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/body-parser/package.json +23 -10
  322. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/CHANGELOG.md +21 -14
  323. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/isObject.d.ts +1 -1
  324. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/package.json +6 -7
  325. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/es-object-atoms/tsconfig.json +1 -0
  326. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/index.js +266 -45
  327. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/schemes.js +9 -4
  328. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/lib/utils.js +396 -92
  329. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/package.json +1 -1
  330. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  331. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/equal.test.js +31 -3
  332. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  333. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  334. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  335. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  336. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  337. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/parse.test.js +7 -3
  338. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  339. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  340. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  341. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  342. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/security.test.js +301 -3
  343. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  344. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  345. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/CHANGELOG.md +7 -0
  346. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/index.d.ts +0 -1
  347. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hasown/package.json +4 -5
  348. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/client.js +30 -16
  349. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/client/utils.js +4 -1
  350. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/context.js +32 -13
  351. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  352. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
  353. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  354. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/ssg/utils.js +30 -10
  355. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/helper/streaming/sse.js +5 -4
  356. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/hono-base.js +10 -8
  357. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/base.js +44 -23
  358. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  359. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  360. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  361. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  362. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
  363. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +3 -3
  364. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  365. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
  366. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
  367. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/cors/index.js +17 -14
  368. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/csrf/index.js +1 -1
  369. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/digest.js +47 -1
  370. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/etag/index.js +7 -4
  371. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
  372. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
  373. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
  374. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
  375. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +3 -1
  376. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +16 -7
  377. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/request.js +20 -13
  378. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/linear-router/router.js +7 -2
  379. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/pattern-router/router.js +3 -9
  380. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +65 -59
  381. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +71 -128
  382. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +14 -5
  383. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/node.js +47 -70
  384. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/trie-router/router.js +3 -11
  385. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router/utils.js +27 -0
  386. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/router.js +1 -1
  387. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/accept.js +1 -1
  388. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/body.js +21 -3
  389. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/cookie.js +4 -3
  390. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/ipaddr.js +5 -3
  391. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/stream.js +12 -3
  392. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/cjs/utils/url.js +19 -11
  393. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/client.js +30 -16
  394. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/client/utils.js +4 -1
  395. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/context.js +32 -13
  396. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  397. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/proxy/index.js +4 -0
  398. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  399. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/ssg/utils.js +30 -10
  400. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/helper/streaming/sse.js +5 -4
  401. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/hono-base.js +10 -8
  402. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/base.js +41 -23
  403. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/components.js +26 -27
  404. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/context.js +6 -6
  405. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/render.js +2 -0
  406. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/dom/server.js +5 -1
  407. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/hooks/index.js +16 -13
  408. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/intrinsic-element/components.js +4 -4
  409. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/jsx/streaming.js +5 -6
  410. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cache/index.js +103 -8
  411. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/compress/index.js +5 -0
  412. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/cors/index.js +17 -14
  413. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/csrf/index.js +1 -1
  414. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/digest.js +47 -1
  415. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/etag/index.js +7 -4
  416. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
  417. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
  418. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/language/language.js +10 -6
  419. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
  420. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/pretty-json/index.js +3 -1
  421. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +16 -7
  422. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/request.js +21 -14
  423. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/linear-router/router.js +7 -2
  424. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/pattern-router/router.js +3 -9
  425. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/node.js +61 -58
  426. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/router.js +77 -129
  427. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/reg-exp-router/trie.js +14 -5
  428. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/node.js +47 -70
  429. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/trie-router/router.js +3 -11
  430. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router/utils.js +5 -0
  431. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/router.js +1 -1
  432. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +9 -0
  433. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/client/types.d.ts +1 -1
  434. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/context.d.ts +6 -2
  435. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/hono-base.d.ts +4 -3
  436. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/base.d.ts +7 -2
  437. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
  438. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
  439. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
  440. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
  441. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
  442. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
  443. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/combine/index.d.ts +1 -1
  444. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
  445. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
  446. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
  447. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
  448. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
  449. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  450. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +4 -1
  451. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
  452. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/node.d.ts +1 -2
  453. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/trie-router/router.d.ts +0 -1
  454. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  455. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/router.d.ts +1 -1
  456. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
  457. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/types/utils/url.d.ts +5 -0
  458. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/accept.js +1 -1
  459. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/body.js +21 -3
  460. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/cookie.js +5 -4
  461. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/ipaddr.js +5 -3
  462. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/stream.js +12 -3
  463. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/dist/utils/url.js +17 -10
  464. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/hono/package.json +11 -4
  465. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/README.md +173 -143
  466. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.d.ts +11 -0
  467. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/address-error.js.map +1 -1
  468. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.d.ts +49 -0
  469. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js +79 -4
  470. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/common.js.map +1 -1
  471. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  472. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js +119 -24
  473. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv4.js.map +1 -1
  474. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  475. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js +316 -90
  476. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/ipv6.js.map +1 -1
  477. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  478. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js +45 -2
  479. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  480. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  481. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js +50 -3
  482. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  483. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/ip-address/package.json +6 -4
  484. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  485. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/CHANGELOG.md +26 -0
  486. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/README.md +19 -1
  487. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/dist/qs.js +25 -25
  488. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/eslint.config.mjs +1 -1
  489. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/parse.js +16 -6
  490. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/stringify.js +23 -8
  491. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/lib/utils.js +57 -11
  492. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/package.json +8 -7
  493. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/parse.js +419 -0
  494. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/stringify.js +317 -0
  495. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/qs/test/utils.js +206 -0
  496. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/CHANGELOG.md +10 -0
  497. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/README.md +1 -1
  498. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/index.js +5 -2
  499. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/package.json +10 -10
  500. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/side-channel/test/index.js +16 -0
  501. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/index.js +8 -18
  502. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
  503. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/README.md +71 -0
  504. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.d.ts +46 -0
  505. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js +176 -0
  506. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
  507. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/node_modules/content-type/package.json +52 -0
  508. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/node_modules/type-is/package.json +9 -5
  509. package/node_modules/playwright/node_modules/playwright-core/bundles/mcp/package-lock.json +72 -41
  510. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/.package-lock.json +6 -6
  511. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/README.md +23 -1
  512. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/index.js +265 -86
  513. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/brace-expansion/package.json +1 -1
  514. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/README.md +173 -143
  515. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.d.ts +11 -0
  516. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/address-error.js.map +1 -1
  517. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.d.ts +49 -0
  518. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js +79 -4
  519. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/common.js.map +1 -1
  520. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.d.ts +78 -5
  521. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js +119 -24
  522. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv4.js.map +1 -1
  523. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.d.ts +151 -10
  524. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js +316 -90
  525. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/ipv6.js.map +1 -1
  526. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  527. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js +45 -2
  528. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  529. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  530. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js +50 -3
  531. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  532. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/node_modules/ip-address/package.json +6 -4
  533. package/node_modules/playwright/node_modules/playwright-core/bundles/utils/package-lock.json +6 -6
  534. package/node_modules/playwright/node_modules/playwright-core/lib/cli/program.js +18 -9
  535. package/node_modules/playwright/node_modules/playwright-core/lib/mcpBundleImpl/index.js +47 -47
  536. package/node_modules/playwright/node_modules/playwright-core/lib/server/codegen/skyramp/jsonlReader.js +3 -0
  537. package/node_modules/playwright/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +42 -0
  538. package/node_modules/playwright/node_modules/playwright-core/lib/utilsBundleImpl/index.js +121 -121
  539. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/{index.B7KbSQcC.js → index.BAkLd5DX.js} +1 -1
  540. package/node_modules/playwright/node_modules/playwright-core/lib/vite/traceViewer/index.html +1 -1
  541. package/node_modules/playwright/node_modules/playwright-core/package.json +1 -1
  542. package/node_modules/playwright/node_modules/playwright-core/src/cli/program.ts +31 -9
  543. package/node_modules/playwright/node_modules/playwright-core/src/server/codegen/skyramp/jsonlReader.ts +1 -0
  544. package/node_modules/playwright/node_modules/playwright-core/src/server/recorder/recorderRunner.ts +57 -1
  545. package/node_modules/playwright/package.json +2 -2
  546. package/package.json +7 -6
  547. package/plugin/prompts/code-reuse/hand-off.md +30 -0
  548. package/plugin/prompts/generate-tests/generation.md +1 -1
  549. package/plugin/prompts/plan-tests.md +14 -14
  550. package/plugin/prompts/testbot-task1.md +2 -2
  551. package/plugin/skills/enhance-assertions/SKILL.md +25 -0
  552. package/plugin/skills/enhance-assertions/reference/contract.md +51 -0
  553. package/plugin/skills/enhance-assertions/reference/integration.md +58 -0
  554. package/plugin/skills/enhance-assertions/reference/shared-rules.md +220 -0
  555. package/plugin/skills/enhance-assertions/reference/ui.md +373 -0
  556. package/plugin/skills/fix-test-import-errors/SKILL.md +45 -50
  557. package/plugin/skills/run-test/SKILL.md +16 -0
  558. package/plugin/skills/validate-assertion-alignment-post-execution/SKILL.md +32 -0
  559. package/plugin/skills/validate-assertion-alignment-post-execution/reference/checks.md +44 -0
  560. package/plugin/skills/validate-assertion-alignment-post-execution/reference/evidence.md +47 -0
  561. package/build/adapters/jestAdapter.d.ts +0 -14
  562. package/build/adapters/jestAdapter.js +0 -113
  563. package/build/adapters/mochaAdapter.d.ts +0 -13
  564. package/build/adapters/mochaAdapter.js +0 -87
  565. package/build/adapters/playwrightAdapter.d.ts +0 -17
  566. package/build/adapters/playwrightAdapter.js +0 -182
  567. package/build/adapters/pytestAdapter.d.ts +0 -15
  568. package/build/adapters/pytestAdapter.js +0 -108
  569. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.d.ts +0 -2
  570. package/build/prompts/enhance-assertions/contractProviderAssertionsPrompt.js +0 -29
  571. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.d.ts +0 -2
  572. package/build/prompts/enhance-assertions/integrationAssertionsPrompt.js +0 -36
  573. package/build/prompts/enhance-assertions/sharedAssertionRules.d.ts +0 -16
  574. package/build/prompts/enhance-assertions/sharedAssertionRules.js +0 -284
  575. package/build/prompts/enhance-assertions/uiAssertionsPrompt.d.ts +0 -2
  576. package/build/prompts/enhance-assertions/uiAssertionsPrompt.js +0 -388
  577. package/build/tools/runExistingTestsTool.d.ts +0 -138
  578. package/build/tools/runExistingTestsTool.js +0 -644
  579. package/build/types/ExternalTestExecution.d.ts +0 -67
  580. package/build/types/ExternalTestExecution.js +0 -8
  581. package/build/workspace/testSuites.d.ts +0 -20
  582. package/build/workspace/testSuites.js +0 -17
  583. package/node_modules/playwright/node_modules/playwright-core/.DS_Store +0 -0
@@ -0,0 +1,109 @@
1
+ 'use strict'
2
+
3
+ const test = require('tape')
4
+ const fastURI = require('..')
5
+
6
+ const PATH_RESERVED = "!$&'()*+,;=:@/"
7
+
8
+ function percentEncode (character, lowerCase) {
9
+ const hex = character.charCodeAt(0).toString(16).padStart(2, '0')
10
+ return '%' + (lowerCase ? hex : hex.toUpperCase())
11
+ }
12
+
13
+ test('normalize preserves literal and escaped reserved path characters', (t) => {
14
+ t.equal(
15
+ fastURI.normalize('http://example.com/a;b'),
16
+ 'http://example.com/a;b',
17
+ 'literal semicolon remains literal'
18
+ )
19
+ t.equal(
20
+ fastURI.normalize('http://example.com/a%3ab'),
21
+ 'http://example.com/a%3Ab',
22
+ 'escaped colon remains escaped and its hex is uppercased'
23
+ )
24
+
25
+ for (const character of PATH_RESERVED) {
26
+ const literal = `http://example.com/a${character}b`
27
+ const escaped = `http://example.com/a${percentEncode(character, true)}b`
28
+ const normalizedEscape = `http://example.com/a${percentEncode(character, false)}b`
29
+
30
+ t.equal(fastURI.normalize(literal), literal, `preserves literal ${character}`)
31
+ t.equal(fastURI.normalize(escaped), normalizedEscape, `preserves escaped ${character}`)
32
+ }
33
+
34
+ t.equal(
35
+ fastURI.normalize('http://example.com/a/./café'),
36
+ 'http://example.com/a/caf%C3%A9',
37
+ 'removes real dot segments and UTF-8 encodes raw non-ASCII'
38
+ )
39
+ t.equal(
40
+ fastURI.normalize('http://example.com/a/%2e%2e/b'),
41
+ 'http://example.com/a/%2E%2E/b',
42
+ 'preserves escaped dots as path data'
43
+ )
44
+ t.equal(
45
+ fastURI.normalize('http://example.com/Kſ'),
46
+ 'http://example.com/%E2%84%AA%C5%BF',
47
+ 'UTF-8 encodes Unicode characters that case-fold to ASCII'
48
+ )
49
+ t.end()
50
+ })
51
+
52
+ test('serialize uses the RFC 3986 path character set without opening escapes', (t) => {
53
+ const rawPath = `/a${PATH_RESERVED}b`
54
+ t.equal(
55
+ fastURI.serialize({ scheme: 'http', host: 'example.com', path: rawPath }),
56
+ `http://example.com${rawPath}`,
57
+ 'keeps all legal raw path characters'
58
+ )
59
+
60
+ const escapedPath = Array.from(PATH_RESERVED, (character) => percentEncode(character, true)).join('')
61
+ const normalizedEscapedPath = Array.from(PATH_RESERVED, (character) => percentEncode(character, false)).join('')
62
+ t.equal(
63
+ fastURI.serialize({ scheme: 'http', host: 'example.com', path: '/' + escapedPath }),
64
+ 'http://example.com/' + normalizedEscapedPath,
65
+ 'uppercases valid escapes without decoding reserved characters'
66
+ )
67
+
68
+ t.equal(
69
+ fastURI.serialize({ scheme: 'http', host: 'example.com', path: '/a?b#c[d]' }),
70
+ 'http://example.com/a%3Fb%23c%5Bd%5D',
71
+ 'encodes characters that would leave the path component'
72
+ )
73
+ t.equal(
74
+ fastURI.serialize({ path: 'a:b/c:d' }),
75
+ 'a%3Ab/c:d',
76
+ 'only escapes a colon where path-noscheme requires it'
77
+ )
78
+ t.equal(
79
+ fastURI.serialize({ path: './a:b/c:d' }),
80
+ 'a%3Ab/c:d',
81
+ 'escapes a first-segment colon exposed by dot-segment removal'
82
+ )
83
+ t.equal(
84
+ fastURI.normalize('./a:b'),
85
+ 'a%3Ab',
86
+ 'normalization keeps a relative path from becoming a scheme'
87
+ )
88
+ t.equal(
89
+ fastURI.serialize({ path: '/Kſ' }),
90
+ '/%E2%84%AA%C5%BF',
91
+ 'UTF-8 encodes Unicode characters that case-fold to ASCII'
92
+ )
93
+ t.end()
94
+ })
95
+
96
+ test('equal distinguishes escaped reserved path data from literal syntax', (t) => {
97
+ for (const character of PATH_RESERVED) {
98
+ const literal = `http://example.com/a${character}b`
99
+ const escaped = `http://example.com/a${percentEncode(character, false)}b`
100
+ t.equal(fastURI.equal(literal, escaped, {}), false, `distinguishes literal and escaped ${character}`)
101
+ }
102
+
103
+ t.equal(
104
+ fastURI.equal('./a:b', 'a:b', {}),
105
+ false,
106
+ 'does not equate a relative path with an absolute URI after removing dot segments'
107
+ )
108
+ t.end()
109
+ })
@@ -0,0 +1,124 @@
1
+ 'use strict'
2
+
3
+ const test = require('tape')
4
+ const fastURI = require('..')
5
+
6
+ const MALFORMED_SCHEME_ERROR = 'URI scheme is malformed.'
7
+
8
+ const malformedSchemes = [
9
+ '%2f%2fevil.example:/pwn',
10
+ '%u002f%u002fevil.example:/pwn',
11
+ '%0d%0aSet-Cookie:%20sid=attacker:/p',
12
+ 'foo%3Abar:value',
13
+ 'foo%2Fbar:value',
14
+ '1http://example.com/',
15
+ 'foo_bar:value',
16
+ 'éxample:value',
17
+ 'Kttp://example.com/',
18
+ 'ſcheme:value'
19
+ ]
20
+
21
+ test('parse validates the decoded scheme against RFC 3986', (t) => {
22
+ const validSchemes = [
23
+ ['a:value', 'a'],
24
+ ['HTTP://example.com/', 'http'],
25
+ ['a1+.-:value', 'a1+.-'],
26
+ ['%4Aavascript:alert(1)', 'javascript'],
27
+ ['foo%2Bbar:value', 'foo+bar'],
28
+ ['%u006Aavascript:1', 'javascript'],
29
+ ['ht%74ps://example.com/', 'https']
30
+ ]
31
+
32
+ for (const [uri, scheme] of validSchemes) {
33
+ const parsed = fastURI.parse(uri)
34
+ t.equal(parsed.error, undefined, uri)
35
+ t.equal(parsed.scheme, scheme, uri + ' scheme')
36
+ }
37
+
38
+ for (const uri of malformedSchemes) {
39
+ const parsed = fastURI.parse(uri)
40
+ t.equal(parsed.error, MALFORMED_SCHEME_ERROR, uri)
41
+ }
42
+ t.end()
43
+ })
44
+
45
+ test('decoded schemes select their scheme handlers', (t) => {
46
+ t.equal(
47
+ fastURI.normalize('ht%74ps://example.com:443'),
48
+ 'https://example.com/',
49
+ 'HTTP normalization runs after decoding the scheme'
50
+ )
51
+
52
+ // 3.x has no mailto scheme handler (added in v4); use the ws handler to
53
+ // verify that a percent-encoded scheme still selects its scheme handler
54
+ const ws = fastURI.parse('we%62socket://example.com/')
55
+ t.equal(ws.scheme, 'websocket', 'ws parsing runs after decoding the scheme')
56
+ t.end()
57
+ })
58
+
59
+ test('normalize preserves schemes that decode to invalid identifiers', (t) => {
60
+ for (const uri of malformedSchemes) {
61
+ t.equal(fastURI.normalize(uri), uri, uri)
62
+ }
63
+ t.end()
64
+ })
65
+
66
+ test('scheme normalization cannot introduce authority or control delimiters', (t) => {
67
+ const authority = '%2f%2fevil.example:/pwn'
68
+ const crlf = '%0d%0aSet-Cookie:%20sid=attacker:/p'
69
+
70
+ t.equal(fastURI.parse(authority).host, undefined, 'original input has no authority')
71
+ t.equal(fastURI.normalize(authority), authority, 'normalization does not create an authority')
72
+ t.equal(fastURI.normalize(crlf), crlf, 'normalization does not emit raw CRLF')
73
+ t.equal(fastURI.normalize(crlf).includes('\r\n'), false, 'normalized output contains no raw CRLF')
74
+ t.end()
75
+ })
76
+
77
+ test('equal returns false for malformed decoded schemes', (t) => {
78
+ for (const uri of malformedSchemes) {
79
+ t.equal(fastURI.equal(uri, uri, {}), false, uri)
80
+ }
81
+ t.end()
82
+ })
83
+
84
+ test('resolve rejects malformed decoded schemes in either input', (t) => {
85
+ t.throws(
86
+ () => fastURI.resolve('%2f%2fevil.example:/base', 'child'),
87
+ /URI scheme is malformed\./,
88
+ 'malformed base'
89
+ )
90
+ t.throws(
91
+ () => fastURI.resolve('https://allowed.example/app/', '%2f%2fevil.example:/pwn'),
92
+ /URI scheme is malformed\./,
93
+ 'malformed relative reference'
94
+ )
95
+ t.end()
96
+ })
97
+
98
+ test('serialize validates decoded component schemes', (t) => {
99
+ t.equal(
100
+ fastURI.serialize({ scheme: 'foo%2Bbar', path: 'value' }),
101
+ 'foo+bar:value',
102
+ 'valid decoded scheme is serialized'
103
+ )
104
+ t.throws(
105
+ () => fastURI.serialize({ scheme: '//evil.example', path: '/pwn' }),
106
+ /URI scheme is malformed\./,
107
+ 'raw invalid scheme'
108
+ )
109
+ t.throws(
110
+ () => fastURI.serialize({ scheme: '%2f%2fevil.example', path: '/pwn' }),
111
+ /URI scheme is malformed\./,
112
+ 'encoded invalid scheme'
113
+ )
114
+ t.equal(
115
+ fastURI.equal(
116
+ { scheme: '%2f%2fevil.example', path: '/pwn' },
117
+ { scheme: '%2f%2fevil.example', path: '/pwn' },
118
+ {}
119
+ ),
120
+ false,
121
+ 'equality fails closed for malformed component objects'
122
+ )
123
+ t.end()
124
+ })
@@ -37,3 +37,104 @@ test('equal does not treat reserved path escapes as live path syntax', (t) => {
37
37
 
38
38
  t.end()
39
39
  })
40
+
41
+ test('serialize preserves literal RFC 3986 reserved path characters', (t) => {
42
+ // GHSA-7mh8-fcmq-x23c: literal reserved path chars must not be rewritten to
43
+ // percent escapes by the escape()-style safe set.
44
+ const cases = [
45
+ 'http://example.com/a;b',
46
+ 'http://example.com/a=b',
47
+ 'http://example.com/a&b',
48
+ 'http://example.com/a$b',
49
+ 'http://example.com/a:b',
50
+ 'http://example.com/a@b'
51
+ ]
52
+
53
+ t.plan(cases.length)
54
+
55
+ cases.forEach((uri) => {
56
+ t.equal(fastURI.serialize(fastURI.parse(uri)), uri, uri)
57
+ })
58
+ t.end()
59
+ })
60
+
61
+ test('serialize preserves existing reserved path escapes as data', (t) => {
62
+ // GHSA-7mh8-fcmq-x23c: an existing %3A escape must stay %3A instead of being
63
+ // rewritten into a live colon.
64
+ const cases = [
65
+ 'http://example.com/a%3Ab',
66
+ 'http://example.com/a%3Bb',
67
+ 'http://example.com/a%3D%3D'
68
+ ]
69
+
70
+ t.plan(cases.length)
71
+
72
+ cases.forEach((uri) => {
73
+ t.equal(fastURI.serialize(fastURI.parse(uri)), uri, uri)
74
+ })
75
+ t.end()
76
+ })
77
+
78
+ test('serialize keeps path-noscheme colon escaping', (t) => {
79
+ // Without a scheme a literal colon would be reparsed as a scheme separator,
80
+ // so it must stay percent-escaped while an existing %3A is preserved.
81
+ t.equal(fastURI.serialize({ path: 'foo:bar' }), 'foo%3Abar')
82
+ t.equal(fastURI.serialize({ path: 'a%3Ab' }), 'a%3Ab')
83
+ t.end()
84
+ })
85
+
86
+ test('hostname normalization never decodes an escape more than once', (t) => {
87
+ const encodedLocalhost = 'http://%256c%256f%2563%2561%256c%2568%256f%2573%2574/'
88
+ const encodedLoopback = '//127%252e0%252e0%252e1/private'
89
+ const encodedMetadataAddress = '//169%252E254%252E169%252E254/latest/meta-data/'
90
+
91
+ t.equal(fastURI.normalize(encodedLocalhost), encodedLocalhost, 'nested hostname letters remain encoded')
92
+ t.equal(fastURI.normalize(encodedLoopback), encodedLoopback, 'nested IPv4 dots remain encoded')
93
+ t.equal(
94
+ fastURI.resolve('https://safe.example/', encodedLoopback),
95
+ 'https://127%252e0%252e0%252e1/private',
96
+ 'resolve does not turn nested dots into a loopback address'
97
+ )
98
+ t.equal(
99
+ fastURI.resolve('https://allowed.com/api/v1/', encodedMetadataAddress),
100
+ 'https://169%252e254%252e169%252e254/latest/meta-data/',
101
+ 'resolve does not turn nested dots into a metadata address'
102
+ )
103
+ t.equal(
104
+ fastURI.normalize('http://allowed.com%255Cevil.com/'),
105
+ 'http://allowed.com%255Cevil.com/',
106
+ 'normalize does not activate a nested backslash'
107
+ )
108
+ t.equal(
109
+ fastURI.serialize({ scheme: 'http', host: '%256cocalhost', path: '/' }),
110
+ 'http://%256cocalhost/',
111
+ 'component serialization preserves an encoded percent sign'
112
+ )
113
+ t.equal(
114
+ fastURI.equal(encodedLocalhost, 'http://localhost/', {}),
115
+ false,
116
+ 'nested escapes do not compare equal to their twice-decoded target'
117
+ )
118
+ t.end()
119
+ })
120
+
121
+ test('hostname normalization decodes only current unreserved escapes', (t) => {
122
+ t.equal(fastURI.normalize('x://%6cocalhost/'), 'x://localhost/', 'a current unreserved escape is decoded')
123
+ t.equal(fastURI.normalize('x://%256cocalhost/'), 'x://%256cocalhost/', 'an encoded percent is preserved')
124
+ t.equal(fastURI.normalize('x://host%2540evil/'), 'x://host%2540evil/', 'a nested authority delimiter stays inert')
125
+ t.equal(fastURI.normalize('x://%2525/'), 'x://%2525/', 'nested encoded percent signs stay encoded')
126
+ t.end()
127
+ })
128
+
129
+ test('host conversion failures are not treated as comparable URLs', (t) => {
130
+ const malformedHost = 'http://trusted.test%2540evil.test/'
131
+
132
+ t.equal(fastURI.normalize(malformedHost), malformedHost, 'normalization preserves the failing input')
133
+ t.equal(fastURI.equal(malformedHost, malformedHost, {}), false, 'equal rejects a failed host conversion')
134
+ t.throws(
135
+ () => fastURI.resolve(malformedHost, 'child', { domainHost: true }),
136
+ /Host's domain name can not be converted to ASCII/,
137
+ 'resolve propagates a host conversion failure'
138
+ )
139
+ t.end()
140
+ })
@@ -125,9 +125,307 @@ test('serialize escapes authority delimiters in host field', (t) => {
125
125
  })
126
126
 
127
127
  test('normalize does not double-decode %2540 into a live @', (t) => {
128
- const result = fastURI.normalize('http://trusted.com%2540evil.com/')
128
+ const input = 'http://trusted.com%2540evil.com/'
129
+ const result = fastURI.normalize(input)
129
130
  const parsed = fastURI.parse(result)
130
131
 
131
- t.plan(1)
132
- t.notEqual(parsed.host, 'trusted.com@evil.com', 'http://trusted.com%2540evil.com/')
132
+ t.plan(2)
133
+ t.equal(result, input, 'the encoded percent sign is preserved')
134
+ t.notEqual(parsed.host, 'trusted.com@evil.com', input)
135
+ })
136
+
137
+ test('parse canonicalises IDN / Unicode hosts to their ASCII form', (t) => {
138
+ const cases = [
139
+ {
140
+ input: 'http://127。0。0。1/',
141
+ expectedHost: '127.0.0.1',
142
+ description: 'full-width ideographic stops as octet separators'
143
+ },
144
+ {
145
+ input: 'http://example.com/',
146
+ expectedHost: 'example.com',
147
+ description: 'fullwidth e as first letter'
148
+ },
149
+ {
150
+ input: 'http://納豆.example.org/',
151
+ expectedHost: 'xn--99zt52a.example.org',
152
+ description: 'CJK label requiring punycode'
153
+ }
154
+ ]
155
+
156
+ t.plan(cases.length * 2)
157
+
158
+ cases.forEach(({ input, expectedHost, description }) => {
159
+ const parsed = fastURI.parse(input)
160
+ t.notOk(parsed.error, `parse should not set error: ${description}`)
161
+ t.equal(parsed.host, expectedHost, `host canonicalised to ASCII: ${description}`)
162
+ })
163
+ })
164
+
165
+ test('resolve canonicalises the host using the final resolved scheme', (t) => {
166
+ const cases = [
167
+ {
168
+ base: 'http://trusted.example/base',
169
+ relative: '//127\u30020\u30020\u30021/private',
170
+ expected: 'http://127.0.0.1/private',
171
+ expectedHost: '127.0.0.1',
172
+ description: 'scheme-relative loopback host'
173
+ },
174
+ {
175
+ base: 'https://ex\u00ADample.com/base',
176
+ relative: 'child',
177
+ expected: 'https://example.com/child',
178
+ expectedHost: 'example.com',
179
+ description: 'host inherited from the base'
180
+ },
181
+ {
182
+ base: 'http://trusted.example/base',
183
+ relative: 'http://ex\u200Bample.com/',
184
+ expected: 'http://example.com/',
185
+ expectedHost: 'example.com',
186
+ description: 'absolute relative reference'
187
+ }
188
+ ]
189
+
190
+ t.plan(cases.length * 2)
191
+
192
+ cases.forEach(({ base, relative, expected, expectedHost, description }) => {
193
+ const resolved = fastURI.resolve(base, relative)
194
+ t.equal(resolved, expected, description)
195
+ t.equal(fastURI.parse(resolved).host, expectedHost, `${description} reparses consistently`)
196
+ })
197
+ })
198
+
199
+ test('resolve applies domain canonicalisation only when the effective scheme opts in', (t) => {
200
+ const host = 'ex\u00ADample.com'
201
+
202
+ t.plan(2)
203
+ t.equal(
204
+ fastURI.resolve('uri://trusted.example/', `//${host}/`),
205
+ `uri://${host}/`,
206
+ 'an unsupported scheme preserves the host'
207
+ )
208
+ t.equal(
209
+ fastURI.resolve('http://trusted.example/', `//${host}/`, { unicodeSupport: true }),
210
+ `http://${host}/`,
211
+ 'unicodeSupport preserves the Unicode host'
212
+ )
213
+ })
214
+
215
+ test('resolve throws when the final scheme cannot canonicalise the host', (t) => {
216
+ const invalidHost = '\u200D.example'
217
+ const cases = [
218
+ ['http://trusted.example/', `//${invalidHost}/`],
219
+ [`https://${invalidHost}/base`, 'child'],
220
+ ['http://trusted.example/', `http://${invalidHost}/`],
221
+ ['http://trusted.example/', `//${invalidHost}%2Etest/`]
222
+ ]
223
+
224
+ t.plan(cases.length)
225
+
226
+ cases.forEach(([base, relative]) => {
227
+ t.throws(
228
+ () => fastURI.resolve(base, relative),
229
+ /Host's domain name can not be converted to ASCII/,
230
+ `${base} + ${relative}`
231
+ )
232
+ })
233
+ })
234
+
235
+ test('parse rejects a literal backslash in the authority as malformed (RFC 3986)', (t) => {
236
+ // Regression for the host-confusion bypass: a literal "\" is invalid RFC 3986
237
+ // syntax and must be flagged malformed, not silently rewritten. Otherwise "\"
238
+ // acts as a host delimiter here while Node's native URL parses a different
239
+ // host, defeating a host-based SSRF/redirect/origin allowlist.
240
+ const cases = [
241
+ 'http://evil.com\\@allowed.com',
242
+ 'https://169.254.169.254\\@trusted.example.com',
243
+ 'http://127.0.0.1\\@public.example.com',
244
+ 'https://attacker.com\\@api.internal',
245
+ 'http://a\\@b',
246
+ 'ws://evil.com\\@allowed.com/chat',
247
+ 'wss://evil.com\\@allowed.com/chat',
248
+ 'http://evil.com\\%40allowed.com',
249
+ '//evil.com\\@allowed.com'
250
+ ]
251
+
252
+ t.plan(cases.length)
253
+
254
+ cases.forEach((input) => {
255
+ t.equal(
256
+ fastURI.parse(input).error,
257
+ 'URI authority must not contain a literal backslash.',
258
+ input
259
+ )
260
+ })
261
+ })
262
+
263
+ test('normalize does not canonicalize a literal-backslash URI into a different valid URL', (t) => {
264
+ const cases = [
265
+ 'http://evil.com\\@allowed.com',
266
+ 'https://attacker.com\\@api.internal'
267
+ ]
268
+
269
+ t.plan(cases.length)
270
+
271
+ cases.forEach((input) => {
272
+ t.equal(fastURI.normalize(input), input, input)
273
+ })
274
+ })
275
+
276
+ test('parse leaves percent-encoded %5C untouched as encoded data (not rejected)', (t) => {
277
+ // Only the literal "\" byte is rejected; %5C stays valid encoded data and
278
+ // does not diverge from the native URL parser, so it must not be flagged.
279
+ const input = 'http://evil.com%5C@allowed.com'
280
+ const parsed = fastURI.parse(input)
281
+
282
+ t.plan(2)
283
+ t.notOk(parsed.error, '%5C is valid encoded data, not malformed')
284
+ t.equal(parsed.host, new URL(input).hostname, '%5C host matches native URL (no divergence)')
285
+ })
286
+
287
+ test('parse does not reject a literal backslash in the query or fragment', (t) => {
288
+ // The rejection is scoped to the authority/path (the host-confusion surface);
289
+ // a backslash after "?"/"#" is normalized as encoded data as before.
290
+ const parsed = fastURI.parse('http://host.example.com/?x=\\y#z\\w')
291
+
292
+ t.plan(2)
293
+ t.notOk(parsed.error, 'backslash in query/fragment does not mark the URI malformed')
294
+ t.equal(parsed.host, 'host.example.com', 'host parsed normally')
295
+ })
296
+
297
+ test('parse rejects a malformed authority introducer (\\\\, /\\, \\/) in place of //', (t) => {
298
+ // Regression: "\\", "/\\", "\\/" after the scheme colon are not valid authority
299
+ // introducers. Node's URL treats "\\" as interchangeable with "/" on special
300
+ // schemes, so "http:\\\\evil.com/path" would be parsed as host "evil.com" by
301
+ // Node, but fast-uri must reject it as malformed to prevent SSRF/redirect bypass.
302
+ const cases = [
303
+ 'http:\\\\evil.com/path',
304
+ 'http:/\\evil.com/path',
305
+ 'http:\\/evil.com/path',
306
+ 'ws:\\\\evil.com/chat',
307
+ 'wss:\\\\evil.com/chat',
308
+ 'ftp:\\\\evil.com/',
309
+ '\\\\evil.com/path'
310
+ ]
311
+
312
+ t.plan(cases.length)
313
+
314
+ cases.forEach((input) => {
315
+ t.equal(
316
+ fastURI.parse(input).error,
317
+ 'URI authority must not contain a literal backslash.',
318
+ input
319
+ )
320
+ })
321
+ })
322
+
323
+ test('normalize does not canonicalize a malformed-authority-introducer URI', (t) => {
324
+ const cases = [
325
+ 'http:\\\\evil.com/path',
326
+ 'http:/\\evil.com/path'
327
+ ]
328
+
329
+ t.plan(cases.length)
330
+
331
+ cases.forEach((input) => {
332
+ t.equal(fastURI.normalize(input), input, input)
333
+ })
334
+ })
335
+
336
+ test('equal returns false for malformed-authority-introducer URIs', (t) => {
337
+ const pairs = [
338
+ ['http:\\\\evil.com/path', 'http://evil.com/path'],
339
+ ['http:/\\evil.com/path', 'http://evil.com/path']
340
+ ]
341
+
342
+ t.plan(pairs.length)
343
+
344
+ pairs.forEach(([left, right]) => {
345
+ t.equal(fastURI.equal(left, right), false, `${left} != ${right}`)
346
+ })
347
+ })
348
+
349
+ test('resolve throws on malformed authority introducer', (t) => {
350
+ // resolve() returns a plain string with no error field, so the only safe
351
+ // behavior is to throw when either component has a malformed authority.
352
+ const pairs = [
353
+ ['https://allowed.com/', '\\\\evil.com/path'],
354
+ ['\\\\evil.com/path', 'https://allowed.com/'],
355
+ ['https://allowed.com/', 'http:/\\evil.com/path'],
356
+ ['https://allowed.com/', 'http:\\/evil.com/path']
357
+ ]
358
+
359
+ t.plan(pairs.length)
360
+
361
+ pairs.forEach(([base, rel]) => {
362
+ t.throws(
363
+ () => fastURI.resolve(base, rel),
364
+ /URI authority must not contain a literal backslash/,
365
+ `${base} + ${rel}`
366
+ )
367
+ })
368
+ })
369
+
370
+ test('parse rejects a whitespace-split authority introducer (TAB, LF, CR)', (t) => {
371
+ // The WHATWG URL parser removes TAB (U+0009), LF (U+000A) and CR (U+000D) from
372
+ // the input before parsing, so a stripped character wedged into the introducer
373
+ // ("/<TAB>\\", "/<TAB>/", or a leading "<TAB>//") reaches an authority in Node
374
+ // while fast-uri would otherwise fold it into the path. These must be rejected
375
+ // like the adjacent "\\", "/\\", "\\/" forms.
376
+ const cases = [
377
+ { input: '/\t\\evil.com/path', expectedError: 'URI authority must not contain a literal backslash.' },
378
+ { input: '/\t/evil.com/path', expectedError: 'URI authority introducer must not contain whitespace.' },
379
+ { input: '/\n\\evil.com/path', expectedError: 'URI authority must not contain a literal backslash.' },
380
+ { input: '/\r\\evil.com/path', expectedError: 'URI authority must not contain a literal backslash.' },
381
+ { input: '\t//evil.com/path', expectedError: 'URI authority introducer must not contain whitespace.' },
382
+ { input: '\t/\\evil.com/path', expectedError: 'URI authority must not contain a literal backslash.' },
383
+ { input: 'https:/\t/evil.com/path', expectedError: 'URI authority introducer must not contain whitespace.' }
384
+ ]
385
+
386
+ t.plan(cases.length)
387
+
388
+ cases.forEach(({ input, expectedError }) => {
389
+ t.equal(fastURI.parse(input).error, expectedError, JSON.stringify(input))
390
+ })
391
+ })
392
+
393
+ test('resolve throws on a whitespace-split authority introducer', (t) => {
394
+ const pairs = [
395
+ ['https://allowed.com/', '/\t\\evil.com/path'],
396
+ ['https://allowed.com/', '/\t/evil.com/path'],
397
+ ['https://allowed.com/', '/\n\\evil.com/path'],
398
+ ['/\t/evil.com/path', 'https://allowed.com/']
399
+ ]
400
+
401
+ t.plan(pairs.length)
402
+
403
+ pairs.forEach(([base, rel]) => {
404
+ t.throws(
405
+ () => fastURI.resolve(base, rel),
406
+ /URI authority (must not contain a literal backslash|introducer must not contain whitespace)/,
407
+ `${JSON.stringify(base)} + ${JSON.stringify(rel)}`
408
+ )
409
+ })
410
+ })
411
+
412
+ test('parse does not reject valid authority introducer patterns', (t) => {
413
+ // No false positives: "//" introducer and scheme-less "//" must be valid.
414
+ const cases = [
415
+ 'http://good.com/',
416
+ 'https://good.com/',
417
+ 'ws://good.com/chat',
418
+ 'wss://good.com/chat',
419
+ 'ftp://good.com/',
420
+ '//good.com/path',
421
+ '/absolute/path',
422
+ 'relative/path'
423
+ ]
424
+
425
+ t.plan(cases.length)
426
+
427
+ cases.forEach((input) => {
428
+ const parsed = fastURI.parse(input)
429
+ t.notOk(parsed.error, input)
430
+ })
133
431
  })
@@ -0,0 +1,29 @@
1
+ 'use strict'
2
+
3
+ const test = require('tape')
4
+ const fastURI = require('..')
5
+
6
+ test('URN parsing validates the complete scheme-specific input', (t) => {
7
+ const embedded = fastURI.parse('urn:x|foo:bar')
8
+ t.equal(embedded.error, 'URN can not be parsed.', 'does not search for a later nid:nss substring')
9
+ t.equal(embedded.nid, undefined, 'does not adopt the later nid')
10
+ t.equal(embedded.nss, undefined, 'does not adopt the later nss')
11
+
12
+ const trailing = fastURI.parse('urn:foo:bar|ignored')
13
+ t.equal(trailing.error, 'URN can not be parsed.', 'rejects trailing input outside the RFC 2141 NSS grammar')
14
+ t.equal(trailing.nid, undefined, 'does not return an nid from a partial match')
15
+ t.equal(trailing.nss, undefined, 'does not return a truncated nss')
16
+
17
+ t.end()
18
+ })
19
+
20
+ test('URN parsing preserves the complete RFC 2141 NSS', (t) => {
21
+ const parsed = fastURI.parse('urn:foo:allowed/evil')
22
+ t.equal(parsed.error, undefined, 'accepts slash in an RFC 2141 NSS')
23
+ t.equal(parsed.nid, 'foo', 'parses the nid')
24
+ t.equal(parsed.nss, 'allowed/evil', 'preserves the complete NSS')
25
+ t.equal(fastURI.normalize('urn:foo:allowed/evil'), 'urn:foo:allowed/evil', 'normalization retains slash data')
26
+ t.equal(fastURI.equal('urn:foo:allowed/evil', 'urn:foo:allowed'), false, 'distinct NSS values do not compare equal')
27
+
28
+ t.end()
29
+ })