@salesforce/packaging 2.3.10 → 2.4.1
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/interfaces/packagingSObjects.d.ts +6 -0
- package/lib/package/package.d.ts +1 -1
- package/lib/package/package.js +2 -43
- package/lib/package/packageConvert.d.ts +1 -1
- package/lib/package/packageConvert.js +16 -4
- package/lib/package/packageCreate.js +3 -2
- package/lib/package/packageVersion.js +1 -1
- package/lib/package/packageVersionCreate.js +2 -1
- package/lib/package/packageVersionRetrieve.d.ts +11 -0
- package/lib/package/packageVersionRetrieve.js +160 -0
- package/lib/package/profileRewriter.js +1 -0
- package/lib/utils/packageUtils.d.ts +2 -2
- package/lib/utils/packageUtils.js +3 -3
- package/package.json +2 -2
|
@@ -299,4 +299,10 @@ export declare namespace PackagingSObjects {
|
|
|
299
299
|
IsDeprecated: boolean;
|
|
300
300
|
MetadataZip?: string;
|
|
301
301
|
};
|
|
302
|
+
type MetadataPackage = {
|
|
303
|
+
Id: string;
|
|
304
|
+
Name: string;
|
|
305
|
+
NamespacePrefix: string;
|
|
306
|
+
PackageCategory: 'Application' | 'Module' | 'Package' | 'Package2';
|
|
307
|
+
};
|
|
302
308
|
}
|
package/lib/package/package.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Connection, SfProject } from '@salesforce/core';
|
|
2
|
-
import { ConvertPackageOptions, PackageCreateOptions, PackageOptions, PackageSaveResult, PackageType, PackageUpdateOptions, PackageVersionCreateRequestResult, PackageVersionListOptions, PackageVersionListResult,
|
|
2
|
+
import { ConvertPackageOptions, PackageCreateOptions, PackageOptions, PackageSaveResult, PackageType, PackageUpdateOptions, PackageVersionCreateRequestResult, PackageVersionListOptions, PackageVersionListResult, PackageVersionMetadataDownloadOptions, PackageVersionMetadataDownloadResult, PackagingSObjects } from '../interfaces';
|
|
3
3
|
import { PackageAncestry } from './packageAncestry';
|
|
4
4
|
export declare const Package2Fields: string[];
|
|
5
5
|
/**
|
package/lib/package/package.js
CHANGED
|
@@ -7,13 +7,11 @@ exports.Package = exports.Package2Fields = void 0;
|
|
|
7
7
|
* Licensed under the BSD 3-Clause license.
|
|
8
8
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
9
9
|
*/
|
|
10
|
-
const path = require("path");
|
|
11
|
-
const fs = require("fs");
|
|
12
10
|
const core_1 = require("@salesforce/core");
|
|
13
|
-
const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
|
|
14
11
|
const packageUtils_1 = require("../utils/packageUtils");
|
|
15
12
|
const packageCreate_1 = require("./packageCreate");
|
|
16
13
|
const packageConvert_1 = require("./packageConvert");
|
|
14
|
+
const packageVersionRetrieve_1 = require("./packageVersionRetrieve");
|
|
17
15
|
const packageVersionList_1 = require("./packageVersionList");
|
|
18
16
|
const packageDelete_1 = require("./packageDelete");
|
|
19
17
|
const packageAncestry_1 = require("./packageAncestry");
|
|
@@ -162,46 +160,7 @@ class Package {
|
|
|
162
160
|
* @returns
|
|
163
161
|
*/
|
|
164
162
|
static async downloadPackageVersionMetadata(project, options, connection) {
|
|
165
|
-
|
|
166
|
-
const destinationFolder = options.destinationFolder ?? 'force-app';
|
|
167
|
-
if (path.isAbsolute(destinationFolder)) {
|
|
168
|
-
throw messages.createError('sourcesDownloadDirectoryMustBeRelative');
|
|
169
|
-
}
|
|
170
|
-
const destinationPath = path.join(project.getPath(), destinationFolder);
|
|
171
|
-
if (!fs.existsSync(destinationPath)) {
|
|
172
|
-
fs.mkdirSync(destinationPath, { recursive: true });
|
|
173
|
-
}
|
|
174
|
-
if (!(0, packageUtils_1.isPackageDirectoryEffectivelyEmpty)(destinationPath)) {
|
|
175
|
-
throw messages.createError('sourcesDownloadDirectoryNotEmpty');
|
|
176
|
-
}
|
|
177
|
-
// Get the MetadataZip URL from the MetadataPackageVersion record
|
|
178
|
-
const subscriberPackageVersionId = project.getPackageIdFromAlias(options.subscriberPackageVersionId) ?? options.subscriberPackageVersionId;
|
|
179
|
-
const versionInfo = (await connection.tooling
|
|
180
|
-
.sobject('MetadataPackageVersion')
|
|
181
|
-
.retrieve(subscriberPackageVersionId));
|
|
182
|
-
if (!versionInfo.MetadataZip) {
|
|
183
|
-
throw messages.createError('unableToAccessMetadataZip');
|
|
184
|
-
}
|
|
185
|
-
const responseBase64 = await connection.tooling.request(versionInfo.MetadataZip, {
|
|
186
|
-
encoding: 'base64',
|
|
187
|
-
});
|
|
188
|
-
const buffer = Buffer.from(responseBase64, 'base64');
|
|
189
|
-
// 2GP packages have the package.zip wrapped in an outer zip.
|
|
190
|
-
let tree = await source_deploy_retrieve_1.ZipTreeContainer.create(buffer);
|
|
191
|
-
if (tree.exists('package.zip')) {
|
|
192
|
-
tree = await source_deploy_retrieve_1.ZipTreeContainer.create(await tree.readFile('package.zip'));
|
|
193
|
-
}
|
|
194
|
-
const zipComponents = source_deploy_retrieve_1.ComponentSet.fromSource({
|
|
195
|
-
fsPaths: ['.'],
|
|
196
|
-
tree,
|
|
197
|
-
})
|
|
198
|
-
.getSourceComponents()
|
|
199
|
-
.toArray();
|
|
200
|
-
return new source_deploy_retrieve_1.MetadataConverter().convert(zipComponents, 'source', {
|
|
201
|
-
type: 'directory',
|
|
202
|
-
outputDirectory: destinationPath,
|
|
203
|
-
genUniqueDir: false,
|
|
204
|
-
});
|
|
163
|
+
return (0, packageVersionRetrieve_1.retrievePackageVersionMetadata)(project, options, connection);
|
|
205
164
|
}
|
|
206
165
|
static getPackage2Fields(connection) {
|
|
207
166
|
const apiVersion = connection.getApiVersion();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Connection, SfProject } from '@salesforce/core';
|
|
2
2
|
import { ConvertPackageOptions, PackageVersionCreateRequestResult, PackagingSObjects } from '../interfaces';
|
|
3
|
-
export declare function findOrCreatePackage2(seedPackage: string, connection: Connection): Promise<string>;
|
|
3
|
+
export declare function findOrCreatePackage2(seedPackage: string, connection: Connection, project?: SfProject): Promise<string>;
|
|
4
4
|
export declare function convertPackage(pkg: string, connection: Connection, options: ConvertPackageOptions, project?: SfProject): Promise<PackageVersionCreateRequestResult>;
|
|
5
5
|
/**
|
|
6
6
|
* Convert the list of command line options to a JSON object that can be used to create an Package2VersionCreateRequest entity.
|
|
@@ -29,8 +29,8 @@ const getLogger = () => {
|
|
|
29
29
|
}
|
|
30
30
|
return logger;
|
|
31
31
|
};
|
|
32
|
-
async function findOrCreatePackage2(seedPackage, connection) {
|
|
33
|
-
const query = `SELECT Id FROM Package2 WHERE ConvertedFromPackageId = '${seedPackage}'`;
|
|
32
|
+
async function findOrCreatePackage2(seedPackage, connection, project) {
|
|
33
|
+
const query = `SELECT Id, Name FROM Package2 WHERE ConvertedFromPackageId = '${seedPackage}'`;
|
|
34
34
|
const queryResult = (await connection.tooling.query(query)).records;
|
|
35
35
|
if (queryResult?.length > 1) {
|
|
36
36
|
const ids = queryResult.map((r) => r.Id);
|
|
@@ -38,6 +38,9 @@ async function findOrCreatePackage2(seedPackage, connection) {
|
|
|
38
38
|
}
|
|
39
39
|
if (queryResult?.length === 1) {
|
|
40
40
|
// return the package2 object
|
|
41
|
+
if (project) {
|
|
42
|
+
await addPackageAlias(project, queryResult[0].Name, queryResult[0].Id);
|
|
43
|
+
}
|
|
41
44
|
return queryResult[0].Id;
|
|
42
45
|
}
|
|
43
46
|
// Need to create a new Package2
|
|
@@ -62,6 +65,9 @@ async function findOrCreatePackage2(seedPackage, connection) {
|
|
|
62
65
|
if (!createResult.success) {
|
|
63
66
|
throw pkgUtils.combineSaveErrors('Package2', 'create', createResult.errors);
|
|
64
67
|
}
|
|
68
|
+
if (project) {
|
|
69
|
+
await addPackageAlias(project, subscriberResult.Name, createResult.id);
|
|
70
|
+
}
|
|
65
71
|
return createResult.id;
|
|
66
72
|
}
|
|
67
73
|
exports.findOrCreatePackage2 = findOrCreatePackage2;
|
|
@@ -71,7 +77,7 @@ async function convertPackage(pkg, connection, options, project) {
|
|
|
71
77
|
if (options.wait) {
|
|
72
78
|
maxRetries = (60 / pkgUtils.POLL_INTERVAL_SECONDS) * options.wait.minutes;
|
|
73
79
|
}
|
|
74
|
-
const packageId = await findOrCreatePackage2(pkg, connection);
|
|
80
|
+
const packageId = await findOrCreatePackage2(pkg, connection, project);
|
|
75
81
|
const apiVersion = project?.getSfProjectJson()?.get('sourceApiVersion');
|
|
76
82
|
const request = await createPackageVersionCreateRequest({
|
|
77
83
|
installationkey: options.installationKey,
|
|
@@ -179,7 +185,7 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, project
|
|
|
179
185
|
if (isStatusEqualTo(results, [Package2VersionStatus.success])) {
|
|
180
186
|
// update sfdx-project.json
|
|
181
187
|
let projectUpdated = false;
|
|
182
|
-
if (project && !
|
|
188
|
+
if (project && !kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE')) {
|
|
183
189
|
projectUpdated = true;
|
|
184
190
|
const query = `SELECT MajorVersion, MinorVersion, PatchVersion, BuildNumber FROM Package2Version WHERE Id = '${results[0].Package2VersionId}'`;
|
|
185
191
|
const packageVersionVersionString = await connection.tooling
|
|
@@ -238,6 +244,12 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, project
|
|
|
238
244
|
});
|
|
239
245
|
return pollingClient.subscribe();
|
|
240
246
|
}
|
|
247
|
+
async function addPackageAlias(project, packageName, packageId) {
|
|
248
|
+
if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE')) {
|
|
249
|
+
project.getSfProjectJson().addPackageAlias(packageName, packageId);
|
|
250
|
+
await project.getSfProjectJson().write();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
241
253
|
/**
|
|
242
254
|
* Return true if the queryResult.records[0].Status is equal to one of the values in statuses.
|
|
243
255
|
*
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.createPackage = exports.createPackageDirEntry = exports.createPackageRequestFromContext = void 0;
|
|
10
10
|
const core_1 = require("@salesforce/core");
|
|
11
|
+
const kit_1 = require("@salesforce/kit");
|
|
11
12
|
const pkgUtils = require("../utils/packageUtils");
|
|
12
13
|
const packageUtils_1 = require("../utils/packageUtils");
|
|
13
14
|
function createPackageRequestFromContext(project, options) {
|
|
@@ -39,7 +40,7 @@ function createPackageDirEntry(project, options) {
|
|
|
39
40
|
if (!packageDir) {
|
|
40
41
|
// no match - create a new one
|
|
41
42
|
isNew = true;
|
|
42
|
-
packageDir = pkgUtils.DEFAULT_PACKAGE_DIR;
|
|
43
|
+
packageDir = { ...pkgUtils.DEFAULT_PACKAGE_DIR };
|
|
43
44
|
packageDir.path = (0, packageUtils_1.replaceIfEmpty)(packageDir.path, options.path);
|
|
44
45
|
}
|
|
45
46
|
if (packageDirs.length === 0) {
|
|
@@ -69,7 +70,7 @@ async function createPackage(connection, project, options) {
|
|
|
69
70
|
if (!createResult.success) {
|
|
70
71
|
throw pkgUtils.combineSaveErrors('Package2', 'create', createResult.errors);
|
|
71
72
|
}
|
|
72
|
-
if (!
|
|
73
|
+
if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE')) {
|
|
73
74
|
const packageDirectory = createPackageDirEntry(project, options);
|
|
74
75
|
project.getSfProjectJson().addPackageDirectory(packageDirectory);
|
|
75
76
|
project.getSfProjectJson().addPackageAlias(options.name, createResult.id);
|
|
@@ -498,7 +498,7 @@ class PackageVersion {
|
|
|
498
498
|
return updateResult;
|
|
499
499
|
}
|
|
500
500
|
async updateProjectWithPackageVersion(results) {
|
|
501
|
-
if (!
|
|
501
|
+
if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE')) {
|
|
502
502
|
// get the newly created package version from the server
|
|
503
503
|
const versionResult = (await this.connection.tooling.query(`SELECT Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber FROM Package2Version WHERE SubscriberPackageVersionId='${results.SubscriberPackageVersionId}'`)).records[0];
|
|
504
504
|
const aliases = this.project.getAliasesFromPackageId(results.Package2Id);
|
|
@@ -221,7 +221,7 @@ class PackageVersionCreate {
|
|
|
221
221
|
* @private
|
|
222
222
|
*/
|
|
223
223
|
async createPackageVersionCreateRequestFromOptions() {
|
|
224
|
-
const preserveFiles = !!(this.options.preserve ??
|
|
224
|
+
const preserveFiles = !!(this.options.preserve ?? kit_1.env.getBoolean('SFDX_PACKAGE2_VERSION_CREATE_PRESERVE'));
|
|
225
225
|
const uniqueHash = (0, packageUtils_1.uniqid)({ template: `${this.packageId}-%s` });
|
|
226
226
|
const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
|
|
227
227
|
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
|
|
@@ -858,6 +858,7 @@ const packageXmlStringToPackageXmlJson = (rawXml) => {
|
|
|
858
858
|
// make sure types and members is always an array
|
|
859
859
|
isArray: (name) => ['types', 'members'].includes(name),
|
|
860
860
|
});
|
|
861
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
861
862
|
return parser.parse(rawXml).Package;
|
|
862
863
|
};
|
|
863
864
|
exports.packageXmlStringToPackageXmlJson = packageXmlStringToPackageXmlJson;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Connection, SfProject } from '@salesforce/core';
|
|
2
|
+
import { PackageVersionMetadataDownloadOptions, PackageVersionMetadataDownloadResult } from '../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Download the metadata files for a previously published package version, convert them to source format, and put them into a new project folder within the sfdx project.
|
|
5
|
+
*
|
|
6
|
+
* @param project
|
|
7
|
+
* @param options {@link PackageVersionMetadataDownloadOptions}
|
|
8
|
+
* @param connection
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export declare function retrievePackageVersionMetadata(project: SfProject, options: PackageVersionMetadataDownloadOptions, connection: Connection): Promise<PackageVersionMetadataDownloadResult>;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retrievePackageVersionMetadata = void 0;
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (c) 2023, salesforce.com, inc.
|
|
6
|
+
* All rights reserved.
|
|
7
|
+
* Licensed under the BSD 3-Clause license.
|
|
8
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
9
|
+
*/
|
|
10
|
+
const path = require("path");
|
|
11
|
+
const fs = require("fs");
|
|
12
|
+
const core_1 = require("@salesforce/core");
|
|
13
|
+
const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
|
|
14
|
+
const kit_1 = require("@salesforce/kit");
|
|
15
|
+
const packageUtils_1 = require("../utils/packageUtils");
|
|
16
|
+
const packageCreate_1 = require("./packageCreate");
|
|
17
|
+
const package_1 = require("./package");
|
|
18
|
+
const packageVersion_1 = require("./packageVersion");
|
|
19
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
20
|
+
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package');
|
|
21
|
+
let logger;
|
|
22
|
+
const getLogger = () => {
|
|
23
|
+
if (!logger) {
|
|
24
|
+
logger = core_1.Logger.childFromRoot('packageVersionRetrieve');
|
|
25
|
+
}
|
|
26
|
+
return logger;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Download the metadata files for a previously published package version, convert them to source format, and put them into a new project folder within the sfdx project.
|
|
30
|
+
*
|
|
31
|
+
* @param project
|
|
32
|
+
* @param options {@link PackageVersionMetadataDownloadOptions}
|
|
33
|
+
* @param connection
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
async function retrievePackageVersionMetadata(project, options, connection) {
|
|
37
|
+
// Validate the destination path is suitable to extract package version metadata (must be new or empty)
|
|
38
|
+
const destinationFolder = options.destinationFolder ?? 'force-app';
|
|
39
|
+
if (path.isAbsolute(destinationFolder)) {
|
|
40
|
+
throw messages.createError('sourcesDownloadDirectoryMustBeRelative');
|
|
41
|
+
}
|
|
42
|
+
const destinationPath = path.join(project.getPath(), destinationFolder);
|
|
43
|
+
if (!fs.existsSync(destinationPath)) {
|
|
44
|
+
fs.mkdirSync(destinationPath, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
if (!(0, packageUtils_1.isPackageDirectoryEffectivelyEmpty)(destinationPath)) {
|
|
47
|
+
throw messages.createError('sourcesDownloadDirectoryNotEmpty');
|
|
48
|
+
}
|
|
49
|
+
// Get the MetadataZip URL from the MetadataPackageVersion record
|
|
50
|
+
const subscriberPackageVersionId = project.getPackageIdFromAlias(options.subscriberPackageVersionId) ?? options.subscriberPackageVersionId;
|
|
51
|
+
const versionInfo = (await connection.tooling
|
|
52
|
+
.sobject('MetadataPackageVersion')
|
|
53
|
+
.retrieve(subscriberPackageVersionId));
|
|
54
|
+
if (!versionInfo.MetadataZip) {
|
|
55
|
+
throw messages.createError('unableToAccessMetadataZip');
|
|
56
|
+
}
|
|
57
|
+
const responseBase64 = await connection.tooling.request(versionInfo.MetadataZip, {
|
|
58
|
+
encoding: 'base64',
|
|
59
|
+
});
|
|
60
|
+
const buffer = Buffer.from(responseBase64, 'base64');
|
|
61
|
+
let tree = await source_deploy_retrieve_1.ZipTreeContainer.create(buffer);
|
|
62
|
+
let dependencies = [];
|
|
63
|
+
// 2GP packages declare their dependencies in dependency-ids.json within the outer zip.
|
|
64
|
+
if (tree.exists('dependency-ids.json')) {
|
|
65
|
+
const f = await tree.readFile('dependency-ids.json');
|
|
66
|
+
const idsObj = JSON.parse(f.toString());
|
|
67
|
+
if (idsObj?.ids) {
|
|
68
|
+
dependencies = idsObj.ids;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 2GP packages have the package.zip wrapped in an outer zip.
|
|
72
|
+
if (tree.exists('package.zip')) {
|
|
73
|
+
tree = await source_deploy_retrieve_1.ZipTreeContainer.create(await tree.readFile('package.zip'));
|
|
74
|
+
}
|
|
75
|
+
const zipComponents = source_deploy_retrieve_1.ComponentSet.fromSource({
|
|
76
|
+
fsPaths: ['.'],
|
|
77
|
+
tree,
|
|
78
|
+
})
|
|
79
|
+
.getSourceComponents()
|
|
80
|
+
.toArray();
|
|
81
|
+
const result = await new source_deploy_retrieve_1.MetadataConverter().convert(zipComponents, 'source', {
|
|
82
|
+
type: 'directory',
|
|
83
|
+
outputDirectory: destinationPath,
|
|
84
|
+
genUniqueDir: false,
|
|
85
|
+
});
|
|
86
|
+
await attemptToUpdateProjectJson(project, connection, versionInfo.MetadataPackageId, subscriberPackageVersionId, dependencies, destinationFolder);
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
exports.retrievePackageVersionMetadata = retrievePackageVersionMetadata;
|
|
90
|
+
/**
|
|
91
|
+
* Attempt to update the sfdx-project.json file to add information about the retrieved sources. If this fails for some reason we
|
|
92
|
+
* print out an error message and return so the user will still see a list of retrieved metadata.
|
|
93
|
+
*
|
|
94
|
+
*/
|
|
95
|
+
async function attemptToUpdateProjectJson(project, connection, packageId, subscriberPackageVersionId, dependencyIds, destinationFolder) {
|
|
96
|
+
if (kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE')) {
|
|
97
|
+
getLogger().info('Skipping sfdx-project.json updates because SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE is set');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const packageInfo = (await connection.tooling
|
|
102
|
+
.sobject('MetadataPackage')
|
|
103
|
+
.retrieve(packageId));
|
|
104
|
+
if (packageInfo.PackageCategory !== 'Package2') {
|
|
105
|
+
getLogger().info(`Skipping sfdx-project.json updates because ${packageId} is not a 2GP package. It has a PackageCategory of '${packageInfo.PackageCategory}'`);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const queryOptions = {
|
|
109
|
+
whereClause: `WHERE SubscriberPackageVersionId = '${subscriberPackageVersionId}'`,
|
|
110
|
+
};
|
|
111
|
+
const versions = await packageVersion_1.PackageVersion.queryPackage2Version(connection, queryOptions);
|
|
112
|
+
if (versions.length && versions[0]) {
|
|
113
|
+
const version = versions[0];
|
|
114
|
+
const pkg = new package_1.Package({
|
|
115
|
+
packageAliasOrId: version.Package2Id,
|
|
116
|
+
project,
|
|
117
|
+
connection,
|
|
118
|
+
});
|
|
119
|
+
const pkgData = await pkg.getPackageData();
|
|
120
|
+
if (pkgData) {
|
|
121
|
+
const dirEntry = (0, packageCreate_1.createPackageDirEntry)(project, {
|
|
122
|
+
name: pkgData.Name,
|
|
123
|
+
description: pkgData.Description,
|
|
124
|
+
path: destinationFolder,
|
|
125
|
+
noNamespace: pkgData.NamespacePrefix != null,
|
|
126
|
+
orgDependent: pkgData.IsOrgDependent,
|
|
127
|
+
packageType: pkgData.ContainerOptions,
|
|
128
|
+
errorNotificationUsername: pkgData.PackageErrorUsername,
|
|
129
|
+
});
|
|
130
|
+
const dependencies = dependencyIds.map((dep) => ({ package: dep }));
|
|
131
|
+
const namedDir = {
|
|
132
|
+
...dirEntry,
|
|
133
|
+
versionNumber: '<set version number>',
|
|
134
|
+
versionName: '<set version name>',
|
|
135
|
+
ancestorVersion: '<set ancestor version>',
|
|
136
|
+
dependencies,
|
|
137
|
+
};
|
|
138
|
+
project.getSfProjectJson().addPackageDirectory(namedDir);
|
|
139
|
+
const packageVersionVersionString = `${version.MajorVersion}.${version.MinorVersion}.${version.PatchVersion}-${version.BuildNumber}`;
|
|
140
|
+
const [alias, writtenId] = await (0, packageUtils_1.generatePackageAliasEntry)(connection, project, subscriberPackageVersionId, packageVersionVersionString, 'main', pkg.getId());
|
|
141
|
+
project.getSfProjectJson().addPackageAlias(alias, writtenId);
|
|
142
|
+
if (pkgData.ContainerOptions === 'Managed' && !project.getSfProjectJson().getContents().namespace) {
|
|
143
|
+
project.getSfProjectJson().getContents().namespace = pkgData.NamespacePrefix;
|
|
144
|
+
}
|
|
145
|
+
await project.getSfProjectJson().write();
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
getLogger().warn(`Failed to update sfdx-project.json. Could not find package for ${version.Package2Id}. This should never happen.`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
getLogger().info(`Could not find Package2Version record for ${subscriberPackageVersionId}. No updates to sfdx-project.json will be made.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
const msg = e instanceof Error ? e.message : e;
|
|
157
|
+
getLogger().error(`Encountered error trying to update sfdx-project.json after retrieving package version metadata: ${msg}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=packageVersionRetrieve.js.map
|
|
@@ -78,6 +78,7 @@ const profileStringToProfile = (profileString) => {
|
|
|
78
78
|
numberParseOptions: { leadingZeros: false, hex: false },
|
|
79
79
|
isArray: (name) => rewriteProps.includes(name),
|
|
80
80
|
});
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
81
82
|
return parser.parse(profileString).Profile;
|
|
82
83
|
};
|
|
83
84
|
exports.profileStringToProfile = profileStringToProfile;
|
|
@@ -111,11 +111,11 @@ export declare function copyDescriptorProperties(packageDescriptorJson: PackageD
|
|
|
111
111
|
export declare function replaceIfEmpty<T>(value: T, replacement: T): T;
|
|
112
112
|
/**
|
|
113
113
|
* Brand new SFDX projects contain a force-app directory tree contiaining empty folders
|
|
114
|
-
* and a few .
|
|
114
|
+
* and a few .eslintrc.json files. We still want to consider such a directory tree
|
|
115
115
|
* as 'empty' for the sake of operations like downloading package version metadata.
|
|
116
116
|
*
|
|
117
117
|
* @param directory The absolute path to a directory
|
|
118
118
|
* @returns true if the directory contains nothing except empty directories or
|
|
119
|
-
* directories containing only an .
|
|
119
|
+
* directories containing only an .eslintrc.json file.
|
|
120
120
|
*/
|
|
121
121
|
export declare function isPackageDirectoryEffectivelyEmpty(directory: string): boolean;
|
|
@@ -410,12 +410,12 @@ function replaceIfEmpty(value, replacement) {
|
|
|
410
410
|
exports.replaceIfEmpty = replaceIfEmpty;
|
|
411
411
|
/**
|
|
412
412
|
* Brand new SFDX projects contain a force-app directory tree contiaining empty folders
|
|
413
|
-
* and a few .
|
|
413
|
+
* and a few .eslintrc.json files. We still want to consider such a directory tree
|
|
414
414
|
* as 'empty' for the sake of operations like downloading package version metadata.
|
|
415
415
|
*
|
|
416
416
|
* @param directory The absolute path to a directory
|
|
417
417
|
* @returns true if the directory contains nothing except empty directories or
|
|
418
|
-
* directories containing only an .
|
|
418
|
+
* directories containing only an .eslintrc.json file.
|
|
419
419
|
*/
|
|
420
420
|
function isPackageDirectoryEffectivelyEmpty(directory) {
|
|
421
421
|
if (!fs.lstatSync(directory).isDirectory()) {
|
|
@@ -424,7 +424,7 @@ function isPackageDirectoryEffectivelyEmpty(directory) {
|
|
|
424
424
|
const entries = fs.readdirSync(directory, { withFileTypes: true });
|
|
425
425
|
return entries.every((entry) => entry.isDirectory()
|
|
426
426
|
? isPackageDirectoryEffectivelyEmpty((0, path_1.join)(directory, entry.name))
|
|
427
|
-
: entry.name === '.
|
|
427
|
+
: entry.name === '.eslintrc.json');
|
|
428
428
|
}
|
|
429
429
|
exports.isPackageDirectoryEffectivelyEmpty = isPackageDirectoryEffectivelyEmpty;
|
|
430
430
|
//# sourceMappingURL=packageUtils.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/packaging",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "Packaging library for the Salesforce packaging platform",
|
|
5
5
|
"main": "lib/exported",
|
|
6
6
|
"types": "lib/exported.d.ts",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@salesforce/schemas": "^1.6.0",
|
|
48
48
|
"@salesforce/source-deploy-retrieve": "^9.7.13",
|
|
49
49
|
"@salesforce/ts-types": "^2.0.6",
|
|
50
|
-
"fast-xml-parser": "^4.
|
|
50
|
+
"fast-xml-parser": "^4.3.0",
|
|
51
51
|
"globby": "^11",
|
|
52
52
|
"graphology": "^0.25.4",
|
|
53
53
|
"graphology-traversal": "^0.3.1",
|