sf-decomposer 7.1.0 → 7.2.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.
Files changed (31) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +149 -87
  3. package/lib/core/decomposeMetadataTypes.js +1 -1
  4. package/lib/core/decomposeMetadataTypes.js.map +1 -1
  5. package/lib/helpers/types.d.ts +9 -2
  6. package/lib/metadata/getRegistryValuesBySuffix.d.ts +1 -1
  7. package/lib/metadata/getRegistryValuesBySuffix.js +10 -3
  8. package/lib/metadata/getRegistryValuesBySuffix.js.map +1 -1
  9. package/lib/metadata/parseManifest.js +28 -12
  10. package/lib/metadata/parseManifest.js.map +1 -1
  11. package/lib/metadata/registry/manifestXml.d.ts +13 -0
  12. package/lib/metadata/registry/manifestXml.js +74 -0
  13. package/lib/metadata/registry/manifestXml.js.map +1 -0
  14. package/lib/metadata/registry/metadataRegistry.json +5417 -0
  15. package/lib/metadata/registry/registryAccess.d.ts +14 -0
  16. package/lib/metadata/registry/registryAccess.js +52 -0
  17. package/lib/metadata/registry/registryAccess.js.map +1 -0
  18. package/lib/metadata/registry/resolveManifestComponents.d.ts +13 -0
  19. package/lib/metadata/registry/resolveManifestComponents.js +60 -0
  20. package/lib/metadata/registry/resolveManifestComponents.js.map +1 -0
  21. package/lib/metadata/registry/types.d.ts +23 -0
  22. package/lib/metadata/registry/types.js +3 -0
  23. package/lib/metadata/registry/types.js.map +1 -0
  24. package/lib/metadata/registry/xmlParser.d.ts +5 -0
  25. package/lib/metadata/registry/xmlParser.js +177 -0
  26. package/lib/metadata/registry/xmlParser.js.map +1 -0
  27. package/lib/service/decompose/decomposeFileHandler.d.ts +1 -1
  28. package/lib/service/decompose/decomposeFileHandler.js +17 -18
  29. package/lib/service/decompose/decomposeFileHandler.js.map +1 -1
  30. package/oclif.manifest.json +1 -1
  31. package/package.json +70 -15
@@ -0,0 +1,14 @@
1
+ import { MetadataType } from './types.js';
2
+ /**
3
+ * Minimal reimplementation of @salesforce/source-deploy-retrieve's `RegistryAccess`, limited to
4
+ * the lookups this plugin needs (name/suffix/parent resolution) and backed by the vendored
5
+ * metadataRegistry.json instead of the SDR package. Does not support sfdx-project.json
6
+ * `registryCustomizations` / `sourceBehaviorOptions` (SDR's project-level registry variants) —
7
+ * no caller here relied on that.
8
+ */
9
+ export declare class RegistryAccess {
10
+ readonly childTypes: Readonly<Record<string, string>>;
11
+ getTypeByName(name: string): MetadataType;
12
+ getTypeBySuffix(suffix: string): MetadataType | undefined;
13
+ getParentType(childName: string): MetadataType | undefined;
14
+ }
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+ import { readFileSync } from 'node:fs';
3
+ import { fileURLToPath } from 'node:url';
4
+ // Read (not statically imported) so the compiled lib/ output doesn't need the tsconfig's
5
+ // "module" target bumped just for JSON import-attribute syntax; the wireit "compile" step
6
+ // copies metadataRegistry.json next to this file's compiled output.
7
+ // Stryker disable next-line StringLiteral -- mutating this path breaks module load for every
8
+ // test in the suite (readFileSync/JSON.parse throws at import time), so it's exhaustively
9
+ // exercised already; there's no meaningful assertion to write against a hardcoded sibling path.
10
+ const registryPath = fileURLToPath(new URL('./metadataRegistry.json', import.meta.url));
11
+ const registry = JSON.parse(readFileSync(registryPath, 'utf-8'));
12
+ /**
13
+ * Minimal reimplementation of @salesforce/source-deploy-retrieve's `RegistryAccess`, limited to
14
+ * the lookups this plugin needs (name/suffix/parent resolution) and backed by the vendored
15
+ * metadataRegistry.json instead of the SDR package. Does not support sfdx-project.json
16
+ * `registryCustomizations` / `sourceBehaviorOptions` (SDR's project-level registry variants) —
17
+ * no caller here relied on that.
18
+ */
19
+ export class RegistryAccess {
20
+ childTypes = registry.childTypes;
21
+ getTypeByName(name) {
22
+ const lower = name.toLowerCase().trim();
23
+ const parentTypeId = registry.childTypes[lower];
24
+ if (parentTypeId) {
25
+ // Stryker disable next-line OptionalChaining -- defensive guard; every key in childTypes
26
+ // is guaranteed (by the vendored registry's own invariants) to resolve to a real parentType
27
+ // with a children.types entry for that key.
28
+ const childType = registry.types[parentTypeId]?.children?.types[lower];
29
+ /* v8 ignore next -- defensive guard; the vendored registry is always internally consistent */
30
+ // Stryker disable next-line ConditionalExpression -- same registry invariant as above.
31
+ if (!childType) {
32
+ throw new Error(`Metadata registry has no child type definition for '${lower}' under '${parentTypeId}'.`);
33
+ }
34
+ return childType;
35
+ }
36
+ const type = registry.types[lower];
37
+ if (!type) {
38
+ throw new Error(`Metadata type not found in registry for name: ${name}.`);
39
+ }
40
+ return type.aliasFor ? registry.types[type.aliasFor] : type;
41
+ }
42
+ getTypeBySuffix(suffix) {
43
+ const typeId = registry.suffixes[suffix];
44
+ return typeId ? this.getTypeByName(typeId) : undefined;
45
+ }
46
+ getParentType(childName) {
47
+ const lower = childName.toLowerCase().trim();
48
+ const parentTypeId = registry.childTypes[lower];
49
+ return parentTypeId ? registry.types[parentTypeId] : undefined;
50
+ }
51
+ }
52
+ //# sourceMappingURL=registryAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registryAccess.js","sourceRoot":"","sources":["../../../src/metadata/registry/registryAccess.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,yFAAyF;AACzF,0FAA0F;AAC1F,oEAAoE;AACpE,6FAA6F;AAC7F,0FAA0F;AAC1F,gGAAgG;AAChG,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,yBAAyB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAyB,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAChB,UAAU,GAAqC,QAAQ,CAAC,UAAU,CAAC;IAE5E,aAAa,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,YAAY,EAAE,CAAC;YACjB,yFAAyF;YACzF,4FAA4F;YAC5F,4CAA4C;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACvE,8FAA8F;YAC9F,uFAAuF;YACvF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,uDAAuD,KAAK,YAAY,YAAY,IAAI,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { RegistryAccess } from './registryAccess.js';
2
+ import { MetadataType } from './types.js';
3
+ export type ManifestComponent = {
4
+ fullName: string;
5
+ type: MetadataType;
6
+ };
7
+ /**
8
+ * Resolves a package.xml manifest's declared types/members into metadata components (fullName +
9
+ * registry type), replicating the parts of SDR's `ManifestResolver.resolve` this plugin relies
10
+ * on. Unlike SDR's resolver, this never reads the local source tree -- callers already walk the
11
+ * package directories themselves (see parseManifest.ts) to find each component's actual file.
12
+ */
13
+ export declare function resolveManifestComponents(manifestContents: string, registry: RegistryAccess): ManifestComponent[];
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+ import { parseManifestXml } from './manifestXml.js';
3
+ // Mostly for parents of InFolder types to strip off trailing "/" characters in fullNames.
4
+ // Otherwise just returns the fullName. Ported from SDR's ManifestResolver.
5
+ function resolveFullName(fullName, parentType) {
6
+ return parentType?.folderContentType && fullName.endsWith('/') ? fullName.slice(0, -1) : fullName;
7
+ }
8
+ // Use the folderType instead of the type from the manifest when:
9
+ // 1. InFolder types: (report, dashboard, emailTemplate, document)
10
+ // 1a. type.inFolder === true AND
11
+ // 1b. The fullName doesn't contain a forward slash character AND
12
+ // 1c. The fullName with a slash appended is contained in another member entry
13
+ // OR
14
+ // 2. Non-InFolder, folder types: (territory2, territory2Model, territory2Type, territory2Rule)
15
+ // 2a. type.inFolder !== true AND
16
+ // 2b. type.folderType has a value AND
17
+ // 2c. This type's parent type has a folderType that doesn't match its own id.
18
+ // Ported from SDR's ManifestResolver.
19
+ function isMemberNestedInFolder(fullName, type, parentType, members) {
20
+ const isInFolderType = type.inFolder;
21
+ const isNestedInFolder = !fullName.includes('/') || members.some((m) => m.includes(`${fullName}/`));
22
+ // Stryker disable next-line ConditionalExpression -- defensive guard; in the current vendored
23
+ // registry every non-InFolder type with a folderType (Territory2 and friends) points at a
24
+ // folder type whose own folderType equals its id, so this is always false when it's actually
25
+ // selected below (isInFolderType is false for exactly those types).
26
+ const isNonMatchingFolder = parentType.folderType !== parentType.id;
27
+ return isInFolderType ? isNestedInFolder : isNonMatchingFolder;
28
+ }
29
+ // Resolve the correct metadata type from metadata entries in a manifest. Parents of InFolder
30
+ // types can be detected by looking for a trailing "/" character. Ported from SDR's ManifestResolver.
31
+ function resolveType(fullName, type, members, parentType) {
32
+ /* v8 ignore next 3 -- defensive guard; the only caller only invokes this once parentType and
33
+ type.folderType are both already known truthy (parentType is derived from type.folderType) */
34
+ // Stryker disable next-line ConditionalExpression, LogicalOperator
35
+ if (!parentType || !type.folderType) {
36
+ return type;
37
+ }
38
+ if (parentType.folderContentType && fullName.endsWith('/')) {
39
+ return parentType;
40
+ }
41
+ return isMemberNestedInFolder(fullName, type, parentType, members) ? parentType : type;
42
+ }
43
+ /**
44
+ * Resolves a package.xml manifest's declared types/members into metadata components (fullName +
45
+ * registry type), replicating the parts of SDR's `ManifestResolver.resolve` this plugin relies
46
+ * on. Unlike SDR's resolver, this never reads the local source tree -- callers already walk the
47
+ * package directories themselves (see parseManifest.ts) to find each component's actual file.
48
+ */
49
+ export function resolveManifestComponents(manifestContents, registry) {
50
+ const { types } = parseManifestXml(manifestContents);
51
+ return types.flatMap(({ name, members }) => {
52
+ const type = registry.getTypeByName(name);
53
+ const parentType = type.folderType ? registry.getTypeByName(type.folderType) : undefined;
54
+ return members.map((fullName) => ({
55
+ fullName: resolveFullName(fullName, parentType),
56
+ type: !parentType ? type : resolveType(fullName, type, members, parentType),
57
+ }));
58
+ });
59
+ }
60
+ //# sourceMappingURL=resolveManifestComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveManifestComponents.js","sourceRoot":"","sources":["../../../src/metadata/registry/resolveManifestComponents.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD,0FAA0F;AAC1F,2EAA2E;AAC3E,SAAS,eAAe,CAAC,QAAgB,EAAE,UAAoC;IAC7E,OAAO,UAAU,EAAE,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpG,CAAC;AAED,iEAAiE;AACjE,mEAAmE;AACnE,oCAAoC;AACpC,oEAAoE;AACpE,iFAAiF;AACjF,KAAK;AACL,gGAAgG;AAChG,oCAAoC;AACpC,yCAAyC;AACzC,iFAAiF;AACjF,sCAAsC;AACtC,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,IAAkB,EAClB,UAAwB,EACxB,OAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;IACrC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IACpG,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,oEAAoE;IACpE,MAAM,mBAAmB,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;IACpE,OAAO,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACjE,CAAC;AAED,6FAA6F;AAC7F,qGAAqG;AACrG,SAAS,WAAW,CAClB,QAAgB,EAChB,IAAkB,EAClB,OAAiB,EACjB,UAAoC;IAEpC;oGACgG;IAChG,mEAAmE;IACnE,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,gBAAwB,EAAE,QAAwB;IAC1F,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAChC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;SAC5E,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type MetadataType = {
2
+ id: string;
3
+ name: string;
4
+ suffix?: string;
5
+ directoryName: string;
6
+ strictDirectoryName?: boolean;
7
+ folderType?: string;
8
+ folderContentType?: string;
9
+ inFolder?: boolean;
10
+ aliasFor?: string;
11
+ strategies?: {
12
+ adapter?: string;
13
+ };
14
+ children?: {
15
+ types: Record<string, MetadataType>;
16
+ };
17
+ };
18
+ export type MetadataRegistryData = {
19
+ types: Record<string, MetadataType>;
20
+ childTypes: Record<string, string>;
21
+ suffixes: Record<string, string>;
22
+ strictDirectoryNames: Record<string, string>;
23
+ };
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/metadata/registry/types.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type XmlNode = {
2
+ tagName: string;
3
+ children: Array<XmlNode | string>;
4
+ };
5
+ export declare function parseXml(xml: string): XmlNode[];
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+ const NAMED_ENTITIES = {
3
+ amp: '&',
4
+ lt: '<',
5
+ gt: '>',
6
+ quot: '"',
7
+ apos: "'",
8
+ };
9
+ function decodeNumericEntity(entity) {
10
+ const codePoint = entity[1] === 'x' ? Number.parseInt(entity.slice(2), 16) : Number.parseInt(entity.slice(1), 10);
11
+ return String.fromCodePoint(codePoint);
12
+ }
13
+ function decodeEntities(text) {
14
+ return text.replace(/&(#x[0-9a-fA-F]+|#\d+|[a-zA-Z]+);/g, (match, entity) => entity.startsWith('#') ? decodeNumericEntity(entity) : (NAMED_ENTITIES[entity] ?? match));
15
+ }
16
+ /**
17
+ * Minimal recursive-descent XML parser scoped to Salesforce package.xml manifests:
18
+ * elements, attributes (skipped -- unused by callers), text, entities, comments,
19
+ * and the leading <?xml ?> declaration. No DTD/CDATA support since manifests don't use them.
20
+ *
21
+ * Implemented as flat methods (not nested closures) so each parsing concern is its own unit.
22
+ */
23
+ class XmlCursor {
24
+ xml;
25
+ i = 0;
26
+ length;
27
+ constructor(xml) {
28
+ this.xml = xml;
29
+ this.length = xml.length;
30
+ }
31
+ atEnd() {
32
+ return this.i >= this.length;
33
+ }
34
+ startsWith(token) {
35
+ return this.xml.startsWith(token, this.i);
36
+ }
37
+ skipWhitespace() {
38
+ // Stryker disable next-line ConditionalExpression, EqualityOperator -- at i===length, xml[i]
39
+ // is undefined and /\s/.test(undefined) is false, so the loop always stops there regardless
40
+ // of whether the bound check is `<` or `<=`.
41
+ while (this.i < this.length && /\s/.test(this.xml[this.i]))
42
+ this.i++;
43
+ }
44
+ parseName() {
45
+ const start = this.i;
46
+ // Stryker disable next-line EqualityOperator -- an off-by-one bound (i<=length) only lets the
47
+ // loop run one extra step to length+1; xml.slice clamps beyond the string end and every later
48
+ // bound check uses >=, so the extra step is unobservable.
49
+ while (this.i < this.length && !/[\s/>]/.test(this.xml[this.i]))
50
+ this.i++;
51
+ if (this.i === start) {
52
+ throw new Error(`expected element name at position ${this.i}`);
53
+ }
54
+ return this.xml.slice(start, this.i);
55
+ }
56
+ parseAttribute() {
57
+ // Stryker disable next-line EqualityOperator -- same reasoning as parseName's bound check.
58
+ while (this.i < this.length && !/[\s=/>]/.test(this.xml[this.i]))
59
+ this.i++;
60
+ this.skipWhitespace();
61
+ if (this.xml[this.i] !== '=') {
62
+ throw new Error(`expected "=" in attribute at position ${this.i}`);
63
+ }
64
+ this.i++;
65
+ this.skipWhitespace();
66
+ const quote = this.xml[this.i];
67
+ if (quote !== '"' && quote !== "'") {
68
+ throw new Error(`expected quoted attribute value at position ${this.i}`);
69
+ }
70
+ this.i++;
71
+ const end = this.xml.indexOf(quote, this.i);
72
+ if (end === -1) {
73
+ throw new Error('unterminated attribute value');
74
+ }
75
+ this.i = end + 1;
76
+ }
77
+ skipAttributes() {
78
+ while (true) {
79
+ this.skipWhitespace();
80
+ if (this.atEnd()) {
81
+ throw new Error('unexpected end of input inside a tag');
82
+ }
83
+ const ch = this.xml[this.i];
84
+ if (ch === '>' || ch === '/')
85
+ return;
86
+ this.parseAttribute();
87
+ }
88
+ }
89
+ skipComment() {
90
+ const end = this.xml.indexOf('-->', this.i + 4);
91
+ if (end === -1) {
92
+ throw new Error('unterminated comment');
93
+ }
94
+ this.i = end + 3;
95
+ }
96
+ skipDeclaration() {
97
+ const end = this.xml.indexOf('?>', this.i + 2);
98
+ if (end === -1) {
99
+ throw new Error('unterminated processing instruction');
100
+ }
101
+ this.i = end + 2;
102
+ }
103
+ parseClosingTag(tagName) {
104
+ const closeEnd = this.xml.indexOf('>', this.i + 2);
105
+ if (closeEnd === -1) {
106
+ throw new Error(`unterminated closing tag for <${tagName}>`);
107
+ }
108
+ const closeName = this.xml.slice(this.i + 2, closeEnd).trim();
109
+ if (closeName !== tagName) {
110
+ throw new Error(`mismatched closing tag </${closeName}> for <${tagName}>`);
111
+ }
112
+ this.i = closeEnd + 1;
113
+ }
114
+ parseTextNode(children) {
115
+ const nextTag = this.xml.indexOf('<', this.i);
116
+ const textEnd = nextTag === -1 ? this.length : nextTag;
117
+ children.push(decodeEntities(this.xml.slice(this.i, textEnd)));
118
+ this.i = textEnd;
119
+ }
120
+ parseChildren(tagName) {
121
+ const children = [];
122
+ while (true) {
123
+ if (this.atEnd()) {
124
+ throw new Error(`unterminated element <${tagName}>`);
125
+ }
126
+ if (this.startsWith('<!--')) {
127
+ this.skipComment();
128
+ continue;
129
+ }
130
+ if (this.startsWith('</')) {
131
+ this.parseClosingTag(tagName);
132
+ return children;
133
+ }
134
+ if (this.xml[this.i] === '<') {
135
+ children.push(this.parseElement());
136
+ continue;
137
+ }
138
+ this.parseTextNode(children);
139
+ }
140
+ }
141
+ parseElement() {
142
+ this.i++; // consume '<'
143
+ const tagName = this.parseName();
144
+ this.skipAttributes();
145
+ if (this.xml[this.i] === '/') {
146
+ this.i += 2; // consume '/>'
147
+ return { tagName, children: [] };
148
+ }
149
+ this.i++; // consume '>'
150
+ return { tagName, children: this.parseChildren(tagName) };
151
+ }
152
+ parseDocument() {
153
+ const roots = [];
154
+ while (!this.atEnd()) {
155
+ this.skipWhitespace();
156
+ if (this.atEnd())
157
+ break;
158
+ if (this.startsWith('<!--')) {
159
+ this.skipComment();
160
+ continue;
161
+ }
162
+ if (this.startsWith('<?')) {
163
+ this.skipDeclaration();
164
+ continue;
165
+ }
166
+ if (this.xml[this.i] !== '<') {
167
+ throw new Error(`unexpected content outside the root element at position ${this.i}`);
168
+ }
169
+ roots.push(this.parseElement());
170
+ }
171
+ return roots;
172
+ }
173
+ }
174
+ export function parseXml(xml) {
175
+ return new XmlCursor(xml).parseDocument();
176
+ }
177
+ //# sourceMappingURL=xmlParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmlParser.js","sourceRoot":"","sources":["../../../src/metadata/registry/xmlParser.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,4 @@ export declare function decomposeFileHandler(metaAttributes: {
6
6
  strictDirectoryName: boolean;
7
7
  folderType: string;
8
8
  uniqueIdElements: string;
9
- }, typeResolved: ResolvedDecomposeTypeOptions, ignorePath: string, overrides?: DecomposerOverride[], manifestXmlPaths?: Set<string>): Promise<void>;
9
+ }, typeResolved: ResolvedDecomposeTypeOptions, ignorePath: string, overrides?: DecomposerOverride[], manifestXmlPaths?: Set<string>, repoRoot?: string): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  import { readdir, stat } from 'node:fs/promises';
3
- import { basename, dirname, join, relative, resolve } from 'node:path';
3
+ import { basename, dirname, join, resolve } from 'node:path';
4
4
  import { DisassembleXMLFileHandler } from 'config-disassembler';
5
5
  import { hasComponentOverridesForType, resolveDecomposeOptionsForComponent, } from '../../helpers/configOverrides.js';
6
6
  import { CONCURRENCY_LIMITS, CUSTOM_LABELS_FILE } from '../../helpers/constants.js';
@@ -8,17 +8,17 @@ import { pLimit } from '../../helpers/pLimit.js';
8
8
  import { moveAndRenameLabels, prePurgeLabels } from './customLabels.js';
9
9
  import { renameWorkflows } from './renameWorkflows.js';
10
10
  import { resolveEffectiveDisassembleOptions } from './resolveEffectiveDisassembleOptions.js';
11
- export async function decomposeFileHandler(metaAttributes, typeResolved, ignorePath, overrides, manifestXmlPaths) {
11
+ export async function decomposeFileHandler(metaAttributes, typeResolved, ignorePath, overrides, manifestXmlPaths, repoRoot) {
12
12
  const { metadataPaths, metaSuffix, strictDirectoryName, folderType, uniqueIdElements } = metaAttributes;
13
13
  if (manifestXmlPaths && manifestXmlPaths.size > 0) {
14
- await decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeResolved, ignorePath, metaSuffix, strictDirectoryName, folderType, overrides);
14
+ await decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeResolved, ignorePath, metaSuffix, strictDirectoryName, folderType, overrides, repoRoot);
15
15
  return;
16
16
  }
17
17
  // Limit concurrent package directory processing to prevent file system overload
18
18
  const limit = pLimit(CONCURRENCY_LIMITS.PACKAGE_DIRS);
19
19
  const tasks = metadataPaths.map((metadataPath) => limit(async () => {
20
20
  if (strictDirectoryName || folderType) {
21
- await subDirectoryHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides);
21
+ await subDirectoryHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides, repoRoot);
22
22
  }
23
23
  else if (metaSuffix === 'labels') {
24
24
  // Labels live in a single shared file; component-scope overrides are not applicable.
@@ -26,15 +26,14 @@ export async function decomposeFileHandler(metaAttributes, typeResolved, ignoreP
26
26
  if (typeResolved.prepurge)
27
27
  await prePurgeLabels(metadataPath);
28
28
  const absoluteLabelFilePath = resolve(metadataPath, CUSTOM_LABELS_FILE);
29
- const relativeLabelFilePath = relative(process.cwd(), absoluteLabelFilePath);
30
- await disassembleHandler(relativeLabelFilePath, uniqueIdElements, { ...typeResolved, prepurge: false }, ignorePath, metaSuffix);
29
+ await disassembleHandler(absoluteLabelFilePath, uniqueIdElements, { ...typeResolved, prepurge: false }, ignorePath, metaSuffix, repoRoot);
31
30
  await moveAndRenameLabels(metadataPath);
32
31
  }
33
32
  else if (hasComponentOverridesForType(metaSuffix, overrides)) {
34
- await perFileHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides);
33
+ await perFileHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides, repoRoot);
35
34
  }
36
35
  else {
37
- await disassembleHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix);
36
+ await disassembleHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, repoRoot);
38
37
  }
39
38
  if (metaSuffix === 'workflow') {
40
39
  await renameWorkflows(metadataPath);
@@ -42,7 +41,7 @@ export async function decomposeFileHandler(metaAttributes, typeResolved, ignoreP
42
41
  }));
43
42
  await Promise.all(tasks);
44
43
  }
45
- async function decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeResolved, ignorePath, metaSuffix, strictDirectoryName, folderType, overrides) {
44
+ async function decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeResolved, ignorePath, metaSuffix, strictDirectoryName, folderType, overrides, repoRoot) {
46
45
  const limit = pLimit(CONCURRENCY_LIMITS.PACKAGE_DIRS);
47
46
  const xmlPaths = Array.from(manifestXmlPaths);
48
47
  if (metaSuffix === 'labels') {
@@ -52,8 +51,7 @@ async function decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeRes
52
51
  if (typeResolved.prepurge)
53
52
  await prePurgeLabels(labelDir);
54
53
  const absoluteLabelFilePath = resolve(labelDir, CUSTOM_LABELS_FILE);
55
- const relativeLabelFilePath = relative(process.cwd(), absoluteLabelFilePath);
56
- await disassembleHandler(relativeLabelFilePath, uniqueIdElements, { ...typeResolved, prepurge: false }, ignorePath, metaSuffix);
54
+ await disassembleHandler(absoluteLabelFilePath, uniqueIdElements, { ...typeResolved, prepurge: false }, ignorePath, metaSuffix, repoRoot);
57
55
  await moveAndRenameLabels(labelDir);
58
56
  }));
59
57
  await Promise.all(tasks);
@@ -68,7 +66,7 @@ async function decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeRes
68
66
  const tasks = Array.from(parentDirs).map((parentDir) => limit(() => {
69
67
  const fullName = basename(parentDir);
70
68
  const resolved = resolveDecomposeOptionsForComponent(metaSuffix, fullName, typeResolved, overrides);
71
- return disassembleHandler(parentDir, uniqueIdElements, resolved, ignorePath, metaSuffix);
69
+ return disassembleHandler(parentDir, uniqueIdElements, resolved, ignorePath, metaSuffix, repoRoot);
72
70
  }));
73
71
  await Promise.all(tasks);
74
72
  return;
@@ -76,7 +74,7 @@ async function decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeRes
76
74
  const tasks = xmlPaths.map((xmlPath) => limit(() => {
77
75
  const fullName = stripMetaSuffix(basename(xmlPath), metaSuffix);
78
76
  const resolved = resolveDecomposeOptionsForComponent(metaSuffix, fullName, typeResolved, overrides);
79
- return disassembleHandler(xmlPath, uniqueIdElements, resolved, ignorePath, metaSuffix);
77
+ return disassembleHandler(xmlPath, uniqueIdElements, resolved, ignorePath, metaSuffix, repoRoot);
80
78
  }));
81
79
  await Promise.all(tasks);
82
80
  if (metaSuffix === 'workflow') {
@@ -87,7 +85,7 @@ async function decomposeFromManifest(manifestXmlPaths, uniqueIdElements, typeRes
87
85
  }
88
86
  }
89
87
  }
90
- async function disassembleHandler(filePath, uniqueIdElements, options, ignorePath, metaSuffix) {
88
+ async function disassembleHandler(filePath, uniqueIdElements, options, ignorePath, metaSuffix, repoRoot) {
91
89
  const handler = new DisassembleXMLFileHandler();
92
90
  const { strategy, multiLevel, splitTags, sidecarElements } = resolveEffectiveDisassembleOptions(metaSuffix, options);
93
91
  await handler.disassemble({
@@ -101,6 +99,7 @@ async function disassembleHandler(filePath, uniqueIdElements, options, ignorePat
101
99
  multiLevel,
102
100
  splitTags,
103
101
  sidecarElements,
102
+ baseDir: repoRoot,
104
103
  });
105
104
  }
106
105
  function stripMetaSuffix(fileName, metaSuffix) {
@@ -108,7 +107,7 @@ function stripMetaSuffix(fileName, metaSuffix) {
108
107
  /* istanbul ignore next -- @preserve: parseManifest always builds xml paths from `${member}.${suffix}-meta.xml`. */
109
108
  return fileName.endsWith(metaEnding) ? fileName.slice(0, -metaEnding.length) : fileName;
110
109
  }
111
- async function subDirectoryHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides) {
110
+ async function subDirectoryHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides, repoRoot) {
112
111
  const subFiles = await readdir(metadataPath);
113
112
  // Limit concurrent subdirectory stat operations
114
113
  const statLimit = pLimit(CONCURRENCY_LIMITS.FILE_OPERATIONS);
@@ -125,7 +124,7 @@ async function subDirectoryHandler(metadataPath, uniqueIdElements, typeResolved,
125
124
  .map(({ subFilePath }) => processLimit(() => {
126
125
  const fullName = basename(subFilePath);
127
126
  const resolved = resolveDecomposeOptionsForComponent(metaSuffix, fullName, typeResolved, overrides);
128
- return disassembleHandler(subFilePath, uniqueIdElements, resolved, ignorePath, metaSuffix);
127
+ return disassembleHandler(subFilePath, uniqueIdElements, resolved, ignorePath, metaSuffix, repoRoot);
129
128
  }));
130
129
  await Promise.all(processTasks);
131
130
  }
@@ -134,7 +133,7 @@ async function subDirectoryHandler(metadataPath, uniqueIdElements, typeResolved,
134
133
  * metadata type. Walks the type's package directory, resolves options per file, and disassembles
135
134
  * each parent metadata XML individually so different components can use different strategies/formats.
136
135
  */
137
- async function perFileHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides) {
136
+ async function perFileHandler(metadataPath, uniqueIdElements, typeResolved, ignorePath, metaSuffix, overrides, repoRoot) {
138
137
  const metaEnding = `.${metaSuffix}-meta.xml`;
139
138
  const entries = await readdir(metadataPath, { withFileTypes: true });
140
139
  const xmlEntries = entries.filter((entry) => entry.isFile() && entry.name.endsWith(metaEnding));
@@ -143,7 +142,7 @@ async function perFileHandler(metadataPath, uniqueIdElements, typeResolved, igno
143
142
  const filePath = join(metadataPath, entry.name);
144
143
  const fullName = entry.name.slice(0, -metaEnding.length);
145
144
  const resolved = resolveDecomposeOptionsForComponent(metaSuffix, fullName, typeResolved, overrides);
146
- return disassembleHandler(filePath, uniqueIdElements, resolved, ignorePath, metaSuffix);
145
+ return disassembleHandler(filePath, uniqueIdElements, resolved, ignorePath, metaSuffix, repoRoot);
147
146
  }));
148
147
  await Promise.all(tasks);
149
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decomposeFileHandler.js","sourceRoot":"","sources":["../../../src/service/decompose/decomposeFileHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAE5B,mCAAmC,GACpC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kCAAkC,EAAE,MAAM,yCAAyC,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,cAMC,EACD,YAA0C,EAC1C,UAAkB,EAClB,SAAgC,EAChC,gBAA8B;IAE9B,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,cAAc,CAAC;IAExG,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,qBAAqB,CACzB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,SAAS,CACV,CAAC;QACF,OAAO;IACT,CAAC;IAED,gFAAgF;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAC/C,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,mBAAmB,IAAI,UAAU,EAAE,CAAC;YACtC,MAAM,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC7G,CAAC;aAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,qFAAqF;YACrF,4EAA4E;YAC5E,IAAI,YAAY,CAAC,QAAQ;gBAAE,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;YACxE,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAE7E,MAAM,kBAAkB,CACtB,qBAAqB,EACrB,gBAAgB,EAChB,EAAE,GAAG,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,EACpC,UAAU,EACV,UAAU,CACX,CAAC;YACF,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,4BAA4B,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YAC/D,MAAM,cAAc,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACxG,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,gBAA6B,EAC7B,gBAAwB,EACxB,YAA0C,EAC1C,UAAkB,EAClB,UAAkB,EAClB,mBAA4B,EAC5B,UAAkB,EAClB,SAAgC;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,mFAAmF;QACnF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,YAAY,CAAC,QAAQ;gBAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,qBAAqB,GAAG,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YACpE,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAC7E,MAAM,kBAAkB,CACtB,qBAAqB,EACrB,gBAAgB,EAChB,EAAE,GAAG,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,EACpC,UAAU,EACV,UAAU,CACX,CAAC;YACF,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CACH,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,mBAAmB,IAAI,UAAU,EAAE,CAAC;QACtC,iGAAiG;QACjG,gHAAgH;QAChH,qGAAqG;QACrG,mEAAmE;QACnE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACrD,KAAK,CAAC,GAAG,EAAE;YACT,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,mCAAmC,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACpG,OAAO,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC3F,CAAC,CAAC,CACH,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACrC,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,mCAAmC,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACpG,OAAO,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACzF,CAAC,CAAC,CACH,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEzB,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,4CAA4C;YAC5C,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,gBAAwB,EACxB,OAAqC,EACrC,UAAkB,EAClB,UAAkB;IAElB,MAAM,OAAO,GAA8B,IAAI,yBAAyB,EAAE,CAAC;IAC3E,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,kCAAkC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAErH,MAAM,OAAO,CAAC,WAAW,CAAC;QACxB,QAAQ;QACR,gBAAgB;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ;QACR,UAAU;QACV,SAAS;QACT,eAAe;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,UAAkB;IAC3D,MAAM,UAAU,GAAG,IAAI,UAAU,WAAW,CAAC;IAC7C,mHAAmH;IACnH,OAAO,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,YAAoB,EACpB,gBAAwB,EACxB,YAA0C,EAC1C,UAAkB,EAClB,UAAkB,EAClB,SAAgC;IAEhC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAE7C,gDAAgD;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEpD,2CAA2C;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,WAAW;SAC7B,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;SAC5B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CACvB,YAAY,CAAC,GAAG,EAAE;QAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,mCAAmC,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACpG,OAAO,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7F,CAAC,CAAC,CACH,CAAC;IAEJ,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAC3B,YAAoB,EACpB,gBAAwB,EACxB,YAA0C,EAC1C,UAAkB,EAClB,UAAkB,EAClB,SAAgC;IAEhC,MAAM,UAAU,GAAG,IAAI,UAAU,WAAW,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAEhG,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACrC,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,mCAAmC,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACpG,OAAO,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC1F,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"decomposeFileHandler.js","sourceRoot":"","sources":["../../../src/service/decompose/decomposeFileHandler.ts"],"names":[],"mappings":"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"}
@@ -364,5 +364,5 @@
364
364
  ]
365
365
  }
366
366
  },
367
- "version": "7.1.0"
367
+ "version": "7.2.0"
368
368
  }