@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.
- package/CHANGELOG.md +16 -0
- package/lib/constants.d.ts +21 -0
- package/lib/constants.js +40 -0
- package/lib/interfaces/packagingInterfacesAndType.d.ts +85 -4
- package/lib/interfaces/packagingSObjects.d.ts +2 -1
- package/lib/interfaces/packagingSObjects.js +0 -6
- package/lib/package/index.d.ts +4 -1
- package/lib/package/index.js +7 -2
- package/lib/package/packageConvert.d.ts +11 -0
- package/lib/package/packageConvert.js +84 -0
- package/lib/package/packageCreate.d.ts +26 -0
- package/lib/package/packageCreate.js +115 -0
- package/lib/package/packageDelete.d.ts +3 -0
- package/lib/package/packageDelete.js +26 -0
- package/lib/package/packageProfileApi.d.ts +59 -0
- package/lib/package/packageProfileApi.js +278 -0
- package/lib/package/packageVersion.d.ts +25 -0
- package/lib/package/packageVersion.js +73 -0
- package/lib/package/packageVersionCreate.d.ts +68 -0
- package/lib/package/packageVersionCreate.js +758 -0
- package/lib/package/packageVersionCreateRequest.d.ts +4 -0
- package/lib/package/packageVersionCreateRequest.js +85 -0
- package/lib/package/packageVersionList.d.ts +4 -24
- package/lib/package/packageVersionList.js +4 -5
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/packageUtils.d.ts +15 -14
- package/lib/utils/packageUtils.js +77 -39
- package/lib/utils/srcDevUtils.d.ts +12 -0
- package/lib/utils/srcDevUtils.js +66 -0
- package/lib/utils/versionNumber.d.ts +1 -0
- package/lib/utils/versionNumber.js +10 -5
- package/messages/messages.md +49 -0
- package/package.json +11 -16
- package/lib/package/packageVersion2GP.d.ts +0 -17
- package/lib/package/packageVersion2GP.js +0 -46
- package/lib/package/packageVersionCreateRequestApi.d.ts +0 -17
- 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 {
|
|
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
|
-
|
|
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
|
-
|
|
56
|
+
const aliasesOrIds = [...new Set(idsOrAliases)];
|
|
58
57
|
// resolve any aliases
|
|
59
|
-
const packageIds =
|
|
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);
|
package/lib/utils/index.d.ts
CHANGED
package/lib/utils/index.js
CHANGED
|
@@ -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 {
|
|
5
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
70
|
+
* @param packageIds The list of package IDs
|
|
71
71
|
* @param connection For tooling query
|
|
72
72
|
*/
|
|
73
|
-
export declare function getContainerOptions(
|
|
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
|
|
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
|
|
149
|
-
export declare function
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
221
|
-
const query = `SELECT ContainerOptions FROM Package2 WHERE id ='${
|
|
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', [
|
|
225
|
+
throw messages.createError('errorInvalidPackageId', [packageId]);
|
|
225
226
|
}
|
|
226
227
|
return queryResult.records[0].ContainerOptions;
|
|
227
228
|
}
|
|
228
|
-
exports.
|
|
229
|
+
exports.getPackageType = getPackageType;
|
|
229
230
|
/**
|
|
230
231
|
* Given 04t the package type type (Managed, Unlocked, Locked(deprecated?))
|
|
231
232
|
*
|
|
232
|
-
* @param
|
|
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
|
|
238
|
-
let query = `SELECT Package2ContainerOptions FROM SubscriberPackageVersion WHERE id ='${
|
|
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', [
|
|
246
|
+
throw messages.createError('errorInvalidPackageId', [packageVersionId]);
|
|
246
247
|
}
|
|
247
248
|
return queryResult.records[0].Package2ContainerOptions;
|
|
248
249
|
}
|
|
249
|
-
exports.
|
|
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
|
|
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(
|
|
282
|
-
if (!
|
|
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,
|
|
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
|
|
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', [
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
658
|
+
throw combineSaveErrors('Package2', 'create', createResult.errors);
|
|
657
659
|
}
|
|
658
660
|
return createResult.id;
|
|
659
661
|
}
|
|
660
|
-
exports.
|
|
661
|
-
function
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -27,30 +27,35 @@ class VersionNumber {
|
|
|
27
27
|
}
|
|
28
28
|
static from(versionString) {
|
|
29
29
|
if (!versionString) {
|
|
30
|
-
throw
|
|
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
|
|
37
|
+
throw messages.createError('errorInvalidMajorMinorPatchNumber', [versionString]);
|
|
38
38
|
}
|
|
39
39
|
if (isNaN(asNumbers[3]) && !Object.values(BuildNumberToken).includes(build)) {
|
|
40
|
-
throw
|
|
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
|
|
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
|