@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,288 @@
1
+ /**
2
+ * Builds the in-memory libxml2 file set one bundle's schema documents compile into: every XSD
3
+ * (and every WSDL-embedded `<types>` schema) as its own synthetic file, one glue file per target
4
+ * namespace (so a namespace split across several documents can still be `xs:import`ed with a
5
+ * single reference), and the wrapper schema helpers that pull every namespace into one document
6
+ * a Body child can be validated against.
7
+ *
8
+ * Split out of `schema-validator.ts` (Task 42 fix round 1, minor 9): that module now only
9
+ * orchestrates validating a fragment against the set this one builds.
10
+ */
11
+ import { NS } from '../xml/namespaces.js';
12
+ import { serializeXml } from '../xml/serialize.js';
13
+ import { childElements, firstChildElement } from '../wsdl/dom-utils.js';
14
+ import { escapeAttribute } from '../xsd/xml-writer.js';
15
+ /**
16
+ * Per-bundle cache of the built file set. Keyed by bundle identity, so a
17
+ * re-import (a new bundle object) rebuilds and the old entry is collected.
18
+ */
19
+ const fileSetCache = new WeakMap();
20
+ /** The `xmlns`/`xmlns:*` declarations in scope at `element` from its ancestors, nearest first. */
21
+ function inheritedNamespaceDeclarations(element) {
22
+ const declarations = new Map();
23
+ let current = element.parentNode;
24
+ while (current !== null) {
25
+ if (current.nodeType === 1) {
26
+ const ancestor = current;
27
+ for (let index = 0; index < ancestor.attributes.length; index += 1) {
28
+ const attribute = ancestor.attributes.item(index);
29
+ if (attribute === null) {
30
+ continue;
31
+ }
32
+ if ((attribute.name === 'xmlns' || attribute.name.startsWith('xmlns:')) && !declarations.has(attribute.name)) {
33
+ declarations.set(attribute.name, attribute.value);
34
+ }
35
+ }
36
+ }
37
+ current = current.parentNode;
38
+ }
39
+ return declarations;
40
+ }
41
+ /** The `xs:import`/`xs:include`/`xs:redefine` elements of a schema, at any depth (they are top-level in practice). */
42
+ function referenceElements(schema) {
43
+ return ['import', 'include', 'redefine'].flatMap((name) => childElements(schema, NS.XSD, name));
44
+ }
45
+ /** The index of the `>` that closes the (opening) tag starting at `text[0]`, skipping any `>`
46
+ * that appears inside a quoted attribute value (a raw `>` needs no escaping there, so it is
47
+ * legal — `indexOf('>')` would stop at the first one and truncate the tag). Returns `-1` when
48
+ * the tag never closes (should not happen for a serializer's own output). */
49
+ function endOfStartTag(text) {
50
+ let quote;
51
+ for (let index = 0; index < text.length; index += 1) {
52
+ const char = text[index];
53
+ if (quote !== undefined) {
54
+ if (char === quote) {
55
+ quote = undefined;
56
+ }
57
+ continue;
58
+ }
59
+ if (char === '"' || char === "'") {
60
+ quote = char;
61
+ continue;
62
+ }
63
+ if (char === '>') {
64
+ return index;
65
+ }
66
+ }
67
+ return -1;
68
+ }
69
+ /**
70
+ * Clones `schema`, hoists the namespace declarations it inherited from its
71
+ * WSDL ancestors (prefixes used in `type="s:int"` attribute values would
72
+ * otherwise dangle), and rewrites every `schemaLocation` to the synthetic
73
+ * file name the referenced document was given.
74
+ */
75
+ function synthesizeSchema(schema, base, fileNameFor) {
76
+ const clone = schema.cloneNode(true);
77
+ for (const reference of referenceElements(clone)) {
78
+ const location = reference.getAttribute('schemaLocation');
79
+ if (location === null || location === '') {
80
+ continue;
81
+ }
82
+ let resolved;
83
+ try {
84
+ resolved = new URL(location, base).toString();
85
+ }
86
+ catch {
87
+ resolved = location;
88
+ }
89
+ const fileName = fileNameFor.get(resolved);
90
+ if (fileName === undefined) {
91
+ // The bundle never resolved this reference; dropping the location leaves
92
+ // a namespace-only import, which libxml2 treats as "assume it is declared
93
+ // elsewhere" instead of failing to compile the whole set.
94
+ reference.removeAttribute('schemaLocation');
95
+ continue;
96
+ }
97
+ reference.setAttribute('schemaLocation', fileName);
98
+ }
99
+ // The namespace declarations are injected into the serialized text rather than
100
+ // set as attributes: xmldom's serializer emits a declaration for the element's
101
+ // own prefix by itself, and setting the same one as an attribute would produce
102
+ // a duplicate (which libxml2 rejects as not well formed).
103
+ const text = serializeXml(clone);
104
+ const insertAt = text.search(/[\s/>]/);
105
+ const tagEnd = endOfStartTag(text);
106
+ const head = text.slice(0, tagEnd === -1 ? text.length : tagEnd);
107
+ const extra = [...inheritedNamespaceDeclarations(schema)]
108
+ .filter(([name]) => !new RegExp(`[\\s<]${name.replace(':', '\\:')}\\s*=`).test(head))
109
+ .map(([name, value]) => ` ${name}="${escapeAttribute(value)}"`)
110
+ .join('');
111
+ return `${text.slice(0, insertAt)}${extra}${text.slice(insertAt)}`;
112
+ }
113
+ /** Every `xs:schema` a bundled document contributes, with the document it came from. */
114
+ function schemaElementsOf(document) {
115
+ const root = document.document.documentElement;
116
+ if (root === null) {
117
+ return [];
118
+ }
119
+ if (document.kind === 'xsd') {
120
+ return root.namespaceURI === NS.XSD && root.localName === 'schema' ? [root] : [];
121
+ }
122
+ const types = firstChildElement(root, NS.WSDL, 'types');
123
+ return types === undefined ? [] : childElements(types, NS.XSD, 'schema');
124
+ }
125
+ /** Builds (or returns the cached) libxml2 file set for `bundle`. */
126
+ export function buildSchemaFileSet(bundle) {
127
+ const cached = fileSetCache.get(bundle);
128
+ if (cached !== undefined) {
129
+ return cached;
130
+ }
131
+ // Pass 1: name every document, so pass 2 can rewrite references to those names.
132
+ const fileNameFor = new Map();
133
+ const sources = [];
134
+ let index = 0;
135
+ for (const document of bundle.documents) {
136
+ const schemas = schemaElementsOf(document);
137
+ schemas.forEach((schema, ordinal) => {
138
+ index += 1;
139
+ const fileName = document.kind === 'wsdl' ? `embedded-${String(index)}.xsd` : `doc-${String(index)}.xsd`;
140
+ if (ordinal === 0) {
141
+ fileNameFor.set(document.location, fileName);
142
+ fileNameFor.set(document.requestedLocation, fileName);
143
+ }
144
+ sources.push({
145
+ schema,
146
+ base: document.location,
147
+ fileName,
148
+ chameleon: document.chameleonFor !== undefined,
149
+ });
150
+ });
151
+ }
152
+ // Pass 2: synthesize each schema, and group them by their own target namespace.
153
+ const files = [];
154
+ const byNamespace = new Map();
155
+ const noNamespace = [];
156
+ const documentOf = new Map();
157
+ for (const source of sources) {
158
+ files.push({ fileName: source.fileName, contents: synthesizeSchema(source.schema, source.base, fileNameFor) });
159
+ documentOf.set(source.fileName, source.base);
160
+ const targetNamespace = source.schema.getAttribute('targetNamespace');
161
+ if (targetNamespace === null || targetNamespace === '') {
162
+ // A chameleon include has no namespace of its own and is already pulled in
163
+ // by the schema that includes it; adding it again at the top level would
164
+ // redeclare its components.
165
+ if (!source.chameleon) {
166
+ noNamespace.push(source.fileName);
167
+ }
168
+ continue;
169
+ }
170
+ const bucket = byNamespace.get(targetNamespace);
171
+ if (bucket === undefined) {
172
+ byNamespace.set(targetNamespace, [source.fileName]);
173
+ }
174
+ else {
175
+ bucket.push(source.fileName);
176
+ }
177
+ }
178
+ // Pass 3: one glue schema per namespace, so a namespace split across several
179
+ // documents can still be imported by a wrapper with a single `xs:import`.
180
+ const glue = new Map();
181
+ let glueIndex = 0;
182
+ for (const [namespace, members] of byNamespace) {
183
+ glueIndex += 1;
184
+ const fileName = `ns-${String(glueIndex)}.xsd`;
185
+ const includes = members.map((member) => ` <xs:include schemaLocation="${escapeAttribute(member)}"/>`).join('\n');
186
+ files.push({
187
+ fileName,
188
+ contents: `<xs:schema xmlns:xs="${NS.XSD}" targetNamespace="${escapeAttribute(namespace)}">\n${includes}\n</xs:schema>`,
189
+ });
190
+ glue.set(namespace, fileName);
191
+ }
192
+ const fileSet = { files, glue, noNamespace, documentOf };
193
+ fileSetCache.set(bundle, fileSet);
194
+ return fileSet;
195
+ }
196
+ /** The `xs:import`/`xs:include` lines a wrapper needs to see every namespace but `own`. */
197
+ function wrapperReferences(fileSet, own) {
198
+ const lines = [];
199
+ for (const [namespace, fileName] of fileSet.glue) {
200
+ lines.push(namespace === own
201
+ ? ` <xs:include schemaLocation="${escapeAttribute(fileName)}"/>`
202
+ : ` <xs:import namespace="${escapeAttribute(namespace)}" schemaLocation="${escapeAttribute(fileName)}"/>`);
203
+ }
204
+ for (const fileName of fileSet.noNamespace) {
205
+ lines.push(` <xs:include schemaLocation="${escapeAttribute(fileName)}"/>`);
206
+ }
207
+ return lines.join('\n');
208
+ }
209
+ /** The wrapper schema for `document` style: no declarations of its own, just every namespace. */
210
+ export function documentWrapper(fileSet) {
211
+ return `<xs:schema xmlns:xs="${NS.XSD}">\n${wrapperReferences(fileSet, undefined)}\n</xs:schema>`;
212
+ }
213
+ /**
214
+ * The wrapper schema for `rpc` style: the body child is the operation wrapper
215
+ * element, which no schema declares, so one is synthesized here with a child
216
+ * per `wsdl:part`. `xs:all` rather than `xs:sequence`, because `parameterOrder`
217
+ * (and sample generation) may order the parts differently from the
218
+ * `wsdl:message`, and part order is not something this validator should police.
219
+ */
220
+ export function rpcWrapper(fileSet, namespace, elementName, binding) {
221
+ const prefixes = new Map([[NS.XSD, 'xs']]);
222
+ const prefixFor = (uri) => {
223
+ const existing = prefixes.get(uri);
224
+ if (existing !== undefined) {
225
+ return existing;
226
+ }
227
+ if (!fileSet.glue.has(uri)) {
228
+ return undefined;
229
+ }
230
+ const prefix = `p${String(prefixes.size)}`;
231
+ prefixes.set(uri, prefix);
232
+ return prefix;
233
+ };
234
+ const particles = binding.parts.map((part) => {
235
+ const name = escapeAttribute(part.name);
236
+ if (part.element !== undefined) {
237
+ const prefix = prefixFor(part.element.namespaceUri);
238
+ if (prefix !== undefined) {
239
+ return ` <xs:element ref="${prefix}:${escapeAttribute(part.element.localName)}"/>`;
240
+ }
241
+ return ` <xs:element name="${name}"/>`;
242
+ }
243
+ if (part.type !== undefined) {
244
+ const prefix = prefixFor(part.type.namespaceUri);
245
+ if (prefix !== undefined) {
246
+ return ` <xs:element name="${name}" type="${prefix}:${escapeAttribute(part.type.localName)}"/>`;
247
+ }
248
+ }
249
+ // An unknown part type must not fail the whole compile: accept anything.
250
+ return ` <xs:element name="${name}"/>`;
251
+ });
252
+ const declarations = [...prefixes].map(([uri, prefix]) => `xmlns:${prefix}="${escapeAttribute(uri)}"`).join(' ');
253
+ const content = particles.length === 0
254
+ ? ' <xs:complexType/>'
255
+ : ` <xs:complexType>\n <xs:all>\n${particles.join('\n')}\n </xs:all>\n </xs:complexType>`;
256
+ return [
257
+ `<xs:schema ${declarations} targetNamespace="${escapeAttribute(namespace)}" elementFormDefault="unqualified">`,
258
+ wrapperReferences(fileSet, namespace),
259
+ ` <xs:element name="${escapeAttribute(elementName)}">`,
260
+ content,
261
+ ' </xs:element>',
262
+ '</xs:schema>',
263
+ ].join('\n');
264
+ }
265
+ /**
266
+ * Human-readable label for every synthetic file name a diagnostic might mention: the original
267
+ * document's location for a document file, or "the schema set" for anything this module
268
+ * invented (a glue file, or the caller's own wrapper/body files).
269
+ */
270
+ export function fileSetLabels(fileSet) {
271
+ const labels = new Map();
272
+ for (const [fileName, location] of fileSet.documentOf) {
273
+ labels.set(fileName, location);
274
+ }
275
+ for (const fileName of fileSet.glue.values()) {
276
+ if (!labels.has(fileName)) {
277
+ labels.set(fileName, 'the schema set');
278
+ }
279
+ }
280
+ for (const fileName of fileSet.noNamespace) {
281
+ if (!labels.has(fileName)) {
282
+ labels.set(fileName, 'the schema set');
283
+ }
284
+ }
285
+ labels.set('wrapper.xsd', 'the schema set');
286
+ labels.set('body.xml', 'the message');
287
+ return labels;
288
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * XSD validation of a SOAP message body against the interface's schema set,
3
+ * using libxml2 compiled to WebAssembly (`xmllint-wasm`).
4
+ *
5
+ * The envelope itself is never validated against the XSD — no schema in a
6
+ * WSDL describes `soapenv:Envelope` — so this module extracts each child of
7
+ * `Body` as its own little document and validates that. The extraction keeps
8
+ * the original source offsets: the fragment is padded with as many blank
9
+ * lines as precede it in the envelope, so every line number libxml2 reports
10
+ * is already a line number in the envelope the user is editing.
11
+ *
12
+ * `xmllint-wasm` runs libxml2 inside its own Node worker thread, so a
13
+ * validation never blocks the caller's event loop (measured: a 500 KB body
14
+ * validates in ~50 ms with a worst-case event-loop gap of ~6 ms). No extra
15
+ * worker of our own is needed; a wall-clock timeout guards against a
16
+ * pathological schema instead.
17
+ *
18
+ * Building the libxml2 file set itself — one synthetic file per schema
19
+ * document, the per-namespace glue files, and the `document`/`rpc` wrapper
20
+ * schemas — lives in `schema-file-set.ts`; this module only orchestrates
21
+ * validating one fragment against what that one builds.
22
+ */
23
+ import type { DefinitionBundle } from '../wsdl/resolver.js';
24
+ import type { SchemaSet } from '../xsd/schema-set.js';
25
+ import type { ValidationBinding, ValidationProblem } from './types.js';
26
+ /** Default wall-clock budget for one validation, in milliseconds. */
27
+ export declare const DEFAULT_VALIDATION_TIMEOUT_MS = 10000;
28
+ /** What the schema validator validates against: the compiled set plus the raw documents behind it. */
29
+ export interface SchemaValidationTarget {
30
+ readonly schemaSet: SchemaSet;
31
+ readonly bundle: DefinitionBundle;
32
+ }
33
+ /** Options for {@link validateAgainstSchemaSet}. */
34
+ export interface SchemaValidationOptions {
35
+ /** The operation being validated; required for `rpc` style, where no global element declares the body. */
36
+ readonly binding?: ValidationBinding;
37
+ /** Wall-clock budget for the whole validation; defaults to {@link DEFAULT_VALIDATION_TIMEOUT_MS}. */
38
+ readonly timeoutMs?: number;
39
+ }
40
+ /**
41
+ * Validates the `Body` children of a SOAP envelope against an interface's
42
+ * schema set with libxml2.
43
+ *
44
+ * Never throws: a message that cannot be tokenized, an empty body, or a schema
45
+ * set with no components all yield an empty list (the structure checks own
46
+ * those reports). Positions in the returned problems are lines in `xml`.
47
+ *
48
+ * @param xml the whole envelope text
49
+ * @param target the compiled schema set plus the bundle the raw schema documents come from
50
+ * @param options the binding context (required for `rpc` style) and the timeout
51
+ * @returns every schema finding, in body order
52
+ */
53
+ export declare function validateAgainstSchemaSet(xml: string, target: SchemaValidationTarget, options?: SchemaValidationOptions): Promise<readonly ValidationProblem[]>;
@@ -0,0 +1,251 @@
1
+ /**
2
+ * XSD validation of a SOAP message body against the interface's schema set,
3
+ * using libxml2 compiled to WebAssembly (`xmllint-wasm`).
4
+ *
5
+ * The envelope itself is never validated against the XSD — no schema in a
6
+ * WSDL describes `soapenv:Envelope` — so this module extracts each child of
7
+ * `Body` as its own little document and validates that. The extraction keeps
8
+ * the original source offsets: the fragment is padded with as many blank
9
+ * lines as precede it in the envelope, so every line number libxml2 reports
10
+ * is already a line number in the envelope the user is editing.
11
+ *
12
+ * `xmllint-wasm` runs libxml2 inside its own Node worker thread, so a
13
+ * validation never blocks the caller's event loop (measured: a 500 KB body
14
+ * validates in ~50 ms with a worst-case event-loop gap of ~6 ms). No extra
15
+ * worker of our own is needed; a wall-clock timeout guards against a
16
+ * pathological schema instead.
17
+ *
18
+ * Building the libxml2 file set itself — one synthetic file per schema
19
+ * document, the per-namespace glue files, and the `document`/`rpc` wrapper
20
+ * schemas — lives in `schema-file-set.ts`; this module only orchestrates
21
+ * validating one fragment against what that one builds.
22
+ */
23
+ import { validateXML } from 'xmllint-wasm';
24
+ import { localNameOf, tokenizeXml, buildRangeTree } from '../xml/tolerant-tree.js';
25
+ import { escapeAttribute } from '../xsd/xml-writer.js';
26
+ import { buildSchemaFileSet, documentWrapper, fileSetLabels, rpcWrapper } from './schema-file-set.js';
27
+ /** Default wall-clock budget for one validation, in milliseconds. */
28
+ export const DEFAULT_VALIDATION_TIMEOUT_MS = 10_000;
29
+ /**
30
+ * Bundles whose most recent schema validation timed out and is still running in the background,
31
+ * mapped to the still-outstanding `validateXML` call. A new validation for the same bundle
32
+ * refuses to start a second libxml2 instance while one is stuck (minor 4 of the Task 42 fix
33
+ * round): a runaway schema would otherwise spawn one WASM instance per keystroke. The entry is
34
+ * removed as soon as the stale call finally settles, one way or the other.
35
+ */
36
+ const staleByBundle = new WeakMap();
37
+ /** The `xmlns`/`xmlns:*` declarations a range node carries, parsed out of its raw attribute text. */
38
+ function declarationsOf(node) {
39
+ const declarations = new Map();
40
+ const pattern = /(xmlns(?::[\w.-]+)?)\s*=\s*"([^"]*)"|(xmlns(?::[\w.-]+)?)\s*=\s*'([^']*)'/g;
41
+ let match;
42
+ while ((match = pattern.exec(node.rawAttrs)) !== null) {
43
+ const name = match[1] ?? match[3];
44
+ const value = match[2] ?? match[4];
45
+ if (name !== undefined && value !== undefined) {
46
+ declarations.set(name, value);
47
+ }
48
+ }
49
+ return declarations;
50
+ }
51
+ /**
52
+ * Extracts every child element of `Body` as its own document. Returns an empty
53
+ * list when the envelope cannot be tokenized (a half-typed document): the
54
+ * structure checks already report that, and guessing here would only produce
55
+ * bogus markers.
56
+ */
57
+ function bodyFragments(xml) {
58
+ const tokens = tokenizeXml(xml);
59
+ const roots = tokens === undefined ? undefined : buildRangeTree(tokens);
60
+ const envelope = roots?.find((node) => localNameOf(node.name) === 'Envelope');
61
+ const body = envelope?.children.find((node) => localNameOf(node.name) === 'Body');
62
+ if (envelope === undefined || body === undefined) {
63
+ return [];
64
+ }
65
+ // Namespace declarations the fragment inherits: envelope first, then Body,
66
+ // so a redeclaration on the inner element wins.
67
+ const inherited = new Map([...declarationsOf(envelope), ...declarationsOf(body)]);
68
+ return body.children.map((child) => {
69
+ const own = declarationsOf(child);
70
+ const extra = [...inherited]
71
+ .filter(([name]) => !own.has(name))
72
+ .map(([name, value]) => ` ${name}="${escapeAttribute(value)}"`)
73
+ .join('');
74
+ const raw = xml.slice(child.start, child.end);
75
+ const insertAt = 1 + child.name.length;
76
+ const fragment = `${raw.slice(0, insertAt)}${extra}${raw.slice(insertAt)}`;
77
+ const line = xml.slice(0, child.start).split('\n').length;
78
+ const prefix = child.name.includes(':') ? child.name.slice(0, child.name.indexOf(':')) : '';
79
+ const namespaceUri = (prefix === '' ? inherited.get('xmlns') : inherited.get(`xmlns:${prefix}`)) ??
80
+ own.get(prefix === '' ? 'xmlns' : `xmlns:${prefix}`) ??
81
+ '';
82
+ const declared = own.get(prefix === '' ? 'xmlns' : `xmlns:${prefix}`);
83
+ return {
84
+ name: child.name,
85
+ namespaceUri: declared ?? namespaceUri,
86
+ // Blank-line padding keeps libxml2's line numbers aligned with the envelope.
87
+ contents: `${'\n'.repeat(line - 1)}${fragment}`,
88
+ line,
89
+ };
90
+ });
91
+ }
92
+ /** Strips libxml2's "Schemas validity error : " prefix from a message, and every synthetic file
93
+ * name the file set might mention (`labels`) with a name the user actually recognizes. */
94
+ function cleanMessage(message, labels) {
95
+ let cleaned = message.replace(/^Schemas\s+\w+\s+(?:error|warning)\s*:\s*/i, '').trim();
96
+ for (const [fileName, label] of labels) {
97
+ if (cleaned.includes(fileName)) {
98
+ cleaned = cleaned.split(fileName).join(label);
99
+ }
100
+ }
101
+ return cleaned;
102
+ }
103
+ /** Runs `promise`, resolving to `fallback` when it takes longer than `ms`. */
104
+ async function withTimeout(promise, ms, fallback) {
105
+ let timer;
106
+ try {
107
+ return await Promise.race([
108
+ promise,
109
+ new Promise((resolve) => {
110
+ timer = setTimeout(() => {
111
+ resolve(fallback);
112
+ }, ms);
113
+ }),
114
+ ]);
115
+ }
116
+ finally {
117
+ if (timer !== undefined) {
118
+ clearTimeout(timer);
119
+ }
120
+ }
121
+ }
122
+ /** Validates one body fragment against `wrapper`, mapping libxml2's output to problems. */
123
+ async function validateFragment(fragment, wrapper, fileSet, timeoutMs, bundle) {
124
+ const path = `/Envelope/Body/${fragment.name}`;
125
+ const labels = fileSetLabels(fileSet);
126
+ const timedOut = [
127
+ {
128
+ severity: 'warning',
129
+ code: 'schema-timeout',
130
+ message: `Schema validation of <${fragment.name}> timed out after ${String(timeoutMs)} ms`,
131
+ source: 'schema',
132
+ line: fragment.line,
133
+ path,
134
+ },
135
+ ];
136
+ const stale = staleByBundle.get(bundle);
137
+ if (stale !== undefined) {
138
+ // A previous validation for this interface is still stuck in libxml2; starting another one
139
+ // now would pile a second WASM instance on top of it. Refuse immediately, and let the stale
140
+ // call keep running in the background — see the `.then` below for when it clears.
141
+ return [
142
+ {
143
+ severity: 'warning',
144
+ code: 'schema-timeout',
145
+ message: `Schema validation of <${fragment.name}> was skipped: the interface's previous validation has not finished yet`,
146
+ source: 'schema',
147
+ line: fragment.line,
148
+ path,
149
+ },
150
+ ];
151
+ }
152
+ const call = validateXML({
153
+ xml: [{ fileName: 'body.xml', contents: fragment.contents }],
154
+ schema: [{ fileName: 'wrapper.xsd', contents: wrapper }],
155
+ preload: fileSet.files.map((file) => ({ fileName: file.fileName, contents: file.contents })),
156
+ });
157
+ let result;
158
+ try {
159
+ result = await withTimeout(call, timeoutMs, undefined);
160
+ }
161
+ catch (cause) {
162
+ // A schema set that does not compile is a problem with the definition, not
163
+ // with the message: report it once, as a warning, with no position.
164
+ return [
165
+ {
166
+ severity: 'warning',
167
+ code: 'schema-unavailable',
168
+ message: `The interface's schemas could not be compiled: ${cause instanceof Error ? cleanMessage(cause.message, labels) : String(cause)}`,
169
+ source: 'schema',
170
+ },
171
+ ];
172
+ }
173
+ if (result === undefined) {
174
+ // Timed out: track the still-running call so a second validation for this interface refuses
175
+ // to start another libxml2 instance until this one settles, one way or the other, and
176
+ // terminate the tracking (not the call itself — libxml2 gives us no handle for that) once
177
+ // it does.
178
+ staleByBundle.set(bundle, call);
179
+ call.then(() => {
180
+ if (staleByBundle.get(bundle) === call) {
181
+ staleByBundle.delete(bundle);
182
+ }
183
+ }, () => {
184
+ if (staleByBundle.get(bundle) === call) {
185
+ staleByBundle.delete(bundle);
186
+ }
187
+ });
188
+ return timedOut;
189
+ }
190
+ if (result.valid) {
191
+ return [];
192
+ }
193
+ return result.errors.flatMap((error) => {
194
+ const message = cleanMessage(error.message, labels);
195
+ const isBody = error.loc?.fileName === 'body.xml';
196
+ if (!isBody) {
197
+ // libxml2 warns when a namespace reachable through two files is imported
198
+ // twice — an artefact of the glue schemas, not a finding about the message.
199
+ if (/Schemas\s+\w+\s+warning\s*:/i.test(error.rawMessage)) {
200
+ return [];
201
+ }
202
+ return {
203
+ severity: 'warning',
204
+ code: 'schema-unavailable',
205
+ message,
206
+ source: 'schema',
207
+ };
208
+ }
209
+ return {
210
+ severity: 'error',
211
+ code: message.includes('No matching global declaration') ? 'schema-unknown-element' : 'schema-invalid',
212
+ message,
213
+ source: 'schema',
214
+ line: error.loc?.lineNumber ?? fragment.line,
215
+ path,
216
+ };
217
+ });
218
+ }
219
+ /**
220
+ * Validates the `Body` children of a SOAP envelope against an interface's
221
+ * schema set with libxml2.
222
+ *
223
+ * Never throws: a message that cannot be tokenized, an empty body, or a schema
224
+ * set with no components all yield an empty list (the structure checks own
225
+ * those reports). Positions in the returned problems are lines in `xml`.
226
+ *
227
+ * @param xml the whole envelope text
228
+ * @param target the compiled schema set plus the bundle the raw schema documents come from
229
+ * @param options the binding context (required for `rpc` style) and the timeout
230
+ * @returns every schema finding, in body order
231
+ */
232
+ export async function validateAgainstSchemaSet(xml, target, options) {
233
+ if (target.schemaSet.elements.size === 0 && target.schemaSet.types.size === 0) {
234
+ return [];
235
+ }
236
+ const fragments = bodyFragments(xml);
237
+ if (fragments.length === 0) {
238
+ return [];
239
+ }
240
+ const fileSet = buildSchemaFileSet(target.bundle);
241
+ const timeoutMs = options?.timeoutMs ?? DEFAULT_VALIDATION_TIMEOUT_MS;
242
+ const binding = options?.binding;
243
+ const problems = [];
244
+ for (const fragment of fragments) {
245
+ const wrapper = binding?.style === 'rpc'
246
+ ? rpcWrapper(fileSet, fragment.namespaceUri, localNameOf(fragment.name), binding)
247
+ : documentWrapper(fileSet);
248
+ problems.push(...(await validateFragment(fragment, wrapper, fileSet, timeoutMs, target.bundle)));
249
+ }
250
+ return problems;
251
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * SOAP envelope structure checks — everything the XSD schema set cannot say
3
+ * about a message, because the envelope itself is never validated against it:
4
+ * the envelope namespace (and therefore the SOAP version), the
5
+ * `Header`/`Body` shape, the `Fault` shape, `mustUnderstand` values, and the
6
+ * agreement between the transport metadata (`Content-Type`, `SOAPAction`) and
7
+ * the version in the envelope.
8
+ *
9
+ * Tolerant by design: a document that is not well formed yields exactly one
10
+ * `xml-not-well-formed` problem (with the parser's position) instead of
11
+ * throwing, so a half-typed envelope still produces a usable marker.
12
+ */
13
+ import type { SoapEnvelopeVersion } from '../soap/envelope.js';
14
+ import type { ValidationProblem } from './types.js';
15
+ /** What {@link checkSoapStructure} compares the message against. */
16
+ export interface SoapStructureOptions {
17
+ /** The SOAP version the binding declares; an envelope in the other version's namespace is an error. */
18
+ readonly expectedVersion: SoapEnvelopeVersion;
19
+ /** The `SOAPAction` the request sends (1.1) or the action the binding declares (1.2). */
20
+ readonly soapAction?: string;
21
+ /** The `Content-Type` header the message is sent with (or was received with). */
22
+ readonly contentType?: string;
23
+ }
24
+ /**
25
+ * Checks the SOAP-level structure of `xml` against the binding's expectations.
26
+ *
27
+ * Never throws: a parse failure is reported as a single `xml-not-well-formed`
28
+ * problem carrying the parser's line/column.
29
+ *
30
+ * @param xml the whole envelope text, as typed in the editor
31
+ * @param options the binding's SOAP version, plus the transport metadata to cross-check
32
+ * @returns every finding, in document order (transport findings last)
33
+ */
34
+ export declare function checkSoapStructure(xml: string, options: SoapStructureOptions): readonly ValidationProblem[];