@wirebench/engine 2.1.1

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/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/assert/contract.d.ts +3 -0
  4. package/dist/assert/contract.js +17 -0
  5. package/dist/assert/index.d.ts +4 -0
  6. package/dist/assert/index.js +27 -0
  7. package/dist/assert/match.d.ts +3 -0
  8. package/dist/assert/match.js +58 -0
  9. package/dist/assert/model.d.ts +73 -0
  10. package/dist/assert/model.js +8 -0
  11. package/dist/assert/schema.d.ts +34 -0
  12. package/dist/assert/schema.js +46 -0
  13. package/dist/assert/sla.d.ts +3 -0
  14. package/dist/assert/sla.js +8 -0
  15. package/dist/assert/soap-fault.d.ts +3 -0
  16. package/dist/assert/soap-fault.js +20 -0
  17. package/dist/assert/status.d.ts +3 -0
  18. package/dist/assert/status.js +14 -0
  19. package/dist/errors.d.ts +77 -0
  20. package/dist/errors.js +121 -0
  21. package/dist/fs.d.ts +35 -0
  22. package/dist/fs.js +64 -0
  23. package/dist/generate.d.ts +12 -0
  24. package/dist/generate.js +14 -0
  25. package/dist/grpc/browser.d.ts +11 -0
  26. package/dist/grpc/browser.js +9 -0
  27. package/dist/grpc/cache.d.ts +113 -0
  28. package/dist/grpc/cache.js +244 -0
  29. package/dist/grpc/call.d.ts +64 -0
  30. package/dist/grpc/call.js +72 -0
  31. package/dist/grpc/codec.d.ts +29 -0
  32. package/dist/grpc/codec.js +416 -0
  33. package/dist/grpc/command.d.ts +23 -0
  34. package/dist/grpc/command.js +91 -0
  35. package/dist/grpc/expand.d.ts +25 -0
  36. package/dist/grpc/expand.js +52 -0
  37. package/dist/grpc/framing.d.ts +28 -0
  38. package/dist/grpc/framing.js +61 -0
  39. package/dist/grpc/import.d.ts +47 -0
  40. package/dist/grpc/import.js +88 -0
  41. package/dist/grpc/model.d.ts +179 -0
  42. package/dist/grpc/model.js +91 -0
  43. package/dist/grpc/proto/describe.d.ts +92 -0
  44. package/dist/grpc/proto/describe.js +205 -0
  45. package/dist/grpc/proto/load.d.ts +35 -0
  46. package/dist/grpc/proto/load.js +112 -0
  47. package/dist/grpc/proto/sample.d.ts +21 -0
  48. package/dist/grpc/proto/sample.js +79 -0
  49. package/dist/grpc/proto/well-known.d.ts +42 -0
  50. package/dist/grpc/proto/well-known.js +143 -0
  51. package/dist/grpc/reconcile.d.ts +42 -0
  52. package/dist/grpc/reconcile.js +153 -0
  53. package/dist/grpc/reflection/client.d.ts +70 -0
  54. package/dist/grpc/reflection/client.js +197 -0
  55. package/dist/grpc/reflection/descriptors.d.ts +69 -0
  56. package/dist/grpc/reflection/descriptors.js +140 -0
  57. package/dist/grpc/reflection/proto.d.ts +33 -0
  58. package/dist/grpc/reflection/proto.js +144 -0
  59. package/dist/grpc/send.d.ts +132 -0
  60. package/dist/grpc/send.js +435 -0
  61. package/dist/grpc/shape.d.ts +29 -0
  62. package/dist/grpc/shape.js +36 -0
  63. package/dist/grpc/status.d.ts +21 -0
  64. package/dist/grpc/status.js +62 -0
  65. package/dist/grpc/target.d.ts +21 -0
  66. package/dist/grpc/target.js +66 -0
  67. package/dist/http/auth/apply.d.ts +37 -0
  68. package/dist/http/auth/apply.js +74 -0
  69. package/dist/http/auth/basic.d.ts +36 -0
  70. package/dist/http/auth/basic.js +69 -0
  71. package/dist/http/auth/md4.d.ts +13 -0
  72. package/dist/http/auth/md4.js +81 -0
  73. package/dist/http/auth/ntlm-transport.d.ts +61 -0
  74. package/dist/http/auth/ntlm-transport.js +97 -0
  75. package/dist/http/auth/ntlm.d.ts +190 -0
  76. package/dist/http/auth/ntlm.js +377 -0
  77. package/dist/http/client.d.ts +73 -0
  78. package/dist/http/client.js +403 -0
  79. package/dist/http/curl-flags.d.ts +15 -0
  80. package/dist/http/curl-flags.js +95 -0
  81. package/dist/http/curl.d.ts +94 -0
  82. package/dist/http/curl.js +245 -0
  83. package/dist/http/decompress.d.ts +7 -0
  84. package/dist/http/decompress.js +22 -0
  85. package/dist/http/errors.d.ts +22 -0
  86. package/dist/http/errors.js +144 -0
  87. package/dist/http/failed-request.d.ts +27 -0
  88. package/dist/http/failed-request.js +48 -0
  89. package/dist/http/headers.d.ts +15 -0
  90. package/dist/http/headers.js +50 -0
  91. package/dist/http/heredoc.d.ts +25 -0
  92. package/dist/http/heredoc.js +74 -0
  93. package/dist/http/proxy.d.ts +103 -0
  94. package/dist/http/proxy.js +168 -0
  95. package/dist/http/raw-capture.d.ts +23 -0
  96. package/dist/http/raw-capture.js +57 -0
  97. package/dist/http/timings.d.ts +79 -0
  98. package/dist/http/timings.js +212 -0
  99. package/dist/http/tls.d.ts +111 -0
  100. package/dist/http/tls.js +167 -0
  101. package/dist/http/types.d.ts +125 -0
  102. package/dist/http/types.js +6 -0
  103. package/dist/import-detect.d.ts +26 -0
  104. package/dist/import-detect.js +169 -0
  105. package/dist/import.d.ts +20 -0
  106. package/dist/import.js +163 -0
  107. package/dist/index.d.ts +272 -0
  108. package/dist/index.js +157 -0
  109. package/dist/json/cursor.d.ts +43 -0
  110. package/dist/json/cursor.js +168 -0
  111. package/dist/operations.d.ts +12 -0
  112. package/dist/operations.js +52 -0
  113. package/dist/project/attachments-cache.d.ts +80 -0
  114. package/dist/project/attachments-cache.js +186 -0
  115. package/dist/project/endpoints.d.ts +23 -0
  116. package/dist/project/endpoints.js +47 -0
  117. package/dist/project/environments.d.ts +68 -0
  118. package/dist/project/environments.js +124 -0
  119. package/dist/project/fs.d.ts +45 -0
  120. package/dist/project/fs.js +78 -0
  121. package/dist/project/history.d.ts +171 -0
  122. package/dist/project/history.js +179 -0
  123. package/dist/project/keystores.d.ts +24 -0
  124. package/dist/project/keystores.js +66 -0
  125. package/dist/project/load.d.ts +44 -0
  126. package/dist/project/load.js +634 -0
  127. package/dist/project/migrate.d.ts +27 -0
  128. package/dist/project/migrate.js +46 -0
  129. package/dist/project/model.d.ts +401 -0
  130. package/dist/project/model.js +126 -0
  131. package/dist/project/paths.d.ts +134 -0
  132. package/dist/project/paths.js +259 -0
  133. package/dist/project/preferences.d.ts +318 -0
  134. package/dist/project/preferences.js +239 -0
  135. package/dist/project/properties.d.ts +97 -0
  136. package/dist/project/properties.js +356 -0
  137. package/dist/project/save.d.ts +65 -0
  138. package/dist/project/save.js +295 -0
  139. package/dist/project/schema.d.ts +1329 -0
  140. package/dist/project/schema.js +737 -0
  141. package/dist/project/serialize.d.ts +42 -0
  142. package/dist/project/serialize.js +385 -0
  143. package/dist/project/wss-configs.d.ts +40 -0
  144. package/dist/project/wss-configs.js +142 -0
  145. package/dist/project/yaml.d.ts +17 -0
  146. package/dist/project/yaml.js +39 -0
  147. package/dist/redact/index.d.ts +77 -0
  148. package/dist/redact/index.js +328 -0
  149. package/dist/redact/literal.d.ts +12 -0
  150. package/dist/redact/literal.js +68 -0
  151. package/dist/rest/auth.d.ts +53 -0
  152. package/dist/rest/auth.js +80 -0
  153. package/dist/rest/body.d.ts +61 -0
  154. package/dist/rest/body.js +184 -0
  155. package/dist/rest/browser.d.ts +12 -0
  156. package/dist/rest/browser.js +11 -0
  157. package/dist/rest/cookies.d.ts +41 -0
  158. package/dist/rest/cookies.js +102 -0
  159. package/dist/rest/curl.d.ts +75 -0
  160. package/dist/rest/curl.js +417 -0
  161. package/dist/rest/expand.d.ts +35 -0
  162. package/dist/rest/expand.js +104 -0
  163. package/dist/rest/model.d.ts +247 -0
  164. package/dist/rest/model.js +118 -0
  165. package/dist/rest/oauth2.d.ts +118 -0
  166. package/dist/rest/oauth2.js +212 -0
  167. package/dist/rest/openapi/cache.d.ts +54 -0
  168. package/dist/rest/openapi/cache.js +128 -0
  169. package/dist/rest/openapi/import.d.ts +67 -0
  170. package/dist/rest/openapi/import.js +91 -0
  171. package/dist/rest/openapi/map.d.ts +102 -0
  172. package/dist/rest/openapi/map.js +477 -0
  173. package/dist/rest/openapi/model.d.ts +203 -0
  174. package/dist/rest/openapi/model.js +37 -0
  175. package/dist/rest/openapi/parse.d.ts +44 -0
  176. package/dist/rest/openapi/parse.js +1530 -0
  177. package/dist/rest/openapi/refs.d.ts +63 -0
  178. package/dist/rest/openapi/refs.js +258 -0
  179. package/dist/rest/openapi/sample.d.ts +68 -0
  180. package/dist/rest/openapi/sample.js +336 -0
  181. package/dist/rest/postman/import.d.ts +21 -0
  182. package/dist/rest/postman/import.js +47 -0
  183. package/dist/rest/postman/index.d.ts +7 -0
  184. package/dist/rest/postman/index.js +7 -0
  185. package/dist/rest/postman/map.d.ts +28 -0
  186. package/dist/rest/postman/map.js +427 -0
  187. package/dist/rest/postman/model.d.ts +118 -0
  188. package/dist/rest/postman/model.js +7 -0
  189. package/dist/rest/postman/parse.d.ts +29 -0
  190. package/dist/rest/postman/parse.js +518 -0
  191. package/dist/rest/response.d.ts +72 -0
  192. package/dist/rest/response.js +221 -0
  193. package/dist/rest/send.d.ts +102 -0
  194. package/dist/rest/send.js +148 -0
  195. package/dist/rest/url.d.ts +92 -0
  196. package/dist/rest/url.js +213 -0
  197. package/dist/run/effective-auth.d.ts +10 -0
  198. package/dist/run/effective-auth.js +19 -0
  199. package/dist/run/index.d.ts +8 -0
  200. package/dist/run/index.js +4 -0
  201. package/dist/run/prepare.d.ts +43 -0
  202. package/dist/run/prepare.js +280 -0
  203. package/dist/run/run.d.ts +53 -0
  204. package/dist/run/run.js +223 -0
  205. package/dist/run/secret-needs.d.ts +13 -0
  206. package/dist/run/secret-needs.js +125 -0
  207. package/dist/run/select.d.ts +34 -0
  208. package/dist/run/select.js +76 -0
  209. package/dist/secrets/env-names.d.ts +27 -0
  210. package/dist/secrets/env-names.js +40 -0
  211. package/dist/secrets/resolve.d.ts +58 -0
  212. package/dist/secrets/resolve.js +136 -0
  213. package/dist/send-options.d.ts +141 -0
  214. package/dist/send-options.js +228 -0
  215. package/dist/send.d.ts +53 -0
  216. package/dist/send.js +210 -0
  217. package/dist/soap/body-builder.d.ts +38 -0
  218. package/dist/soap/body-builder.js +250 -0
  219. package/dist/soap/build-problems.d.ts +12 -0
  220. package/dist/soap/build-problems.js +2 -0
  221. package/dist/soap/charset.d.ts +23 -0
  222. package/dist/soap/charset.js +47 -0
  223. package/dist/soap/envelope.d.ts +44 -0
  224. package/dist/soap/envelope.js +76 -0
  225. package/dist/soap/fault.d.ts +46 -0
  226. package/dist/soap/fault.js +129 -0
  227. package/dist/soap/form-request.d.ts +34 -0
  228. package/dist/soap/form-request.js +251 -0
  229. package/dist/soap/legacy-project/definition-fetcher.d.ts +21 -0
  230. package/dist/soap/legacy-project/definition-fetcher.js +43 -0
  231. package/dist/soap/legacy-project/format.d.ts +18 -0
  232. package/dist/soap/legacy-project/format.js +24 -0
  233. package/dist/soap/legacy-project/import.d.ts +21 -0
  234. package/dist/soap/legacy-project/import.js +46 -0
  235. package/dist/soap/legacy-project/index.d.ts +9 -0
  236. package/dist/soap/legacy-project/index.js +5 -0
  237. package/dist/soap/legacy-project/map.d.ts +91 -0
  238. package/dist/soap/legacy-project/map.js +290 -0
  239. package/dist/soap/legacy-project/model.d.ts +98 -0
  240. package/dist/soap/legacy-project/model.js +5 -0
  241. package/dist/soap/legacy-project/parse.d.ts +16 -0
  242. package/dist/soap/legacy-project/parse.js +325 -0
  243. package/dist/soap/mime/cid-scan.d.ts +36 -0
  244. package/dist/soap/mime/cid-scan.js +52 -0
  245. package/dist/soap/mime/inline-files.d.ts +39 -0
  246. package/dist/soap/mime/inline-files.js +71 -0
  247. package/dist/soap/mime/mtom.d.ts +74 -0
  248. package/dist/soap/mime/mtom.js +134 -0
  249. package/dist/soap/mime/multipart.d.ts +66 -0
  250. package/dist/soap/mime/multipart.js +329 -0
  251. package/dist/soap/mime/send-pipeline.d.ts +61 -0
  252. package/dist/soap/mime/send-pipeline.js +145 -0
  253. package/dist/soap/mime/swa.d.ts +45 -0
  254. package/dist/soap/mime/swa.js +62 -0
  255. package/dist/soap/mime/types.d.ts +69 -0
  256. package/dist/soap/mime/types.js +10 -0
  257. package/dist/soap/namespace-scope.d.ts +32 -0
  258. package/dist/soap/namespace-scope.js +85 -0
  259. package/dist/soap/prefixes.d.ts +24 -0
  260. package/dist/soap/prefixes.js +70 -0
  261. package/dist/soap/recreate.d.ts +28 -0
  262. package/dist/soap/recreate.js +168 -0
  263. package/dist/soap/request-builder.d.ts +63 -0
  264. package/dist/soap/request-builder.js +161 -0
  265. package/dist/soap/response-parser.d.ts +29 -0
  266. package/dist/soap/response-parser.js +71 -0
  267. package/dist/soap/soap-action.d.ts +31 -0
  268. package/dist/soap/soap-action.js +28 -0
  269. package/dist/soap/transforms.d.ts +52 -0
  270. package/dist/soap/transforms.js +164 -0
  271. package/dist/types.d.ts +307 -0
  272. package/dist/types.js +6 -0
  273. package/dist/validate/index.d.ts +61 -0
  274. package/dist/validate/index.js +72 -0
  275. package/dist/validate/schema-file-set.d.ts +51 -0
  276. package/dist/validate/schema-file-set.js +288 -0
  277. package/dist/validate/schema-validator.d.ts +53 -0
  278. package/dist/validate/schema-validator.js +251 -0
  279. package/dist/validate/soap-structure.d.ts +34 -0
  280. package/dist/validate/soap-structure.js +255 -0
  281. package/dist/validate/types.d.ts +47 -0
  282. package/dist/validate/types.js +8 -0
  283. package/dist/validate/wsi/assertions/helpers.d.ts +145 -0
  284. package/dist/validate/wsi/assertions/helpers.js +387 -0
  285. package/dist/validate/wsi/assertions/index.d.ts +44 -0
  286. package/dist/validate/wsi/assertions/index.js +77 -0
  287. package/dist/validate/wsi/assertions/message/helpers.d.ts +63 -0
  288. package/dist/validate/wsi/assertions/message/helpers.js +168 -0
  289. package/dist/validate/wsi/assertions/message/index.d.ts +39 -0
  290. package/dist/validate/wsi/assertions/message/index.js +62 -0
  291. package/dist/validate/wsi/assertions/message/r1001.d.ts +10 -0
  292. package/dist/validate/wsi/assertions/message/r1001.js +38 -0
  293. package/dist/validate/wsi/assertions/message/r1003.d.ts +14 -0
  294. package/dist/validate/wsi/assertions/message/r1003.js +45 -0
  295. package/dist/validate/wsi/assertions/message/r1005.d.ts +12 -0
  296. package/dist/validate/wsi/assertions/message/r1005.js +37 -0
  297. package/dist/validate/wsi/assertions/message/r1006.d.ts +10 -0
  298. package/dist/validate/wsi/assertions/message/r1006.js +49 -0
  299. package/dist/validate/wsi/assertions/message/r1007.d.ts +10 -0
  300. package/dist/validate/wsi/assertions/message/r1007.js +30 -0
  301. package/dist/validate/wsi/assertions/message/r1011.d.ts +10 -0
  302. package/dist/validate/wsi/assertions/message/r1011.js +33 -0
  303. package/dist/validate/wsi/assertions/message/r1012.d.ts +13 -0
  304. package/dist/validate/wsi/assertions/message/r1012.js +37 -0
  305. package/dist/validate/wsi/assertions/message/r1013.d.ts +9 -0
  306. package/dist/validate/wsi/assertions/message/r1013.js +42 -0
  307. package/dist/validate/wsi/assertions/message/r1014.d.ts +10 -0
  308. package/dist/validate/wsi/assertions/message/r1014.js +30 -0
  309. package/dist/validate/wsi/assertions/message/r1015.d.ts +12 -0
  310. package/dist/validate/wsi/assertions/message/r1015.js +36 -0
  311. package/dist/validate/wsi/assertions/message/r1017.d.ts +10 -0
  312. package/dist/validate/wsi/assertions/message/r1017.js +30 -0
  313. package/dist/validate/wsi/assertions/message/r1100.d.ts +10 -0
  314. package/dist/validate/wsi/assertions/message/r1100.js +39 -0
  315. package/dist/validate/wsi/assertions/message/r1101.d.ts +10 -0
  316. package/dist/validate/wsi/assertions/message/r1101.js +37 -0
  317. package/dist/validate/wsi/assertions/message/r1102.d.ts +10 -0
  318. package/dist/validate/wsi/assertions/message/r1102.js +41 -0
  319. package/dist/validate/wsi/assertions/message/r1103.d.ts +10 -0
  320. package/dist/validate/wsi/assertions/message/r1103.js +28 -0
  321. package/dist/validate/wsi/assertions/message/r1107.d.ts +10 -0
  322. package/dist/validate/wsi/assertions/message/r1107.js +38 -0
  323. package/dist/validate/wsi/assertions/message/r1109.d.ts +10 -0
  324. package/dist/validate/wsi/assertions/message/r1109.js +32 -0
  325. package/dist/validate/wsi/assertions/message/r1124.d.ts +10 -0
  326. package/dist/validate/wsi/assertions/message/r1124.js +31 -0
  327. package/dist/validate/wsi/assertions/message/r1132.d.ts +9 -0
  328. package/dist/validate/wsi/assertions/message/r1132.js +23 -0
  329. package/dist/validate/wsi/assertions/message/r1140.d.ts +10 -0
  330. package/dist/validate/wsi/assertions/message/r1140.js +42 -0
  331. package/dist/validate/wsi/assertions/message/r1141.d.ts +10 -0
  332. package/dist/validate/wsi/assertions/message/r1141.js +32 -0
  333. package/dist/validate/wsi/assertions/message/r2113.d.ts +11 -0
  334. package/dist/validate/wsi/assertions/message/r2113.js +33 -0
  335. package/dist/validate/wsi/assertions/message/r2211.d.ts +7 -0
  336. package/dist/validate/wsi/assertions/message/r2211.js +42 -0
  337. package/dist/validate/wsi/assertions/r2001.d.ts +15 -0
  338. package/dist/validate/wsi/assertions/r2001.js +47 -0
  339. package/dist/validate/wsi/assertions/r2002.d.ts +11 -0
  340. package/dist/validate/wsi/assertions/r2002.js +38 -0
  341. package/dist/validate/wsi/assertions/r2003.d.ts +7 -0
  342. package/dist/validate/wsi/assertions/r2003.js +32 -0
  343. package/dist/validate/wsi/assertions/r2005.d.ts +7 -0
  344. package/dist/validate/wsi/assertions/r2005.js +40 -0
  345. package/dist/validate/wsi/assertions/r2101.d.ts +14 -0
  346. package/dist/validate/wsi/assertions/r2101.js +65 -0
  347. package/dist/validate/wsi/assertions/r2102.d.ts +10 -0
  348. package/dist/validate/wsi/assertions/r2102.js +41 -0
  349. package/dist/validate/wsi/assertions/r2105.d.ts +8 -0
  350. package/dist/validate/wsi/assertions/r2105.js +39 -0
  351. package/dist/validate/wsi/assertions/r2110.d.ts +8 -0
  352. package/dist/validate/wsi/assertions/r2110.js +38 -0
  353. package/dist/validate/wsi/assertions/r2111.d.ts +6 -0
  354. package/dist/validate/wsi/assertions/r2111.js +30 -0
  355. package/dist/validate/wsi/assertions/r2112.d.ts +7 -0
  356. package/dist/validate/wsi/assertions/r2112.js +35 -0
  357. package/dist/validate/wsi/assertions/r2201.d.ts +7 -0
  358. package/dist/validate/wsi/assertions/r2201.js +28 -0
  359. package/dist/validate/wsi/assertions/r2203.d.ts +7 -0
  360. package/dist/validate/wsi/assertions/r2203.js +30 -0
  361. package/dist/validate/wsi/assertions/r2204.d.ts +6 -0
  362. package/dist/validate/wsi/assertions/r2204.js +29 -0
  363. package/dist/validate/wsi/assertions/r2205.d.ts +8 -0
  364. package/dist/validate/wsi/assertions/r2205.js +46 -0
  365. package/dist/validate/wsi/assertions/r2206.d.ts +7 -0
  366. package/dist/validate/wsi/assertions/r2206.js +36 -0
  367. package/dist/validate/wsi/assertions/r2209.d.ts +12 -0
  368. package/dist/validate/wsi/assertions/r2209.js +37 -0
  369. package/dist/validate/wsi/assertions/r2210.d.ts +7 -0
  370. package/dist/validate/wsi/assertions/r2210.js +30 -0
  371. package/dist/validate/wsi/assertions/r2303.d.ts +7 -0
  372. package/dist/validate/wsi/assertions/r2303.js +44 -0
  373. package/dist/validate/wsi/assertions/r2304.d.ts +6 -0
  374. package/dist/validate/wsi/assertions/r2304.js +32 -0
  375. package/dist/validate/wsi/assertions/r2401.d.ts +12 -0
  376. package/dist/validate/wsi/assertions/r2401.js +31 -0
  377. package/dist/validate/wsi/assertions/r2701.d.ts +7 -0
  378. package/dist/validate/wsi/assertions/r2701.js +28 -0
  379. package/dist/validate/wsi/assertions/r2702.d.ts +6 -0
  380. package/dist/validate/wsi/assertions/r2702.js +26 -0
  381. package/dist/validate/wsi/assertions/r2705.d.ts +11 -0
  382. package/dist/validate/wsi/assertions/r2705.js +31 -0
  383. package/dist/validate/wsi/assertions/r2706.d.ts +7 -0
  384. package/dist/validate/wsi/assertions/r2706.js +29 -0
  385. package/dist/validate/wsi/assertions/r2710.d.ts +13 -0
  386. package/dist/validate/wsi/assertions/r2710.js +37 -0
  387. package/dist/validate/wsi/assertions/r2716.d.ts +7 -0
  388. package/dist/validate/wsi/assertions/r2716.js +29 -0
  389. package/dist/validate/wsi/assertions/r2717.d.ts +9 -0
  390. package/dist/validate/wsi/assertions/r2717.js +31 -0
  391. package/dist/validate/wsi/assertions/r2718.d.ts +7 -0
  392. package/dist/validate/wsi/assertions/r2718.js +41 -0
  393. package/dist/validate/wsi/assertions/r2720.d.ts +7 -0
  394. package/dist/validate/wsi/assertions/r2720.js +29 -0
  395. package/dist/validate/wsi/assertions/r2721.d.ts +6 -0
  396. package/dist/validate/wsi/assertions/r2721.js +27 -0
  397. package/dist/validate/wsi/assertions/r2722.d.ts +6 -0
  398. package/dist/validate/wsi/assertions/r2722.js +29 -0
  399. package/dist/validate/wsi/assertions/r2801.d.ts +7 -0
  400. package/dist/validate/wsi/assertions/r2801.js +39 -0
  401. package/dist/validate/wsi/assertions/r2803.d.ts +7 -0
  402. package/dist/validate/wsi/assertions/r2803.js +29 -0
  403. package/dist/validate/wsi/docs.d.ts +29 -0
  404. package/dist/validate/wsi/docs.js +167 -0
  405. package/dist/validate/wsi/index.d.ts +16 -0
  406. package/dist/validate/wsi/index.js +11 -0
  407. package/dist/validate/wsi/report-html.d.ts +36 -0
  408. package/dist/validate/wsi/report-html.js +135 -0
  409. package/dist/validate/wsi/run-message.d.ts +50 -0
  410. package/dist/validate/wsi/run-message.js +190 -0
  411. package/dist/validate/wsi/run-wsdl.d.ts +48 -0
  412. package/dist/validate/wsi/run-wsdl.js +99 -0
  413. package/dist/validate/wsi/types.d.ts +173 -0
  414. package/dist/validate/wsi/types.js +17 -0
  415. package/dist/workspace/commit-message.d.ts +47 -0
  416. package/dist/workspace/commit-message.js +195 -0
  417. package/dist/workspace/environments.d.ts +79 -0
  418. package/dist/workspace/environments.js +115 -0
  419. package/dist/workspace/index.d.ts +28 -0
  420. package/dist/workspace/index.js +19 -0
  421. package/dist/workspace/load.d.ts +45 -0
  422. package/dist/workspace/load.js +155 -0
  423. package/dist/workspace/local-state.d.ts +37 -0
  424. package/dist/workspace/local-state.js +59 -0
  425. package/dist/workspace/migrate.d.ts +38 -0
  426. package/dist/workspace/migrate.js +50 -0
  427. package/dist/workspace/model.d.ts +86 -0
  428. package/dist/workspace/model.js +54 -0
  429. package/dist/workspace/paths.d.ts +64 -0
  430. package/dist/workspace/paths.js +97 -0
  431. package/dist/workspace/reidentify.d.ts +22 -0
  432. package/dist/workspace/reidentify.js +122 -0
  433. package/dist/workspace/save.d.ts +31 -0
  434. package/dist/workspace/save.js +84 -0
  435. package/dist/workspace/schema.d.ts +93 -0
  436. package/dist/workspace/schema.js +115 -0
  437. package/dist/workspace/serialize.d.ts +24 -0
  438. package/dist/workspace/serialize.js +60 -0
  439. package/dist/workspace/share.d.ts +52 -0
  440. package/dist/workspace/share.js +89 -0
  441. package/dist/ws/browser.d.ts +13 -0
  442. package/dist/ws/browser.js +11 -0
  443. package/dist/ws/call.d.ts +53 -0
  444. package/dist/ws/call.js +106 -0
  445. package/dist/ws/command.d.ts +19 -0
  446. package/dist/ws/command.js +28 -0
  447. package/dist/ws/expand.d.ts +38 -0
  448. package/dist/ws/expand.js +76 -0
  449. package/dist/ws/model.d.ts +191 -0
  450. package/dist/ws/model.js +83 -0
  451. package/dist/ws/pretty.d.ts +12 -0
  452. package/dist/ws/pretty.js +25 -0
  453. package/dist/ws/session.d.ts +50 -0
  454. package/dist/ws/session.js +333 -0
  455. package/dist/ws/shape.d.ts +18 -0
  456. package/dist/ws/shape.js +28 -0
  457. package/dist/ws/transcript.d.ts +14 -0
  458. package/dist/ws/transcript.js +29 -0
  459. package/dist/ws/url.d.ts +3 -0
  460. package/dist/ws/url.js +44 -0
  461. package/dist/wsa/headers.d.ts +78 -0
  462. package/dist/wsa/headers.js +244 -0
  463. package/dist/wsa/model.d.ts +66 -0
  464. package/dist/wsa/model.js +52 -0
  465. package/dist/wsa/policy-detect.d.ts +81 -0
  466. package/dist/wsa/policy-detect.js +245 -0
  467. package/dist/wsdl/cache-naming.d.ts +39 -0
  468. package/dist/wsdl/cache-naming.js +90 -0
  469. package/dist/wsdl/cache.d.ts +48 -0
  470. package/dist/wsdl/cache.js +141 -0
  471. package/dist/wsdl/docs-generator.d.ts +47 -0
  472. package/dist/wsdl/docs-generator.js +439 -0
  473. package/dist/wsdl/dom-utils.d.ts +15 -0
  474. package/dist/wsdl/dom-utils.js +50 -0
  475. package/dist/wsdl/export-definition.d.ts +38 -0
  476. package/dist/wsdl/export-definition.js +100 -0
  477. package/dist/wsdl/fetch.d.ts +13 -0
  478. package/dist/wsdl/fetch.js +60 -0
  479. package/dist/wsdl/merge.d.ts +17 -0
  480. package/dist/wsdl/merge.js +57 -0
  481. package/dist/wsdl/model.d.ts +176 -0
  482. package/dist/wsdl/model.js +17 -0
  483. package/dist/wsdl/parse-binding.d.ts +6 -0
  484. package/dist/wsdl/parse-binding.js +150 -0
  485. package/dist/wsdl/parse-wsdl.d.ts +47 -0
  486. package/dist/wsdl/parse-wsdl.js +161 -0
  487. package/dist/wsdl/qname.d.ts +28 -0
  488. package/dist/wsdl/qname.js +41 -0
  489. package/dist/wsdl/ref-policy.d.ts +54 -0
  490. package/dist/wsdl/ref-policy.js +87 -0
  491. package/dist/wsdl/resolver.d.ts +81 -0
  492. package/dist/wsdl/resolver.js +276 -0
  493. package/dist/wsdl/update-definition.d.ts +106 -0
  494. package/dist/wsdl/update-definition.js +314 -0
  495. package/dist/wss/apply.d.ts +40 -0
  496. package/dist/wss/apply.js +212 -0
  497. package/dist/wss/c14n-prefixes.d.ts +27 -0
  498. package/dist/wss/c14n-prefixes.js +95 -0
  499. package/dist/wss/incoming/decrypt.d.ts +35 -0
  500. package/dist/wss/incoming/decrypt.js +57 -0
  501. package/dist/wss/incoming/index.d.ts +56 -0
  502. package/dist/wss/incoming/index.js +189 -0
  503. package/dist/wss/incoming/verify.d.ts +74 -0
  504. package/dist/wss/incoming/verify.js +440 -0
  505. package/dist/wss/key-identifiers.d.ts +76 -0
  506. package/dist/wss/key-identifiers.js +139 -0
  507. package/dist/wss/keystore/certificate.d.ts +45 -0
  508. package/dist/wss/keystore/certificate.js +134 -0
  509. package/dist/wss/keystore/index.d.ts +50 -0
  510. package/dist/wss/keystore/index.js +80 -0
  511. package/dist/wss/keystore/model.d.ts +83 -0
  512. package/dist/wss/keystore/model.js +27 -0
  513. package/dist/wss/keystore/pem.d.ts +21 -0
  514. package/dist/wss/keystore/pem.js +140 -0
  515. package/dist/wss/keystore/pkcs12.d.ts +21 -0
  516. package/dist/wss/keystore/pkcs12.js +125 -0
  517. package/dist/wss/model.d.ts +160 -0
  518. package/dist/wss/model.js +37 -0
  519. package/dist/wss/outgoing/encryption.d.ts +76 -0
  520. package/dist/wss/outgoing/encryption.js +618 -0
  521. package/dist/wss/outgoing/signature.d.ts +73 -0
  522. package/dist/wss/outgoing/signature.js +239 -0
  523. package/dist/wss/outgoing/timestamp.d.ts +29 -0
  524. package/dist/wss/outgoing/timestamp.js +39 -0
  525. package/dist/wss/outgoing/username-token.d.ts +36 -0
  526. package/dist/wss/outgoing/username-token.js +68 -0
  527. package/dist/wss/security-header.d.ts +31 -0
  528. package/dist/wss/security-header.js +83 -0
  529. package/dist/xml/index.d.ts +7 -0
  530. package/dist/xml/index.js +7 -0
  531. package/dist/xml/namespaces.d.ts +36 -0
  532. package/dist/xml/namespaces.js +60 -0
  533. package/dist/xml/parse.d.ts +79 -0
  534. package/dist/xml/parse.js +109 -0
  535. package/dist/xml/positions.d.ts +26 -0
  536. package/dist/xml/positions.js +71 -0
  537. package/dist/xml/pretty.d.ts +37 -0
  538. package/dist/xml/pretty.js +137 -0
  539. package/dist/xml/serialize.d.ts +6 -0
  540. package/dist/xml/serialize.js +8 -0
  541. package/dist/xml/tolerant-tree.d.ts +56 -0
  542. package/dist/xml/tolerant-tree.js +134 -0
  543. package/dist/xpath/evaluate-async.d.ts +31 -0
  544. package/dist/xpath/evaluate-async.js +81 -0
  545. package/dist/xpath/evaluate.d.ts +98 -0
  546. package/dist/xpath/evaluate.js +340 -0
  547. package/dist/xpath/jsonpath.d.ts +40 -0
  548. package/dist/xpath/jsonpath.js +109 -0
  549. package/dist/xpath/namespaces.d.ts +29 -0
  550. package/dist/xpath/namespaces.js +101 -0
  551. package/dist/xpath/worker.d.ts +7 -0
  552. package/dist/xpath/worker.js +26 -0
  553. package/dist/xsd/builtins.d.ts +36 -0
  554. package/dist/xsd/builtins.js +108 -0
  555. package/dist/xsd/check-references.d.ts +25 -0
  556. package/dist/xsd/check-references.js +145 -0
  557. package/dist/xsd/form-edits.d.ts +57 -0
  558. package/dist/xsd/form-edits.js +153 -0
  559. package/dist/xsd/form-model.d.ts +153 -0
  560. package/dist/xsd/form-model.js +691 -0
  561. package/dist/xsd/locate.d.ts +42 -0
  562. package/dist/xsd/locate.js +249 -0
  563. package/dist/xsd/model.d.ts +249 -0
  564. package/dist/xsd/model.js +1 -0
  565. package/dist/xsd/parse-particles.d.ts +48 -0
  566. package/dist/xsd/parse-particles.js +320 -0
  567. package/dist/xsd/parse-schema.d.ts +21 -0
  568. package/dist/xsd/parse-schema.js +143 -0
  569. package/dist/xsd/resolve-content.d.ts +18 -0
  570. package/dist/xsd/resolve-content.js +242 -0
  571. package/dist/xsd/sample-generator.d.ts +51 -0
  572. package/dist/xsd/sample-generator.js +291 -0
  573. package/dist/xsd/sample-types.d.ts +21 -0
  574. package/dist/xsd/sample-types.js +69 -0
  575. package/dist/xsd/sample-values.d.ts +54 -0
  576. package/dist/xsd/sample-values.js +267 -0
  577. package/dist/xsd/schema-set.d.ts +51 -0
  578. package/dist/xsd/schema-set.js +203 -0
  579. package/dist/xsd/xml-scan.d.ts +64 -0
  580. package/dist/xsd/xml-scan.js +286 -0
  581. package/dist/xsd/xml-writer.d.ts +56 -0
  582. package/dist/xsd/xml-writer.js +103 -0
  583. package/package.json +69 -0
@@ -0,0 +1,340 @@
1
+ /**
2
+ * XPath 3.1 / XQuery 3.1 evaluation against a response, for the response Query scratchpad. Where
3
+ * classic SOAP workbenches limit querying to XPath 2.0 inside assertions, this runs both languages
4
+ * over the actual bytes the server returned, ahead of any assertion.
5
+ *
6
+ * A JSON response is queried by the same two languages ({@link evaluateJson}) rather than by a third
7
+ * one: XPath 3.1 has maps, arrays and the `?` lookup operator, so `?items?*[?status = "open"]?id`
8
+ * needs no new dependency and no second expression syntax for users to learn. The context item is
9
+ * the parsed document itself.
10
+ */
11
+ import fontoxpathModule from 'fontoxpath';
12
+ import { getPosition, parseXml } from '../xml/parse.js';
13
+ import { serializeXml } from '../xml/serialize.js';
14
+ import { LineIndex } from '../xml/positions.js';
15
+ import { evaluateJsonPath } from './jsonpath.js';
16
+ // `fontoxpath` ships as CommonJS; its named exports only land on the default import under
17
+ // Node's ESM interop, so every entry point this module needs is re-destructured here once.
18
+ const { evaluateXPath, Language } = fontoxpathModule;
19
+ /** The result of {@link evaluate} is capped at this many items; a query producing more is
20
+ * still evaluated to completion, but only the first `RESULT_CAP` are returned to the caller,
21
+ * with `truncated: true` so the UI can say so instead of silently hiding the rest. */
22
+ const RESULT_CAP = 1_000;
23
+ const NODE_TYPE = {
24
+ 1: 'element',
25
+ 2: 'attribute',
26
+ 3: 'text',
27
+ 7: 'pi',
28
+ 8: 'comment',
29
+ 9: 'document',
30
+ };
31
+ /** True when `value` looks like a DOM node (has a numeric `nodeType`), as opposed to an atomic
32
+ * XPath value (string, number, boolean, map, array). Fontoxpath's `ALL_RESULTS_TYPE` mixes both
33
+ * shapes in one array, so every item has to be classified individually. */
34
+ function isNode(value) {
35
+ return typeof value === 'object' && value !== null && typeof value.nodeType === 'number';
36
+ }
37
+ /**
38
+ * Builds `/a/b[2]`-shaped paths for the nodes of one result set.
39
+ *
40
+ * Doing this naively — walking `previousSibling` for every ancestor of every result — is
41
+ * quadratic in the number of siblings, and a 1 MB response is typically one element with tens
42
+ * of thousands of children. Both the per-element positional index (filled a whole sibling list
43
+ * at a time) and the finished path string are cached, so the whole result set costs one pass.
44
+ * Together with the shared `LineIndex` below, that took the budgeted 1 MB query from a median
45
+ * of 353 ms to 145 ms, and `…/p:Row` from 333 ms to 123 ms (see the Task 50 report).
46
+ */
47
+ class PathIndex {
48
+ positions = new Map();
49
+ paths = new Map();
50
+ /** The path of `node`; attributes are addressed as `@name` on their owning element. */
51
+ path(node) {
52
+ if (node.nodeType === 2) {
53
+ const owner = node.ownerElement ?? undefined;
54
+ const ownerPath = owner === undefined ? '/' : this.elementPath(owner);
55
+ return `${ownerPath}/@${node.nodeName ?? ''}`;
56
+ }
57
+ return this.elementPath(node);
58
+ }
59
+ /**
60
+ * The path of an element — or of the nearest element at or above a non-element node.
61
+ *
62
+ * Iterative on purpose: a deeply nested document (an envelope wrapping thousands of levels)
63
+ * would otherwise overflow the call stack on what is only a walk to the root. Ancestors are
64
+ * collected upwards until a cached path (or the root) is reached, then the path is built back
65
+ * down, caching every ancestor on the way so the next result in the same subtree is free.
66
+ */
67
+ elementPath(node) {
68
+ // Non-element nodes (text, comment, PI) have no step of their own: they are reported at the
69
+ // path of their owning element, which is what a user needs to locate them in the document.
70
+ let current = node;
71
+ while (current !== null && current !== undefined && current.nodeType !== 1) {
72
+ current = current.parentNode ?? null;
73
+ }
74
+ if (current === null || current === undefined) {
75
+ return '/';
76
+ }
77
+ const pending = [];
78
+ let path;
79
+ let walk = current;
80
+ while (walk !== null && walk !== undefined && walk.nodeType === 1) {
81
+ const cached = this.paths.get(walk);
82
+ if (cached !== undefined) {
83
+ path = cached;
84
+ break;
85
+ }
86
+ pending.push(walk);
87
+ walk = walk.parentNode ?? null;
88
+ }
89
+ let prefix = path ?? '';
90
+ for (let i = pending.length - 1; i >= 0; i -= 1) {
91
+ const element = pending[i];
92
+ if (element === undefined) {
93
+ continue;
94
+ }
95
+ prefix = `${prefix}/${element.nodeName ?? '*'}[${this.position(element)}]`;
96
+ this.paths.set(element, prefix);
97
+ }
98
+ return prefix === '' ? '/' : prefix;
99
+ }
100
+ /** The 1-based position of `node` among its same-named element siblings. */
101
+ position(node) {
102
+ const cached = this.positions.get(node);
103
+ if (cached !== undefined) {
104
+ return cached;
105
+ }
106
+ const parent = node.parentNode ?? undefined;
107
+ if (parent === undefined || parent === null) {
108
+ this.positions.set(node, 1);
109
+ return 1;
110
+ }
111
+ // Index the entire sibling list in one forward pass: the next result node under the same
112
+ // parent — the common case for a query over a list — then costs nothing.
113
+ const counts = new Map();
114
+ let child = parent.firstChild ?? null;
115
+ while (child !== null && child !== undefined) {
116
+ if (child.nodeType === 1) {
117
+ const name = child.nodeName ?? '*';
118
+ const next = (counts.get(name) ?? 0) + 1;
119
+ counts.set(name, next);
120
+ this.positions.set(child, next);
121
+ }
122
+ child = child.nextSibling ?? null;
123
+ }
124
+ return this.positions.get(node) ?? 1;
125
+ }
126
+ }
127
+ /** Best-effort text range for a node: available whenever xmldom recorded a source position for
128
+ * it (i.e. it was parsed, not constructed by an XQuery node constructor). The end offset is
129
+ * approximated from the serialised length, so it can drift on nodes containing entity
130
+ * references or non-canonical whitespace; callers treat it as advisory ("Reveal" selection),
131
+ * not as an exact byte-for-byte span. */
132
+ function rangeOf(node, lineIndex, serialized) {
133
+ const position = getPosition(node);
134
+ if (position === undefined) {
135
+ return undefined;
136
+ }
137
+ const start = lineIndex.positionToOffset(position.line, position.column);
138
+ return { start, end: start + serialized.length };
139
+ }
140
+ /** Renders one node-shaped result item. */
141
+ function toNodeItem(node, lineIndex, paths) {
142
+ const kind = NODE_TYPE[node.nodeType] ?? 'element';
143
+ if (node.nodeType === 2) {
144
+ const text = node.nodeValue ?? '';
145
+ return { text, nodeKind: 'attribute', path: paths.path(node) };
146
+ }
147
+ if (node.nodeType === 3) {
148
+ const text = node.nodeValue ?? '';
149
+ return { text, nodeKind: 'text', path: paths.path(node), ...withRange(node, lineIndex, text) };
150
+ }
151
+ const text = serializeXml(node);
152
+ return { text, nodeKind: kind, path: paths.path(node), ...withRange(node, lineIndex, text) };
153
+ }
154
+ /** Spreads `{range}` in only when one could be computed, keeping `exactOptionalPropertyTypes` happy. */
155
+ function withRange(node, lineIndex, serialized) {
156
+ const range = rangeOf(node, lineIndex, serialized);
157
+ return range === undefined ? {} : { range };
158
+ }
159
+ /** A type label for an atomic XPath 3.1 value: maps and arrays are structural, everything else
160
+ * is reported by its JavaScript runtime type (fontoxpath does not expose the XML Schema type a
161
+ * value was cast from once it has been atomised, so this is a best-effort approximation). */
162
+ function typeOf(value) {
163
+ if (Array.isArray(value)) {
164
+ return 'array';
165
+ }
166
+ if (typeof value === 'number') {
167
+ return Number.isInteger(value) ? 'xs:integer' : 'xs:double';
168
+ }
169
+ if (typeof value === 'boolean') {
170
+ return 'xs:boolean';
171
+ }
172
+ if (typeof value === 'string') {
173
+ return 'xs:string';
174
+ }
175
+ if (typeof value === 'object' && value !== null) {
176
+ return 'map';
177
+ }
178
+ /* v8 ignore next -- no fontoxpath item observed to be untyped-atomic under ALL_RESULTS_TYPE */
179
+ return 'xs:untypedAtomic';
180
+ }
181
+ /** Renders one atomic value as the Query view shows it: JSON for structures, plain text otherwise. */
182
+ function toValueText(value) {
183
+ if (typeof value === 'string') {
184
+ return value;
185
+ }
186
+ /* v8 ignore next 3 -- fontoxpath's own xs:dateTime/xs:date values are not JS `Date` instances */
187
+ if (value instanceof Date) {
188
+ return value.toISOString();
189
+ }
190
+ if (typeof value === 'object' && value !== null) {
191
+ return JSON.stringify(value);
192
+ }
193
+ return String(value);
194
+ }
195
+ /** Reads the `{line, column}` fontoxpath attaches to a parse/evaluation error, when present. */
196
+ function positionOf(error) {
197
+ const start = error.position?.start;
198
+ if (start === undefined || start.line === undefined) {
199
+ return undefined;
200
+ }
201
+ const column = start.ga ?? (start.offset !== undefined ? start.offset + 1 : undefined);
202
+ return column === undefined ? undefined : { line: start.line, column };
203
+ }
204
+ /** Extracts the stable error code fontoxpath prefixes onto most of its messages, e.g. `XPST0003`. */
205
+ function codeOf(message) {
206
+ const match = /\b([A-Z]{4}\d{4})\b/.exec(message);
207
+ return match?.[1];
208
+ }
209
+ /**
210
+ * Evaluates an XPath 3.1 or XQuery 3.1 `expression` against `xml`.
211
+ *
212
+ * Never throws: parse failures, unresolved namespace prefixes, and runtime errors are all
213
+ * reported as `{kind: 'error'}` results instead, since a scratchpad query is expected to be
214
+ * wrong sometimes and the caller (the Query view) needs a value to render either way.
215
+ *
216
+ * @param xml the document to query (typically a response envelope)
217
+ * @param expression the XPath or XQuery source
218
+ * @param options language and namespace bindings
219
+ */
220
+ export function evaluate(xml, expression, options) {
221
+ if (options.language === 'jsonpath') {
222
+ // Reachable only from a caller that paired the language with the wrong document kind; the
223
+ // Query view hides the JSONPath option for an XML response. Reported rather than thrown, like
224
+ // every other way a query can be wrong.
225
+ return { kind: 'error', message: 'JSONPath queries a JSON response, not an XML one' };
226
+ }
227
+ let doc;
228
+ try {
229
+ doc = parseXml(xml);
230
+ }
231
+ catch (error) {
232
+ return { kind: 'error', message: error instanceof Error ? error.message : String(error) };
233
+ }
234
+ const namespaces = options.namespaces ?? {};
235
+ const namespaceResolver = (prefix) => {
236
+ if (prefix === '') {
237
+ return namespaces[''] ?? null;
238
+ }
239
+ return namespaces[prefix] ?? null;
240
+ };
241
+ let raw;
242
+ try {
243
+ raw = evaluateXPath(expression, doc, null, null, evaluateXPath.ALL_RESULTS_TYPE, {
244
+ language: options.language === 'xquery' ? Language.XQUERY_3_1_LANGUAGE : Language.XPATH_3_1_LANGUAGE,
245
+ namespaceResolver,
246
+ });
247
+ }
248
+ catch (error) {
249
+ const message = error instanceof Error ? error.message : String(error);
250
+ const code = codeOf(message);
251
+ const position = positionOf(error);
252
+ const result = {
253
+ kind: 'error',
254
+ message,
255
+ ...(code !== undefined ? { code } : {}),
256
+ ...(position !== undefined ? { position } : {}),
257
+ };
258
+ return result;
259
+ }
260
+ if (raw.length === 0) {
261
+ return { kind: 'empty' };
262
+ }
263
+ const truncated = raw.length > RESULT_CAP;
264
+ const capped = raw.slice(0, RESULT_CAP);
265
+ const nodeLike = capped.filter(isNode);
266
+ // A query result is treated as "nodes" when every item is node-shaped; a mix (which XPath
267
+ // itself never produces from a single path expression, but a hand-written FLWOR could)
268
+ // falls back to "values" so nothing is silently dropped.
269
+ if (nodeLike.length === capped.length) {
270
+ // One `LineIndex` for the whole result set: `rangeOf` used to re-split the source document
271
+ // per item, which on a 1 MB response cost more than the XPath evaluation itself.
272
+ const lineIndex = new LineIndex(xml);
273
+ const paths = new PathIndex();
274
+ return {
275
+ kind: 'nodes',
276
+ items: capped.map((item) => toNodeItem(item, lineIndex, paths)),
277
+ truncated,
278
+ };
279
+ }
280
+ return {
281
+ kind: 'values',
282
+ items: capped.map((item) => ({ text: toValueText(item), type: typeOf(item) })),
283
+ truncated,
284
+ };
285
+ }
286
+ /**
287
+ * Evaluates `expression` against a JSON document.
288
+ *
289
+ * The parsed JSON *is* the context item, so a lookup starts at `?`: `?name` reads a field of a
290
+ * top-level object, `?*` every member of an array, and `?items?*[?status = "open"]?id` filters and
291
+ * projects in one expression. Results are always values — JSON has no nodes — so nothing here needs
292
+ * the document's text, and a result carries no source range.
293
+ *
294
+ * A `language` of `jsonpath` is delegated to {@link evaluateJsonPath} instead, which answers in this same
295
+ * result shape — so one caller, and one result renderer, covers all three languages.
296
+ *
297
+ * @param json the response body as text
298
+ * @param expression the XPath, XQuery or JSONPath source
299
+ * @param options language (namespaces are accepted and unused: JSON has no names to qualify)
300
+ */
301
+ export function evaluateJson(json, expression, options) {
302
+ if (options.language === 'jsonpath') {
303
+ return evaluateJsonPath(json, expression);
304
+ }
305
+ let context;
306
+ try {
307
+ context = JSON.parse(json);
308
+ }
309
+ catch (error) {
310
+ // The same shape a malformed XML document produces, so one caller handles both.
311
+ return { kind: 'error', message: error instanceof Error ? error.message : String(error) };
312
+ }
313
+ let raw;
314
+ try {
315
+ raw = evaluateXPath(expression, context, null, null, evaluateXPath.ALL_RESULTS_TYPE, {
316
+ language: options.language === 'xquery' ? Language.XQUERY_3_1_LANGUAGE : Language.XPATH_3_1_LANGUAGE,
317
+ });
318
+ }
319
+ catch (error) {
320
+ const message = error instanceof Error ? error.message : String(error);
321
+ const code = codeOf(message);
322
+ const position = positionOf(error);
323
+ return {
324
+ kind: 'error',
325
+ message,
326
+ ...(code !== undefined ? { code } : {}),
327
+ ...(position !== undefined ? { position } : {}),
328
+ };
329
+ }
330
+ if (raw.length === 0) {
331
+ return { kind: 'empty' };
332
+ }
333
+ const truncated = raw.length > RESULT_CAP;
334
+ const capped = raw.slice(0, RESULT_CAP);
335
+ return {
336
+ kind: 'values',
337
+ items: capped.map((item) => ({ text: toValueText(item), type: typeOf(item) })),
338
+ truncated,
339
+ };
340
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * JSONPath evaluation against a JSON response body, for the response Query view's third language.
3
+ *
4
+ * It lives beside the XPath evaluators, not under `rest/`, for two reasons: JSONPath is a query
5
+ * language for JSON rather than anything REST-specific, and `rest/` carries the browser-safe subpath
6
+ * export (`@wirebench/engine/rest`) that the renderer imports — a Node-only dependency must not be
7
+ * reachable from there, for the same reason `fontoxpath` is not.
8
+ *
9
+ * XPath 3.1 already queries JSON (`xpath/evaluate.ts`'s `evaluateJson`), and it is the more capable
10
+ * of the two. JSONPath is here because it is the syntax REST users already have in their heads and
11
+ * in their notes — `$.items[?(@.status=="open")].id` is what a person pastes in from a README — and
12
+ * asking them to translate it into `?items?*[?status = "open"]?id` before they can check one field
13
+ * is friction with no payoff. Both languages stay available side by side.
14
+ *
15
+ * The result shape is identical to the XPath evaluators' {@link QueryResult}, so the Query view
16
+ * renders all three languages through one code path. JSONPath yields **values**, never nodes — JSON
17
+ * has none — and each item carries the normalised path it was found at, which is what makes a
18
+ * multi-match result readable.
19
+ *
20
+ * Filter and script expressions run under `eval: 'safe'`, which is load-bearing rather than a
21
+ * default worth inheriting silently. `jsonpath-plus` can evaluate `?(...)` and `(...)` with the
22
+ * platform's real `eval`/`Function`, or with a `jsep` expression parser that has no access to the
23
+ * host; `'safe'` selects the parser. So `$..book[?(@.price<10)]` works, and nothing reachable from a
24
+ * *response body* can execute. The expression is the user's own; the data it walks is whatever
25
+ * server answered, and that data never gets to run. (`eval: false` was the first thing tried and is
26
+ * wrong here: it does not harden the filter, it removes it — `?(...)` is refused outright, which
27
+ * takes most of JSONPath's usefulness with it.)
28
+ */
29
+ import type { QueryResult } from './evaluate.js';
30
+ /**
31
+ * Evaluates a JSONPath `expression` against a JSON document.
32
+ *
33
+ * Never throws: a malformed document and a malformed expression are both reported as
34
+ * `{kind: 'error'}`, the same as the XPath evaluators, because a scratchpad query is expected to be
35
+ * wrong sometimes and the caller needs a value to render either way.
36
+ *
37
+ * @param json the response body as text
38
+ * @param expression the JSONPath source, e.g. `$.items[?(@.status=="open")].id`
39
+ */
40
+ export declare function evaluateJsonPath(json: string, expression: string): QueryResult;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * JSONPath evaluation against a JSON response body, for the response Query view's third language.
3
+ *
4
+ * It lives beside the XPath evaluators, not under `rest/`, for two reasons: JSONPath is a query
5
+ * language for JSON rather than anything REST-specific, and `rest/` carries the browser-safe subpath
6
+ * export (`@wirebench/engine/rest`) that the renderer imports — a Node-only dependency must not be
7
+ * reachable from there, for the same reason `fontoxpath` is not.
8
+ *
9
+ * XPath 3.1 already queries JSON (`xpath/evaluate.ts`'s `evaluateJson`), and it is the more capable
10
+ * of the two. JSONPath is here because it is the syntax REST users already have in their heads and
11
+ * in their notes — `$.items[?(@.status=="open")].id` is what a person pastes in from a README — and
12
+ * asking them to translate it into `?items?*[?status = "open"]?id` before they can check one field
13
+ * is friction with no payoff. Both languages stay available side by side.
14
+ *
15
+ * The result shape is identical to the XPath evaluators' {@link QueryResult}, so the Query view
16
+ * renders all three languages through one code path. JSONPath yields **values**, never nodes — JSON
17
+ * has none — and each item carries the normalised path it was found at, which is what makes a
18
+ * multi-match result readable.
19
+ *
20
+ * Filter and script expressions run under `eval: 'safe'`, which is load-bearing rather than a
21
+ * default worth inheriting silently. `jsonpath-plus` can evaluate `?(...)` and `(...)` with the
22
+ * platform's real `eval`/`Function`, or with a `jsep` expression parser that has no access to the
23
+ * host; `'safe'` selects the parser. So `$..book[?(@.price<10)]` works, and nothing reachable from a
24
+ * *response body* can execute. The expression is the user's own; the data it walks is whatever
25
+ * server answered, and that data never gets to run. (`eval: false` was the first thing tried and is
26
+ * wrong here: it does not harden the filter, it removes it — `?(...)` is refused outright, which
27
+ * takes most of JSONPath's usefulness with it.)
28
+ */
29
+ import { JSONPath } from 'jsonpath-plus';
30
+ /** Result cap, matching `xpath/evaluate.ts`: a bigger result set is evaluated but reported
31
+ * truncated, so the UI can say so instead of silently hiding the rest. */
32
+ const RESULT_CAP = 1_000;
33
+ /** A type label for a JSON value, in JSON's own vocabulary rather than XML Schema's — a JSONPath
34
+ * user is thinking in `object`/`array`/`string`, not `xs:string`. */
35
+ function typeOf(value) {
36
+ if (value === null) {
37
+ return 'null';
38
+ }
39
+ if (Array.isArray(value)) {
40
+ return 'array';
41
+ }
42
+ const type = typeof value;
43
+ return type === 'object' ? 'object' : type;
44
+ }
45
+ /** Renders one match as the Query view shows it: a string as itself, anything structural as JSON.
46
+ *
47
+ * Every branch is a JSON value, so the cases are closed: string, number, boolean, null, and the two
48
+ * structural kinds. `undefined` is not a JSON value but `JSONPath` can hand one back for a path that
49
+ * walked off the end of an object, so it gets a branch rather than becoming `"undefined"` by
50
+ * accident. */
51
+ function toValueText(value) {
52
+ if (typeof value === 'string') {
53
+ return value;
54
+ }
55
+ if (typeof value === 'number' || typeof value === 'boolean') {
56
+ return String(value);
57
+ }
58
+ if (value === null) {
59
+ return 'null';
60
+ }
61
+ if (value === undefined) {
62
+ return 'undefined';
63
+ }
64
+ return JSON.stringify(value);
65
+ }
66
+ /**
67
+ * Evaluates a JSONPath `expression` against a JSON document.
68
+ *
69
+ * Never throws: a malformed document and a malformed expression are both reported as
70
+ * `{kind: 'error'}`, the same as the XPath evaluators, because a scratchpad query is expected to be
71
+ * wrong sometimes and the caller needs a value to render either way.
72
+ *
73
+ * @param json the response body as text
74
+ * @param expression the JSONPath source, e.g. `$.items[?(@.status=="open")].id`
75
+ */
76
+ export function evaluateJsonPath(json, expression) {
77
+ let document;
78
+ try {
79
+ document = JSON.parse(json);
80
+ }
81
+ catch (error) {
82
+ return { kind: 'error', message: error instanceof Error ? error.message : String(error) };
83
+ }
84
+ let matches;
85
+ try {
86
+ // `resultType: 'all'` is what carries each match's normalised path alongside its value; `wrap`
87
+ // keeps the return an array even for a single match, so there is one shape to handle.
88
+ matches = JSONPath({
89
+ path: expression,
90
+ json: document,
91
+ resultType: 'all',
92
+ wrap: true,
93
+ eval: 'safe',
94
+ });
95
+ }
96
+ catch (error) {
97
+ return { kind: 'error', message: error instanceof Error ? error.message : String(error) };
98
+ }
99
+ if (matches.length === 0) {
100
+ return { kind: 'empty' };
101
+ }
102
+ const truncated = matches.length > RESULT_CAP;
103
+ const items = matches.slice(0, RESULT_CAP).map((match) => ({
104
+ text: toValueText(match.value),
105
+ type: typeOf(match.value),
106
+ path: match.path,
107
+ }));
108
+ return { kind: 'values', items, truncated };
109
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Namespace discovery for the XPath/XQuery scratchpad: what prefixes are already bound in a
3
+ * response document, and what the engine would suggest for the ones that aren't.
4
+ */
5
+ /**
6
+ * Collects every namespace prefix declared anywhere in `xml`, first binding wins (outermost
7
+ * declaration first, since traversal is document order and a descendant re-declaring a prefix
8
+ * does not overwrite the ancestor's entry here — the scratchpad only needs *a* usable binding
9
+ * per prefix, not exact in-scope shadowing at every node).
10
+ *
11
+ * The default namespace (`xmlns="..."`) is exposed under the empty-string key `''`; the caller
12
+ * (the Query view's namespace table) lets the user assign it a real prefix before running a
13
+ * query, since XPath has no syntax for referring to the default namespace directly.
14
+ *
15
+ * @param xml a well-formed XML document (typically a response envelope)
16
+ * @returns prefix (or `''` for the default namespace) to namespace URI
17
+ */
18
+ export declare function collectNamespaces(xml: string): Record<string, string>;
19
+ /**
20
+ * Suggests a prefix for every namespace URI used by an element or attribute in `xml` that has
21
+ * no prefix bound to it by {@link collectNamespaces} (e.g. the document only declares it as the
22
+ * default namespace, or an attribute uses a namespace no element declaration names). Reuses the
23
+ * engine's conventional-prefix heuristic ({@link prefixForNamespace}) so suggestions match what
24
+ * the rest of Wirebench would generate for the same URI.
25
+ *
26
+ * @param xml a well-formed XML document
27
+ * @returns namespace URI to suggested prefix, for URIs {@link collectNamespaces} left unbound
28
+ */
29
+ export declare function suggestPrefixes(xml: string): Record<string, string>;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Namespace discovery for the XPath/XQuery scratchpad: what prefixes are already bound in a
3
+ * response document, and what the engine would suggest for the ones that aren't.
4
+ */
5
+ import { parseXml } from '../xml/parse.js';
6
+ import { prefixForNamespace } from '../soap/prefixes.js';
7
+ /** True for element nodes (xmldom `nodeType` 1) — the only nodes that carry `xmlns:*` attributes. */
8
+ function isElement(node) {
9
+ return node.nodeType === 1;
10
+ }
11
+ /**
12
+ * Collects every namespace prefix declared anywhere in `xml`, first binding wins (outermost
13
+ * declaration first, since traversal is document order and a descendant re-declaring a prefix
14
+ * does not overwrite the ancestor's entry here — the scratchpad only needs *a* usable binding
15
+ * per prefix, not exact in-scope shadowing at every node).
16
+ *
17
+ * The default namespace (`xmlns="..."`) is exposed under the empty-string key `''`; the caller
18
+ * (the Query view's namespace table) lets the user assign it a real prefix before running a
19
+ * query, since XPath has no syntax for referring to the default namespace directly.
20
+ *
21
+ * @param xml a well-formed XML document (typically a response envelope)
22
+ * @returns prefix (or `''` for the default namespace) to namespace URI
23
+ */
24
+ export function collectNamespaces(xml) {
25
+ const doc = parseXml(xml);
26
+ const bindings = {};
27
+ const visit = (node) => {
28
+ if (isElement(node)) {
29
+ const attributes = node.attributes;
30
+ for (let i = 0; i < attributes.length; i += 1) {
31
+ const attr = attributes.item(i);
32
+ /* v8 ignore next 3 -- `i < attributes.length` guarantees `item(i)` is non-null */
33
+ if (attr === null) {
34
+ continue;
35
+ }
36
+ if (attr.name === 'xmlns') {
37
+ if (!('' in bindings)) {
38
+ bindings[''] = attr.value;
39
+ }
40
+ }
41
+ else if (attr.name.startsWith('xmlns:')) {
42
+ const prefix = attr.name.slice('xmlns:'.length);
43
+ if (!(prefix in bindings)) {
44
+ bindings[prefix] = attr.value;
45
+ }
46
+ }
47
+ }
48
+ }
49
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) {
50
+ visit(child);
51
+ }
52
+ };
53
+ /* v8 ignore next 3 -- `parseXml` throws before returning a document with no root element */
54
+ if (doc.documentElement !== null) {
55
+ visit(doc.documentElement);
56
+ }
57
+ return bindings;
58
+ }
59
+ /**
60
+ * Suggests a prefix for every namespace URI used by an element or attribute in `xml` that has
61
+ * no prefix bound to it by {@link collectNamespaces} (e.g. the document only declares it as the
62
+ * default namespace, or an attribute uses a namespace no element declaration names). Reuses the
63
+ * engine's conventional-prefix heuristic ({@link prefixForNamespace}) so suggestions match what
64
+ * the rest of Wirebench would generate for the same URI.
65
+ *
66
+ * @param xml a well-formed XML document
67
+ * @returns namespace URI to suggested prefix, for URIs {@link collectNamespaces} left unbound
68
+ */
69
+ export function suggestPrefixes(xml) {
70
+ const doc = parseXml(xml);
71
+ const bound = collectNamespaces(xml);
72
+ // Only a *real* prefix (not the default namespace's '' entry) lets an XPath expression
73
+ // address the namespace directly — a URI bound only as the default namespace still needs a
74
+ // suggestion here even though `collectNamespaces` already reports it under ''.
75
+ const boundUris = new Set(Object.entries(bound)
76
+ .filter(([prefix]) => prefix !== '')
77
+ .map(([, uri]) => uri));
78
+ const taken = new Set(Object.keys(bound).filter((prefix) => prefix !== ''));
79
+ const suggestions = {};
80
+ // Attributes are never affected: an attribute can only carry a namespace URI via an explicit
81
+ // prefix (there is no such thing as a "default namespace" attribute in XML), and that prefix
82
+ // is always one `collectNamespaces` already found — so only element namespaces can be unbound.
83
+ const visit = (node) => {
84
+ if (isElement(node)) {
85
+ const uri = node.namespaceURI;
86
+ if (uri !== null && uri !== '' && !boundUris.has(uri) && !(uri in suggestions)) {
87
+ const prefix = prefixForNamespace(uri, taken);
88
+ taken.add(prefix);
89
+ suggestions[uri] = prefix;
90
+ }
91
+ }
92
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) {
93
+ visit(child);
94
+ }
95
+ };
96
+ /* v8 ignore next 3 -- `parseXml` throws before returning a document with no root element */
97
+ if (doc.documentElement !== null) {
98
+ visit(doc.documentElement);
99
+ }
100
+ return suggestions;
101
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Entry point run inside a `node:worker_threads` Worker by {@link evaluateWithTimeout}. Receives
3
+ * `{text, kind, expression, options}` as `workerData`, runs the synchronous evaluator once, and
4
+ * posts the {@link QueryResult} back — this file never imports anything Electron/DOM-specific,
5
+ * only what the evaluators themselves need, so it can run unmodified in a bare worker thread.
6
+ */
7
+ export {};
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Entry point run inside a `node:worker_threads` Worker by {@link evaluateWithTimeout}. Receives
3
+ * `{text, kind, expression, options}` as `workerData`, runs the synchronous evaluator once, and
4
+ * posts the {@link QueryResult} back — this file never imports anything Electron/DOM-specific,
5
+ * only what the evaluators themselves need, so it can run unmodified in a bare worker thread.
6
+ */
7
+ import { parentPort, workerData } from 'node:worker_threads';
8
+ import { evaluate, evaluateJson } from './evaluate.js';
9
+ /* v8 ignore start -- exercised only inside a real worker thread; covered by evaluate-async.test.ts
10
+ end-to-end (a query actually running to completion, or timing out), not by unit-level coverage
11
+ instrumentation, which does not attach across the thread boundary. */
12
+ if (parentPort !== null) {
13
+ const request = workerData;
14
+ let result;
15
+ try {
16
+ result =
17
+ request.kind === 'json'
18
+ ? evaluateJson(request.text, request.expression, request.options)
19
+ : evaluate(request.text, request.expression, request.options);
20
+ }
21
+ catch (error) {
22
+ result = { kind: 'error', message: error instanceof Error ? error.message : String(error) };
23
+ }
24
+ parentPort.postMessage(result);
25
+ }
26
+ /* v8 ignore stop */