@salesforce/packaging 0.1.20 → 1.0.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/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 +38 -36
- 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,13 @@ 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 uniqid_1 = require("../utils/uniqid");
|
|
18
17
|
const pkgUtils = require("../utils/packageUtils");
|
|
19
|
-
const utils_1 = require("../utils");
|
|
20
18
|
const interfaces_1 = require("../interfaces");
|
|
21
|
-
const
|
|
19
|
+
const packageUtils_1 = require("../utils/packageUtils");
|
|
22
20
|
const packageProfileApi_1 = require("./packageProfileApi");
|
|
23
21
|
const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
|
|
24
22
|
const package_1 = require("./package");
|
|
23
|
+
const versionNumber_1 = require("./versionNumber");
|
|
25
24
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
26
25
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version_create');
|
|
27
26
|
const DESCRIPTOR_FILE = 'package2-descriptor.json';
|
|
@@ -59,7 +58,7 @@ class PackageVersionCreate {
|
|
|
59
58
|
if (packageName) {
|
|
60
59
|
// SDR will build an output path like /output/directory/packageName/package.xml
|
|
61
60
|
// this was breaking from toolbelt, so to revert it we copy the directory up a level and delete the original
|
|
62
|
-
(0,
|
|
61
|
+
(0, packageUtils_1.copyDir)(convertResult.packagePath, outputDirectory);
|
|
63
62
|
try {
|
|
64
63
|
fs.rmSync(convertResult.packagePath, { recursive: true });
|
|
65
64
|
}
|
|
@@ -81,7 +80,8 @@ class PackageVersionCreate {
|
|
|
81
80
|
if (dependency.packageId && dependency.package) {
|
|
82
81
|
throw messages.createError('errorPackageAndPackageIdCollision', []);
|
|
83
82
|
}
|
|
84
|
-
const packageIdFromAlias =
|
|
83
|
+
const packageIdFromAlias = this.project.getPackageIdFromAlias(dependency.packageId || dependency.package) ??
|
|
84
|
+
(dependency.packageId || dependency.package);
|
|
85
85
|
// If valid 04t package, just return it to be used straight away.
|
|
86
86
|
if (pkgUtils.validateIdNoThrow(pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, packageIdFromAlias)) {
|
|
87
87
|
dependency.subscriberPackageVersionId = packageIdFromAlias;
|
|
@@ -93,7 +93,7 @@ class PackageVersionCreate {
|
|
|
93
93
|
// Just override dependency.packageId value to the resolved alias.
|
|
94
94
|
dependency.packageId = packageIdFromAlias;
|
|
95
95
|
pkgUtils.validateId(pkgUtils.BY_LABEL.PACKAGE_ID, dependency.packageId);
|
|
96
|
-
this.validateVersionNumber(dependency.versionNumber,
|
|
96
|
+
this.validateVersionNumber(dependency.versionNumber, versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN, versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN);
|
|
97
97
|
await this.validatePatchVersion(dependency.versionNumber, dependency.packageId);
|
|
98
98
|
// Validate that the Package2 id exists on the server
|
|
99
99
|
const query = `SELECT Id FROM Package2 WHERE Id = '${dependency.packageId}'`;
|
|
@@ -117,7 +117,7 @@ class PackageVersionCreate {
|
|
|
117
117
|
// if a 04t id is specified just use it.
|
|
118
118
|
return dependency;
|
|
119
119
|
}
|
|
120
|
-
const versionNumber =
|
|
120
|
+
const versionNumber = versionNumber_1.VersionNumber.from(dependency.versionNumber);
|
|
121
121
|
const buildNumber = versionNumber.build;
|
|
122
122
|
// use the dependency.branch if present otherwise use the branch of the version being created
|
|
123
123
|
const branch = dependency.branch || dependency.branch === '' ? dependency.branch : this.options.branch;
|
|
@@ -127,7 +127,7 @@ class PackageVersionCreate {
|
|
|
127
127
|
// now that we have a full build number, query for the associated 04t.
|
|
128
128
|
// because the build number may not be unique across versions, add in conditionals for
|
|
129
129
|
// the branch or the RELEASED token (if used)
|
|
130
|
-
const branchOrReleasedCondition = buildNumber ===
|
|
130
|
+
const branchOrReleasedCondition = buildNumber === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN
|
|
131
131
|
? 'AND IsReleased = true'
|
|
132
132
|
: `AND Branch = ${branchString}`;
|
|
133
133
|
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 +145,7 @@ class PackageVersionCreate {
|
|
|
145
145
|
// warn user of the resolved build number when LATEST and RELEASED keywords are used
|
|
146
146
|
if (versionNumber.isbuildKeyword()) {
|
|
147
147
|
versionNumber.build = resolvedBuildNumber;
|
|
148
|
-
if (buildNumber ===
|
|
148
|
+
if (buildNumber === versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN) {
|
|
149
149
|
this.logger.info(messages.getMessage('buildNumberResolvedForLatest', [
|
|
150
150
|
dependency.package,
|
|
151
151
|
versionNumber.toString(),
|
|
@@ -153,7 +153,7 @@ class PackageVersionCreate {
|
|
|
153
153
|
dependency.subscriberPackageVersionId,
|
|
154
154
|
]));
|
|
155
155
|
}
|
|
156
|
-
else if (buildNumber ===
|
|
156
|
+
else if (buildNumber === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
157
157
|
this.logger.info(messages.getMessage('buildNumberResolvedForReleased', [
|
|
158
158
|
dependency.package,
|
|
159
159
|
versionNumber.toString(),
|
|
@@ -175,18 +175,18 @@ class PackageVersionCreate {
|
|
|
175
175
|
// query for the LATEST or RELEASED build number (excluding deleted versions)
|
|
176
176
|
let branchCondition = '';
|
|
177
177
|
let releasedCondition = '';
|
|
178
|
-
if (versionNumber[3] ===
|
|
178
|
+
if (versionNumber[3] === versionNumber_1.BuildNumberToken.LATEST_BUILD_NUMBER_TOKEN) {
|
|
179
179
|
// respect the branch when querying for LATEST
|
|
180
180
|
const branchString = !branch || branch === '' ? 'null' : `'${branch}'`;
|
|
181
181
|
branchCondition = `AND Branch = ${branchString}`;
|
|
182
182
|
}
|
|
183
|
-
else if (versionNumber[3] ===
|
|
183
|
+
else if (versionNumber[3] === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
184
184
|
releasedCondition = 'AND IsReleased = true';
|
|
185
185
|
}
|
|
186
186
|
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
187
|
const results = await this.connection.tooling.query(query);
|
|
188
188
|
if (results.records?.length === 0 || results.records[0].expr0 == null) {
|
|
189
|
-
if (versionNumber.build ===
|
|
189
|
+
if (versionNumber.build === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
190
190
|
throw messages.createError('noReleaseVersionFound', [packageId, versionNumber.toString()]);
|
|
191
191
|
}
|
|
192
192
|
else {
|
|
@@ -230,7 +230,7 @@ class PackageVersionCreate {
|
|
|
230
230
|
*/
|
|
231
231
|
async createPackageVersionCreateRequestFromOptions() {
|
|
232
232
|
const preserveFiles = !!(this.options.preserve || process.env.SFDX_PACKAGE2_VERSION_CREATE_PRESERVE);
|
|
233
|
-
const uniqueHash = (0,
|
|
233
|
+
const uniqueHash = (0, packageUtils_1.uniqid)({ template: `${this.packageId}-%s` });
|
|
234
234
|
const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
|
|
235
235
|
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
|
|
236
236
|
const unpackagedMetadataFolder = path.join(packageVersTmpRoot, 'unpackaged-md-files');
|
|
@@ -368,19 +368,19 @@ class PackageVersionCreate {
|
|
|
368
368
|
});
|
|
369
369
|
await fs.promises.writeFile(path.join(packageVersMetadataFolder, 'package.xml'), xml, 'utf-8');
|
|
370
370
|
// Zip the packageVersMetadataFolder folder and put the zip in {packageVersBlobDirectory}/package.zip
|
|
371
|
-
await (0,
|
|
371
|
+
await (0, packageUtils_1.zipDir)(packageVersMetadataFolder, metadataZipFile);
|
|
372
372
|
if (hasUnpackagedMetadata) {
|
|
373
373
|
// Zip the unpackagedMetadataFolder folder and put the zip in {packageVersBlobDirectory}/{unpackagedMetadataZipFile}
|
|
374
|
-
await (0,
|
|
374
|
+
await (0, packageUtils_1.zipDir)(unpackagedMetadataFolder, unpackagedMetadataZipFile);
|
|
375
375
|
}
|
|
376
376
|
// Zip up the expanded settings (if present)
|
|
377
377
|
if (settingsGenerator.hasSettings()) {
|
|
378
378
|
await settingsGenerator.createDeploy();
|
|
379
379
|
await settingsGenerator.createDeployPackageContents(this.apiVersionFromPackageXml);
|
|
380
|
-
await (0,
|
|
380
|
+
await (0, packageUtils_1.zipDir)(`${settingsGenerator.getDestinationPath()}${path.sep}${settingsGenerator.getShapeDirName()}`, settingsZipFile);
|
|
381
381
|
}
|
|
382
382
|
// Zip the Version Info and package.zip files into another zip
|
|
383
|
-
await (0,
|
|
383
|
+
await (0, packageUtils_1.zipDir)(packageVersBlobDirectory, packageVersBlobZipFile);
|
|
384
384
|
}
|
|
385
385
|
resolveApexTestPermissions(packageDescriptorJson) {
|
|
386
386
|
// Process permissionSet and permissionSetLicenses that should be enabled when running Apex tests
|
|
@@ -460,7 +460,7 @@ class PackageVersionCreate {
|
|
|
460
460
|
this.options.packageId || this.options.path,
|
|
461
461
|
]);
|
|
462
462
|
}
|
|
463
|
-
this.packageId = this.project.getPackageIdFromAlias(packageName)
|
|
463
|
+
this.packageId = this.project.getPackageIdFromAlias(packageName) ?? packageName;
|
|
464
464
|
this.options.profileApi = await this.resolveUserLicenses(this.packageObject.includeProfileUserLicenses);
|
|
465
465
|
// At this point, the packageIdFromAlias should have been resolved to an Id. Now, we
|
|
466
466
|
// need to validate that the Id is correct.
|
|
@@ -549,8 +549,8 @@ class PackageVersionCreate {
|
|
|
549
549
|
if (!packageDescriptorJson.versionName) {
|
|
550
550
|
const versionNumber = packageDescriptorJson.versionNumber;
|
|
551
551
|
packageDescriptorJson.versionName =
|
|
552
|
-
versionNumber.split(pkgUtils.VERSION_NUMBER_SEP)[3] ===
|
|
553
|
-
? versionNumber.substring(0, versionNumber.indexOf(pkgUtils.VERSION_NUMBER_SEP +
|
|
552
|
+
versionNumber.split(pkgUtils.VERSION_NUMBER_SEP)[3] === versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN
|
|
553
|
+
? versionNumber.substring(0, versionNumber.indexOf(pkgUtils.VERSION_NUMBER_SEP + versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN))
|
|
554
554
|
: versionNumber;
|
|
555
555
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
556
556
|
const { connection: c, project: p, profileApi: a, ...warnOptions } = options;
|
|
@@ -577,7 +577,7 @@ class PackageVersionCreate {
|
|
|
577
577
|
}
|
|
578
578
|
// eslint-disable-next-line class-methods-use-this
|
|
579
579
|
validateVersionNumber(versionNumberString, supportedBuildNumberToken, supportedBuildNumberToken2) {
|
|
580
|
-
const versionNumber =
|
|
580
|
+
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
581
581
|
// build number can be a number or valid token
|
|
582
582
|
if (Number.isNaN(parseInt(`${versionNumber.build}`, 10)) &&
|
|
583
583
|
versionNumber.build !== supportedBuildNumberToken &&
|
|
@@ -603,7 +603,7 @@ class PackageVersionCreate {
|
|
|
603
603
|
}
|
|
604
604
|
// Enforce a patch version of zero (0) for Locked packages only
|
|
605
605
|
if (queryResult.records[0].ContainerOptions === 'Locked') {
|
|
606
|
-
const versionNumber =
|
|
606
|
+
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
607
607
|
if (versionNumber.patch !== '0') {
|
|
608
608
|
throw messages.createError('errorInvalidPatchNumber', [versionNumberString]);
|
|
609
609
|
}
|
|
@@ -612,7 +612,9 @@ class PackageVersionCreate {
|
|
|
612
612
|
// eslint-disable-next-line complexity
|
|
613
613
|
async getAncestorId(packageDescriptorJson, project, versionNumberString, skipAncestorCheck) {
|
|
614
614
|
// If an id property is present, use it. Otherwise, look up the package id from the package property.
|
|
615
|
-
const packageId = packageDescriptorJson.id ??
|
|
615
|
+
const packageId = packageDescriptorJson.id ??
|
|
616
|
+
project.getPackageIdFromAlias(packageDescriptorJson.package) ??
|
|
617
|
+
packageDescriptorJson.package;
|
|
616
618
|
// No need to proceed if Unlocked
|
|
617
619
|
if ((await this.getPackageType()) === 'Unlocked') {
|
|
618
620
|
return '';
|
|
@@ -620,13 +622,13 @@ class PackageVersionCreate {
|
|
|
620
622
|
let ancestorId = '';
|
|
621
623
|
// ancestorID can be alias, 05i, or 04t;
|
|
622
624
|
// validate and convert to 05i, as needed
|
|
623
|
-
const versionNumber =
|
|
625
|
+
const versionNumber = versionNumber_1.VersionNumber.from(versionNumberString);
|
|
624
626
|
let origSpecifiedAncestor = packageDescriptorJson.ancestorId;
|
|
625
627
|
let highestReleasedVersion = null;
|
|
626
|
-
const explicitUseHighestRelease = packageDescriptorJson.ancestorId ===
|
|
627
|
-
packageDescriptorJson.ancestorVersion ===
|
|
628
|
-
const explicitUseNoAncestor = packageDescriptorJson.ancestorId ===
|
|
629
|
-
packageDescriptorJson.ancestorVersion ===
|
|
628
|
+
const explicitUseHighestRelease = packageDescriptorJson.ancestorId === versionNumber_1.BuildNumberToken.HIGHEST_VERSION_NUMBER_TOKEN ||
|
|
629
|
+
packageDescriptorJson.ancestorVersion === versionNumber_1.BuildNumberToken.HIGHEST_VERSION_NUMBER_TOKEN;
|
|
630
|
+
const explicitUseNoAncestor = packageDescriptorJson.ancestorId === versionNumber_1.BuildNumberToken.NONE_VERSION_NUMBER_TOKEN ||
|
|
631
|
+
packageDescriptorJson.ancestorVersion === versionNumber_1.BuildNumberToken.NONE_VERSION_NUMBER_TOKEN;
|
|
630
632
|
if ((explicitUseHighestRelease || explicitUseNoAncestor) &&
|
|
631
633
|
packageDescriptorJson.ancestorId &&
|
|
632
634
|
packageDescriptorJson.ancestorVersion) {
|
|
@@ -651,13 +653,13 @@ class PackageVersionCreate {
|
|
|
651
653
|
// at this point if explicitUseHighestRelease=true, we have returned the ancestorId or thrown an error
|
|
652
654
|
// highestReleasedVersion should be null only if skipAncestorCheck or if there is no existing released package version
|
|
653
655
|
if (!explicitUseNoAncestor && packageDescriptorJson.ancestorId) {
|
|
654
|
-
ancestorId =
|
|
655
|
-
(0,
|
|
656
|
-
ancestorId = await (0,
|
|
656
|
+
ancestorId = project.getPackageIdFromAlias(packageDescriptorJson.ancestorId) ?? packageDescriptorJson.ancestorId;
|
|
657
|
+
(0, packageUtils_1.validateId)([packageUtils_1.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, packageUtils_1.BY_LABEL.PACKAGE_VERSION_ID], ancestorId);
|
|
658
|
+
ancestorId = await (0, packageUtils_1.getPackageVersionId)(ancestorId, this.connection);
|
|
657
659
|
}
|
|
658
660
|
if (!explicitUseNoAncestor && packageDescriptorJson.ancestorVersion) {
|
|
659
661
|
const regNumbers = new RegExp('^[0-9]+$');
|
|
660
|
-
const versionNumberSplit = packageDescriptorJson.ancestorVersion.split(
|
|
662
|
+
const versionNumberSplit = packageDescriptorJson.ancestorVersion.split(packageUtils_1.VERSION_NUMBER_SEP);
|
|
661
663
|
if (versionNumberSplit.length < 3 ||
|
|
662
664
|
versionNumberSplit.length > 4 ||
|
|
663
665
|
!versionNumberSplit[0].match(regNumbers) ||
|
|
@@ -701,7 +703,7 @@ class PackageVersionCreate {
|
|
|
701
703
|
}
|
|
702
704
|
else {
|
|
703
705
|
// the explicitUseNoAncestor && skipAncestorCheck case is handled above
|
|
704
|
-
throw messages.createError('errorAncestorNoneNotAllowed', [(0,
|
|
706
|
+
throw messages.createError('errorAncestorNoneNotAllowed', [(0, packageUtils_1.getPackageVersionNumber)(highestReleasedVersion)]);
|
|
705
707
|
}
|
|
706
708
|
}
|
|
707
709
|
if (!isPatch && !skipAncestorCheck) {
|
|
@@ -709,7 +711,7 @@ class PackageVersionCreate {
|
|
|
709
711
|
if (highestReleasedVersion.Id !== ancestorId) {
|
|
710
712
|
throw messages.createError('errorAncestorNotHighest', [
|
|
711
713
|
origSpecifiedAncestor,
|
|
712
|
-
(0,
|
|
714
|
+
(0, packageUtils_1.getPackageVersionNumber)(highestReleasedVersion),
|
|
713
715
|
]);
|
|
714
716
|
}
|
|
715
717
|
}
|
|
@@ -721,7 +723,7 @@ class PackageVersionCreate {
|
|
|
721
723
|
return ancestorId;
|
|
722
724
|
}
|
|
723
725
|
async getAncestorIdHighestRelease(packageId, versionNumberString, explicitUseHighestRelease, skipAncestorCheck) {
|
|
724
|
-
const versionNumber = versionNumberString.split(
|
|
726
|
+
const versionNumber = versionNumberString.split(packageUtils_1.VERSION_NUMBER_SEP);
|
|
725
727
|
const isPatch = versionNumber[2] !== '0';
|
|
726
728
|
const result = {
|
|
727
729
|
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;
|