@salesforce/source-deploy-retrieve 7.15.1 → 8.0.2
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/lib/src/client/diagnosticUtil.js +16 -3
- package/lib/src/client/diagnosticUtil.js.map +1 -1
- package/lib/src/client/metadataApiDeploy.d.ts +5 -5
- package/lib/src/client/metadataApiDeploy.js +59 -45
- package/lib/src/client/metadataApiDeploy.js.map +1 -1
- package/lib/src/client/metadataApiRetrieve.d.ts +2 -2
- package/lib/src/client/metadataApiRetrieve.js +26 -33
- package/lib/src/client/metadataApiRetrieve.js.map +1 -1
- package/lib/src/client/metadataTransfer.d.ts +4 -4
- package/lib/src/client/metadataTransfer.js +3 -3
- package/lib/src/client/metadataTransfer.js.map +1 -1
- package/lib/src/client/types.d.ts +2 -2
- package/lib/src/collections/componentSet.d.ts +2 -2
- package/lib/src/collections/componentSet.js +28 -30
- package/lib/src/collections/componentSet.js.map +1 -1
- package/lib/src/collections/componentSetBuilder.js +16 -10
- package/lib/src/collections/componentSetBuilder.js.map +1 -1
- package/lib/src/collections/lazyCollection.d.ts +1 -1
- package/lib/src/convert/convertContext.d.ts +24 -26
- package/lib/src/convert/convertContext.js +52 -40
- package/lib/src/convert/convertContext.js.map +1 -1
- package/lib/src/convert/metadataConverter.js +81 -65
- package/lib/src/convert/metadataConverter.js.map +1 -1
- package/lib/src/convert/replacements.d.ts +1 -1
- package/lib/src/convert/replacements.js +18 -13
- package/lib/src/convert/replacements.js.map +1 -1
- package/lib/src/convert/streams.d.ts +4 -4
- package/lib/src/convert/streams.js +4 -1
- package/lib/src/convert/streams.js.map +1 -1
- package/lib/src/convert/transformers/decomposedMetadataTransformer.js +30 -28
- package/lib/src/convert/transformers/decomposedMetadataTransformer.js.map +1 -1
- package/lib/src/convert/transformers/defaultMetadataTransformer.js +8 -2
- package/lib/src/convert/transformers/defaultMetadataTransformer.js.map +1 -1
- package/lib/src/convert/transformers/metadataTransformerFactory.js +2 -2
- package/lib/src/convert/transformers/metadataTransformerFactory.js.map +1 -1
- package/lib/src/convert/transformers/nonDecomposedMetadataTransformer.js +19 -6
- package/lib/src/convert/transformers/nonDecomposedMetadataTransformer.js.map +1 -1
- package/lib/src/convert/transformers/staticResourceMetadataTransformer.js +44 -15
- package/lib/src/convert/transformers/staticResourceMetadataTransformer.js.map +1 -1
- package/lib/src/registry/nonSupportedTypes.js +3 -2
- package/lib/src/registry/nonSupportedTypes.js.map +1 -1
- package/lib/src/registry/registryAccess.d.ts +6 -4
- package/lib/src/registry/registryAccess.js +7 -9
- package/lib/src/registry/registryAccess.js.map +1 -1
- package/lib/src/registry/types.d.ts +1 -1
- package/lib/src/resolve/adapters/baseSourceAdapter.d.ts +5 -5
- package/lib/src/resolve/adapters/baseSourceAdapter.js +7 -4
- package/lib/src/resolve/adapters/baseSourceAdapter.js.map +1 -1
- package/lib/src/resolve/adapters/bundleSourceAdapter.d.ts +1 -1
- package/lib/src/resolve/adapters/decomposedSourceAdapter.d.ts +2 -2
- package/lib/src/resolve/adapters/decomposedSourceAdapter.js +5 -5
- package/lib/src/resolve/adapters/decomposedSourceAdapter.js.map +1 -1
- package/lib/src/resolve/adapters/digitalExperienceSourceAdapter.d.ts +1 -1
- package/lib/src/resolve/adapters/digitalExperienceSourceAdapter.js +13 -3
- package/lib/src/resolve/adapters/digitalExperienceSourceAdapter.js.map +1 -1
- package/lib/src/resolve/adapters/matchingContentSourceAdapter.js +1 -5
- package/lib/src/resolve/adapters/matchingContentSourceAdapter.js.map +1 -1
- package/lib/src/resolve/adapters/mixedContentSourceAdapter.d.ts +8 -2
- package/lib/src/resolve/adapters/mixedContentSourceAdapter.js +11 -5
- package/lib/src/resolve/adapters/mixedContentSourceAdapter.js.map +1 -1
- package/lib/src/resolve/adapters/sourceAdapterFactory.js +1 -1
- package/lib/src/resolve/adapters/sourceAdapterFactory.js.map +1 -1
- package/lib/src/resolve/connectionResolver.js +19 -5
- package/lib/src/resolve/connectionResolver.js.map +1 -1
- package/lib/src/resolve/forceIgnore.d.ts +2 -2
- package/lib/src/resolve/forceIgnore.js +4 -0
- package/lib/src/resolve/forceIgnore.js.map +1 -1
- package/lib/src/resolve/manifestResolver.js +1 -1
- package/lib/src/resolve/manifestResolver.js.map +1 -1
- package/lib/src/resolve/metadataResolver.d.ts +2 -2
- package/lib/src/resolve/metadataResolver.js +6 -8
- package/lib/src/resolve/metadataResolver.js.map +1 -1
- package/lib/src/resolve/sourceComponent.d.ts +6 -6
- package/lib/src/resolve/sourceComponent.js +38 -21
- package/lib/src/resolve/sourceComponent.js.map +1 -1
- package/lib/src/resolve/treeContainers.js +30 -11
- package/lib/src/resolve/treeContainers.js.map +1 -1
- package/lib/src/resolve/types.d.ts +2 -2
- package/lib/src/utils/collections.d.ts +1 -1
- package/lib/src/utils/collections.js +1 -4
- package/lib/src/utils/collections.js.map +1 -1
- package/lib/src/utils/filePathGenerator.js +18 -6
- package/lib/src/utils/filePathGenerator.js.map +1 -1
- package/lib/src/utils/path.d.ts +1 -1
- package/lib/src/utils/path.js +2 -0
- package/lib/src/utils/path.js.map +1 -1
- package/messages/sdr.md +57 -89
- package/package.json +7 -6
|
@@ -15,13 +15,9 @@ const common_1 = require("../common");
|
|
|
15
15
|
const collections_1 = require("../collections");
|
|
16
16
|
const resolve_1 = require("../resolve");
|
|
17
17
|
const streams_1 = require("./streams");
|
|
18
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
19
|
+
const messages = core_1.Messages.loadMessages('@salesforce/source-deploy-retrieve', 'sdr');
|
|
18
20
|
class ConvertTransactionFinalizer {
|
|
19
|
-
get state() {
|
|
20
|
-
return this.transactionState;
|
|
21
|
-
}
|
|
22
|
-
setState(props) {
|
|
23
|
-
props(this.transactionState);
|
|
24
|
-
}
|
|
25
21
|
}
|
|
26
22
|
/**
|
|
27
23
|
* Merges child components that share the same parent in the conversion pipeline
|
|
@@ -30,41 +26,46 @@ class ConvertTransactionFinalizer {
|
|
|
30
26
|
class RecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
31
27
|
constructor() {
|
|
32
28
|
super(...arguments);
|
|
33
|
-
this.transactionState =
|
|
29
|
+
this.transactionState = new Map();
|
|
34
30
|
// A cache of SourceComponent xml file paths to parsed contents so that identical child xml
|
|
35
31
|
// files are not read and parsed multiple times.
|
|
36
32
|
this.parsedXmlCache = new Map();
|
|
37
33
|
}
|
|
38
34
|
async finalize() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
return Promise.all(Array.from(this.transactionState.values()).map(async (stateValue) => {
|
|
36
|
+
if (!stateValue.component) {
|
|
37
|
+
throw new Error(`The parent component is missing from the recomposition state entry. The children are ${stateValue.children
|
|
38
|
+
?.toArray()
|
|
39
|
+
.map((c) => c.fullName)
|
|
40
|
+
.join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
const recomposedXmlObj = await this.recompose(stateValue.children, stateValue.component);
|
|
43
|
+
return {
|
|
44
|
+
component: stateValue.component,
|
|
46
45
|
writeInfos: [
|
|
47
46
|
{
|
|
48
47
|
source: new streams_1.JsToXml(recomposedXmlObj),
|
|
49
|
-
output: (0, path_1.join)(
|
|
48
|
+
output: (0, path_1.join)(stateValue.component.type.directoryName, `${stateValue.component.fullName}.${stateValue.component.type.suffix}`),
|
|
50
49
|
},
|
|
51
50
|
],
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return writerData;
|
|
51
|
+
};
|
|
52
|
+
}));
|
|
55
53
|
}
|
|
56
|
-
async recompose(children, parent) {
|
|
54
|
+
async recompose(children = new collections_1.ComponentSet(), parent) {
|
|
57
55
|
// When recomposing children that are non-decomposed, read and cache the parent XML to prevent
|
|
58
56
|
// reading the parent source file (referenced in all child SourceComponents) multiple times.
|
|
59
57
|
let parentXml;
|
|
60
|
-
if (parent.type.strategies
|
|
58
|
+
if (parent.type.strategies?.transformer === "nonDecomposed" /* TransformerStrategy.NonDecomposed */ && parent.xml) {
|
|
61
59
|
parentXml = await parent.parseXml();
|
|
62
60
|
this.parsedXmlCache.set(parent.xml, parentXml);
|
|
63
61
|
}
|
|
64
|
-
const parentXmlObj = parent.type.strategies
|
|
62
|
+
const parentXmlObj = parent.type.strategies?.recomposition === "startEmpty" /* RecompositionStrategy.StartEmpty */
|
|
65
63
|
? {}
|
|
66
64
|
: parentXml ?? (await parent.parseXml());
|
|
67
65
|
for (const child of children) {
|
|
66
|
+
if (!child.parent) {
|
|
67
|
+
throw messages.createError('noParent', [child.fullName, child.type.name]);
|
|
68
|
+
}
|
|
68
69
|
const { directoryName: groupName } = child.type;
|
|
69
70
|
const { name: parentName } = child.parent.type;
|
|
70
71
|
const childSourceComponent = child;
|
|
@@ -72,19 +73,22 @@ class RecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
|
72
73
|
if (parentXml) {
|
|
73
74
|
// If the xml file for the child is in the cache, use it. Otherwise
|
|
74
75
|
// read and cache the xml file that contains this child and use it.
|
|
75
|
-
if (!this.parsedXmlCache.has(childSourceComponent.xml)) {
|
|
76
|
+
if (childSourceComponent.xml && !this.parsedXmlCache.has(childSourceComponent.xml)) {
|
|
76
77
|
// TODO: can we safely parallelize this?
|
|
77
78
|
// eslint-disable-next-line no-await-in-loop
|
|
78
79
|
this.parsedXmlCache.set(childSourceComponent.xml, await parent.parseXml(childSourceComponent.xml));
|
|
79
80
|
}
|
|
80
|
-
xmlObj = childSourceComponent.parseFromParentXml(this.parsedXmlCache.get(childSourceComponent.xml));
|
|
81
|
+
xmlObj = childSourceComponent.parseFromParentXml(this.parsedXmlCache.get((0, ts_types_1.ensureString)(childSourceComponent.xml, `Child component ${child.fullName} has no xml file`)));
|
|
81
82
|
}
|
|
82
83
|
else {
|
|
83
84
|
// TODO: can we safely parallelize this?
|
|
84
85
|
// eslint-disable-next-line no-await-in-loop
|
|
85
86
|
xmlObj = await childSourceComponent.parseXml();
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
+
if (!xmlObj) {
|
|
89
|
+
throw messages.createError('error_parsing_xml', [child.fullName, child.type.name]);
|
|
90
|
+
}
|
|
91
|
+
const childContents = xmlObj[child.type.name] ?? xmlObj;
|
|
88
92
|
if (!parentXmlObj[parentName]) {
|
|
89
93
|
parentXmlObj[parentName] = { [common_1.XML_NS_KEY]: common_1.XML_NS_URL };
|
|
90
94
|
}
|
|
@@ -104,6 +108,8 @@ class RecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
|
104
108
|
return parentXmlObj;
|
|
105
109
|
}
|
|
106
110
|
}
|
|
111
|
+
/** DecompositionStateValue has all props as optional. The makes writeInfo and origin required */
|
|
112
|
+
const hasFullDecompositionInfo = (value) => Boolean(value[1].writeInfo) && Boolean(value[1].origin);
|
|
107
113
|
/**
|
|
108
114
|
* Creates write infos for any children that haven't been written yet. Children may
|
|
109
115
|
* delay being written in order to find potential existing children to merge
|
|
@@ -112,20 +118,14 @@ class RecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
|
112
118
|
class DecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
113
119
|
constructor() {
|
|
114
120
|
super(...arguments);
|
|
115
|
-
this.transactionState =
|
|
121
|
+
this.transactionState = new Map();
|
|
116
122
|
}
|
|
117
123
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
118
124
|
async finalize() {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
component: toDecompose.origin.parent ?? toDecompose.origin,
|
|
124
|
-
writeInfos: [toDecompose.writeInfo],
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return writerData;
|
|
125
|
+
return Array.from(this.transactionState.entries())
|
|
126
|
+
.filter(hasFullDecompositionInfo)
|
|
127
|
+
.filter(([, value]) => !value.foundMerge)
|
|
128
|
+
.map(([, value]) => ({ component: value.origin?.parent ?? value.origin, writeInfos: [value.writeInfo] }));
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
@@ -156,29 +156,35 @@ class NonDecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
|
156
156
|
const pkgPaths = packageDirectories.map((pkg) => pkg.fullPath);
|
|
157
157
|
// nondecomposed metadata types can exist in multiple locations under the same name
|
|
158
158
|
// so we have to find all components that could potentially match inbound components
|
|
159
|
+
if (!this.transactionState.exampleComponent) {
|
|
160
|
+
throw new Error('No example component exists in the transaction state for nondecomposed metadata');
|
|
161
|
+
}
|
|
159
162
|
const allNonDecomposed = pkgPaths.includes(defaultDirectory)
|
|
160
163
|
? this.getAllComponentsOfType(pkgPaths, this.transactionState.exampleComponent.type.name)
|
|
161
164
|
: // defaultDirectory isn't a package, assume it's the target output dir for conversion so don't scan folder
|
|
162
165
|
[];
|
|
163
166
|
// prepare 3 maps to simplify component merging
|
|
164
167
|
await this.initMergeMap(allNonDecomposed);
|
|
165
|
-
this.parentComponentMap = new Map(allNonDecomposed.map((c) => [c.xml, c]));
|
|
168
|
+
this.parentComponentMap = new Map(allNonDecomposed.map((c) => [(0, ts_types_1.ensureString)(c.xml, `no xml file path for ${c.fullName}`), c]));
|
|
166
169
|
const childNameToParentFilePath = this.initChildMapping();
|
|
167
170
|
// we'll merge any new labels into the default location
|
|
168
171
|
const defaultKey = (0, path_1.join)(defaultDirectory, getDefaultOutput(this.transactionState.exampleComponent));
|
|
169
172
|
this.ensureDefaults(defaultKey);
|
|
170
173
|
// put the incoming components into the mergeMap. Keep track of any files we need to write
|
|
171
174
|
const filesToWrite = new Set();
|
|
172
|
-
this.
|
|
175
|
+
this.transactionState.childrenByUniqueElement.forEach((child, childUniqueElement) => {
|
|
173
176
|
const parentKey = childNameToParentFilePath.get(childUniqueElement) ?? defaultKey;
|
|
174
177
|
const parentItemMap = this.mergeMap.get(parentKey);
|
|
175
|
-
parentItemMap
|
|
178
|
+
parentItemMap?.set(childUniqueElement, child);
|
|
176
179
|
filesToWrite.add(parentKey);
|
|
177
180
|
});
|
|
178
181
|
// use the mergeMap to return the writables
|
|
179
182
|
this.mergeMap.forEach((children, parentKey) => {
|
|
180
183
|
if (filesToWrite.has(parentKey)) {
|
|
181
184
|
const parentSourceComponent = this.parentComponentMap.get(parentKey);
|
|
185
|
+
if (!parentSourceComponent) {
|
|
186
|
+
throw new Error(`No source component found for ${parentKey}`);
|
|
187
|
+
}
|
|
182
188
|
const recomposedXmlObj = recompose(children, parentSourceComponent);
|
|
183
189
|
writerData.push({
|
|
184
190
|
component: parentSourceComponent,
|
|
@@ -240,11 +246,17 @@ class NonDecompositionFinalizer extends ConvertTransactionFinalizer {
|
|
|
240
246
|
const getMappedChildren = async (component) => {
|
|
241
247
|
const results = await Promise.all(component.getChildren().map(async (child) => {
|
|
242
248
|
const childXml = await child.parseXml();
|
|
243
|
-
return [
|
|
249
|
+
return [
|
|
250
|
+
(0, ts_types_1.getString)(childXml, (0, ts_types_1.ensureString)(child.type.uniqueIdElement), `No uniqueIdElement exists in the registry for ${child.type.name}`),
|
|
251
|
+
childXml,
|
|
252
|
+
];
|
|
244
253
|
}));
|
|
245
254
|
return new Map(results);
|
|
246
255
|
};
|
|
247
|
-
const result = await Promise.all(allComponentsOfType.map(async (c) => [
|
|
256
|
+
const result = await Promise.all(allComponentsOfType.map(async (c) => [
|
|
257
|
+
(0, ts_types_1.ensureString)(c.xml, `Missing xml file for ${c.type.name}`),
|
|
258
|
+
await getMappedChildren(c),
|
|
259
|
+
]));
|
|
248
260
|
this.mergeMap = new Map(result);
|
|
249
261
|
}
|
|
250
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertContext.js","sourceRoot":"","sources":["../../../src/convert/convertContext.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+BAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"convertContext.js","sourceRoot":"","sources":["../../../src/convert/convertContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,7 @@ const registry_1 = require("../registry");
|
|
|
18
18
|
const streams_1 = require("./streams");
|
|
19
19
|
const replacements_1 = require("./replacements");
|
|
20
20
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
21
|
-
const messages = core_1.Messages.
|
|
22
|
-
'error_failed_convert',
|
|
23
|
-
'error_merge_metadata_target_unsupported',
|
|
24
|
-
]);
|
|
21
|
+
const messages = core_1.Messages.loadMessages('@salesforce/source-deploy-retrieve', 'sdr');
|
|
25
22
|
class MetadataConverter {
|
|
26
23
|
constructor(registry = new registry_1.RegistryAccess()) {
|
|
27
24
|
this.registry = registry;
|
|
@@ -31,61 +28,11 @@ class MetadataConverter {
|
|
|
31
28
|
try {
|
|
32
29
|
const cs = comps instanceof collections_1.ComponentSet ? comps : new collections_1.ComponentSet(comps, this.registry);
|
|
33
30
|
const components = (comps instanceof collections_1.ComponentSet ? Array.from(comps.getSourceComponents()) : comps).filter((comp) => comp.type.isAddressable !== false);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
let writer;
|
|
37
|
-
let mergeSet;
|
|
38
|
-
let packagePath;
|
|
39
|
-
let defaultDirectory;
|
|
40
|
-
switch (output.type) {
|
|
41
|
-
case 'directory':
|
|
42
|
-
if (output.packageName) {
|
|
43
|
-
cs.fullName = output.packageName;
|
|
44
|
-
}
|
|
45
|
-
packagePath = getPackagePath(output);
|
|
46
|
-
defaultDirectory = packagePath;
|
|
47
|
-
writer = new streams_1.StandardWriter(packagePath);
|
|
48
|
-
if (!targetFormatIsSource) {
|
|
49
|
-
const manifestPath = (0, path_1.join)(packagePath, MetadataConverter.PACKAGE_XML_FILE);
|
|
50
|
-
tasks.push(graceful_fs_1.promises.writeFile(manifestPath, await cs.getPackageXml()), ...cs.getTypesOfDestructiveChanges().map(async (destructiveChangesType) =>
|
|
51
|
-
// for each of the destructive changes in the component set, convert and write the correct metadata
|
|
52
|
-
// to each manifest
|
|
53
|
-
graceful_fs_1.promises.writeFile((0, path_1.join)(packagePath, getDestructiveManifest(destructiveChangesType)), await cs.getPackageXml(4, destructiveChangesType))));
|
|
54
|
-
}
|
|
55
|
-
break;
|
|
56
|
-
case 'zip':
|
|
57
|
-
if (output.packageName) {
|
|
58
|
-
cs.fullName = output.packageName;
|
|
59
|
-
}
|
|
60
|
-
packagePath = getPackagePath(output);
|
|
61
|
-
defaultDirectory = packagePath;
|
|
62
|
-
writer = new streams_1.ZipWriter(packagePath);
|
|
63
|
-
if (!targetFormatIsSource) {
|
|
64
|
-
writer.addToZip(await cs.getPackageXml(), MetadataConverter.PACKAGE_XML_FILE);
|
|
65
|
-
// for each of the destructive changes in the component set, convert and write the correct metadata
|
|
66
|
-
// to each manifest
|
|
67
|
-
for (const destructiveChangeType of cs.getTypesOfDestructiveChanges()) {
|
|
68
|
-
writer.addToZip(
|
|
69
|
-
// TODO: can this be safely parallelized?
|
|
70
|
-
// eslint-disable-next-line no-await-in-loop
|
|
71
|
-
await cs.getPackageXml(4, destructiveChangeType), getDestructiveManifest(destructiveChangeType));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
break;
|
|
75
|
-
case 'merge':
|
|
76
|
-
if (!targetFormatIsSource) {
|
|
77
|
-
throw new core_1.SfError(messages.getMessage('error_merge_metadata_target_unsupported'));
|
|
78
|
-
}
|
|
79
|
-
defaultDirectory = output.defaultDirectory;
|
|
80
|
-
mergeSet = new collections_1.ComponentSet();
|
|
81
|
-
// since child components are composed in metadata format, we need to merge using the parent
|
|
82
|
-
for (const component of output.mergeWith) {
|
|
83
|
-
mergeSet.add(component.parent ?? component);
|
|
84
|
-
}
|
|
85
|
-
writer = new streams_1.StandardWriter(output.defaultDirectory);
|
|
86
|
-
writer.forceIgnoredPaths = output.forceIgnoredPaths;
|
|
87
|
-
break;
|
|
31
|
+
if (output.type !== 'merge' && output.packageName) {
|
|
32
|
+
cs.fullName = output.packageName;
|
|
88
33
|
}
|
|
34
|
+
const targetFormatIsSource = targetFormat === 'source';
|
|
35
|
+
const { packagePath, defaultDirectory, writer, mergeSet, tasks = [], } = await getConvertIngredients(output, cs, targetFormatIsSource);
|
|
89
36
|
const conversionPipeline = (0, streams_1.pipeline)(stream_1.Readable.from(components), !targetFormatIsSource && (process.env.SF_APPLY_REPLACEMENTS_ON_CONVERT === 'true' || output.type === 'zip')
|
|
90
37
|
? (await (0, replacements_1.getReplacementMarkingStream)(cs.projectDirectory)) ?? new stream_1.PassThrough({ objectMode: true })
|
|
91
38
|
: new stream_1.PassThrough({ objectMode: true }), new streams_1.ComponentConverter(targetFormat, this.registry, mergeSet, defaultDirectory), writer);
|
|
@@ -103,6 +50,11 @@ class MetadataConverter {
|
|
|
103
50
|
if (!(err instanceof Error) && !(0, ts_types_1.isString)(err)) {
|
|
104
51
|
throw err;
|
|
105
52
|
}
|
|
53
|
+
// if the error is already somewhat descriptive, use that
|
|
54
|
+
// the allows better error messages to be passed through instead of "failed convert"
|
|
55
|
+
if (err instanceof core_1.SfError && (err.name !== 'SfError' || err.actions)) {
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
106
58
|
const error = (0, ts_types_1.isString)(err) ? new Error(err) : err;
|
|
107
59
|
throw new core_1.SfError(messages.getMessage('error_failed_convert', [error.message]), 'ConversionError', [], error);
|
|
108
60
|
}
|
|
@@ -113,7 +65,7 @@ MetadataConverter.PACKAGE_XML_FILE = 'package.xml';
|
|
|
113
65
|
MetadataConverter.DESTRUCTIVE_CHANGES_POST_XML_FILE = 'destructiveChangesPost.xml';
|
|
114
66
|
MetadataConverter.DESTRUCTIVE_CHANGES_PRE_XML_FILE = 'destructiveChangesPre.xml';
|
|
115
67
|
MetadataConverter.DEFAULT_PACKAGE_PREFIX = 'metadataPackage';
|
|
116
|
-
|
|
68
|
+
function getPackagePath(outputConfig) {
|
|
117
69
|
let packagePath;
|
|
118
70
|
const { genUniqueDir = true, outputDirectory, packageName, type } = outputConfig;
|
|
119
71
|
if (outputDirectory) {
|
|
@@ -135,13 +87,77 @@ const getPackagePath = (outputConfig) => {
|
|
|
135
87
|
}
|
|
136
88
|
}
|
|
137
89
|
return packagePath;
|
|
138
|
-
}
|
|
90
|
+
}
|
|
139
91
|
const getDestructiveManifest = (destructiveChangesType) => {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
92
|
+
switch (destructiveChangesType) {
|
|
93
|
+
case collections_1.DestructiveChangesType.POST:
|
|
94
|
+
return MetadataConverter.DESTRUCTIVE_CHANGES_POST_XML_FILE;
|
|
95
|
+
case collections_1.DestructiveChangesType.PRE:
|
|
96
|
+
return MetadataConverter.DESTRUCTIVE_CHANGES_PRE_XML_FILE;
|
|
145
97
|
}
|
|
146
98
|
};
|
|
99
|
+
async function getConvertIngredients(output, cs, targetFormatIsSource) {
|
|
100
|
+
switch (output.type) {
|
|
101
|
+
case 'directory':
|
|
102
|
+
return getDirectoryConfigOutputs(output, targetFormatIsSource, cs);
|
|
103
|
+
case 'zip':
|
|
104
|
+
return getZipConfigOutputs(output, targetFormatIsSource, cs);
|
|
105
|
+
case 'merge':
|
|
106
|
+
return getMergeConfigOutputs(output, targetFormatIsSource);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function getMergeConfigOutputs(output, targetFormatIsSource) {
|
|
110
|
+
if (!targetFormatIsSource) {
|
|
111
|
+
throw new core_1.SfError(messages.getMessage('error_merge_metadata_target_unsupported'));
|
|
112
|
+
}
|
|
113
|
+
const defaultDirectory = output.defaultDirectory;
|
|
114
|
+
const mergeSet = new collections_1.ComponentSet();
|
|
115
|
+
// since child components are composed in metadata format, we need to merge using the parent
|
|
116
|
+
for (const component of output.mergeWith) {
|
|
117
|
+
mergeSet.add(component.parent ?? component);
|
|
118
|
+
}
|
|
119
|
+
const writer = new streams_1.StandardWriter(output.defaultDirectory);
|
|
120
|
+
if (output.forceIgnoredPaths) {
|
|
121
|
+
writer.forceIgnoredPaths = output.forceIgnoredPaths;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
writer,
|
|
125
|
+
mergeSet,
|
|
126
|
+
defaultDirectory,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async function getZipConfigOutputs(output, targetFormatIsSource, cs) {
|
|
130
|
+
const packagePath = getPackagePath(output);
|
|
131
|
+
const writer = new streams_1.ZipWriter(packagePath);
|
|
132
|
+
if (!targetFormatIsSource) {
|
|
133
|
+
writer.addToZip(await cs.getPackageXml(), MetadataConverter.PACKAGE_XML_FILE);
|
|
134
|
+
// for each of the destructive changes in the component set, convert and write the correct metadata to each manifest
|
|
135
|
+
await Promise.all(cs
|
|
136
|
+
.getTypesOfDestructiveChanges()
|
|
137
|
+
.map(async (destructiveChangeType) => writer.addToZip(await cs.getPackageXml(4, destructiveChangeType), getDestructiveManifest(destructiveChangeType))));
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
packagePath,
|
|
141
|
+
defaultDirectory: packagePath,
|
|
142
|
+
writer,
|
|
143
|
+
mergeSet: undefined,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async function getDirectoryConfigOutputs(output, targetFormatIsSource, cs) {
|
|
147
|
+
const packagePath = getPackagePath(output);
|
|
148
|
+
return {
|
|
149
|
+
packagePath,
|
|
150
|
+
defaultDirectory: packagePath,
|
|
151
|
+
writer: new streams_1.StandardWriter(packagePath),
|
|
152
|
+
tasks: targetFormatIsSource
|
|
153
|
+
? []
|
|
154
|
+
: [
|
|
155
|
+
graceful_fs_1.promises.writeFile((0, path_1.join)(packagePath, MetadataConverter.PACKAGE_XML_FILE), await cs.getPackageXml()),
|
|
156
|
+
...cs.getTypesOfDestructiveChanges().map(async (destructiveChangesType) =>
|
|
157
|
+
// for each of the destructive changes in the component set, convert and write the correct metadata
|
|
158
|
+
// to each manifest
|
|
159
|
+
graceful_fs_1.promises.writeFile((0, path_1.join)(packagePath, getDestructiveManifest(destructiveChangesType)), await cs.getPackageXml(4, destructiveChangesType))),
|
|
160
|
+
],
|
|
161
|
+
};
|
|
162
|
+
}
|
|
147
163
|
//# sourceMappingURL=metadataConverter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataConverter.js","sourceRoot":"","sources":["../../../src/convert/metadataConverter.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,mCAA+C;AAC/C,+BAAgD;AAChD,2CAAqD;AACrD,6CAAuC;AACvC,mDAAgD;AAEhD,kEAAmE;AAEnE,gDAAsE;AACtE,0CAA6C;AAC7C,uCAAoF;AAEpF,iDAA6D;AAE7D,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,eAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"metadataConverter.js","sourceRoot":"","sources":["../../../src/convert/metadataConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export declare const getReplacementMarkingStream: (projectDir?: string) => Promi
|
|
|
34
34
|
declare class ReplacementMarkingStream extends Transform {
|
|
35
35
|
private readonly replacementConfigs;
|
|
36
36
|
constructor(replacementConfigs: ReplacementConfig[]);
|
|
37
|
-
_transform(chunk: SourceComponent, encoding: string, callback: (err: Error, data: SourceComponent) => void): Promise<void>;
|
|
37
|
+
_transform(chunk: SourceComponent, encoding: string, callback: (err: Error | undefined, data: SourceComponent) => void): Promise<void>;
|
|
38
38
|
}
|
|
39
39
|
export declare const getContentsOfReplacementFile: (path: string) => Promise<string>;
|
|
40
40
|
/**
|
|
@@ -11,6 +11,10 @@ const promises_1 = require("fs/promises");
|
|
|
11
11
|
const stream_1 = require("stream");
|
|
12
12
|
const core_1 = require("@salesforce/core");
|
|
13
13
|
const minimatch = require("minimatch");
|
|
14
|
+
const kit_1 = require("@salesforce/kit");
|
|
15
|
+
const ts_types_1 = require("@salesforce/ts-types");
|
|
16
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
17
|
+
const messages = core_1.Messages.loadMessages('@salesforce/source-deploy-retrieve', 'sdr');
|
|
14
18
|
const fileContentsCache = new Map();
|
|
15
19
|
/** If a component has replacements, you get it piped through the replacementStream
|
|
16
20
|
* Otherwise, you'll get the original readable stream
|
|
@@ -106,10 +110,14 @@ const getContentsOfReplacementFile = async (path) => {
|
|
|
106
110
|
fileContentsCache.set(path, (await (0, promises_1.readFile)(path, 'utf8')).trim());
|
|
107
111
|
}
|
|
108
112
|
catch (e) {
|
|
109
|
-
throw
|
|
113
|
+
throw messages.createError('replacementsFileNotRead', [path]);
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
|
-
|
|
116
|
+
const output = fileContentsCache.get(path);
|
|
117
|
+
if (!output) {
|
|
118
|
+
throw messages.createError('replacementsFileNotRead', [path]);
|
|
119
|
+
}
|
|
120
|
+
return output;
|
|
113
121
|
};
|
|
114
122
|
exports.getContentsOfReplacementFile = getContentsOfReplacementFile;
|
|
115
123
|
/**
|
|
@@ -117,7 +125,7 @@ exports.getContentsOfReplacementFile = getContentsOfReplacementFile;
|
|
|
117
125
|
*/
|
|
118
126
|
const getReplacements = async (cmp, replacementConfigs = []) => {
|
|
119
127
|
// all possible filenames for this component
|
|
120
|
-
const filenames = [cmp.xml, ...cmp.walkContent()].filter(
|
|
128
|
+
const filenames = [cmp.xml, ...cmp.walkContent()].filter(ts_types_1.isString);
|
|
121
129
|
const replacementsForComponent = (await Promise.all(
|
|
122
130
|
// build a nested array that can be run through Object.fromEntries
|
|
123
131
|
// one MarkedReplacement[] for each file in the component
|
|
@@ -131,9 +139,11 @@ const getReplacements = async (cmp, replacementConfigs = []) => {
|
|
|
131
139
|
// used during replacement stream to limit warnings to explicit filenames, not globs
|
|
132
140
|
singleFile: Boolean(r.filename),
|
|
133
141
|
// Config is json which might use the regex. If so, turn it into an actual regex
|
|
134
|
-
toReplace:
|
|
142
|
+
toReplace: typeof r.stringToReplace === 'string'
|
|
143
|
+
? (0, exports.stringToRegex)(r.stringToReplace)
|
|
144
|
+
: new RegExp(r.regexToReplace, 'g'),
|
|
135
145
|
// get the literal replacement (either from env or file contents)
|
|
136
|
-
replaceWith: r.replaceWithEnv
|
|
146
|
+
replaceWith: typeof r.replaceWithEnv === 'string'
|
|
137
147
|
? getEnvValue(r.replaceWithEnv)
|
|
138
148
|
: await (0, exports.getContentsOfReplacementFile)(r.replaceWithFile),
|
|
139
149
|
}))),
|
|
@@ -149,7 +159,7 @@ exports.getReplacements = getReplacements;
|
|
|
149
159
|
const matchesFile = (f, r) =>
|
|
150
160
|
// filenames will be absolute. We don't have convenient access to the pkgDirs,
|
|
151
161
|
// so we need to be more open than an exact match
|
|
152
|
-
f.endsWith(r.filename) || (r.glob && minimatch(f, `**/${r.glob}`));
|
|
162
|
+
Boolean((r.filename && f.endsWith(r.filename)) || (r.glob && minimatch(f, `**/${r.glob}`)));
|
|
153
163
|
exports.matchesFile = matchesFile;
|
|
154
164
|
/**
|
|
155
165
|
* Regardless of any components, return the ReplacementConfig that are valid with the current env.
|
|
@@ -158,19 +168,14 @@ exports.matchesFile = matchesFile;
|
|
|
158
168
|
const envFilter = (replacementConfigs = []) => replacementConfigs.filter((replacement) => !replacement.replaceWhenEnv ||
|
|
159
169
|
replacement.replaceWhenEnv.every((envConditional) => process.env[envConditional.env] === envConditional.value));
|
|
160
170
|
/** A "getter" for envs to throw an error when an expected env is not present */
|
|
161
|
-
const getEnvValue = (env) => {
|
|
162
|
-
if (process.env[env]) {
|
|
163
|
-
return process.env[env];
|
|
164
|
-
}
|
|
165
|
-
throw new core_1.SfError(`"${env}" is in sfdx-project.json as a value for "replaceWithEnv" property, but it's not set in your environment.`);
|
|
166
|
-
};
|
|
171
|
+
const getEnvValue = (env) => (0, ts_types_1.ensureString)(new kit_1.Env().getString(env), `"${env}" is in sfdx-project.json as a value for "replaceWithEnv" property, but it's not set in your environment.`);
|
|
167
172
|
/**
|
|
168
173
|
* Read the `replacement` property from sfdx-project.json
|
|
169
174
|
*/
|
|
170
175
|
const readReplacementsFromProject = async (projectDir) => {
|
|
171
176
|
const proj = await core_1.SfProject.resolve(projectDir);
|
|
172
177
|
const projJson = (await proj.resolveProjectConfig());
|
|
173
|
-
return projJson.replacements;
|
|
178
|
+
return projJson.replacements ?? [];
|
|
174
179
|
};
|
|
175
180
|
/** escape any special characters used in the string so it can be used as a regex */
|
|
176
181
|
const stringToRegex = (input) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replacements.js","sourceRoot":"","sources":["../../../src/convert/replacements.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,0CAAuC;AACvC,mCAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"replacements.js","sourceRoot":"","sources":["../../../src/convert/replacements.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,16 +16,16 @@ export declare class ComponentConverter extends Transform {
|
|
|
16
16
|
private defaultDirectory?;
|
|
17
17
|
readonly context: ConvertContext;
|
|
18
18
|
private transformerFactory;
|
|
19
|
-
constructor(targetFormat: SfdxFileFormat, registry: RegistryAccess, mergeSet?: ComponentSet, defaultDirectory?: string);
|
|
20
|
-
_transform(chunk: SourceComponent, encoding: string, callback: (err: Error, data: WriterFormat) => void): Promise<void>;
|
|
19
|
+
constructor(targetFormat: SfdxFileFormat, registry: RegistryAccess, mergeSet?: ComponentSet | undefined, defaultDirectory?: string | undefined);
|
|
20
|
+
_transform(chunk: SourceComponent, encoding: string, callback: (err: Error | undefined, data: WriterFormat) => void): Promise<void>;
|
|
21
21
|
/**
|
|
22
22
|
* Called at the end when all components have passed through the pipeline. Finalizers
|
|
23
23
|
* take care of any additional work to be done at this stage e.g. recomposing child components.
|
|
24
24
|
*/
|
|
25
|
-
_flush(callback: (err: Error, data?: WriterFormat) => void): Promise<void>;
|
|
25
|
+
_flush(callback: (err: Error | undefined, data?: WriterFormat) => void): Promise<void>;
|
|
26
26
|
}
|
|
27
27
|
export declare abstract class ComponentWriter extends Writable {
|
|
28
|
-
forceIgnoredPaths
|
|
28
|
+
forceIgnoredPaths: Set<string>;
|
|
29
29
|
protected rootDestination?: SourcePath;
|
|
30
30
|
constructor(rootDestination?: SourcePath);
|
|
31
31
|
}
|
|
@@ -21,7 +21,7 @@ const fileSystemHandler_1 = require("../utils/fileSystemHandler");
|
|
|
21
21
|
const transformers_1 = require("./transformers");
|
|
22
22
|
const convertContext_1 = require("./convertContext");
|
|
23
23
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
24
|
-
const messages = core_1.Messages.
|
|
24
|
+
const messages = core_1.Messages.loadMessages('@salesforce/source-deploy-retrieve', 'sdr');
|
|
25
25
|
exports.pipeline = (0, util_1.promisify)(stream_1.pipeline);
|
|
26
26
|
const stream2buffer = async (stream) => new Promise((resolve, reject) => {
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -119,6 +119,9 @@ class StandardWriter extends ComponentWriter {
|
|
|
119
119
|
// every component has been written to the destination. This await ensures the microtask
|
|
120
120
|
// queue is empty when that call exits and overall less memory is consumed.
|
|
121
121
|
await Promise.all(chunk.writeInfos.map((info) => {
|
|
122
|
+
// assertion logic: the rootDestination is required in this subclass of ComponentWriter but the super doesn't know that
|
|
123
|
+
// the eslint comment should remain until strictMode is fully implemented
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
122
125
|
const fullDest = (0, path_1.isAbsolute)(info.output) ? info.output : (0, path_1.join)(this.rootDestination, info.output);
|
|
123
126
|
if (!(0, graceful_fs_1.existsSync)(fullDest)) {
|
|
124
127
|
for (const ignoredPath of this.forceIgnoredPaths) {
|