@salesforce/packaging 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/constants.d.ts +3 -0
- package/lib/constants.js +4 -1
- package/lib/interfaces/packagingInterfacesAndType.d.ts +20 -13
- package/lib/interfaces/packagingSObjects.d.ts +1 -1
- package/lib/package/index.d.ts +1 -5
- package/lib/package/index.js +1 -10
- package/lib/package/package.d.ts +79 -32
- package/lib/package/package.js +159 -71
- package/lib/package/packageAncestry.d.ts +3 -1
- package/lib/package/packageAncestry.js +43 -25
- package/lib/package/packageConvert.js +2 -3
- package/lib/package/packageCreate.d.ts +2 -12
- package/lib/package/packageCreate.js +30 -53
- package/lib/package/packageDelete.js +4 -1
- package/lib/package/packageInstall.d.ts +7 -14
- package/lib/package/packageInstall.js +65 -148
- package/lib/package/packageInstalledList.js +8 -2
- package/lib/package/packageUninstall.d.ts +5 -1
- package/lib/package/packageUninstall.js +51 -41
- package/lib/package/packageVersion.d.ts +53 -6
- package/lib/package/packageVersion.js +139 -29
- package/lib/package/packageVersionCreate.d.ts +2 -2
- package/lib/package/packageVersionCreate.js +27 -25
- package/lib/package/packageVersionCreateRequest.js +15 -6
- package/lib/package/packageVersionCreateRequestReport.js +9 -3
- package/lib/package/packageVersionList.js +3 -1
- package/lib/package/packageVersionReport.js +1 -27
- package/lib/package/subscriberPackageVersion.d.ts +156 -0
- package/lib/package/subscriberPackageVersion.js +346 -0
- package/lib/utils/packageUtils.d.ts +10 -11
- package/lib/utils/packageUtils.js +35 -24
- package/messages/package.md +18 -2
- package/messages/package_version.md +12 -0
- package/messages/pkg_utils.md +5 -33
- package/messages/subscriber_package_version.md +19 -0
- package/package.json +3 -3
- package/lib/package/packageList.d.ts +0 -4
- package/lib/package/packageList.js +0 -19
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.packageInstalledList = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
4
5
|
async function packageInstalledList(conn) {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
try {
|
|
7
|
+
const query = 'SELECT Id, SubscriberPackageId, SubscriberPackage.NamespacePrefix, SubscriberPackage.Name, SubscriberPackageVersion.Id, SubscriberPackageVersion.Name, SubscriberPackageVersion.MajorVersion, SubscriberPackageVersion.MinorVersion, SubscriberPackageVersion.PatchVersion, SubscriberPackageVersion.BuildNumber FROM InstalledSubscriberPackage ORDER BY SubscriberPackageId';
|
|
8
|
+
return (await conn.tooling.query(query)).records;
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
12
|
+
}
|
|
7
13
|
}
|
|
8
14
|
exports.packageInstalledList = packageInstalledList;
|
|
9
15
|
//# sourceMappingURL=packageInstalledList.js.map
|
|
@@ -2,5 +2,9 @@ import { Connection } from '@salesforce/core';
|
|
|
2
2
|
import { Duration } from '@salesforce/kit';
|
|
3
3
|
import { PackagingSObjects } from '../interfaces';
|
|
4
4
|
declare type UninstallResult = PackagingSObjects.SubscriberPackageVersionUninstallRequest;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function getUninstallErrors(conn: Connection, id: string): Promise<Array<{
|
|
6
|
+
Message: string;
|
|
7
|
+
}>>;
|
|
8
|
+
export declare function pollUninstall(uninstallRequestId: string, conn: Connection, frequency: Duration, wait: Duration): Promise<UninstallResult>;
|
|
9
|
+
export declare function uninstallPackage(id: string, conn: Connection, frequency?: Duration, wait?: Duration): Promise<UninstallResult>;
|
|
6
10
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.uninstallPackage = void 0;
|
|
3
|
+
exports.uninstallPackage = exports.pollUninstall = exports.getUninstallErrors = void 0;
|
|
4
4
|
/*
|
|
5
5
|
* Copyright (c) 2020, salesforce.com, inc.
|
|
6
6
|
* All rights reserved.
|
|
@@ -11,54 +11,64 @@ const os = require("os");
|
|
|
11
11
|
const core_1 = require("@salesforce/core");
|
|
12
12
|
const kit_1 = require("@salesforce/kit");
|
|
13
13
|
const interfaces_1 = require("../interfaces");
|
|
14
|
+
const utils_1 = require("../utils");
|
|
14
15
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
15
16
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_uninstall');
|
|
16
17
|
const pkgMessages = core_1.Messages.loadMessages('@salesforce/packaging', 'package');
|
|
17
|
-
async function
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
errors.push('\n=== Errors\n');
|
|
36
|
-
errorQueryResult.records.forEach((record) => {
|
|
37
|
-
errors.push(`(${errors.length}) ${record.Message}${os.EOL}`);
|
|
18
|
+
async function getUninstallErrors(conn, id) {
|
|
19
|
+
const errorQueryResult = await conn.tooling.query(`"SELECT Message FROM PackageVersionUninstallRequestError WHERE ParentRequest.Id = '${id}' ORDER BY Message"`);
|
|
20
|
+
return errorQueryResult?.records || [];
|
|
21
|
+
}
|
|
22
|
+
exports.getUninstallErrors = getUninstallErrors;
|
|
23
|
+
async function pollUninstall(uninstallRequestId, conn, frequency, wait) {
|
|
24
|
+
const poll = async (id, conn) => {
|
|
25
|
+
const uninstallRequest = (await conn.tooling
|
|
26
|
+
.sobject('SubscriberPackageVersionUninstallRequest')
|
|
27
|
+
.retrieve(id));
|
|
28
|
+
switch (uninstallRequest.Status) {
|
|
29
|
+
case 'Success': {
|
|
30
|
+
return { completed: true, payload: uninstallRequest };
|
|
31
|
+
}
|
|
32
|
+
case 'InProgress':
|
|
33
|
+
case 'Queued': {
|
|
34
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.PackageEvents.uninstall, {
|
|
35
|
+
...uninstallRequest,
|
|
38
36
|
});
|
|
37
|
+
return { completed: false, payload: uninstallRequest };
|
|
38
|
+
}
|
|
39
|
+
default: {
|
|
40
|
+
const err = pkgMessages.getMessage('defaultErrorMessage', [id, uninstallRequest.Id]);
|
|
41
|
+
const errorMessages = await getUninstallErrors(conn, id);
|
|
42
|
+
const errors = errorMessages.map((error, index) => `(${index + 1}) ${error.Message}${os.EOL}`);
|
|
43
|
+
const combinedErrors = errors.length ? `\n=== Errors\n${errors.join(os.EOL)}` : '';
|
|
44
|
+
throw new core_1.SfError(`${err}${combinedErrors}`, 'UNINSTALL_ERROR', [messages.getMessage('uninstallErrorAction')]);
|
|
39
45
|
}
|
|
40
|
-
throw new core_1.SfError(`${err}${errors.join(os.EOL)}`, 'UNINSTALL_ERROR', [
|
|
41
|
-
messages.getMessage('uninstallErrorAction'),
|
|
42
|
-
]);
|
|
43
46
|
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
};
|
|
48
|
+
const pollingClient = await core_1.PollingClient.create({
|
|
49
|
+
poll: () => poll(uninstallRequestId, conn),
|
|
50
|
+
frequency,
|
|
51
|
+
timeout: wait,
|
|
49
52
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
poll: () => poll(uninstallRequest.id, conn),
|
|
58
|
-
frequency: kit_1.Duration.seconds(5),
|
|
59
|
-
timeout: wait,
|
|
53
|
+
return pollingClient.subscribe();
|
|
54
|
+
}
|
|
55
|
+
exports.pollUninstall = pollUninstall;
|
|
56
|
+
async function uninstallPackage(id, conn, frequency = kit_1.Duration.seconds(0), wait = kit_1.Duration.seconds(0)) {
|
|
57
|
+
try {
|
|
58
|
+
const uninstallRequest = await conn.tooling.sobject('SubscriberPackageVersionUninstallRequest').create({
|
|
59
|
+
SubscriberPackageVersionId: id,
|
|
60
60
|
});
|
|
61
|
-
|
|
61
|
+
if (wait.seconds === 0) {
|
|
62
|
+
return (await conn.tooling
|
|
63
|
+
.sobject('SubscriberPackageVersionUninstallRequest')
|
|
64
|
+
.retrieve(uninstallRequest.id));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return pollUninstall(uninstallRequest.id, conn, frequency, wait);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
62
72
|
}
|
|
63
73
|
}
|
|
64
74
|
exports.uninstallPackage = uninstallPackage;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Connection, SfProject } from '@salesforce/core';
|
|
2
2
|
import { Duration } from '@salesforce/kit';
|
|
3
|
-
import { PackageSaveResult, PackageVersionCreateOptions, PackageVersionCreateRequestQueryOptions, PackageVersionCreateRequestResult,
|
|
3
|
+
import { PackageSaveResult, PackageType, PackageVersionCreateOptions, PackageVersionCreateRequestQueryOptions, PackageVersionCreateRequestResult, PackageVersionOptions, PackageVersionReportResult, PackageVersionUpdateOptions, PackagingSObjects } from '../interfaces';
|
|
4
4
|
declare type Package2Version = PackagingSObjects.Package2Version;
|
|
5
5
|
export declare const Package2VersionFields: string[];
|
|
6
6
|
export declare class PackageVersion {
|
|
@@ -8,6 +8,7 @@ export declare class PackageVersion {
|
|
|
8
8
|
private readonly project;
|
|
9
9
|
private readonly connection;
|
|
10
10
|
private data;
|
|
11
|
+
private packageType;
|
|
11
12
|
constructor(options: PackageVersionOptions);
|
|
12
13
|
/**
|
|
13
14
|
* Sends a request to create a new package version and optionally polls for
|
|
@@ -26,6 +27,7 @@ export declare class PackageVersion {
|
|
|
26
27
|
* Gets current state of a package version create request.
|
|
27
28
|
*
|
|
28
29
|
* @param createPackageRequestId
|
|
30
|
+
* @param connection
|
|
29
31
|
*/
|
|
30
32
|
static getCreateStatus(createPackageRequestId: string, connection: Connection): Promise<PackageVersionCreateRequestResult>;
|
|
31
33
|
/**
|
|
@@ -35,7 +37,7 @@ export declare class PackageVersion {
|
|
|
35
37
|
* @param options PackageVersionCreateRequestQueryOptions
|
|
36
38
|
* @returns the list of package version create requests.
|
|
37
39
|
*/
|
|
38
|
-
static
|
|
40
|
+
static getPackageVersionCreateRequests(connection: Connection, options?: PackageVersionCreateRequestQueryOptions): Promise<PackageVersionCreateRequestResult[]>;
|
|
39
41
|
/**
|
|
40
42
|
* Convenience function that will wait for a package version to be created.
|
|
41
43
|
*
|
|
@@ -49,7 +51,28 @@ export declare class PackageVersion {
|
|
|
49
51
|
frequency: Duration;
|
|
50
52
|
timeout: Duration;
|
|
51
53
|
}): Promise<PackageVersionCreateRequestResult>;
|
|
52
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Gets current state of a package version create request.
|
|
56
|
+
*
|
|
57
|
+
* @param createPackageRequestId
|
|
58
|
+
* @param connection
|
|
59
|
+
*/
|
|
60
|
+
static getCreateVersionReport(createPackageRequestId: string, connection: Connection): Promise<PackageVersionCreateRequestResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Convenience function that will wait for a package version to be created.
|
|
63
|
+
*
|
|
64
|
+
* This function emits LifeCycle events, "enqueued", "in-progress", "success", "error" and "timed-out" to
|
|
65
|
+
* progress and current status. Events also carry a payload of type PackageVersionCreateRequestResult.
|
|
66
|
+
*
|
|
67
|
+
* @param createPackageVersionRequestId
|
|
68
|
+
* @param project
|
|
69
|
+
* @param connection
|
|
70
|
+
* @param polling frequency and timeout Durations to be used in polling
|
|
71
|
+
* */
|
|
72
|
+
static waitForCreateVersion(createPackageVersionRequestId: string, project: SfProject, connection: Connection, polling: {
|
|
73
|
+
frequency: Duration;
|
|
74
|
+
timeout: Duration;
|
|
75
|
+
}): Promise<PackageVersionCreateRequestResult>;
|
|
53
76
|
/**
|
|
54
77
|
* Get the package version ID for this PackageVersion.
|
|
55
78
|
*
|
|
@@ -62,13 +85,25 @@ export declare class PackageVersion {
|
|
|
62
85
|
* @returns The SubscriberPackageVersionId (04t).
|
|
63
86
|
*/
|
|
64
87
|
getSubscriberId(): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Get the package Id for this PackageVersion.
|
|
90
|
+
*
|
|
91
|
+
* @returns The PackageId (0Ho).
|
|
92
|
+
*/
|
|
93
|
+
getPackageId(): Promise<string>;
|
|
94
|
+
/**
|
|
95
|
+
* Get the package type for this PackageVersion.
|
|
96
|
+
*
|
|
97
|
+
* @returns The PackageType (Managed, Unlocked).
|
|
98
|
+
*/
|
|
99
|
+
getPackageType(): Promise<PackageType>;
|
|
65
100
|
/**
|
|
66
101
|
* Get the Package2Version SObject data for this PackageVersion.
|
|
67
102
|
*
|
|
68
103
|
* @param force force a refresh of the package version data.
|
|
69
104
|
* @returns Package2Version
|
|
70
105
|
*/
|
|
71
|
-
|
|
106
|
+
getData(force?: boolean): Promise<Package2Version>;
|
|
72
107
|
/**
|
|
73
108
|
* Deletes this PackageVersion.
|
|
74
109
|
*/
|
|
@@ -83,11 +118,23 @@ export declare class PackageVersion {
|
|
|
83
118
|
* @param verbose Whether to get a detailed version of the report, at the expense of performance.
|
|
84
119
|
*/
|
|
85
120
|
report(verbose?: boolean): Promise<PackageVersionReportResult>;
|
|
86
|
-
|
|
87
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Promotes this PackageVersion to released state.
|
|
123
|
+
*/
|
|
88
124
|
promote(): Promise<PackageSaveResult>;
|
|
89
125
|
update(options: PackageVersionUpdateOptions): Promise<PackageSaveResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Creates a new package version.
|
|
128
|
+
*
|
|
129
|
+
* @param options
|
|
130
|
+
* @param polling frequency and timeout Durations to be used in polling
|
|
131
|
+
*/
|
|
132
|
+
create(options: PackageVersionCreateOptions, polling?: {
|
|
133
|
+
frequency: Duration;
|
|
134
|
+
timeout: Duration;
|
|
135
|
+
}): Promise<Partial<PackageVersionCreateRequestResult>>;
|
|
90
136
|
private updateDeprecation;
|
|
91
137
|
private updateProjectWithPackageVersion;
|
|
138
|
+
private resolveId;
|
|
92
139
|
}
|
|
93
140
|
export {};
|
|
@@ -14,7 +14,6 @@ const utils_1 = require("../utils");
|
|
|
14
14
|
const packageVersionCreate_1 = require("./packageVersionCreate");
|
|
15
15
|
const packageVersionReport_1 = require("./packageVersionReport");
|
|
16
16
|
const packageVersionCreateRequestReport_1 = require("./packageVersionCreateRequestReport");
|
|
17
|
-
const packageVersionList_1 = require("./packageVersionList");
|
|
18
17
|
const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
|
|
19
18
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
20
19
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version');
|
|
@@ -56,7 +55,7 @@ class PackageVersion {
|
|
|
56
55
|
this.connection = this.options.connection;
|
|
57
56
|
this.project = this.options.project;
|
|
58
57
|
this.data = {};
|
|
59
|
-
const id =
|
|
58
|
+
const id = this.resolveId();
|
|
60
59
|
// validate ID
|
|
61
60
|
if (id.startsWith('04t')) {
|
|
62
61
|
(0, utils_1.validateId)(utils_1.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, id);
|
|
@@ -88,13 +87,14 @@ class PackageVersion {
|
|
|
88
87
|
return await PackageVersion.pollCreateStatus(createResult.Id, options.connection, options.project, polling).catch((err) => {
|
|
89
88
|
// TODO
|
|
90
89
|
// until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
|
|
91
|
-
throw (0, utils_1.applyErrorAction)(err);
|
|
90
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
92
91
|
});
|
|
93
92
|
}
|
|
94
93
|
/**
|
|
95
94
|
* Gets current state of a package version create request.
|
|
96
95
|
*
|
|
97
96
|
* @param createPackageRequestId
|
|
97
|
+
* @param connection
|
|
98
98
|
*/
|
|
99
99
|
static async getCreateStatus(createPackageRequestId, connection) {
|
|
100
100
|
return await (0, packageVersionCreateRequestReport_1.getCreatePackageVersionCreateRequestReport)({
|
|
@@ -103,7 +103,7 @@ class PackageVersion {
|
|
|
103
103
|
}).catch((err) => {
|
|
104
104
|
// TODO
|
|
105
105
|
// until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
|
|
106
|
-
throw (0, utils_1.applyErrorAction)(err);
|
|
106
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
@@ -113,7 +113,7 @@ class PackageVersion {
|
|
|
113
113
|
* @param options PackageVersionCreateRequestQueryOptions
|
|
114
114
|
* @returns the list of package version create requests.
|
|
115
115
|
*/
|
|
116
|
-
static async
|
|
116
|
+
static async getPackageVersionCreateRequests(connection, options) {
|
|
117
117
|
return (0, packageVersionCreateRequest_1.list)({ ...options, connection });
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
@@ -183,21 +183,88 @@ class PackageVersion {
|
|
|
183
183
|
throw (0, utils_1.applyErrorAction)(err);
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
186
|
+
/**
|
|
187
|
+
* Gets current state of a package version create request.
|
|
188
|
+
*
|
|
189
|
+
* @param createPackageRequestId
|
|
190
|
+
* @param connection
|
|
191
|
+
*/
|
|
192
|
+
static async getCreateVersionReport(createPackageRequestId, connection) {
|
|
193
|
+
return await (0, packageVersionCreateRequestReport_1.getCreatePackageVersionCreateRequestReport)({
|
|
194
|
+
createPackageVersionRequestId: createPackageRequestId,
|
|
195
|
+
connection,
|
|
196
|
+
}).catch((err) => {
|
|
197
|
+
// TODO
|
|
198
|
+
// until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
|
|
199
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Convenience function that will wait for a package version to be created.
|
|
204
|
+
*
|
|
205
|
+
* This function emits LifeCycle events, "enqueued", "in-progress", "success", "error" and "timed-out" to
|
|
206
|
+
* progress and current status. Events also carry a payload of type PackageVersionCreateRequestResult.
|
|
207
|
+
*
|
|
208
|
+
* @param createPackageVersionRequestId
|
|
209
|
+
* @param project
|
|
210
|
+
* @param connection
|
|
211
|
+
* @param polling frequency and timeout Durations to be used in polling
|
|
212
|
+
* */
|
|
213
|
+
static async waitForCreateVersion(createPackageVersionRequestId, project, connection, polling) {
|
|
214
|
+
if (polling.timeout?.milliseconds <= 0) {
|
|
215
|
+
return PackageVersion.getCreateVersionReport(createPackageVersionRequestId, connection);
|
|
216
|
+
}
|
|
217
|
+
let remainingWaitTime = polling.timeout;
|
|
218
|
+
let report;
|
|
219
|
+
const pollingClient = await core_1.PollingClient.create({
|
|
220
|
+
poll: async () => {
|
|
221
|
+
report = await this.getCreateVersionReport(createPackageVersionRequestId, connection);
|
|
222
|
+
switch (report.Status) {
|
|
223
|
+
case 'Queued':
|
|
224
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.PackageVersionEvents.create.enqueued, { ...report, remainingWaitTime });
|
|
225
|
+
remainingWaitTime = kit_1.Duration.seconds(remainingWaitTime.seconds - polling.frequency.seconds);
|
|
226
|
+
return {
|
|
227
|
+
completed: false,
|
|
228
|
+
payload: report,
|
|
229
|
+
};
|
|
230
|
+
case 'InProgress':
|
|
231
|
+
case 'Initializing':
|
|
232
|
+
case 'VerifyingFeaturesAndSettings':
|
|
233
|
+
case 'VerifyingDependencies':
|
|
234
|
+
case 'VerifyingMetadata':
|
|
235
|
+
case 'FinalizingPackageVersion':
|
|
236
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.PackageVersionEvents.create.progress, {
|
|
237
|
+
...report,
|
|
238
|
+
remainingWaitTime,
|
|
239
|
+
});
|
|
240
|
+
remainingWaitTime = kit_1.Duration.seconds(remainingWaitTime.seconds - polling.frequency.seconds);
|
|
241
|
+
return {
|
|
242
|
+
completed: false,
|
|
243
|
+
payload: report,
|
|
244
|
+
};
|
|
245
|
+
case 'Success':
|
|
246
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.PackageVersionEvents.create.success, report);
|
|
247
|
+
await new PackageVersion({
|
|
248
|
+
idOrAlias: report.SubscriberPackageVersionId,
|
|
249
|
+
project,
|
|
250
|
+
connection,
|
|
251
|
+
}).updateProjectWithPackageVersion(report);
|
|
252
|
+
return { completed: true, payload: report };
|
|
253
|
+
case 'Error':
|
|
254
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.PackageVersionEvents.create.error, report);
|
|
255
|
+
return { completed: true, payload: report };
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
frequency: polling.frequency,
|
|
259
|
+
timeout: polling.timeout,
|
|
198
260
|
});
|
|
199
|
-
|
|
200
|
-
|
|
261
|
+
try {
|
|
262
|
+
return pollingClient.subscribe();
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.PackageVersionEvents.create['timed-out'], report);
|
|
266
|
+
throw (0, utils_1.applyErrorAction)(err);
|
|
267
|
+
}
|
|
201
268
|
}
|
|
202
269
|
/**
|
|
203
270
|
* Get the package version ID for this PackageVersion.
|
|
@@ -206,7 +273,7 @@ class PackageVersion {
|
|
|
206
273
|
*/
|
|
207
274
|
async getId() {
|
|
208
275
|
if (!this.data.Id) {
|
|
209
|
-
await this.
|
|
276
|
+
await this.getData();
|
|
210
277
|
}
|
|
211
278
|
return this.data.Id;
|
|
212
279
|
}
|
|
@@ -217,17 +284,39 @@ class PackageVersion {
|
|
|
217
284
|
*/
|
|
218
285
|
async getSubscriberId() {
|
|
219
286
|
if (!this.data.SubscriberPackageVersionId) {
|
|
220
|
-
await this.
|
|
287
|
+
await this.getData();
|
|
221
288
|
}
|
|
222
289
|
return this.data.SubscriberPackageVersionId;
|
|
223
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Get the package Id for this PackageVersion.
|
|
293
|
+
*
|
|
294
|
+
* @returns The PackageId (0Ho).
|
|
295
|
+
*/
|
|
296
|
+
async getPackageId() {
|
|
297
|
+
if (!this.data.Package2Id) {
|
|
298
|
+
await this.getData();
|
|
299
|
+
}
|
|
300
|
+
return this.data.Package2Id;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get the package type for this PackageVersion.
|
|
304
|
+
*
|
|
305
|
+
* @returns The PackageType (Managed, Unlocked).
|
|
306
|
+
*/
|
|
307
|
+
async getPackageType() {
|
|
308
|
+
if (!this.packageType) {
|
|
309
|
+
this.packageType = (await this.connection.singleRecordQuery(`select ContainerOptions from Package2 where Id = '${await this.getPackageId()}' limit 1`, { tooling: true })).ContainerOptions;
|
|
310
|
+
}
|
|
311
|
+
return this.packageType;
|
|
312
|
+
}
|
|
224
313
|
/**
|
|
225
314
|
* Get the Package2Version SObject data for this PackageVersion.
|
|
226
315
|
*
|
|
227
316
|
* @param force force a refresh of the package version data.
|
|
228
317
|
* @returns Package2Version
|
|
229
318
|
*/
|
|
230
|
-
async
|
|
319
|
+
async getData(force = false) {
|
|
231
320
|
if (!this.data.Name || force) {
|
|
232
321
|
let queryConfig;
|
|
233
322
|
if (this.data.Id) {
|
|
@@ -284,16 +373,13 @@ class PackageVersion {
|
|
|
284
373
|
}).catch((err) => {
|
|
285
374
|
// TODO
|
|
286
375
|
// until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
|
|
287
|
-
throw (0, utils_1.applyErrorAction)(err);
|
|
376
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
288
377
|
});
|
|
289
378
|
return results[0];
|
|
290
379
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
uninstall() {
|
|
295
|
-
return Promise.resolve(undefined);
|
|
296
|
-
}
|
|
380
|
+
/**
|
|
381
|
+
* Promotes this PackageVersion to released state.
|
|
382
|
+
*/
|
|
297
383
|
async promote() {
|
|
298
384
|
const id = await this.getId();
|
|
299
385
|
return this.options.connection.tooling.update('Package2Version', { IsReleased: true, Id: id });
|
|
@@ -318,6 +404,27 @@ class PackageVersion {
|
|
|
318
404
|
result.id = await this.getSubscriberId();
|
|
319
405
|
return result;
|
|
320
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Creates a new package version.
|
|
409
|
+
*
|
|
410
|
+
* @param options
|
|
411
|
+
* @param polling frequency and timeout Durations to be used in polling
|
|
412
|
+
*/
|
|
413
|
+
async create(options, polling = {
|
|
414
|
+
frequency: kit_1.Duration.seconds(0),
|
|
415
|
+
timeout: kit_1.Duration.seconds(0),
|
|
416
|
+
}) {
|
|
417
|
+
const pvc = new packageVersionCreate_1.PackageVersionCreate({ ...options, ...this.options });
|
|
418
|
+
const createResult = await pvc.createPackageVersion();
|
|
419
|
+
if (polling.timeout?.milliseconds > 0) {
|
|
420
|
+
return await PackageVersion.waitForCreateVersion(createResult.Id, this.project, this.connection, polling).catch((err) => {
|
|
421
|
+
// TODO
|
|
422
|
+
// until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
|
|
423
|
+
throw (0, utils_1.applyErrorAction)((0, utils_1.massageErrorMessage)(err));
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
return createResult;
|
|
427
|
+
}
|
|
321
428
|
async updateDeprecation(isDeprecated) {
|
|
322
429
|
const id = await this.getId();
|
|
323
430
|
// setup the request
|
|
@@ -345,6 +452,9 @@ class PackageVersion {
|
|
|
345
452
|
await this.project.getSfProjectJson().write();
|
|
346
453
|
}
|
|
347
454
|
}
|
|
455
|
+
resolveId() {
|
|
456
|
+
return (0, utils_1.getPackageIdFromAlias)(this.options.idOrAlias, this.project);
|
|
457
|
+
}
|
|
348
458
|
}
|
|
349
459
|
exports.PackageVersion = PackageVersion;
|
|
350
460
|
//# sourceMappingURL=packageVersion.js.map
|
|
@@ -5,8 +5,8 @@ export declare class PackageVersionCreate {
|
|
|
5
5
|
private readonly project;
|
|
6
6
|
private readonly connection;
|
|
7
7
|
private packageObject;
|
|
8
|
-
private packageType;
|
|
9
8
|
private packageId;
|
|
9
|
+
private pkg;
|
|
10
10
|
private readonly logger;
|
|
11
11
|
constructor(options: PackageVersionCreateOptions);
|
|
12
12
|
createPackageVersion(): Promise<Partial<PackageVersionCreateRequestResult>>;
|
|
@@ -35,6 +35,7 @@ export declare class PackageVersionCreate {
|
|
|
35
35
|
private resolveApexTestPermissions;
|
|
36
36
|
private resolveUnpackagedMetadata;
|
|
37
37
|
private packageVersionCreate;
|
|
38
|
+
private getPackageType;
|
|
38
39
|
private resolveUserLicenses;
|
|
39
40
|
private validateOptionsForPackageType;
|
|
40
41
|
/**
|
|
@@ -47,7 +48,6 @@ export declare class PackageVersionCreate {
|
|
|
47
48
|
private setPackageDescriptorJsonValues;
|
|
48
49
|
private validateVersionNumber;
|
|
49
50
|
private validatePatchVersion;
|
|
50
|
-
private massageErrorMessage;
|
|
51
51
|
private getAncestorId;
|
|
52
52
|
private validateAncestorId;
|
|
53
53
|
private getAncestorIdHighestRelease;
|
|
@@ -21,6 +21,7 @@ const interfaces_1 = require("../interfaces");
|
|
|
21
21
|
const utils_2 = require("../utils");
|
|
22
22
|
const packageProfileApi_1 = require("./packageProfileApi");
|
|
23
23
|
const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
|
|
24
|
+
const package_1 = require("./package");
|
|
24
25
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
25
26
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version_create');
|
|
26
27
|
const DESCRIPTOR_FILE = 'package2-descriptor.json';
|
|
@@ -36,7 +37,7 @@ class PackageVersionCreate {
|
|
|
36
37
|
return this.packageVersionCreate();
|
|
37
38
|
}
|
|
38
39
|
catch (err) {
|
|
39
|
-
throw pkgUtils.applyErrorAction(
|
|
40
|
+
throw pkgUtils.applyErrorAction(pkgUtils.massageErrorMessage(err));
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
// convert source to mdapi format and copy to tmp dir packaging up
|
|
@@ -68,7 +69,6 @@ class PackageVersionCreate {
|
|
|
68
69
|
fs.rmdirSync(convertResult.packagePath, { recursive: true });
|
|
69
70
|
}
|
|
70
71
|
convertResult.packagePath = outputDirectory;
|
|
71
|
-
return convertResult;
|
|
72
72
|
}
|
|
73
73
|
return convertResult;
|
|
74
74
|
}
|
|
@@ -446,7 +446,7 @@ class PackageVersionCreate {
|
|
|
446
446
|
this.packageObject = this.project.findPackage((pkg) => pkg.package === packageName || pkg.name === packageName);
|
|
447
447
|
}
|
|
448
448
|
else {
|
|
449
|
-
//
|
|
449
|
+
// We'll either have a package ID or alias, or a directory path
|
|
450
450
|
this.packageObject = this.project.getPackageFromPath(this.options.path);
|
|
451
451
|
packageName = this.packageObject?.package;
|
|
452
452
|
if (!packageName)
|
|
@@ -463,7 +463,17 @@ class PackageVersionCreate {
|
|
|
463
463
|
// At this point, the packageIdFromAlias should have been resolved to an Id. Now, we
|
|
464
464
|
// need to validate that the Id is correct.
|
|
465
465
|
pkgUtils.validateId(pkgUtils.BY_LABEL.PACKAGE_ID, this.packageId);
|
|
466
|
-
|
|
466
|
+
try {
|
|
467
|
+
await this.validateOptionsForPackageType();
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
const err = error;
|
|
471
|
+
if (err.name === 'NOT_FOUND') {
|
|
472
|
+
// this means the 0Ho package was not found in the org. throw a better error.
|
|
473
|
+
throw messages.createError('errorNoIdInHub', [this.packageId]);
|
|
474
|
+
}
|
|
475
|
+
throw err;
|
|
476
|
+
}
|
|
467
477
|
const request = await this.createPackageVersionCreateRequestFromOptions();
|
|
468
478
|
const createResult = await this.connection.tooling.create('Package2VersionCreateRequest', request);
|
|
469
479
|
if (!createResult.success) {
|
|
@@ -475,6 +485,17 @@ class PackageVersionCreate {
|
|
|
475
485
|
}
|
|
476
486
|
return (await (0, packageVersionCreateRequest_1.byId)(createResult.id, this.connection))[0];
|
|
477
487
|
}
|
|
488
|
+
async getPackageType() {
|
|
489
|
+
// this.packageId should be an 0Ho package Id at this point
|
|
490
|
+
if (!this.pkg) {
|
|
491
|
+
this.pkg = new package_1.Package({
|
|
492
|
+
packageAliasOrId: this.packageId,
|
|
493
|
+
project: this.project,
|
|
494
|
+
connection: this.connection,
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
return this.pkg.getType();
|
|
498
|
+
}
|
|
478
499
|
async resolveUserLicenses(includeUserLicenses) {
|
|
479
500
|
const shouldGenerateProfileInformation = this.logger.shouldLog(core_1.LoggerLevel.INFO) || this.logger.shouldLog(core_1.LoggerLevel.DEBUG);
|
|
480
501
|
return await packageProfileApi_1.PackageProfileApi.create({
|
|
@@ -484,8 +505,7 @@ class PackageVersionCreate {
|
|
|
484
505
|
});
|
|
485
506
|
}
|
|
486
507
|
async validateOptionsForPackageType() {
|
|
487
|
-
|
|
488
|
-
if (this.packageType === 'Unlocked') {
|
|
508
|
+
if ((await this.getPackageType()) === 'Unlocked') {
|
|
489
509
|
// Don't allow scripts in unlocked packages
|
|
490
510
|
if (this.options.postinstallscript || this.options.uninstallscript) {
|
|
491
511
|
throw messages.createError('errorScriptsNotApplicableToUnlockedPackage');
|
|
@@ -583,30 +603,12 @@ class PackageVersionCreate {
|
|
|
583
603
|
}
|
|
584
604
|
}
|
|
585
605
|
}
|
|
586
|
-
massageErrorMessage(err) {
|
|
587
|
-
if (err.name === 'INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST') {
|
|
588
|
-
err['message'] = messages.getMessage('invalidPackageTypeMessage');
|
|
589
|
-
}
|
|
590
|
-
if (err.name === 'MALFORMED_ID' &&
|
|
591
|
-
(err.message.includes('Version ID') || err.message.includes('Version Definition ID'))) {
|
|
592
|
-
err['message'] = messages.getMessage('malformedPackageVersionIdMessage');
|
|
593
|
-
}
|
|
594
|
-
if (err.name === 'MALFORMED_ID' && err.message.includes('Package2 ID')) {
|
|
595
|
-
err['message'] = messages.getMessage('malformedPackageIdMessage');
|
|
596
|
-
}
|
|
597
|
-
// remove references to Second Generation
|
|
598
|
-
if (err.message.includes('Second Generation ')) {
|
|
599
|
-
err['message'] = err.message.replace('Second Generation ', '');
|
|
600
|
-
}
|
|
601
|
-
return err;
|
|
602
|
-
}
|
|
603
606
|
// eslint-disable-next-line complexity
|
|
604
607
|
async getAncestorId(packageDescriptorJson, project, versionNumberString, skipAncestorCheck) {
|
|
605
608
|
// If an id property is present, use it. Otherwise, look up the package id from the package property.
|
|
606
609
|
const packageId = packageDescriptorJson.id ?? (0, utils_2.getPackageIdFromAlias)(packageDescriptorJson.package, project);
|
|
607
610
|
// No need to proceed if Unlocked
|
|
608
|
-
|
|
609
|
-
if (packageType === 'Unlocked') {
|
|
611
|
+
if ((await this.getPackageType()) === 'Unlocked') {
|
|
610
612
|
return '';
|
|
611
613
|
}
|
|
612
614
|
let ancestorId = '';
|