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.
- package/CHANGELOG.md +14 -0
- package/README.md +149 -87
- package/lib/core/decomposeMetadataTypes.js +1 -1
- package/lib/core/decomposeMetadataTypes.js.map +1 -1
- package/lib/helpers/types.d.ts +9 -2
- package/lib/metadata/getRegistryValuesBySuffix.d.ts +1 -1
- package/lib/metadata/getRegistryValuesBySuffix.js +10 -3
- package/lib/metadata/getRegistryValuesBySuffix.js.map +1 -1
- package/lib/metadata/parseManifest.js +28 -12
- package/lib/metadata/parseManifest.js.map +1 -1
- package/lib/metadata/registry/manifestXml.d.ts +13 -0
- package/lib/metadata/registry/manifestXml.js +74 -0
- package/lib/metadata/registry/manifestXml.js.map +1 -0
- package/lib/metadata/registry/metadataRegistry.json +5417 -0
- package/lib/metadata/registry/registryAccess.d.ts +14 -0
- package/lib/metadata/registry/registryAccess.js +52 -0
- package/lib/metadata/registry/registryAccess.js.map +1 -0
- package/lib/metadata/registry/resolveManifestComponents.d.ts +13 -0
- package/lib/metadata/registry/resolveManifestComponents.js +60 -0
- package/lib/metadata/registry/resolveManifestComponents.js.map +1 -0
- package/lib/metadata/registry/types.d.ts +23 -0
- package/lib/metadata/registry/types.js +3 -0
- package/lib/metadata/registry/types.js.map +1 -0
- package/lib/metadata/registry/xmlParser.d.ts +5 -0
- package/lib/metadata/registry/xmlParser.js +177 -0
- package/lib/metadata/registry/xmlParser.js.map +1 -0
- package/lib/service/decompose/decomposeFileHandler.d.ts +1 -1
- package/lib/service/decompose/decomposeFileHandler.js +17 -18
- package/lib/service/decompose/decomposeFileHandler.js.map +1 -1
- package/oclif.manifest.json +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/metadata/registry/types.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC"}
|
|
@@ -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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"decomposeFileHandler.js","sourceRoot":"","sources":["../../../src/service/decompose/decomposeFileHandler.ts"],"names":[],"mappings":"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"}
|
package/oclif.manifest.json
CHANGED