@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,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes a {@link Project} to a project folder.
|
|
3
|
+
*
|
|
4
|
+
* Saving is incremental and atomic: only files whose bytes actually changed are
|
|
5
|
+
* rewritten (so an autosave produces a one-file git diff, and file watchers
|
|
6
|
+
* stay quiet), and every write goes through a temp file plus `rename`.
|
|
7
|
+
*
|
|
8
|
+
* Only Wirebench's own subtrees are managed. The definition cache
|
|
9
|
+
* (`interfaces/<slug>/definition/`) and `attachments/` belong to other
|
|
10
|
+
* components and are never read or removed here — except when their owning
|
|
11
|
+
* interface is deleted, in which case the whole interface folder goes.
|
|
12
|
+
*/
|
|
13
|
+
import { dirname, join } from 'node:path';
|
|
14
|
+
import { API_FILE, APIS_DIR, ENVIRONMENTS_DIR, FOLDER_FILE, INTERFACES_DIR, OPERATIONS_DIR, REQUEST_SUFFIX, REQUESTS_DIR, WSS_DIR, } from './paths.js';
|
|
15
|
+
import { nodeFs, readFileIfExists, readdirIfExists, writeFileAtomic } from './fs.js';
|
|
16
|
+
import { KEYSTORES_PATH, MANIFEST_PATH, projectFiles } from './serialize.js';
|
|
17
|
+
function toAbsolute(root, relative) {
|
|
18
|
+
return join(root, ...relative.split('/'));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Lists every file Wirebench manages under `root` — i.e. every file that
|
|
22
|
+
* matches one of the format's own patterns:
|
|
23
|
+
*
|
|
24
|
+
* - `wirebench.yaml`
|
|
25
|
+
* - `environments/*.yaml`
|
|
26
|
+
* - `interfaces/*\/interface.yaml`
|
|
27
|
+
* - `interfaces/*\/operations/*\/*.request.yaml`, plus the sibling `*.xml` of
|
|
28
|
+
* any such file
|
|
29
|
+
* - `wss/{outgoing,incoming}/*.yaml`
|
|
30
|
+
* - `wss/keystores.yaml`
|
|
31
|
+
*
|
|
32
|
+
* Anything else on disk — a README, a `.gitkeep`, notes, an orphan `.xml`
|
|
33
|
+
* with no matching `.request.yaml` — is a foreign file and is never a
|
|
34
|
+
* deletion candidate, even when it sits inside a directory Wirebench
|
|
35
|
+
* otherwise manages.
|
|
36
|
+
*/
|
|
37
|
+
async function listManagedFiles(fs, root) {
|
|
38
|
+
const managed = [];
|
|
39
|
+
if ((await readFileIfExists(fs, toAbsolute(root, MANIFEST_PATH))) !== undefined) {
|
|
40
|
+
managed.push(MANIFEST_PATH);
|
|
41
|
+
}
|
|
42
|
+
for (const entry of await readdirIfExists(fs, toAbsolute(root, ENVIRONMENTS_DIR))) {
|
|
43
|
+
if (entry.isFile && entry.name.endsWith('.yaml')) {
|
|
44
|
+
managed.push(`${ENVIRONMENTS_DIR}/${entry.name}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const direction of ['outgoing', 'incoming']) {
|
|
48
|
+
const dir = `${WSS_DIR}/${direction}`;
|
|
49
|
+
for (const entry of await readdirIfExists(fs, toAbsolute(root, dir))) {
|
|
50
|
+
if (entry.isFile && entry.name.endsWith('.yaml')) {
|
|
51
|
+
managed.push(`${dir}/${entry.name}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if ((await readFileIfExists(fs, toAbsolute(root, KEYSTORES_PATH))) !== undefined) {
|
|
56
|
+
managed.push(KEYSTORES_PATH);
|
|
57
|
+
}
|
|
58
|
+
for (const entry of await readdirIfExists(fs, toAbsolute(root, APIS_DIR))) {
|
|
59
|
+
if (!entry.isDirectory) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const base = `${APIS_DIR}/${entry.name}`;
|
|
63
|
+
if ((await readFileIfExists(fs, toAbsolute(root, `${base}/${API_FILE}`))) !== undefined) {
|
|
64
|
+
managed.push(`${base}/${API_FILE}`);
|
|
65
|
+
}
|
|
66
|
+
managed.push(...(await listApiTreeFiles(fs, root, `${base}/${REQUESTS_DIR}`)));
|
|
67
|
+
}
|
|
68
|
+
for (const entry of await readdirIfExists(fs, toAbsolute(root, INTERFACES_DIR))) {
|
|
69
|
+
if (!entry.isDirectory) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const base = `${INTERFACES_DIR}/${entry.name}`;
|
|
73
|
+
const ifaceFile = `${base}/interface.yaml`;
|
|
74
|
+
if ((await readFileIfExists(fs, toAbsolute(root, ifaceFile))) !== undefined) {
|
|
75
|
+
managed.push(ifaceFile);
|
|
76
|
+
}
|
|
77
|
+
const opsDir = `${base}/${OPERATIONS_DIR}`;
|
|
78
|
+
for (const opEntry of await readdirIfExists(fs, toAbsolute(root, opsDir))) {
|
|
79
|
+
if (!opEntry.isDirectory) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const opDir = `${opsDir}/${opEntry.name}`;
|
|
83
|
+
const requestSlugs = new Set();
|
|
84
|
+
const opFiles = await readdirIfExists(fs, toAbsolute(root, opDir));
|
|
85
|
+
for (const fileEntry of opFiles) {
|
|
86
|
+
if (fileEntry.isFile && fileEntry.name.endsWith(REQUEST_SUFFIX)) {
|
|
87
|
+
requestSlugs.add(fileEntry.name.slice(0, -REQUEST_SUFFIX.length));
|
|
88
|
+
managed.push(`${opDir}/${fileEntry.name}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
for (const fileEntry of opFiles) {
|
|
92
|
+
if (fileEntry.isFile && fileEntry.name.endsWith('.xml')) {
|
|
93
|
+
const slug = fileEntry.name.slice(0, -'.xml'.length);
|
|
94
|
+
if (requestSlugs.has(slug)) {
|
|
95
|
+
managed.push(`${opDir}/${fileEntry.name}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return managed;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* True when `name` is a WebSocket request's saved-message sibling for `requestSlug`:
|
|
105
|
+
* `<requestSlug>.msg-<message-slug>.<ext>`, where `<ext>` is one `[A-Za-z0-9]+` run at the very
|
|
106
|
+
* end. Matched by trying the known `requestSlug` as a literal prefix — never by a greedy regex
|
|
107
|
+
* capture across the whole name — so a request slug that itself contains a dot or the literal text
|
|
108
|
+
* `.msg-` cannot be mis-split from the message slug that follows it.
|
|
109
|
+
*/
|
|
110
|
+
function isWsMessageSibling(name, requestSlug) {
|
|
111
|
+
const prefix = `${requestSlug}.msg-`;
|
|
112
|
+
if (!name.startsWith(prefix)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
const rest = name.slice(prefix.length);
|
|
116
|
+
const dot = rest.lastIndexOf('.');
|
|
117
|
+
// dot > 0 requires a non-empty message slug before the extension.
|
|
118
|
+
return dot > 0 && /^[A-Za-z0-9]+$/.test(rest.slice(dot + 1));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Lists the managed files inside one directory of an API's request tree: its `folder.yaml`, every
|
|
122
|
+
* `*.request.yaml`, and two conventions of per-request sibling file, each claimed only when it
|
|
123
|
+
* belongs to a request slug actually present in this directory:
|
|
124
|
+
*
|
|
125
|
+
* - `<slug>.body.<ext>` — a REST raw body or a gRPC message, one file for the whole request.
|
|
126
|
+
* - `<slug>.msg-<message-slug>.<ext>` — one WebSocket saved message, one file per message
|
|
127
|
+
* ({@link isWsMessageSibling}).
|
|
128
|
+
*
|
|
129
|
+
* Claiming only a sibling of a *known* request slug (rather than every file matching either
|
|
130
|
+
* pattern) means a hand-placed file — notes, a `.body.json` or `.msg-x.txt` with no matching
|
|
131
|
+
* request — is foreign and never a deletion candidate, exactly as in an operation folder.
|
|
132
|
+
*/
|
|
133
|
+
async function listApiTreeFiles(fs, root, dir) {
|
|
134
|
+
const managed = [];
|
|
135
|
+
const entries = await readdirIfExists(fs, toAbsolute(root, dir));
|
|
136
|
+
const requestSlugs = new Set();
|
|
137
|
+
for (const entry of entries) {
|
|
138
|
+
if (!entry.isFile) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (entry.name === FOLDER_FILE) {
|
|
142
|
+
managed.push(`${dir}/${entry.name}`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (entry.name.endsWith(REQUEST_SUFFIX)) {
|
|
146
|
+
requestSlugs.add(entry.name.slice(0, -REQUEST_SUFFIX.length));
|
|
147
|
+
managed.push(`${dir}/${entry.name}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
for (const entry of entries) {
|
|
151
|
+
if (!entry.isFile) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const body = /^(.*)\.body\.[A-Za-z0-9]+$/.exec(entry.name);
|
|
155
|
+
if (body !== null && requestSlugs.has(body[1])) {
|
|
156
|
+
managed.push(`${dir}/${entry.name}`);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
for (const slug of requestSlugs) {
|
|
160
|
+
if (isWsMessageSibling(entry.name, slug)) {
|
|
161
|
+
managed.push(`${dir}/${entry.name}`);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
for (const entry of entries) {
|
|
167
|
+
if (entry.isDirectory) {
|
|
168
|
+
managed.push(...(await listApiTreeFiles(fs, root, `${dir}/${entry.name}`)));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return managed;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Removes directories that became empty after their files were deleted, walking
|
|
175
|
+
* upward but never past the project root or into a foreign subtree.
|
|
176
|
+
*/
|
|
177
|
+
async function pruneEmptyDirs(fs, root, relativeDirs) {
|
|
178
|
+
const pruned = [];
|
|
179
|
+
// Deepest first, so a parent is considered after its children are gone.
|
|
180
|
+
for (const relative of [...relativeDirs].sort((a, b) => b.split('/').length - a.split('/').length)) {
|
|
181
|
+
let current = relative;
|
|
182
|
+
while (current !== '' && current !== '.') {
|
|
183
|
+
const entries = await readdirIfExists(fs, toAbsolute(root, current));
|
|
184
|
+
if (entries.length > 0) {
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
await fs.rm(toAbsolute(root, current), { recursive: true, force: true });
|
|
188
|
+
pruned.push(current);
|
|
189
|
+
const parent = dirname(current);
|
|
190
|
+
current = parent === '.' ? '' : parent;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return pruned;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Saves `project` into the directory `root`, creating it if needed.
|
|
197
|
+
*
|
|
198
|
+
* @returns which files were written, removed and left untouched.
|
|
199
|
+
*/
|
|
200
|
+
export async function saveProject(project, root, options) {
|
|
201
|
+
const fs = options?.fs ?? nodeFs;
|
|
202
|
+
const desired = projectFiles(project, options?.writer !== undefined ? { writer: options.writer } : undefined);
|
|
203
|
+
const existing = await listManagedFiles(fs, root);
|
|
204
|
+
const backupsWritten = [];
|
|
205
|
+
for (const backup of options?.backups ?? []) {
|
|
206
|
+
if (!backup.endsWith('.xml.bak')) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const source = backup.slice(0, -'.bak'.length);
|
|
210
|
+
const current = await readFileIfExists(fs, toAbsolute(root, source));
|
|
211
|
+
if (current === undefined) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const timestamped = await timestampedBackupPath(fs, root, backup, options?.now ?? (() => new Date()));
|
|
215
|
+
await writeFileAtomic(fs, toAbsolute(root, timestamped), current);
|
|
216
|
+
backupsWritten.push(timestamped);
|
|
217
|
+
}
|
|
218
|
+
const written = [];
|
|
219
|
+
const unchanged = [];
|
|
220
|
+
for (const [relative, content] of desired) {
|
|
221
|
+
const absolute = toAbsolute(root, relative);
|
|
222
|
+
const previous = options?.previous?.get(relative) ??
|
|
223
|
+
(options?.previous !== undefined ? undefined : (await readFileIfExists(fs, absolute))?.toString('utf8'));
|
|
224
|
+
if (previous === content) {
|
|
225
|
+
unchanged.push(relative);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
await writeFileAtomic(fs, absolute, Buffer.from(content, 'utf8'));
|
|
229
|
+
written.push(relative);
|
|
230
|
+
}
|
|
231
|
+
const removed = [];
|
|
232
|
+
const touchedDirs = new Set();
|
|
233
|
+
// A deleted interface or API takes its whole folder with it, definition cache included.
|
|
234
|
+
const goneEntities = new Set();
|
|
235
|
+
for (const [dir, liveSlugs] of [
|
|
236
|
+
[INTERFACES_DIR, new Set(project.interfaces.map((i) => i.slug))],
|
|
237
|
+
[
|
|
238
|
+
APIS_DIR,
|
|
239
|
+
new Set([
|
|
240
|
+
...project.apis.map((a) => a.slug),
|
|
241
|
+
...project.grpcApis.map((a) => a.slug),
|
|
242
|
+
...project.wsApis.map((a) => a.slug),
|
|
243
|
+
]),
|
|
244
|
+
],
|
|
245
|
+
]) {
|
|
246
|
+
for (const entry of await readdirIfExists(fs, toAbsolute(root, dir))) {
|
|
247
|
+
if (entry.isDirectory && !liveSlugs.has(entry.name)) {
|
|
248
|
+
const relative = `${dir}/${entry.name}`;
|
|
249
|
+
await fs.rm(toAbsolute(root, relative), { recursive: true, force: true });
|
|
250
|
+
removed.push(relative);
|
|
251
|
+
goneEntities.add(`${relative}/`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
for (const relative of existing) {
|
|
256
|
+
if (desired.has(relative) || [...goneEntities].some((prefix) => relative.startsWith(prefix))) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
await fs.rm(toAbsolute(root, relative), { force: true });
|
|
260
|
+
removed.push(relative);
|
|
261
|
+
const parent = dirname(relative);
|
|
262
|
+
if (parent !== '.' && parent !== '') {
|
|
263
|
+
touchedDirs.add(parent);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
removed.push(...(await pruneEmptyDirs(fs, root, touchedDirs)));
|
|
267
|
+
written.sort();
|
|
268
|
+
removed.sort();
|
|
269
|
+
unchanged.sort();
|
|
270
|
+
backupsWritten.sort();
|
|
271
|
+
return { written, removed, unchanged, backups: backupsWritten };
|
|
272
|
+
}
|
|
273
|
+
/** UTC `YYYYMMDD-HHmmss` for `date`, the backup timestamp format. */
|
|
274
|
+
function backupStamp(date) {
|
|
275
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
276
|
+
return (`${String(date.getUTCFullYear())}${pad(date.getUTCMonth() + 1)}${pad(date.getUTCDate())}` +
|
|
277
|
+
`-${pad(date.getUTCHours())}${pad(date.getUTCMinutes())}${pad(date.getUTCSeconds())}`);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Turns a requested `<slug>.xml.bak` path into `<slug>.<stamp>.xml.bak`, picking a stamp from
|
|
281
|
+
* `now` and, in the vanishingly unlikely case that path is already taken (two backups of the
|
|
282
|
+
* same request within the same second), appending a counter so it never overwrites a previous
|
|
283
|
+
* backup.
|
|
284
|
+
*/
|
|
285
|
+
async function timestampedBackupPath(fs, root, backup, now) {
|
|
286
|
+
const base = backup.slice(0, -'.xml.bak'.length);
|
|
287
|
+
const stamp = backupStamp(now());
|
|
288
|
+
let candidate = `${base}.${stamp}.xml.bak`;
|
|
289
|
+
let n = 2;
|
|
290
|
+
while ((await readFileIfExists(fs, toAbsolute(root, candidate))) !== undefined) {
|
|
291
|
+
candidate = `${base}.${stamp}-${String(n)}.xml.bak`;
|
|
292
|
+
n += 1;
|
|
293
|
+
}
|
|
294
|
+
return candidate;
|
|
295
|
+
}
|