@salesforce/packaging 0.0.18 → 0.0.19

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,12 @@
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.19](https://github.com/forcedotcom/packaging/compare/v0.0.18...v0.0.19) (2022-08-18)
6
+
7
+ ### Bug Fixes
8
+
9
+ - package version. now stored in packdir in sfdx project ([a7a725d](https://github.com/forcedotcom/packaging/commit/a7a725dde13b8c73fbac7527141d006a7ed28fa8))
10
+
5
11
  ### [0.0.18](https://github.com/forcedotcom/packaging/compare/v0.0.17...v0.0.18) (2022-08-17)
6
12
 
7
13
  ### Bug Fixes
@@ -34,6 +34,7 @@ export declare class Package extends AsyncCreatable<PackageOptions> implements I
34
34
  list(): Promise<QueryResult<PackagingSObjects.Package2>>;
35
35
  uninstall(): Promise<void>;
36
36
  update(): Promise<void>;
37
+ getPackage(packageId: string): Promise<PackagingSObjects.Package2>;
37
38
  getExternalSites(subscriberPackageVersionId: string, installationKey?: string): Promise<Optional<string[]>>;
38
39
  waitForPublish(subscriberPackageVersionId: string, timeout: number | Duration, installationKey?: string): Promise<void>;
39
40
  protected init(): Promise<void>;
@@ -75,6 +75,10 @@ class Package extends kit_1.AsyncCreatable {
75
75
  update() {
76
76
  return Promise.resolve(undefined);
77
77
  }
78
+ async getPackage(packageId) {
79
+ const package2 = await this.options.connection.tooling.sobject('Package2').retrieve(packageId);
80
+ return package2;
81
+ }
78
82
  async getExternalSites(subscriberPackageVersionId, installationKey) {
79
83
  return (0, packageInstall_1.getExternalSites)(this.options.connection, subscriberPackageVersionId, installationKey);
80
84
  }
@@ -46,11 +46,22 @@ export declare class PackageVersion {
46
46
  * @param wait - how long to wait for the package version to be created
47
47
  * @param interval - frequency of checking for the package version to be created
48
48
  */
49
- waitForCreateVersion(createPackageVersionRequestId: string, wait?: Duration, interval?: Duration): Promise<PackageVersionCreateRequestResult>;
49
+ waitForCreateVersion(packageId: string, createPackageVersionRequestId: string, wait?: Duration, interval?: Duration): Promise<PackageVersionCreateRequestResult>;
50
50
  convert(): Promise<void>;
51
51
  install(): Promise<void>;
52
52
  list(): Promise<void>;
53
53
  uninstall(): Promise<void>;
54
54
  update(): Promise<void>;
55
55
  private updateDeprecation;
56
+ /**
57
+ * Increase the wait time for a package version that is org dependent.
58
+ *
59
+ * @param resolvedPackageId
60
+ * @param pollInterval
61
+ * @param wait
62
+ * @private
63
+ */
64
+ private resolveOrgDependentPollingTime;
65
+ private updateProjectWithPackageVersion;
66
+ private generatePackageDirectory;
56
67
  }
@@ -11,9 +11,11 @@ const core_1 = require("@salesforce/core");
11
11
  const kit_1 = require("@salesforce/kit");
12
12
  const pkgUtils = require("../utils/packageUtils");
13
13
  const utils_1 = require("../utils");
14
+ const packageUtils_1 = require("../utils/packageUtils");
14
15
  const packageVersionCreate_1 = require("./packageVersionCreate");
15
16
  const packageVersionReport_1 = require("./packageVersionReport");
16
17
  const packageVersionCreateRequestReport_1 = require("./packageVersionCreateRequestReport");
18
+ const package_1 = require("./package");
17
19
  core_1.Messages.importMessagesDirectory(__dirname);
18
20
  // const messages = Messages.loadMessages('@salesforce/packaging', 'messages');
19
21
  // const logger = Logger.childFromRoot('packageVersionCreate');
@@ -31,7 +33,7 @@ class PackageVersion {
31
33
  async create(options) {
32
34
  const pvc = new packageVersionCreate_1.PackageVersionCreate({ ...options, ...this.options });
33
35
  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) => {
36
+ const waitResult = await this.waitForCreateVersion(createResult.Package2Id, createResult.Id, options.wait ?? kit_1.Duration.milliseconds(0), options.pollInterval ? options.pollInterval : kit_1.Duration.seconds(30)).catch((err) => {
35
37
  // TODO
36
38
  // until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
37
39
  throw pkgUtils.applyErrorAction(err);
@@ -98,11 +100,12 @@ class PackageVersion {
98
100
  * @param wait - how long to wait for the package version to be created
99
101
  * @param interval - frequency of checking for the package version to be created
100
102
  */
101
- async waitForCreateVersion(createPackageVersionRequestId, wait = kit_1.Duration.milliseconds(0), interval = kit_1.Duration.milliseconds(0)) {
103
+ async waitForCreateVersion(packageId, createPackageVersionRequestId, wait = kit_1.Duration.milliseconds(0), interval = kit_1.Duration.milliseconds(0)) {
102
104
  if (wait?.milliseconds <= 0) {
103
105
  const result = await this.getCreateVersionReport(createPackageVersionRequestId);
104
106
  return result;
105
107
  }
108
+ const resolvedWait = await this.resolveOrgDependentPollingTime(packageId, wait, interval);
106
109
  let remainingWaitTime = wait;
107
110
  let report;
108
111
  const pollingClient = await core_1.PollingClient.create({
@@ -129,6 +132,7 @@ class PackageVersion {
129
132
  payload: report,
130
133
  };
131
134
  case 'Success':
135
+ await this.updateProjectWithPackageVersion(this.project, report);
132
136
  await core_1.Lifecycle.getInstance().emit('success', report);
133
137
  return { completed: true, payload: report };
134
138
  case 'Error':
@@ -137,7 +141,7 @@ class PackageVersion {
137
141
  }
138
142
  },
139
143
  frequency: interval,
140
- timeout: wait,
144
+ timeout: resolvedWait,
141
145
  });
142
146
  try {
143
147
  return pollingClient.subscribe();
@@ -180,6 +184,53 @@ class PackageVersion {
180
184
  updateResult.id = await pkgUtils.getSubscriberPackageVersionId(packageVersionId, this.connection);
181
185
  return updateResult;
182
186
  }
187
+ /**
188
+ * Increase the wait time for a package version that is org dependent.
189
+ *
190
+ * @param resolvedPackageId
191
+ * @param pollInterval
192
+ * @param wait
193
+ * @private
194
+ */
195
+ async resolveOrgDependentPollingTime(resolvedPackageId, wait, pollInterval) {
196
+ // If we are polling check to see if the package is Org-Dependent, if so, update the poll time
197
+ if (wait.milliseconds > 0) {
198
+ const query = `SELECT IsOrgDependent FROM Package2 WHERE Id = '${resolvedPackageId}'`;
199
+ try {
200
+ const pkgQueryResult = await this.connection.singleRecordQuery(query, {
201
+ tooling: true,
202
+ });
203
+ if (pkgQueryResult.IsOrgDependent) {
204
+ return kit_1.Duration.seconds((60 / pollInterval.seconds) * wait.seconds);
205
+ }
206
+ }
207
+ catch {
208
+ // do nothing
209
+ }
210
+ }
211
+ return wait;
212
+ }
213
+ async updateProjectWithPackageVersion(withProject, results) {
214
+ if (withProject && !process.env.SFDX_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE) {
215
+ const query = `SELECT Name, Package2Id, MajorVersion, MinorVersion, PatchVersion, BuildNumber, Description, Branch FROM Package2Version WHERE Id = '${results.Package2VersionId}'`;
216
+ const packageVersion = await this.connection.singleRecordQuery(query, {
217
+ tooling: true,
218
+ });
219
+ const packageVersionVersionString = `${packageVersion.MajorVersion}.${packageVersion.MinorVersion}.${packageVersion.PatchVersion}.${packageVersion.BuildNumber}`;
220
+ await this.generatePackageDirectory(packageVersion, withProject, packageVersionVersionString);
221
+ const newConfig = await (0, packageUtils_1.generatePackageAliasEntry)(this.connection, withProject, packageVersion.SubscriberPackageVersionId, packageVersionVersionString, packageVersion.Branch, packageVersion.Package2Id);
222
+ withProject.getSfProjectJson().set('packageAliases', newConfig);
223
+ await withProject.getSfProjectJson().write();
224
+ }
225
+ }
226
+ async generatePackageDirectory(packageVersion, withProject, packageVersionVersionString) {
227
+ const pkg = await (await package_1.Package.create({ connection: this.connection })).getPackage(packageVersion.Package2Id);
228
+ const pkgDir = (0, packageUtils_1.getConfigPackageDirectory)(withProject.getPackageDirectories(), 'id', pkg.Id) ?? {};
229
+ pkgDir.versionNumber = packageVersionVersionString;
230
+ pkgDir.versionDescription = packageVersion.Description;
231
+ const packageDirs = withProject.getPackageDirectories().map((pd) => (pkgDir['id'] === pd['id'] ? pkgDir : pd));
232
+ withProject.getSfProjectJson().set('packageDirectories', packageDirs);
233
+ }
183
234
  }
184
235
  exports.PackageVersion = PackageVersion;
185
236
  //# sourceMappingURL=packageVersion.js.map
@@ -55,7 +55,6 @@ export declare class PackageVersionCreate {
55
55
  private resolveCanonicalPackageProperty;
56
56
  private validateVersionNumber;
57
57
  private resolveUserLicenses;
58
- private resolveOrgDependentPollingTime;
59
58
  private validateFlagsForPackageType;
60
59
  /**
61
60
  * Cleans invalid attribute(s) from the packageDescriptorJSON
@@ -15,7 +15,6 @@ const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
15
15
  const testSetup_1 = require("@salesforce/core/lib/testSetup");
16
16
  const scratchOrgSettingsGenerator_1 = require("@salesforce/core/lib/org/scratchOrgSettingsGenerator");
17
17
  const xml2js = require("xml2js");
18
- const kit_1 = require("@salesforce/kit");
19
18
  const pkgUtils = require("../utils/packageUtils");
20
19
  const constants_1 = require("../constants");
21
20
  const utils_1 = require("../utils");
@@ -26,7 +25,6 @@ core_1.Messages.importMessagesDirectory(__dirname);
26
25
  const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'messages');
27
26
  const logger = core_1.Logger.childFromRoot('packageVersionCreate');
28
27
  const DESCRIPTOR_FILE = 'package2-descriptor.json';
29
- const POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS = 5;
30
28
  class PackageVersionCreate {
31
29
  constructor(options) {
32
30
  this.options = options;
@@ -589,15 +587,6 @@ class PackageVersionCreate {
589
587
  errStr.toString(),
590
588
  ]);
591
589
  }
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);
597
- }
598
- maxRetries = (60 / pollInterval.seconds) * options.wait.seconds;
599
- }
600
- [pollInterval, maxRetries] = await this.resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries);
601
590
  return (await this.listRequestById(createResult.id, this.connection))[0];
602
591
  }
603
592
  resolveCanonicalPackageProperty(options) {
@@ -651,27 +640,6 @@ class PackageVersionCreate {
651
640
  generateProfileInformation: shouldGenerateProfileInformation,
652
641
  });
653
642
  }
654
- async resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries) {
655
- let pi = pollInterval;
656
- let mr = maxRetries;
657
- // If we are polling check to see if the package is Org-Dependent, if so, update the poll time
658
- if (options.wait) {
659
- const query = `SELECT IsOrgDependent FROM Package2 WHERE Id = '${resolvedPackageId}'`;
660
- try {
661
- const pkgQueryResult = await this.connection.singleRecordQuery(query, {
662
- tooling: true,
663
- });
664
- if (pkgQueryResult.IsOrgDependent) {
665
- pi = kit_1.Duration.seconds(POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS);
666
- mr = (60 / pollInterval.seconds) * options.wait.seconds;
667
- }
668
- }
669
- catch {
670
- // do nothing
671
- }
672
- }
673
- return [pi, mr];
674
- }
675
643
  async validateFlagsForPackageType(packageId, options) {
676
644
  const packageType = await pkgUtils.getPackageType(packageId, this.connection);
677
645
  if (packageType === 'Unlocked') {
@@ -148,6 +148,22 @@ export declare function convertCamelCaseStringToSentence(stringIn: string): stri
148
148
  export declare function getPackageAliasesFromId(packageId: string, project: SfProject): string[];
149
149
  export declare function findOrCreatePackage(seedPackage: string, connection: Connection): Promise<string>;
150
150
  export declare function pollForStatusWithInterval(id: string, retries: number, packageId: string, branch: string, withProject: SfProject, connection: Connection, interval: Duration): Promise<PackageVersionCreateRequestResult>;
151
+ /**
152
+ * Generate package alias json entry for this package version that can be written to sfdx-project.json
153
+ *
154
+ * @param connection
155
+ * @param project SfProject instance for the project
156
+ * @param packageVersionId 04t id of the package to create the alias entry for
157
+ * @param packageVersionNumber that will be appended to the package name to form the alias
158
+ * @param branch
159
+ * @param packageId the 0Ho id
160
+ * @private
161
+ */
162
+ export declare function generatePackageAliasEntry(connection: Connection, project: SfProject, packageVersionId: string, packageVersionNumber: string, branch: string, packageId: string): Promise<{
163
+ packageAliases: {
164
+ [p: string]: string;
165
+ };
166
+ }>;
151
167
  export declare function getSoqlWhereClauseMaxLength(): number;
152
168
  export declare function formatDate(date: Date): string;
153
169
  export declare function combineSaveErrors(sObject: string, crudOperation: string, errors: SaveError[]): SfError;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveCanonicalPackageProperty = exports.combineSaveErrors = exports.formatDate = exports.getSoqlWhereClauseMaxLength = exports.pollForStatusWithInterval = exports.findOrCreatePackage = exports.getPackageAliasesFromId = exports.convertCamelCaseStringToSentence = exports.getPackageIdFromAlias = exports.getConfigPackageDirectory = exports.getConfigPackageDirectories = exports.getPackageVersionNumber = exports.concatVersion = exports.getAncestorIdHighestRelease = exports.validateAncestorId = exports.getAncestorId = exports.getInClauseItemsCount = exports.queryWithInConditionChunking = exports.getPackageVersionStrings = exports.getHasMetadataRemoved = exports.getContainerOptions = exports.getSubscriberPackageVersionId = exports.getPackageTypeBy04t = exports.getPackageType = exports.escapeInstallationKey = exports.getPackageVersionId = exports.applyErrorAction = exports.massageErrorMessage = exports.isErrorPackageNotAvailable = exports.isErrorFromSPVQueryRestriction = exports.validUrl = exports.validatePatchVersion = exports.validateVersionNumber = exports.validateIdNoThrow = exports.validateId = exports.BY_LABEL = exports.BY_PREFIX = exports.DEFAULT_PACKAGE_DIR = exports.POLL_INTERVAL_SECONDS = exports.SOQL_WHERE_CLAUSE_MAX_LENGTH = exports.INSTALL_URL_BASE = exports.VERSION_NUMBER_SEP = void 0;
3
+ exports.resolveCanonicalPackageProperty = exports.combineSaveErrors = exports.formatDate = exports.getSoqlWhereClauseMaxLength = exports.generatePackageAliasEntry = exports.pollForStatusWithInterval = exports.findOrCreatePackage = exports.getPackageAliasesFromId = exports.convertCamelCaseStringToSentence = exports.getPackageIdFromAlias = exports.getConfigPackageDirectory = exports.getConfigPackageDirectories = exports.getPackageVersionNumber = exports.concatVersion = exports.getAncestorIdHighestRelease = exports.validateAncestorId = exports.getAncestorId = exports.getInClauseItemsCount = exports.queryWithInConditionChunking = exports.getPackageVersionStrings = exports.getHasMetadataRemoved = exports.getContainerOptions = exports.getSubscriberPackageVersionId = exports.getPackageTypeBy04t = exports.getPackageType = exports.escapeInstallationKey = exports.getPackageVersionId = exports.applyErrorAction = exports.massageErrorMessage = exports.isErrorPackageNotAvailable = exports.isErrorFromSPVQueryRestriction = exports.validUrl = exports.validatePatchVersion = exports.validateVersionNumber = exports.validateIdNoThrow = exports.validateId = exports.BY_LABEL = exports.BY_PREFIX = exports.DEFAULT_PACKAGE_DIR = exports.POLL_INTERVAL_SECONDS = exports.SOQL_WHERE_CLAUSE_MAX_LENGTH = exports.INSTALL_URL_BASE = exports.VERSION_NUMBER_SEP = void 0;
4
4
  /*
5
5
  * Copyright (c) 2022, salesforce.com, inc.
6
6
  * All rights reserved.
@@ -682,11 +682,11 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, withPro
682
682
  const record = pkgQueryResult.records[0];
683
683
  return `${record.MajorVersion}.${record.MinorVersion}.${record.PatchVersion}-${record.BuildNumber}`;
684
684
  });
685
- const newConfig = await _generatePackageAliasEntry(connection, withProject, results[0].SubscriberPackageVersionId, packageVersionVersionString, branch, packageId);
685
+ const newConfig = await generatePackageAliasEntry(connection, withProject, results[0].SubscriberPackageVersionId, packageVersionVersionString, branch, packageId);
686
686
  withProject.getSfProjectJson().set('packageAliases', newConfig);
687
687
  await withProject.getSfProjectJson().write();
688
688
  }
689
- core_1.Lifecycle.getInstance().emit(Package2VersionStatus.success, {
689
+ await core_1.Lifecycle.getInstance().emit(Package2VersionStatus.success, {
690
690
  id,
691
691
  packageVersionCreateRequestResult: results[0],
692
692
  projectUpdated,
@@ -706,13 +706,13 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, withPro
706
706
  }
707
707
  status = errors.length !== 0 ? errors.join('\n') : results[0].Error.join('\n');
708
708
  }
709
- core_1.Lifecycle.getInstance().emit(Package2VersionStatus.error, { id, status });
709
+ await core_1.Lifecycle.getInstance().emit(Package2VersionStatus.error, { id, status });
710
710
  throw new core_1.SfError(status);
711
711
  }
712
712
  }
713
713
  else {
714
714
  const remainingTime = kit_1.Duration.milliseconds(interval.milliseconds * remainingRetries);
715
- core_1.Lifecycle.getInstance().emit(Package2VersionStatus.inProgress, {
715
+ await core_1.Lifecycle.getInstance().emit(Package2VersionStatus.inProgress, {
716
716
  id,
717
717
  packageVersionCreateRequestResult: results[0],
718
718
  message: '',
@@ -740,16 +740,15 @@ exports.pollForStatusWithInterval = pollForStatusWithInterval;
740
740
  * @param packageId the 0Ho id
741
741
  * @private
742
742
  */
743
- async function _generatePackageAliasEntry(connection, project, packageVersionId, packageVersionNumber, branch, packageId) {
743
+ async function generatePackageAliasEntry(connection, project, packageVersionId, packageVersionNumber, branch, packageId) {
744
744
  const configContent = project.getSfProjectJson().getContents();
745
745
  const packageAliases = configContent.packageAliases || {};
746
746
  const aliasForPackageId = getPackageAliasesFromId(packageId, project);
747
747
  let packageName;
748
748
  if (!aliasForPackageId || aliasForPackageId.length === 0) {
749
749
  const query = `SELECT Name FROM Package2 WHERE Id = '${packageId}'`;
750
- packageName = await connection.tooling
751
- .query(query)
752
- .then((pkgQueryResult) => pkgQueryResult.records[0]?.Name);
750
+ const package2 = await connection.singleRecordQuery(query, { tooling: true });
751
+ packageName = package2.Name;
753
752
  }
754
753
  else {
755
754
  packageName = aliasForPackageId[0];
@@ -760,6 +759,7 @@ async function _generatePackageAliasEntry(connection, project, packageVersionId,
760
759
  packageAliases[packageAlias] = packageVersionId;
761
760
  return { packageAliases };
762
761
  }
762
+ exports.generatePackageAliasEntry = generatePackageAliasEntry;
763
763
  /**
764
764
  * Return true if the queryResult.records[0].Status is equal to one of the values in statuses.
765
765
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/packaging",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "description": "packing libraries to Salesforce packaging platform",
5
5
  "main": "lib/exported",
6
6
  "types": "lib/exported.d.ts",