@cdklabs/cdk-ecs-codedeploy 0.0.438 → 0.0.440
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/.jsii +3 -3
- package/lib/api-canary/index.js +1 -1
- package/lib/ecs-appspec/index.js +1 -1
- package/lib/ecs-deployment/index.js +1 -1
- package/lib/ecs-patterns/application-load-balanced-codedeployed-fargate-service.js +1 -1
- package/node_modules/@aws-sdk/client-codedeploy/dist-cjs/endpoint/bdd.js +49 -0
- package/node_modules/@aws-sdk/client-codedeploy/dist-cjs/endpoint/endpointResolver.js +2 -2
- package/node_modules/@aws-sdk/client-codedeploy/dist-es/endpoint/bdd.js +46 -0
- package/node_modules/@aws-sdk/client-codedeploy/dist-es/endpoint/endpointResolver.js +3 -3
- package/node_modules/@aws-sdk/client-codedeploy/dist-es/waiters/waitForDeploymentSuccessful.js +1 -1
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/CodeDeploy.d.ts +1 -1
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/ts3.4/CodeDeploy.d.ts +1 -1
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/ts3.4/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/ts3.4/waiters/waitForDeploymentSuccessful.d.ts +9 -3
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/waiters/waitForDeploymentSuccessful.d.ts +4 -3
- package/node_modules/@aws-sdk/client-codedeploy/package.json +19 -19
- package/node_modules/@aws-sdk/core/dist-cjs/index.js +35 -17
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +18 -6
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +18 -11
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/emitWarningIfUnsupportedVersion.js +15 -6
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/setFeature.js +2 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +6 -4
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +6 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/SinglePassJsonShapeSerializer.js +2 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/query/QueryShapeSerializer.js +2 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/AwsRestXmlProtocol.js +0 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeSerializer.js +4 -2
- package/node_modules/@aws-sdk/core/dist-types/submodules/client/emitWarningIfUnsupportedVersion.d.ts +1 -2
- package/node_modules/@aws-sdk/core/dist-types/submodules/client/setFeature.d.ts +1 -1
- package/node_modules/@aws-sdk/core/package.json +7 -5
- package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-sdk-s3/LICENSE +201 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/README.md +4 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js +581 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/toStream.browser.js +11 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/toStream.js +7 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/bucket-endpoint-middleware.js +36 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/check-content-length-header.js +32 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/index.js +9 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/protocol/S3RestXmlProtocol.js +25 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/region-redirect-endpoint-middleware.js +41 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/region-redirect-middleware.js +42 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-expires-middleware.js +33 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/S3ExpressIdentityCache.js +39 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/S3ExpressIdentityCacheEntry.js +14 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/S3ExpressIdentityProviderImpl.js +49 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/SignatureV4S3Express.js +41 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/constants.js +13 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/functions/s3ExpressHttpSigningMiddleware.js +38 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/functions/s3ExpressMiddleware.js +41 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/functions/signS3Express.js +7 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/index.js +7 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/interfaces/S3ExpressIdentity.js +1 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/interfaces/S3ExpressIdentityProvider.js +1 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3Configuration.js +17 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/throw-200-exceptions.js +51 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/toStream.browser.js +8 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/toStream.js +4 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-es/validate-bucket-name.js +25 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/bucket-endpoint-middleware.d.ts +13 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/check-content-length-header.d.ts +16 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/index.d.ts +9 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/protocol/S3RestXmlProtocol.d.ts +20 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/region-redirect-endpoint-middleware.d.ts +10 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/region-redirect-middleware.d.ts +20 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-expires-middleware.d.ts +26 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/S3ExpressIdentityCache.d.ts +16 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/S3ExpressIdentityCacheEntry.d.ts +16 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/S3ExpressIdentityProviderImpl.d.ts +32 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/SignatureV4S3Express.d.ts +17 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/constants.d.ts +37 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/functions/s3ExpressHttpSigningMiddleware.d.ts +27 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/functions/s3ExpressMiddleware.d.ts +32 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/functions/signS3Express.d.ts +9 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/index.d.ts +9 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/interfaces/S3ExpressIdentity.d.ts +6 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/interfaces/S3ExpressIdentityProvider.d.ts +12 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3Configuration.d.ts +79 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/throw-200-exceptions.d.ts +21 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/toStream.browser.d.ts +4 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/toStream.d.ts +5 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/bucket-endpoint-middleware.d.ts +9 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/check-content-length-header.d.ts +13 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/index.d.ts +9 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/protocol/S3RestXmlProtocol.d.ts +15 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/region-redirect-endpoint-middleware.d.ts +6 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/region-redirect-middleware.d.ts +17 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-expires-middleware.d.ts +14 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/classes/S3ExpressIdentityCache.d.ts +14 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/classes/S3ExpressIdentityCacheEntry.d.ts +12 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/classes/S3ExpressIdentityProviderImpl.d.ts +31 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/classes/SignatureV4S3Express.d.ts +19 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/constants.d.ts +11 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/functions/s3ExpressHttpSigningMiddleware.d.ts +40 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/functions/s3ExpressMiddleware.d.ts +27 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/functions/signS3Express.d.ts +21 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/index.d.ts +17 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/interfaces/S3ExpressIdentity.d.ts +2 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3-express/interfaces/S3ExpressIdentityProvider.d.ts +8 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/s3Configuration.d.ts +33 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/throw-200-exceptions.d.ts +19 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/toStream.browser.d.ts +1 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/toStream.d.ts +2 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/ts3.4/validate-bucket-name.d.ts +13 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/validate-bucket-name.d.ts +14 -0
- package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +79 -0
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +5 -5
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/endpoint/bdd.js +100 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/endpoint/endpointResolver.js +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/endpoint/bdd.js +90 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/endpoint/endpointResolver.js +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/endpoint/bdd.js +80 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/endpoint/endpointResolver.js +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/endpoint/bdd.js +80 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/endpoint/endpointResolver.js +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/STSClient.js +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/auth/httpAuthSchemeProvider.js +87 -5
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/endpoint/bdd.js +150 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/endpoint/endpointResolver.js +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/models/errors.js +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.js +6 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.shared.js +7 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/cognito-identity/endpoint/bdd.js +97 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/cognito-identity/endpoint/endpointResolver.js +3 -3
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/endpoint/bdd.js +87 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/endpoint/endpointResolver.js +3 -3
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/endpoint/bdd.js +77 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/endpoint/endpointResolver.js +3 -3
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/endpoint/bdd.js +77 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/endpoint/endpointResolver.js +3 -3
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/STSClient.js +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/auth/httpAuthSchemeProvider.js +88 -4
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/endpoint/bdd.js +147 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/endpoint/endpointResolver.js +3 -3
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/models/errors.js +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.js +7 -1
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.shared.js +8 -1
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthSchemeProvider.d.ts +15 -7
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/errors.d.ts +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +3 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +10 -4
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +3 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.shared.d.ts +3 -1
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthSchemeProvider.d.ts +20 -9
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/endpoint/bdd.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/errors.d.ts +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +11 -5
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +35 -16
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +11 -5
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.shared.d.ts +8 -1
- package/node_modules/@aws-sdk/nested-clients/package.json +18 -17
- package/node_modules/@aws-sdk/region-config-resolver/package.json +2 -2
- package/node_modules/@aws-sdk/signature-v4-multi-region/LICENSE +201 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/README.md +32 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-cjs/index.js +121 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-es/SignatureV4MultiRegion.js +112 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-es/index.js +2 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-es/signature-v4-crt-container.js +3 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-types/SignatureV4MultiRegion.d.ts +35 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-types/index.d.ts +5 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-types/signature-v4-crt-container.d.ts +28 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-types/ts3.4/SignatureV4MultiRegion.d.ts +41 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-types/ts3.4/index.d.ts +2 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/dist-types/ts3.4/signature-v4-crt-container.d.ts +20 -0
- package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +61 -0
- package/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/@aws-sdk/util-arn-parser/LICENSE +201 -0
- package/node_modules/@aws-sdk/util-arn-parser/README.md +4 -0
- package/node_modules/@aws-sdk/util-arn-parser/dist-cjs/index.js +27 -0
- package/node_modules/@aws-sdk/util-arn-parser/dist-es/index.js +21 -0
- package/node_modules/@aws-sdk/util-arn-parser/dist-types/index.d.ts +32 -0
- package/node_modules/@aws-sdk/util-arn-parser/dist-types/ts3.4/index.d.ts +14 -0
- package/node_modules/@aws-sdk/util-arn-parser/package.json +55 -0
- package/node_modules/@aws-sdk/util-endpoints/package.json +2 -2
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-external/nodable_entities.js +336 -0
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-parser.js +26 -2
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-external/nodable_entities.js +332 -0
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +26 -2
- package/node_modules/@aws-sdk/xml-builder/dist-types/ts3.4/xml-external/nodable_entities.d.ts +66 -0
- package/node_modules/@aws-sdk/xml-builder/dist-types/xml-external/nodable_entities.d.ts +65 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/CHANGELOG.md +61 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/README.md +8 -28
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxbuilder.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxbuilder.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.cjs +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.d.cts +172 -6
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxparser.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/package.json +5 -4
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/fxp.d.ts +162 -3
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +2 -5
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js +15 -11
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +174 -245
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +2 -2
- package/node_modules/@aws-sdk/xml-builder/package.json +3 -2
- package/node_modules/@nodable/entities/README.md +41 -0
- package/node_modules/@nodable/entities/package.json +54 -0
- package/node_modules/@nodable/entities/src/EntityDecoder.js +543 -0
- package/node_modules/@nodable/entities/src/EntityEncoder.js +194 -0
- package/node_modules/@nodable/entities/src/entities.js +1177 -0
- package/node_modules/@nodable/entities/src/entityTries.js +49 -0
- package/node_modules/@nodable/entities/src/index.d.ts +264 -0
- package/node_modules/@nodable/entities/src/index.js +29 -0
- package/node_modules/@smithy/core/package.json +2 -2
- package/node_modules/@smithy/middleware-endpoint/package.json +3 -3
- package/node_modules/@smithy/middleware-retry/package.json +5 -5
- package/node_modules/@smithy/middleware-serde/package.json +2 -2
- package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +27 -16
- package/node_modules/@smithy/node-http-handler/dist-es/http2/ClientHttp2SessionRef.js +5 -0
- package/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +22 -16
- package/node_modules/@smithy/node-http-handler/dist-types/http2/ClientHttp2SessionRef.d.ts +4 -0
- package/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +2 -4
- package/node_modules/@smithy/node-http-handler/package.json +1 -1
- package/node_modules/@smithy/service-error-classification/dist-cjs/index.js +1 -0
- package/node_modules/@smithy/service-error-classification/dist-es/index.js +1 -0
- package/node_modules/@smithy/service-error-classification/package.json +1 -1
- package/node_modules/@smithy/smithy-client/package.json +4 -4
- package/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
- package/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
- package/node_modules/@smithy/util-retry/dist-cjs/index.js +27 -13
- package/node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js +5 -2
- package/node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js +2 -1
- package/node_modules/@smithy/util-retry/dist-es/StandardRetryStrategy.js +20 -10
- package/node_modules/@smithy/util-retry/dist-types/StandardRetryStrategy.d.ts +12 -4
- package/node_modules/@smithy/util-retry/package.json +3 -3
- package/node_modules/@smithy/util-stream/package.json +2 -2
- package/node_modules/@smithy/util-waiter/dist-cjs/index.js +59 -34
- package/node_modules/@smithy/util-waiter/dist-es/poller.js +61 -34
- package/node_modules/@smithy/util-waiter/dist-types/createWaiter.d.ts +1 -1
- package/node_modules/@smithy/util-waiter/dist-types/poller.d.ts +2 -1
- package/node_modules/@smithy/util-waiter/dist-types/waiter.d.ts +13 -13
- package/node_modules/@smithy/util-waiter/package.json +1 -1
- package/node_modules/fast-xml-builder/CHANGELOG.md +13 -0
- package/node_modules/fast-xml-builder/lib/fxb.cjs +1 -1
- package/node_modules/fast-xml-builder/lib/fxb.min.js +1 -1
- package/node_modules/fast-xml-builder/lib/fxb.min.js.map +1 -1
- package/node_modules/fast-xml-builder/package.json +1 -1
- package/node_modules/fast-xml-builder/src/fxb.js +7 -8
- package/node_modules/fast-xml-builder/src/orderedJs2Xml.js +6 -7
- package/node_modules/fast-xml-builder/src/util.js +16 -0
- package/package.json +3 -3
- package/node_modules/@aws-sdk/client-codedeploy/dist-cjs/endpoint/ruleset.js +0 -7
- package/node_modules/@aws-sdk/client-codedeploy/dist-es/endpoint/ruleset.js +0 -4
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/client-codedeploy/dist-types/ts3.4/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/endpoint/ruleset.js +0 -146
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/endpoint/ruleset.js +0 -133
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/endpoint/ruleset.js +0 -106
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/endpoint/ruleset.js +0 -106
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/endpoint/ruleset.js +0 -145
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/cognito-identity/endpoint/ruleset.js +0 -143
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/endpoint/ruleset.js +0 -130
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/endpoint/ruleset.js +0 -103
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/endpoint/ruleset.js +0 -103
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/endpoint/ruleset.js +0 -142
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/pem.d.cts +0 -148
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/pem.d.ts +0 -135
|
@@ -7,6 +7,8 @@ import DocTypeReader from './DocTypeReader.js';
|
|
|
7
7
|
import toNumber from "strnum";
|
|
8
8
|
import getIgnoreAttributesFn from "../ignoreAttributes.js";
|
|
9
9
|
import { Expression, Matcher } from 'path-expression-matcher';
|
|
10
|
+
import { ExpressionSet } from 'path-expression-matcher';
|
|
11
|
+
import { EntityDecoder, XML, CURRENCY, COMMON_HTML } from '@nodable/entities';
|
|
10
12
|
|
|
11
13
|
// const regx =
|
|
12
14
|
// '<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)'
|
|
@@ -67,36 +69,10 @@ function extractNamespace(rawTagName) {
|
|
|
67
69
|
}
|
|
68
70
|
|
|
69
71
|
export default class OrderedObjParser {
|
|
70
|
-
constructor(options) {
|
|
72
|
+
constructor(options, externalEntities) {
|
|
71
73
|
this.options = options;
|
|
72
74
|
this.currentNode = null;
|
|
73
75
|
this.tagsNodeStack = [];
|
|
74
|
-
this.docTypeEntities = {};
|
|
75
|
-
this.lastEntities = {
|
|
76
|
-
"apos": { regex: /&(apos|#39|#x27);/g, val: "'" },
|
|
77
|
-
"gt": { regex: /&(gt|#62|#x3E);/g, val: ">" },
|
|
78
|
-
"lt": { regex: /&(lt|#60|#x3C);/g, val: "<" },
|
|
79
|
-
"quot": { regex: /&(quot|#34|#x22);/g, val: "\"" },
|
|
80
|
-
};
|
|
81
|
-
this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: "&" };
|
|
82
|
-
this.htmlEntities = {
|
|
83
|
-
"space": { regex: /&(nbsp|#160);/g, val: " " },
|
|
84
|
-
// "lt" : { regex: /&(lt|#60);/g, val: "<" },
|
|
85
|
-
// "gt" : { regex: /&(gt|#62);/g, val: ">" },
|
|
86
|
-
// "amp" : { regex: /&(amp|#38);/g, val: "&" },
|
|
87
|
-
// "quot" : { regex: /&(quot|#34);/g, val: "\"" },
|
|
88
|
-
// "apos" : { regex: /&(apos|#39);/g, val: "'" },
|
|
89
|
-
"cent": { regex: /&(cent|#162);/g, val: "¢" },
|
|
90
|
-
"pound": { regex: /&(pound|#163);/g, val: "£" },
|
|
91
|
-
"yen": { regex: /&(yen|#165);/g, val: "¥" },
|
|
92
|
-
"euro": { regex: /&(euro|#8364);/g, val: "€" },
|
|
93
|
-
"copyright": { regex: /&(copy|#169);/g, val: "©" },
|
|
94
|
-
"reg": { regex: /&(reg|#174);/g, val: "®" },
|
|
95
|
-
"inr": { regex: /&(inr|#8377);/g, val: "₹" },
|
|
96
|
-
"num_dec": { regex: /&#([0-9]{1,7});/g, val: (_, str) => fromCodePoint(str, 10, "&#") },
|
|
97
|
-
"num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => fromCodePoint(str, 16, "&#x") },
|
|
98
|
-
};
|
|
99
|
-
this.addExternalEntities = addExternalEntities;
|
|
100
76
|
this.parseXml = parseXml;
|
|
101
77
|
this.parseTextData = parseTextData;
|
|
102
78
|
this.resolveNameSpace = resolveNameSpace;
|
|
@@ -109,6 +85,23 @@ export default class OrderedObjParser {
|
|
|
109
85
|
this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)
|
|
110
86
|
this.entityExpansionCount = 0;
|
|
111
87
|
this.currentExpandedLength = 0;
|
|
88
|
+
let namedEntities = { ...XML };
|
|
89
|
+
if (this.options.entityDecoder) {
|
|
90
|
+
this.entityDecoder = this.options.entityDecoder
|
|
91
|
+
} else {
|
|
92
|
+
if (typeof this.options.htmlEntities === "object") namedEntities = this.options.htmlEntities;
|
|
93
|
+
else if (this.options.htmlEntities === true) namedEntities = { ...COMMON_HTML, ...CURRENCY };
|
|
94
|
+
this.entityDecoder = new EntityDecoder({
|
|
95
|
+
namedEntities: { ...namedEntities, ...externalEntities },
|
|
96
|
+
numericAllowed: this.options.htmlEntities,
|
|
97
|
+
limit: {
|
|
98
|
+
maxTotalExpansions: this.options.processEntities.maxTotalExpansions,
|
|
99
|
+
maxExpandedLength: this.options.processEntities.maxExpandedLength,
|
|
100
|
+
applyLimitsTo: this.options.processEntities.appliesTo,
|
|
101
|
+
}
|
|
102
|
+
//postCheck: resolved => resolved
|
|
103
|
+
});
|
|
104
|
+
}
|
|
112
105
|
|
|
113
106
|
// Initialize path matcher for path-expression-matcher
|
|
114
107
|
this.matcher = new Matcher();
|
|
@@ -121,34 +114,25 @@ export default class OrderedObjParser {
|
|
|
121
114
|
this.isCurrentNodeStopNode = false;
|
|
122
115
|
|
|
123
116
|
// Pre-compile stopNodes expressions
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
117
|
+
this.stopNodeExpressionsSet = new ExpressionSet();
|
|
118
|
+
const stopNodesOpts = this.options.stopNodes;
|
|
119
|
+
if (stopNodesOpts && stopNodesOpts.length > 0) {
|
|
120
|
+
for (let i = 0; i < stopNodesOpts.length; i++) {
|
|
121
|
+
const stopNodeExp = stopNodesOpts[i];
|
|
128
122
|
if (typeof stopNodeExp === 'string') {
|
|
129
123
|
// Convert string to Expression object
|
|
130
|
-
this.
|
|
124
|
+
this.stopNodeExpressionsSet.add(new Expression(stopNodeExp));
|
|
131
125
|
} else if (stopNodeExp instanceof Expression) {
|
|
132
126
|
// Already an Expression object
|
|
133
|
-
this.
|
|
127
|
+
this.stopNodeExpressionsSet.add(stopNodeExp);
|
|
134
128
|
}
|
|
135
129
|
}
|
|
130
|
+
this.stopNodeExpressionsSet.seal();
|
|
136
131
|
}
|
|
137
132
|
}
|
|
138
133
|
|
|
139
134
|
}
|
|
140
135
|
|
|
141
|
-
function addExternalEntities(externalEntities) {
|
|
142
|
-
const entKeys = Object.keys(externalEntities);
|
|
143
|
-
for (let i = 0; i < entKeys.length; i++) {
|
|
144
|
-
const ent = entKeys[i];
|
|
145
|
-
const escaped = ent.replace(/[.\-+*:]/g, '\\.');
|
|
146
|
-
this.lastEntities[ent] = {
|
|
147
|
-
regex: new RegExp("&" + escaped + ";", "g"),
|
|
148
|
-
val: externalEntities[ent]
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
136
|
|
|
153
137
|
/**
|
|
154
138
|
* @param {string} val
|
|
@@ -160,28 +144,29 @@ function addExternalEntities(externalEntities) {
|
|
|
160
144
|
* @param {boolean} escapeEntities
|
|
161
145
|
*/
|
|
162
146
|
function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {
|
|
147
|
+
const options = this.options;
|
|
163
148
|
if (val !== undefined) {
|
|
164
|
-
if (
|
|
149
|
+
if (options.trimValues && !dontTrim) {
|
|
165
150
|
val = val.trim();
|
|
166
151
|
}
|
|
167
152
|
if (val.length > 0) {
|
|
168
153
|
if (!escapeEntities) val = this.replaceEntitiesValue(val, tagName, jPath);
|
|
169
154
|
|
|
170
155
|
// Pass jPath string or matcher based on options.jPath setting
|
|
171
|
-
const jPathOrMatcher =
|
|
172
|
-
const newval =
|
|
156
|
+
const jPathOrMatcher = options.jPath ? jPath.toString() : jPath;
|
|
157
|
+
const newval = options.tagValueProcessor(tagName, val, jPathOrMatcher, hasAttributes, isLeafNode);
|
|
173
158
|
if (newval === null || newval === undefined) {
|
|
174
159
|
//don't parse
|
|
175
160
|
return val;
|
|
176
161
|
} else if (typeof newval !== typeof val || newval !== val) {
|
|
177
162
|
//overwrite
|
|
178
163
|
return newval;
|
|
179
|
-
} else if (
|
|
180
|
-
return parseValue(val,
|
|
164
|
+
} else if (options.trimValues) {
|
|
165
|
+
return parseValue(val, options.parseTagValue, options.numberParseOptions);
|
|
181
166
|
} else {
|
|
182
167
|
const trimmedVal = val.trim();
|
|
183
168
|
if (trimmedVal === val) {
|
|
184
|
-
return parseValue(val,
|
|
169
|
+
return parseValue(val, options.parseTagValue, options.numberParseOptions);
|
|
185
170
|
} else {
|
|
186
171
|
return val;
|
|
187
172
|
}
|
|
@@ -208,8 +193,9 @@ function resolveNameSpace(tagname) {
|
|
|
208
193
|
//const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm");
|
|
209
194
|
const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])([\\s\\S]*?)\\3)?', 'gm');
|
|
210
195
|
|
|
211
|
-
function buildAttributesMap(attrStr, jPath, tagName) {
|
|
212
|
-
|
|
196
|
+
function buildAttributesMap(attrStr, jPath, tagName, force = false) {
|
|
197
|
+
const options = this.options;
|
|
198
|
+
if (force === true || (options.ignoreAttributes !== true && typeof attrStr === 'string')) {
|
|
213
199
|
// attrStr = attrStr.replace(/\r?\n/g, ' ');
|
|
214
200
|
//attrStr = attrStr || attrStr.trim();
|
|
215
201
|
|
|
@@ -217,89 +203,80 @@ function buildAttributesMap(attrStr, jPath, tagName) {
|
|
|
217
203
|
const len = matches.length; //don't make it inline
|
|
218
204
|
const attrs = {};
|
|
219
205
|
|
|
220
|
-
//
|
|
221
|
-
//
|
|
206
|
+
// Pre-process values once: trim + entity replacement
|
|
207
|
+
// Reused in both matcher update and second pass
|
|
208
|
+
const processedVals = new Array(len);
|
|
209
|
+
let hasRawAttrs = false;
|
|
222
210
|
const rawAttrsForMatcher = {};
|
|
211
|
+
|
|
223
212
|
for (let i = 0; i < len; i++) {
|
|
224
213
|
const attrName = this.resolveNameSpace(matches[i][1]);
|
|
225
214
|
const oldVal = matches[i][4];
|
|
226
215
|
|
|
227
216
|
if (attrName.length && oldVal !== undefined) {
|
|
228
|
-
let
|
|
229
|
-
if (
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
rawAttrsForMatcher[attrName] =
|
|
217
|
+
let val = oldVal;
|
|
218
|
+
if (options.trimValues) val = val.trim();
|
|
219
|
+
val = this.replaceEntitiesValue(val, tagName, this.readonlyMatcher);
|
|
220
|
+
processedVals[i] = val;
|
|
221
|
+
|
|
222
|
+
rawAttrsForMatcher[attrName] = val;
|
|
223
|
+
hasRawAttrs = true;
|
|
234
224
|
}
|
|
235
225
|
}
|
|
236
226
|
|
|
237
|
-
// Update matcher
|
|
238
|
-
if (
|
|
227
|
+
// Update matcher ONCE before second pass, if applicable
|
|
228
|
+
if (hasRawAttrs && typeof jPath === 'object' && jPath.updateCurrent) {
|
|
239
229
|
jPath.updateCurrent(rawAttrsForMatcher);
|
|
240
230
|
}
|
|
241
231
|
|
|
242
|
-
//
|
|
232
|
+
// Hoist toString() once — path doesn't change during attribute processing
|
|
233
|
+
const jPathStr = options.jPath ? jPath.toString() : this.readonlyMatcher;
|
|
234
|
+
|
|
235
|
+
// Second pass: apply processors, build final attrs
|
|
236
|
+
let hasAttrs = false;
|
|
243
237
|
for (let i = 0; i < len; i++) {
|
|
244
238
|
const attrName = this.resolveNameSpace(matches[i][1]);
|
|
245
239
|
|
|
246
|
-
|
|
247
|
-
const jPathStr = this.options.jPath ? jPath.toString() : this.readonlyMatcher;
|
|
248
|
-
if (this.ignoreAttributesFn(attrName, jPathStr)) {
|
|
249
|
-
continue
|
|
250
|
-
}
|
|
240
|
+
if (this.ignoreAttributesFn(attrName, jPathStr)) continue;
|
|
251
241
|
|
|
252
|
-
let
|
|
253
|
-
let aName = this.options.attributeNamePrefix + attrName;
|
|
242
|
+
let aName = options.attributeNamePrefix + attrName;
|
|
254
243
|
|
|
255
244
|
if (attrName.length) {
|
|
256
|
-
if (
|
|
257
|
-
aName =
|
|
245
|
+
if (options.transformAttributeName) {
|
|
246
|
+
aName = options.transformAttributeName(aName);
|
|
258
247
|
}
|
|
259
|
-
|
|
260
|
-
aName = sanitizeName(aName, this.options);
|
|
248
|
+
aName = sanitizeName(aName, options);
|
|
261
249
|
|
|
262
|
-
if (
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
oldVal = this.replaceEntitiesValue(oldVal, tagName, this.readonlyMatcher);
|
|
250
|
+
if (matches[i][4] !== undefined) {
|
|
251
|
+
// Reuse already-processed value — no double entity replacement
|
|
252
|
+
const oldVal = processedVals[i];
|
|
267
253
|
|
|
268
|
-
|
|
269
|
-
const jPathOrMatcher = this.options.jPath ? jPath.toString() : this.readonlyMatcher;
|
|
270
|
-
const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPathOrMatcher);
|
|
254
|
+
const newVal = options.attributeValueProcessor(attrName, oldVal, jPathStr);
|
|
271
255
|
if (newVal === null || newVal === undefined) {
|
|
272
|
-
//don't parse
|
|
273
256
|
attrs[aName] = oldVal;
|
|
274
257
|
} else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {
|
|
275
|
-
//overwrite
|
|
276
258
|
attrs[aName] = newVal;
|
|
277
259
|
} else {
|
|
278
|
-
|
|
279
|
-
attrs[aName] = parseValue(
|
|
280
|
-
oldVal,
|
|
281
|
-
this.options.parseAttributeValue,
|
|
282
|
-
this.options.numberParseOptions
|
|
283
|
-
);
|
|
260
|
+
attrs[aName] = parseValue(oldVal, options.parseAttributeValue, options.numberParseOptions);
|
|
284
261
|
}
|
|
285
|
-
|
|
262
|
+
hasAttrs = true;
|
|
263
|
+
} else if (options.allowBooleanAttributes) {
|
|
286
264
|
attrs[aName] = true;
|
|
265
|
+
hasAttrs = true;
|
|
287
266
|
}
|
|
288
267
|
}
|
|
289
268
|
}
|
|
290
269
|
|
|
291
|
-
if (!
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
if (this.options.attributesGroupName) {
|
|
270
|
+
if (!hasAttrs) return;
|
|
271
|
+
|
|
272
|
+
if (options.attributesGroupName && !options.preserveOrder) {
|
|
295
273
|
const attrCollection = {};
|
|
296
|
-
attrCollection[
|
|
274
|
+
attrCollection[options.attributesGroupName] = attrs;
|
|
297
275
|
return attrCollection;
|
|
298
276
|
}
|
|
299
|
-
return attrs
|
|
277
|
+
return attrs;
|
|
300
278
|
}
|
|
301
279
|
}
|
|
302
|
-
|
|
303
280
|
const parseXml = function (xmlData) {
|
|
304
281
|
xmlData = xmlData.replace(/\r\n?/g, "\n"); //TODO: remove this line
|
|
305
282
|
const xmlObj = new xmlNode('!xml');
|
|
@@ -308,29 +285,32 @@ const parseXml = function (xmlData) {
|
|
|
308
285
|
|
|
309
286
|
// Reset matcher for new document
|
|
310
287
|
this.matcher.reset();
|
|
288
|
+
this.entityDecoder.reset();
|
|
311
289
|
|
|
312
290
|
// Reset entity expansion counters for this document
|
|
313
291
|
this.entityExpansionCount = 0;
|
|
314
292
|
this.currentExpandedLength = 0;
|
|
315
|
-
|
|
316
|
-
const docTypeReader = new DocTypeReader(
|
|
317
|
-
|
|
293
|
+
const options = this.options;
|
|
294
|
+
const docTypeReader = new DocTypeReader(options.processEntities);
|
|
295
|
+
const xmlLen = xmlData.length;
|
|
296
|
+
for (let i = 0; i < xmlLen; i++) {//for each char in XML data
|
|
318
297
|
const ch = xmlData[i];
|
|
319
298
|
if (ch === '<') {
|
|
320
299
|
// const nextIndex = i+1;
|
|
321
300
|
// const _2ndChar = xmlData[nextIndex];
|
|
322
|
-
|
|
301
|
+
const c1 = xmlData.charCodeAt(i + 1);
|
|
302
|
+
if (c1 === 47) {//Closing Tag '/'
|
|
323
303
|
const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.")
|
|
324
304
|
let tagName = xmlData.substring(i + 2, closeIndex).trim();
|
|
325
305
|
|
|
326
|
-
if (
|
|
306
|
+
if (options.removeNSPrefix) {
|
|
327
307
|
const colonIndex = tagName.indexOf(":");
|
|
328
308
|
if (colonIndex !== -1) {
|
|
329
309
|
tagName = tagName.substr(colonIndex + 1);
|
|
330
310
|
}
|
|
331
311
|
}
|
|
332
312
|
|
|
333
|
-
tagName = transformTagName(
|
|
313
|
+
tagName = transformTagName(options.transformTagName, tagName, "", options).tagName;
|
|
334
314
|
|
|
335
315
|
if (currentNode) {
|
|
336
316
|
textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);
|
|
@@ -338,10 +318,10 @@ const parseXml = function (xmlData) {
|
|
|
338
318
|
|
|
339
319
|
//check if last tag of nested tag was unpaired tag
|
|
340
320
|
const lastTagName = this.matcher.getCurrentTag();
|
|
341
|
-
if (tagName &&
|
|
321
|
+
if (tagName && options.unpairedTagsSet.has(tagName)) {
|
|
342
322
|
throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);
|
|
343
323
|
}
|
|
344
|
-
if (lastTagName &&
|
|
324
|
+
if (lastTagName && options.unpairedTagsSet.has(lastTagName)) {
|
|
345
325
|
// Pop the unpaired tag
|
|
346
326
|
this.matcher.pop();
|
|
347
327
|
this.tagsNodeStack.pop();
|
|
@@ -353,42 +333,51 @@ const parseXml = function (xmlData) {
|
|
|
353
333
|
currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope
|
|
354
334
|
textData = "";
|
|
355
335
|
i = closeIndex;
|
|
356
|
-
} else if (
|
|
336
|
+
} else if (c1 === 63) { //'?'
|
|
357
337
|
|
|
358
338
|
let tagData = readTagExp(xmlData, i, false, "?>");
|
|
359
339
|
if (!tagData) throw new Error("Pi Tag is not closed.");
|
|
360
340
|
|
|
361
341
|
textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);
|
|
362
|
-
|
|
342
|
+
const attsMap = this.buildAttributesMap(tagData.tagExp, this.matcher, tagData.tagName, true);
|
|
343
|
+
if (attsMap) {
|
|
344
|
+
const ver = attsMap[this.options.attributeNamePrefix + "version"];
|
|
345
|
+
this.entityDecoder.setXmlVersion(Number(ver) || 1.0);
|
|
346
|
+
}
|
|
347
|
+
if ((options.ignoreDeclaration && tagData.tagName === "?xml") || options.ignorePiTags) {
|
|
363
348
|
//do nothing
|
|
364
349
|
} else {
|
|
365
350
|
|
|
366
351
|
const childNode = new xmlNode(tagData.tagName);
|
|
367
|
-
childNode.add(
|
|
352
|
+
childNode.add(options.textNodeName, "");
|
|
368
353
|
|
|
369
|
-
if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {
|
|
370
|
-
childNode[":@"] =
|
|
354
|
+
if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent && options.ignoreAttributes !== true) {
|
|
355
|
+
childNode[":@"] = attsMap
|
|
371
356
|
}
|
|
372
357
|
this.addChild(currentNode, childNode, this.readonlyMatcher, i);
|
|
373
358
|
}
|
|
374
359
|
|
|
375
360
|
|
|
376
361
|
i = tagData.closeIndex + 1;
|
|
377
|
-
} else if (
|
|
362
|
+
} else if (c1 === 33
|
|
363
|
+
&& xmlData.charCodeAt(i + 2) === 45
|
|
364
|
+
&& xmlData.charCodeAt(i + 3) === 45) { //'!--'
|
|
378
365
|
const endIndex = findClosingIndex(xmlData, "-->", i + 4, "Comment is not closed.")
|
|
379
|
-
if (
|
|
366
|
+
if (options.commentPropName) {
|
|
380
367
|
const comment = xmlData.substring(i + 4, endIndex - 2);
|
|
381
368
|
|
|
382
369
|
textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);
|
|
383
370
|
|
|
384
|
-
currentNode.add(
|
|
371
|
+
currentNode.add(options.commentPropName, [{ [options.textNodeName]: comment }]);
|
|
385
372
|
}
|
|
386
373
|
i = endIndex;
|
|
387
|
-
} else if (
|
|
374
|
+
} else if (c1 === 33
|
|
375
|
+
&& xmlData.charCodeAt(i + 2) === 68) { //'!D'
|
|
388
376
|
const result = docTypeReader.readDocType(xmlData, i);
|
|
389
|
-
this.
|
|
377
|
+
this.entityDecoder.addInputEntities(result.entities);
|
|
390
378
|
i = result.i;
|
|
391
|
-
} else if (
|
|
379
|
+
} else if (c1 === 33
|
|
380
|
+
&& xmlData.charCodeAt(i + 2) === 91) { // '!['
|
|
392
381
|
const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2;
|
|
393
382
|
const tagExp = xmlData.substring(i + 9, closeIndex);
|
|
394
383
|
|
|
@@ -398,20 +387,20 @@ const parseXml = function (xmlData) {
|
|
|
398
387
|
if (val == undefined) val = "";
|
|
399
388
|
|
|
400
389
|
//cdata should be set even if it is 0 length string
|
|
401
|
-
if (
|
|
402
|
-
currentNode.add(
|
|
390
|
+
if (options.cdataPropName) {
|
|
391
|
+
currentNode.add(options.cdataPropName, [{ [options.textNodeName]: tagExp }]);
|
|
403
392
|
} else {
|
|
404
|
-
currentNode.add(
|
|
393
|
+
currentNode.add(options.textNodeName, val);
|
|
405
394
|
}
|
|
406
395
|
|
|
407
396
|
i = closeIndex + 2;
|
|
408
397
|
} else {//Opening tag
|
|
409
|
-
let result = readTagExp(xmlData, i,
|
|
398
|
+
let result = readTagExp(xmlData, i, options.removeNSPrefix);
|
|
410
399
|
|
|
411
400
|
// Safety check: readTagExp can return undefined
|
|
412
401
|
if (!result) {
|
|
413
402
|
// Log context for debugging
|
|
414
|
-
const context = xmlData.substring(Math.max(0, i - 50), Math.min(
|
|
403
|
+
const context = xmlData.substring(Math.max(0, i - 50), Math.min(xmlLen, i + 50));
|
|
415
404
|
throw new Error(`readTagExp returned undefined at position ${i}. Context: "${context}"`);
|
|
416
405
|
}
|
|
417
406
|
|
|
@@ -421,13 +410,13 @@ const parseXml = function (xmlData) {
|
|
|
421
410
|
let attrExpPresent = result.attrExpPresent;
|
|
422
411
|
let closeIndex = result.closeIndex;
|
|
423
412
|
|
|
424
|
-
({ tagName, tagExp } = transformTagName(
|
|
413
|
+
({ tagName, tagExp } = transformTagName(options.transformTagName, tagName, tagExp, options));
|
|
425
414
|
|
|
426
|
-
if (
|
|
427
|
-
(tagName ===
|
|
428
|
-
|| tagName ===
|
|
429
|
-
|| tagName ===
|
|
430
|
-
|| tagName ===
|
|
415
|
+
if (options.strictReservedNames &&
|
|
416
|
+
(tagName === options.commentPropName
|
|
417
|
+
|| tagName === options.cdataPropName
|
|
418
|
+
|| tagName === options.textNodeName
|
|
419
|
+
|| tagName === options.attributesGroupName
|
|
431
420
|
)) {
|
|
432
421
|
throw new Error(`Invalid tag name: ${tagName}`);
|
|
433
422
|
}
|
|
@@ -442,7 +431,7 @@ const parseXml = function (xmlData) {
|
|
|
442
431
|
|
|
443
432
|
//check if last tag was unpaired tag
|
|
444
433
|
const lastTag = currentNode;
|
|
445
|
-
if (lastTag &&
|
|
434
|
+
if (lastTag && options.unpairedTagsSet.has(lastTag.tagname)) {
|
|
446
435
|
currentNode = this.tagsNodeStack.pop();
|
|
447
436
|
this.matcher.pop();
|
|
448
437
|
}
|
|
@@ -484,13 +473,14 @@ const parseXml = function (xmlData) {
|
|
|
484
473
|
|
|
485
474
|
if (prefixedAttrs) {
|
|
486
475
|
// Extract raw attributes (without prefix) for our use
|
|
487
|
-
|
|
476
|
+
//TODO: seems a performance overhead
|
|
477
|
+
rawAttrs = extractRawAttributes(prefixedAttrs, options);
|
|
488
478
|
}
|
|
489
479
|
}
|
|
490
480
|
|
|
491
481
|
// Now check if this is a stop node (after attributes are set)
|
|
492
482
|
if (tagName !== xmlObj.tagname) {
|
|
493
|
-
this.isCurrentNodeStopNode = this.isItStopNode(
|
|
483
|
+
this.isCurrentNodeStopNode = this.isItStopNode();
|
|
494
484
|
}
|
|
495
485
|
|
|
496
486
|
const startIndex = i;
|
|
@@ -502,7 +492,7 @@ const parseXml = function (xmlData) {
|
|
|
502
492
|
i = result.closeIndex;
|
|
503
493
|
}
|
|
504
494
|
//unpaired tag
|
|
505
|
-
else if (
|
|
495
|
+
else if (options.unpairedTagsSet.has(tagName)) {
|
|
506
496
|
i = result.closeIndex;
|
|
507
497
|
}
|
|
508
498
|
//normal tag
|
|
@@ -521,7 +511,7 @@ const parseXml = function (xmlData) {
|
|
|
521
511
|
}
|
|
522
512
|
|
|
523
513
|
// For stop nodes, store raw content as-is without any processing
|
|
524
|
-
childNode.add(
|
|
514
|
+
childNode.add(options.textNodeName, tagContent);
|
|
525
515
|
|
|
526
516
|
this.matcher.pop(); // Pop the stop node tag
|
|
527
517
|
this.isCurrentNodeStopNode = false; // Reset flag
|
|
@@ -530,7 +520,7 @@ const parseXml = function (xmlData) {
|
|
|
530
520
|
} else {
|
|
531
521
|
//selfClosing tag
|
|
532
522
|
if (isSelfClosing) {
|
|
533
|
-
({ tagName, tagExp } = transformTagName(
|
|
523
|
+
({ tagName, tagExp } = transformTagName(options.transformTagName, tagName, tagExp, options));
|
|
534
524
|
|
|
535
525
|
const childNode = new xmlNode(tagName);
|
|
536
526
|
if (prefixedAttrs) {
|
|
@@ -540,7 +530,7 @@ const parseXml = function (xmlData) {
|
|
|
540
530
|
this.matcher.pop(); // Pop self-closing tag
|
|
541
531
|
this.isCurrentNodeStopNode = false; // Reset flag
|
|
542
532
|
}
|
|
543
|
-
else if (
|
|
533
|
+
else if (options.unpairedTagsSet.has(tagName)) {//unpaired tag
|
|
544
534
|
const childNode = new xmlNode(tagName);
|
|
545
535
|
if (prefixedAttrs) {
|
|
546
536
|
childNode[":@"] = prefixedAttrs;
|
|
@@ -555,7 +545,7 @@ const parseXml = function (xmlData) {
|
|
|
555
545
|
//opening tag
|
|
556
546
|
else {
|
|
557
547
|
const childNode = new xmlNode(tagName);
|
|
558
|
-
if (this.tagsNodeStack.length >
|
|
548
|
+
if (this.tagsNodeStack.length > options.maxNestedTags) {
|
|
559
549
|
throw new Error("Maximum nested tags exceeded");
|
|
560
550
|
}
|
|
561
551
|
this.tagsNodeStack.push(currentNode);
|
|
@@ -626,79 +616,7 @@ function replaceEntitiesValue(val, tagName, jPath) {
|
|
|
626
616
|
}
|
|
627
617
|
}
|
|
628
618
|
|
|
629
|
-
|
|
630
|
-
for (const entityName of Object.keys(this.docTypeEntities)) {
|
|
631
|
-
const entity = this.docTypeEntities[entityName];
|
|
632
|
-
const matches = val.match(entity.regx);
|
|
633
|
-
|
|
634
|
-
if (matches) {
|
|
635
|
-
// Track expansions
|
|
636
|
-
this.entityExpansionCount += matches.length;
|
|
637
|
-
|
|
638
|
-
// Check expansion limit
|
|
639
|
-
if (entityConfig.maxTotalExpansions &&
|
|
640
|
-
this.entityExpansionCount > entityConfig.maxTotalExpansions) {
|
|
641
|
-
throw new Error(
|
|
642
|
-
`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}`
|
|
643
|
-
);
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
// Store length before replacement
|
|
647
|
-
const lengthBefore = val.length;
|
|
648
|
-
val = val.replace(entity.regx, entity.val);
|
|
649
|
-
|
|
650
|
-
// Check expanded length immediately after replacement
|
|
651
|
-
if (entityConfig.maxExpandedLength) {
|
|
652
|
-
this.currentExpandedLength += (val.length - lengthBefore);
|
|
653
|
-
|
|
654
|
-
if (this.currentExpandedLength > entityConfig.maxExpandedLength) {
|
|
655
|
-
throw new Error(
|
|
656
|
-
`Total expanded content size exceeded: ${this.currentExpandedLength} > ${entityConfig.maxExpandedLength}`
|
|
657
|
-
);
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
}
|
|
662
|
-
// Replace standard entities
|
|
663
|
-
for (const entityName of Object.keys(this.lastEntities)) {
|
|
664
|
-
const entity = this.lastEntities[entityName];
|
|
665
|
-
const matches = val.match(entity.regex);
|
|
666
|
-
if (matches) {
|
|
667
|
-
this.entityExpansionCount += matches.length;
|
|
668
|
-
if (entityConfig.maxTotalExpansions &&
|
|
669
|
-
this.entityExpansionCount > entityConfig.maxTotalExpansions) {
|
|
670
|
-
throw new Error(
|
|
671
|
-
`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}`
|
|
672
|
-
);
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
val = val.replace(entity.regex, entity.val);
|
|
676
|
-
}
|
|
677
|
-
if (val.indexOf('&') === -1) return val;
|
|
678
|
-
|
|
679
|
-
// Replace HTML entities if enabled
|
|
680
|
-
if (this.options.htmlEntities) {
|
|
681
|
-
for (const entityName of Object.keys(this.htmlEntities)) {
|
|
682
|
-
const entity = this.htmlEntities[entityName];
|
|
683
|
-
const matches = val.match(entity.regex);
|
|
684
|
-
if (matches) {
|
|
685
|
-
//console.log(matches);
|
|
686
|
-
this.entityExpansionCount += matches.length;
|
|
687
|
-
if (entityConfig.maxTotalExpansions &&
|
|
688
|
-
this.entityExpansionCount > entityConfig.maxTotalExpansions) {
|
|
689
|
-
throw new Error(
|
|
690
|
-
`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}`
|
|
691
|
-
);
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
val = val.replace(entity.regex, entity.val);
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
// Replace ampersand entity last
|
|
699
|
-
val = val.replace(this.ampEntity.regex, this.ampEntity.val);
|
|
700
|
-
|
|
701
|
-
return val;
|
|
619
|
+
return this.entityDecoder.decode(val);
|
|
702
620
|
}
|
|
703
621
|
|
|
704
622
|
|
|
@@ -720,20 +638,14 @@ function saveTextToParentTag(textData, parentNode, matcher, isLeafNode) {
|
|
|
720
638
|
return textData;
|
|
721
639
|
}
|
|
722
640
|
|
|
723
|
-
//TODO: use jPath to simplify the logic
|
|
724
641
|
/**
|
|
725
642
|
* @param {Array<Expression>} stopNodeExpressions - Array of compiled Expression objects
|
|
726
643
|
* @param {Matcher} matcher - Current path matcher
|
|
727
644
|
*/
|
|
728
|
-
function isItStopNode(
|
|
729
|
-
if (
|
|
645
|
+
function isItStopNode() {
|
|
646
|
+
if (this.stopNodeExpressionsSet.size === 0) return false;
|
|
730
647
|
|
|
731
|
-
|
|
732
|
-
if (matcher.matches(stopNodeExpressions[i])) {
|
|
733
|
-
return true;
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
return false;
|
|
648
|
+
return this.matcher.matchesAny(this.stopNodeExpressionsSet);
|
|
737
649
|
}
|
|
738
650
|
|
|
739
651
|
/**
|
|
@@ -743,32 +655,38 @@ function isItStopNode(stopNodeExpressions, matcher) {
|
|
|
743
655
|
* @returns
|
|
744
656
|
*/
|
|
745
657
|
function tagExpWithClosingIndex(xmlData, i, closingChar = ">") {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
658
|
+
//TODO: ignore boolean attributes in tag expression
|
|
659
|
+
//TODO: if ignore attributes, dont read full attribute expression but the end. But read for xml declaration
|
|
660
|
+
let attrBoundary = 0;
|
|
661
|
+
const len = xmlData.length;
|
|
662
|
+
const closeCode0 = closingChar.charCodeAt(0);
|
|
663
|
+
const closeCode1 = closingChar.length > 1 ? closingChar.charCodeAt(1) : -1;
|
|
664
|
+
|
|
665
|
+
let result = '';
|
|
666
|
+
let segmentStart = i;
|
|
667
|
+
|
|
668
|
+
for (let index = i; index < len; index++) {
|
|
669
|
+
const code = xmlData.charCodeAt(index);
|
|
670
|
+
|
|
750
671
|
if (attrBoundary) {
|
|
751
|
-
if (
|
|
752
|
-
} else if (
|
|
753
|
-
attrBoundary =
|
|
754
|
-
} else if (
|
|
755
|
-
if (
|
|
756
|
-
if (xmlData
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
index: index
|
|
760
|
-
}
|
|
672
|
+
if (code === attrBoundary) attrBoundary = 0;
|
|
673
|
+
} else if (code === 34 || code === 39) { // " or '
|
|
674
|
+
attrBoundary = code;
|
|
675
|
+
} else if (code === closeCode0) {
|
|
676
|
+
if (closeCode1 !== -1) {
|
|
677
|
+
if (xmlData.charCodeAt(index + 1) === closeCode1) {
|
|
678
|
+
result += xmlData.substring(segmentStart, index);
|
|
679
|
+
return { data: result, index };
|
|
761
680
|
}
|
|
762
681
|
} else {
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
index: index
|
|
766
|
-
}
|
|
682
|
+
result += xmlData.substring(segmentStart, index);
|
|
683
|
+
return { data: result, index };
|
|
767
684
|
}
|
|
768
|
-
} else if (
|
|
769
|
-
|
|
685
|
+
} else if (code === 9 && !attrBoundary) { // \t - only replace with space outside attribute values
|
|
686
|
+
// Flush accumulated segment, add space, start new segment
|
|
687
|
+
result += xmlData.substring(segmentStart, index) + ' ';
|
|
688
|
+
segmentStart = index + 1;
|
|
770
689
|
}
|
|
771
|
-
tagExp += ch;
|
|
772
690
|
}
|
|
773
691
|
}
|
|
774
692
|
|
|
@@ -781,6 +699,12 @@ function findClosingIndex(xmlData, str, i, errMsg) {
|
|
|
781
699
|
}
|
|
782
700
|
}
|
|
783
701
|
|
|
702
|
+
function findClosingChar(xmlData, char, i, errMsg) {
|
|
703
|
+
const closingIndex = xmlData.indexOf(char, i);
|
|
704
|
+
if (closingIndex === -1) throw new Error(errMsg);
|
|
705
|
+
return closingIndex; // no offset needed
|
|
706
|
+
}
|
|
707
|
+
|
|
784
708
|
function readTagExp(xmlData, i, removeNSPrefix, closingChar = ">") {
|
|
785
709
|
const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);
|
|
786
710
|
if (!result) return;
|
|
@@ -822,10 +746,12 @@ function readStopNodeData(xmlData, tagName, i) {
|
|
|
822
746
|
// Starting at 1 since we already have an open tag
|
|
823
747
|
let openTagCount = 1;
|
|
824
748
|
|
|
825
|
-
|
|
749
|
+
const xmllen = xmlData.length;
|
|
750
|
+
for (; i < xmllen; i++) {
|
|
826
751
|
if (xmlData[i] === "<") {
|
|
827
|
-
|
|
828
|
-
|
|
752
|
+
const c1 = xmlData.charCodeAt(i + 1);
|
|
753
|
+
if (c1 === 47) {//close tag '/'
|
|
754
|
+
const closeIndex = findClosingChar(xmlData, ">", i, `${tagName} is not closed`);
|
|
829
755
|
let closeTagName = xmlData.substring(i + 2, closeIndex).trim();
|
|
830
756
|
if (closeTagName === tagName) {
|
|
831
757
|
openTagCount--;
|
|
@@ -837,13 +763,16 @@ function readStopNodeData(xmlData, tagName, i) {
|
|
|
837
763
|
}
|
|
838
764
|
}
|
|
839
765
|
i = closeIndex;
|
|
840
|
-
} else if (
|
|
766
|
+
} else if (c1 === 63) { //?
|
|
841
767
|
const closeIndex = findClosingIndex(xmlData, "?>", i + 1, "StopNode is not closed.")
|
|
842
768
|
i = closeIndex;
|
|
843
|
-
} else if (
|
|
769
|
+
} else if (c1 === 33
|
|
770
|
+
&& xmlData.charCodeAt(i + 2) === 45
|
|
771
|
+
&& xmlData.charCodeAt(i + 3) === 45) { // '!--'
|
|
844
772
|
const closeIndex = findClosingIndex(xmlData, "-->", i + 3, "StopNode is not closed.")
|
|
845
773
|
i = closeIndex;
|
|
846
|
-
} else if (
|
|
774
|
+
} else if (c1 === 33
|
|
775
|
+
&& xmlData.charCodeAt(i + 2) === 91) { // '!['
|
|
847
776
|
const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2;
|
|
848
777
|
i = closeIndex;
|
|
849
778
|
} else {
|