@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.
- package/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/assert/contract.d.ts +3 -0
- package/dist/assert/contract.js +17 -0
- package/dist/assert/index.d.ts +4 -0
- package/dist/assert/index.js +27 -0
- package/dist/assert/match.d.ts +3 -0
- package/dist/assert/match.js +58 -0
- package/dist/assert/model.d.ts +73 -0
- package/dist/assert/model.js +8 -0
- package/dist/assert/schema.d.ts +34 -0
- package/dist/assert/schema.js +46 -0
- package/dist/assert/sla.d.ts +3 -0
- package/dist/assert/sla.js +8 -0
- package/dist/assert/soap-fault.d.ts +3 -0
- package/dist/assert/soap-fault.js +20 -0
- package/dist/assert/status.d.ts +3 -0
- package/dist/assert/status.js +14 -0
- package/dist/errors.d.ts +77 -0
- package/dist/errors.js +121 -0
- package/dist/fs.d.ts +35 -0
- package/dist/fs.js +64 -0
- package/dist/generate.d.ts +12 -0
- package/dist/generate.js +14 -0
- package/dist/grpc/browser.d.ts +11 -0
- package/dist/grpc/browser.js +9 -0
- package/dist/grpc/cache.d.ts +113 -0
- package/dist/grpc/cache.js +244 -0
- package/dist/grpc/call.d.ts +64 -0
- package/dist/grpc/call.js +72 -0
- package/dist/grpc/codec.d.ts +29 -0
- package/dist/grpc/codec.js +416 -0
- package/dist/grpc/command.d.ts +23 -0
- package/dist/grpc/command.js +91 -0
- package/dist/grpc/expand.d.ts +25 -0
- package/dist/grpc/expand.js +52 -0
- package/dist/grpc/framing.d.ts +28 -0
- package/dist/grpc/framing.js +61 -0
- package/dist/grpc/import.d.ts +47 -0
- package/dist/grpc/import.js +88 -0
- package/dist/grpc/model.d.ts +179 -0
- package/dist/grpc/model.js +91 -0
- package/dist/grpc/proto/describe.d.ts +92 -0
- package/dist/grpc/proto/describe.js +205 -0
- package/dist/grpc/proto/load.d.ts +35 -0
- package/dist/grpc/proto/load.js +112 -0
- package/dist/grpc/proto/sample.d.ts +21 -0
- package/dist/grpc/proto/sample.js +79 -0
- package/dist/grpc/proto/well-known.d.ts +42 -0
- package/dist/grpc/proto/well-known.js +143 -0
- package/dist/grpc/reconcile.d.ts +42 -0
- package/dist/grpc/reconcile.js +153 -0
- package/dist/grpc/reflection/client.d.ts +70 -0
- package/dist/grpc/reflection/client.js +197 -0
- package/dist/grpc/reflection/descriptors.d.ts +69 -0
- package/dist/grpc/reflection/descriptors.js +140 -0
- package/dist/grpc/reflection/proto.d.ts +33 -0
- package/dist/grpc/reflection/proto.js +144 -0
- package/dist/grpc/send.d.ts +132 -0
- package/dist/grpc/send.js +435 -0
- package/dist/grpc/shape.d.ts +29 -0
- package/dist/grpc/shape.js +36 -0
- package/dist/grpc/status.d.ts +21 -0
- package/dist/grpc/status.js +62 -0
- package/dist/grpc/target.d.ts +21 -0
- package/dist/grpc/target.js +66 -0
- package/dist/http/auth/apply.d.ts +37 -0
- package/dist/http/auth/apply.js +74 -0
- package/dist/http/auth/basic.d.ts +36 -0
- package/dist/http/auth/basic.js +69 -0
- package/dist/http/auth/md4.d.ts +13 -0
- package/dist/http/auth/md4.js +81 -0
- package/dist/http/auth/ntlm-transport.d.ts +61 -0
- package/dist/http/auth/ntlm-transport.js +97 -0
- package/dist/http/auth/ntlm.d.ts +190 -0
- package/dist/http/auth/ntlm.js +377 -0
- package/dist/http/client.d.ts +73 -0
- package/dist/http/client.js +403 -0
- package/dist/http/curl-flags.d.ts +15 -0
- package/dist/http/curl-flags.js +95 -0
- package/dist/http/curl.d.ts +94 -0
- package/dist/http/curl.js +245 -0
- package/dist/http/decompress.d.ts +7 -0
- package/dist/http/decompress.js +22 -0
- package/dist/http/errors.d.ts +22 -0
- package/dist/http/errors.js +144 -0
- package/dist/http/failed-request.d.ts +27 -0
- package/dist/http/failed-request.js +48 -0
- package/dist/http/headers.d.ts +15 -0
- package/dist/http/headers.js +50 -0
- package/dist/http/heredoc.d.ts +25 -0
- package/dist/http/heredoc.js +74 -0
- package/dist/http/proxy.d.ts +103 -0
- package/dist/http/proxy.js +168 -0
- package/dist/http/raw-capture.d.ts +23 -0
- package/dist/http/raw-capture.js +57 -0
- package/dist/http/timings.d.ts +79 -0
- package/dist/http/timings.js +212 -0
- package/dist/http/tls.d.ts +111 -0
- package/dist/http/tls.js +167 -0
- package/dist/http/types.d.ts +125 -0
- package/dist/http/types.js +6 -0
- package/dist/import-detect.d.ts +26 -0
- package/dist/import-detect.js +169 -0
- package/dist/import.d.ts +20 -0
- package/dist/import.js +163 -0
- package/dist/index.d.ts +272 -0
- package/dist/index.js +157 -0
- package/dist/json/cursor.d.ts +43 -0
- package/dist/json/cursor.js +168 -0
- package/dist/operations.d.ts +12 -0
- package/dist/operations.js +52 -0
- package/dist/project/attachments-cache.d.ts +80 -0
- package/dist/project/attachments-cache.js +186 -0
- package/dist/project/endpoints.d.ts +23 -0
- package/dist/project/endpoints.js +47 -0
- package/dist/project/environments.d.ts +68 -0
- package/dist/project/environments.js +124 -0
- package/dist/project/fs.d.ts +45 -0
- package/dist/project/fs.js +78 -0
- package/dist/project/history.d.ts +171 -0
- package/dist/project/history.js +179 -0
- package/dist/project/keystores.d.ts +24 -0
- package/dist/project/keystores.js +66 -0
- package/dist/project/load.d.ts +44 -0
- package/dist/project/load.js +634 -0
- package/dist/project/migrate.d.ts +27 -0
- package/dist/project/migrate.js +46 -0
- package/dist/project/model.d.ts +401 -0
- package/dist/project/model.js +126 -0
- package/dist/project/paths.d.ts +134 -0
- package/dist/project/paths.js +259 -0
- package/dist/project/preferences.d.ts +318 -0
- package/dist/project/preferences.js +239 -0
- package/dist/project/properties.d.ts +97 -0
- package/dist/project/properties.js +356 -0
- package/dist/project/save.d.ts +65 -0
- package/dist/project/save.js +295 -0
- package/dist/project/schema.d.ts +1329 -0
- package/dist/project/schema.js +737 -0
- package/dist/project/serialize.d.ts +42 -0
- package/dist/project/serialize.js +385 -0
- package/dist/project/wss-configs.d.ts +40 -0
- package/dist/project/wss-configs.js +142 -0
- package/dist/project/yaml.d.ts +17 -0
- package/dist/project/yaml.js +39 -0
- package/dist/redact/index.d.ts +77 -0
- package/dist/redact/index.js +328 -0
- package/dist/redact/literal.d.ts +12 -0
- package/dist/redact/literal.js +68 -0
- package/dist/rest/auth.d.ts +53 -0
- package/dist/rest/auth.js +80 -0
- package/dist/rest/body.d.ts +61 -0
- package/dist/rest/body.js +184 -0
- package/dist/rest/browser.d.ts +12 -0
- package/dist/rest/browser.js +11 -0
- package/dist/rest/cookies.d.ts +41 -0
- package/dist/rest/cookies.js +102 -0
- package/dist/rest/curl.d.ts +75 -0
- package/dist/rest/curl.js +417 -0
- package/dist/rest/expand.d.ts +35 -0
- package/dist/rest/expand.js +104 -0
- package/dist/rest/model.d.ts +247 -0
- package/dist/rest/model.js +118 -0
- package/dist/rest/oauth2.d.ts +118 -0
- package/dist/rest/oauth2.js +212 -0
- package/dist/rest/openapi/cache.d.ts +54 -0
- package/dist/rest/openapi/cache.js +128 -0
- package/dist/rest/openapi/import.d.ts +67 -0
- package/dist/rest/openapi/import.js +91 -0
- package/dist/rest/openapi/map.d.ts +102 -0
- package/dist/rest/openapi/map.js +477 -0
- package/dist/rest/openapi/model.d.ts +203 -0
- package/dist/rest/openapi/model.js +37 -0
- package/dist/rest/openapi/parse.d.ts +44 -0
- package/dist/rest/openapi/parse.js +1530 -0
- package/dist/rest/openapi/refs.d.ts +63 -0
- package/dist/rest/openapi/refs.js +258 -0
- package/dist/rest/openapi/sample.d.ts +68 -0
- package/dist/rest/openapi/sample.js +336 -0
- package/dist/rest/postman/import.d.ts +21 -0
- package/dist/rest/postman/import.js +47 -0
- package/dist/rest/postman/index.d.ts +7 -0
- package/dist/rest/postman/index.js +7 -0
- package/dist/rest/postman/map.d.ts +28 -0
- package/dist/rest/postman/map.js +427 -0
- package/dist/rest/postman/model.d.ts +118 -0
- package/dist/rest/postman/model.js +7 -0
- package/dist/rest/postman/parse.d.ts +29 -0
- package/dist/rest/postman/parse.js +518 -0
- package/dist/rest/response.d.ts +72 -0
- package/dist/rest/response.js +221 -0
- package/dist/rest/send.d.ts +102 -0
- package/dist/rest/send.js +148 -0
- package/dist/rest/url.d.ts +92 -0
- package/dist/rest/url.js +213 -0
- package/dist/run/effective-auth.d.ts +10 -0
- package/dist/run/effective-auth.js +19 -0
- package/dist/run/index.d.ts +8 -0
- package/dist/run/index.js +4 -0
- package/dist/run/prepare.d.ts +43 -0
- package/dist/run/prepare.js +280 -0
- package/dist/run/run.d.ts +53 -0
- package/dist/run/run.js +223 -0
- package/dist/run/secret-needs.d.ts +13 -0
- package/dist/run/secret-needs.js +125 -0
- package/dist/run/select.d.ts +34 -0
- package/dist/run/select.js +76 -0
- package/dist/secrets/env-names.d.ts +27 -0
- package/dist/secrets/env-names.js +40 -0
- package/dist/secrets/resolve.d.ts +58 -0
- package/dist/secrets/resolve.js +136 -0
- package/dist/send-options.d.ts +141 -0
- package/dist/send-options.js +228 -0
- package/dist/send.d.ts +53 -0
- package/dist/send.js +210 -0
- package/dist/soap/body-builder.d.ts +38 -0
- package/dist/soap/body-builder.js +250 -0
- package/dist/soap/build-problems.d.ts +12 -0
- package/dist/soap/build-problems.js +2 -0
- package/dist/soap/charset.d.ts +23 -0
- package/dist/soap/charset.js +47 -0
- package/dist/soap/envelope.d.ts +44 -0
- package/dist/soap/envelope.js +76 -0
- package/dist/soap/fault.d.ts +46 -0
- package/dist/soap/fault.js +129 -0
- package/dist/soap/form-request.d.ts +34 -0
- package/dist/soap/form-request.js +251 -0
- package/dist/soap/legacy-project/definition-fetcher.d.ts +21 -0
- package/dist/soap/legacy-project/definition-fetcher.js +43 -0
- package/dist/soap/legacy-project/format.d.ts +18 -0
- package/dist/soap/legacy-project/format.js +24 -0
- package/dist/soap/legacy-project/import.d.ts +21 -0
- package/dist/soap/legacy-project/import.js +46 -0
- package/dist/soap/legacy-project/index.d.ts +9 -0
- package/dist/soap/legacy-project/index.js +5 -0
- package/dist/soap/legacy-project/map.d.ts +91 -0
- package/dist/soap/legacy-project/map.js +290 -0
- package/dist/soap/legacy-project/model.d.ts +98 -0
- package/dist/soap/legacy-project/model.js +5 -0
- package/dist/soap/legacy-project/parse.d.ts +16 -0
- package/dist/soap/legacy-project/parse.js +325 -0
- package/dist/soap/mime/cid-scan.d.ts +36 -0
- package/dist/soap/mime/cid-scan.js +52 -0
- package/dist/soap/mime/inline-files.d.ts +39 -0
- package/dist/soap/mime/inline-files.js +71 -0
- package/dist/soap/mime/mtom.d.ts +74 -0
- package/dist/soap/mime/mtom.js +134 -0
- package/dist/soap/mime/multipart.d.ts +66 -0
- package/dist/soap/mime/multipart.js +329 -0
- package/dist/soap/mime/send-pipeline.d.ts +61 -0
- package/dist/soap/mime/send-pipeline.js +145 -0
- package/dist/soap/mime/swa.d.ts +45 -0
- package/dist/soap/mime/swa.js +62 -0
- package/dist/soap/mime/types.d.ts +69 -0
- package/dist/soap/mime/types.js +10 -0
- package/dist/soap/namespace-scope.d.ts +32 -0
- package/dist/soap/namespace-scope.js +85 -0
- package/dist/soap/prefixes.d.ts +24 -0
- package/dist/soap/prefixes.js +70 -0
- package/dist/soap/recreate.d.ts +28 -0
- package/dist/soap/recreate.js +168 -0
- package/dist/soap/request-builder.d.ts +63 -0
- package/dist/soap/request-builder.js +161 -0
- package/dist/soap/response-parser.d.ts +29 -0
- package/dist/soap/response-parser.js +71 -0
- package/dist/soap/soap-action.d.ts +31 -0
- package/dist/soap/soap-action.js +28 -0
- package/dist/soap/transforms.d.ts +52 -0
- package/dist/soap/transforms.js +164 -0
- package/dist/types.d.ts +307 -0
- package/dist/types.js +6 -0
- package/dist/validate/index.d.ts +61 -0
- package/dist/validate/index.js +72 -0
- package/dist/validate/schema-file-set.d.ts +51 -0
- package/dist/validate/schema-file-set.js +288 -0
- package/dist/validate/schema-validator.d.ts +53 -0
- package/dist/validate/schema-validator.js +251 -0
- package/dist/validate/soap-structure.d.ts +34 -0
- package/dist/validate/soap-structure.js +255 -0
- package/dist/validate/types.d.ts +47 -0
- package/dist/validate/types.js +8 -0
- package/dist/validate/wsi/assertions/helpers.d.ts +145 -0
- package/dist/validate/wsi/assertions/helpers.js +387 -0
- package/dist/validate/wsi/assertions/index.d.ts +44 -0
- package/dist/validate/wsi/assertions/index.js +77 -0
- package/dist/validate/wsi/assertions/message/helpers.d.ts +63 -0
- package/dist/validate/wsi/assertions/message/helpers.js +168 -0
- package/dist/validate/wsi/assertions/message/index.d.ts +39 -0
- package/dist/validate/wsi/assertions/message/index.js +62 -0
- package/dist/validate/wsi/assertions/message/r1001.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1001.js +38 -0
- package/dist/validate/wsi/assertions/message/r1003.d.ts +14 -0
- package/dist/validate/wsi/assertions/message/r1003.js +45 -0
- package/dist/validate/wsi/assertions/message/r1005.d.ts +12 -0
- package/dist/validate/wsi/assertions/message/r1005.js +37 -0
- package/dist/validate/wsi/assertions/message/r1006.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1006.js +49 -0
- package/dist/validate/wsi/assertions/message/r1007.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1007.js +30 -0
- package/dist/validate/wsi/assertions/message/r1011.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1011.js +33 -0
- package/dist/validate/wsi/assertions/message/r1012.d.ts +13 -0
- package/dist/validate/wsi/assertions/message/r1012.js +37 -0
- package/dist/validate/wsi/assertions/message/r1013.d.ts +9 -0
- package/dist/validate/wsi/assertions/message/r1013.js +42 -0
- package/dist/validate/wsi/assertions/message/r1014.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1014.js +30 -0
- package/dist/validate/wsi/assertions/message/r1015.d.ts +12 -0
- package/dist/validate/wsi/assertions/message/r1015.js +36 -0
- package/dist/validate/wsi/assertions/message/r1017.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1017.js +30 -0
- package/dist/validate/wsi/assertions/message/r1100.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1100.js +39 -0
- package/dist/validate/wsi/assertions/message/r1101.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1101.js +37 -0
- package/dist/validate/wsi/assertions/message/r1102.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1102.js +41 -0
- package/dist/validate/wsi/assertions/message/r1103.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1103.js +28 -0
- package/dist/validate/wsi/assertions/message/r1107.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1107.js +38 -0
- package/dist/validate/wsi/assertions/message/r1109.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1109.js +32 -0
- package/dist/validate/wsi/assertions/message/r1124.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1124.js +31 -0
- package/dist/validate/wsi/assertions/message/r1132.d.ts +9 -0
- package/dist/validate/wsi/assertions/message/r1132.js +23 -0
- package/dist/validate/wsi/assertions/message/r1140.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1140.js +42 -0
- package/dist/validate/wsi/assertions/message/r1141.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1141.js +32 -0
- package/dist/validate/wsi/assertions/message/r2113.d.ts +11 -0
- package/dist/validate/wsi/assertions/message/r2113.js +33 -0
- package/dist/validate/wsi/assertions/message/r2211.d.ts +7 -0
- package/dist/validate/wsi/assertions/message/r2211.js +42 -0
- package/dist/validate/wsi/assertions/r2001.d.ts +15 -0
- package/dist/validate/wsi/assertions/r2001.js +47 -0
- package/dist/validate/wsi/assertions/r2002.d.ts +11 -0
- package/dist/validate/wsi/assertions/r2002.js +38 -0
- package/dist/validate/wsi/assertions/r2003.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2003.js +32 -0
- package/dist/validate/wsi/assertions/r2005.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2005.js +40 -0
- package/dist/validate/wsi/assertions/r2101.d.ts +14 -0
- package/dist/validate/wsi/assertions/r2101.js +65 -0
- package/dist/validate/wsi/assertions/r2102.d.ts +10 -0
- package/dist/validate/wsi/assertions/r2102.js +41 -0
- package/dist/validate/wsi/assertions/r2105.d.ts +8 -0
- package/dist/validate/wsi/assertions/r2105.js +39 -0
- package/dist/validate/wsi/assertions/r2110.d.ts +8 -0
- package/dist/validate/wsi/assertions/r2110.js +38 -0
- package/dist/validate/wsi/assertions/r2111.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2111.js +30 -0
- package/dist/validate/wsi/assertions/r2112.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2112.js +35 -0
- package/dist/validate/wsi/assertions/r2201.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2201.js +28 -0
- package/dist/validate/wsi/assertions/r2203.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2203.js +30 -0
- package/dist/validate/wsi/assertions/r2204.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2204.js +29 -0
- package/dist/validate/wsi/assertions/r2205.d.ts +8 -0
- package/dist/validate/wsi/assertions/r2205.js +46 -0
- package/dist/validate/wsi/assertions/r2206.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2206.js +36 -0
- package/dist/validate/wsi/assertions/r2209.d.ts +12 -0
- package/dist/validate/wsi/assertions/r2209.js +37 -0
- package/dist/validate/wsi/assertions/r2210.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2210.js +30 -0
- package/dist/validate/wsi/assertions/r2303.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2303.js +44 -0
- package/dist/validate/wsi/assertions/r2304.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2304.js +32 -0
- package/dist/validate/wsi/assertions/r2401.d.ts +12 -0
- package/dist/validate/wsi/assertions/r2401.js +31 -0
- package/dist/validate/wsi/assertions/r2701.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2701.js +28 -0
- package/dist/validate/wsi/assertions/r2702.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2702.js +26 -0
- package/dist/validate/wsi/assertions/r2705.d.ts +11 -0
- package/dist/validate/wsi/assertions/r2705.js +31 -0
- package/dist/validate/wsi/assertions/r2706.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2706.js +29 -0
- package/dist/validate/wsi/assertions/r2710.d.ts +13 -0
- package/dist/validate/wsi/assertions/r2710.js +37 -0
- package/dist/validate/wsi/assertions/r2716.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2716.js +29 -0
- package/dist/validate/wsi/assertions/r2717.d.ts +9 -0
- package/dist/validate/wsi/assertions/r2717.js +31 -0
- package/dist/validate/wsi/assertions/r2718.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2718.js +41 -0
- package/dist/validate/wsi/assertions/r2720.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2720.js +29 -0
- package/dist/validate/wsi/assertions/r2721.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2721.js +27 -0
- package/dist/validate/wsi/assertions/r2722.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2722.js +29 -0
- package/dist/validate/wsi/assertions/r2801.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2801.js +39 -0
- package/dist/validate/wsi/assertions/r2803.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2803.js +29 -0
- package/dist/validate/wsi/docs.d.ts +29 -0
- package/dist/validate/wsi/docs.js +167 -0
- package/dist/validate/wsi/index.d.ts +16 -0
- package/dist/validate/wsi/index.js +11 -0
- package/dist/validate/wsi/report-html.d.ts +36 -0
- package/dist/validate/wsi/report-html.js +135 -0
- package/dist/validate/wsi/run-message.d.ts +50 -0
- package/dist/validate/wsi/run-message.js +190 -0
- package/dist/validate/wsi/run-wsdl.d.ts +48 -0
- package/dist/validate/wsi/run-wsdl.js +99 -0
- package/dist/validate/wsi/types.d.ts +173 -0
- package/dist/validate/wsi/types.js +17 -0
- package/dist/workspace/commit-message.d.ts +47 -0
- package/dist/workspace/commit-message.js +195 -0
- package/dist/workspace/environments.d.ts +79 -0
- package/dist/workspace/environments.js +115 -0
- package/dist/workspace/index.d.ts +28 -0
- package/dist/workspace/index.js +19 -0
- package/dist/workspace/load.d.ts +45 -0
- package/dist/workspace/load.js +155 -0
- package/dist/workspace/local-state.d.ts +37 -0
- package/dist/workspace/local-state.js +59 -0
- package/dist/workspace/migrate.d.ts +38 -0
- package/dist/workspace/migrate.js +50 -0
- package/dist/workspace/model.d.ts +86 -0
- package/dist/workspace/model.js +54 -0
- package/dist/workspace/paths.d.ts +64 -0
- package/dist/workspace/paths.js +97 -0
- package/dist/workspace/reidentify.d.ts +22 -0
- package/dist/workspace/reidentify.js +122 -0
- package/dist/workspace/save.d.ts +31 -0
- package/dist/workspace/save.js +84 -0
- package/dist/workspace/schema.d.ts +93 -0
- package/dist/workspace/schema.js +115 -0
- package/dist/workspace/serialize.d.ts +24 -0
- package/dist/workspace/serialize.js +60 -0
- package/dist/workspace/share.d.ts +52 -0
- package/dist/workspace/share.js +89 -0
- package/dist/ws/browser.d.ts +13 -0
- package/dist/ws/browser.js +11 -0
- package/dist/ws/call.d.ts +53 -0
- package/dist/ws/call.js +106 -0
- package/dist/ws/command.d.ts +19 -0
- package/dist/ws/command.js +28 -0
- package/dist/ws/expand.d.ts +38 -0
- package/dist/ws/expand.js +76 -0
- package/dist/ws/model.d.ts +191 -0
- package/dist/ws/model.js +83 -0
- package/dist/ws/pretty.d.ts +12 -0
- package/dist/ws/pretty.js +25 -0
- package/dist/ws/session.d.ts +50 -0
- package/dist/ws/session.js +333 -0
- package/dist/ws/shape.d.ts +18 -0
- package/dist/ws/shape.js +28 -0
- package/dist/ws/transcript.d.ts +14 -0
- package/dist/ws/transcript.js +29 -0
- package/dist/ws/url.d.ts +3 -0
- package/dist/ws/url.js +44 -0
- package/dist/wsa/headers.d.ts +78 -0
- package/dist/wsa/headers.js +244 -0
- package/dist/wsa/model.d.ts +66 -0
- package/dist/wsa/model.js +52 -0
- package/dist/wsa/policy-detect.d.ts +81 -0
- package/dist/wsa/policy-detect.js +245 -0
- package/dist/wsdl/cache-naming.d.ts +39 -0
- package/dist/wsdl/cache-naming.js +90 -0
- package/dist/wsdl/cache.d.ts +48 -0
- package/dist/wsdl/cache.js +141 -0
- package/dist/wsdl/docs-generator.d.ts +47 -0
- package/dist/wsdl/docs-generator.js +439 -0
- package/dist/wsdl/dom-utils.d.ts +15 -0
- package/dist/wsdl/dom-utils.js +50 -0
- package/dist/wsdl/export-definition.d.ts +38 -0
- package/dist/wsdl/export-definition.js +100 -0
- package/dist/wsdl/fetch.d.ts +13 -0
- package/dist/wsdl/fetch.js +60 -0
- package/dist/wsdl/merge.d.ts +17 -0
- package/dist/wsdl/merge.js +57 -0
- package/dist/wsdl/model.d.ts +176 -0
- package/dist/wsdl/model.js +17 -0
- package/dist/wsdl/parse-binding.d.ts +6 -0
- package/dist/wsdl/parse-binding.js +150 -0
- package/dist/wsdl/parse-wsdl.d.ts +47 -0
- package/dist/wsdl/parse-wsdl.js +161 -0
- package/dist/wsdl/qname.d.ts +28 -0
- package/dist/wsdl/qname.js +41 -0
- package/dist/wsdl/ref-policy.d.ts +54 -0
- package/dist/wsdl/ref-policy.js +87 -0
- package/dist/wsdl/resolver.d.ts +81 -0
- package/dist/wsdl/resolver.js +276 -0
- package/dist/wsdl/update-definition.d.ts +106 -0
- package/dist/wsdl/update-definition.js +314 -0
- package/dist/wss/apply.d.ts +40 -0
- package/dist/wss/apply.js +212 -0
- package/dist/wss/c14n-prefixes.d.ts +27 -0
- package/dist/wss/c14n-prefixes.js +95 -0
- package/dist/wss/incoming/decrypt.d.ts +35 -0
- package/dist/wss/incoming/decrypt.js +57 -0
- package/dist/wss/incoming/index.d.ts +56 -0
- package/dist/wss/incoming/index.js +189 -0
- package/dist/wss/incoming/verify.d.ts +74 -0
- package/dist/wss/incoming/verify.js +440 -0
- package/dist/wss/key-identifiers.d.ts +76 -0
- package/dist/wss/key-identifiers.js +139 -0
- package/dist/wss/keystore/certificate.d.ts +45 -0
- package/dist/wss/keystore/certificate.js +134 -0
- package/dist/wss/keystore/index.d.ts +50 -0
- package/dist/wss/keystore/index.js +80 -0
- package/dist/wss/keystore/model.d.ts +83 -0
- package/dist/wss/keystore/model.js +27 -0
- package/dist/wss/keystore/pem.d.ts +21 -0
- package/dist/wss/keystore/pem.js +140 -0
- package/dist/wss/keystore/pkcs12.d.ts +21 -0
- package/dist/wss/keystore/pkcs12.js +125 -0
- package/dist/wss/model.d.ts +160 -0
- package/dist/wss/model.js +37 -0
- package/dist/wss/outgoing/encryption.d.ts +76 -0
- package/dist/wss/outgoing/encryption.js +618 -0
- package/dist/wss/outgoing/signature.d.ts +73 -0
- package/dist/wss/outgoing/signature.js +239 -0
- package/dist/wss/outgoing/timestamp.d.ts +29 -0
- package/dist/wss/outgoing/timestamp.js +39 -0
- package/dist/wss/outgoing/username-token.d.ts +36 -0
- package/dist/wss/outgoing/username-token.js +68 -0
- package/dist/wss/security-header.d.ts +31 -0
- package/dist/wss/security-header.js +83 -0
- package/dist/xml/index.d.ts +7 -0
- package/dist/xml/index.js +7 -0
- package/dist/xml/namespaces.d.ts +36 -0
- package/dist/xml/namespaces.js +60 -0
- package/dist/xml/parse.d.ts +79 -0
- package/dist/xml/parse.js +109 -0
- package/dist/xml/positions.d.ts +26 -0
- package/dist/xml/positions.js +71 -0
- package/dist/xml/pretty.d.ts +37 -0
- package/dist/xml/pretty.js +137 -0
- package/dist/xml/serialize.d.ts +6 -0
- package/dist/xml/serialize.js +8 -0
- package/dist/xml/tolerant-tree.d.ts +56 -0
- package/dist/xml/tolerant-tree.js +134 -0
- package/dist/xpath/evaluate-async.d.ts +31 -0
- package/dist/xpath/evaluate-async.js +81 -0
- package/dist/xpath/evaluate.d.ts +98 -0
- package/dist/xpath/evaluate.js +340 -0
- package/dist/xpath/jsonpath.d.ts +40 -0
- package/dist/xpath/jsonpath.js +109 -0
- package/dist/xpath/namespaces.d.ts +29 -0
- package/dist/xpath/namespaces.js +101 -0
- package/dist/xpath/worker.d.ts +7 -0
- package/dist/xpath/worker.js +26 -0
- package/dist/xsd/builtins.d.ts +36 -0
- package/dist/xsd/builtins.js +108 -0
- package/dist/xsd/check-references.d.ts +25 -0
- package/dist/xsd/check-references.js +145 -0
- package/dist/xsd/form-edits.d.ts +57 -0
- package/dist/xsd/form-edits.js +153 -0
- package/dist/xsd/form-model.d.ts +153 -0
- package/dist/xsd/form-model.js +691 -0
- package/dist/xsd/locate.d.ts +42 -0
- package/dist/xsd/locate.js +249 -0
- package/dist/xsd/model.d.ts +249 -0
- package/dist/xsd/model.js +1 -0
- package/dist/xsd/parse-particles.d.ts +48 -0
- package/dist/xsd/parse-particles.js +320 -0
- package/dist/xsd/parse-schema.d.ts +21 -0
- package/dist/xsd/parse-schema.js +143 -0
- package/dist/xsd/resolve-content.d.ts +18 -0
- package/dist/xsd/resolve-content.js +242 -0
- package/dist/xsd/sample-generator.d.ts +51 -0
- package/dist/xsd/sample-generator.js +291 -0
- package/dist/xsd/sample-types.d.ts +21 -0
- package/dist/xsd/sample-types.js +69 -0
- package/dist/xsd/sample-values.d.ts +54 -0
- package/dist/xsd/sample-values.js +267 -0
- package/dist/xsd/schema-set.d.ts +51 -0
- package/dist/xsd/schema-set.js +203 -0
- package/dist/xsd/xml-scan.d.ts +64 -0
- package/dist/xsd/xml-scan.js +286 -0
- package/dist/xsd/xml-writer.d.ts +56 -0
- package/dist/xsd/xml-writer.js +103 -0
- 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
|
+
}
|