@salesforce/packaging 0.1.20 → 1.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/interfaces/packagingInterfacesAndType.d.ts +1 -1
- package/lib/package/index.d.ts +1 -5
- package/lib/package/index.js +3 -5
- package/lib/package/package.d.ts +9 -0
- package/lib/package/package.js +22 -6
- package/lib/package/packageAncestry.d.ts +1 -1
- package/lib/package/packageAncestry.js +5 -5
- package/lib/package/packageConvert.js +13 -16
- package/lib/package/packageDelete.js +3 -5
- package/lib/package/packageInstall.js +7 -8
- package/lib/package/packageUninstall.js +2 -2
- package/lib/package/packageVersion.js +17 -17
- package/lib/package/packageVersionCreate.js +41 -38
- package/lib/package/packageVersionCreateRequest.js +2 -2
- package/lib/package/packageVersionList.js +2 -2
- package/lib/package/subscriberPackageVersion.d.ts +8 -2
- package/lib/package/subscriberPackageVersion.js +21 -6
- package/lib/{utils → package}/versionNumber.d.ts +0 -0
- package/lib/{utils → package}/versionNumber.js +0 -0
- package/lib/package1/index.d.ts +1 -1
- package/lib/package1/index.js +3 -15
- package/lib/utils/index.d.ts +1 -3
- package/lib/utils/index.js +5 -17
- package/lib/utils/packageUtils.d.ts +25 -48
- package/lib/utils/packageUtils.js +82 -71
- package/package.json +2 -2
- package/lib/constants.d.ts +0 -26
- package/lib/constants.js +0 -45
- package/lib/package/packageInstalledList.d.ts +0 -3
- package/lib/package/packageInstalledList.js +0 -15
- package/lib/utils/srcDevUtils.d.ts +0 -11
- package/lib/utils/srcDevUtils.js +0 -65
- package/lib/utils/uniqid.d.ts +0 -14
- package/lib/utils/uniqid.js +0 -34
|
@@ -14,14 +14,14 @@ const core_1 = require("@salesforce/core");
|
|
|
14
14
|
const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
|
|
15
15
|
const scratchOrgSettingsGenerator_1 = require("@salesforce/core/lib/org/scratchOrgSettingsGenerator");
|
|
16
16
|
const xml2js = require("xml2js");
|
|
17
|
-
const
|
|
17
|
+
const kit_1 = require("@salesforce/kit");
|
|
18
18
|
const pkgUtils = require("../utils/packageUtils");
|
|
19
|
-
const utils_1 = require("../utils");
|
|
20
19
|
const interfaces_1 = require("../interfaces");
|
|
21
|
-
const
|
|
20
|
+
const packageUtils_1 = require("../utils/packageUtils");
|
|
22
21
|
const packageProfileApi_1 = require("./packageProfileApi");
|
|
23
22
|
const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
|
|
24
23
|
const package_1 = require("./package");
|
|
24
|
+
const versionNumber_1 = require("./versionNumber");
|
|
25
25
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
26
26
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version_create');
|
|
27
27
|
const DESCRIPTOR_FILE = 'package2-descriptor.json';
|
|
@@ -59,7 +59,7 @@ class PackageVersionCreate {
|
|
|
59
59
|
if (packageName) {
|
|
60
60
|
// SDR will build an output path like /output/directory/packageName/package.xml
|
|
61
61
|
// this was breaking from toolbelt, so to revert it we copy the directory up a level and delete the original
|
|
62
|
-
(0,
|
|
62
|
+
(0, packageUtils_1.copyDir)(convertResult.packagePath, outputDirectory);
|
|
63
63
|
try {
|
|
64
64
|
fs.rmSync(convertResult.packagePath, { recursive: true });
|
|
65
65
|
}
|
|
@@ -81,7 +81,8 @@ class PackageVersionCreate {
|
|
|
81
81
|
if (dependency.packageId && dependency.package) {
|
|
82
82
|
throw messages.createError('errorPackageAndPackageIdCollision', []);
|
|
83
83
|
}
|
|
84
|
-
const packageIdFromAlias =
|
|
84
|
+
const packageIdFromAlias = this.project.getPackageIdFromAlias(dependency.packageId || dependency.package) ??
|
|
85
|
+
(dependency.packageId || dependency.package);
|
|
85
86
|
// If valid 04t package, just return it to be used straight away.
|
|
86
87
|
if (pkgUtils.validateIdNoThrow(pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, packageIdFromAlias)) {
|
|
87
88
|
dependency.subscriberPackageVersionId = packageIdFromAlias;
|
|
@@ -93,7 +94,7 @@ class PackageVersionCreate {
|
|
|
93
94
|
// Just override dependency.packageId value to the resolved alias.
|
|
94
95
|
dependency.packageId = packageIdFromAlias;
|
|
95
96
|
pkgUtils.validateId(pkgUtils.BY_LABEL.PACKAGE_ID, dependency.packageId);
|
|
96
|
-
this.validateVersionNumber(dependency.versionNumber,
|
|
97
|
+
this.validateVersionNumber(dependency.versionNumber, versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN, versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN);
|
|
97
98
|
await this.validatePatchVersion(dependency.versionNumber, dependency.packageId);
|
|
98
99
|
// Validate that the Package2 id exists on the server
|
|
99
100
|
const query = `SELECT Id FROM Package2 WHERE Id = '${dependency.packageId}'`;
|
|
@@ -117,7 +118,7 @@ class PackageVersionCreate {
|
|
|
117
118
|
// if a 04t id is specified just use it.
|
|
118
119
|
return dependency;
|
|
119
120
|
}
|
|
120
|
-
const versionNumber =
|
|
121
|
+
const versionNumber = versionNumber_1.VersionNumber.from(dependency.versionNumber);
|
|
121
122
|
const buildNumber = versionNumber.build;
|
|
122
123
|
// use the dependency.branch if present otherwise use the branch of the version being created
|
|
123
124
|
const branch = dependency.branch || dependency.branch === '' ? dependency.branch : this.options.branch;
|
|
@@ -127,7 +128,7 @@ class PackageVersionCreate {
|
|
|
127
128
|
// now that we have a full build number, query for the associated 04t.
|
|
128
129
|
// because the build number may not be unique across versions, add in conditionals for
|
|
129
130
|
// the branch or the RELEASED token (if used)
|
|
130
|
-
const branchOrReleasedCondition = buildNumber ===
|
|
131
|
+
const branchOrReleasedCondition = buildNumber === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN
|
|
131
132
|
? 'AND IsReleased = true'
|
|
132
133
|
: `AND Branch = ${branchString}`;
|
|
133
134
|
const query = `SELECT SubscriberPackageVersionId FROM Package2Version WHERE Package2Id = '${dependency.packageId}' AND MajorVersion = ${versionNumber.major} AND MinorVersion = ${versionNumber.minor} AND PatchVersion = ${versionNumber.patch} AND BuildNumber = ${resolvedBuildNumber} ${branchOrReleasedCondition}`;
|
|
@@ -145,7 +146,7 @@ class PackageVersionCreate {
|
|
|
145
146
|
// warn user of the resolved build number when LATEST and RELEASED keywords are used
|
|
146
147
|
if (versionNumber.isbuildKeyword()) {
|
|
147
148
|
versionNumber.build = resolvedBuildNumber;
|
|
148
|
-
if (buildNumber ===
|
|
149
|
+
if (buildNumber === versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN) {
|
|
149
150
|
this.logger.info(messages.getMessage('buildNumberResolvedForLatest', [
|
|
150
151
|
dependency.package,
|
|
151
152
|
versionNumber.toString(),
|
|
@@ -153,7 +154,7 @@ class PackageVersionCreate {
|
|
|
153
154
|
dependency.subscriberPackageVersionId,
|
|
154
155
|
]));
|
|
155
156
|
}
|
|
156
|
-
else if (buildNumber ===
|
|
157
|
+
else if (buildNumber === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
157
158
|
this.logger.info(messages.getMessage('buildNumberResolvedForReleased', [
|
|
158
159
|
dependency.package,
|
|
159
160
|
versionNumber.toString(),
|
|
@@ -175,18 +176,18 @@ class PackageVersionCreate {
|
|
|
175
176
|
// query for the LATEST or RELEASED build number (excluding deleted versions)
|
|
176
177
|
let branchCondition = '';
|
|
177
178
|
let releasedCondition = '';
|
|
178
|
-
if (versionNumber[3] ===
|
|
179
|
+
if (versionNumber[3] === versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN) {
|
|
179
180
|
// respect the branch when querying for LATEST
|
|
180
181
|
const branchString = !branch || branch === '' ? 'null' : `'${branch}'`;
|
|
181
182
|
branchCondition = `AND Branch = ${branchString}`;
|
|
182
183
|
}
|
|
183
|
-
else if (versionNumber[3] ===
|
|
184
|
+
else if (versionNumber[3] === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
184
185
|
releasedCondition = 'AND IsReleased = true';
|
|
185
186
|
}
|
|
186
187
|
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}`;
|
|
187
188
|
const results = await this.connection.tooling.query(query);
|
|
188
189
|
if (results.records?.length === 0 || results.records[0].expr0 == null) {
|
|
189
|
-
if (versionNumber.build ===
|
|
190
|
+
if (versionNumber.build === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
190
191
|
throw messages.createError('noReleaseVersionFound', [packageId, versionNumber.toString()]);
|
|
191
192
|
}
|
|
192
193
|
else {
|
|
@@ -230,7 +231,7 @@ class PackageVersionCreate {
|
|
|
230
231
|
*/
|
|
231
232
|
async createPackageVersionCreateRequestFromOptions() {
|
|
232
233
|
const preserveFiles = !!(this.options.preserve || process.env.SFDX_PACKAGE2_VERSION_CREATE_PRESERVE);
|
|
233
|
-
const uniqueHash = (0,
|
|
234
|
+
const uniqueHash = (0, packageUtils_1.uniqid)({ template: `${this.packageId}-%s` });
|
|
234
235
|
const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
|
|
235
236
|
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
|
|
236
237
|
const unpackagedMetadataFolder = path.join(packageVersTmpRoot, 'unpackaged-md-files');
|
|
@@ -252,7 +253,7 @@ class PackageVersionCreate {
|
|
|
252
253
|
// Copy all the metadata from the workspace to a tmp folder
|
|
253
254
|
const componentSet = await this.generateMDFolderForArtifact(mdOptions);
|
|
254
255
|
this.verifyHasSource(componentSet);
|
|
255
|
-
const packageDescriptorJson = this.packageObject;
|
|
256
|
+
const packageDescriptorJson = (0, kit_1.cloneJson)(this.packageObject);
|
|
256
257
|
if (packageDescriptorJson.package) {
|
|
257
258
|
delete packageDescriptorJson.package;
|
|
258
259
|
packageDescriptorJson.id = this.packageId;
|
|
@@ -368,19 +369,19 @@ class PackageVersionCreate {
|
|
|
368
369
|
});
|
|
369
370
|
await fs.promises.writeFile(path.join(packageVersMetadataFolder, 'package.xml'), xml, 'utf-8');
|
|
370
371
|
// Zip the packageVersMetadataFolder folder and put the zip in {packageVersBlobDirectory}/package.zip
|
|
371
|
-
await (0,
|
|
372
|
+
await (0, packageUtils_1.zipDir)(packageVersMetadataFolder, metadataZipFile);
|
|
372
373
|
if (hasUnpackagedMetadata) {
|
|
373
374
|
// Zip the unpackagedMetadataFolder folder and put the zip in {packageVersBlobDirectory}/{unpackagedMetadataZipFile}
|
|
374
|
-
await (0,
|
|
375
|
+
await (0, packageUtils_1.zipDir)(unpackagedMetadataFolder, unpackagedMetadataZipFile);
|
|
375
376
|
}
|
|
376
377
|
// Zip up the expanded settings (if present)
|
|
377
378
|
if (settingsGenerator.hasSettings()) {
|
|
378
379
|
await settingsGenerator.createDeploy();
|
|
379
380
|
await settingsGenerator.createDeployPackageContents(this.apiVersionFromPackageXml);
|
|
380
|
-
await (0,
|
|
381
|
+
await (0, packageUtils_1.zipDir)(`${settingsGenerator.getDestinationPath()}${path.sep}${settingsGenerator.getShapeDirName()}`, settingsZipFile);
|
|
381
382
|
}
|
|
382
383
|
// Zip the Version Info and package.zip files into another zip
|
|
383
|
-
await (0,
|
|
384
|
+
await (0, packageUtils_1.zipDir)(packageVersBlobDirectory, packageVersBlobZipFile);
|
|
384
385
|
}
|
|
385
386
|
resolveApexTestPermissions(packageDescriptorJson) {
|
|
386
387
|
// Process permissionSet and permissionSetLicenses that should be enabled when running Apex tests
|
|
@@ -406,7 +407,7 @@ class PackageVersionCreate {
|
|
|
406
407
|
}
|
|
407
408
|
async resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, codeCoverage) {
|
|
408
409
|
// Add the Unpackaged Metadata, if any, to the output directory, only when code coverage is specified
|
|
409
|
-
if (codeCoverage && packageDescriptorJson.unpackagedMetadata
|
|
410
|
+
if (codeCoverage && packageDescriptorJson.unpackagedMetadata?.path) {
|
|
410
411
|
const unpackagedPath = path.join(process.cwd(), packageDescriptorJson.unpackagedMetadata.path);
|
|
411
412
|
if (!fs.existsSync(unpackagedPath)) {
|
|
412
413
|
throw messages.createError('unpackagedMDDirectoryDoesNotExist', [
|
|
@@ -460,7 +461,7 @@ class PackageVersionCreate {
|
|
|
460
461
|
this.options.packageId || this.options.path,
|
|
461
462
|
]);
|
|
462
463
|
}
|
|
463
|
-
this.packageId = this.project.getPackageIdFromAlias(packageName)
|
|
464
|
+
this.packageId = this.project.getPackageIdFromAlias(packageName) ?? packageName;
|
|
464
465
|
this.options.profileApi = await this.resolveUserLicenses(this.packageObject.includeProfileUserLicenses);
|
|
465
466
|
// At this point, the packageIdFromAlias should have been resolved to an Id. Now, we
|
|
466
467
|
// need to validate that the Id is correct.
|
|
@@ -549,8 +550,8 @@ class PackageVersionCreate {
|
|
|
549
550
|
if (!packageDescriptorJson.versionName) {
|
|
550
551
|
const versionNumber = packageDescriptorJson.versionNumber;
|
|
551
552
|
packageDescriptorJson.versionName =
|
|
552
|
-
versionNumber.split(pkgUtils.VERSION_NUMBER_SEP)[3] ===
|
|
553
|
-
? versionNumber.substring(0, versionNumber.indexOf(pkgUtils.VERSION_NUMBER_SEP +
|
|
553
|
+
versionNumber.split(pkgUtils.VERSION_NUMBER_SEP)[3] === versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN
|
|
554
|
+
? versionNumber.substring(0, versionNumber.indexOf(pkgUtils.VERSION_NUMBER_SEP + versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN))
|
|
554
555
|
: versionNumber;
|
|
555
556
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
556
557
|
const { connection: c, project: p, profileApi: a, ...warnOptions } = options;
|
|
@@ -577,7 +578,7 @@ class PackageVersionCreate {
|
|
|
577
578
|
}
|
|
578
579
|
// eslint-disable-next-line class-methods-use-this
|
|
579
580
|
validateVersionNumber(versionNumberString, supportedBuildNumberToken, supportedBuildNumberToken2) {
|
|
580
|
-
const versionNumber =
|
|
581
|
+
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
581
582
|
// build number can be a number or valid token
|
|
582
583
|
if (Number.isNaN(parseInt(`${versionNumber.build}`, 10)) &&
|
|
583
584
|
versionNumber.build !== supportedBuildNumberToken &&
|
|
@@ -603,7 +604,7 @@ class PackageVersionCreate {
|
|
|
603
604
|
}
|
|
604
605
|
// Enforce a patch version of zero (0) for Locked packages only
|
|
605
606
|
if (queryResult.records[0].ContainerOptions === 'Locked') {
|
|
606
|
-
const versionNumber =
|
|
607
|
+
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
607
608
|
if (versionNumber.patch !== '0') {
|
|
608
609
|
throw messages.createError('errorInvalidPatchNumber', [versionNumberString]);
|
|
609
610
|
}
|
|
@@ -612,7 +613,9 @@ class PackageVersionCreate {
|
|
|
612
613
|
// eslint-disable-next-line complexity
|
|
613
614
|
async getAncestorId(packageDescriptorJson, project, versionNumberString, skipAncestorCheck) {
|
|
614
615
|
// If an id property is present, use it. Otherwise, look up the package id from the package property.
|
|
615
|
-
const packageId = packageDescriptorJson.id ??
|
|
616
|
+
const packageId = packageDescriptorJson.id ??
|
|
617
|
+
project.getPackageIdFromAlias(packageDescriptorJson.package) ??
|
|
618
|
+
packageDescriptorJson.package;
|
|
616
619
|
// No need to proceed if Unlocked
|
|
617
620
|
if ((await this.getPackageType()) === 'Unlocked') {
|
|
618
621
|
return '';
|
|
@@ -620,13 +623,13 @@ class PackageVersionCreate {
|
|
|
620
623
|
let ancestorId = '';
|
|
621
624
|
// ancestorID can be alias, 05i, or 04t;
|
|
622
625
|
// validate and convert to 05i, as needed
|
|
623
|
-
const versionNumber =
|
|
626
|
+
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
624
627
|
let origSpecifiedAncestor = packageDescriptorJson.ancestorId;
|
|
625
628
|
let highestReleasedVersion = null;
|
|
626
|
-
const explicitUseHighestRelease = packageDescriptorJson.ancestorId ===
|
|
627
|
-
packageDescriptorJson.ancestorVersion ===
|
|
628
|
-
const explicitUseNoAncestor = packageDescriptorJson.ancestorId ===
|
|
629
|
-
packageDescriptorJson.ancestorVersion ===
|
|
629
|
+
const explicitUseHighestRelease = packageDescriptorJson.ancestorId === versionNumber_1.BuildNumberToken.HIGHEST_VERSION_NUMBER_TOKEN ||
|
|
630
|
+
packageDescriptorJson.ancestorVersion === versionNumber_1.BuildNumberToken.HIGHEST_VERSION_NUMBER_TOKEN;
|
|
631
|
+
const explicitUseNoAncestor = packageDescriptorJson.ancestorId === versionNumber_1.BuildNumberToken.NONE_VERSION_NUMBER_TOKEN ||
|
|
632
|
+
packageDescriptorJson.ancestorVersion === versionNumber_1.BuildNumberToken.NONE_VERSION_NUMBER_TOKEN;
|
|
630
633
|
if ((explicitUseHighestRelease || explicitUseNoAncestor) &&
|
|
631
634
|
packageDescriptorJson.ancestorId &&
|
|
632
635
|
packageDescriptorJson.ancestorVersion) {
|
|
@@ -651,13 +654,13 @@ class PackageVersionCreate {
|
|
|
651
654
|
// at this point if explicitUseHighestRelease=true, we have returned the ancestorId or thrown an error
|
|
652
655
|
// highestReleasedVersion should be null only if skipAncestorCheck or if there is no existing released package version
|
|
653
656
|
if (!explicitUseNoAncestor && packageDescriptorJson.ancestorId) {
|
|
654
|
-
ancestorId =
|
|
655
|
-
(0,
|
|
656
|
-
ancestorId = await (0,
|
|
657
|
+
ancestorId = project.getPackageIdFromAlias(packageDescriptorJson.ancestorId) ?? packageDescriptorJson.ancestorId;
|
|
658
|
+
(0, packageUtils_1.validateId)([packageUtils_1.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, packageUtils_1.BY_LABEL.PACKAGE_VERSION_ID], ancestorId);
|
|
659
|
+
ancestorId = await (0, packageUtils_1.getPackageVersionId)(ancestorId, this.connection);
|
|
657
660
|
}
|
|
658
661
|
if (!explicitUseNoAncestor && packageDescriptorJson.ancestorVersion) {
|
|
659
662
|
const regNumbers = new RegExp('^[0-9]+$');
|
|
660
|
-
const versionNumberSplit = packageDescriptorJson.ancestorVersion.split(
|
|
663
|
+
const versionNumberSplit = packageDescriptorJson.ancestorVersion.split(packageUtils_1.VERSION_NUMBER_SEP);
|
|
661
664
|
if (versionNumberSplit.length < 3 ||
|
|
662
665
|
versionNumberSplit.length > 4 ||
|
|
663
666
|
!versionNumberSplit[0].match(regNumbers) ||
|
|
@@ -701,7 +704,7 @@ class PackageVersionCreate {
|
|
|
701
704
|
}
|
|
702
705
|
else {
|
|
703
706
|
// the explicitUseNoAncestor && skipAncestorCheck case is handled above
|
|
704
|
-
throw messages.createError('errorAncestorNoneNotAllowed', [(0,
|
|
707
|
+
throw messages.createError('errorAncestorNoneNotAllowed', [(0, packageUtils_1.getPackageVersionNumber)(highestReleasedVersion)]);
|
|
705
708
|
}
|
|
706
709
|
}
|
|
707
710
|
if (!isPatch && !skipAncestorCheck) {
|
|
@@ -709,7 +712,7 @@ class PackageVersionCreate {
|
|
|
709
712
|
if (highestReleasedVersion.Id !== ancestorId) {
|
|
710
713
|
throw messages.createError('errorAncestorNotHighest', [
|
|
711
714
|
origSpecifiedAncestor,
|
|
712
|
-
(0,
|
|
715
|
+
(0, packageUtils_1.getPackageVersionNumber)(highestReleasedVersion),
|
|
713
716
|
]);
|
|
714
717
|
}
|
|
715
718
|
}
|
|
@@ -721,7 +724,7 @@ class PackageVersionCreate {
|
|
|
721
724
|
return ancestorId;
|
|
722
725
|
}
|
|
723
726
|
async getAncestorIdHighestRelease(packageId, versionNumberString, explicitUseHighestRelease, skipAncestorCheck) {
|
|
724
|
-
const versionNumber = versionNumberString.split(
|
|
727
|
+
const versionNumber = versionNumberString.split(packageUtils_1.VERSION_NUMBER_SEP);
|
|
725
728
|
const isPatch = versionNumber[2] !== '0';
|
|
726
729
|
const result = {
|
|
727
730
|
finalAncestorId: null,
|
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.byId = exports.list = void 0;
|
|
10
10
|
const util = require("util");
|
|
11
11
|
const core_1 = require("@salesforce/core");
|
|
12
|
-
const
|
|
12
|
+
const packageUtils_1 = require("../utils/packageUtils");
|
|
13
13
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
14
14
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version_create');
|
|
15
15
|
const STATUS_ERROR = 'Error';
|
|
@@ -28,7 +28,7 @@ async function list(options) {
|
|
|
28
28
|
return await query(util.format(QUERY, whereClause), options.connection);
|
|
29
29
|
}
|
|
30
30
|
catch (err) {
|
|
31
|
-
throw (0,
|
|
31
|
+
throw (0, packageUtils_1.applyErrorAction)((0, packageUtils_1.massageErrorMessage)(err));
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
exports.list = list;
|
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.validateDays = exports.constructWhere = exports.assembleQueryParts = exports.listPackageVersions = exports.DEFAULT_ORDER_BY_FIELDS = void 0;
|
|
10
10
|
const core_1 = require("@salesforce/core");
|
|
11
11
|
const ts_types_1 = require("@salesforce/ts-types");
|
|
12
|
-
const
|
|
12
|
+
const packageUtils_1 = require("../utils/packageUtils");
|
|
13
13
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
14
14
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version_create');
|
|
15
15
|
// Stripping CodeCoverage, HasPassedCodeCoverageCheck as they are causing a perf issue in 47.0+ W-6997762
|
|
@@ -59,7 +59,7 @@ function constructWhere(packageIds, createdLastDays, lastModLastDays, isReleased
|
|
|
59
59
|
const uniquePackageIds = [...new Set(packageIds)];
|
|
60
60
|
// validate ids
|
|
61
61
|
uniquePackageIds.forEach((packageId) => {
|
|
62
|
-
(0,
|
|
62
|
+
(0, packageUtils_1.validateId)(packageUtils_1.BY_LABEL.PACKAGE_ID, packageId);
|
|
63
63
|
});
|
|
64
64
|
// stash where part
|
|
65
65
|
where.push(`Package2Id IN ('${uniquePackageIds.join("','")}')`);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
2
|
import { Duration } from '@salesforce/kit';
|
|
3
3
|
import { Optional } from '@salesforce/ts-types';
|
|
4
|
-
import { PackageInstallCreateRequest, PackageInstallOptions, PackageType, PackagingSObjects, SubscriberPackageVersionOptions } from '../interfaces';
|
|
5
|
-
import { VersionNumber } from '
|
|
4
|
+
import { InstalledPackages, PackageInstallCreateRequest, PackageInstallOptions, PackageType, PackagingSObjects, SubscriberPackageVersionOptions } from '../interfaces';
|
|
5
|
+
import { VersionNumber } from './versionNumber';
|
|
6
6
|
export declare const SubscriberPackageVersionFields: string[];
|
|
7
7
|
/**
|
|
8
8
|
* A class that represents a SubscriberPackageVersion
|
|
@@ -25,6 +25,12 @@ export declare class SubscriberPackageVersion {
|
|
|
25
25
|
* @param options
|
|
26
26
|
*/
|
|
27
27
|
static installStatus(connection: Connection, packageInstallRequestOrId: string | PackagingSObjects.PackageInstallRequest, installationKey?: string, options?: PackageInstallOptions): Promise<PackagingSObjects.PackageInstallRequest>;
|
|
28
|
+
/**
|
|
29
|
+
* list the packages installed in the org
|
|
30
|
+
*
|
|
31
|
+
* @param conn: Connection to the org
|
|
32
|
+
*/
|
|
33
|
+
static installedList(conn: Connection): Promise<InstalledPackages[]>;
|
|
28
34
|
/**
|
|
29
35
|
* Reports on the progress of a package version uninstall.
|
|
30
36
|
*
|
|
@@ -9,9 +9,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.SubscriberPackageVersion = exports.SubscriberPackageVersionFields = void 0;
|
|
10
10
|
const core_1 = require("@salesforce/core");
|
|
11
11
|
const kit_1 = require("@salesforce/kit");
|
|
12
|
-
const
|
|
12
|
+
const packageUtils_1 = require("../utils/packageUtils");
|
|
13
13
|
const packageInstall_1 = require("./packageInstall");
|
|
14
14
|
const packageUninstall_1 = require("./packageUninstall");
|
|
15
|
+
const versionNumber_1 = require("./versionNumber");
|
|
15
16
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
16
17
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'subscriber_package_version');
|
|
17
18
|
// these fields have been identified as requiring additional serverside resources in order to calculate their values
|
|
@@ -85,7 +86,7 @@ class SubscriberPackageVersion {
|
|
|
85
86
|
}
|
|
86
87
|
try {
|
|
87
88
|
const project = core_1.SfProject.getInstance();
|
|
88
|
-
this.id = project.getPackageIdFromAlias(this.options.aliasOrId)
|
|
89
|
+
this.id = project.getPackageIdFromAlias(this.options.aliasOrId) ?? this.options.aliasOrId;
|
|
89
90
|
}
|
|
90
91
|
catch (error) {
|
|
91
92
|
const err = error.message;
|
|
@@ -111,7 +112,7 @@ class SubscriberPackageVersion {
|
|
|
111
112
|
static async installStatus(connection, packageInstallRequestOrId, installationKey, options) {
|
|
112
113
|
const id = typeof packageInstallRequestOrId === 'string' ? packageInstallRequestOrId : packageInstallRequestOrId.Id;
|
|
113
114
|
const packageInstallRequest = await (0, packageInstall_1.getStatus)(connection, id);
|
|
114
|
-
const pollingTimeout = (0,
|
|
115
|
+
const pollingTimeout = (0, packageUtils_1.numberToDuration)(options.pollingTimeout) ?? kit_1.Duration.milliseconds(0);
|
|
115
116
|
if (pollingTimeout.milliseconds <= 0) {
|
|
116
117
|
return packageInstallRequest;
|
|
117
118
|
}
|
|
@@ -120,6 +121,20 @@ class SubscriberPackageVersion {
|
|
|
120
121
|
return (0, packageInstall_1.pollStatus)(connection, id, options);
|
|
121
122
|
}
|
|
122
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* list the packages installed in the org
|
|
126
|
+
*
|
|
127
|
+
* @param conn: Connection to the org
|
|
128
|
+
*/
|
|
129
|
+
static async installedList(conn) {
|
|
130
|
+
try {
|
|
131
|
+
const query = 'SELECT Id, SubscriberPackageId, SubscriberPackage.NamespacePrefix, SubscriberPackage.Name, SubscriberPackageVersion.Id, SubscriberPackageVersion.Name, SubscriberPackageVersion.MajorVersion, SubscriberPackageVersion.MinorVersion, SubscriberPackageVersion.PatchVersion, SubscriberPackageVersion.BuildNumber FROM InstalledSubscriberPackage ORDER BY SubscriberPackageId';
|
|
132
|
+
return (await conn.tooling.query(query)).records;
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
throw (0, packageUtils_1.applyErrorAction)((0, packageUtils_1.massageErrorMessage)(err));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
123
138
|
/**
|
|
124
139
|
* Reports on the progress of a package version uninstall.
|
|
125
140
|
*
|
|
@@ -198,7 +213,7 @@ class SubscriberPackageVersion {
|
|
|
198
213
|
const minorVersion = await this.getField('MinorVersion');
|
|
199
214
|
const patchVersion = await this.getField('PatchVersion');
|
|
200
215
|
const buildNumber = await this.getField('BuildNumber');
|
|
201
|
-
return new
|
|
216
|
+
return new versionNumber_1.VersionNumber(majorVersion, minorVersion, patchVersion, buildNumber);
|
|
202
217
|
}
|
|
203
218
|
/**
|
|
204
219
|
* Is the package a managed package?
|
|
@@ -268,7 +283,7 @@ class SubscriberPackageVersion {
|
|
|
268
283
|
}
|
|
269
284
|
try {
|
|
270
285
|
const queryNoKey = `SELECT ${queryFields.toString()} FROM SubscriberPackageVersion WHERE Id ='${await this.getId()}'`;
|
|
271
|
-
const escapedInstallationKey = this.password ? (0,
|
|
286
|
+
const escapedInstallationKey = this.password ? (0, packageUtils_1.escapeInstallationKey)(this.password) : null;
|
|
272
287
|
const queryWithKey = `${queryNoKey} AND InstallationKey ='${escapedInstallationKey}'`;
|
|
273
288
|
this.data = await this.connection.singleRecordQuery(queryWithKey, {
|
|
274
289
|
tooling: true,
|
|
@@ -300,7 +315,7 @@ class SubscriberPackageVersion {
|
|
|
300
315
|
return await SubscriberPackageVersion.installStatus(this.connection, pkgVersionInstallRequest.Id, pkgInstallCreateRequest.Password, options);
|
|
301
316
|
}
|
|
302
317
|
catch (e) {
|
|
303
|
-
throw (0,
|
|
318
|
+
throw (0, packageUtils_1.applyErrorAction)((0, packageUtils_1.massageErrorMessage)(e));
|
|
304
319
|
}
|
|
305
320
|
}
|
|
306
321
|
/**
|
|
File without changes
|
|
File without changes
|
package/lib/package1/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { Package1Version } from './package1Version';
|
package/lib/package1/index.js
CHANGED
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Package1Version = void 0;
|
|
17
4
|
/*
|
|
18
5
|
* Copyright (c) 2022, salesforce.com, inc.
|
|
19
6
|
* All rights reserved.
|
|
20
7
|
* Licensed under the BSD 3-Clause license.
|
|
21
8
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
22
9
|
*/
|
|
23
|
-
|
|
10
|
+
var package1Version_1 = require("./package1Version");
|
|
11
|
+
Object.defineProperty(exports, "Package1Version", { enumerable: true, get: function () { return package1Version_1.Package1Version; } });
|
|
24
12
|
//# sourceMappingURL=index.js.map
|
package/lib/utils/index.d.ts
CHANGED
package/lib/utils/index.js
CHANGED
|
@@ -1,26 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPackageVersionStrings = exports.getContainerOptions = exports.INSTALL_URL_BASE = void 0;
|
|
17
4
|
/*
|
|
18
5
|
* Copyright (c) 2022, salesforce.com, inc.
|
|
19
6
|
* All rights reserved.
|
|
20
7
|
* Licensed under the BSD 3-Clause license.
|
|
21
8
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
22
9
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
var packageUtils_1 = require("./packageUtils");
|
|
11
|
+
Object.defineProperty(exports, "INSTALL_URL_BASE", { enumerable: true, get: function () { return packageUtils_1.INSTALL_URL_BASE; } });
|
|
12
|
+
Object.defineProperty(exports, "getContainerOptions", { enumerable: true, get: function () { return packageUtils_1.getContainerOptions; } });
|
|
13
|
+
Object.defineProperty(exports, "getPackageVersionStrings", { enumerable: true, get: function () { return packageUtils_1.getPackageVersionStrings; } });
|
|
26
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Connection,
|
|
1
|
+
import { Connection, SfdcUrl, SfError, SfProject } from '@salesforce/core';
|
|
2
2
|
import { Many, Nullable } from '@salesforce/ts-types';
|
|
3
3
|
import { SaveError } from 'jsforce';
|
|
4
4
|
import { Duration } from '@salesforce/kit';
|
|
@@ -12,7 +12,6 @@ export declare type IdRegistry = {
|
|
|
12
12
|
[key: string]: IdRegistryValue;
|
|
13
13
|
};
|
|
14
14
|
export declare const INSTALL_URL_BASE: SfdcUrl;
|
|
15
|
-
export declare const SOQL_WHERE_CLAUSE_MAX_LENGTH = 4000;
|
|
16
15
|
export declare const POLL_INTERVAL_SECONDS = 30;
|
|
17
16
|
export declare const DEFAULT_PACKAGE_DIR: {
|
|
18
17
|
path: string;
|
|
@@ -21,10 +20,22 @@ export declare const DEFAULT_PACKAGE_DIR: {
|
|
|
21
20
|
versionNumber: string;
|
|
22
21
|
default: boolean;
|
|
23
22
|
};
|
|
24
|
-
export declare const BY_PREFIX: IdRegistry;
|
|
25
23
|
export declare const BY_LABEL: IdRegistry;
|
|
24
|
+
/**
|
|
25
|
+
* A function to generate a unique id and return it in the context of a template, if supplied.
|
|
26
|
+
*
|
|
27
|
+
* A template is a string that can contain `${%s}` to be replaced with a unique id.
|
|
28
|
+
* If the template contains the "%s" placeholder, it will be replaced with the unique id otherwise the id will be appended to the template.
|
|
29
|
+
*
|
|
30
|
+
* @param options an object with the following properties:
|
|
31
|
+
* - template: a template string.
|
|
32
|
+
* - length: the length of the unique id as presented in hexadecimal.
|
|
33
|
+
*/
|
|
34
|
+
export declare function uniqid(options?: {
|
|
35
|
+
template?: string;
|
|
36
|
+
length?: number;
|
|
37
|
+
}): string;
|
|
26
38
|
export declare function validateId(idObj: Many<IdRegistryValue>, value: string): void;
|
|
27
|
-
export declare function getSourceApiVersion(project: SfProject): string;
|
|
28
39
|
export declare function validateIdNoThrow(idObj: Many<IdRegistryValue>, value: string): IdRegistryValue | boolean;
|
|
29
40
|
export declare function applyErrorAction(err: Error): Error;
|
|
30
41
|
export declare function massageErrorMessage(err: Error): Error;
|
|
@@ -44,13 +55,6 @@ export declare function escapeInstallationKey(key?: string): Nullable<string>;
|
|
|
44
55
|
* @param connection For tooling query
|
|
45
56
|
*/
|
|
46
57
|
export declare function getContainerOptions(packageIds: string[], connection: Connection): Promise<Map<string, PackageType>>;
|
|
47
|
-
/**
|
|
48
|
-
* Return the Package2Version.HasMetadataRemoved field value for the given Id (05i)
|
|
49
|
-
*
|
|
50
|
-
* @param packageVersionId package version ID (05i)
|
|
51
|
-
* @param connection For tooling query
|
|
52
|
-
*/
|
|
53
|
-
export declare function getHasMetadataRemoved(packageVersionId: string, connection: Connection): Promise<boolean>;
|
|
54
58
|
/**
|
|
55
59
|
* Given a list of subscriber package version IDs (04t), return the associated version strings (e.g., Major.Minor.Patch.Build)
|
|
56
60
|
*
|
|
@@ -59,43 +63,7 @@ export declare function getHasMetadataRemoved(packageVersionId: string, connecti
|
|
|
59
63
|
* @param connection For tooling query
|
|
60
64
|
*/
|
|
61
65
|
export declare function getPackageVersionStrings(subscriberPackageVersionIds: string[], connection: Connection): Promise<Map<string, string>>;
|
|
62
|
-
/**
|
|
63
|
-
* For queries with an IN condition, determine if the WHERE clause will exceed
|
|
64
|
-
* SOQL's 4000 character limit. Perform multiple queries as needed to stay below the limit.
|
|
65
|
-
*
|
|
66
|
-
* @return concatenated array of records returned from the resulting query(ies)
|
|
67
|
-
* @param query The full query to execute containing the replaceToken param in its IN clause
|
|
68
|
-
* @param items The IN clause items. A length-appropriate single-quoted comma-separated string chunk will be made from the items.
|
|
69
|
-
* @param replaceToken A placeholder in the query's IN condition that will be replaced with the chunked items
|
|
70
|
-
* @param connection For tooling query
|
|
71
|
-
*/
|
|
72
|
-
export declare function queryWithInConditionChunking<T = Record<string, unknown>>(query: string, items: string[], replaceToken: string, connection: Connection): Promise<T[]>;
|
|
73
|
-
/**
|
|
74
|
-
* Returns the number of items that can be included in a quoted comma-separated string (e.g., "'item1','item2'") not exceeding maxLength
|
|
75
|
-
*/
|
|
76
|
-
export declare function getInClauseItemsCount(items: string[], startIndex: number, maxLength: number): number;
|
|
77
|
-
/**
|
|
78
|
-
* Return a version string in Major.Minor.Patch.Build format, using 0 for any empty part
|
|
79
|
-
*/
|
|
80
|
-
export declare function concatVersion(major: string | number, minor: string | number, patch: string | number, build: string | number): string;
|
|
81
66
|
export declare function getPackageVersionNumber(package2VersionObj: PackagingSObjects.Package2Version): string;
|
|
82
|
-
export declare function getConfigPackageDirectory(packageDirs: NamedPackageDir[] | PackageDir[], lookupProperty: string, lookupValue: unknown): NamedPackageDir | PackageDir | undefined;
|
|
83
|
-
/**
|
|
84
|
-
* Given a packageAlias, attempt to return the associated id from the config
|
|
85
|
-
*
|
|
86
|
-
* @param packageAlias string representing a package alias
|
|
87
|
-
* @param project for obtaining the project config
|
|
88
|
-
* @returns the associated id or the arg given.
|
|
89
|
-
*/
|
|
90
|
-
export declare function getPackageIdFromAlias(packageAlias: string, project: SfProject): string;
|
|
91
|
-
/**
|
|
92
|
-
* Given a package id, attempt to return the associated aliases from the config
|
|
93
|
-
*
|
|
94
|
-
* @param packageId string representing a package id
|
|
95
|
-
* @param project for obtaining the project config
|
|
96
|
-
* @returns an array of alias for the given id.
|
|
97
|
-
*/
|
|
98
|
-
export declare function getPackageAliasesFromId(packageId: string, project: SfProject): string[];
|
|
99
67
|
/**
|
|
100
68
|
* Generate package alias json entry for this package version that can be written to sfdx-project.json
|
|
101
69
|
*
|
|
@@ -108,7 +76,6 @@ export declare function getPackageAliasesFromId(packageId: string, project: SfPr
|
|
|
108
76
|
* @private
|
|
109
77
|
*/
|
|
110
78
|
export declare function generatePackageAliasEntry(connection: Connection, project: SfProject, packageVersionId: string, packageVersionNumber: string, branch: string, packageId: string): Promise<[string, string]>;
|
|
111
|
-
export declare function formatDate(date: Date): string;
|
|
112
79
|
export declare function combineSaveErrors(sObject: string, crudOperation: string, errors: SaveError[]): SfError;
|
|
113
80
|
/**
|
|
114
81
|
* Returns a Duration object from param duration when it is a number, otherwise return itself
|
|
@@ -117,3 +84,13 @@ export declare function combineSaveErrors(sObject: string, crudOperation: string
|
|
|
117
84
|
* @param unit = (Default Duration.Unit.MILLISECONDS) Duration unit of number - See @link {Duration.Unit} for valid values
|
|
118
85
|
*/
|
|
119
86
|
export declare function numberToDuration(duration: number | Duration, unit?: Duration.Unit): Duration;
|
|
87
|
+
/**
|
|
88
|
+
* Zips directory to given zipfile.
|
|
89
|
+
*
|
|
90
|
+
* https://github.com/archiverjs/node-archiver
|
|
91
|
+
*
|
|
92
|
+
* @param dir to zip
|
|
93
|
+
* @param zipfile
|
|
94
|
+
*/
|
|
95
|
+
export declare function zipDir(dir: string, zipfile: string): Promise<void>;
|
|
96
|
+
export declare function copyDir(src: string, dest: string): void;
|