@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,242 @@
|
|
|
1
|
+
import { qnameToString } from '../wsdl/qname.js';
|
|
2
|
+
import { lookupBuiltin } from './builtins.js';
|
|
3
|
+
/**
|
|
4
|
+
* Replaces every `groupRef` with the referenced group's compositor, carrying the
|
|
5
|
+
* ref's own occurrence constraints. `visited` breaks group-reference cycles.
|
|
6
|
+
*/
|
|
7
|
+
function expandGroups(particle, ctx, visited) {
|
|
8
|
+
switch (particle.kind) {
|
|
9
|
+
case 'groupRef': {
|
|
10
|
+
const key = qnameToString(particle.ref);
|
|
11
|
+
if (visited.has(key)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const group = ctx.lookupGroup(particle.ref);
|
|
15
|
+
if (group === undefined) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const inner = expandGroups(group.particle, ctx, new Set([...visited, key]));
|
|
19
|
+
return inner === undefined ? undefined : { ...inner, occurs: particle.occurs };
|
|
20
|
+
}
|
|
21
|
+
case 'sequence':
|
|
22
|
+
case 'choice':
|
|
23
|
+
case 'all': {
|
|
24
|
+
const particles = particle.particles
|
|
25
|
+
.map((p) => expandGroups(p, ctx, visited))
|
|
26
|
+
.filter((p) => p !== undefined);
|
|
27
|
+
return { ...particle, particles };
|
|
28
|
+
}
|
|
29
|
+
default:
|
|
30
|
+
return particle;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const ONCE = { min: 1, max: 1 };
|
|
34
|
+
/** True when a particle can be spliced into an enclosing synthetic sequence. */
|
|
35
|
+
function isInlinableSequence(particle) {
|
|
36
|
+
return particle.kind === 'sequence' && particle.occurs.min === 1 && particle.occurs.max === 1;
|
|
37
|
+
}
|
|
38
|
+
/** Concatenates base-first particles into a single sequence, splicing plain sub-sequences. */
|
|
39
|
+
function mergeParticles(parts) {
|
|
40
|
+
const flat = [];
|
|
41
|
+
for (const part of parts) {
|
|
42
|
+
if (isInlinableSequence(part)) {
|
|
43
|
+
flat.push(...part.particles);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
flat.push(part);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (flat.length === 0) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (parts.length === 1 && !isInlinableSequence(parts[0])) {
|
|
53
|
+
return parts[0];
|
|
54
|
+
}
|
|
55
|
+
return { kind: 'sequence', particles: flat, occurs: ONCE };
|
|
56
|
+
}
|
|
57
|
+
function toResolvedAttribute(decl) {
|
|
58
|
+
return {
|
|
59
|
+
name: decl.name,
|
|
60
|
+
...(decl.type !== undefined ? { type: decl.type } : {}),
|
|
61
|
+
...(decl.anonymousType !== undefined ? { anonymousType: decl.anonymousType } : {}),
|
|
62
|
+
use: decl.use === 'required' ? 'required' : 'optional',
|
|
63
|
+
...(decl.default !== undefined ? { default: decl.default } : {}),
|
|
64
|
+
...(decl.fixed !== undefined ? { fixed: decl.fixed } : {}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function collectAttributes(uses, ctx, acc, seenGroups) {
|
|
68
|
+
for (const use of uses) {
|
|
69
|
+
switch (use.kind) {
|
|
70
|
+
case 'attribute': {
|
|
71
|
+
const key = qnameToString(use.name);
|
|
72
|
+
if (use.use === 'prohibited') {
|
|
73
|
+
acc.prohibited.add(key);
|
|
74
|
+
acc.byName.delete(key);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
acc.byName.set(key, toResolvedAttribute(use));
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case 'attributeRef': {
|
|
82
|
+
const key = qnameToString(use.ref);
|
|
83
|
+
if (use.use === 'prohibited') {
|
|
84
|
+
acc.prohibited.add(key);
|
|
85
|
+
acc.byName.delete(key);
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
const decl = ctx.lookupAttribute(use.ref);
|
|
89
|
+
const base = decl !== undefined ? toResolvedAttribute(decl) : { name: use.ref, use: 'optional' };
|
|
90
|
+
acc.byName.set(key, {
|
|
91
|
+
...base,
|
|
92
|
+
use: use.use === 'required' ? 'required' : base.use,
|
|
93
|
+
...(use.default !== undefined ? { default: use.default } : {}),
|
|
94
|
+
...(use.fixed !== undefined ? { fixed: use.fixed } : {}),
|
|
95
|
+
...(use.arrayType !== undefined ? { arrayType: use.arrayType } : {}),
|
|
96
|
+
});
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case 'attributeGroupRef': {
|
|
100
|
+
const key = qnameToString(use.ref);
|
|
101
|
+
if (seenGroups.has(key)) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
seenGroups.add(key);
|
|
105
|
+
const group = ctx.lookupAttributeGroup(use.ref);
|
|
106
|
+
if (group !== undefined) {
|
|
107
|
+
collectAttributes(group.attributes, ctx, acc, seenGroups);
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case 'anyAttribute':
|
|
112
|
+
acc.anyAttribute = { namespace: use.namespace, processContents: use.processContents };
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Walks a `simpleContent` derivation chain down to its ultimate simple base. */
|
|
118
|
+
function ultimateSimpleBase(base, ctx, visited) {
|
|
119
|
+
const key = qnameToString(base);
|
|
120
|
+
if (visited.has(key) || lookupBuiltin(base) !== undefined) {
|
|
121
|
+
return base;
|
|
122
|
+
}
|
|
123
|
+
visited.add(key);
|
|
124
|
+
const type = ctx.lookupType(base);
|
|
125
|
+
if (type === undefined) {
|
|
126
|
+
return base;
|
|
127
|
+
}
|
|
128
|
+
if (type.kind === 'simpleType') {
|
|
129
|
+
return type.base !== undefined ? ultimateSimpleBase(type.base, ctx, visited) : base;
|
|
130
|
+
}
|
|
131
|
+
if (type.content.kind === 'simpleContent') {
|
|
132
|
+
return ultimateSimpleBase(type.content.base, ctx, visited);
|
|
133
|
+
}
|
|
134
|
+
return base;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Computes a complex type's effective content: extension chains flattened
|
|
138
|
+
* base-first, `groupRef`s expanded in place, attribute groups and inherited
|
|
139
|
+
* attributes merged (later declarations win, `prohibited` ones removed).
|
|
140
|
+
*
|
|
141
|
+
* Cycle-safe: a base chain that loops back on itself stops at the repeat, and
|
|
142
|
+
* recursive element declarations are left as references rather than expanded.
|
|
143
|
+
*/
|
|
144
|
+
export function resolveContent(type, ctx) {
|
|
145
|
+
const particles = [];
|
|
146
|
+
const acc = { byName: new Map(), prohibited: new Set() };
|
|
147
|
+
const visited = new Set();
|
|
148
|
+
let mixed = false;
|
|
149
|
+
let simpleContentBase;
|
|
150
|
+
// Walk the derivation chain to its root, collecting each level, then apply
|
|
151
|
+
// base-first so extensions append after what they extend.
|
|
152
|
+
const chain = [];
|
|
153
|
+
let current = type;
|
|
154
|
+
while (current !== undefined) {
|
|
155
|
+
const key = current.name !== undefined ? qnameToString(current.name) : undefined;
|
|
156
|
+
if (key !== undefined) {
|
|
157
|
+
if (visited.has(key)) {
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
visited.add(key);
|
|
161
|
+
}
|
|
162
|
+
chain.unshift(current);
|
|
163
|
+
const content = current.content;
|
|
164
|
+
if (content.kind === 'complexContent') {
|
|
165
|
+
const base = ctx.lookupType(content.base);
|
|
166
|
+
current = base !== undefined && base.kind === 'complexType' ? base : undefined;
|
|
167
|
+
// A `restriction` restates the whole content model, so the base's particle
|
|
168
|
+
// is not inherited; only its attributes (and mixed/anyAttribute) are.
|
|
169
|
+
if (content.derivation === 'restriction') {
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (content.kind === 'simpleContent') {
|
|
174
|
+
// A simpleContent extension/restriction may still chain to a complex base
|
|
175
|
+
// that itself declares simpleContent (e.g. TaxedAmount extends Amount);
|
|
176
|
+
// follow it so the base's attributes are inherited. The chain ends once
|
|
177
|
+
// the base is a simple type or builtin (handled by ultimateSimpleBase).
|
|
178
|
+
const base = ctx.lookupType(content.base);
|
|
179
|
+
current = base !== undefined && base.kind === 'complexType' ? base : undefined;
|
|
180
|
+
if (content.derivation === 'restriction') {
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
current = undefined;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
for (const level of chain) {
|
|
189
|
+
mixed = mixed || level.mixed;
|
|
190
|
+
const content = level.content;
|
|
191
|
+
if (content.kind === 'simpleContent') {
|
|
192
|
+
simpleContentBase = ultimateSimpleBase(content.base, ctx, new Set());
|
|
193
|
+
}
|
|
194
|
+
else if (content.kind === 'particle') {
|
|
195
|
+
particles.push(content.particle);
|
|
196
|
+
}
|
|
197
|
+
else if (content.kind === 'complexContent' && content.particle !== undefined) {
|
|
198
|
+
particles.push(content.particle);
|
|
199
|
+
}
|
|
200
|
+
collectAttributes(content.attributes, ctx, acc, new Set());
|
|
201
|
+
}
|
|
202
|
+
// Attributes (and, for complexContent, mixed/anyAttribute) of levels *above*
|
|
203
|
+
// a restriction cut-off are still inherited: a restriction restates the
|
|
204
|
+
// content model but not necessarily every attribute/mixed/anyAttribute.
|
|
205
|
+
const restrictionRoot = chain[0];
|
|
206
|
+
if (restrictionRoot !== undefined &&
|
|
207
|
+
(restrictionRoot.content.kind === 'complexContent' || restrictionRoot.content.kind === 'simpleContent') &&
|
|
208
|
+
restrictionRoot.content.derivation === 'restriction') {
|
|
209
|
+
const rootContent = restrictionRoot.content;
|
|
210
|
+
const inheritedType = ctx.lookupType(rootContent.base);
|
|
211
|
+
if (inheritedType !== undefined && inheritedType.kind === 'complexType') {
|
|
212
|
+
const inherited = resolveContent(inheritedType, ctx);
|
|
213
|
+
for (const attribute of inherited.attributes) {
|
|
214
|
+
const key = qnameToString(attribute.name);
|
|
215
|
+
if (!acc.prohibited.has(key) && !acc.byName.has(key)) {
|
|
216
|
+
acc.byName.set(key, attribute);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (rootContent.kind === 'complexContent') {
|
|
220
|
+
// The derived type inherits `mixed` from the base unless it declares
|
|
221
|
+
// its own (XSD 1.0: `mixed` is not required to be restated).
|
|
222
|
+
if (!restrictionRoot.mixed) {
|
|
223
|
+
mixed = mixed || inherited.mixed;
|
|
224
|
+
}
|
|
225
|
+
// A restriction may narrow or drop `anyAttribute`; only fall back to
|
|
226
|
+
// the base's when the restriction itself declares none.
|
|
227
|
+
if (acc.anyAttribute === undefined && inherited.anyAttribute !== undefined) {
|
|
228
|
+
acc.anyAttribute = inherited.anyAttribute;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const expanded = particles.map((p) => expandGroups(p, ctx, new Set())).filter((p) => p !== undefined);
|
|
234
|
+
const particle = mergeParticles(expanded);
|
|
235
|
+
return {
|
|
236
|
+
...(particle !== undefined ? { particle } : {}),
|
|
237
|
+
attributes: [...acc.byName.values()],
|
|
238
|
+
mixed,
|
|
239
|
+
...(simpleContentBase !== undefined ? { simpleContentBase } : {}),
|
|
240
|
+
...(acc.anyAttribute !== undefined ? { anyAttribute: acc.anyAttribute } : {}),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { QName } from '../wsdl/qname.js';
|
|
2
|
+
import type { SchemaSet } from './schema-set.js';
|
|
3
|
+
/** How a sample fragment is generated. */
|
|
4
|
+
export interface GenerateOptions {
|
|
5
|
+
/** Emit `minOccurs="0"` elements (preceded by `<!--Optional:-->`) and optional attributes. */
|
|
6
|
+
readonly includeOptional: boolean;
|
|
7
|
+
/** Emit type-appropriate example values instead of the `?` placeholder. */
|
|
8
|
+
readonly sampleValues: boolean;
|
|
9
|
+
/** Emit `<!--type: xs:int-->` comments on simple-typed leaves. */
|
|
10
|
+
readonly typeComments: boolean;
|
|
11
|
+
/** Nesting depth of complex elements after which generation is cut with a comment. */
|
|
12
|
+
readonly maxDepth: number;
|
|
13
|
+
/** Choice strategy; only `'first'` exists today (all alternatives are shown, the first is canonical). */
|
|
14
|
+
readonly choice: 'first';
|
|
15
|
+
/** Indent per level; three spaces by default. */
|
|
16
|
+
readonly indent?: string;
|
|
17
|
+
/** Preferred prefix per namespace URI; unlisted namespaces get `ns1`, `ns2`, … in first-use order. */
|
|
18
|
+
readonly prefixes?: Readonly<Record<string, string>>;
|
|
19
|
+
}
|
|
20
|
+
/** The defaults every generator entry point starts from. */
|
|
21
|
+
export declare const DEFAULT_GENERATE_OPTIONS: GenerateOptions;
|
|
22
|
+
/** A generated XML fragment plus the namespaces its root declares. */
|
|
23
|
+
export interface GeneratedFragment {
|
|
24
|
+
/** The pretty-printed fragment; no XML declaration. */
|
|
25
|
+
readonly xml: string;
|
|
26
|
+
/** Prefix → namespace URI for every namespace the fragment actually uses. */
|
|
27
|
+
readonly namespaces: Readonly<Record<string, string>>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generates a sample XML fragment for a global element declaration, following
|
|
31
|
+
* the usual conventions: `?` placeholders (or typed sample values), comment
|
|
32
|
+
* markers for optional, repeating and choice particles, `xsi:type` for abstract
|
|
33
|
+
* types, and a recursion cut-off at {@link GenerateOptions.maxDepth}.
|
|
34
|
+
*
|
|
35
|
+
* Deterministic: identical inputs always produce byte-identical output.
|
|
36
|
+
*
|
|
37
|
+
* @throws {SchemaError} when `element` is not a global element in `schemaSet`
|
|
38
|
+
*/
|
|
39
|
+
export declare function generateElement(schemaSet: SchemaSet, element: QName, options?: Partial<GenerateOptions>): GeneratedFragment;
|
|
40
|
+
/**
|
|
41
|
+
* Generates a sample fragment for an element named `elementName` whose content
|
|
42
|
+
* is described by `type` — the shape rpc-style message parts take, where the
|
|
43
|
+
* part declares a type rather than an element.
|
|
44
|
+
*/
|
|
45
|
+
export declare function generateType(schemaSet: SchemaSet, elementName: QName, type: QName, options?: Partial<GenerateOptions>): GeneratedFragment;
|
|
46
|
+
/**
|
|
47
|
+
* Generates the wrapper for a SOAP-encoded array (rpc/encoded), carrying a
|
|
48
|
+
* `soapenc:arrayType` attribute and one `item` child:
|
|
49
|
+
* `<ns1:items soapenc:arrayType="xs:string[1]"><item>?</item></ns1:items>`.
|
|
50
|
+
*/
|
|
51
|
+
export declare function generateSoapEncArray(schemaSet: SchemaSet, elementName: QName, itemType: QName, options?: Partial<GenerateOptions>): GeneratedFragment;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { SchemaError } from '../errors.js';
|
|
2
|
+
import { NS } from '../xml/namespaces.js';
|
|
3
|
+
import { qnameToString } from '../wsdl/qname.js';
|
|
4
|
+
import { arrayTypeOf, firstConcreteDerived, resolveType } from './sample-types.js';
|
|
5
|
+
import { PLACEHOLDER, sampleValueFor, typeCommentFor } from './sample-values.js';
|
|
6
|
+
import { PrefixTable, comment, element as xmlElement, renderXml } from './xml-writer.js';
|
|
7
|
+
/** The defaults every generator entry point starts from. */
|
|
8
|
+
export const DEFAULT_GENERATE_OPTIONS = {
|
|
9
|
+
includeOptional: false,
|
|
10
|
+
sampleValues: false,
|
|
11
|
+
typeComments: false,
|
|
12
|
+
maxDepth: 5,
|
|
13
|
+
choice: 'first',
|
|
14
|
+
indent: ' ',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Fills `node` with the `soapenc:arrayType` attribute and a single `item`
|
|
18
|
+
* child. `itemType` is the array's item type; when it is unknown (a schema that
|
|
19
|
+
* declares no `wsdl:arrayType`) the array is reported as `xs:anyType[1]`.
|
|
20
|
+
*/
|
|
21
|
+
function fillSoapEncArray(ctx, node, itemType) {
|
|
22
|
+
const item = itemType ?? { namespaceUri: NS.XSD, localName: 'anyType' };
|
|
23
|
+
const label = ctx.prefixes.qualify(item, item.namespaceUri === NS.XSD ? 'xs' : undefined);
|
|
24
|
+
node.attributes.push({
|
|
25
|
+
name: `${ctx.prefixes.prefixFor(NS.SOAP11_ENC, 'soapenc')}:arrayType`,
|
|
26
|
+
// The declared bound is replaced by the number of items actually emitted.
|
|
27
|
+
value: `${label}[1]`,
|
|
28
|
+
});
|
|
29
|
+
const child = xmlElement('item');
|
|
30
|
+
child.text = itemType === undefined ? PLACEHOLDER : sampleValueFor(ctx.set, itemType, ctx.options);
|
|
31
|
+
node.children.push(child);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Interprets a `wsdl:arrayType` value such as `xs:string[]`. Only the local
|
|
35
|
+
* name survives in the schema model, so a built-in name is taken to be the XSD
|
|
36
|
+
* type of that name and anything else is left unresolved.
|
|
37
|
+
*/
|
|
38
|
+
function parseArrayItemType(ctx, rawArrayType) {
|
|
39
|
+
if (rawArrayType === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const withoutBounds = rawArrayType.replace(/\[[^\]]*\]\s*$/, '').trim();
|
|
43
|
+
const local = withoutBounds.includes(':') ? withoutBounds.slice(withoutBounds.indexOf(':') + 1) : withoutBounds;
|
|
44
|
+
const candidate = { namespaceUri: NS.XSD, localName: local };
|
|
45
|
+
return ctx.set.builtin(candidate) !== undefined ? candidate : undefined;
|
|
46
|
+
}
|
|
47
|
+
/** Sets a leaf's text (and optional type comment), honouring a `fixed`/`default` value. */
|
|
48
|
+
function fillLeaf(ctx, node, ref, forced) {
|
|
49
|
+
node.text = forced ?? sampleValueFor(ctx.set, ref, ctx.options);
|
|
50
|
+
if (ctx.options.typeComments) {
|
|
51
|
+
const text = typeCommentFor(ctx.set, ref);
|
|
52
|
+
if (text !== undefined) {
|
|
53
|
+
node.leadingComment = text;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function attributeValue(ctx, attribute) {
|
|
58
|
+
return (attribute.fixed ??
|
|
59
|
+
attribute.default ??
|
|
60
|
+
sampleValueFor(ctx.set, attribute.type ?? attribute.anonymousType, ctx.options));
|
|
61
|
+
}
|
|
62
|
+
/** Fills a complex-typed element: attributes, then simple content or child particles. */
|
|
63
|
+
function fillComplex(ctx, node, complexType, depth) {
|
|
64
|
+
let effective = complexType;
|
|
65
|
+
if (complexType.abstract) {
|
|
66
|
+
const concrete = firstConcreteDerived(ctx.set, complexType);
|
|
67
|
+
if (concrete?.name !== undefined) {
|
|
68
|
+
effective = concrete;
|
|
69
|
+
node.attributes.push({
|
|
70
|
+
name: `${ctx.prefixes.prefixFor(NS.XSI, 'xsi')}:type`,
|
|
71
|
+
value: ctx.prefixes.qualify(concrete.name),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const resolved = ctx.set.resolveContent(effective);
|
|
76
|
+
if (effective.content.kind === 'complexContent' && ctx.set.builtin(effective.content.base)?.soapEncArray === true) {
|
|
77
|
+
fillSoapEncArray(ctx, node, parseArrayItemType(ctx, arrayTypeOf(resolved.attributes)));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
for (const attribute of resolved.attributes) {
|
|
81
|
+
if (attribute.use === 'optional' && !ctx.options.includeOptional) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (attribute.name.namespaceUri === NS.SOAP11_ENC) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
node.attributes.push({ name: ctx.prefixes.qualify(attribute.name), value: attributeValue(ctx, attribute) });
|
|
88
|
+
}
|
|
89
|
+
if (resolved.simpleContentBase !== undefined) {
|
|
90
|
+
fillLeaf(ctx, node, resolved.simpleContentBase, undefined);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (resolved.particle !== undefined) {
|
|
94
|
+
emitParticle(ctx, resolved.particle, node.children, depth + 1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** The comment introducing a particle's occurrence constraints, if any. */
|
|
98
|
+
function occurrenceComment(occurs) {
|
|
99
|
+
if (occurs.max === 'unbounded' || occurs.max > 1) {
|
|
100
|
+
if (occurs.min === 0) {
|
|
101
|
+
return 'Zero or more repetitions:';
|
|
102
|
+
}
|
|
103
|
+
return occurs.min === 1 ? '1 or more repetitions:' : `${occurs.min} or more repetitions:`;
|
|
104
|
+
}
|
|
105
|
+
return occurs.min === 0 ? 'Optional:' : undefined;
|
|
106
|
+
}
|
|
107
|
+
/** Builds one element instance, or the recursion-cut comment when it is too deep. */
|
|
108
|
+
function emitElement(ctx, decl, depth) {
|
|
109
|
+
// An abstract head element is never valid on the wire: emit the first
|
|
110
|
+
// concrete member of its substitution group instead.
|
|
111
|
+
let effective = decl;
|
|
112
|
+
if (decl.abstract) {
|
|
113
|
+
const member = ctx.set.substitutionsFor(decl.name).find((candidate) => !candidate.abstract);
|
|
114
|
+
if (member !== undefined) {
|
|
115
|
+
effective = member;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const resolved = resolveType(ctx.set, effective.type ?? effective.anonymousType);
|
|
119
|
+
if ((resolved.kind === 'complex' || resolved.kind === 'soapencArray') && depth > ctx.options.maxDepth) {
|
|
120
|
+
const label = resolved.kind === 'complex' && resolved.type.name !== undefined
|
|
121
|
+
? ctx.prefixes.qualify(resolved.type.name)
|
|
122
|
+
: ctx.prefixes.qualify(effective.name);
|
|
123
|
+
return comment(`Recursion depth exceeded (${label})`);
|
|
124
|
+
}
|
|
125
|
+
const node = xmlElement(ctx.prefixes.qualify(effective.name));
|
|
126
|
+
const forced = effective.fixed ?? effective.default;
|
|
127
|
+
switch (resolved.kind) {
|
|
128
|
+
case 'complex':
|
|
129
|
+
fillComplex(ctx, node, resolved.type, depth);
|
|
130
|
+
break;
|
|
131
|
+
case 'soapencArray':
|
|
132
|
+
fillSoapEncArray(ctx, node, undefined);
|
|
133
|
+
break;
|
|
134
|
+
case 'anyType':
|
|
135
|
+
node.text = forced ?? PLACEHOLDER;
|
|
136
|
+
break;
|
|
137
|
+
default:
|
|
138
|
+
fillLeaf(ctx, node, resolved.ref, forced);
|
|
139
|
+
}
|
|
140
|
+
return node;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Emits one instance of an element particle, with its occurrence comment.
|
|
144
|
+
* `forceInclude` bypasses the `includeOptional` gate: it is set for a particle
|
|
145
|
+
* that is a direct alternative of a `choice` (every alternative is emitted
|
|
146
|
+
* regardless of options — the user picks one and deletes the rest).
|
|
147
|
+
*/
|
|
148
|
+
function emitElementParticle(ctx, decl, occurs, out, depth, forceInclude = false) {
|
|
149
|
+
if (!forceInclude && occurs.min === 0 && !ctx.options.includeOptional) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const node = emitElement(ctx, decl, depth);
|
|
153
|
+
// A cut-off element is replaced by its comment, so the occurrence comment
|
|
154
|
+
// that would introduce it is dropped rather than left dangling.
|
|
155
|
+
if (node.kind === 'element') {
|
|
156
|
+
const text = occurrenceComment(occurs);
|
|
157
|
+
if (text !== undefined) {
|
|
158
|
+
out.push(comment(text));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
out.push(node);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Emits one particle. `forceInclude` bypasses the `includeOptional` gate for
|
|
165
|
+
* this particle only (not its descendants): it is set when this particle is a
|
|
166
|
+
* direct alternative of an enclosing `choice`, since every alternative of a
|
|
167
|
+
* choice is emitted regardless of options — the optional/occurrence
|
|
168
|
+
* gating of a compositor otherwise applies only outside a choice.
|
|
169
|
+
*/
|
|
170
|
+
function emitParticle(ctx, particle, out, depth, forceInclude = false) {
|
|
171
|
+
switch (particle.kind) {
|
|
172
|
+
case 'localElement':
|
|
173
|
+
emitElementParticle(ctx, particle.decl, particle.occurs, out, depth, forceInclude);
|
|
174
|
+
return;
|
|
175
|
+
case 'elementRef': {
|
|
176
|
+
const decl = ctx.set.lookupElement(particle.ref);
|
|
177
|
+
if (decl !== undefined) {
|
|
178
|
+
emitElementParticle(ctx, decl, particle.occurs, out, depth, forceInclude);
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
case 'any':
|
|
183
|
+
out.push(comment('You may enter ANY elements at this point'));
|
|
184
|
+
return;
|
|
185
|
+
case 'groupRef': {
|
|
186
|
+
const group = ctx.set.lookupGroup(particle.ref);
|
|
187
|
+
if (group !== undefined) {
|
|
188
|
+
emitParticle(ctx, { ...group.particle, occurs: particle.occurs }, out, depth, forceInclude);
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
default: {
|
|
193
|
+
if (!forceInclude && particle.occurs.min === 0 && !ctx.options.includeOptional) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const text = occurrenceComment(particle.occurs);
|
|
197
|
+
if (text !== undefined) {
|
|
198
|
+
out.push(comment(text));
|
|
199
|
+
}
|
|
200
|
+
if (particle.kind === 'choice') {
|
|
201
|
+
// The alternatives are announced and then every one of them is emitted,
|
|
202
|
+
// leaving the user to delete the ones they do not want. Every direct
|
|
203
|
+
// alternative is emitted regardless of `includeOptional` (the user
|
|
204
|
+
// picks one); optionality/occurrence gating still applies to content
|
|
205
|
+
// nested *inside* an alternative, and to the choice itself relative to
|
|
206
|
+
// its own parent (handled by the gate above).
|
|
207
|
+
out.push(comment(`You have a CHOICE of the next ${particle.particles.length} items at this level`));
|
|
208
|
+
for (const child of particle.particles) {
|
|
209
|
+
emitParticle(ctx, child, out, depth, true);
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
for (const child of particle.particles) {
|
|
214
|
+
emitParticle(ctx, child, out, depth);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function createContext(set, options) {
|
|
220
|
+
const merged = { ...DEFAULT_GENERATE_OPTIONS, ...options };
|
|
221
|
+
return { set, options: merged, prefixes: new PrefixTable(merged.prefixes ?? {}) };
|
|
222
|
+
}
|
|
223
|
+
function finish(ctx, node) {
|
|
224
|
+
const namespaces = ctx.prefixes.namespaces();
|
|
225
|
+
// Namespace declarations live on the fragment's root; the request builder
|
|
226
|
+
// hoists them onto the envelope later.
|
|
227
|
+
node.attributes = [
|
|
228
|
+
...Object.entries(namespaces).map(([prefix, uri]) => ({ name: `xmlns:${prefix}`, value: uri })),
|
|
229
|
+
...node.attributes,
|
|
230
|
+
];
|
|
231
|
+
return { xml: renderXml(node, ctx.options.indent ?? ' '), namespaces };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Generates a sample XML fragment for a global element declaration, following
|
|
235
|
+
* the usual conventions: `?` placeholders (or typed sample values), comment
|
|
236
|
+
* markers for optional, repeating and choice particles, `xsi:type` for abstract
|
|
237
|
+
* types, and a recursion cut-off at {@link GenerateOptions.maxDepth}.
|
|
238
|
+
*
|
|
239
|
+
* Deterministic: identical inputs always produce byte-identical output.
|
|
240
|
+
*
|
|
241
|
+
* @throws {SchemaError} when `element` is not a global element in `schemaSet`
|
|
242
|
+
*/
|
|
243
|
+
export function generateElement(schemaSet, element, options) {
|
|
244
|
+
const decl = schemaSet.lookupElement(element);
|
|
245
|
+
if (decl === undefined) {
|
|
246
|
+
throw new SchemaError('schema/unknown-element', `No global element declaration for ${qnameToString(element)}`, {
|
|
247
|
+
details: { element: qnameToString(element) },
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
const ctx = createContext(schemaSet, options);
|
|
251
|
+
const node = emitElement(ctx, decl, 0);
|
|
252
|
+
if (node.kind !== 'element') {
|
|
253
|
+
throw new SchemaError('schema/unknown-element', `Could not generate a sample for ${qnameToString(element)}`);
|
|
254
|
+
}
|
|
255
|
+
return finish(ctx, node);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Generates a sample fragment for an element named `elementName` whose content
|
|
259
|
+
* is described by `type` — the shape rpc-style message parts take, where the
|
|
260
|
+
* part declares a type rather than an element.
|
|
261
|
+
*/
|
|
262
|
+
export function generateType(schemaSet, elementName, type, options) {
|
|
263
|
+
const ctx = createContext(schemaSet, options);
|
|
264
|
+
const node = xmlElement(ctx.prefixes.qualify(elementName));
|
|
265
|
+
const resolved = resolveType(ctx.set, type);
|
|
266
|
+
switch (resolved.kind) {
|
|
267
|
+
case 'complex':
|
|
268
|
+
fillComplex(ctx, node, resolved.type, 0);
|
|
269
|
+
break;
|
|
270
|
+
case 'soapencArray':
|
|
271
|
+
fillSoapEncArray(ctx, node, undefined);
|
|
272
|
+
break;
|
|
273
|
+
case 'anyType':
|
|
274
|
+
node.text = PLACEHOLDER;
|
|
275
|
+
break;
|
|
276
|
+
default:
|
|
277
|
+
fillLeaf(ctx, node, resolved.ref, undefined);
|
|
278
|
+
}
|
|
279
|
+
return finish(ctx, node);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Generates the wrapper for a SOAP-encoded array (rpc/encoded), carrying a
|
|
283
|
+
* `soapenc:arrayType` attribute and one `item` child:
|
|
284
|
+
* `<ns1:items soapenc:arrayType="xs:string[1]"><item>?</item></ns1:items>`.
|
|
285
|
+
*/
|
|
286
|
+
export function generateSoapEncArray(schemaSet, elementName, itemType, options) {
|
|
287
|
+
const ctx = createContext(schemaSet, options);
|
|
288
|
+
const node = xmlElement(ctx.prefixes.qualify(elementName));
|
|
289
|
+
fillSoapEncArray(ctx, node, itemType);
|
|
290
|
+
return finish(ctx, node);
|
|
291
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { QName } from '../wsdl/qname.js';
|
|
2
|
+
import type { ComplexType, ResolvedAttribute, SimpleType } from './model.js';
|
|
3
|
+
import type { SchemaSet } from './schema-set.js';
|
|
4
|
+
import type { SimpleTypeRef } from './sample-values.js';
|
|
5
|
+
/** The type a leaf or element resolves to, once names and built-ins are followed. */
|
|
6
|
+
export type ResolvedType = {
|
|
7
|
+
readonly kind: 'complex';
|
|
8
|
+
readonly type: ComplexType;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'simple';
|
|
11
|
+
readonly ref: SimpleTypeRef;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'anyType';
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'soapencArray';
|
|
16
|
+
};
|
|
17
|
+
export declare function resolveType(set: SchemaSet, ref: QName | ComplexType | SimpleType | undefined): ResolvedType;
|
|
18
|
+
/** The first concrete type derived from an abstract one, in schema declaration order. */
|
|
19
|
+
export declare function firstConcreteDerived(set: SchemaSet, abstractType: ComplexType): ComplexType | undefined;
|
|
20
|
+
/** The `wsdl:arrayType` recorded on a SOAP-encoded array type, e.g. `xs:string[]`. */
|
|
21
|
+
export declare function arrayTypeOf(attributes: readonly ResolvedAttribute[]): string | undefined;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { NS } from '../xml/namespaces.js';
|
|
2
|
+
import { qnameEquals, qnameToString } from '../wsdl/qname.js';
|
|
3
|
+
export function resolveType(set, ref) {
|
|
4
|
+
if (ref === undefined) {
|
|
5
|
+
return { kind: 'anyType' };
|
|
6
|
+
}
|
|
7
|
+
if ('kind' in ref) {
|
|
8
|
+
return ref.kind === 'complexType' ? { kind: 'complex', type: ref } : { kind: 'simple', ref };
|
|
9
|
+
}
|
|
10
|
+
const builtin = set.builtin(ref);
|
|
11
|
+
if (builtin !== undefined) {
|
|
12
|
+
if (builtin.soapEncArray === true) {
|
|
13
|
+
return { kind: 'soapencArray' };
|
|
14
|
+
}
|
|
15
|
+
return ref.namespaceUri === NS.XSD && (ref.localName === 'anyType' || ref.localName === 'anySimpleType')
|
|
16
|
+
? { kind: 'anyType' }
|
|
17
|
+
: { kind: 'simple', ref };
|
|
18
|
+
}
|
|
19
|
+
const type = set.lookupType(ref);
|
|
20
|
+
if (type === undefined) {
|
|
21
|
+
// A dangling type reference is already reported by the schema set; fall
|
|
22
|
+
// back to a bare placeholder rather than failing the whole fragment.
|
|
23
|
+
return { kind: 'anyType' };
|
|
24
|
+
}
|
|
25
|
+
return type.kind === 'complexType' ? { kind: 'complex', type } : { kind: 'simple', ref };
|
|
26
|
+
}
|
|
27
|
+
/** True when `candidate` reaches `base` through its complexContent derivation chain. */
|
|
28
|
+
function derivesFrom(set, candidate, base) {
|
|
29
|
+
const seen = new Set();
|
|
30
|
+
let current = candidate;
|
|
31
|
+
while (current !== undefined) {
|
|
32
|
+
if (current.content.kind !== 'complexContent' && current.content.kind !== 'simpleContent') {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const parent = current.content.base;
|
|
36
|
+
if (qnameEquals(parent, base)) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const key = qnameToString(parent);
|
|
40
|
+
if (seen.has(key)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
seen.add(key);
|
|
44
|
+
const next = set.lookupType(parent);
|
|
45
|
+
current = next !== undefined && next.kind === 'complexType' ? next : undefined;
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/** The first concrete type derived from an abstract one, in schema declaration order. */
|
|
50
|
+
export function firstConcreteDerived(set, abstractType) {
|
|
51
|
+
if (abstractType.name === undefined) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
for (const type of set.types.values()) {
|
|
55
|
+
if (type.kind === 'complexType' && !type.abstract && derivesFrom(set, type, abstractType.name)) {
|
|
56
|
+
return type;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
/** The `wsdl:arrayType` recorded on a SOAP-encoded array type, e.g. `xs:string[]`. */
|
|
62
|
+
export function arrayTypeOf(attributes) {
|
|
63
|
+
for (const attribute of attributes) {
|
|
64
|
+
if (attribute.arrayType !== undefined) {
|
|
65
|
+
return attribute.arrayType;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|