@salesforce/packaging 0.0.4 → 0.0.7

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/lib/constants.d.ts +21 -0
  3. package/lib/constants.js +40 -0
  4. package/lib/interfaces/packagingInterfacesAndType.d.ts +85 -4
  5. package/lib/interfaces/packagingSObjects.d.ts +2 -1
  6. package/lib/interfaces/packagingSObjects.js +0 -6
  7. package/lib/package/index.d.ts +4 -1
  8. package/lib/package/index.js +7 -2
  9. package/lib/package/packageConvert.d.ts +11 -0
  10. package/lib/package/packageConvert.js +84 -0
  11. package/lib/package/packageCreate.d.ts +26 -0
  12. package/lib/package/packageCreate.js +115 -0
  13. package/lib/package/packageDelete.d.ts +3 -0
  14. package/lib/package/packageDelete.js +26 -0
  15. package/lib/package/packageProfileApi.d.ts +59 -0
  16. package/lib/package/packageProfileApi.js +278 -0
  17. package/lib/package/packageVersion.d.ts +25 -0
  18. package/lib/package/packageVersion.js +73 -0
  19. package/lib/package/packageVersionCreate.d.ts +68 -0
  20. package/lib/package/packageVersionCreate.js +758 -0
  21. package/lib/package/packageVersionCreateRequest.d.ts +4 -0
  22. package/lib/package/packageVersionCreateRequest.js +85 -0
  23. package/lib/package/packageVersionList.d.ts +4 -24
  24. package/lib/package/packageVersionList.js +4 -5
  25. package/lib/utils/index.d.ts +1 -0
  26. package/lib/utils/index.js +1 -0
  27. package/lib/utils/packageUtils.d.ts +15 -14
  28. package/lib/utils/packageUtils.js +77 -39
  29. package/lib/utils/srcDevUtils.d.ts +12 -0
  30. package/lib/utils/srcDevUtils.js +66 -0
  31. package/lib/utils/versionNumber.d.ts +1 -0
  32. package/lib/utils/versionNumber.js +10 -5
  33. package/messages/messages.md +49 -0
  34. package/package.json +11 -16
  35. package/lib/package/packageVersion2GP.d.ts +0 -17
  36. package/lib/package/packageVersion2GP.js +0 -46
  37. package/lib/package/packageVersionCreateRequestApi.d.ts +0 -17
  38. package/lib/package/packageVersionCreateRequestApi.js +0 -92
@@ -0,0 +1,4 @@
1
+ import { Connection } from '@salesforce/core';
2
+ import { PackageVersionCreateRequestResult, PackageVersionCreateRequestQueryOptions } from '../interfaces';
3
+ export declare function list(options?: PackageVersionCreateRequestQueryOptions): Promise<PackageVersionCreateRequestResult[]>;
4
+ export declare function byId(packageVersionCreateRequestId: any, connection: Connection): Promise<PackageVersionCreateRequestResult[]>;
@@ -0,0 +1,85 @@
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.byId = exports.list = void 0;
10
+ const util = require("util");
11
+ const core_1 = require("@salesforce/core");
12
+ const packageUtils = require("../utils/packageUtils");
13
+ core_1.Messages.importMessagesDirectory(__dirname);
14
+ const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'messages');
15
+ const STATUS_ERROR = 'Error';
16
+ const QUERY = 'SELECT Id, Status, Package2Id, Package2VersionId, Package2Version.SubscriberPackageVersionId, Tag, Branch, ' +
17
+ 'CreatedDate, Package2Version.HasMetadataRemoved, CreatedById ' +
18
+ 'FROM Package2VersionCreateRequest ' +
19
+ '%s' + // WHERE, if applicable
20
+ 'ORDER BY CreatedDate';
21
+ const ERROR_QUERY = "SELECT Message FROM Package2VersionCreateRequestError WHERE ParentRequest.Id = '%s'";
22
+ const STATUSES = ['Queued', 'InProgress', 'Success', 'Error'];
23
+ async function list(options = {}) {
24
+ const whereClause = _constructWhere();
25
+ return _query(util.format(QUERY, whereClause), options.connection);
26
+ }
27
+ exports.list = list;
28
+ async function byId(packageVersionCreateRequestId, connection) {
29
+ const results = await _query(util.format(QUERY, `WHERE Id = '${packageVersionCreateRequestId}' `), connection);
30
+ if (results && results.length === 1 && results[0].Status === STATUS_ERROR) {
31
+ results[0].Error = await _queryErrors(packageVersionCreateRequestId, connection);
32
+ }
33
+ return results;
34
+ }
35
+ exports.byId = byId;
36
+ async function _query(query, connection) {
37
+ const queryResult = await connection.tooling.query(query);
38
+ return (queryResult.records ? queryResult.records : []).map((record) => ({
39
+ Id: record.Id,
40
+ Status: record.Status,
41
+ Package2Id: record.Package2Id,
42
+ Package2VersionId: record.Package2VersionId,
43
+ SubscriberPackageVersionId: record.Package2Version != null ? record.Package2Version.SubscriberPackageVersionId : null,
44
+ Tag: record.Tag,
45
+ Branch: record.Branch,
46
+ Error: [],
47
+ CreatedDate: packageUtils.formatDate(new Date(record.CreatedDate)),
48
+ HasMetadataRemoved: record.Package2Version != null ? record.Package2Version.HasMetadataRemoved : null,
49
+ CreatedBy: record.CreatedById,
50
+ }));
51
+ }
52
+ async function _queryErrors(packageVersionCreateRequestId, connection) {
53
+ const errorResults = [];
54
+ const queryResult = connection.tooling.query(util.format(ERROR_QUERY, packageVersionCreateRequestId));
55
+ if (queryResult.records) {
56
+ queryResult.records.forEach((record) => {
57
+ errorResults.push(record.Message);
58
+ });
59
+ }
60
+ return errorResults;
61
+ }
62
+ function _constructWhere(options) {
63
+ const where = [];
64
+ // filter on created date, days ago: 0 for today, etc
65
+ if (!util.isNullOrUndefined(this.options.createdlastdays)) {
66
+ if (options.createdlastdays < 0) {
67
+ throw messages.createError('invalidDaysNumber', ['createdlastdays', options.createdlastdays]);
68
+ }
69
+ where.push(`CreatedDate = LAST_N_DAYS:${this.options.createdlastdays}`);
70
+ }
71
+ // filter on errors
72
+ if (options.status) {
73
+ const foundStatus = STATUSES.find((status) => status.toLowerCase() === this.options.status.toLowerCase());
74
+ if (!foundStatus) {
75
+ const args = [options.status];
76
+ STATUSES.forEach((status) => {
77
+ args.push(status);
78
+ });
79
+ throw messages.createError('invalidStatus', args);
80
+ }
81
+ where.push(`Status = '${foundStatus}'`);
82
+ }
83
+ return where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
84
+ }
85
+ //# sourceMappingURL=packageVersionCreateRequest.js.map
@@ -1,29 +1,9 @@
1
- import { Connection, SfProject } from '@salesforce/core';
1
+ import { SfProject } from '@salesforce/core';
2
2
  import { QueryResult } from 'jsforce';
3
- import { PackageVersionListResult } from '../interfaces';
3
+ import { PackageVersionListResult, PackageVersionQueryOptions } from '../interfaces';
4
4
  export declare const DEFAULT_ORDER_BY_FIELDS = "Package2Id, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber";
5
- export declare function listPackageVersions(options: {
6
- project: SfProject;
7
- orderBy: string;
8
- modifiedLastDays: number;
9
- createdLastDays: number;
10
- packages: string[];
11
- connection: Connection;
12
- verbose: boolean;
13
- concise: boolean;
14
- isReleased: boolean;
15
- }): Promise<QueryResult<PackageVersionListResult>>;
16
- export declare function _constructQuery(options: {
17
- project: SfProject;
18
- orderBy: string;
19
- modifiedLastDays: number;
20
- createdLastDays: number;
21
- packages: string[];
22
- connection: Connection;
23
- verbose: boolean;
24
- concise: boolean;
25
- isReleased: boolean;
26
- }): string;
5
+ export declare function listPackageVersions(options: PackageVersionQueryOptions): Promise<QueryResult<PackageVersionListResult>>;
6
+ export declare function _constructQuery(options: PackageVersionQueryOptions): string;
27
7
  export declare function _assembleQueryParts(select: string, where: string[], orderBy?: string): string;
28
8
  export declare function _constructWhere(idsOrAliases: string[], createdLastDays: number, lastModLastDays: number, project: SfProject): string[];
29
9
  export declare function _getLastDays(paramName: string, lastDays: number): number;
@@ -7,12 +7,11 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports._getLastDays = exports._constructWhere = exports._assembleQueryParts = exports._constructQuery = exports.listPackageVersions = exports.DEFAULT_ORDER_BY_FIELDS = void 0;
10
- const _ = require("lodash");
11
10
  const core_1 = require("@salesforce/core");
12
- core_1.Messages.importMessagesDirectory(__dirname);
13
- const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'messages');
14
11
  const ts_types_1 = require("@salesforce/ts-types");
15
12
  const utils_1 = require("../utils");
13
+ core_1.Messages.importMessagesDirectory(__dirname);
14
+ const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'messages');
16
15
  // Stripping CodeCoverage, HasPassedCodeCoverageCheck as they are causing a perf issue in 47.0+ W-6997762
17
16
  const DEFAULT_SELECT = 'SELECT Id, Package2Id, SubscriberPackageVersionId, Name, Package2.Name, Package2.NamespacePrefix, ' +
18
17
  'Description, Tag, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber, IsReleased, ' +
@@ -54,9 +53,9 @@ function _constructWhere(idsOrAliases, createdLastDays, lastModLastDays, project
54
53
  // filter on given package ids
55
54
  if ((idsOrAliases === null || idsOrAliases === void 0 ? void 0 : idsOrAliases.length) > 0) {
56
55
  // remove dups
57
- idsOrAliases = _.uniq(idsOrAliases);
56
+ const aliasesOrIds = [...new Set(idsOrAliases)];
58
57
  // resolve any aliases
59
- const packageIds = idsOrAliases.map((idOrAlias) => (0, utils_1.getPackageIdFromAlias)(idOrAlias, project));
58
+ const packageIds = aliasesOrIds.map((idOrAlias) => (0, utils_1.getPackageIdFromAlias)(idOrAlias, project));
60
59
  // validate ids
61
60
  packageIds.forEach((packageId) => {
62
61
  (0, utils_1.validateId)(utils_1.BY_LABEL.PACKAGE_ID, packageId);
@@ -1 +1,2 @@
1
1
  export * from './packageUtils';
2
+ export * from './srcDevUtils';
@@ -21,4 +21,5 @@ 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("./packageUtils"), exports);
24
+ __exportStar(require("./srcDevUtils"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- import { Connection, NamedPackageDir, PackageDir, SfProject } from '@salesforce/core';
1
+ import { Connection, NamedPackageDir, PackageDir, SfError, SfProject } from '@salesforce/core';
2
2
  import { Duration } from '@salesforce/kit';
3
3
  import { Many } from '@salesforce/ts-types';
4
- import { PackagingSObjects, Package2VersionCreateRequestResult } from '../interfaces';
5
- import { PackageVersionCreateRequestApi } from '../package/packageVersionCreateRequestApi';
4
+ import { SaveError } from 'jsforce';
5
+ import { PackagingSObjects, PackageVersionCreateRequestResult, PackageVersionCreateOptions } from '../interfaces';
6
6
  export declare const VERSION_NUMBER_SEP = ".";
7
7
  export declare type IdRegistryValue = {
8
8
  prefix: string;
@@ -42,20 +42,20 @@ export declare function getPackageVersionId(versionId: string, connection: Conne
42
42
  /**
43
43
  * Given 0Ho the package type type (Managed, Unlocked, Locked(deprecated?))
44
44
  *
45
- * @param package2Id the 0Ho
45
+ * @param packageId the 0Ho
46
46
  * @param connection For tooling query
47
47
  * @throws Error with message when package2 cannot be found
48
48
  */
49
- export declare function getPackage2Type(package2Id: string, connection: Connection): Promise<string>;
49
+ export declare function getPackageType(packageId: string, connection: Connection): Promise<string>;
50
50
  /**
51
51
  * Given 04t the package type type (Managed, Unlocked, Locked(deprecated?))
52
52
  *
53
- * @param package2VersionId the 04t
53
+ * @param packageVersionId the 04t
54
54
  * @param connection For tooling query
55
55
  * @param installKey For tooling query, if an installation key is applicable to the package version it must be passed in the queries
56
56
  * @throws Error with message when package2 cannot be found
57
57
  */
58
- export declare function getPackage2TypeBy04t(package2VersionId: string, connection: Connection, installKey: string): Promise<string>;
58
+ export declare function getPackageTypeBy04t(packageVersionId: string, connection: Connection, installKey: string): Promise<string>;
59
59
  /**
60
60
  * Given a package version ID (05i) or subscriber package version ID (04t), return the subscriber package version ID (04t)
61
61
  *
@@ -67,10 +67,10 @@ export declare function getSubscriberPackageVersionId(versionId: string, connect
67
67
  * Get the ContainerOptions for the specified Package2 (0Ho) IDs.
68
68
  *
69
69
  * @return Map of 0Ho id to container option api value
70
- * @param package2Ids The list of package IDs
70
+ * @param packageIds The list of package IDs
71
71
  * @param connection For tooling query
72
72
  */
73
- export declare function getContainerOptions(package2Ids: string[], connection: Connection): Promise<Map<string, string>>;
73
+ export declare function getContainerOptions(packageIds: string[], connection: Connection): Promise<Map<string, string>>;
74
74
  /**
75
75
  * Return the Package2Version.HasMetadataRemoved field value for the given Id (05i)
76
76
  *
@@ -121,9 +121,9 @@ export declare function getAncestorIdHighestRelease(connection: Connection, pack
121
121
  * Return a version string in Major.Minor.Patch.Build format, using 0 for any empty part
122
122
  */
123
123
  export declare function concatVersion(major: string | number, minor: string | number, patch: string | number, build: string | number): string;
124
- export declare function getPackage2VersionNumber(package2VersionObj: PackagingSObjects.Package2Version): string;
124
+ export declare function getPackageVersionNumber(package2VersionObj: PackagingSObjects.Package2Version): string;
125
125
  export declare function getConfigPackageDirectories(project: SfProject): PackageDir[];
126
- export declare function getConfigPackageDirectory(packageDirs: NamedPackageDir[], lookupProperty: string, lookupValue: unknown): NamedPackageDir | undefined;
126
+ export declare function getConfigPackageDirectory(packageDirs: NamedPackageDir[] | PackageDir[], lookupProperty: string, lookupValue: unknown): NamedPackageDir | PackageDir | undefined;
127
127
  /**
128
128
  * Given a packageAlias, attempt to return the associated id from the config
129
129
  *
@@ -145,8 +145,9 @@ export declare function convertCamelCaseStringToSentence(stringIn: string): stri
145
145
  * @returns an array of alias for the given id.
146
146
  */
147
147
  export declare function getPackageAliasesFromId(packageId: string, project: SfProject): string[];
148
- export declare function findOrCreatePackage2(seedPackage: string, connection: Connection): Promise<string>;
149
- export declare function _getPackageVersionCreateRequestApi(connection: Connection): PackageVersionCreateRequestApi;
150
- export declare function pollForStatusWithInterval(context: any, id: string, retries: number, packageId: string, branch: string, withProject: SfProject, connection: Connection, interval: Duration): Promise<Package2VersionCreateRequestResult>;
148
+ export declare function findOrCreatePackage(seedPackage: string, connection: Connection): Promise<string>;
149
+ export declare function pollForStatusWithInterval(id: string, retries: number, packageId: string, branch: string, withProject: SfProject, connection: Connection, interval: Duration): Promise<PackageVersionCreateRequestResult>;
151
150
  export declare function getSoqlWhereClauseMaxLength(): number;
152
151
  export declare function formatDate(date: Date): string;
152
+ export declare function combineSaveErrors(sObject: string, crudOperation: string, errors: SaveError[]): SfError;
153
+ export declare function resolveCanonicalPackageProperty(options: PackageVersionCreateOptions): "id" | "package";
@@ -1,16 +1,17 @@
1
1
  "use strict";
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.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;
2
4
  /*
3
5
  * Copyright (c) 2022, salesforce.com, inc.
4
6
  * All rights reserved.
5
7
  * Licensed under the BSD 3-Clause license.
6
8
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
9
  */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.formatDate = exports.getSoqlWhereClauseMaxLength = exports.pollForStatusWithInterval = exports._getPackageVersionCreateRequestApi = exports.findOrCreatePackage2 = exports.getPackageAliasesFromId = exports.convertCamelCaseStringToSentence = exports.getPackageIdFromAlias = exports.getConfigPackageDirectory = exports.getConfigPackageDirectories = exports.getPackage2VersionNumber = exports.concatVersion = exports.getAncestorIdHighestRelease = exports.validateAncestorId = exports.getAncestorId = exports.getInClauseItemsCount = exports.queryWithInConditionChunking = exports.getPackageVersionStrings = exports.getHasMetadataRemoved = exports.getContainerOptions = exports.getSubscriberPackageVersionId = exports.getPackage2TypeBy04t = exports.getPackage2Type = 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;
10
+ const os = require("os");
10
11
  const core_1 = require("@salesforce/core");
11
12
  const kit_1 = require("@salesforce/kit");
12
13
  const interfaces_1 = require("../interfaces");
13
- const packageVersionCreateRequestApi_1 = require("../package/packageVersionCreateRequestApi");
14
+ const pvcr = require("../package/packageVersionCreateRequest");
14
15
  const versionNumber_1 = require("./versionNumber");
15
16
  var Package2VersionStatus = interfaces_1.PackagingSObjects.Package2VersionStatus;
16
17
  core_1.Messages.importMessagesDirectory(__dirname);
@@ -213,40 +214,40 @@ exports.getPackageVersionId = getPackageVersionId;
213
214
  /**
214
215
  * Given 0Ho the package type type (Managed, Unlocked, Locked(deprecated?))
215
216
  *
216
- * @param package2Id the 0Ho
217
+ * @param packageId the 0Ho
217
218
  * @param connection For tooling query
218
219
  * @throws Error with message when package2 cannot be found
219
220
  */
220
- async function getPackage2Type(package2Id, connection) {
221
- const query = `SELECT ContainerOptions FROM Package2 WHERE id ='${package2Id}'`;
221
+ async function getPackageType(packageId, connection) {
222
+ const query = `SELECT ContainerOptions FROM Package2 WHERE id ='${packageId}'`;
222
223
  const queryResult = await connection.tooling.query(query);
223
224
  if (!queryResult || queryResult.records === null || queryResult.records.length === 0) {
224
- throw messages.createError('errorInvalidPackageId', [package2Id]);
225
+ throw messages.createError('errorInvalidPackageId', [packageId]);
225
226
  }
226
227
  return queryResult.records[0].ContainerOptions;
227
228
  }
228
- exports.getPackage2Type = getPackage2Type;
229
+ exports.getPackageType = getPackageType;
229
230
  /**
230
231
  * Given 04t the package type type (Managed, Unlocked, Locked(deprecated?))
231
232
  *
232
- * @param package2VersionId the 04t
233
+ * @param packageVersionId the 04t
233
234
  * @param connection For tooling query
234
235
  * @param installKey For tooling query, if an installation key is applicable to the package version it must be passed in the queries
235
236
  * @throws Error with message when package2 cannot be found
236
237
  */
237
- async function getPackage2TypeBy04t(package2VersionId, connection, installKey) {
238
- let query = `SELECT Package2ContainerOptions FROM SubscriberPackageVersion WHERE id ='${package2VersionId}'`;
238
+ async function getPackageTypeBy04t(packageVersionId, connection, installKey) {
239
+ let query = `SELECT Package2ContainerOptions FROM SubscriberPackageVersion WHERE id ='${packageVersionId}'`;
239
240
  if (installKey) {
240
241
  const escapedInstallationKey = installKey.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
241
242
  query += ` AND InstallationKey ='${escapedInstallationKey}'`;
242
243
  }
243
244
  const queryResult = await connection.tooling.query(query);
244
245
  if (!queryResult || queryResult.records === null || queryResult.records.length === 0) {
245
- throw messages.createError('errorInvalidPackageId', [package2VersionId]);
246
+ throw messages.createError('errorInvalidPackageId', [packageVersionId]);
246
247
  }
247
248
  return queryResult.records[0].Package2ContainerOptions;
248
249
  }
249
- exports.getPackage2TypeBy04t = getPackage2TypeBy04t;
250
+ exports.getPackageTypeBy04t = getPackageTypeBy04t;
250
251
  /**
251
252
  * Given a package version ID (05i) or subscriber package version ID (04t), return the subscriber package version ID (04t)
252
253
  *
@@ -274,16 +275,16 @@ exports.getSubscriberPackageVersionId = getSubscriberPackageVersionId;
274
275
  * Get the ContainerOptions for the specified Package2 (0Ho) IDs.
275
276
  *
276
277
  * @return Map of 0Ho id to container option api value
277
- * @param package2Ids The list of package IDs
278
+ * @param packageIds The list of package IDs
278
279
  * @param connection For tooling query
279
280
  */
280
281
  // eslint-disable-next-line @typescript-eslint/require-await
281
- async function getContainerOptions(package2Ids, connection) {
282
- if (!package2Ids || package2Ids.length === 0) {
282
+ async function getContainerOptions(packageIds, connection) {
283
+ if (!packageIds || packageIds.length === 0) {
283
284
  return new Map();
284
285
  }
285
286
  const query = "SELECT Id, ContainerOptions FROM Package2 WHERE Id IN ('%IDS%')";
286
- const records = await queryWithInConditionChunking(query, package2Ids, '%IDS%', connection);
287
+ const records = await queryWithInConditionChunking(query, packageIds, '%IDS%', connection);
287
288
  if (records && records.length > 0) {
288
289
  return new Map(records.map((record) => [record.Id, record.ContainerOptions]));
289
290
  }
@@ -413,7 +414,7 @@ async function getAncestorId(packageDescriptorJson, connection, project, version
413
414
  // If an id property is present, use it. Otherwise, look up the package id from the package property.
414
415
  const packageId = (_a = packageDescriptorJson['id']) !== null && _a !== void 0 ? _a : getPackageIdFromAlias(packageDescriptorJson.package, project);
415
416
  // No need to proceed if Unlocked
416
- const packageType = await getPackage2Type(packageId, connection);
417
+ const packageType = await getPackageType(packageId, connection);
417
418
  if (packageType === 'Unlocked') {
418
419
  return '';
419
420
  }
@@ -504,7 +505,7 @@ function validateAncestorId(ancestorId, highestReleasedVersion, explicitUseNoAnc
504
505
  }
505
506
  else {
506
507
  // the explicitUseNoAncestor && skipAncestorCheck case is handled above
507
- throw messages.createError('errorAncestorNoneNotAllowed', [getPackage2VersionNumber(highestReleasedVersion)]);
508
+ throw messages.createError('errorAncestorNoneNotAllowed', [getPackageVersionNumber(highestReleasedVersion)]);
508
509
  }
509
510
  }
510
511
  if (!isPatch && !skipAncestorCheck) {
@@ -512,7 +513,7 @@ function validateAncestorId(ancestorId, highestReleasedVersion, explicitUseNoAnc
512
513
  if (highestReleasedVersion.Id !== ancestorId) {
513
514
  throw messages.createError('errorAncestorNotHighest', [
514
515
  origSpecifiedAncestor,
515
- getPackage2VersionNumber(highestReleasedVersion),
516
+ getPackageVersionNumber(highestReleasedVersion),
516
517
  ]);
517
518
  }
518
519
  }
@@ -562,7 +563,7 @@ async function getAncestorIdHighestRelease(connection, packageId, versionNumberS
562
563
  }
563
564
  else if (explicitUseHighestRelease) {
564
565
  // there is no eligible ancestor version
565
- throw new Error(messages.getMessage('errorNoMatchingAncestor', [versionNumberString, packageId]));
566
+ throw messages.createError('errorNoMatchingAncestor', [versionNumberString, packageId]);
566
567
  }
567
568
  }
568
569
  return result;
@@ -575,11 +576,11 @@ function concatVersion(major, minor, patch, build) {
575
576
  return [major, minor, patch, build].map((part) => (part ? `${part}` : '0')).join('.');
576
577
  }
577
578
  exports.concatVersion = concatVersion;
578
- function getPackage2VersionNumber(package2VersionObj) {
579
+ function getPackageVersionNumber(package2VersionObj) {
579
580
  const version = concatVersion(package2VersionObj.MajorVersion, package2VersionObj.MinorVersion, package2VersionObj.PatchVersion, undefined);
580
581
  return version.slice(0, version.lastIndexOf('.'));
581
582
  }
582
- exports.getPackage2VersionNumber = getPackage2VersionNumber;
583
+ exports.getPackageVersionNumber = getPackageVersionNumber;
583
584
  // TODO: get rid of this function if possible.
584
585
  function getConfigPackageDirectories(project) {
585
586
  return project.getPackageDirectories();
@@ -625,13 +626,14 @@ function getPackageAliasesFromId(packageId, project) {
625
626
  .map((alias) => alias[0]);
626
627
  }
627
628
  exports.getPackageAliasesFromId = getPackageAliasesFromId;
628
- async function findOrCreatePackage2(seedPackage, connection) {
629
+ // probably used by convert.
630
+ async function findOrCreatePackage(seedPackage, connection) {
629
631
  const query = `SELECT Id FROM Package2 WHERE ConvertedFromPackageId = '${seedPackage}'`;
630
632
  const queryResult = await connection.tooling.query(query);
631
633
  const records = queryResult.records;
632
634
  if (records && records.length > 1) {
633
635
  const ids = records.map((r) => r.Id);
634
- throw new Error(messages.getMessage('errorMoreThanOnePackage2WithSeed', [ids.join(', ')]));
636
+ throw messages.createError('errorMoreThanOnePackage2WithSeed', [ids.join(', ')]);
635
637
  }
636
638
  if (records && records.length === 1) {
637
639
  // return the package2 object
@@ -642,7 +644,7 @@ async function findOrCreatePackage2(seedPackage, connection) {
642
644
  const subscriberResult = await connection.tooling.query(subQuery);
643
645
  const subscriberRecords = subscriberResult.records;
644
646
  if (!subscriberRecords || subscriberRecords.length <= 0) {
645
- throw new Error(messages.getMessage('errorNoSubscriberPackageRecord', [seedPackage]));
647
+ throw messages.createError('errorNoSubscriberPackageRecord', [seedPackage]);
646
648
  }
647
649
  const request = {
648
650
  Name: subscriberRecords[0].Name,
@@ -653,22 +655,17 @@ async function findOrCreatePackage2(seedPackage, connection) {
653
655
  };
654
656
  const createResult = await connection.tooling.create('Package2', request);
655
657
  if (!createResult.success) {
656
- throw new Error(createResult.errors.map((e) => e.message).join('\n'));
658
+ throw combineSaveErrors('Package2', 'create', createResult.errors);
657
659
  }
658
660
  return createResult.id;
659
661
  }
660
- exports.findOrCreatePackage2 = findOrCreatePackage2;
661
- function _getPackageVersionCreateRequestApi(connection) {
662
- return new packageVersionCreateRequestApi_1.PackageVersionCreateRequestApi({ connection });
663
- }
664
- exports._getPackageVersionCreateRequestApi = _getPackageVersionCreateRequestApi;
665
- async function pollForStatusWithInterval(context, id, retries, packageId, branch, withProject, connection, interval) {
662
+ exports.findOrCreatePackage = findOrCreatePackage;
663
+ async function pollForStatusWithInterval(id, retries, packageId, branch, withProject, connection, interval) {
666
664
  let remainingRetries = retries;
667
665
  const pollingClient = await core_1.PollingClient.create({
668
666
  poll: async () => {
669
667
  var _a;
670
- const pvcrApi = new packageVersionCreateRequestApi_1.PackageVersionCreateRequestApi({ connection });
671
- const results = await pvcrApi.byId(id);
668
+ const results = await pvcr.byId(id, connection);
672
669
  if (_isStatusEqualTo(results, [Package2VersionStatus.success, Package2VersionStatus.error])) {
673
670
  // complete
674
671
  if (_isStatusEqualTo(results, [Package2VersionStatus.success])) {
@@ -677,19 +674,19 @@ async function pollForStatusWithInterval(context, id, retries, packageId, branch
677
674
  if (withProject && !process.env.SFDX_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE) {
678
675
  projectUpdated = true;
679
676
  const query = `SELECT MajorVersion, MinorVersion, PatchVersion, BuildNumber FROM Package2Version WHERE Id = '${results[0].Package2VersionId}'`;
680
- const package2VersionVersionString = await connection.tooling
677
+ const packageVersionVersionString = await connection.tooling
681
678
  .query(query)
682
679
  .then((pkgQueryResult) => {
683
680
  const record = pkgQueryResult.records[0];
684
681
  return `${record.MajorVersion}.${record.MinorVersion}.${record.PatchVersion}-${record.BuildNumber}`;
685
682
  });
686
- const newConfig = await _generatePackageAliasEntry(connection, withProject, results[0].SubscriberPackageVersionId, package2VersionVersionString, branch, packageId);
683
+ const newConfig = await _generatePackageAliasEntry(connection, withProject, results[0].SubscriberPackageVersionId, packageVersionVersionString, branch, packageId);
687
684
  withProject.getSfProjectJson().set('packageAliases', newConfig);
688
685
  await withProject.getSfProjectJson().write();
689
686
  }
690
687
  core_1.Lifecycle.getInstance().emit(Package2VersionStatus.success, {
691
688
  id,
692
- package2VersionCreateRequestResult: results[0],
689
+ packageVersionCreateRequestResult: results[0],
693
690
  projectUpdated,
694
691
  });
695
692
  return { completed: true, payload: results[0] };
@@ -715,7 +712,7 @@ async function pollForStatusWithInterval(context, id, retries, packageId, branch
715
712
  const remainingTime = kit_1.Duration.milliseconds(interval.milliseconds * remainingRetries);
716
713
  core_1.Lifecycle.getInstance().emit(Package2VersionStatus.inProgress, {
717
714
  id,
718
- package2VersionCreateRequestResult: results[0],
715
+ packageVersionCreateRequestResult: results[0],
719
716
  message: '',
720
717
  remainingTime,
721
718
  });
@@ -783,4 +780,45 @@ function formatDate(date) {
783
780
  return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
784
781
  }
785
782
  exports.formatDate = formatDate;
783
+ function combineSaveErrors(sObject, crudOperation, errors) {
784
+ 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(', ')}]` : '';
787
+ return `Error: ${error.errorCode} Message: ${error.message} ${fieldsString}`;
788
+ });
789
+ const sfError = messages.createError('errorDuringSObjectCRUDOperation', [
790
+ crudOperation,
791
+ sObject,
792
+ errorMessages.join(os.EOL),
793
+ ]);
794
+ return sfError;
795
+ }
796
+ exports.combineSaveErrors = combineSaveErrors;
797
+ function resolveCanonicalPackageProperty(options) {
798
+ let canonicalPackageProperty;
799
+ if (!options.package) {
800
+ const packageValProp = this.getPackageValuePropertyFromDirectory(options.path, options);
801
+ options.package = packageValProp.packageValue;
802
+ canonicalPackageProperty = packageValProp.packageProperty;
803
+ }
804
+ else if (!options.path) {
805
+ canonicalPackageProperty = this.getPackagePropertyFromPackage(this.project.getPackageDirectories(), options);
806
+ options.path = this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'path', canonicalPackageProperty, options.package, 'package', options);
807
+ }
808
+ else {
809
+ canonicalPackageProperty = this.getPackagePropertyFromPackage(this.project.getPackageDirectories(), options);
810
+ this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), canonicalPackageProperty, 'path', options.path, 'path', options);
811
+ const expectedPackageId = this.getConfigPackageDirectoriesValue(this.packageDirs, canonicalPackageProperty, 'path', options.path, 'path', options);
812
+ // This will throw an error if the package id flag value doesn't match
813
+ // any of the :id values in the package dirs.
814
+ this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'path', canonicalPackageProperty, options.package, 'package', options);
815
+ // This will throw an error if the package id flag value doesn't match
816
+ // the correct corresponding directory with that packageId.
817
+ if (options.package !== expectedPackageId) {
818
+ throw messages.createError('errorDirectoryIdMismatch', ['--path', options.path, '--package', options.package]);
819
+ }
820
+ }
821
+ return canonicalPackageProperty;
822
+ }
823
+ exports.resolveCanonicalPackageProperty = resolveCanonicalPackageProperty;
786
824
  //# sourceMappingURL=packageUtils.js.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Zips directory to given zipfile.
3
+ *
4
+ * https://github.com/archiverjs/node-archiver
5
+ *
6
+ * @param dir to zip
7
+ * @param zipfile
8
+ * @param options
9
+ */
10
+ export declare function zipDir(dir: string, zipfile: string, options?: {}): Promise<void>;
11
+ export declare function getElapsedTime(timer: [number, number]): string;
12
+ export declare function copyDir(src: string, dest: string): void;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.copyDir = exports.getElapsedTime = exports.zipDir = void 0;
4
+ /*
5
+ * Copyright (c) 2020, salesforce.com, inc.
6
+ * All rights reserved.
7
+ * Licensed under the BSD 3-Clause license.
8
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
9
+ */
10
+ const fs = require("fs");
11
+ const path_1 = require("path");
12
+ const stream_1 = require("stream");
13
+ const util_1 = require("util");
14
+ const core_1 = require("@salesforce/core");
15
+ const globby = require("globby");
16
+ const JSZIP = require("jszip");
17
+ const pipeline = (0, util_1.promisify)(stream_1.pipeline);
18
+ /**
19
+ * Zips directory to given zipfile.
20
+ *
21
+ * https://github.com/archiverjs/node-archiver
22
+ *
23
+ * @param dir to zip
24
+ * @param zipfile
25
+ * @param options
26
+ */
27
+ async function zipDir(dir, zipfile, options = {}) {
28
+ const logger = core_1.Logger.childFromRoot('srcDevUtils#zipDir');
29
+ const timer = process.hrtime();
30
+ const globbyResult = await globby('**/*', { expandDirectories: true, cwd: dir });
31
+ const zip = new JSZIP();
32
+ // add files tp zip
33
+ for (const file of globbyResult) {
34
+ zip.file(file, fs.readFileSync((0, path_1.join)(dir, file)));
35
+ }
36
+ // write zip to file
37
+ const zipStream = zip.generateNodeStream({
38
+ type: 'nodebuffer',
39
+ streamFiles: true,
40
+ compression: 'DEFLATE',
41
+ compressionOptions: {
42
+ level: 3,
43
+ },
44
+ });
45
+ await pipeline(zipStream, fs.createWriteStream(zipfile));
46
+ const stat = fs.statSync(zipfile);
47
+ logger.debug(`${stat.size} bytes written to ${zipfile} in ${getElapsedTime(timer)}ms`);
48
+ return;
49
+ }
50
+ exports.zipDir = zipDir;
51
+ function getElapsedTime(timer) {
52
+ const elapsed = process.hrtime(timer);
53
+ return (elapsed[0] * 1000 + elapsed[1] / 1000000).toFixed(3);
54
+ }
55
+ exports.getElapsedTime = getElapsedTime;
56
+ function copyDir(src, dest) {
57
+ fs.mkdirSync(dest, { recursive: true });
58
+ const entries = fs.readdirSync(src, { withFileTypes: true });
59
+ entries.map((entry) => {
60
+ const srcPath = (0, path_1.join)(src, entry.name);
61
+ const destPath = (0, path_1.join)(dest, entry.name);
62
+ return entry.isDirectory() ? copyDir(srcPath, destPath) : fs.copyFileSync(srcPath, destPath);
63
+ });
64
+ }
65
+ exports.copyDir = copyDir;
66
+ //# sourceMappingURL=srcDevUtils.js.map
@@ -13,4 +13,5 @@ export declare class VersionNumber {
13
13
  private constructor();
14
14
  static from(versionString: string): VersionNumber;
15
15
  toString(): string;
16
+ isbuildKeyword(): boolean;
16
17
  }
@@ -27,30 +27,35 @@ class VersionNumber {
27
27
  }
28
28
  static from(versionString) {
29
29
  if (!versionString) {
30
- throw new Error(messages.getMessage('errorMissingVersionNumber'));
30
+ throw messages.createError('errorMissingVersionNumber');
31
31
  }
32
32
  const version = versionString.split('.');
33
33
  if ((version === null || version === void 0 ? void 0 : 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))) {
37
- throw new Error(messages.getMessage('errorInvalidMajorMinorPatchNumber', [versionString]));
37
+ throw messages.createError('errorInvalidMajorMinorPatchNumber', [versionString]);
38
38
  }
39
39
  if (isNaN(asNumbers[3]) && !Object.values(BuildNumberToken).includes(build)) {
40
- throw new Error(messages.getMessage('errorInvalidBuildNumberToken', [
40
+ throw messages.createError('errorInvalidBuildNumberToken', [
41
41
  versionString,
42
42
  Object.values(BuildNumberToken).join(', '),
43
- ]));
43
+ ]);
44
44
  }
45
45
  return new VersionNumber(major, minor, patch, build);
46
46
  }
47
- throw new Error(messages.getMessage('errorInvalidVersionNumber', [versionString]));
47
+ throw messages.createError('errorInvalidVersionNumber', [versionString]);
48
48
  }
49
49
  toString() {
50
50
  {
51
51
  return `${this.major || '0'}.${this.minor || '0'}.${this.patch || '0'}.${this.build ? `${this.build}` : '0'}`;
52
52
  }
53
53
  }
54
+ isbuildKeyword() {
55
+ return Object.values(BuildNumberToken)
56
+ .map((v) => v.toString())
57
+ .includes(this.build.toLowerCase());
58
+ }
54
59
  }
55
60
  exports.VersionNumber = VersionNumber;
56
61
  //# sourceMappingURL=versionNumber.js.map