sfdx-git-delta 6.41.2 → 6.43.0
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/README.md +35 -2
- package/lib/adapter/GitAdapter.d.ts +51 -2
- package/lib/adapter/GitAdapter.js +367 -41
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/gitBatchCatFile.d.ts +26 -4
- package/lib/adapter/gitBatchCatFile.js +128 -44
- package/lib/adapter/gitBatchCatFile.js.map +1 -1
- package/lib/adapter/gitBlobReader.d.ts +58 -0
- package/lib/adapter/gitBlobReader.js +27 -0
- package/lib/adapter/gitBlobReader.js.map +1 -0
- package/lib/adapter/ioExecutor.d.ts +18 -6
- package/lib/adapter/ioExecutor.js +97 -12
- package/lib/adapter/ioExecutor.js.map +1 -1
- package/lib/commands/sgd/source/delta.d.ts +2 -0
- package/lib/commands/sgd/source/delta.js +31 -1
- package/lib/commands/sgd/source/delta.js.map +1 -1
- package/lib/constant/cliConstants.d.ts +2 -0
- package/lib/constant/cliConstants.js +4 -0
- package/lib/constant/cliConstants.js.map +1 -1
- package/lib/constant/gitConstants.d.ts +1 -0
- package/lib/constant/gitConstants.js +4 -0
- package/lib/constant/gitConstants.js.map +1 -1
- package/lib/main.js +35 -7
- package/lib/main.js.map +1 -1
- package/lib/metadata/MetadataRepositoryImpl.d.ts +1 -0
- package/lib/metadata/MetadataRepositoryImpl.js +14 -2
- package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
- package/lib/post-processor/changesManifestProcessor.d.ts +15 -0
- package/lib/post-processor/changesManifestProcessor.js +50 -0
- package/lib/post-processor/changesManifestProcessor.js.map +1 -0
- package/lib/post-processor/flowTranslationProcessor.d.ts +31 -14
- package/lib/post-processor/flowTranslationProcessor.js +146 -51
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/packageGenerator.d.ts +1 -2
- package/lib/post-processor/packageGenerator.js +23 -34
- package/lib/post-processor/packageGenerator.js.map +1 -1
- package/lib/post-processor/postProcessorManager.js +9 -6
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/botHandler.d.ts +2 -1
- package/lib/service/botHandler.js +4 -3
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/containedDecomposedHandler.d.ts +3 -2
- package/lib/service/containedDecomposedHandler.js +6 -6
- package/lib/service/containedDecomposedHandler.js.map +1 -1
- package/lib/service/customFieldHandler.d.ts +2 -1
- package/lib/service/customFieldHandler.js +2 -2
- package/lib/service/customFieldHandler.js.map +1 -1
- package/lib/service/customLabelHandler.d.ts +2 -1
- package/lib/service/customLabelHandler.js +3 -3
- package/lib/service/customLabelHandler.js.map +1 -1
- package/lib/service/customObjectHandler.d.ts +2 -1
- package/lib/service/customObjectHandler.js +2 -2
- package/lib/service/customObjectHandler.js.map +1 -1
- package/lib/service/decomposedHandler.d.ts +2 -1
- package/lib/service/decomposedHandler.js +2 -2
- package/lib/service/decomposedHandler.js.map +1 -1
- package/lib/service/diffLineInterpreter.d.ts +1 -1
- package/lib/service/diffLineInterpreter.js +16 -6
- package/lib/service/diffLineInterpreter.js.map +1 -1
- package/lib/service/flowHandler.d.ts +2 -1
- package/lib/service/flowHandler.js +2 -2
- package/lib/service/flowHandler.js.map +1 -1
- package/lib/service/inFileHandler.d.ts +8 -7
- package/lib/service/inFileHandler.js +37 -30
- package/lib/service/inFileHandler.js.map +1 -1
- package/lib/service/inFolderHandler.d.ts +2 -1
- package/lib/service/inFolderHandler.js +2 -2
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/inResourceHandler.d.ts +3 -2
- package/lib/service/inResourceHandler.js +5 -5
- package/lib/service/inResourceHandler.js.map +1 -1
- package/lib/service/objectTranslationHandler.d.ts +3 -3
- package/lib/service/objectTranslationHandler.js +15 -8
- package/lib/service/objectTranslationHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.d.ts +8 -4
- package/lib/service/reportingFolderHandler.js +5 -6
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.d.ts +8 -4
- package/lib/service/sharedFolderHandler.js +5 -6
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.d.ts +14 -7
- package/lib/service/standardHandler.js +47 -27
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/service/typeHandlerFactory.d.ts +2 -0
- package/lib/service/typeHandlerFactory.js +15 -0
- package/lib/service/typeHandlerFactory.js.map +1 -1
- package/lib/types/config.d.ts +1 -0
- package/lib/types/handlerResult.d.ts +17 -8
- package/lib/types/handlerResult.js +9 -11
- package/lib/types/handlerResult.js.map +1 -1
- package/lib/types/work.d.ts +2 -5
- package/lib/utils/LoggingDecorator.js +22 -11
- package/lib/utils/LoggingDecorator.js.map +1 -1
- package/lib/utils/changeSet.d.ts +53 -0
- package/lib/utils/changeSet.js +257 -0
- package/lib/utils/changeSet.js.map +1 -0
- package/lib/utils/configValidator.d.ts +1 -0
- package/lib/utils/configValidator.js +39 -1
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/gitLfsHelper.js +9 -1
- package/lib/utils/gitLfsHelper.js.map +1 -1
- package/lib/utils/metadataDiff/index.d.ts +28 -0
- package/lib/utils/metadataDiff/index.js +57 -0
- package/lib/utils/metadataDiff/index.js.map +1 -0
- package/lib/utils/metadataDiff/streamingDiff.d.ts +68 -0
- package/lib/utils/metadataDiff/streamingDiff.js +300 -0
- package/lib/utils/metadataDiff/streamingDiff.js.map +1 -0
- package/lib/utils/metadataDiff/xmlEventReader.d.ts +28 -0
- package/lib/utils/metadataDiff/xmlEventReader.js +221 -0
- package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -0
- package/lib/utils/metadataDiff/xmlWriter.d.ts +17 -0
- package/lib/utils/metadataDiff/xmlWriter.js +213 -0
- package/lib/utils/metadataDiff/xmlWriter.js.map +1 -0
- package/lib/utils/packageHelper.d.ts +8 -1
- package/lib/utils/packageHelper.js +25 -28
- package/lib/utils/packageHelper.js.map +1 -1
- package/lib/utils/renameResolver.d.ts +19 -0
- package/lib/utils/renameResolver.js +52 -0
- package/lib/utils/renameResolver.js.map +1 -0
- package/lib/utils/repoGitDiff.d.ts +18 -5
- package/lib/utils/repoGitDiff.js +66 -33
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/lib/utils/treeIndexScope.d.ts +1 -1
- package/lib/utils/treeIndexScope.js.map +1 -1
- package/lib/utils/txmlAdapter.d.ts +30 -0
- package/lib/utils/txmlAdapter.js +121 -0
- package/lib/utils/txmlAdapter.js.map +1 -0
- package/lib/utils/xmlHelper.d.ts +0 -5
- package/lib/utils/xmlHelper.js +0 -57
- package/lib/utils/xmlHelper.js.map +1 -1
- package/messages/delta.md +12 -0
- package/npm-shrinkwrap.json +628 -486
- package/oclif.manifest.json +9 -1
- package/package.json +53 -21
- package/lib/utils/manifestAggregator.d.ts +0 -3
- package/lib/utils/manifestAggregator.js +0 -22
- package/lib/utils/manifestAggregator.js.map +0 -1
- package/lib/utils/metadataDiff.d.ts +0 -23
- package/lib/utils/metadataDiff.js +0 -242
- package/lib/utils/metadataDiff.js.map +0 -1
package/oclif.manifest.json
CHANGED
|
@@ -146,6 +146,14 @@
|
|
|
146
146
|
"multiple": false,
|
|
147
147
|
"type": "option"
|
|
148
148
|
},
|
|
149
|
+
"changes-manifest": {
|
|
150
|
+
"char": "c",
|
|
151
|
+
"name": "changes-manifest",
|
|
152
|
+
"summary": "path to a JSON file grouping changed components by kind (add, modify, delete, rename); setting this flag also enables git rename detection",
|
|
153
|
+
"hasDynamicHelp": false,
|
|
154
|
+
"multiple": false,
|
|
155
|
+
"type": "option"
|
|
156
|
+
},
|
|
149
157
|
"ignore-whitespace": {
|
|
150
158
|
"char": "W",
|
|
151
159
|
"name": "ignore-whitespace",
|
|
@@ -191,5 +199,5 @@
|
|
|
191
199
|
]
|
|
192
200
|
}
|
|
193
201
|
},
|
|
194
|
-
"version": "6.
|
|
202
|
+
"version": "6.43.0"
|
|
195
203
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfdx-git-delta",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.43.0",
|
|
4
4
|
"description": "Generate the sfdx content in source format and destructive change from two git commits",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"salesforce",
|
|
@@ -48,50 +48,51 @@
|
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@
|
|
52
|
-
"@
|
|
53
|
-
"@salesforce/core": "^8.28.3",
|
|
51
|
+
"@oclif/core": "^4.10.6",
|
|
52
|
+
"@salesforce/core": "^8.28.4",
|
|
54
53
|
"@salesforce/sf-plugins-core": "^12.2.6",
|
|
55
|
-
"@salesforce/source-deploy-retrieve": "^12.
|
|
54
|
+
"@salesforce/source-deploy-retrieve": "^12.34.5",
|
|
56
55
|
"async": "^3.2.6",
|
|
57
56
|
"fast-equals": "^6.0.0",
|
|
58
|
-
"fast-xml-builder": "^1.1.5",
|
|
59
57
|
"fs-extra": "^11.3.4",
|
|
60
58
|
"ignore": "^7.0.5",
|
|
61
|
-
"lodash-es": "^4.18.1",
|
|
62
59
|
"simple-git": "^3.36.0",
|
|
60
|
+
"tar-stream": "3.1.8",
|
|
63
61
|
"tslib": "^2.8.1",
|
|
62
|
+
"txml": "^5.2.1",
|
|
64
63
|
"zod": "^4.3.6"
|
|
65
64
|
},
|
|
66
65
|
"overrides": {
|
|
67
|
-
"basic-ftp": "^5.3.0"
|
|
66
|
+
"basic-ftp": "^5.3.0",
|
|
67
|
+
"@nodable/base-output-builder": "1.0.5",
|
|
68
|
+
"@nodable/compact-builder": "1.0.6",
|
|
69
|
+
"path-expression-matcher": "1.5.0",
|
|
70
|
+
"strnum": "2.2.3"
|
|
68
71
|
},
|
|
69
72
|
"devDependencies": {
|
|
70
|
-
"@biomejs/biome": "2.4.
|
|
71
|
-
"@commitlint/cli": "^20.5.
|
|
73
|
+
"@biomejs/biome": "2.4.13",
|
|
74
|
+
"@commitlint/cli": "^20.5.2",
|
|
72
75
|
"@commitlint/config-conventional": "^20.5.0",
|
|
73
76
|
"@ls-lint/ls-lint": "^2.3.1",
|
|
74
|
-
"@oclif/plugin-help": "^6.2.
|
|
75
|
-
"@salesforce/cli-plugins-testkit": "^5.3.
|
|
77
|
+
"@oclif/plugin-help": "^6.2.45",
|
|
78
|
+
"@salesforce/cli-plugins-testkit": "^5.3.54",
|
|
76
79
|
"@salesforce/dev-config": "^4.3.3",
|
|
77
80
|
"@stryker-mutator/core": "^9.6.1",
|
|
78
81
|
"@stryker-mutator/vitest-runner": "^9.6.1",
|
|
79
82
|
"@types/async": "^3.2.25",
|
|
80
83
|
"@types/fs-extra": "^11.0.4",
|
|
81
|
-
"@types/lodash": "^4.17.24",
|
|
82
|
-
"@types/lodash-es": "^4.17.12",
|
|
83
84
|
"@types/node": "^25.6.0",
|
|
84
|
-
"@
|
|
85
|
+
"@types/tar-stream": "^3.1.4",
|
|
86
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
85
87
|
"husky": "^9.1.7",
|
|
86
|
-
"knip": "^6.
|
|
88
|
+
"knip": "^6.7.0",
|
|
87
89
|
"lint-staged": "^16.4.0",
|
|
88
|
-
"lodash": "^4.18.1",
|
|
89
90
|
"oclif": "^4.23.0",
|
|
90
91
|
"shx": "^0.4.0",
|
|
91
92
|
"ts-node": "^10.9.2",
|
|
92
|
-
"typescript": "^6.0.
|
|
93
|
+
"typescript": "^6.0.3",
|
|
93
94
|
"validate-branch-name": "^1.3.2",
|
|
94
|
-
"vitest": "^4.1.
|
|
95
|
+
"vitest": "^4.1.5",
|
|
95
96
|
"wireit": "^0.14.12"
|
|
96
97
|
},
|
|
97
98
|
"scripts": {
|
|
@@ -114,6 +115,8 @@
|
|
|
114
115
|
"prepublishOnly": "npm shrinkwrap",
|
|
115
116
|
"sync:registry": "TS_NODE_COMPILER_OPTIONS='{\"rootDir\":\".\"}' node --loader ts-node/esm tooling/syncInternalRegistryWithSdr.ts",
|
|
116
117
|
"test:build": "wireit",
|
|
118
|
+
"test:functional": "wireit",
|
|
119
|
+
"test:integration": "wireit",
|
|
117
120
|
"test:mutation": "wireit",
|
|
118
121
|
"test:mutation:incremental": "wireit",
|
|
119
122
|
"test:nut": "wireit",
|
|
@@ -246,7 +249,36 @@
|
|
|
246
249
|
"test": {
|
|
247
250
|
"dependencies": [
|
|
248
251
|
"test:unit",
|
|
249
|
-
"test:
|
|
252
|
+
"test:integration",
|
|
253
|
+
"test:nut",
|
|
254
|
+
"test:functional"
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"test:functional": {
|
|
258
|
+
"command": "vitest run --config vitest.functional.config.ts",
|
|
259
|
+
"files": [
|
|
260
|
+
"src/**/*.ts",
|
|
261
|
+
"__tests__/functional/**/*.test.ts",
|
|
262
|
+
"__tests__/functional/byteEquality/fixtures/**",
|
|
263
|
+
"**/tsconfig.json",
|
|
264
|
+
"vitest.functional.config.ts"
|
|
265
|
+
],
|
|
266
|
+
"output": [],
|
|
267
|
+
"dependencies": [
|
|
268
|
+
"lint"
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
"test:integration": {
|
|
272
|
+
"command": "vitest run --config vitest.integration.config.ts",
|
|
273
|
+
"files": [
|
|
274
|
+
"src/**/*.ts",
|
|
275
|
+
"__tests__/integration/**/*.test.ts",
|
|
276
|
+
"**/tsconfig.json",
|
|
277
|
+
"vitest.integration.config.ts"
|
|
278
|
+
],
|
|
279
|
+
"output": [],
|
|
280
|
+
"dependencies": [
|
|
281
|
+
"lint"
|
|
250
282
|
]
|
|
251
283
|
},
|
|
252
284
|
"test:build": {
|
|
@@ -307,7 +339,7 @@
|
|
|
307
339
|
"command": "oclif manifest && vitest run --config vitest.nut.config.ts",
|
|
308
340
|
"files": [
|
|
309
341
|
"src/**/*.ts",
|
|
310
|
-
"__tests__/**/*.nut.ts",
|
|
342
|
+
"__tests__/nut/**/*.nut.ts",
|
|
311
343
|
"messages/**",
|
|
312
344
|
"**/tsconfig.json",
|
|
313
345
|
"vitest.nut.config.ts"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
import { ManifestTarget } from '../types/handlerResult.js';
|
|
3
|
-
const addToManifest = (store, type, member) => {
|
|
4
|
-
if (!store.has(type)) {
|
|
5
|
-
store.set(type, new Set());
|
|
6
|
-
}
|
|
7
|
-
store.get(type).add(member);
|
|
8
|
-
};
|
|
9
|
-
export const aggregateManifests = (result) => {
|
|
10
|
-
const manifests = {
|
|
11
|
-
package: new Map(),
|
|
12
|
-
destructiveChanges: new Map(),
|
|
13
|
-
};
|
|
14
|
-
for (const element of result.manifests) {
|
|
15
|
-
const store = element.target === ManifestTarget.Package
|
|
16
|
-
? manifests.package
|
|
17
|
-
: manifests.destructiveChanges;
|
|
18
|
-
addToManifest(store, element.type, element.member);
|
|
19
|
-
}
|
|
20
|
-
return manifests;
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=manifestAggregator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifestAggregator.js","sourceRoot":"","sources":["../../src/utils/manifestAggregator.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,IAAY,EAAE,MAAc,EAAE,EAAE;IACtE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;IAC5B,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAa,EAAE;IACrE,MAAM,SAAS,GAAc;QAC3B,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,kBAAkB,EAAE,IAAI,GAAG,EAAE;KAC9B,CAAA;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,KAAK,GACT,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,OAAO;YACvC,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAA;QAElC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Config } from '../types/config.js';
|
|
2
|
-
import type { ManifestElement } from '../types/handlerResult.js';
|
|
3
|
-
import type { SharedFileMetadata } from '../types/metadata.js';
|
|
4
|
-
import { type XmlContent } from './xmlHelper.js';
|
|
5
|
-
type CompareEntry = Pick<ManifestElement, 'type' | 'member'>;
|
|
6
|
-
interface CompareResult {
|
|
7
|
-
added: CompareEntry[];
|
|
8
|
-
deleted: CompareEntry[];
|
|
9
|
-
toContent: XmlContent;
|
|
10
|
-
fromContent: XmlContent;
|
|
11
|
-
}
|
|
12
|
-
export interface PrunedContent {
|
|
13
|
-
xmlContent: string;
|
|
14
|
-
isEmpty: boolean;
|
|
15
|
-
}
|
|
16
|
-
export default class MetadataDiff {
|
|
17
|
-
private config;
|
|
18
|
-
private extractor;
|
|
19
|
-
constructor(config: Config, attributes: Map<string, SharedFileMetadata>);
|
|
20
|
-
compare(path: string): Promise<CompareResult>;
|
|
21
|
-
prune(toContent: XmlContent, fromContent: XmlContent): PrunedContent;
|
|
22
|
-
}
|
|
23
|
-
export {};
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
import { __decorate } from "tslib";
|
|
3
|
-
import { deepEqual } from 'fast-equals';
|
|
4
|
-
import { isUndefined } from 'lodash-es';
|
|
5
|
-
import { log } from './LoggingDecorator.js';
|
|
6
|
-
import { ATTRIBUTE_PREFIX, convertJsonToXml, parseXmlFileToJson, XML_HEADER_ATTRIBUTE_KEY, } from './xmlHelper.js';
|
|
7
|
-
/**
|
|
8
|
-
* Special key markers for metadata comparison strategies.
|
|
9
|
-
* These are used in the internalRegistry to define how metadata elements
|
|
10
|
-
* should be compared when they lack a natural unique key field.
|
|
11
|
-
*
|
|
12
|
-
* ARRAY_SPECIAL_KEY ('<array>'): Compare arrays as a whole.
|
|
13
|
-
* If arrays differ at all, include the entire 'to' array in the output.
|
|
14
|
-
* Used for metadata where order matters or elements can't be individually identified.
|
|
15
|
-
* Example: loginHours, loginIpRanges in Profile metadata.
|
|
16
|
-
*
|
|
17
|
-
* OBJECT_SPECIAL_KEY ('<object>'): Compare objects by their serialized form.
|
|
18
|
-
* Uses JSON.stringify to create a key for each element, then includes
|
|
19
|
-
* only elements from 'to' that don't exist in 'from'.
|
|
20
|
-
* Used for metadata where each element is unique but has no key field.
|
|
21
|
-
* Example: layoutAssignments in Profile metadata.
|
|
22
|
-
*
|
|
23
|
-
* When neither marker is used and no key field is defined, the comparison
|
|
24
|
-
* falls back to deep equality of the entire array, returning 'to' if different.
|
|
25
|
-
*/
|
|
26
|
-
const ARRAY_SPECIAL_KEY = '<array>';
|
|
27
|
-
const OBJECT_SPECIAL_KEY = '<object>';
|
|
28
|
-
const isEmpty = (arr) => arr.length === 0;
|
|
29
|
-
export default class MetadataDiff {
|
|
30
|
-
config;
|
|
31
|
-
extractor;
|
|
32
|
-
constructor(config, attributes) {
|
|
33
|
-
this.config = config;
|
|
34
|
-
this.extractor = new MetadataExtractor(attributes);
|
|
35
|
-
}
|
|
36
|
-
async compare(path) {
|
|
37
|
-
const toContent = await parseXmlFileToJson({ path, oid: this.config.to }, this.config);
|
|
38
|
-
const fromContent = await parseXmlFileToJson({ path, oid: this.config.from }, this.config);
|
|
39
|
-
const comparator = new MetadataComparator(this.extractor, fromContent, toContent);
|
|
40
|
-
const added = comparator.getChanges();
|
|
41
|
-
const deleted = comparator.getDeletion();
|
|
42
|
-
return { added, deleted, toContent, fromContent };
|
|
43
|
-
}
|
|
44
|
-
prune(toContent, fromContent) {
|
|
45
|
-
const transformer = new JsonTransformer(this.extractor);
|
|
46
|
-
const { prunedContent, isEmpty } = transformer.generatePartialJson(fromContent, toContent);
|
|
47
|
-
return {
|
|
48
|
-
xmlContent: convertJsonToXml(prunedContent),
|
|
49
|
-
isEmpty,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
__decorate([
|
|
54
|
-
log
|
|
55
|
-
], MetadataDiff.prototype, "compare", null);
|
|
56
|
-
__decorate([
|
|
57
|
-
log
|
|
58
|
-
], MetadataDiff.prototype, "prune", null);
|
|
59
|
-
class MetadataExtractor {
|
|
60
|
-
attributes;
|
|
61
|
-
keySelectorCache = new Map();
|
|
62
|
-
constructor(attributes) {
|
|
63
|
-
this.attributes = attributes;
|
|
64
|
-
}
|
|
65
|
-
getSubTypes(root) {
|
|
66
|
-
return Object.keys(root).filter(tag => this.attributes.has(tag));
|
|
67
|
-
}
|
|
68
|
-
getSubKeys(root) {
|
|
69
|
-
return Object.keys(root);
|
|
70
|
-
}
|
|
71
|
-
isTypePackageable(subType) {
|
|
72
|
-
return !this.attributes.get(subType)?.excluded;
|
|
73
|
-
}
|
|
74
|
-
getXmlName(subType) {
|
|
75
|
-
/* v8 ignore next -- callers pass subTypes present in attributes map */
|
|
76
|
-
return this.attributes.get(subType)?.xmlName ?? '';
|
|
77
|
-
}
|
|
78
|
-
getKeyValueSelector(subType) {
|
|
79
|
-
if (!this.keySelectorCache.has(subType)) {
|
|
80
|
-
const metadataKey = this.getKeyFieldDefinition(subType);
|
|
81
|
-
this.keySelectorCache.set(subType, elem => elem[metadataKey]);
|
|
82
|
-
}
|
|
83
|
-
return this.keySelectorCache.get(subType);
|
|
84
|
-
}
|
|
85
|
-
getKeyFieldDefinition(subType) {
|
|
86
|
-
return this.attributes.get(subType)?.key;
|
|
87
|
-
}
|
|
88
|
-
extractForSubType(root, subType) {
|
|
89
|
-
const content = root[subType];
|
|
90
|
-
return Array.isArray(content) ? content : content ? [content] : [];
|
|
91
|
-
}
|
|
92
|
-
extractRootElement(fileContent) {
|
|
93
|
-
const rootKey = this.extractRootKey(fileContent);
|
|
94
|
-
return fileContent[rootKey] ?? {};
|
|
95
|
-
}
|
|
96
|
-
extractRootKey(fileContent) {
|
|
97
|
-
return (Object.keys(fileContent).find(key => key !== XML_HEADER_ATTRIBUTE_KEY) ??
|
|
98
|
-
'');
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
class MetadataComparator {
|
|
102
|
-
extractor;
|
|
103
|
-
fromContent;
|
|
104
|
-
toContent;
|
|
105
|
-
constructor(extractor, fromContent, toContent) {
|
|
106
|
-
this.extractor = extractor;
|
|
107
|
-
this.fromContent = fromContent;
|
|
108
|
-
this.toContent = toContent;
|
|
109
|
-
}
|
|
110
|
-
getChanges() {
|
|
111
|
-
return this.compare(this.toContent, this.fromContent, this.matchAdded);
|
|
112
|
-
}
|
|
113
|
-
getDeletion() {
|
|
114
|
-
return this.compare(this.fromContent, this.toContent, this.matchDeleted);
|
|
115
|
-
}
|
|
116
|
-
compare(baseContent, targetContent, elementMatcher) {
|
|
117
|
-
const base = this.extractor.extractRootElement(baseContent);
|
|
118
|
-
const target = this.extractor.extractRootElement(targetContent);
|
|
119
|
-
const entries = [];
|
|
120
|
-
const subTypes = this.extractor.getSubTypes(base);
|
|
121
|
-
for (const subType of subTypes) {
|
|
122
|
-
if (!this.extractor.isTypePackageable(subType))
|
|
123
|
-
continue;
|
|
124
|
-
const baseMeta = this.extractor.extractForSubType(base, subType);
|
|
125
|
-
if (isEmpty(baseMeta))
|
|
126
|
-
continue;
|
|
127
|
-
const targetMeta = this.extractor.extractForSubType(target, subType);
|
|
128
|
-
const keySelector = this.extractor.getKeyValueSelector(subType);
|
|
129
|
-
const xmlName = this.extractor.getXmlName(subType);
|
|
130
|
-
// Pre-compute lookup map: O(n) instead of O(n) per element
|
|
131
|
-
const targetLookup = new Map();
|
|
132
|
-
for (const el of targetMeta) {
|
|
133
|
-
const key = keySelector(el);
|
|
134
|
-
if (key !== undefined) {
|
|
135
|
-
targetLookup.set(key, el);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
for (const elem of baseMeta) {
|
|
139
|
-
if (elementMatcher(targetLookup, keySelector, elem)) {
|
|
140
|
-
entries.push({ type: xmlName, member: keySelector(elem) });
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return entries;
|
|
145
|
-
}
|
|
146
|
-
// O(1) lookup instead of O(n) find()
|
|
147
|
-
matchAdded = (targetLookup, keySelector, elem) => {
|
|
148
|
-
const elemKey = keySelector(elem);
|
|
149
|
-
if (elemKey === undefined)
|
|
150
|
-
return true;
|
|
151
|
-
const match = targetLookup.get(elemKey);
|
|
152
|
-
return !match || !deepEqual(match, elem);
|
|
153
|
-
};
|
|
154
|
-
// O(1) lookup instead of O(n) some()
|
|
155
|
-
matchDeleted = (targetLookup, keySelector, elem) => {
|
|
156
|
-
const elemKey = keySelector(elem);
|
|
157
|
-
if (elemKey === undefined)
|
|
158
|
-
return true;
|
|
159
|
-
return !targetLookup.has(elemKey);
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
class JsonTransformer {
|
|
163
|
-
extractor;
|
|
164
|
-
constructor(extractor) {
|
|
165
|
-
this.extractor = extractor;
|
|
166
|
-
}
|
|
167
|
-
generatePartialJson(fromContent, toContent) {
|
|
168
|
-
const from = this.extractor.extractRootElement(fromContent);
|
|
169
|
-
const to = this.extractor.extractRootElement(toContent);
|
|
170
|
-
const base = {};
|
|
171
|
-
if (XML_HEADER_ATTRIBUTE_KEY in toContent) {
|
|
172
|
-
base[XML_HEADER_ATTRIBUTE_KEY] = toContent[XML_HEADER_ATTRIBUTE_KEY];
|
|
173
|
-
}
|
|
174
|
-
const rootKey = this.extractor.extractRootKey(toContent);
|
|
175
|
-
const root = {};
|
|
176
|
-
base[rootKey] = root;
|
|
177
|
-
const subKeys = this.extractor.getSubKeys(to);
|
|
178
|
-
let hasAnyChanges = false;
|
|
179
|
-
for (const key of subKeys) {
|
|
180
|
-
if (key.startsWith(ATTRIBUTE_PREFIX)) {
|
|
181
|
-
root[key] = to[key];
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
const fromMeta = this.extractor.extractForSubType(from, key);
|
|
185
|
-
const toMeta = this.extractor.extractForSubType(to, key);
|
|
186
|
-
const keyField = this.extractor.getKeyFieldDefinition(key);
|
|
187
|
-
const { content, hasChanges } = this.getPartialContent(fromMeta, toMeta, keyField);
|
|
188
|
-
if (hasChanges) {
|
|
189
|
-
hasAnyChanges = true;
|
|
190
|
-
}
|
|
191
|
-
if (!isEmpty(content)) {
|
|
192
|
-
root[key] = content;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return { prunedContent: base, isEmpty: !hasAnyChanges };
|
|
196
|
-
}
|
|
197
|
-
getPartialContent(fromMeta, toMeta, keyField) {
|
|
198
|
-
// Early return for empty arrays
|
|
199
|
-
if (isEmpty(toMeta)) {
|
|
200
|
-
return { content: [], hasChanges: false };
|
|
201
|
-
}
|
|
202
|
-
if (isEmpty(fromMeta)) {
|
|
203
|
-
return { content: toMeta, hasChanges: true };
|
|
204
|
-
}
|
|
205
|
-
if (isUndefined(keyField)) {
|
|
206
|
-
return this.getPartialContentWithoutKey(fromMeta, toMeta);
|
|
207
|
-
}
|
|
208
|
-
if (keyField === ARRAY_SPECIAL_KEY) {
|
|
209
|
-
return this.getPartialContentForArray(fromMeta, toMeta);
|
|
210
|
-
}
|
|
211
|
-
if (keyField === OBJECT_SPECIAL_KEY) {
|
|
212
|
-
return this.getPartialContentForObject(fromMeta, toMeta);
|
|
213
|
-
}
|
|
214
|
-
return this.getPartialContentWithKey(fromMeta, toMeta, keyField);
|
|
215
|
-
}
|
|
216
|
-
getPartialContentWithoutKey(fromMeta, toMeta) {
|
|
217
|
-
const hasChanges = !deepEqual(fromMeta, toMeta);
|
|
218
|
-
return { content: toMeta, hasChanges };
|
|
219
|
-
}
|
|
220
|
-
getPartialContentForArray(fromMeta, toMeta) {
|
|
221
|
-
const hasChanges = !deepEqual(fromMeta, toMeta);
|
|
222
|
-
const content = hasChanges ? toMeta : [];
|
|
223
|
-
return { content, hasChanges };
|
|
224
|
-
}
|
|
225
|
-
getPartialContentForObject(fromMeta, toMeta) {
|
|
226
|
-
const keySelector = (item) => JSON.stringify(item);
|
|
227
|
-
const fromSet = new Set(fromMeta.map(keySelector));
|
|
228
|
-
const content = toMeta.filter(item => !fromSet.has(keySelector(item)));
|
|
229
|
-
return { content, hasChanges: !isEmpty(content) };
|
|
230
|
-
}
|
|
231
|
-
getPartialContentWithKey(fromMeta, toMeta, keyField) {
|
|
232
|
-
const keySelector = (item) => item[keyField];
|
|
233
|
-
const fromMap = new Map(fromMeta.map(item => [keySelector(item), item]));
|
|
234
|
-
const content = toMeta.filter(item => {
|
|
235
|
-
const key = keySelector(item);
|
|
236
|
-
const fromItem = fromMap.get(key);
|
|
237
|
-
return isUndefined(fromItem) || !deepEqual(item, fromItem);
|
|
238
|
-
});
|
|
239
|
-
return { content, hasChanges: !isEmpty(content) };
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
//# sourceMappingURL=metadataDiff.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadataDiff.js","sourceRoot":"","sources":["../../src/utils/metadataDiff.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAKvC,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,iBAAiB,GAAG,SAAS,CAAA;AACnC,MAAM,kBAAkB,GAAG,UAAU,CAAA;AAErC,MAAM,OAAO,GAAG,CAAC,GAAc,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAA;AAkBpD,MAAM,CAAC,OAAO,OAAO,YAAY;IAIrB;IAHF,SAAS,CAAmB;IAEpC,YACU,MAAc,EACtB,UAA2C;QADnC,WAAM,GAAN,MAAM,CAAQ;QAGtB,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACpD,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,SAAS,GAAG,MAAM,kBAAkB,CACxC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAC7B,IAAI,CAAC,MAAM,CACZ,CAAA;QACD,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAC1C,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAC/B,IAAI,CAAC,MAAM,CACZ,CAAA;QAED,MAAM,UAAU,GAAG,IAAI,kBAAkB,CACvC,IAAI,CAAC,SAAS,EACd,WAAW,EACX,SAAS,CACV,CAAA;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,CAAA;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;QAExC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAA;IACnD,CAAC;IAGD,KAAK,CAAC,SAAqB,EAAE,WAAuB;QAClD,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvD,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,mBAAmB,CAChE,WAAW,EACX,SAAS,CACV,CAAA;QAED,OAAO;YACL,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC;YAC3C,OAAO;SACR,CAAA;IACH,CAAC;CACF;AAnCO;IADL,GAAG;2CAqBH;AAGD;IADC,GAAG;yCAYH;AAGH,MAAM,iBAAiB;IAGA;IAFb,gBAAgB,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE3D,YAAqB,UAA2C;QAA3C,eAAU,GAAV,UAAU,CAAiC;IAAG,CAAC;IAEpE,WAAW,CAAC,IAAgB;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,UAAU,CAAC,IAAgB;QACzB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,iBAAiB,CAAC,OAAe;QAC/B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;IAChD,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,uEAAuE;QACvE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;IACpD,CAAC;IAED,mBAAmB,CAAC,OAAe;QACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAA;YACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAY,CAAW,CAAC,CAAA;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;IAC5C,CAAC;IAED,qBAAqB,CAAC,OAAe;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAA;IAC1C,CAAC;IAED,iBAAiB,CAAC,IAAgB,EAAE,OAAe;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAA0C,CAAA;QACtE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpE,CAAC;IAED,kBAAkB,CAAC,WAAuB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAChD,OAAQ,WAAW,CAAC,OAAO,CAAgB,IAAI,EAAE,CAAA;IACnD,CAAC;IAED,cAAc,CAAC,WAAuB;QACpC,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,wBAAwB,CAAC;YACtE,EAAE,CACH,CAAA;IACH,CAAC;CACF;AAED,MAAM,kBAAkB;IAEZ;IACA;IACA;IAHV,YACU,SAA4B,EAC5B,WAAuB,EACvB,SAAqB;QAFrB,cAAS,GAAT,SAAS,CAAmB;QAC5B,gBAAW,GAAX,WAAW,CAAY;QACvB,cAAS,GAAT,SAAS,CAAY;IAC5B,CAAC;IAEJ,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACxE,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;IAC1E,CAAC;IAEO,OAAO,CACb,WAAuB,EACvB,aAAyB,EACzB,cAIY;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAA;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;QAC/D,MAAM,OAAO,GAAmB,EAAE,CAAA;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAChE,IAAI,OAAO,CAAC,QAAQ,CAAC;gBAAE,SAAQ;YAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAElD,2DAA2D;YAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAA;YAClD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;gBAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;gBAC3B,CAAC;YACH,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,IAAI,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAE,EAAE,CAAC,CAAA;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,qCAAqC;IAC7B,UAAU,GAAG,CACnB,YAAqC,EACrC,WAA0B,EAC1B,IAAgB,EAChB,EAAE;QACF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACtC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,qCAAqC;IAC7B,YAAY,GAAG,CACrB,YAAqC,EACrC,WAA0B,EAC1B,IAAgB,EAChB,EAAE;QACF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACtC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC,CAAA;CACF;AAOD,MAAM,eAAe;IACC;IAApB,YAAoB,SAA4B;QAA5B,cAAS,GAAT,SAAS,CAAmB;IAAG,CAAC;IAEpD,mBAAmB,CACjB,WAAuB,EACvB,SAAqB;QAErB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAA;QAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACvD,MAAM,IAAI,GAAe,EAAE,CAAA;QAC3B,IAAI,wBAAwB,IAAI,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAA;QACtE,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QACxD,MAAM,IAAI,GAAe,EAAE,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAE7C,IAAI,aAAa,GAAG,KAAK,CAAA;QACzB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;gBACnB,SAAQ;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;YAC1D,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,iBAAiB,CACpD,QAAQ,EACR,MAAM,EACN,QAAQ,CACT,CAAA;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,GAAG,IAAI,CAAA;YACtB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;YACrB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,CAAA;IACzD,CAAC;IAEO,iBAAiB,CACvB,QAAsB,EACtB,MAAoB,EACpB,QAA4B;QAE5B,gCAAgC;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;QAC3C,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;QAC9C,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClE,CAAC;IAEO,2BAA2B,CACjC,QAAsB,EACtB,MAAoB;QAEpB,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;IACxC,CAAC;IAEO,yBAAyB,CAC/B,QAAsB,EACtB,MAAoB;QAEpB,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QACxC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;IAChC,CAAC;IAEO,0BAA0B,CAChC,QAAsB,EACtB,MAAoB;QAEpB,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;IACnD,CAAC;IAEO,wBAAwB,CAC9B,QAAsB,EACtB,MAAoB,EACpB,QAAgB;QAEhB,MAAM,WAAW,GAAG,CAAC,IAAgB,EAAE,EAAE,CACvC,IAAI,CAAC,QAAQ,CAAuB,CAAA;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACnC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjC,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;IACnD,CAAC;CACF"}
|