@cdklabs/cdk-ecs-codedeploy 0.0.431 → 0.0.433
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/.jsii.tabl.json +1 -1
- 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/lambda-invoke-store/dist-cjs/invoke-store.js +2 -2
- package/node_modules/@aws/lambda-invoke-store/dist-es/invoke-store.js +2 -2
- package/node_modules/@aws/lambda-invoke-store/dist-types/invoke-store.d.ts +1 -1
- package/node_modules/@aws/lambda-invoke-store/package.json +1 -1
- package/node_modules/@aws-sdk/client-codedeploy/README.md +26 -46
- package/node_modules/@aws-sdk/client-codedeploy/package.json +39 -39
- package/node_modules/@aws-sdk/core/dist-cjs/index.js +11 -15
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +11 -15
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/index.js +2 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +2 -8
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/query/AwsEc2QueryProtocol.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js +5 -7
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/index.d.ts +2 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/QuerySerializerSettings.d.ts +3 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/index.d.ts +2 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +1 -0
- package/node_modules/@aws-sdk/core/package.json +14 -14
- package/node_modules/@aws-sdk/credential-provider-env/package.json +6 -6
- package/node_modules/@aws-sdk/credential-provider-http/package.json +11 -11
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +15 -15
- package/node_modules/@aws-sdk/credential-provider-login/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-node/package.json +13 -13
- package/node_modules/@aws-sdk/credential-provider-process/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +8 -8
- package/node_modules/@aws-sdk/middleware-host-header/package.json +5 -5
- package/node_modules/@aws-sdk/middleware-logger/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +5 -5
- package/node_modules/@aws-sdk/middleware-user-agent/dist-cjs/index.js +9 -9
- package/node_modules/@aws-sdk/middleware-user-agent/dist-es/check-features.js +9 -9
- package/node_modules/@aws-sdk/middleware-user-agent/dist-types/check-features.d.ts +4 -2
- package/node_modules/@aws-sdk/middleware-user-agent/dist-types/ts3.4/check-features.d.ts +3 -3
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +9 -8
- package/node_modules/@aws-sdk/nested-clients/package.json +39 -37
- package/node_modules/@aws-sdk/region-config-resolver/package.json +6 -6
- package/node_modules/@aws-sdk/token-providers/package.json +8 -8
- package/node_modules/@aws-sdk/types/package.json +3 -3
- package/node_modules/@aws-sdk/util-endpoints/package.json +6 -6
- package/node_modules/@aws-sdk/util-locate-window/package.json +2 -2
- package/node_modules/@aws-sdk/util-user-agent-browser/package.json +4 -4
- package/node_modules/@aws-sdk/util-user-agent-node/dist-cjs/index.js +87 -14
- package/node_modules/@aws-sdk/util-user-agent-node/dist-es/getNodeModulesParentDirs.js +15 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-es/getSanitizedDevTypeScriptVersion.js +14 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-es/getSanitizedTypeScriptVersion.js +9 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-es/getTypeScriptUserAgentPair.js +59 -8
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/getNodeModulesParentDirs.d.ts +10 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/getSanitizedDevTypeScriptVersion.d.ts +8 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/getSanitizedTypeScriptVersion.d.ts +8 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/ts3.4/getNodeModulesParentDirs.d.ts +1 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/ts3.4/getSanitizedDevTypeScriptVersion.d.ts +3 -0
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/ts3.4/getSanitizedTypeScriptVersion.d.ts +3 -0
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +7 -6
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-parser.js +1 -0
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +1 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/CHANGELOG.md +23 -0
- 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 +15 -1
- 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/lib/fxvalidator.min.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/lib/fxvalidator.min.js.map +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/package.json +3 -2
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/fxp.d.ts +16 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/fxp.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/util.js +1 -26
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/EntitiesParser.js +87 -87
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/OptionsBuilder.js +10 -10
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/OutputBuilders/BaseOutputBuilder.js +23 -23
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/OutputBuilders/JsArrBuilder.js +29 -29
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/OutputBuilders/JsObjBuilder.js +39 -39
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/OutputBuilders/ParserOptionsBuilder.js +17 -17
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/XMLParser.js +22 -22
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/v6/valueParsers/EntitiesParser.js +85 -85
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/validator.js +34 -34
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js +5 -284
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +1 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js +2 -0
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +27 -5
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +21 -21
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/node2json.js +38 -34
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js +10 -10
- package/node_modules/@aws-sdk/xml-builder/package.json +4 -4
- package/node_modules/@smithy/abort-controller/package.json +3 -3
- package/node_modules/@smithy/config-resolver/package.json +7 -7
- package/node_modules/@smithy/core/dist-cjs/index.js +1 -2
- package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +9 -9
- package/node_modules/@smithy/core/dist-cjs/submodules/endpoints/index.js +22 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/event-streams/index.js +1 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js +11 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +42 -5
- package/node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/getHttpAuthSchemePlugin.js +1 -2
- package/node_modules/@smithy/core/dist-es/submodules/cbor/CborCodec.js +2 -8
- package/node_modules/@smithy/core/dist-es/submodules/cbor/parseCborBody.js +7 -1
- package/node_modules/@smithy/core/dist-es/submodules/endpoints/index.js +1 -0
- package/node_modules/@smithy/core/dist-es/submodules/endpoints/toEndpointV1.js +17 -0
- package/node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js +1 -1
- package/node_modules/@smithy/core/dist-es/submodules/protocols/HttpProtocol.js +10 -0
- package/node_modules/@smithy/core/dist-es/submodules/protocols/RpcProtocol.js +1 -1
- package/node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaSerializationMiddleware.js +3 -2
- package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/NormalizedSchema.js +31 -2
- package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/translateTraits.js +5 -1
- package/node_modules/@smithy/core/dist-types/submodules/endpoints/index.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/submodules/endpoints/toEndpointV1.d.ts +6 -0
- package/node_modules/@smithy/core/dist-types/submodules/schema/schemas/NormalizedSchema.d.ts +11 -0
- package/node_modules/@smithy/core/dist-types/submodules/schema/schemas/translateTraits.d.ts +6 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/index.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/toEndpointV1.d.ts +6 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/schema/schemas/NormalizedSchema.d.ts +11 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/schema/schemas/translateTraits.d.ts +6 -0
- package/node_modules/@smithy/core/endpoints.d.ts +7 -0
- package/node_modules/@smithy/core/endpoints.js +6 -0
- package/node_modules/@smithy/core/package.json +21 -12
- package/node_modules/@smithy/credential-provider-imds/package.json +6 -6
- package/node_modules/@smithy/fetch-http-handler/dist-cjs/index.js +21 -4
- package/node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js +21 -4
- package/node_modules/@smithy/fetch-http-handler/package.json +7 -7
- package/node_modules/@smithy/hash-node/package.json +5 -5
- package/node_modules/@smithy/invalid-dependency/package.json +3 -3
- package/node_modules/@smithy/is-array-buffer/package.json +2 -2
- package/node_modules/@smithy/middleware-content-length/package.json +4 -4
- package/node_modules/@smithy/middleware-endpoint/dist-cjs/index.js +17 -1
- package/node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromInstructions.js +9 -0
- package/node_modules/@smithy/middleware-endpoint/dist-es/adaptors/toEndpointV1.js +8 -1
- package/node_modules/@smithy/middleware-endpoint/dist-types/adaptors/toEndpointV1.d.ts +1 -0
- package/node_modules/@smithy/middleware-endpoint/dist-types/ts3.4/adaptors/toEndpointV1.d.ts +1 -0
- package/node_modules/@smithy/middleware-endpoint/package.json +9 -9
- package/node_modules/@smithy/middleware-retry/dist-cjs/index.js +9 -12
- package/node_modules/@smithy/middleware-retry/dist-es/configurations.js +9 -12
- package/node_modules/@smithy/middleware-retry/package.json +10 -10
- package/node_modules/@smithy/middleware-serde/dist-cjs/index.js +3 -2
- package/node_modules/@smithy/middleware-serde/dist-es/serializerMiddleware.js +3 -2
- package/node_modules/@smithy/middleware-serde/package.json +5 -4
- package/node_modules/@smithy/middleware-stack/package.json +3 -3
- package/node_modules/@smithy/node-config-provider/package.json +5 -5
- package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +68 -45
- package/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +19 -0
- package/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +41 -35
- package/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +1 -1
- package/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +4 -5
- package/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +1 -1
- package/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +6 -6
- package/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +1 -1
- package/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +1 -1
- package/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +10 -0
- package/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +4 -4
- package/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +2 -2
- package/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +3 -3
- package/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +2 -2
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +10 -0
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +4 -4
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +2 -2
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +3 -3
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +1 -1
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +2 -2
- package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +2 -2
- package/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +2 -2
- package/node_modules/@smithy/node-http-handler/package.json +6 -6
- package/node_modules/@smithy/property-provider/package.json +3 -3
- package/node_modules/@smithy/protocol-http/package.json +3 -3
- package/node_modules/@smithy/querystring-builder/package.json +4 -4
- package/node_modules/@smithy/querystring-parser/package.json +3 -3
- package/node_modules/@smithy/service-error-classification/package.json +3 -3
- package/node_modules/@smithy/shared-ini-file-loader/package.json +3 -3
- package/node_modules/@smithy/signature-v4/package.json +9 -9
- package/node_modules/@smithy/smithy-client/package.json +8 -8
- package/node_modules/@smithy/types/dist-types/http.d.ts +1 -0
- package/node_modules/@smithy/types/dist-types/ts3.4/http.d.ts +1 -0
- package/node_modules/@smithy/types/package.json +1 -1
- package/node_modules/@smithy/url-parser/package.json +4 -4
- package/node_modules/@smithy/util-base64/package.json +4 -4
- package/node_modules/@smithy/util-body-length-browser/package.json +2 -2
- package/node_modules/@smithy/util-body-length-node/package.json +2 -2
- package/node_modules/@smithy/util-buffer-from/package.json +3 -3
- package/node_modules/@smithy/util-config-provider/package.json +2 -2
- package/node_modules/@smithy/util-defaults-mode-browser/package.json +5 -5
- package/node_modules/@smithy/util-defaults-mode-node/package.json +8 -8
- package/node_modules/@smithy/util-endpoints/package.json +4 -4
- package/node_modules/@smithy/util-hex-encoding/package.json +2 -2
- package/node_modules/@smithy/util-middleware/package.json +3 -3
- package/node_modules/@smithy/util-retry/package.json +4 -4
- package/node_modules/@smithy/util-stream/package.json +9 -9
- package/node_modules/@smithy/util-uri-escape/package.json +2 -2
- package/node_modules/@smithy/util-utf8/package.json +3 -3
- package/node_modules/@smithy/util-waiter/dist-cjs/index.js +1 -1
- package/node_modules/@smithy/util-waiter/dist-es/poller.js +1 -1
- package/node_modules/@smithy/util-waiter/package.json +4 -4
- package/node_modules/@smithy/uuid/package.json +2 -2
- package/node_modules/fast-xml-builder/CHANGELOG.md +16 -0
- package/node_modules/fast-xml-builder/LICENSE +21 -0
- package/node_modules/fast-xml-builder/README.md +23 -0
- package/node_modules/fast-xml-builder/lib/fxb.cjs +1 -0
- package/node_modules/fast-xml-builder/lib/fxb.d.cts +180 -0
- package/node_modules/fast-xml-builder/lib/fxb.min.js +2 -0
- package/node_modules/fast-xml-builder/lib/fxb.min.js.map +1 -0
- package/node_modules/fast-xml-builder/package.json +80 -0
- package/node_modules/fast-xml-builder/src/fxb.d.ts +180 -0
- package/node_modules/fast-xml-builder/src/fxb.js +529 -0
- package/node_modules/fast-xml-builder/src/ignoreAttributes.js +18 -0
- package/node_modules/fast-xml-builder/src/orderedJs2Xml.js +292 -0
- package/node_modules/path-expression-matcher/LICENSE +21 -0
- package/node_modules/path-expression-matcher/README.md +635 -0
- package/node_modules/path-expression-matcher/lib/pem.cjs +1 -0
- package/node_modules/path-expression-matcher/lib/pem.d.cts +335 -0
- package/node_modules/path-expression-matcher/lib/pem.min.js +2 -0
- package/node_modules/path-expression-matcher/lib/pem.min.js.map +1 -0
- package/node_modules/path-expression-matcher/package.json +78 -0
- package/node_modules/path-expression-matcher/src/Expression.js +232 -0
- package/node_modules/path-expression-matcher/src/Matcher.js +414 -0
- package/node_modules/path-expression-matcher/src/index.d.ts +366 -0
- package/node_modules/path-expression-matcher/src/index.js +28 -0
- package/package.json +6 -6
- package/node_modules/@aws-sdk/util-user-agent-node/dist-es/getTypeScriptPackageJsonPath.js +0 -14
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/getTypeScriptPackageJsonPath.d.ts +0 -9
- package/node_modules/@aws-sdk/util-user-agent-node/dist-types/ts3.4/getTypeScriptPackageJsonPath.d.ts +0 -1
- package/node_modules/@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js +0 -134
- /package/node_modules/{@aws-sdk/xml-builder/node_modules/fast-xml-parser/src/xmlbuilder → fast-xml-builder/src}/prettifyJs2Xml.js +0 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
//parse Empty Node as self closing node
|
|
3
|
+
import buildFromOrderedJs from './orderedJs2Xml.js';
|
|
4
|
+
import getIgnoreAttributesFn from "./ignoreAttributes.js";
|
|
5
|
+
import { Expression, Matcher } from 'path-expression-matcher';
|
|
6
|
+
|
|
7
|
+
const defaultOptions = {
|
|
8
|
+
attributeNamePrefix: '@_',
|
|
9
|
+
attributesGroupName: false,
|
|
10
|
+
textNodeName: '#text',
|
|
11
|
+
ignoreAttributes: true,
|
|
12
|
+
cdataPropName: false,
|
|
13
|
+
format: false,
|
|
14
|
+
indentBy: ' ',
|
|
15
|
+
suppressEmptyNode: false,
|
|
16
|
+
suppressUnpairedNode: true,
|
|
17
|
+
suppressBooleanAttributes: true,
|
|
18
|
+
tagValueProcessor: function (key, a) {
|
|
19
|
+
return a;
|
|
20
|
+
},
|
|
21
|
+
attributeValueProcessor: function (attrName, a) {
|
|
22
|
+
return a;
|
|
23
|
+
},
|
|
24
|
+
preserveOrder: false,
|
|
25
|
+
commentPropName: false,
|
|
26
|
+
unpairedTags: [],
|
|
27
|
+
entities: [
|
|
28
|
+
{ regex: new RegExp("&", "g"), val: "&" },//it must be on top
|
|
29
|
+
{ regex: new RegExp(">", "g"), val: ">" },
|
|
30
|
+
{ regex: new RegExp("<", "g"), val: "<" },
|
|
31
|
+
{ regex: new RegExp("\'", "g"), val: "'" },
|
|
32
|
+
{ regex: new RegExp("\"", "g"), val: """ }
|
|
33
|
+
],
|
|
34
|
+
processEntities: true,
|
|
35
|
+
stopNodes: [],
|
|
36
|
+
// transformTagName: false,
|
|
37
|
+
// transformAttributeName: false,
|
|
38
|
+
oneListGroup: false,
|
|
39
|
+
maxNestedTags: 100,
|
|
40
|
+
jPath: true // When true, callbacks receive string jPath; when false, receive Matcher instance
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default function Builder(options) {
|
|
44
|
+
this.options = Object.assign({}, defaultOptions, options);
|
|
45
|
+
|
|
46
|
+
// Convert old-style stopNodes for backward compatibility
|
|
47
|
+
// Old syntax: "*.tag" meant "tag anywhere in tree"
|
|
48
|
+
// New syntax: "..tag" means "tag anywhere in tree"
|
|
49
|
+
if (this.options.stopNodes && Array.isArray(this.options.stopNodes)) {
|
|
50
|
+
this.options.stopNodes = this.options.stopNodes.map(node => {
|
|
51
|
+
if (typeof node === 'string' && node.startsWith('*.')) {
|
|
52
|
+
// Convert old wildcard syntax to deep wildcard
|
|
53
|
+
return '..' + node.substring(2);
|
|
54
|
+
}
|
|
55
|
+
return node;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Pre-compile stopNode expressions for pattern matching
|
|
60
|
+
this.stopNodeExpressions = [];
|
|
61
|
+
if (this.options.stopNodes && Array.isArray(this.options.stopNodes)) {
|
|
62
|
+
for (let i = 0; i < this.options.stopNodes.length; i++) {
|
|
63
|
+
const node = this.options.stopNodes[i];
|
|
64
|
+
if (typeof node === 'string') {
|
|
65
|
+
this.stopNodeExpressions.push(new Expression(node));
|
|
66
|
+
} else if (node instanceof Expression) {
|
|
67
|
+
this.stopNodeExpressions.push(node);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {
|
|
73
|
+
this.isAttribute = function (/*a*/) {
|
|
74
|
+
return false;
|
|
75
|
+
};
|
|
76
|
+
} else {
|
|
77
|
+
this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)
|
|
78
|
+
this.attrPrefixLen = this.options.attributeNamePrefix.length;
|
|
79
|
+
this.isAttribute = isAttribute;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
this.processTextOrObjNode = processTextOrObjNode
|
|
83
|
+
|
|
84
|
+
if (this.options.format) {
|
|
85
|
+
this.indentate = indentate;
|
|
86
|
+
this.tagEndChar = '>\n';
|
|
87
|
+
this.newLine = '\n';
|
|
88
|
+
} else {
|
|
89
|
+
this.indentate = function () {
|
|
90
|
+
return '';
|
|
91
|
+
};
|
|
92
|
+
this.tagEndChar = '>';
|
|
93
|
+
this.newLine = '';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
Builder.prototype.build = function (jObj) {
|
|
98
|
+
if (this.options.preserveOrder) {
|
|
99
|
+
return buildFromOrderedJs(jObj, this.options);
|
|
100
|
+
} else {
|
|
101
|
+
if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {
|
|
102
|
+
jObj = {
|
|
103
|
+
[this.options.arrayNodeName]: jObj
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Initialize matcher for path tracking
|
|
107
|
+
const matcher = new Matcher();
|
|
108
|
+
return this.j2x(jObj, 0, matcher).val;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
Builder.prototype.j2x = function (jObj, level, matcher) {
|
|
113
|
+
let attrStr = '';
|
|
114
|
+
let val = '';
|
|
115
|
+
if (this.options.maxNestedTags && matcher.getDepth() >= this.options.maxNestedTags) {
|
|
116
|
+
throw new Error("Maximum nested tags exceeded");
|
|
117
|
+
}
|
|
118
|
+
// Get jPath based on option: string for backward compatibility, or Matcher for new features
|
|
119
|
+
const jPath = this.options.jPath ? matcher.toString() : matcher;
|
|
120
|
+
|
|
121
|
+
// Check if current node is a stopNode (will be used for attribute encoding)
|
|
122
|
+
const isCurrentStopNode = this.checkStopNode(matcher);
|
|
123
|
+
|
|
124
|
+
for (let key in jObj) {
|
|
125
|
+
if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;
|
|
126
|
+
if (typeof jObj[key] === 'undefined') {
|
|
127
|
+
// supress undefined node only if it is not an attribute
|
|
128
|
+
if (this.isAttribute(key)) {
|
|
129
|
+
val += '';
|
|
130
|
+
}
|
|
131
|
+
} else if (jObj[key] === null) {
|
|
132
|
+
// null attribute should be ignored by the attribute list, but should not cause the tag closing
|
|
133
|
+
if (this.isAttribute(key)) {
|
|
134
|
+
val += '';
|
|
135
|
+
} else if (key === this.options.cdataPropName) {
|
|
136
|
+
val += '';
|
|
137
|
+
} else if (key[0] === '?') {
|
|
138
|
+
val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;
|
|
139
|
+
} else {
|
|
140
|
+
val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
141
|
+
}
|
|
142
|
+
// val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
143
|
+
} else if (jObj[key] instanceof Date) {
|
|
144
|
+
val += this.buildTextValNode(jObj[key], key, '', level, matcher);
|
|
145
|
+
} else if (typeof jObj[key] !== 'object') {
|
|
146
|
+
//premitive type
|
|
147
|
+
const attr = this.isAttribute(key);
|
|
148
|
+
if (attr && !this.ignoreAttributesFn(attr, jPath)) {
|
|
149
|
+
attrStr += this.buildAttrPairStr(attr, '' + jObj[key], isCurrentStopNode);
|
|
150
|
+
} else if (!attr) {
|
|
151
|
+
//tag value
|
|
152
|
+
if (key === this.options.textNodeName) {
|
|
153
|
+
let newval = this.options.tagValueProcessor(key, '' + jObj[key]);
|
|
154
|
+
val += this.replaceEntitiesValue(newval);
|
|
155
|
+
} else {
|
|
156
|
+
// Check if this is a stopNode before building
|
|
157
|
+
matcher.push(key);
|
|
158
|
+
const isStopNode = this.checkStopNode(matcher);
|
|
159
|
+
matcher.pop();
|
|
160
|
+
|
|
161
|
+
if (isStopNode) {
|
|
162
|
+
// Build as raw content without encoding
|
|
163
|
+
const textValue = '' + jObj[key];
|
|
164
|
+
if (textValue === '') {
|
|
165
|
+
val += this.indentate(level) + '<' + key + this.closeTag(key) + this.tagEndChar;
|
|
166
|
+
} else {
|
|
167
|
+
val += this.indentate(level) + '<' + key + '>' + textValue + '</' + key + this.tagEndChar;
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
val += this.buildTextValNode(jObj[key], key, '', level, matcher);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} else if (Array.isArray(jObj[key])) {
|
|
175
|
+
//repeated nodes
|
|
176
|
+
const arrLen = jObj[key].length;
|
|
177
|
+
let listTagVal = "";
|
|
178
|
+
let listTagAttr = "";
|
|
179
|
+
for (let j = 0; j < arrLen; j++) {
|
|
180
|
+
const item = jObj[key][j];
|
|
181
|
+
if (typeof item === 'undefined') {
|
|
182
|
+
// supress undefined node
|
|
183
|
+
} else if (item === null) {
|
|
184
|
+
if (key[0] === "?") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;
|
|
185
|
+
else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
186
|
+
// val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
187
|
+
} else if (typeof item === 'object') {
|
|
188
|
+
if (this.options.oneListGroup) {
|
|
189
|
+
// Push tag to matcher before recursive call
|
|
190
|
+
matcher.push(key);
|
|
191
|
+
const result = this.j2x(item, level + 1, matcher);
|
|
192
|
+
// Pop tag from matcher after recursive call
|
|
193
|
+
matcher.pop();
|
|
194
|
+
|
|
195
|
+
listTagVal += result.val;
|
|
196
|
+
if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {
|
|
197
|
+
listTagAttr += result.attrStr
|
|
198
|
+
}
|
|
199
|
+
} else {
|
|
200
|
+
listTagVal += this.processTextOrObjNode(item, key, level, matcher)
|
|
201
|
+
}
|
|
202
|
+
} else {
|
|
203
|
+
if (this.options.oneListGroup) {
|
|
204
|
+
let textValue = this.options.tagValueProcessor(key, item);
|
|
205
|
+
textValue = this.replaceEntitiesValue(textValue);
|
|
206
|
+
listTagVal += textValue;
|
|
207
|
+
} else {
|
|
208
|
+
// Check if this is a stopNode before building
|
|
209
|
+
matcher.push(key);
|
|
210
|
+
const isStopNode = this.checkStopNode(matcher);
|
|
211
|
+
matcher.pop();
|
|
212
|
+
|
|
213
|
+
if (isStopNode) {
|
|
214
|
+
// Build as raw content without encoding
|
|
215
|
+
const textValue = '' + item;
|
|
216
|
+
if (textValue === '') {
|
|
217
|
+
listTagVal += this.indentate(level) + '<' + key + this.closeTag(key) + this.tagEndChar;
|
|
218
|
+
} else {
|
|
219
|
+
listTagVal += this.indentate(level) + '<' + key + '>' + textValue + '</' + key + this.tagEndChar;
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
listTagVal += this.buildTextValNode(item, key, '', level, matcher);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (this.options.oneListGroup) {
|
|
228
|
+
listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);
|
|
229
|
+
}
|
|
230
|
+
val += listTagVal;
|
|
231
|
+
} else {
|
|
232
|
+
//nested node
|
|
233
|
+
if (this.options.attributesGroupName && key === this.options.attributesGroupName) {
|
|
234
|
+
const Ks = Object.keys(jObj[key]);
|
|
235
|
+
const L = Ks.length;
|
|
236
|
+
for (let j = 0; j < L; j++) {
|
|
237
|
+
attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]], isCurrentStopNode);
|
|
238
|
+
}
|
|
239
|
+
} else {
|
|
240
|
+
val += this.processTextOrObjNode(jObj[key], key, level, matcher)
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return { attrStr: attrStr, val: val };
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) {
|
|
248
|
+
if (!isStopNode) {
|
|
249
|
+
val = this.options.attributeValueProcessor(attrName, '' + val);
|
|
250
|
+
val = this.replaceEntitiesValue(val);
|
|
251
|
+
}
|
|
252
|
+
if (this.options.suppressBooleanAttributes && val === "true") {
|
|
253
|
+
return ' ' + attrName;
|
|
254
|
+
} else return ' ' + attrName + '="' + val + '"';
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function processTextOrObjNode(object, key, level, matcher) {
|
|
258
|
+
// Extract attributes to pass to matcher
|
|
259
|
+
const attrValues = this.extractAttributes(object);
|
|
260
|
+
|
|
261
|
+
// Push tag to matcher before recursion WITH attributes
|
|
262
|
+
matcher.push(key, attrValues);
|
|
263
|
+
|
|
264
|
+
// Check if this entire node is a stopNode
|
|
265
|
+
const isStopNode = this.checkStopNode(matcher);
|
|
266
|
+
|
|
267
|
+
if (isStopNode) {
|
|
268
|
+
// For stopNodes, build raw content without entity encoding
|
|
269
|
+
const rawContent = this.buildRawContent(object);
|
|
270
|
+
const attrStr = this.buildAttributesForStopNode(object);
|
|
271
|
+
matcher.pop();
|
|
272
|
+
return this.buildObjectNode(rawContent, key, attrStr, level);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const result = this.j2x(object, level + 1, matcher);
|
|
276
|
+
// Pop tag from matcher after recursion
|
|
277
|
+
matcher.pop();
|
|
278
|
+
|
|
279
|
+
if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {
|
|
280
|
+
return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level, matcher);
|
|
281
|
+
} else {
|
|
282
|
+
return this.buildObjectNode(result.val, key, result.attrStr, level);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Helper method to extract attributes from an object
|
|
287
|
+
Builder.prototype.extractAttributes = function (obj) {
|
|
288
|
+
if (!obj || typeof obj !== 'object') return null;
|
|
289
|
+
|
|
290
|
+
const attrValues = {};
|
|
291
|
+
let hasAttrs = false;
|
|
292
|
+
|
|
293
|
+
// Check for attributesGroupName (when attributes are grouped)
|
|
294
|
+
if (this.options.attributesGroupName && obj[this.options.attributesGroupName]) {
|
|
295
|
+
const attrGroup = obj[this.options.attributesGroupName];
|
|
296
|
+
for (let attrKey in attrGroup) {
|
|
297
|
+
if (!Object.prototype.hasOwnProperty.call(attrGroup, attrKey)) continue;
|
|
298
|
+
// Remove attribute prefix if present
|
|
299
|
+
const cleanKey = attrKey.startsWith(this.options.attributeNamePrefix)
|
|
300
|
+
? attrKey.substring(this.options.attributeNamePrefix.length)
|
|
301
|
+
: attrKey;
|
|
302
|
+
attrValues[cleanKey] = attrGroup[attrKey];
|
|
303
|
+
hasAttrs = true;
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
// Look for individual attributes (prefixed with attributeNamePrefix)
|
|
307
|
+
for (let key in obj) {
|
|
308
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
|
|
309
|
+
const attr = this.isAttribute(key);
|
|
310
|
+
if (attr) {
|
|
311
|
+
attrValues[attr] = obj[key];
|
|
312
|
+
hasAttrs = true;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return hasAttrs ? attrValues : null;
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
// Build raw content for stopNode without entity encoding
|
|
321
|
+
Builder.prototype.buildRawContent = function (obj) {
|
|
322
|
+
if (typeof obj === 'string') {
|
|
323
|
+
return obj; // Already a string, return as-is
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
327
|
+
return String(obj);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Check if this is a stopNode data from parser: { "#text": "raw xml", "@_attr": "val" }
|
|
331
|
+
if (obj[this.options.textNodeName] !== undefined) {
|
|
332
|
+
return obj[this.options.textNodeName]; // Return raw text without encoding
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Build raw XML from nested structure
|
|
336
|
+
let content = '';
|
|
337
|
+
|
|
338
|
+
for (let key in obj) {
|
|
339
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
|
|
340
|
+
|
|
341
|
+
// Skip attributes
|
|
342
|
+
if (this.isAttribute(key)) continue;
|
|
343
|
+
if (this.options.attributesGroupName && key === this.options.attributesGroupName) continue;
|
|
344
|
+
|
|
345
|
+
const value = obj[key];
|
|
346
|
+
|
|
347
|
+
if (key === this.options.textNodeName) {
|
|
348
|
+
content += value; // Raw text
|
|
349
|
+
} else if (Array.isArray(value)) {
|
|
350
|
+
// Array of same tag
|
|
351
|
+
for (let item of value) {
|
|
352
|
+
if (typeof item === 'string' || typeof item === 'number') {
|
|
353
|
+
content += `<${key}>${item}</${key}>`;
|
|
354
|
+
} else if (typeof item === 'object' && item !== null) {
|
|
355
|
+
const nestedContent = this.buildRawContent(item);
|
|
356
|
+
const nestedAttrs = this.buildAttributesForStopNode(item);
|
|
357
|
+
if (nestedContent === '') {
|
|
358
|
+
content += `<${key}${nestedAttrs}/>`;
|
|
359
|
+
} else {
|
|
360
|
+
content += `<${key}${nestedAttrs}>${nestedContent}</${key}>`;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
365
|
+
// Nested object
|
|
366
|
+
const nestedContent = this.buildRawContent(value);
|
|
367
|
+
const nestedAttrs = this.buildAttributesForStopNode(value);
|
|
368
|
+
if (nestedContent === '') {
|
|
369
|
+
content += `<${key}${nestedAttrs}/>`;
|
|
370
|
+
} else {
|
|
371
|
+
content += `<${key}${nestedAttrs}>${nestedContent}</${key}>`;
|
|
372
|
+
}
|
|
373
|
+
} else {
|
|
374
|
+
// Primitive value
|
|
375
|
+
content += `<${key}>${value}</${key}>`;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return content;
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
// Build attribute string for stopNode (no entity encoding)
|
|
383
|
+
Builder.prototype.buildAttributesForStopNode = function (obj) {
|
|
384
|
+
if (!obj || typeof obj !== 'object') return '';
|
|
385
|
+
|
|
386
|
+
let attrStr = '';
|
|
387
|
+
|
|
388
|
+
// Check for attributesGroupName (when attributes are grouped)
|
|
389
|
+
if (this.options.attributesGroupName && obj[this.options.attributesGroupName]) {
|
|
390
|
+
const attrGroup = obj[this.options.attributesGroupName];
|
|
391
|
+
for (let attrKey in attrGroup) {
|
|
392
|
+
if (!Object.prototype.hasOwnProperty.call(attrGroup, attrKey)) continue;
|
|
393
|
+
const cleanKey = attrKey.startsWith(this.options.attributeNamePrefix)
|
|
394
|
+
? attrKey.substring(this.options.attributeNamePrefix.length)
|
|
395
|
+
: attrKey;
|
|
396
|
+
const val = attrGroup[attrKey];
|
|
397
|
+
if (val === true && this.options.suppressBooleanAttributes) {
|
|
398
|
+
attrStr += ' ' + cleanKey;
|
|
399
|
+
} else {
|
|
400
|
+
attrStr += ' ' + cleanKey + '="' + val + '"'; // No encoding for stopNode
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
} else {
|
|
404
|
+
// Look for individual attributes
|
|
405
|
+
for (let key in obj) {
|
|
406
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
|
|
407
|
+
const attr = this.isAttribute(key);
|
|
408
|
+
if (attr) {
|
|
409
|
+
const val = obj[key];
|
|
410
|
+
if (val === true && this.options.suppressBooleanAttributes) {
|
|
411
|
+
attrStr += ' ' + attr;
|
|
412
|
+
} else {
|
|
413
|
+
attrStr += ' ' + attr + '="' + val + '"'; // No encoding for stopNode
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
return attrStr;
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
Builder.prototype.buildObjectNode = function (val, key, attrStr, level) {
|
|
423
|
+
if (val === "") {
|
|
424
|
+
if (key[0] === "?") return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
|
|
425
|
+
else {
|
|
426
|
+
return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
|
|
427
|
+
}
|
|
428
|
+
} else {
|
|
429
|
+
|
|
430
|
+
let tagEndExp = '</' + key + this.tagEndChar;
|
|
431
|
+
let piClosingChar = "";
|
|
432
|
+
|
|
433
|
+
if (key[0] === "?") {
|
|
434
|
+
piClosingChar = "?";
|
|
435
|
+
tagEndExp = "";
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// attrStr is an empty string in case the attribute came as undefined or null
|
|
439
|
+
if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {
|
|
440
|
+
return (this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp);
|
|
441
|
+
} else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
|
|
442
|
+
return this.indentate(level) + `<!--${val}-->` + this.newLine;
|
|
443
|
+
} else {
|
|
444
|
+
return (
|
|
445
|
+
this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +
|
|
446
|
+
val +
|
|
447
|
+
this.indentate(level) + tagEndExp);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
Builder.prototype.closeTag = function (key) {
|
|
453
|
+
let closeTag = "";
|
|
454
|
+
if (this.options.unpairedTags.indexOf(key) !== -1) { //unpaired
|
|
455
|
+
if (!this.options.suppressUnpairedNode) closeTag = "/"
|
|
456
|
+
} else if (this.options.suppressEmptyNode) { //empty
|
|
457
|
+
closeTag = "/";
|
|
458
|
+
} else {
|
|
459
|
+
closeTag = `></${key}`
|
|
460
|
+
}
|
|
461
|
+
return closeTag;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
Builder.prototype.checkStopNode = function (matcher) {
|
|
465
|
+
if (!this.stopNodeExpressions || this.stopNodeExpressions.length === 0) return false;
|
|
466
|
+
|
|
467
|
+
for (let i = 0; i < this.stopNodeExpressions.length; i++) {
|
|
468
|
+
if (matcher.matches(this.stopNodeExpressions[i])) {
|
|
469
|
+
return true;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
return false;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
function buildEmptyObjNode(val, key, attrStr, level) {
|
|
476
|
+
if (val !== '') {
|
|
477
|
+
return this.buildObjectNode(val, key, attrStr, level);
|
|
478
|
+
} else {
|
|
479
|
+
if (key[0] === "?") return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
|
|
480
|
+
else {
|
|
481
|
+
return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;
|
|
482
|
+
// return this.buildTagStr(level,key, attrStr);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
Builder.prototype.buildTextValNode = function (val, key, attrStr, level, matcher) {
|
|
488
|
+
if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {
|
|
489
|
+
return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;
|
|
490
|
+
} else if (this.options.commentPropName !== false && key === this.options.commentPropName) {
|
|
491
|
+
return this.indentate(level) + `<!--${val}-->` + this.newLine;
|
|
492
|
+
} else if (key[0] === "?") {//PI tag
|
|
493
|
+
return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
|
|
494
|
+
} else {
|
|
495
|
+
// Normal processing: apply tagValueProcessor and entity replacement
|
|
496
|
+
let textValue = this.options.tagValueProcessor(key, val);
|
|
497
|
+
textValue = this.replaceEntitiesValue(textValue);
|
|
498
|
+
|
|
499
|
+
if (textValue === '') {
|
|
500
|
+
return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
|
|
501
|
+
} else {
|
|
502
|
+
return this.indentate(level) + '<' + key + attrStr + '>' +
|
|
503
|
+
textValue +
|
|
504
|
+
'</' + key + this.tagEndChar;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
Builder.prototype.replaceEntitiesValue = function (textValue) {
|
|
510
|
+
if (textValue && textValue.length > 0 && this.options.processEntities) {
|
|
511
|
+
for (let i = 0; i < this.options.entities.length; i++) {
|
|
512
|
+
const entity = this.options.entities[i];
|
|
513
|
+
textValue = textValue.replace(entity.regex, entity.val);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
return textValue;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
function indentate(level) {
|
|
520
|
+
return this.options.indentBy.repeat(level);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
function isAttribute(name /*, options*/) {
|
|
524
|
+
if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {
|
|
525
|
+
return name.substr(this.attrPrefixLen);
|
|
526
|
+
} else {
|
|
527
|
+
return false;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export default function getIgnoreAttributesFn(ignoreAttributes) {
|
|
2
|
+
if (typeof ignoreAttributes === 'function') {
|
|
3
|
+
return ignoreAttributes
|
|
4
|
+
}
|
|
5
|
+
if (Array.isArray(ignoreAttributes)) {
|
|
6
|
+
return (attrName) => {
|
|
7
|
+
for (const pattern of ignoreAttributes) {
|
|
8
|
+
if (typeof pattern === 'string' && attrName === pattern) {
|
|
9
|
+
return true
|
|
10
|
+
}
|
|
11
|
+
if (pattern instanceof RegExp && pattern.test(attrName)) {
|
|
12
|
+
return true
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return () => false
|
|
18
|
+
}
|