@salesforce/packaging 1.4.16 → 1.4.18
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/packagingInterfacesAndType.d.ts +37 -33
- package/lib/package/package.d.ts +3 -3
- package/lib/package/package.js +14 -8
- package/lib/package/packageAncestry.d.ts +24 -25
- package/lib/package/packageAncestry.js +159 -147
- package/lib/package/packageConvert.d.ts +1 -1
- package/lib/package/packageConvert.js +16 -22
- package/lib/package/packageCreate.d.ts +1 -1
- package/lib/package/packageCreate.js +15 -26
- package/lib/package/packageDelete.js +4 -1
- package/lib/package/packageInstall.d.ts +5 -4
- package/lib/package/packageInstall.js +10 -9
- package/lib/package/packageProfileApi.d.ts +3 -6
- package/lib/package/packageProfileApi.js +153 -145
- package/lib/package/packageUninstall.js +15 -9
- package/lib/package/packageVersion.d.ts +6 -5
- package/lib/package/packageVersion.js +77 -47
- package/lib/package/packageVersionCreate.d.ts +2 -2
- package/lib/package/packageVersionCreate.js +81 -59
- package/lib/package/packageVersionCreateRequest.d.ts +2 -2
- package/lib/package/packageVersionCreateRequest.js +8 -11
- package/lib/package/packageVersionCreateRequestReport.js +4 -1
- package/lib/package/packageVersionList.d.ts +5 -4
- package/lib/package/packageVersionList.js +18 -18
- package/lib/package/packageVersionReport.js +4 -2
- package/lib/package/subscriberPackageVersion.d.ts +4 -4
- package/lib/package/subscriberPackageVersion.js +23 -10
- package/lib/package/versionNumber.d.ts +8 -3
- package/lib/package/versionNumber.js +13 -4
- package/lib/package1/package1Version.js +17 -12
- package/lib/utils/packageUtils.d.ts +11 -7
- package/lib/utils/packageUtils.js +25 -12
- package/messages/package.md +4 -0
- package/messages/package1Version.md +4 -0
- package/messages/package_version.md +8 -0
- package/messages/package_version_create.md +32 -4
- package/messages/pkg_utils.md +1 -1
- package/package.json +13 -12
|
@@ -16,8 +16,8 @@ const scratchOrgSettingsGenerator_1 = require("@salesforce/core/lib/org/scratchO
|
|
|
16
16
|
const xml2js = require("xml2js");
|
|
17
17
|
const kit_1 = require("@salesforce/kit");
|
|
18
18
|
const pkgUtils = require("../utils/packageUtils");
|
|
19
|
-
const interfaces_1 = require("../interfaces");
|
|
20
19
|
const packageUtils_1 = require("../utils/packageUtils");
|
|
20
|
+
const interfaces_1 = require("../interfaces");
|
|
21
21
|
const packageProfileApi_1 = require("./packageProfileApi");
|
|
22
22
|
const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
|
|
23
23
|
const package_1 = require("./package");
|
|
@@ -38,7 +38,10 @@ class PackageVersionCreate {
|
|
|
38
38
|
return this.packageVersionCreate();
|
|
39
39
|
}
|
|
40
40
|
catch (err) {
|
|
41
|
-
|
|
41
|
+
if (err instanceof Error) {
|
|
42
|
+
throw pkgUtils.applyErrorAction(pkgUtils.massageErrorMessage(err));
|
|
43
|
+
}
|
|
44
|
+
throw err;
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
async validateDependencyValues(dependency) {
|
|
@@ -50,8 +53,11 @@ class PackageVersionCreate {
|
|
|
50
53
|
if (dependency.packageId && dependency.package) {
|
|
51
54
|
throw messages.createError('errorPackageAndPackageIdCollision', []);
|
|
52
55
|
}
|
|
53
|
-
const
|
|
54
|
-
|
|
56
|
+
const idOrPackage = dependency.packageId ?? dependency.package;
|
|
57
|
+
if (!idOrPackage) {
|
|
58
|
+
throw messages.createError('errorPackageOrPackageIdMissing', []);
|
|
59
|
+
}
|
|
60
|
+
const packageIdFromAlias = this.project.getPackageIdFromAlias(idOrPackage) ?? idOrPackage;
|
|
55
61
|
// If valid 04t package, just return it to be used straight away.
|
|
56
62
|
if (pkgUtils.validateIdNoThrow(pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, packageIdFromAlias)) {
|
|
57
63
|
dependency.subscriberPackageVersionId = packageIdFromAlias;
|
|
@@ -87,10 +93,16 @@ class PackageVersionCreate {
|
|
|
87
93
|
// if a 04t id is specified just use it.
|
|
88
94
|
return dependency;
|
|
89
95
|
}
|
|
96
|
+
if (!dependency.versionNumber) {
|
|
97
|
+
throw messages.createError('errorDependencyPair', [JSON.stringify(dependency)]);
|
|
98
|
+
}
|
|
99
|
+
if (!dependency.packageId) {
|
|
100
|
+
throw messages.createError('errorDependencyPair', [JSON.stringify(dependency)]);
|
|
101
|
+
}
|
|
90
102
|
const versionNumber = versionNumber_1.VersionNumber.from(dependency.versionNumber);
|
|
91
103
|
const buildNumber = versionNumber.build;
|
|
92
104
|
// use the dependency.branch if present otherwise use the branch of the version being created
|
|
93
|
-
const branch = dependency.branch
|
|
105
|
+
const branch = dependency.branch === '' ? dependency.branch : this.options.branch;
|
|
94
106
|
const branchString = !branch || branch === '' ? 'null' : `'${branch}'`;
|
|
95
107
|
// resolve a build number keyword to an actual number, if needed
|
|
96
108
|
const resolvedBuildNumber = await this.resolveBuildNumber(versionNumber, dependency.packageId, branch);
|
|
@@ -145,12 +157,12 @@ class PackageVersionCreate {
|
|
|
145
157
|
// query for the LATEST or RELEASED build number (excluding deleted versions)
|
|
146
158
|
let branchCondition = '';
|
|
147
159
|
let releasedCondition = '';
|
|
148
|
-
if (versionNumber
|
|
160
|
+
if (versionNumber.build === versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN) {
|
|
149
161
|
// respect the branch when querying for LATEST
|
|
150
162
|
const branchString = !branch || branch === '' ? 'null' : `'${branch}'`;
|
|
151
163
|
branchCondition = `AND Branch = ${branchString}`;
|
|
152
164
|
}
|
|
153
|
-
else if (versionNumber
|
|
165
|
+
else if (versionNumber.build === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
154
166
|
releasedCondition = 'AND IsReleased = true';
|
|
155
167
|
}
|
|
156
168
|
const query = `SELECT MAX(BuildNumber) FROM Package2Version WHERE Package2Id = '${packageId}' AND IsDeprecated != true AND MajorVersion = ${versionNumber.major} AND MinorVersion = ${versionNumber.minor} AND PatchVersion = ${versionNumber.patch} ${branchCondition} ${releasedCondition}`;
|
|
@@ -176,8 +188,8 @@ class PackageVersionCreate {
|
|
|
176
188
|
InstallKey: this.options.installationkey,
|
|
177
189
|
Instance: this.options.buildinstance,
|
|
178
190
|
SourceOrg: this.options.sourceorg,
|
|
179
|
-
CalculateCodeCoverage: this.options.codecoverage
|
|
180
|
-
SkipValidation: this.options.skipvalidation
|
|
191
|
+
CalculateCodeCoverage: this.options.codecoverage ?? false,
|
|
192
|
+
SkipValidation: this.options.skipvalidation ?? false,
|
|
181
193
|
// note: the createRequest's Language corresponds to the AllPackageVersion's language
|
|
182
194
|
Language: this.options.language,
|
|
183
195
|
};
|
|
@@ -209,7 +221,7 @@ class PackageVersionCreate {
|
|
|
209
221
|
* @private
|
|
210
222
|
*/
|
|
211
223
|
async createPackageVersionCreateRequestFromOptions() {
|
|
212
|
-
const preserveFiles = !!(this.options.preserve
|
|
224
|
+
const preserveFiles = !!(this.options.preserve ?? process.env.SFDX_PACKAGE2_VERSION_CREATE_PRESERVE);
|
|
213
225
|
const uniqueHash = (0, packageUtils_1.uniqid)({ template: `${this.packageId}-%s` });
|
|
214
226
|
const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
|
|
215
227
|
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
|
|
@@ -222,17 +234,17 @@ class PackageVersionCreate {
|
|
|
222
234
|
const seedMetadataZipFile = path.join(packageVersBlobDirectory, 'seed-metadata-package.zip');
|
|
223
235
|
const settingsZipFile = path.join(packageVersBlobDirectory, 'settings.zip');
|
|
224
236
|
const packageVersBlobZipFile = path.join(packageVersTmpRoot, 'package-version-info.zip');
|
|
225
|
-
const sourceBaseDir = path.join(this.project.getPath(), this.packageObject
|
|
237
|
+
const sourceBaseDir = path.join(this.project.getPath(), this.packageObject?.path ?? '');
|
|
226
238
|
const mdOptions = {
|
|
227
239
|
deploydir: packageVersMetadataFolder,
|
|
228
240
|
sourceDir: sourceBaseDir,
|
|
229
|
-
sourceApiVersion: this.project?.getSfProjectJson()?.get('sourceApiVersion'),
|
|
241
|
+
sourceApiVersion: this.project?.getSfProjectJson()?.get('sourceApiVersion') ?? undefined,
|
|
230
242
|
};
|
|
231
243
|
// Stores any additional client side info that might be needed later on in the process
|
|
232
244
|
const clientSideInfo = new Map();
|
|
233
245
|
await fs.promises.mkdir(packageVersBlobDirectory, { recursive: true });
|
|
234
246
|
const settingsGenerator = new scratchOrgSettingsGenerator_1.default({ asDirectory: true });
|
|
235
|
-
|
|
247
|
+
let packageDescriptorJson = (0, kit_1.cloneJson)(this.packageObject);
|
|
236
248
|
const apvLanguage = packageDescriptorJson.language;
|
|
237
249
|
// Copy all the metadata from the workspace to a tmp folder
|
|
238
250
|
const componentSet = await this.metadataResolver.generateMDFolderForArtifact(mdOptions);
|
|
@@ -264,15 +276,7 @@ class PackageVersionCreate {
|
|
|
264
276
|
// this is not allowed, exit with an error
|
|
265
277
|
throw messages.createError('signupDuplicateSettingsSpecified');
|
|
266
278
|
}
|
|
267
|
-
|
|
268
|
-
['country', 'language', 'edition', 'features', 'orgPreferences', 'snapshot', 'release', 'sourceOrg'].forEach((prop) => {
|
|
269
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
270
|
-
const propValue = definitionFileJson[prop];
|
|
271
|
-
if (propValue) {
|
|
272
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
273
|
-
packageDescriptorJson[prop] = propValue;
|
|
274
|
-
}
|
|
275
|
-
});
|
|
279
|
+
packageDescriptorJson = (0, packageUtils_1.copyDescriptorProperties)(packageDescriptorJson, definitionFileJson);
|
|
276
280
|
}
|
|
277
281
|
this.resolveApexTestPermissions(packageDescriptorJson);
|
|
278
282
|
// All dependencies for the packaging dir should be resolved to an 04t id to be passed to the server.
|
|
@@ -282,7 +286,11 @@ class PackageVersionCreate {
|
|
|
282
286
|
this.options.branch = this.options.branch ?? packageDescriptorJson.branch;
|
|
283
287
|
this.options.language = this.options.language ?? apvLanguage;
|
|
284
288
|
const resultValues = await Promise.all(!dependencies ? [] : dependencies.map((dependency) => this.retrieveSubscriberPackageVersionId(dependency)));
|
|
285
|
-
const
|
|
289
|
+
const versionNumber = this.options.versionnumber ?? packageDescriptorJson.versionNumber;
|
|
290
|
+
if (!versionNumber) {
|
|
291
|
+
throw messages.createError('versionNumberRequired');
|
|
292
|
+
}
|
|
293
|
+
const ancestorId = await this.getAncestorId(packageDescriptorJson, this.options.project, versionNumber, !!this.options.skipancestorcheck);
|
|
286
294
|
// If dependencies exist, the resultValues array will contain the dependencies populated with a resolved
|
|
287
295
|
// subscriber pkg version id.
|
|
288
296
|
if (resultValues.length > 0) {
|
|
@@ -301,7 +309,7 @@ class PackageVersionCreate {
|
|
|
301
309
|
return this.createRequestObject(preserveFiles, packageVersTmpRoot, packageVersBlobZipFile);
|
|
302
310
|
}
|
|
303
311
|
verifyHasSource(componentSet) {
|
|
304
|
-
if (componentSet?.converted
|
|
312
|
+
if (componentSet?.converted?.length === 0) {
|
|
305
313
|
throw messages.createError('noSourceInRootDirectory', [this.packageObject.path ?? '<unknown>']);
|
|
306
314
|
}
|
|
307
315
|
}
|
|
@@ -320,8 +328,6 @@ class PackageVersionCreate {
|
|
|
320
328
|
}
|
|
321
329
|
fs.mkdirSync(packageVersMetadataFolder, { recursive: true });
|
|
322
330
|
fs.mkdirSync(packageVersProfileFolder, { recursive: true });
|
|
323
|
-
// Apply any necessary exclusions to typesArr.
|
|
324
|
-
let typesArr = packageJson.Package.types;
|
|
325
331
|
this.apiVersionFromPackageXml = packageJson.Package.version;
|
|
326
332
|
const sourceApiVersion = this.project?.getSfProjectJson()?.get('sourceApiVersion');
|
|
327
333
|
const hasSeedMetadata = await this.metadataResolver.resolveMetadata(this.packageObject.seedMetadata?.path, seedMetadataFolder, 'seedMDDirectoryDoesNotExist', sourceApiVersion);
|
|
@@ -330,17 +336,18 @@ class PackageVersionCreate {
|
|
|
330
336
|
if (this.options.codecoverage) {
|
|
331
337
|
hasUnpackagedMetadata = await this.metadataResolver.resolveMetadata(unpackagedMetadataPath, unpackagedMetadataFolder, 'unpackagedMDDirectoryDoesNotExist', sourceApiVersion);
|
|
332
338
|
}
|
|
333
|
-
// don't package the profiles from any
|
|
339
|
+
// don't package the profiles from any un-packagedMetadata dir in the project
|
|
334
340
|
const profileExcludeDirs = this.project
|
|
335
341
|
.getPackageDirectories()
|
|
336
|
-
.
|
|
337
|
-
.
|
|
338
|
-
typesArr = this.options
|
|
342
|
+
.map((packageDir) => packageDir.unpackagedMetadata?.path)
|
|
343
|
+
.filter((packageDirPath) => packageDirPath);
|
|
344
|
+
const typesArr = this.options?.profileApi?.filterAndGenerateProfilesForManifest(packageJson.Package.types, profileExcludeDirs) ??
|
|
345
|
+
packageJson.Package.types;
|
|
339
346
|
// Next generate profiles and retrieve any profiles that were excluded because they had no matching nodes.
|
|
340
|
-
const excludedProfiles = this.options
|
|
347
|
+
const excludedProfiles = this.options?.profileApi?.generateProfiles(packageVersProfileFolder, {
|
|
341
348
|
Package: typesArr,
|
|
342
349
|
}, profileExcludeDirs);
|
|
343
|
-
if (excludedProfiles
|
|
350
|
+
if (excludedProfiles?.length) {
|
|
344
351
|
const profileIdx = typesArr.findIndex((e) => e.name[0] === 'Profile');
|
|
345
352
|
typesArr[profileIdx].members = typesArr[profileIdx].members.filter((e) => !excludedProfiles.includes(e));
|
|
346
353
|
}
|
|
@@ -351,7 +358,7 @@ class PackageVersionCreate {
|
|
|
351
358
|
});
|
|
352
359
|
const xml = xmlBuilder.buildObject(packageJson);
|
|
353
360
|
// Log information about the profiles being packaged up
|
|
354
|
-
const profiles = this.options
|
|
361
|
+
const profiles = this.options?.profileApi?.getProfileInformation() ?? [];
|
|
355
362
|
profiles.forEach((profile) => {
|
|
356
363
|
if (this.logger.shouldLog(core_1.LoggerLevel.DEBUG)) {
|
|
357
364
|
this.logger.debug(profile.logDebug());
|
|
@@ -419,6 +426,7 @@ class PackageVersionCreate {
|
|
|
419
426
|
}
|
|
420
427
|
// establish the package Id (0ho) and load the package directory
|
|
421
428
|
let packageName;
|
|
429
|
+
let packageObject;
|
|
422
430
|
if (this.options.packageId) {
|
|
423
431
|
const pkg = this.options.packageId;
|
|
424
432
|
// for backward compatibility allow for a packageDirectory package property to be an id (0Ho) instead of an alias.
|
|
@@ -428,23 +436,29 @@ class PackageVersionCreate {
|
|
|
428
436
|
if (!packageName)
|
|
429
437
|
throw messages.createError('errorMissingPackage', [this.options.packageId]);
|
|
430
438
|
}
|
|
431
|
-
|
|
439
|
+
packageObject = this.project.findPackage((namedPackageDir) => namedPackageDir.package === packageName || namedPackageDir.name === packageName);
|
|
432
440
|
}
|
|
433
441
|
else {
|
|
434
442
|
// We'll either have a package ID or alias, or a directory path
|
|
435
|
-
|
|
436
|
-
|
|
443
|
+
if (!this.options.path) {
|
|
444
|
+
throw messages.createError('errorMissingPackagePath', [JSON.stringify(this.options)]);
|
|
445
|
+
}
|
|
446
|
+
packageObject = this.project.getPackageFromPath(this.options.path);
|
|
447
|
+
packageName = packageObject?.package;
|
|
437
448
|
if (!packageName)
|
|
438
449
|
throw messages.createError('errorCouldNotFindPackageUsingPath', [this.options.path]);
|
|
439
450
|
}
|
|
440
|
-
if (!
|
|
451
|
+
if (!packageObject) {
|
|
441
452
|
throw messages.createError('errorCouldNotFindPackageDir', [
|
|
442
453
|
this.options.packageId ? 'packageId or alias' : 'path',
|
|
443
|
-
this.options.packageId
|
|
454
|
+
this.options.packageId ?? this.options.path,
|
|
444
455
|
]);
|
|
445
456
|
}
|
|
457
|
+
else {
|
|
458
|
+
this.packageObject = packageObject;
|
|
459
|
+
}
|
|
446
460
|
this.packageId = this.project.getPackageIdFromAlias(packageName) ?? packageName;
|
|
447
|
-
this.options.profileApi = await this.resolveUserLicenses(this.packageObject.includeProfileUserLicenses);
|
|
461
|
+
this.options.profileApi = await this.resolveUserLicenses(!!this.packageObject.includeProfileUserLicenses);
|
|
448
462
|
// At this point, the packageIdFromAlias should have been resolved to an Id. Now, we
|
|
449
463
|
// need to validate that the Id is correct.
|
|
450
464
|
pkgUtils.validateId(pkgUtils.BY_LABEL.PACKAGE_ID, this.packageId);
|
|
@@ -452,21 +466,20 @@ class PackageVersionCreate {
|
|
|
452
466
|
await this.validateOptionsForPackageType();
|
|
453
467
|
}
|
|
454
468
|
catch (error) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
469
|
+
if (error instanceof Error) {
|
|
470
|
+
if (error.name === 'NOT_FOUND') {
|
|
471
|
+
// this means the 0Ho package was not found in the org. throw a better error.
|
|
472
|
+
throw messages.createError('errorNoIdInHub', [this.packageId]);
|
|
473
|
+
}
|
|
459
474
|
}
|
|
460
|
-
throw
|
|
475
|
+
throw error;
|
|
461
476
|
}
|
|
462
477
|
const request = await this.createPackageVersionCreateRequestFromOptions();
|
|
463
478
|
const createResult = await this.connection.tooling.create('Package2VersionCreateRequest', request);
|
|
464
479
|
if (!createResult.success) {
|
|
465
480
|
const errStr = createResult.errors?.join(', ') ?? createResult.errors;
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
errStr.toString(),
|
|
469
|
-
]);
|
|
481
|
+
const id = createResult.id ?? '';
|
|
482
|
+
throw messages.createError('failedToCreatePVCRequest', [id === '' ? '' : ` [${id}]`, errStr.toString()]);
|
|
470
483
|
}
|
|
471
484
|
return (await (0, packageVersionCreateRequest_1.byId)(createResult.id, this.connection))[0];
|
|
472
485
|
}
|
|
@@ -478,7 +491,6 @@ class PackageVersionCreate {
|
|
|
478
491
|
return dir[0];
|
|
479
492
|
}
|
|
480
493
|
}
|
|
481
|
-
return;
|
|
482
494
|
}
|
|
483
495
|
async getPackageType() {
|
|
484
496
|
// this.packageId should be an 0Ho package Id at this point
|
|
@@ -543,7 +555,7 @@ class PackageVersionCreate {
|
|
|
543
555
|
if (!packageDescriptorJson.versionName) {
|
|
544
556
|
const versionNumber = packageDescriptorJson.versionNumber;
|
|
545
557
|
packageDescriptorJson.versionName =
|
|
546
|
-
versionNumber
|
|
558
|
+
versionNumber?.split(pkgUtils.VERSION_NUMBER_SEP)[3] === versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN
|
|
547
559
|
? versionNumber.substring(0, versionNumber.indexOf(pkgUtils.VERSION_NUMBER_SEP + versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN))
|
|
548
560
|
: versionNumber;
|
|
549
561
|
this.logger.warn(messages.getMessage('defaultVersionName', [packageDescriptorJson.versionName]));
|
|
@@ -605,7 +617,7 @@ class PackageVersionCreate {
|
|
|
605
617
|
async getAncestorId(packageDescriptorJson, project, versionNumberString, skipAncestorCheck) {
|
|
606
618
|
// If an id property is present, use it. Otherwise, look up the package id from the package property.
|
|
607
619
|
const packageId = packageDescriptorJson.id ??
|
|
608
|
-
project.getPackageIdFromAlias(packageDescriptorJson.package) ??
|
|
620
|
+
project.getPackageIdFromAlias(packageDescriptorJson.package ?? '') ??
|
|
609
621
|
packageDescriptorJson.package;
|
|
610
622
|
// No need to proceed if Unlocked
|
|
611
623
|
if ((await this.getPackageType()) === 'Unlocked') {
|
|
@@ -615,7 +627,7 @@ class PackageVersionCreate {
|
|
|
615
627
|
// ancestorID can be alias, 05i, or 04t;
|
|
616
628
|
// validate and convert to 05i, as needed
|
|
617
629
|
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
618
|
-
let origSpecifiedAncestor = packageDescriptorJson.ancestorId;
|
|
630
|
+
let origSpecifiedAncestor = packageDescriptorJson.ancestorId ?? '';
|
|
619
631
|
let highestReleasedVersion = null;
|
|
620
632
|
const explicitUseHighestRelease = packageDescriptorJson.ancestorId === versionNumber_1.BuildNumberToken.HIGHEST_VERSION_NUMBER_TOKEN ||
|
|
621
633
|
packageDescriptorJson.ancestorVersion === versionNumber_1.BuildNumberToken.HIGHEST_VERSION_NUMBER_TOKEN;
|
|
@@ -647,7 +659,7 @@ class PackageVersionCreate {
|
|
|
647
659
|
if (!explicitUseNoAncestor && packageDescriptorJson.ancestorId) {
|
|
648
660
|
ancestorId = project.getPackageIdFromAlias(packageDescriptorJson.ancestorId) ?? packageDescriptorJson.ancestorId;
|
|
649
661
|
(0, packageUtils_1.validateId)([packageUtils_1.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, packageUtils_1.BY_LABEL.PACKAGE_VERSION_ID], ancestorId);
|
|
650
|
-
ancestorId = await (0, packageUtils_1.getPackageVersionId)(ancestorId, this.connection);
|
|
662
|
+
ancestorId = (await (0, packageUtils_1.getPackageVersionId)(ancestorId, this.connection)) ?? '';
|
|
651
663
|
}
|
|
652
664
|
if (!explicitUseNoAncestor && packageDescriptorJson.ancestorVersion) {
|
|
653
665
|
const regNumbers = new RegExp('^[0-9]+$');
|
|
@@ -663,7 +675,7 @@ class PackageVersionCreate {
|
|
|
663
675
|
`WHERE Package2Id = '${packageId}' AND MajorVersion = ${versionNumberSplit[0]} AND MinorVersion = ${versionNumberSplit[1]} AND PatchVersion = ${versionNumberSplit[2]}`;
|
|
664
676
|
let queriedAncestorId;
|
|
665
677
|
const ancestorVersionResult = await this.connection.tooling.query(query);
|
|
666
|
-
if (!ancestorVersionResult
|
|
678
|
+
if (!ancestorVersionResult.totalSize) {
|
|
667
679
|
throw messages.createError('errorNoMatchingAncestor', [packageDescriptorJson.ancestorVersion, packageId]);
|
|
668
680
|
}
|
|
669
681
|
else {
|
|
@@ -715,6 +727,9 @@ class PackageVersionCreate {
|
|
|
715
727
|
return ancestorId;
|
|
716
728
|
}
|
|
717
729
|
async getAncestorIdHighestRelease(packageId, versionNumberString, explicitUseHighestRelease, skipAncestorCheck) {
|
|
730
|
+
if (!packageId) {
|
|
731
|
+
throw messages.createError('packageIdCannotBeUndefined');
|
|
732
|
+
}
|
|
718
733
|
const versionNumber = versionNumberString.split(packageUtils_1.VERSION_NUMBER_SEP);
|
|
719
734
|
const isPatch = versionNumber[2] !== '0';
|
|
720
735
|
const result = {
|
|
@@ -733,7 +748,7 @@ class PackageVersionCreate {
|
|
|
733
748
|
const majorMinorVersionResult = await this.connection.tooling.query(query);
|
|
734
749
|
const majorMinorVersionRecords = majorMinorVersionResult.records;
|
|
735
750
|
if (majorMinorVersionRecords && majorMinorVersionRecords?.length === 1 && majorMinorVersionRecords[0]) {
|
|
736
|
-
result.finalAncestorId = majorMinorVersionRecords[0].Id;
|
|
751
|
+
result.finalAncestorId = majorMinorVersionRecords[0].Id ?? null;
|
|
737
752
|
}
|
|
738
753
|
else {
|
|
739
754
|
const majorMinorNotFound = `${versionNumber[0]}.${versionNumber[1]}.0`;
|
|
@@ -781,17 +796,24 @@ class MetadataResolver {
|
|
|
781
796
|
}
|
|
782
797
|
// convert source to mdapi format and copy to tmp dir packaging up
|
|
783
798
|
async generateMDFolderForArtifact(options) {
|
|
784
|
-
const
|
|
785
|
-
const
|
|
799
|
+
const sourcePaths = (0, kit_1.ensureArray)(options.sourcePaths ?? options.sourceDir ? options.sourceDir : undefined).filter((srcPath) => srcPath);
|
|
800
|
+
const componentSetOptions = {
|
|
786
801
|
sourceapiversion: options.sourceApiVersion,
|
|
787
|
-
sourcepath,
|
|
788
|
-
}
|
|
802
|
+
...(sourcePaths.length > 0 ? { sourcepath: sourcePaths } : {}),
|
|
803
|
+
};
|
|
804
|
+
if (!options.deploydir) {
|
|
805
|
+
throw messages.createError('deploydirCannotBeUndefined', [JSON.stringify(options)]);
|
|
806
|
+
}
|
|
807
|
+
const componentSet = await source_deploy_retrieve_1.ComponentSetBuilder.build(componentSetOptions);
|
|
789
808
|
const packageName = options.packageName;
|
|
790
809
|
const outputDirectory = path.resolve(options.deploydir);
|
|
791
810
|
const convertResult = await this.convertMetadata(componentSet, outputDirectory, packageName);
|
|
792
811
|
if (packageName) {
|
|
793
812
|
// SDR will build an output path like /output/directory/packageName/package.xml
|
|
794
813
|
// this was breaking from toolbelt, so to revert it we copy the directory up a level and delete the original
|
|
814
|
+
if (!convertResult.packagePath) {
|
|
815
|
+
throw messages.createError('packagePathCannotBeUndefined');
|
|
816
|
+
}
|
|
795
817
|
(0, packageUtils_1.copyDir)(convertResult.packagePath, outputDirectory);
|
|
796
818
|
try {
|
|
797
819
|
fs.rmSync(convertResult.packagePath, { recursive: true });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
|
-
import {
|
|
3
|
-
export declare function list(options?: PackageVersionCreateRequestQueryOptions): Promise<PackageVersionCreateRequestResult[]>;
|
|
2
|
+
import { PackageVersionCreateRequestQueryOptions, PackageVersionCreateRequestResult } from '../interfaces';
|
|
3
|
+
export declare function list(connection: Connection, options?: PackageVersionCreateRequestQueryOptions): Promise<PackageVersionCreateRequestResult[]>;
|
|
4
4
|
export declare function byId(packageVersionCreateRequestId: string, connection: Connection): Promise<PackageVersionCreateRequestResult[]>;
|
|
@@ -22,13 +22,16 @@ function formatDate(date) {
|
|
|
22
22
|
const pad = (num) => (num < 10 ? `0${num}` : `${num}`);
|
|
23
23
|
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
24
24
|
}
|
|
25
|
-
async function list(options) {
|
|
25
|
+
async function list(connection, options) {
|
|
26
26
|
try {
|
|
27
27
|
const whereClause = constructWhere(options);
|
|
28
|
-
return await query(util.format(QUERY, whereClause),
|
|
28
|
+
return await query(util.format(QUERY, whereClause), connection);
|
|
29
29
|
}
|
|
30
30
|
catch (err) {
|
|
31
|
-
|
|
31
|
+
if (err instanceof Error) {
|
|
32
|
+
throw (0, packageUtils_1.applyErrorAction)((0, packageUtils_1.massageErrorMessage)(err));
|
|
33
|
+
}
|
|
34
|
+
throw err;
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
exports.list = list;
|
|
@@ -58,14 +61,8 @@ async function query(query, connection) {
|
|
|
58
61
|
}));
|
|
59
62
|
}
|
|
60
63
|
async function queryForErrors(packageVersionCreateRequestId, connection) {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
if (queryResult.records) {
|
|
64
|
-
queryResult.records.forEach((record) => {
|
|
65
|
-
errorResults.push(record.Message);
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return errorResults;
|
|
64
|
+
const queryResult = await connection.tooling.query(`SELECT Message FROM Package2VersionCreateRequestError WHERE ParentRequest.Id = '${packageVersionCreateRequestId}'`);
|
|
65
|
+
return queryResult.records ? queryResult.records.map((record) => record.Message) : [];
|
|
69
66
|
}
|
|
70
67
|
function constructWhere(options) {
|
|
71
68
|
const where = [];
|
|
@@ -17,7 +17,10 @@ async function getCreatePackageVersionCreateRequestReport(options) {
|
|
|
17
17
|
return results[0];
|
|
18
18
|
}
|
|
19
19
|
catch (err) {
|
|
20
|
-
|
|
20
|
+
if (err instanceof Error) {
|
|
21
|
+
throw (0, packageUtils_1.applyErrorAction)((0, packageUtils_1.massageErrorMessage)(err));
|
|
22
|
+
}
|
|
23
|
+
throw err;
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
exports.getCreatePackageVersionCreateRequestReport = getCreatePackageVersionCreateRequestReport;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
1
2
|
import { QueryResult } from 'jsforce';
|
|
2
|
-
import {
|
|
3
|
+
import { PackageVersionListOptions, PackageVersionListResult } from '../interfaces';
|
|
3
4
|
export declare const DEFAULT_ORDER_BY_FIELDS = "Package2Id, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber";
|
|
4
|
-
export declare function listPackageVersions(
|
|
5
|
+
export declare function listPackageVersions(connection: Connection, options?: PackageVersionListOptions): Promise<QueryResult<PackageVersionListResult>>;
|
|
5
6
|
export declare function assembleQueryParts(select: string, where: string[], orderBy?: string): string;
|
|
6
|
-
export declare function constructWhere(
|
|
7
|
-
export declare function validateDays(paramName: string, lastDays
|
|
7
|
+
export declare function constructWhere(options?: PackageVersionListOptions): string[];
|
|
8
|
+
export declare function validateDays(paramName: string, lastDays?: number): number;
|
|
@@ -52,24 +52,24 @@ const getLogger = () => {
|
|
|
52
52
|
}
|
|
53
53
|
return logger;
|
|
54
54
|
};
|
|
55
|
-
async function listPackageVersions(options) {
|
|
56
|
-
return
|
|
55
|
+
async function listPackageVersions(connection, options) {
|
|
56
|
+
return connection.autoFetchQuery(constructQuery(Number(connection.version), options), {
|
|
57
57
|
tooling: true,
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
exports.listPackageVersions = listPackageVersions;
|
|
61
|
-
function constructQuery(options) {
|
|
61
|
+
function constructQuery(connectionVersion, options) {
|
|
62
62
|
// construct custom WHERE clause, if applicable
|
|
63
|
-
const where = constructWhere(options
|
|
63
|
+
const where = constructWhere(options);
|
|
64
64
|
let queryFields = defaultFields;
|
|
65
|
-
if (options
|
|
65
|
+
if (options?.verbose) {
|
|
66
66
|
queryFields = [...queryFields, ...verboseFields];
|
|
67
|
-
if (
|
|
67
|
+
if (connectionVersion >= 57) {
|
|
68
68
|
queryFields = [...queryFields, ...verbose57Fields];
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
const query = `SELECT ${queryFields.toString()} FROM Package2Version`;
|
|
72
|
-
return assembleQueryParts(query, where, options
|
|
72
|
+
return assembleQueryParts(query, where, options?.orderBy);
|
|
73
73
|
}
|
|
74
74
|
function assembleQueryParts(select, where, orderBy) {
|
|
75
75
|
// construct ORDER BY clause
|
|
@@ -81,12 +81,12 @@ function assembleQueryParts(select, where, orderBy) {
|
|
|
81
81
|
}
|
|
82
82
|
exports.assembleQueryParts = assembleQueryParts;
|
|
83
83
|
// construct custom WHERE clause parts
|
|
84
|
-
function constructWhere(
|
|
84
|
+
function constructWhere(options) {
|
|
85
85
|
const where = [];
|
|
86
86
|
// filter on given package ids
|
|
87
|
-
if (
|
|
87
|
+
if (options?.packages?.length) {
|
|
88
88
|
// remove dups
|
|
89
|
-
const uniquePackageIds = [...new Set(
|
|
89
|
+
const uniquePackageIds = [...new Set(options?.packages)];
|
|
90
90
|
// validate ids
|
|
91
91
|
uniquePackageIds.forEach((packageId) => {
|
|
92
92
|
(0, packageUtils_1.validateId)(packageUtils_1.BY_LABEL.PACKAGE_ID, packageId);
|
|
@@ -95,16 +95,16 @@ function constructWhere(packageIds, createdLastDays, lastModLastDays, isReleased
|
|
|
95
95
|
where.push(`Package2Id IN ('${uniquePackageIds.join("','")}')`);
|
|
96
96
|
}
|
|
97
97
|
// filter on created date, days ago: 0 for today, etc
|
|
98
|
-
if ((0, ts_types_1.isNumber)(createdLastDays)) {
|
|
99
|
-
createdLastDays = validateDays('createdlastdays', createdLastDays);
|
|
98
|
+
if ((0, ts_types_1.isNumber)(options?.createdLastDays)) {
|
|
99
|
+
const createdLastDays = validateDays('createdlastdays', options?.createdLastDays);
|
|
100
100
|
where.push(`CreatedDate = LAST_N_DAYS:${createdLastDays}`);
|
|
101
101
|
}
|
|
102
102
|
// filter on last mod date, days ago: 0 for today, etc
|
|
103
|
-
if ((0, ts_types_1.isNumber)(
|
|
104
|
-
|
|
105
|
-
where.push(`LastModifiedDate = LAST_N_DAYS:${
|
|
103
|
+
if ((0, ts_types_1.isNumber)(options?.modifiedLastDays)) {
|
|
104
|
+
const modifiedLastDays = validateDays('modifiedlastdays', options?.modifiedLastDays);
|
|
105
|
+
where.push(`LastModifiedDate = LAST_N_DAYS:${modifiedLastDays}`);
|
|
106
106
|
}
|
|
107
|
-
if (isReleased) {
|
|
107
|
+
if (options?.isReleased) {
|
|
108
108
|
where.push('IsReleased = true');
|
|
109
109
|
}
|
|
110
110
|
// exclude deleted
|
|
@@ -112,9 +112,9 @@ function constructWhere(packageIds, createdLastDays, lastModLastDays, isReleased
|
|
|
112
112
|
return where;
|
|
113
113
|
}
|
|
114
114
|
exports.constructWhere = constructWhere;
|
|
115
|
-
function validateDays(paramName, lastDays) {
|
|
115
|
+
function validateDays(paramName, lastDays = -1) {
|
|
116
116
|
if (lastDays < 0) {
|
|
117
|
-
throw messages.createError('invalidDaysNumber', [paramName,
|
|
117
|
+
throw messages.createError('invalidDaysNumber', [paramName, lastDays]);
|
|
118
118
|
}
|
|
119
119
|
return lastDays;
|
|
120
120
|
}
|
|
@@ -40,8 +40,10 @@ async function getPackageVersionReport(options) {
|
|
|
40
40
|
if (records?.length > 0) {
|
|
41
41
|
const record = records[0];
|
|
42
42
|
record.Version = [record.MajorVersion, record.MinorVersion, record.PatchVersion, record.BuildNumber].join('.');
|
|
43
|
-
const containerOptions = await pkgUtils.getContainerOptions(
|
|
44
|
-
|
|
43
|
+
const containerOptions = await pkgUtils.getContainerOptions(record.Package2Id, options.connection);
|
|
44
|
+
if (containerOptions.size > 0 && record.Package2Id) {
|
|
45
|
+
record.PackageType = containerOptions.get(record.Package2Id);
|
|
46
|
+
}
|
|
45
47
|
record.AncestorVersion = null;
|
|
46
48
|
if (record.AncestorId) {
|
|
47
49
|
// lookup AncestorVersion value
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
2
|
import { Duration } from '@salesforce/kit';
|
|
3
|
-
import { Optional } from '@salesforce/ts-types';
|
|
3
|
+
import { Nullable, Optional } from '@salesforce/ts-types';
|
|
4
4
|
import { InstalledPackages, PackageInstallCreateRequest, PackageInstallOptions, PackageType, PackagingSObjects, SubscriberPackageVersionOptions } from '../interfaces';
|
|
5
5
|
import { VersionNumber } from './versionNumber';
|
|
6
6
|
export declare const SubscriberPackageVersionFields: string[];
|
|
@@ -23,7 +23,7 @@ export declare class SubscriberPackageVersion {
|
|
|
23
23
|
private readonly password;
|
|
24
24
|
private readonly connection;
|
|
25
25
|
private readonly id;
|
|
26
|
-
private data
|
|
26
|
+
private data?;
|
|
27
27
|
constructor(options: SubscriberPackageVersionOptions);
|
|
28
28
|
/**
|
|
29
29
|
* Fetches the status of a package version install request and will wait for the install to complete, if requested
|
|
@@ -35,7 +35,7 @@ export declare class SubscriberPackageVersion {
|
|
|
35
35
|
* @param installationKey
|
|
36
36
|
* @param options
|
|
37
37
|
*/
|
|
38
|
-
static installStatus(connection: Connection, packageInstallRequestOrId: string | PackagingSObjects.PackageInstallRequest, installationKey?: string
|
|
38
|
+
static installStatus(connection: Connection, packageInstallRequestOrId: string | PackagingSObjects.PackageInstallRequest, installationKey?: string | undefined | Nullable<string>, options?: PackageInstallOptions): Promise<PackagingSObjects.PackageInstallRequest>;
|
|
39
39
|
/**
|
|
40
40
|
* list the packages installed in the org
|
|
41
41
|
*
|
|
@@ -135,7 +135,7 @@ export declare class SubscriberPackageVersion {
|
|
|
135
135
|
getData(options?: {
|
|
136
136
|
force?: boolean;
|
|
137
137
|
includeHighCostFields?: boolean;
|
|
138
|
-
}): Promise<PackagingSObjects.SubscriberPackageVersion>;
|
|
138
|
+
}): Promise<PackagingSObjects.SubscriberPackageVersion | undefined>;
|
|
139
139
|
/**
|
|
140
140
|
* Wait for the subscriber package version to be replicated across instances and available to be queried against
|
|
141
141
|
*
|