@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,97 @@
1
+ /**
2
+ * File-system naming and layout for a workspace folder.
3
+ *
4
+ * Mirrors `project/paths.ts`: display names live inside the YAML, the
5
+ * folder/file names are derived slugs. `assertPathSegment` is workspace's own
6
+ * (not `project`'s) so a corrupted slug always throws a `WorkspaceError`.
7
+ */
8
+ import { join } from 'node:path';
9
+ import { WorkspaceError } from '../errors.js';
10
+ /** Device names Windows refuses to use as a file name, with or without an extension. */
11
+ const RESERVED_NAMES = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i;
12
+ /**
13
+ * Rejects a value that cannot safely be used as a single path segment on disk:
14
+ * empty, `.`/`..`, containing a path separator or NUL, leading/trailing
15
+ * whitespace or dots, or a Windows reserved device name. Used to validate any
16
+ * slug that flows into a workspace file path before it is ever written to (or
17
+ * deleted from) disk.
18
+ *
19
+ * @throws WorkspaceError `workspace-path-invalid` carrying the offending segment.
20
+ */
21
+ export function assertPathSegment(segment) {
22
+ const invalid = segment === '' ||
23
+ segment === '.' ||
24
+ segment === '..' ||
25
+ segment.includes('/') ||
26
+ segment.includes('\\') ||
27
+ segment.includes('\u0000') ||
28
+ /^[. ]/.test(segment) ||
29
+ /[. ]$/.test(segment) ||
30
+ RESERVED_NAMES.test(segment);
31
+ if (invalid) {
32
+ throw new WorkspaceError('workspace-path-invalid', `Invalid path segment: ${JSON.stringify(segment)}`, {
33
+ details: { segment },
34
+ });
35
+ }
36
+ }
37
+ /** Directory (under a user-data root) holding every workspace. */
38
+ export const WORKSPACES_DIR = 'workspaces';
39
+ /** File name of a workspace's manifest. */
40
+ export const WORKSPACE_MANIFEST = 'workspace.yaml';
41
+ /** Directory holding every workspace environment file. */
42
+ export const WORKSPACE_ENVIRONMENTS_DIR = 'environments';
43
+ /** Directory holding every internal project's folder. */
44
+ export const WORKSPACE_PROJECTS_DIR = 'projects';
45
+ /** File name of the (non-managed-format) file recording desktop UI state, e.g. the last opened workspace. */
46
+ export const WORKSPACE_STATE_FILE = 'workspace-state.json';
47
+ /** Directory (under a workspace's app-data folder) holding a managed git/folder share's clone. */
48
+ export const WORKSPACE_TREE_DIR = 'tree';
49
+ /** Directory a clone is checked out into while `join` is still in progress, before it is renamed into place. */
50
+ export const WORKSPACE_JOINING_DIR = '.joining';
51
+ /** File name of the tree's own `.gitattributes`, written on share and on join if missing. */
52
+ export const GIT_ATTRIBUTES_FILE = '.gitattributes';
53
+ /**
54
+ * Contents of {@link GIT_ATTRIBUTES_FILE}: normalises line endings, and leaves bytes alone where
55
+ * they must stay exact — attachments, and the definition caches of interfaces and APIs, which keep
56
+ * each document as fetched (a WSDL's manifest records its SHA-256, so a CRLF definition normalised
57
+ * by git fails that check on the other side, which then re-fetches and rewrites the cache).
58
+ */
59
+ export const GIT_ATTRIBUTES = '* text=auto eol=lf\n*.yaml text\n*.xml text\n*.wsdl text\n*.xsd text\nprojects/*/attachments/** -text\nprojects/*/interfaces/*/definition/** -text\nprojects/*/apis/*/definition/** -text\n';
60
+ /** Absolute path of a workspace's own directory, given the app's user-data root and the workspace id. */
61
+ export function workspaceDir(userDataDir, workspaceId) {
62
+ return join(userDataDir, WORKSPACES_DIR, workspaceId);
63
+ }
64
+ /** Absolute path of a workspace's manifest. */
65
+ export function workspaceManifestFile(dir) {
66
+ return join(dir, WORKSPACE_MANIFEST);
67
+ }
68
+ /**
69
+ * Absolute path of a workspace environment file.
70
+ *
71
+ * @throws WorkspaceError `workspace-path-invalid` (via {@link assertPathSegment}) when `slug` is not a safe path segment.
72
+ */
73
+ export function workspaceEnvironmentFile(dir, slug) {
74
+ assertPathSegment(slug);
75
+ return join(dir, WORKSPACE_ENVIRONMENTS_DIR, `${slug}.yaml`);
76
+ }
77
+ /**
78
+ * Absolute path of an internal project's directory inside a workspace.
79
+ *
80
+ * @throws WorkspaceError `workspace-path-invalid` (via {@link assertPathSegment}) when `slug` is not a safe path segment.
81
+ */
82
+ export function workspaceProjectDir(dir, slug) {
83
+ assertPathSegment(slug);
84
+ return join(dir, WORKSPACE_PROJECTS_DIR, slug);
85
+ }
86
+ /**
87
+ * The root of a workspace's tree — where `workspace.yaml`, `environments/` and `projects/`
88
+ * actually live. For a `local` workspace (`share === undefined`) that is `dir` itself; for a
89
+ * shared workspace it is `share.path` when the tree lives outside `dir` (an external git clone
90
+ * or synced folder), or the managed `<dir>/tree` clone otherwise.
91
+ */
92
+ export function workspaceTreeDir(dir, share) {
93
+ if (share === undefined) {
94
+ return dir;
95
+ }
96
+ return share.path ?? join(dir, WORKSPACE_TREE_DIR);
97
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Gives a {@link Project} a fresh identity: every entity id becomes a new one, and every
3
+ * reference to an old id is rewritten to match — so a project folder copied into a workspace
4
+ * never shares an id with the project it was copied from.
5
+ *
6
+ * Used when a project folder is imported as a copy (see the workspace import flow); a *linked*
7
+ * project keeps its ids, since it stays the same on-disk project.
8
+ */
9
+ import type { IdGenerator, Project } from '../project/model.js';
10
+ /**
11
+ * Reassigns `project` and every one of its entities a new id, rewriting every internal
12
+ * reference (including the ids buried inside `WssRef.document` bags) to match. An id this
13
+ * project does not have an entity for — a dangling reference — is left untouched rather than
14
+ * invented. `secretRef`/`passwordRef`/`passwordSecretRef` values and attachment `sha256`
15
+ * sources are never ids, and are carried through byte-identical.
16
+ *
17
+ * @param project the project to give a fresh identity
18
+ * @param newId id generator; defaults to {@link generateId}. Injectable so the result is
19
+ * deterministic in tests.
20
+ * @returns a new `Project` with fresh ids throughout
21
+ */
22
+ export declare function reidentifyProject(project: Project, newId?: IdGenerator): Project;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Gives a {@link Project} a fresh identity: every entity id becomes a new one, and every
3
+ * reference to an old id is rewritten to match — so a project folder copied into a workspace
4
+ * never shares an id with the project it was copied from.
5
+ *
6
+ * Used when a project folder is imported as a copy (see the workspace import flow); a *linked*
7
+ * project keeps its ids, since it stays the same on-disk project.
8
+ */
9
+ import { defaultContentId, generateId } from '../project/model.js';
10
+ /** Every entity id in `project`, in visit order (an id shared by two entities is deduplicated). */
11
+ function collectIds(project) {
12
+ const ids = [project.id];
13
+ for (const iface of project.interfaces) {
14
+ ids.push(iface.id);
15
+ for (const endpoint of iface.endpoints) {
16
+ ids.push(endpoint.id);
17
+ }
18
+ for (const operation of iface.operations) {
19
+ for (const request of operation.requests) {
20
+ ids.push(request.id);
21
+ for (const attachment of request.attachments) {
22
+ ids.push(attachment.id);
23
+ }
24
+ }
25
+ }
26
+ }
27
+ for (const environment of project.environments) {
28
+ ids.push(environment.id);
29
+ }
30
+ for (const ref of [...project.wss.outgoing, ...project.wss.incoming, ...project.wss.keystores]) {
31
+ ids.push(ref.id);
32
+ }
33
+ return ids;
34
+ }
35
+ /** Assigns one new id per unique old id, calling `newId` exactly once per old id. */
36
+ function buildIdMap(ids, newId) {
37
+ const map = new Map();
38
+ for (const id of ids) {
39
+ if (!map.has(id)) {
40
+ map.set(id, newId());
41
+ }
42
+ }
43
+ return map;
44
+ }
45
+ /** Recursively replaces any string in `value` that is a key of `idMap`, arrays and nested objects included. */
46
+ function remapValue(value, idMap) {
47
+ if (typeof value === 'string') {
48
+ return idMap.get(value) ?? value;
49
+ }
50
+ if (Array.isArray(value)) {
51
+ return value.map((item) => remapValue(item, idMap));
52
+ }
53
+ if (value !== null && typeof value === 'object') {
54
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, remapValue(v, idMap)]));
55
+ }
56
+ return value;
57
+ }
58
+ /** `{ [key]: value }` when `value` is defined, `{}` otherwise — keeps an omitted optional field omitted. */
59
+ function optional(key, value) {
60
+ return value === undefined ? {} : { [key]: value };
61
+ }
62
+ /**
63
+ * Reassigns `project` and every one of its entities a new id, rewriting every internal
64
+ * reference (including the ids buried inside `WssRef.document` bags) to match. An id this
65
+ * project does not have an entity for — a dangling reference — is left untouched rather than
66
+ * invented. `secretRef`/`passwordRef`/`passwordSecretRef` values and attachment `sha256`
67
+ * sources are never ids, and are carried through byte-identical.
68
+ *
69
+ * @param project the project to give a fresh identity
70
+ * @param newId id generator; defaults to {@link generateId}. Injectable so the result is
71
+ * deterministic in tests.
72
+ * @returns a new `Project` with fresh ids throughout
73
+ */
74
+ export function reidentifyProject(project, newId = generateId) {
75
+ const idMap = buildIdMap(collectIds(project), newId);
76
+ const mapId = (id) => idMap.get(id) ?? id;
77
+ const mapRef = (id) => (id === undefined ? undefined : mapId(id));
78
+ const mapWssRef = (ref) => ({
79
+ ...ref,
80
+ id: mapId(ref.id),
81
+ document: remapValue(ref.document, idMap),
82
+ });
83
+ const reidentifyAttachment = (attachment) => {
84
+ const id = mapId(attachment.id);
85
+ const hadDefaultContentId = attachment.contentId === defaultContentId(attachment.id);
86
+ return {
87
+ ...attachment,
88
+ id,
89
+ contentId: hadDefaultContentId ? defaultContentId(id) : attachment.contentId,
90
+ };
91
+ };
92
+ const reidentifyRequest = (request) => ({
93
+ ...request,
94
+ id: mapId(request.id),
95
+ ...optional('endpointId', mapRef(request.endpointId)),
96
+ ...optional('wssOutgoingRef', mapRef(request.wssOutgoingRef)),
97
+ ...optional('wssIncomingRef', mapRef(request.wssIncomingRef)),
98
+ attachments: request.attachments.map(reidentifyAttachment),
99
+ properties: { ...request.properties, ...optional('sslKeystoreRef', mapRef(request.properties.sslKeystoreRef)) },
100
+ });
101
+ return {
102
+ ...project,
103
+ id: mapId(project.id),
104
+ interfaces: project.interfaces.map((iface) => ({
105
+ ...iface,
106
+ id: mapId(iface.id),
107
+ endpoints: iface.endpoints.map((endpoint) => ({ ...endpoint, id: mapId(endpoint.id) })),
108
+ ...optional('defaultEndpointId', mapRef(iface.defaultEndpointId)),
109
+ operations: iface.operations.map((operation) => ({
110
+ ...operation,
111
+ requests: operation.requests.map(reidentifyRequest),
112
+ })),
113
+ })),
114
+ environments: project.environments.map((environment) => ({ ...environment, id: mapId(environment.id) })),
115
+ ...optional('activeEnvironmentId', mapRef(project.activeEnvironmentId)),
116
+ wss: {
117
+ outgoing: project.wss.outgoing.map(mapWssRef),
118
+ incoming: project.wss.incoming.map(mapWssRef),
119
+ keystores: project.wss.keystores.map(mapWssRef),
120
+ },
121
+ };
122
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Writes a {@link Workspace} to a workspace folder. Mirrors `project/save.ts`:
3
+ * saving is incremental (only changed files are rewritten) and every write
4
+ * goes through a temp file plus `rename`. Unlike a project, a workspace format
5
+ * carries no backup mechanism, so {@link SaveResult.backups} is always `[]`.
6
+ *
7
+ * Only the workspace's own subtree is managed here (`workspace.yaml` and
8
+ * `environments/*.yaml`); `projects/<slug>` — an internal project's own
9
+ * folder — is owned and saved by the project module, not this one.
10
+ */
11
+ import type { SaveResult } from '../project/save.js';
12
+ import type { FsLike } from '../project/fs.js';
13
+ import type { Workspace } from './model.js';
14
+ import type { WorkspaceFiles } from './serialize.js';
15
+ /** Options for {@link saveWorkspace}. */
16
+ export interface SaveWorkspaceOptions {
17
+ /**
18
+ * The files as they were last written. When supplied, unchanged files are
19
+ * detected without reading them back from disk; when omitted, the current
20
+ * on-disk bytes are read and compared instead.
21
+ */
22
+ readonly previous?: WorkspaceFiles;
23
+ readonly fs?: FsLike;
24
+ }
25
+ /**
26
+ * Saves `workspace` into the directory `root`, creating it if needed.
27
+ *
28
+ * @returns which files were written, removed and left untouched. `backups` is
29
+ * always `[]` — the workspace format has none.
30
+ */
31
+ export declare function saveWorkspace(workspace: Workspace, root: string, options?: SaveWorkspaceOptions): Promise<SaveResult>;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Writes a {@link Workspace} to a workspace folder. Mirrors `project/save.ts`:
3
+ * saving is incremental (only changed files are rewritten) and every write
4
+ * goes through a temp file plus `rename`. Unlike a project, a workspace format
5
+ * carries no backup mechanism, so {@link SaveResult.backups} is always `[]`.
6
+ *
7
+ * Only the workspace's own subtree is managed here (`workspace.yaml` and
8
+ * `environments/*.yaml`); `projects/<slug>` — an internal project's own
9
+ * folder — is owned and saved by the project module, not this one.
10
+ */
11
+ import { join } from 'node:path';
12
+ import { nodeFs, readFileIfExists, readdirIfExists, writeFileAtomic } from '../project/fs.js';
13
+ import { WORKSPACE_ENVIRONMENTS_DIR, WORKSPACE_MANIFEST } from './paths.js';
14
+ import { workspaceFiles } from './serialize.js';
15
+ function toAbsolute(root, relative) {
16
+ return join(root, ...relative.split('/'));
17
+ }
18
+ /**
19
+ * Lists every file this format manages under `root`: `workspace.yaml` and
20
+ * `environments/*.yaml`. Anything else — a README, a foreign file dropped
21
+ * into `environments/` — is never a deletion candidate.
22
+ */
23
+ async function listManagedFiles(fs, root) {
24
+ const managed = [];
25
+ if ((await readFileIfExists(fs, toAbsolute(root, WORKSPACE_MANIFEST))) !== undefined) {
26
+ managed.push(WORKSPACE_MANIFEST);
27
+ }
28
+ for (const entry of await readdirIfExists(fs, toAbsolute(root, WORKSPACE_ENVIRONMENTS_DIR))) {
29
+ if (entry.isFile && entry.name.endsWith('.yaml')) {
30
+ managed.push(`${WORKSPACE_ENVIRONMENTS_DIR}/${entry.name}`);
31
+ }
32
+ }
33
+ return managed;
34
+ }
35
+ /**
36
+ * Saves `workspace` into the directory `root`, creating it if needed.
37
+ *
38
+ * @returns which files were written, removed and left untouched. `backups` is
39
+ * always `[]` — the workspace format has none.
40
+ */
41
+ export async function saveWorkspace(workspace, root, options) {
42
+ const fs = options?.fs ?? nodeFs;
43
+ const desired = workspaceFiles(workspace);
44
+ const existing = await listManagedFiles(fs, root);
45
+ const written = [];
46
+ const unchanged = [];
47
+ for (const [relative, content] of desired) {
48
+ const absolute = toAbsolute(root, relative);
49
+ // When a `previous` map was supplied, trust it as the full picture (a missing key means
50
+ // "not previously written", not "go check disk"); only fall back to a real disk read when
51
+ // no `previous` map was given at all.
52
+ const previous = options?.previous?.get(relative) ??
53
+ (options?.previous !== undefined ? undefined : (await readFileIfExists(fs, absolute))?.toString('utf8'));
54
+ if (previous === content) {
55
+ unchanged.push(relative);
56
+ continue;
57
+ }
58
+ await writeFileAtomic(fs, absolute, Buffer.from(content, 'utf8'));
59
+ written.push(relative);
60
+ }
61
+ const removed = [];
62
+ let environmentsDirTouched = false;
63
+ for (const relative of existing) {
64
+ if (desired.has(relative)) {
65
+ continue;
66
+ }
67
+ await fs.rm(toAbsolute(root, relative), { force: true });
68
+ removed.push(relative);
69
+ if (relative.startsWith(`${WORKSPACE_ENVIRONMENTS_DIR}/`)) {
70
+ environmentsDirTouched = true;
71
+ }
72
+ }
73
+ if (environmentsDirTouched) {
74
+ const remaining = await readdirIfExists(fs, toAbsolute(root, WORKSPACE_ENVIRONMENTS_DIR));
75
+ if (remaining.length === 0) {
76
+ await fs.rm(toAbsolute(root, WORKSPACE_ENVIRONMENTS_DIR), { recursive: true, force: true });
77
+ removed.push(WORKSPACE_ENVIRONMENTS_DIR);
78
+ }
79
+ }
80
+ written.sort();
81
+ removed.sort();
82
+ unchanged.sort();
83
+ return { written, removed, unchanged, backups: [] };
84
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Zod schemas for every YAML document in a workspace folder.
3
+ *
4
+ * Mirrors `project/schema.ts`'s discipline: every object schema is
5
+ * `z.looseObject` (unknown keys accepted and ignored on load — see that
6
+ * file's doc comment for the "additive bumps formatVersion" policy this
7
+ * implies), and `formatVersion` stays a `z.literal` so an out-of-range value
8
+ * is still caught explicitly (see `migrate.ts`).
9
+ */
10
+ import { z } from 'zod';
11
+ /** One `workspace.yaml` `projects` entry, as persisted. */
12
+ export declare const workspaceProjectRefSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
13
+ id: z.ZodString;
14
+ slug: z.ZodString;
15
+ source: z.ZodLiteral<"internal">;
16
+ }, z.core.$loose>, z.ZodObject<{
17
+ id: z.ZodString;
18
+ slug: z.ZodString;
19
+ source: z.ZodLiteral<"linked">;
20
+ path: z.ZodString;
21
+ }, z.core.$loose>], "source">;
22
+ /** `workspace.yaml`. */
23
+ export declare const workspaceManifestSchema: z.ZodObject<{
24
+ formatVersion: z.ZodLiteral<3>;
25
+ id: z.ZodString;
26
+ name: z.ZodString;
27
+ description: z.ZodOptional<z.ZodString>;
28
+ createdAt: z.ZodString;
29
+ properties: z.ZodRecord<z.ZodString, z.ZodString>;
30
+ disabled: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ projects: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
32
+ id: z.ZodString;
33
+ slug: z.ZodString;
34
+ source: z.ZodLiteral<"internal">;
35
+ }, z.core.$loose>, z.ZodObject<{
36
+ id: z.ZodString;
37
+ slug: z.ZodString;
38
+ source: z.ZodLiteral<"linked">;
39
+ path: z.ZodString;
40
+ }, z.core.$loose>], "source">>;
41
+ }, z.core.$loose>;
42
+ /** `environments/<slug>.yaml`. */
43
+ export declare const workspaceEnvironmentFileSchema: z.ZodObject<{
44
+ id: z.ZodString;
45
+ name: z.ZodString;
46
+ order: z.ZodNumber;
47
+ properties: z.ZodRecord<z.ZodString, z.ZodString>;
48
+ endpoints: z.ZodRecord<z.ZodString, z.ZodString>;
49
+ disabled: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
+ }, z.core.$loose>;
51
+ /** `local.yaml`: machine-local state, never part of the shared tree. See `local-state.ts`. */
52
+ export declare const workspaceLocalStateSchema: z.ZodObject<{
53
+ version: z.ZodLiteral<1>;
54
+ activeEnvironmentId: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strip>;
56
+ /**
57
+ * `share.yaml`: absent means a local workspace. `path`, when set, must be absolute — it is only
58
+ * ever written from a native folder picker. `kind: 'git'` requires `git`; `kind: 'server'`
59
+ * requires `server`.
60
+ */
61
+ export declare const workspaceShareSchema: z.ZodObject<{
62
+ version: z.ZodLiteral<1>;
63
+ kind: z.ZodEnum<{
64
+ folder: "folder";
65
+ server: "server";
66
+ git: "git";
67
+ }>;
68
+ path: z.ZodOptional<z.ZodString>;
69
+ git: z.ZodOptional<z.ZodObject<{
70
+ remote: z.ZodOptional<z.ZodString>;
71
+ branch: z.ZodString;
72
+ autoFetchSeconds: z.ZodNumber;
73
+ commitOnSave: z.ZodBoolean;
74
+ pushOnSave: z.ZodBoolean;
75
+ }, z.core.$strip>>;
76
+ server: z.ZodOptional<z.ZodObject<{
77
+ url: z.ZodString;
78
+ workspaceId: z.ZodString;
79
+ }, z.core.$strip>>;
80
+ }, z.core.$strip>;
81
+ /** The manifest document as persisted. */
82
+ export type WorkspaceManifestFile = z.infer<typeof workspaceManifestSchema>;
83
+ /** One `projects` entry as persisted. */
84
+ export type WorkspaceProjectRefFile = z.infer<typeof workspaceProjectRefSchema>;
85
+ /** An environment document as persisted. */
86
+ export type WorkspaceEnvironmentFile = z.infer<typeof workspaceEnvironmentFileSchema>;
87
+ /**
88
+ * Validates `value` against `schema`, raising
89
+ * `WorkspaceError('workspace-file-invalid')` carrying the file path and the
90
+ * individual zod issues when it does not match. Mirrors `project/schema.ts`'s
91
+ * `parseFile`, distinct only in which error class it throws.
92
+ */
93
+ export declare function parseWorkspaceFile<T>(schema: z.ZodType<T>, value: unknown, file: string): T;
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Zod schemas for every YAML document in a workspace folder.
3
+ *
4
+ * Mirrors `project/schema.ts`'s discipline: every object schema is
5
+ * `z.looseObject` (unknown keys accepted and ignored on load — see that
6
+ * file's doc comment for the "additive bumps formatVersion" policy this
7
+ * implies), and `formatVersion` stays a `z.literal` so an out-of-range value
8
+ * is still caught explicitly (see `migrate.ts`).
9
+ */
10
+ import { isAbsolute } from 'node:path';
11
+ import { z } from 'zod';
12
+ import { WorkspaceError } from '../errors.js';
13
+ import { WORKSPACE_FORMAT_VERSION } from './model.js';
14
+ const nonEmpty = z.string().min(1);
15
+ const propertyMapSchema = z.record(z.string(), z.string());
16
+ const workspaceProjectRefInternalSchema = z.looseObject({
17
+ id: nonEmpty,
18
+ slug: nonEmpty,
19
+ source: z.literal('internal'),
20
+ });
21
+ /** A linked project ref's `path` must be absolute — a workspace never stores a path relative to itself. */
22
+ const workspaceProjectRefLinkedSchema = z
23
+ .looseObject({
24
+ id: nonEmpty,
25
+ slug: nonEmpty,
26
+ source: z.literal('linked'),
27
+ path: nonEmpty,
28
+ })
29
+ .refine((value) => isAbsolute(value.path), {
30
+ message: 'a linked project reference path must be absolute',
31
+ path: ['path'],
32
+ });
33
+ /** One `workspace.yaml` `projects` entry, as persisted. */
34
+ export const workspaceProjectRefSchema = z.discriminatedUnion('source', [
35
+ workspaceProjectRefInternalSchema,
36
+ workspaceProjectRefLinkedSchema,
37
+ ]);
38
+ /** `workspace.yaml`. */
39
+ export const workspaceManifestSchema = z.looseObject({
40
+ formatVersion: z.literal(WORKSPACE_FORMAT_VERSION),
41
+ id: nonEmpty,
42
+ name: z.string(),
43
+ description: z.string().optional(),
44
+ createdAt: nonEmpty,
45
+ properties: propertyMapSchema,
46
+ /** Names of `properties` entries switched off; absent means none. See `model.ts`. */
47
+ disabled: z.array(z.string()).optional(),
48
+ projects: z.array(workspaceProjectRefSchema),
49
+ });
50
+ /** `environments/<slug>.yaml`. */
51
+ export const workspaceEnvironmentFileSchema = z.looseObject({
52
+ id: nonEmpty,
53
+ name: z.string(),
54
+ order: z.number().int(),
55
+ properties: propertyMapSchema,
56
+ endpoints: z.record(z.string(), z.string()),
57
+ /** Names of `properties` entries switched off; absent means none. */
58
+ disabled: z.array(z.string()).optional(),
59
+ });
60
+ /** `local.yaml`: machine-local state, never part of the shared tree. See `local-state.ts`. */
61
+ export const workspaceLocalStateSchema = z.object({
62
+ version: z.literal(1),
63
+ activeEnvironmentId: z.string().optional(),
64
+ });
65
+ /** `share.yaml`'s `git` block: settings for a git-backed share. See `share.ts`. */
66
+ const gitShareSettingsSchema = z.object({
67
+ remote: z.string().optional(),
68
+ branch: nonEmpty,
69
+ autoFetchSeconds: z.number().int().min(0),
70
+ commitOnSave: z.boolean(),
71
+ pushOnSave: z.boolean(),
72
+ });
73
+ /**
74
+ * `share.yaml`: absent means a local workspace. `path`, when set, must be absolute — it is only
75
+ * ever written from a native folder picker. `kind: 'git'` requires `git`; `kind: 'server'`
76
+ * requires `server`.
77
+ */
78
+ export const workspaceShareSchema = z
79
+ .object({
80
+ version: z.literal(1),
81
+ kind: z.enum(['folder', 'git', 'server']),
82
+ path: z
83
+ .string()
84
+ .optional()
85
+ .refine((value) => value === undefined || isAbsolute(value), { message: 'path must be absolute' }),
86
+ git: gitShareSettingsSchema.optional(),
87
+ server: z.object({ url: nonEmpty, workspaceId: nonEmpty }).optional(),
88
+ })
89
+ .refine((value) => value.kind !== 'git' || value.git !== undefined, {
90
+ message: 'kind: git requires a git block',
91
+ path: ['git'],
92
+ })
93
+ .refine((value) => value.kind !== 'server' || value.server !== undefined, {
94
+ message: 'kind: server requires a server block',
95
+ path: ['server'],
96
+ });
97
+ /**
98
+ * Validates `value` against `schema`, raising
99
+ * `WorkspaceError('workspace-file-invalid')` carrying the file path and the
100
+ * individual zod issues when it does not match. Mirrors `project/schema.ts`'s
101
+ * `parseFile`, distinct only in which error class it throws.
102
+ */
103
+ export function parseWorkspaceFile(schema, value, file) {
104
+ const result = schema.safeParse(value);
105
+ if (result.success) {
106
+ return result.data;
107
+ }
108
+ const issues = result.error.issues.map((issue) => ({
109
+ path: issue.path.join('.'),
110
+ message: issue.message,
111
+ }));
112
+ throw new WorkspaceError('workspace-file-invalid', `Invalid workspace file ${file}`, {
113
+ details: { file, issues },
114
+ });
115
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Turns a {@link Workspace} into the exact set of files it occupies on disk.
3
+ *
4
+ * Mirrors `project/serialize.ts`: pure (workspace in, `relative path -> file
5
+ * content` out), so `saveWorkspace` only has to diff two maps and tests can
6
+ * assert on the layout without touching a file system. `compact` and
7
+ * `stringifyYaml` are the same format-agnostic helpers `project/serialize.ts`
8
+ * uses (sorted keys, no line wrapping, `undefined` fields dropped).
9
+ */
10
+ import type { Workspace } from './model.js';
11
+ /** A workspace's files, keyed by path relative to the workspace root (always `/`-separated). */
12
+ export type WorkspaceFiles = ReadonlyMap<string, string>;
13
+ /**
14
+ * Builds the complete `relative path -> content` map for a workspace.
15
+ *
16
+ * Every environment slug is validated with {@link assertPathSegment} before
17
+ * any path is built, so a corrupted slug throws
18
+ * `WorkspaceError('workspace-path-invalid')` here — before `saveWorkspace`
19
+ * ever touches the file system.
20
+ *
21
+ * `activeEnvironmentId` (machine-local, see `model.ts`) and `writtenBy` (dropped outright) never
22
+ * appear in the written manifest — see `local-state.ts` for where the former actually lives.
23
+ */
24
+ export declare function workspaceFiles(workspace: Workspace): WorkspaceFiles;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Turns a {@link Workspace} into the exact set of files it occupies on disk.
3
+ *
4
+ * Mirrors `project/serialize.ts`: pure (workspace in, `relative path -> file
5
+ * content` out), so `saveWorkspace` only has to diff two maps and tests can
6
+ * assert on the layout without touching a file system. `compact` and
7
+ * `stringifyYaml` are the same format-agnostic helpers `project/serialize.ts`
8
+ * uses (sorted keys, no line wrapping, `undefined` fields dropped).
9
+ */
10
+ import { assertPathSegment, WORKSPACE_ENVIRONMENTS_DIR, WORKSPACE_MANIFEST } from './paths.js';
11
+ import { compact, stringifyYaml } from '../project/yaml.js';
12
+ function projectRefDocument(ref) {
13
+ return compact({ id: ref.id, slug: ref.slug, source: ref.source, path: ref.path });
14
+ }
15
+ /**
16
+ * The `disabled` list as written: sorted, deduplicated, and dropped entirely once it would be
17
+ * empty — a name with no entry left in `properties` never outlives its map. Mirrors
18
+ * `project/serialize.ts`'s helper of the same purpose.
19
+ */
20
+ function disabledList(disabled, properties) {
21
+ const known = new Set(Object.keys(properties));
22
+ const kept = [...new Set(disabled.filter((name) => known.has(name)))].sort();
23
+ return kept.length > 0 ? kept : undefined;
24
+ }
25
+ /**
26
+ * Builds the complete `relative path -> content` map for a workspace.
27
+ *
28
+ * Every environment slug is validated with {@link assertPathSegment} before
29
+ * any path is built, so a corrupted slug throws
30
+ * `WorkspaceError('workspace-path-invalid')` here — before `saveWorkspace`
31
+ * ever touches the file system.
32
+ *
33
+ * `activeEnvironmentId` (machine-local, see `model.ts`) and `writtenBy` (dropped outright) never
34
+ * appear in the written manifest — see `local-state.ts` for where the former actually lives.
35
+ */
36
+ export function workspaceFiles(workspace) {
37
+ const files = new Map();
38
+ files.set(WORKSPACE_MANIFEST, stringifyYaml(compact({
39
+ formatVersion: workspace.formatVersion,
40
+ id: workspace.id,
41
+ name: workspace.name,
42
+ description: workspace.description,
43
+ createdAt: workspace.createdAt,
44
+ properties: { ...workspace.properties },
45
+ disabled: disabledList(workspace.disabledProperties, workspace.properties),
46
+ projects: workspace.projects.map((ref) => projectRefDocument(ref)),
47
+ })));
48
+ for (const environment of workspace.environments) {
49
+ assertPathSegment(environment.slug);
50
+ files.set(`${WORKSPACE_ENVIRONMENTS_DIR}/${environment.slug}.yaml`, stringifyYaml(compact({
51
+ id: environment.id,
52
+ name: environment.name,
53
+ order: environment.order,
54
+ properties: { ...environment.properties },
55
+ endpoints: { ...environment.endpoints },
56
+ disabled: disabledList(environment.disabledProperties, environment.properties),
57
+ })));
58
+ }
59
+ return files;
60
+ }