@salesforce/packaging 0.0.7 → 0.0.10

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/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.10](https://github.com/forcedotcom/packaging/compare/v0.0.9...v0.0.10) (2022-07-26)
6
+
7
+ ### Bug Fixes
8
+
9
+ - add pv report and pvc report ([d5b69be](https://github.com/forcedotcom/packaging/commit/d5b69be112915e8ee885ef88a8e65ffa2e3d8a0f))
10
+
11
+ ### [0.0.9](https://github.com/forcedotcom/packaging/compare/v0.0.8...v0.0.9) (2022-07-19)
12
+
13
+ ### Features
14
+
15
+ - add package1Display method for use with package1:version:display command ([ef3df30](https://github.com/forcedotcom/packaging/commit/ef3df309147bafb16367c957981a04470c6ad7df))
16
+
17
+ ### [0.0.8](https://github.com/forcedotcom/packaging/compare/v0.0.7...v0.0.8) (2022-07-18)
18
+
19
+ ### Features
20
+
21
+ - add package1VersionDisplayGet method ([0de1b9e](https://github.com/forcedotcom/packaging/commit/0de1b9e730dc1dc18c68f4efa7bbc2e2b0b43807))
22
+
5
23
  ### [0.0.7](https://github.com/forcedotcom/packaging/compare/v0.0.6...v0.0.7) (2022-07-14)
6
24
 
7
25
  ### Bug Fixes
@@ -32,7 +32,6 @@ export interface IPackageVersion2GP {
32
32
  update(): Promise<void>;
33
33
  }
34
34
  export declare type PackageOptions = Record<string, unknown>;
35
- export declare type PackageVersion2Options = Record<string, unknown>;
36
35
  export declare type PackageVersionOptions1GP = Record<string, unknown>;
37
36
  export declare type PackageVersionCreateRequestResult = {
38
37
  Id: string;
@@ -47,6 +46,7 @@ export declare type PackageVersionCreateRequestResult = {
47
46
  HasMetadataRemoved: boolean | null;
48
47
  CreatedBy: string;
49
48
  };
49
+ export declare const PackageVersionCreateRequestResultInProgressStatuses: PackagingSObjects.Package2VersionStatus[];
50
50
  export declare type PackageVersionCreateRequestError = {
51
51
  Message: string;
52
52
  };
@@ -92,6 +92,14 @@ export declare type PackageVersionListResult = {
92
92
  BuildDurationInSeconds?: number;
93
93
  HasMetadataRemoved?: boolean;
94
94
  };
95
+ export declare type Package1Display = {
96
+ MetadataPackageVersionId: string;
97
+ MetadataPackageId: string;
98
+ Name: string;
99
+ Version: string;
100
+ ReleaseState: string;
101
+ BuildNumber: number;
102
+ };
95
103
  export declare type PackageType = 'Managed' | 'Unlocked';
96
104
  export declare type PackageCreateOptions = {
97
105
  name: string;
@@ -158,6 +166,7 @@ export declare type PackageVersionCreateOptions = Partial<PackageVersionOptions
158
166
  versionname: string;
159
167
  versionnumber: string;
160
168
  wait: Duration;
169
+ pollInterval: Duration;
161
170
  profileApi: PackageProfileApi;
162
171
  }>;
163
172
  export declare type PackageVersionCreateRequestQueryOptions = {
@@ -170,3 +179,12 @@ export declare type ProfileApiOptions = {
170
179
  includeUserLicenses: boolean;
171
180
  generateProfileInformation: boolean;
172
181
  };
182
+ export declare type PackageVersionReportResult = Partial<PackagingSObjects.Package2Version> & {
183
+ Package2: Partial<PackagingSObjects.Package2>;
184
+ SubscriberPackageVersion?: Pick<PackagingSObjects.SubscriberPackageVersion, 'Dependencies'>;
185
+ Version: string;
186
+ AncestorVersion?: string;
187
+ };
188
+ export declare type PackageVersionCreateReportProgress = PackageVersionCreateRequestResult & {
189
+ remainingWaitTime: Duration;
190
+ };
@@ -6,4 +6,8 @@
6
6
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PackageVersionCreateRequestResultInProgressStatuses = void 0;
10
+ const packagingSObjects_1 = require("./packagingSObjects");
11
+ var Package2VersionStatus = packagingSObjects_1.PackagingSObjects.Package2VersionStatus;
12
+ exports.PackageVersionCreateRequestResultInProgressStatuses = Object.values(Package2VersionStatus).filter((status) => !['Queued', 'Success', 'Error'].includes(status));
9
13
  //# sourceMappingURL=packagingInterfacesAndType.js.map
@@ -53,7 +53,12 @@ export declare namespace PackagingSObjects {
53
53
  queued = "Queued",
54
54
  inProgress = "InProgress",
55
55
  success = "Success",
56
- error = "Error"
56
+ error = "Error",
57
+ initializing = "Initializing",
58
+ verifyingFeaturesAndSettings = "VerifyingFeaturesAndSettings",
59
+ verifyingDependencies = "VerifyingDependencies",
60
+ verifyingMetadata = "VerifyingMetadata",
61
+ finalizingPackageVersion = "FinalizingPackageVersion"
57
62
  }
58
63
  type Package2VersionCreateRequest = {
59
64
  Id: string;
@@ -94,6 +99,25 @@ export declare namespace PackagingSObjects {
94
99
  Description: string;
95
100
  IsPackageValid: boolean;
96
101
  };
102
+ type SubscriberPackageDestinationProfile = {
103
+ description: string;
104
+ displayName: string;
105
+ name: string;
106
+ noAccess: boolean;
107
+ profileId: string;
108
+ type: string;
109
+ };
110
+ type SubscriberPackageSourceProfile = {
111
+ label: string;
112
+ value: string;
113
+ };
114
+ type SubscriberPackageProfiles = {
115
+ destinationProfiles: SubscriberPackageDestinationProfile[];
116
+ sourceProfiles: SubscriberPackageSourceProfile[];
117
+ };
118
+ type SubscriberPackageDependencies = {
119
+ ids: string[];
120
+ };
97
121
  type SubscriberPackageVersion = {
98
122
  Id: string;
99
123
  SubscriberPackageId: string;
@@ -120,8 +144,8 @@ export declare namespace PackagingSObjects {
120
144
  PostInstallUrl: string;
121
145
  RemoteSiteSettings: unknown;
122
146
  CspTrustedSites: unknown;
123
- Profiles: unknown;
124
- Dependencies: unknown;
147
+ Profiles: SubscriberPackageProfiles;
148
+ Dependencies: SubscriberPackageDependencies;
125
149
  InstallValidationStatus: string;
126
150
  };
127
151
  type SubscriberPackageVersionUninstallRequest = {
@@ -223,4 +247,15 @@ export declare namespace PackagingSObjects {
223
247
  SubscriberPackageVersionId: string;
224
248
  MinPackageVersionId: string;
225
249
  };
250
+ type MetadataPackageVersion = {
251
+ Id: string;
252
+ MetadataPackageId: string;
253
+ Name: string;
254
+ ReleaseState: 'Beta' | 'Released';
255
+ MajorVersion: number;
256
+ MinorVersion: number;
257
+ PatchVersion: number;
258
+ BuildNumber: number;
259
+ IsDeprecated: boolean;
260
+ };
226
261
  }
@@ -9,6 +9,11 @@ var PackagingSObjects;
9
9
  Package2VersionStatus["inProgress"] = "InProgress";
10
10
  Package2VersionStatus["success"] = "Success";
11
11
  Package2VersionStatus["error"] = "Error";
12
+ Package2VersionStatus["initializing"] = "Initializing";
13
+ Package2VersionStatus["verifyingFeaturesAndSettings"] = "VerifyingFeaturesAndSettings";
14
+ Package2VersionStatus["verifyingDependencies"] = "VerifyingDependencies";
15
+ Package2VersionStatus["verifyingMetadata"] = "VerifyingMetadata";
16
+ Package2VersionStatus["finalizingPackageVersion"] = "FinalizingPackageVersion";
12
17
  })(Package2VersionStatus = PackagingSObjects.Package2VersionStatus || (PackagingSObjects.Package2VersionStatus = {}));
13
18
  })(PackagingSObjects = exports.PackagingSObjects || (exports.PackagingSObjects = {}));
14
19
  //# sourceMappingURL=packagingSObjects.js.map
@@ -32,7 +32,6 @@ exports._createPackageRequestFromContext = _createPackageRequestFromContext;
32
32
  * @private
33
33
  */
34
34
  function _generatePackageDirEntry(project, options) {
35
- var _a, _b;
36
35
  let packageDirs = project.getPackageDirectories();
37
36
  if (!packageDirs) {
38
37
  packageDirs = [];
@@ -47,8 +46,8 @@ function _generatePackageDirEntry(project, options) {
47
46
  if (packageDir) {
48
47
  // update existing entry
49
48
  packageDir.package = options.name;
50
- (_a = packageDir.versionName) !== null && _a !== void 0 ? _a : (packageDir.versionName = pkgUtils.DEFAULT_PACKAGE_DIR.versionName);
51
- (_b = packageDir.versionNumber) !== null && _b !== void 0 ? _b : (packageDir.versionNumber = pkgUtils.DEFAULT_PACKAGE_DIR.versionNumber);
49
+ packageDir.versionName ?? (packageDir.versionName = pkgUtils.DEFAULT_PACKAGE_DIR.versionName);
50
+ packageDir.versionNumber ?? (packageDir.versionNumber = pkgUtils.DEFAULT_PACKAGE_DIR.versionNumber);
52
51
  // set as default if this is the only entry or no other entry is the default
53
52
  if (!Reflect.getOwnPropertyDescriptor(packageDir, 'default')) {
54
53
  packageDir.default = !pkgUtils.getConfigPackageDirectory(packageDirs, 'default', true);
@@ -97,7 +96,7 @@ async function createPackage(connection, project, options) {
97
96
  }
98
97
  packageId = createResult.id;
99
98
  const queryResult = await connection.tooling.query(`SELECT Id FROM Package2 WHERE Id='${packageId}'`);
100
- if (!(queryResult === null || queryResult === void 0 ? void 0 : queryResult.records[0])) {
99
+ if (!queryResult?.records[0]) {
101
100
  throw messages.createError('unableToFindPackageWithId', [packageId]);
102
101
  }
103
102
  const record = queryResult.records[0];
@@ -1,4 +1,5 @@
1
- import { PackageVersionCreateRequestResult, PackageSaveResult, PackageVersionCreateOptions, PackageVersionOptions } from '../interfaces';
1
+ import { Duration } from '@salesforce/kit';
2
+ import { PackageVersionCreateRequestResult, PackageSaveResult, PackageVersionCreateOptions, PackageVersionOptions, PackageVersionReportResult } from '../interfaces';
2
3
  export declare class PackageVersion {
3
4
  private options;
4
5
  private readonly project;
@@ -14,12 +15,42 @@ export declare class PackageVersion {
14
15
  * Deletes a package version.
15
16
  *
16
17
  * @param idOrAlias
17
- * @param undelete
18
18
  */
19
- delete(idOrAlias: string, undelete?: boolean): Promise<PackageSaveResult>;
19
+ delete(idOrAlias: string): Promise<PackageSaveResult>;
20
+ /**
21
+ * Undeletes a package version.
22
+ *
23
+ * @param idOrAlias
24
+ */
25
+ undelete(idOrAlias: string): Promise<PackageSaveResult>;
26
+ /**
27
+ * Gets the package version report.
28
+ *
29
+ * @param createPackageRequestId
30
+ * @param verbose
31
+ */
32
+ report(createPackageRequestId: string, verbose?: boolean): Promise<PackageVersionReportResult>;
33
+ /**
34
+ * Gets current state of a package version create request.
35
+ *
36
+ * @param createPackageRequestId
37
+ */
38
+ getCreateVersionReport(createPackageRequestId: string): Promise<PackageVersionCreateRequestResult>;
39
+ /**
40
+ * Convenience function that will wait for a package version to be created.
41
+ *
42
+ * This function emits LifeCycle events, "enqueued", "in-progress", "success", "error" and "timed-out" to
43
+ * progress and current status. Events also carry a payload of type PackageVersionCreateRequestResult.
44
+ *
45
+ * @param createPackageVersionRequestId
46
+ * @param wait - how long to wait for the package version to be created
47
+ * @param interval - frequency of checking for the package version to be created
48
+ */
49
+ waitForCreateVersion(createPackageVersionRequestId: string, wait?: Duration, interval?: Duration): Promise<PackageVersionCreateRequestResult>;
20
50
  convert(): Promise<void>;
21
51
  install(): Promise<void>;
22
52
  list(): Promise<void>;
23
53
  uninstall(): Promise<void>;
24
54
  update(): Promise<void>;
55
+ private updateDeprecation;
25
56
  }
@@ -8,9 +8,12 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.PackageVersion = void 0;
10
10
  const core_1 = require("@salesforce/core");
11
+ const kit_1 = require("@salesforce/kit");
11
12
  const pkgUtils = require("../utils/packageUtils");
12
13
  const utils_1 = require("../utils");
13
14
  const packageVersionCreate_1 = require("./packageVersionCreate");
15
+ const packageVersionReport_1 = require("./packageVersionReport");
16
+ const packageVersionCreateRequestReport_1 = require("./packageVersionCreateRequestReport");
14
17
  core_1.Messages.importMessagesDirectory(__dirname);
15
18
  // const messages = Messages.loadMessages('@salesforce/packaging', 'messages');
16
19
  // const logger = Logger.childFromRoot('packageVersionCreate');
@@ -27,31 +30,122 @@ class PackageVersion {
27
30
  */
28
31
  async create(options) {
29
32
  const pvc = new packageVersionCreate_1.PackageVersionCreate({ ...options, ...this.options });
30
- return pvc.createPackageVersion();
33
+ const createResult = await pvc.createPackageVersion();
34
+ const waitResult = await this.waitForCreateVersion(createResult.Id, options.wait ?? kit_1.Duration.milliseconds(0), options.pollInterval ? options.pollInterval : kit_1.Duration.seconds(30)).catch((err) => {
35
+ // TODO
36
+ // until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
37
+ throw pkgUtils.applyErrorAction(err);
38
+ });
39
+ return waitResult;
31
40
  }
32
41
  /**
33
42
  * Deletes a package version.
34
43
  *
35
44
  * @param idOrAlias
36
- * @param undelete
37
45
  */
38
- async delete(idOrAlias, undelete = false) {
39
- const packageVersionId = pkgUtils.getPackageIdFromAlias(idOrAlias, this.project);
40
- // ID can be an 04t or 05i
41
- pkgUtils.validateId([pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, pkgUtils.BY_LABEL.PACKAGE_VERSION_ID], packageVersionId);
42
- // lookup the 05i ID, if needed
43
- const packageId = await pkgUtils.getPackageVersionId(packageVersionId, this.connection);
44
- // setup the request
45
- const request = {
46
- Id: packageId,
47
- IsDeprecated: !undelete,
48
- };
49
- const updateResult = await this.connection.tooling.update('Package2Version', request);
50
- if (!updateResult.success) {
51
- throw (0, utils_1.combineSaveErrors)('Package2', 'update', updateResult.errors);
46
+ async delete(idOrAlias) {
47
+ return this.updateDeprecation(idOrAlias, true);
48
+ }
49
+ /**
50
+ * Undeletes a package version.
51
+ *
52
+ * @param idOrAlias
53
+ */
54
+ async undelete(idOrAlias) {
55
+ return this.updateDeprecation(idOrAlias, false);
56
+ }
57
+ /**
58
+ * Gets the package version report.
59
+ *
60
+ * @param createPackageRequestId
61
+ * @param verbose
62
+ */
63
+ async report(createPackageRequestId, verbose = false) {
64
+ const results = await (0, packageVersionReport_1.getPackageVersionReport)({
65
+ idOrAlias: createPackageRequestId,
66
+ connection: this.connection,
67
+ project: this.project,
68
+ verbose,
69
+ }).catch((err) => {
70
+ // TODO
71
+ // until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
72
+ throw pkgUtils.applyErrorAction(err);
73
+ });
74
+ return results[0];
75
+ }
76
+ /**
77
+ * Gets current state of a package version create request.
78
+ *
79
+ * @param createPackageRequestId
80
+ */
81
+ async getCreateVersionReport(createPackageRequestId) {
82
+ return await (0, packageVersionCreateRequestReport_1.getCreatePackageVersionCreateRequestReport)({
83
+ createPackageVersionRequestId: createPackageRequestId,
84
+ connection: this.connection,
85
+ }).catch((err) => {
86
+ // TODO
87
+ // until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
88
+ throw pkgUtils.applyErrorAction(err);
89
+ });
90
+ }
91
+ /**
92
+ * Convenience function that will wait for a package version to be created.
93
+ *
94
+ * This function emits LifeCycle events, "enqueued", "in-progress", "success", "error" and "timed-out" to
95
+ * progress and current status. Events also carry a payload of type PackageVersionCreateRequestResult.
96
+ *
97
+ * @param createPackageVersionRequestId
98
+ * @param wait - how long to wait for the package version to be created
99
+ * @param interval - frequency of checking for the package version to be created
100
+ */
101
+ async waitForCreateVersion(createPackageVersionRequestId, wait = kit_1.Duration.milliseconds(0), interval = kit_1.Duration.milliseconds(0)) {
102
+ if (wait?.milliseconds <= 0) {
103
+ const result = await this.getCreateVersionReport(createPackageVersionRequestId);
104
+ return result;
105
+ }
106
+ let remainingWaitTime = wait;
107
+ let report;
108
+ const pollingClient = await core_1.PollingClient.create({
109
+ poll: async () => {
110
+ report = await this.getCreateVersionReport(createPackageVersionRequestId);
111
+ switch (report.Status) {
112
+ case 'Queued':
113
+ await core_1.Lifecycle.getInstance().emit('enqueued', { ...report, remainingWaitTime });
114
+ remainingWaitTime = kit_1.Duration.seconds(remainingWaitTime.seconds - interval.seconds);
115
+ return {
116
+ completed: false,
117
+ payload: report,
118
+ };
119
+ case 'InProgress':
120
+ case 'Initializing':
121
+ case 'VerifyingFeaturesAndSettings':
122
+ case 'VerifyingDependencies':
123
+ case 'VerifyingMetadata':
124
+ case 'FinalizingPackageVersion':
125
+ await core_1.Lifecycle.getInstance().emit('in-progress', { ...report, remainingWaitTime });
126
+ remainingWaitTime = kit_1.Duration.seconds(remainingWaitTime.seconds - interval.seconds);
127
+ return {
128
+ completed: false,
129
+ payload: report,
130
+ };
131
+ case 'Success':
132
+ await core_1.Lifecycle.getInstance().emit('success', report);
133
+ return { completed: true, payload: report };
134
+ case 'Error':
135
+ await core_1.Lifecycle.getInstance().emit('error', report);
136
+ return { completed: true, payload: report };
137
+ }
138
+ },
139
+ frequency: interval,
140
+ timeout: wait,
141
+ });
142
+ try {
143
+ return pollingClient.subscribe();
144
+ }
145
+ catch (err) {
146
+ await core_1.Lifecycle.getInstance().emit('timed-out', report);
147
+ throw pkgUtils.applyErrorAction(err);
52
148
  }
53
- updateResult.id = await pkgUtils.getSubscriberPackageVersionId(packageVersionId, this.connection);
54
- return updateResult;
55
149
  }
56
150
  convert() {
57
151
  return Promise.resolve(undefined);
@@ -68,6 +162,24 @@ class PackageVersion {
68
162
  update() {
69
163
  return Promise.resolve(undefined);
70
164
  }
165
+ async updateDeprecation(idOrAlias, IsDeprecated) {
166
+ const packageVersionId = pkgUtils.getPackageIdFromAlias(idOrAlias, this.project);
167
+ // ID can be an 04t or 05i
168
+ pkgUtils.validateId([pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, pkgUtils.BY_LABEL.PACKAGE_VERSION_ID], packageVersionId);
169
+ // lookup the 05i ID, if needed
170
+ const packageId = await pkgUtils.getPackageVersionId(packageVersionId, this.connection);
171
+ // setup the request
172
+ const request = {
173
+ Id: packageId,
174
+ IsDeprecated,
175
+ };
176
+ const updateResult = await this.connection.tooling.update('Package2Version', request);
177
+ if (!updateResult.success) {
178
+ throw (0, utils_1.combineSaveErrors)('Package2', 'update', updateResult.errors);
179
+ }
180
+ updateResult.id = await pkgUtils.getSubscriberPackageVersionId(packageVersionId, this.connection);
181
+ return updateResult;
182
+ }
71
183
  }
72
184
  exports.PackageVersion = PackageVersion;
73
185
  //# sourceMappingURL=packageVersion.js.map
@@ -48,8 +48,7 @@ class PackageVersionCreate {
48
48
  }
49
49
  // convert source to mdapi format and copy to tmp dir packaging up
50
50
  async generateMDFolderForArtifact(options) {
51
- var _a;
52
- const sourcepath = (_a = options.sourcePaths) !== null && _a !== void 0 ? _a : [options.sourceDir];
51
+ const sourcepath = options.sourcePaths ?? [options.sourceDir];
53
52
  const componentSet = await source_deploy_retrieve_1.ComponentSetBuilder.build({
54
53
  sourceapiversion: this.project.getSfProjectJson().get('sourceApiVersion'),
55
54
  sourcepath,
@@ -558,22 +557,13 @@ class PackageVersionCreate {
558
557
  return value;
559
558
  }
560
559
  async packageVersionCreate(options) {
561
- var _a, _b;
562
- let pollInterval = kit_1.Duration.seconds(pkgUtils.POLL_INTERVAL_SECONDS);
563
- let maxRetries = 0;
564
- if (((_a = options.wait) === null || _a === void 0 ? void 0 : _a.milliseconds) > 0) {
565
- if (options.skipvalidation === true) {
566
- pollInterval = kit_1.Duration.seconds(POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS);
567
- }
568
- maxRetries = (60 / pollInterval.seconds) * options.wait.seconds;
569
- }
570
560
  // For the first rollout of validating sfdx-project.json data against schema, make it optional and defaulted
571
561
  // to false. Validation only occurs if the hidden -j (--validateschema) flag has been specified.
572
562
  if (options.validateschema) {
573
563
  await this.project.getSfProjectJson().schemaValidate();
574
564
  }
575
565
  // Check for empty packageDirectories
576
- if (((_b = this.project.getPackageDirectories()) === null || _b === void 0 ? void 0 : _b.length) === 0) {
566
+ if (this.project.getPackageDirectories()?.length === 0) {
577
567
  throw messages.createError('errorEmptyPackageDirs');
578
568
  }
579
569
  const canonicalPackageProperty = this.resolveCanonicalPackageProperty(options);
@@ -590,7 +580,6 @@ class PackageVersionCreate {
590
580
  throw messages.createError('directoryDoesNotExist', [options.path]);
591
581
  }
592
582
  options.profileApi = await this.resolveUserLicenses(canonicalPackageProperty, options);
593
- [pollInterval, maxRetries] = await this.resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries);
594
583
  const request = await this.createPackageVersionCreateRequestFromOptions(options, resolvedPackageId, versionNumberString);
595
584
  const createResult = await this.connection.tooling.create('Package2VersionCreateRequest', request);
596
585
  if (!createResult.success) {
@@ -600,17 +589,16 @@ class PackageVersionCreate {
600
589
  errStr.toString(),
601
590
  ]);
602
591
  }
603
- let result;
604
- if (options.wait && options.wait.milliseconds > 0) {
605
- pollInterval = pollInterval !== null && pollInterval !== void 0 ? pollInterval : kit_1.Duration.seconds(options.wait.seconds / maxRetries);
606
- if (pollInterval) {
607
- result = await pkgUtils.pollForStatusWithInterval(createResult.id, maxRetries, resolvedPackageId, options.branch, this.project, this.connection, pollInterval);
592
+ let pollInterval = kit_1.Duration.seconds(pkgUtils.POLL_INTERVAL_SECONDS);
593
+ let maxRetries = 0;
594
+ if (options.wait?.milliseconds > 0) {
595
+ if (options.skipvalidation === true) {
596
+ pollInterval = kit_1.Duration.seconds(POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS);
608
597
  }
598
+ maxRetries = (60 / pollInterval.seconds) * options.wait.seconds;
609
599
  }
610
- else {
611
- result = (await this.listRequestById(createResult.id, this.connection))[0];
612
- }
613
- return result;
600
+ [pollInterval, maxRetries] = await this.resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries);
601
+ return (await this.listRequestById(createResult.id, this.connection))[0];
614
602
  }
615
603
  resolveCanonicalPackageProperty(options) {
616
604
  let canonicalPackageProperty;
@@ -0,0 +1,6 @@
1
+ import { Connection } from '@salesforce/core';
2
+ import { PackageVersionCreateRequestResult } from '../interfaces';
3
+ export declare function getCreatePackageVersionCreateRequestReport(options: {
4
+ createPackageVersionRequestId: string;
5
+ connection: Connection;
6
+ }): Promise<PackageVersionCreateRequestResult>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getCreatePackageVersionCreateRequestReport = void 0;
10
+ const pkgUtils = require("../utils/packageUtils");
11
+ const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
12
+ async function getCreatePackageVersionCreateRequestReport(options) {
13
+ pkgUtils.validateId(pkgUtils.BY_LABEL.PACKAGE_VERSION_CREATE_REQUEST_ID, options.createPackageVersionRequestId);
14
+ const results = await (0, packageVersionCreateRequest_1.byId)(options.createPackageVersionRequestId, options.connection);
15
+ return results[0];
16
+ }
17
+ exports.getCreatePackageVersionCreateRequestReport = getCreatePackageVersionCreateRequestReport;
18
+ //# sourceMappingURL=packageVersionCreateRequestReport.js.map
@@ -51,7 +51,7 @@ exports._assembleQueryParts = _assembleQueryParts;
51
51
  function _constructWhere(idsOrAliases, createdLastDays, lastModLastDays, project) {
52
52
  const where = [];
53
53
  // filter on given package ids
54
- if ((idsOrAliases === null || idsOrAliases === void 0 ? void 0 : idsOrAliases.length) > 0) {
54
+ if (idsOrAliases?.length > 0) {
55
55
  // remove dups
56
56
  const aliasesOrIds = [...new Set(idsOrAliases)];
57
57
  // resolve any aliases
@@ -0,0 +1,8 @@
1
+ import { Connection, SfProject } from '@salesforce/core';
2
+ import { PackageVersionReportResult } from '../interfaces';
3
+ export declare function getPackageVersionReport(options: {
4
+ idOrAlias: string;
5
+ connection: Connection;
6
+ project: SfProject;
7
+ verbose: boolean;
8
+ }): Promise<PackageVersionReportResult[]>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2020, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getPackageVersionReport = void 0;
10
+ // Node
11
+ const util = require("util");
12
+ // Local
13
+ const core_1 = require("@salesforce/core");
14
+ const pkgUtils = require("../utils/packageUtils");
15
+ const QUERY = 'SELECT Package2Id, SubscriberPackageVersionId, Name, Description, Tag, Branch, AncestorId, ValidationSkipped, ' +
16
+ 'MajorVersion, MinorVersion, PatchVersion, BuildNumber, IsReleased, CodeCoverage, HasPassedCodeCoverageCheck, ' +
17
+ 'Package2.IsOrgDependent, ReleaseVersion, BuildDurationInSeconds, HasMetadataRemoved, CreatedById ' +
18
+ 'FROM Package2Version ' +
19
+ "WHERE Id = '%s' AND IsDeprecated != true " +
20
+ 'ORDER BY Package2Id, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber';
21
+ // verbose adds: Id, ConvertedFromVersionId, SubscriberPackageVersion.Dependencies
22
+ const QUERY_VERBOSE = 'SELECT Id, Package2Id, SubscriberPackageVersionId, Name, Description, Tag, Branch, AncestorId, ValidationSkipped, ' +
23
+ 'MajorVersion, MinorVersion, PatchVersion, BuildNumber, IsReleased, CodeCoverage, HasPassedCodeCoverageCheck, ConvertedFromVersionId, ' +
24
+ 'Package2.IsOrgDependent, ReleaseVersion, BuildDurationInSeconds, HasMetadataRemoved, SubscriberPackageVersion.Dependencies, ' +
25
+ 'CreatedById, CodeCoveragePercentages ' +
26
+ 'FROM Package2Version ' +
27
+ "WHERE Id = '%s' AND IsDeprecated != true " +
28
+ 'ORDER BY Package2Id, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber';
29
+ const logger = core_1.Logger.childFromRoot('getPackageVersionReport');
30
+ async function getPackageVersionReport(options) {
31
+ logger.debug(`entering getPackageVersionReport(${util.inspect(options, { depth: null })})`);
32
+ let packageVersionId = pkgUtils.getPackageIdFromAlias(options.idOrAlias, options.project);
33
+ // ID can be an 04t or 05i
34
+ pkgUtils.validateId([pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, pkgUtils.BY_LABEL.PACKAGE_VERSION_ID], packageVersionId);
35
+ // lookup the 05i ID, if needed
36
+ packageVersionId = await pkgUtils.getPackageVersionId(packageVersionId, options.connection);
37
+ const queryResult = await options.connection.tooling.query(util.format(options.verbose ? QUERY_VERBOSE : QUERY, packageVersionId));
38
+ const records = queryResult.records;
39
+ if (records && records.length > 0) {
40
+ const record = records[0];
41
+ record.Version = [record.MajorVersion, record.MinorVersion, record.PatchVersion, record.BuildNumber].join('.');
42
+ const containerOptions = await pkgUtils.getContainerOptions([record.Package2Id], options.connection);
43
+ const packageType = containerOptions.get(record.Package2Id);
44
+ let ancestorVersion = null;
45
+ if (record.AncestorId) {
46
+ // lookup AncestorVersion value
47
+ const ancestorVersionMap = await pkgUtils.getPackageVersionStrings([record.AncestorId], options.connection);
48
+ ancestorVersion = ancestorVersionMap.get(record.AncestorId);
49
+ }
50
+ else {
51
+ // otherwise display 'N/A' if package is Unlocked Packages
52
+ if (packageType !== 'Managed') {
53
+ ancestorVersion = null;
54
+ record.AncestorId = null;
55
+ }
56
+ }
57
+ record.HasPassedCodeCoverageCheck =
58
+ record.Package2.IsOrgDependent === true || record.ValidationSkipped === true
59
+ ? null
60
+ : record.HasPassedCodeCoverageCheck;
61
+ record.Package2.IsOrgDependent = packageType === 'Managed' ? null : !!record.Package2.IsOrgDependent;
62
+ // set HasMetadataRemoved to null Unlocked, otherwise use existing value
63
+ record.HasMetadataRemoved = packageType !== 'Managed' ? null : !!record.HasMetadataRemoved;
64
+ record.AncestorVersion = ancestorVersion;
65
+ return records;
66
+ }
67
+ return [];
68
+ }
69
+ exports.getPackageVersionReport = getPackageVersionReport;
70
+ //# sourceMappingURL=packageVersionReport.js.map
@@ -1 +1,3 @@
1
1
  export * from './packageVersion1GP';
2
+ export * from './packageDisplay';
3
+ export * from './package1VersionCreateGet';
@@ -21,4 +21,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
21
21
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
22
22
  */
23
23
  __exportStar(require("./packageVersion1GP"), exports);
24
+ __exportStar(require("./packageDisplay"), exports);
25
+ __exportStar(require("./package1VersionCreateGet"), exports);
24
26
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import { Connection } from '@salesforce/core';
2
+ import { PackagingSObjects } from '../interfaces';
3
+ export declare function package1VersionCreateGet(connection: Connection, id: string): Promise<PackagingSObjects.PackageUploadRequest>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2020, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.package1VersionCreateGet = void 0;
10
+ async function package1VersionCreateGet(connection, id) {
11
+ return (await connection.tooling
12
+ .sobject('PackageUploadRequest')
13
+ .retrieve(id));
14
+ }
15
+ exports.package1VersionCreateGet = package1VersionCreateGet;
16
+ //# sourceMappingURL=package1VersionCreateGet.js.map
@@ -0,0 +1,9 @@
1
+ import { Connection } from '@salesforce/core';
2
+ import { Package1Display } from '../interfaces';
3
+ /**
4
+ * Executes server-side logic for the package1:display command
5
+ *
6
+ * @param connection
7
+ * @param id: id of the MetadataPackageVersion sObject
8
+ */
9
+ export declare function package1Display(connection: Connection, id: string): Promise<Package1Display[]>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2020, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.package1Display = void 0;
10
+ /**
11
+ * Executes server-side logic for the package1:display command
12
+ *
13
+ * @param connection
14
+ * @param id: id of the MetadataPackageVersion sObject
15
+ */
16
+ async function package1Display(connection, id) {
17
+ const query = `SELECT Id,MetadataPackageId,Name,ReleaseState,MajorVersion,MinorVersion,PatchVersion,BuildNumber FROM MetadataPackageVersion WHERE id = '${id}'`;
18
+ const results = (await connection.tooling.query(query)).records;
19
+ return results.map((result) => ({
20
+ MetadataPackageVersionId: result.Id,
21
+ MetadataPackageId: result.MetadataPackageId,
22
+ Name: result.Name,
23
+ ReleaseState: result.ReleaseState,
24
+ Version: `${result.MajorVersion}.${result.MinorVersion}.${result.PatchVersion}`,
25
+ BuildNumber: result.BuildNumber,
26
+ }));
27
+ }
28
+ exports.package1Display = package1Display;
29
+ //# sourceMappingURL=packageDisplay.js.map
@@ -1,4 +1,4 @@
1
- import { Connection, NamedPackageDir, PackageDir, SfError, SfProject } from '@salesforce/core';
1
+ import { Connection, NamedPackageDir, PackageDir, SfdcUrl, SfError, SfProject } from '@salesforce/core';
2
2
  import { Duration } from '@salesforce/kit';
3
3
  import { Many } from '@salesforce/ts-types';
4
4
  import { SaveError } from 'jsforce';
@@ -11,7 +11,7 @@ export declare type IdRegistryValue = {
11
11
  export declare type IdRegistry = {
12
12
  [key: string]: IdRegistryValue;
13
13
  };
14
- export declare const INSTALL_URL_BASE = "https://login.salesforce.com/packaging/installPackage.apexp?p0=";
14
+ export declare const INSTALL_URL_BASE: SfdcUrl;
15
15
  export declare const SOQL_WHERE_CLAUSE_MAX_LENGTH = 4000;
16
16
  export declare const POLL_INTERVAL_SECONDS = 30;
17
17
  export declare const DEFAULT_PACKAGE_DIR: {
@@ -36,7 +36,7 @@ const ID_REGISTRY = [
36
36
  label: 'Subscriber Package Version Id',
37
37
  },
38
38
  ];
39
- exports.INSTALL_URL_BASE = 'https://login.salesforce.com/packaging/installPackage.apexp?p0=';
39
+ exports.INSTALL_URL_BASE = new core_1.SfdcUrl('https://login.salesforce.com/packaging/installPackage.apexp?p0=');
40
40
  // https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_soslsoql.htm
41
41
  exports.SOQL_WHERE_CLAUSE_MAX_LENGTH = 4000;
42
42
  exports.POLL_INTERVAL_SECONDS = 30;
@@ -195,7 +195,7 @@ exports.applyErrorAction = applyErrorAction;
195
195
  */
196
196
  async function getPackageVersionId(versionId, connection) {
197
197
  // if it's already a 05i return it, otherwise query for it
198
- if (versionId === null || versionId === void 0 ? void 0 : versionId.startsWith(exports.BY_LABEL.PACKAGE_VERSION_ID.prefix)) {
198
+ if (versionId?.startsWith(exports.BY_LABEL.PACKAGE_VERSION_ID.prefix)) {
199
199
  return versionId;
200
200
  }
201
201
  const query = `SELECT Id FROM Package2Version WHERE SubscriberPackageVersionId = '${versionId}'`;
@@ -410,9 +410,8 @@ exports.getInClauseItemsCount = getInClauseItemsCount;
410
410
  async function getAncestorId(packageDescriptorJson, connection, project, versionNumberString, skipAncestorCheck) {
411
411
  // eslint-disable-next-line complexity
412
412
  return Promise.resolve().then(async () => {
413
- var _a;
414
413
  // If an id property is present, use it. Otherwise, look up the package id from the package property.
415
- const packageId = (_a = packageDescriptorJson['id']) !== null && _a !== void 0 ? _a : getPackageIdFromAlias(packageDescriptorJson.package, project);
414
+ const packageId = packageDescriptorJson['id'] ?? getPackageIdFromAlias(packageDescriptorJson.package, project);
416
415
  // No need to proceed if Unlocked
417
416
  const packageType = await getPackageType(packageId, connection);
418
417
  if (packageType === 'Unlocked') {
@@ -540,7 +539,7 @@ async function getAncestorIdHighestRelease(connection, packageId, versionNumberS
540
539
  'ORDER BY MajorVersion Desc, MinorVersion Desc, PatchVersion Desc, BuildNumber Desc LIMIT 1';
541
540
  const majorMinorVersionResult = await connection.tooling.query(query);
542
541
  const majorMinorVersionRecords = majorMinorVersionResult.records;
543
- if (majorMinorVersionRecords && (majorMinorVersionRecords === null || majorMinorVersionRecords === void 0 ? void 0 : majorMinorVersionRecords.length) === 1 && majorMinorVersionRecords[0]) {
542
+ if (majorMinorVersionRecords && majorMinorVersionRecords?.length === 1 && majorMinorVersionRecords[0]) {
544
543
  result.finalAncestorId = majorMinorVersionRecords[0].Id;
545
544
  }
546
545
  else {
@@ -587,7 +586,7 @@ function getConfigPackageDirectories(project) {
587
586
  }
588
587
  exports.getConfigPackageDirectories = getConfigPackageDirectories;
589
588
  function getConfigPackageDirectory(packageDirs, lookupProperty, lookupValue) {
590
- return packageDirs === null || packageDirs === void 0 ? void 0 : packageDirs.find((pkgDir) => pkgDir[lookupProperty] === lookupValue);
589
+ return packageDirs?.find((pkgDir) => pkgDir[lookupProperty] === lookupValue);
591
590
  }
592
591
  exports.getConfigPackageDirectory = getConfigPackageDirectory;
593
592
  /**
@@ -619,7 +618,7 @@ exports.convertCamelCaseStringToSentence = convertCamelCaseStringToSentence;
619
618
  * @returns an array of alias for the given id.
620
619
  */
621
620
  function getPackageAliasesFromId(packageId, project) {
622
- const packageAliases = (project === null || project === void 0 ? void 0 : project.getSfProjectJson().getContents().packageAliases) || {};
621
+ const packageAliases = project?.getSfProjectJson().getContents().packageAliases || {};
623
622
  // check for a matching alias
624
623
  return Object.entries(packageAliases)
625
624
  .filter((alias) => alias[1] === packageId)
@@ -664,7 +663,6 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, withPro
664
663
  let remainingRetries = retries;
665
664
  const pollingClient = await core_1.PollingClient.create({
666
665
  poll: async () => {
667
- var _a;
668
666
  const results = await pvcr.byId(id, connection);
669
667
  if (_isStatusEqualTo(results, [Package2VersionStatus.success, Package2VersionStatus.error])) {
670
668
  // complete
@@ -693,7 +691,7 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, withPro
693
691
  }
694
692
  else {
695
693
  let status = 'Unknown Error';
696
- if ((results === null || results === void 0 ? void 0 : results.length) > 0 && results[0].Error.length > 0) {
694
+ if (results?.length > 0 && results[0].Error.length > 0) {
697
695
  const errors = [];
698
696
  // for multiple errors, display one per line prefixed with (x)
699
697
  if (results[0].Error.length > 1) {
@@ -716,7 +714,7 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, withPro
716
714
  message: '',
717
715
  remainingTime,
718
716
  });
719
- logger.info(`Request in progress. Sleeping ${interval} seconds. Will wait a total of ${remainingTime.seconds} more seconds before timing out. Current Status='${convertCamelCaseStringToSentence((_a = results[0]) === null || _a === void 0 ? void 0 : _a.Status)}'`);
717
+ logger.info(`Request in progress. Sleeping ${interval} seconds. Will wait a total of ${remainingTime.seconds} more seconds before timing out. Current Status='${convertCamelCaseStringToSentence(results[0]?.Status)}'`);
720
718
  remainingRetries--;
721
719
  return { completed: false, payload: results[0] };
722
720
  }
@@ -747,7 +745,7 @@ async function _generatePackageAliasEntry(connection, project, packageVersionId,
747
745
  const query = `SELECT Name FROM Package2 WHERE Id = '${packageId}'`;
748
746
  packageName = await connection.tooling
749
747
  .query(query)
750
- .then((pkgQueryResult) => { var _a; return (_a = pkgQueryResult.records[0]) === null || _a === void 0 ? void 0 : _a.Name; });
748
+ .then((pkgQueryResult) => pkgQueryResult.records[0]?.Name);
751
749
  }
752
750
  else {
753
751
  packageName = aliasForPackageId[0];
@@ -766,7 +764,7 @@ async function _generatePackageAliasEntry(connection, project, packageVersionId,
766
764
  * @returns {boolean} if one of the values in status is found.
767
765
  */
768
766
  function _isStatusEqualTo(results, statuses) {
769
- return (results === null || results === void 0 ? void 0 : results.length) <= 0 ? false : statuses === null || statuses === void 0 ? void 0 : statuses.some((status) => results[0].Status === status);
767
+ return results?.length <= 0 ? false : statuses?.some((status) => results[0].Status === status);
770
768
  }
771
769
  // added for unit testing
772
770
  function getSoqlWhereClauseMaxLength() {
@@ -782,8 +780,7 @@ function formatDate(date) {
782
780
  exports.formatDate = formatDate;
783
781
  function combineSaveErrors(sObject, crudOperation, errors) {
784
782
  const errorMessages = errors.map((error) => {
785
- var _a;
786
- const fieldsString = ((_a = error.fields) === null || _a === void 0 ? void 0 : _a.length) > 0 ? `Fields: [${error.fields.join(', ')}]` : '';
783
+ const fieldsString = error.fields?.length > 0 ? `Fields: [${error.fields.join(', ')}]` : '';
787
784
  return `Error: ${error.errorCode} Message: ${error.message} ${fieldsString}`;
788
785
  });
789
786
  const sfError = messages.createError('errorDuringSObjectCRUDOperation', [
@@ -30,7 +30,7 @@ class VersionNumber {
30
30
  throw messages.createError('errorMissingVersionNumber');
31
31
  }
32
32
  const version = versionString.split('.');
33
- if ((version === null || version === void 0 ? void 0 : version.length) === 4) {
33
+ if (version?.length === 4) {
34
34
  const [major, minor, patch, build] = version;
35
35
  const asNumbers = [major, minor, patch, build].map((v) => parseInt(v, 10));
36
36
  if (asNumbers.slice(0, 3).some((v) => isNaN(v))) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/packaging",
3
- "version": "0.0.7",
3
+ "version": "0.0.10",
4
4
  "description": "packing libraries to Salesforce packaging platform",
5
5
  "main": "lib/exported",
6
6
  "types": "lib/exported.d.ts",
@@ -43,13 +43,15 @@
43
43
  "debug": "^4.3.4",
44
44
  "globby": "^11",
45
45
  "js2xmlparser": "^4.0.2",
46
- "jsforce": "2.0.0-beta.14",
46
+ "jsforce": "beta",
47
+ "mkdirp": "1.0.4",
48
+ "ts-retry-promise": "^0.6.1",
47
49
  "jszip": "^3.10.0",
48
50
  "xml2js": "^0.4.23",
49
51
  "xmldom-sfdx-encoding": "^0.1.30"
50
52
  },
51
53
  "devDependencies": {
52
- "@salesforce/cli-plugins-testkit": "^2.3.0",
54
+ "@salesforce/cli-plugins-testkit": "^2.3.4",
53
55
  "@salesforce/dev-config": "^3.0.1",
54
56
  "@salesforce/dev-scripts": "^2.0.2",
55
57
  "@salesforce/prettier-config": "^0.0.2",