@salesforce/packaging 3.7.1 → 3.7.3
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/interfaces/packagingInterfacesAndType.d.ts +7 -5
- package/lib/package/packageConvert.js +11 -18
- package/lib/package/packageCreate.d.ts +3 -2
- package/lib/package/packageCreate.js +20 -27
- package/lib/package/packageDelete.js +1 -4
- package/lib/package/packageVersion.d.ts +1 -1
- package/lib/package/packageVersionCreate.js +10 -5
- package/lib/package/packageVersionRetrieve.js +9 -17
- package/lib/package1/package1Version.d.ts +1 -2
- package/lib/package1/package1Version.js +26 -26
- package/lib/utils/packageUtils.d.ts +1 -10
- package/lib/utils/packageUtils.js +5 -17
- package/messages/subscriber_package_version.md +1 -1
- package/package.json +6 -7
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Duration } from '@salesforce/kit';
|
|
2
|
-
import { Connection
|
|
2
|
+
import { Connection } from '@salesforce/core';
|
|
3
|
+
import { NamedPackagingDir, SfProject } from '@salesforce/core/project';
|
|
3
4
|
import type { SaveResult } from '@jsforce/jsforce-node';
|
|
4
5
|
import { Attributes } from 'graphology-types';
|
|
5
6
|
import { Optional } from '@salesforce/ts-types';
|
|
@@ -121,7 +122,7 @@ export type PackageCreateOptions = {
|
|
|
121
122
|
errorNotificationUsername: string;
|
|
122
123
|
path: string;
|
|
123
124
|
};
|
|
124
|
-
export type PackageDescriptorJson = Partial<
|
|
125
|
+
export type PackageDescriptorJson = Partial<NamedPackagingDir> & Partial<{
|
|
125
126
|
id: string;
|
|
126
127
|
features: string[];
|
|
127
128
|
orgPreferences: string[];
|
|
@@ -238,11 +239,12 @@ export type SubscriberPackageVersionOptions = {
|
|
|
238
239
|
password: Optional<string>;
|
|
239
240
|
};
|
|
240
241
|
export type ConvertPackageOptions = {
|
|
241
|
-
installationKey
|
|
242
|
-
definitionfile
|
|
242
|
+
installationKey?: string;
|
|
243
|
+
definitionfile?: string;
|
|
244
|
+
/** @deprecated stop using it*/
|
|
243
245
|
installationKeyBypass: boolean;
|
|
244
246
|
wait: Duration;
|
|
245
|
-
buildInstance
|
|
247
|
+
buildInstance?: string;
|
|
246
248
|
frequency?: Duration;
|
|
247
249
|
seedMetadata?: string;
|
|
248
250
|
};
|
|
@@ -47,13 +47,7 @@ const packageVersionCreate_1 = require("./packageVersionCreate");
|
|
|
47
47
|
var Package2VersionStatus = interfaces_1.PackagingSObjects.Package2VersionStatus;
|
|
48
48
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
49
49
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package_version_create');
|
|
50
|
-
|
|
51
|
-
const getLogger = () => {
|
|
52
|
-
if (!logger) {
|
|
53
|
-
logger = core_1.Logger.childFromRoot('packageConvert');
|
|
54
|
-
}
|
|
55
|
-
return logger;
|
|
56
|
-
};
|
|
50
|
+
const POLL_INTERVAL_SECONDS = 30;
|
|
57
51
|
async function findOrCreatePackage2(seedPackage, connection, project) {
|
|
58
52
|
const query = `SELECT Id, Name FROM Package2 WHERE ConvertedFromPackageId = '${seedPackage}'`;
|
|
59
53
|
const queryResult = (await connection.tooling.query(query)).records;
|
|
@@ -97,11 +91,8 @@ async function findOrCreatePackage2(seedPackage, connection, project) {
|
|
|
97
91
|
}
|
|
98
92
|
exports.findOrCreatePackage2 = findOrCreatePackage2;
|
|
99
93
|
async function convertPackage(pkg, connection, options, project) {
|
|
100
|
-
|
|
94
|
+
const maxRetries = options.wait ? (60 / POLL_INTERVAL_SECONDS) * options.wait.minutes : 0;
|
|
101
95
|
const branch = 'main';
|
|
102
|
-
if (options.wait) {
|
|
103
|
-
maxRetries = (60 / pkgUtils.POLL_INTERVAL_SECONDS) * options.wait.minutes;
|
|
104
|
-
}
|
|
105
96
|
const packageId = await findOrCreatePackage2(pkg, connection, project);
|
|
106
97
|
const apiVersion = project?.getSfProjectJson()?.get('sourceApiVersion');
|
|
107
98
|
const request = await createPackageVersionCreateRequest({
|
|
@@ -109,7 +100,10 @@ async function convertPackage(pkg, connection, options, project) {
|
|
|
109
100
|
definitionfile: options.definitionfile,
|
|
110
101
|
buildinstance: options.buildInstance,
|
|
111
102
|
seedmetadata: options.seedMetadata,
|
|
112
|
-
}, packageId,
|
|
103
|
+
}, packageId,
|
|
104
|
+
// TODO: createPackageVersionCreateRequest requires apiVersion exist.
|
|
105
|
+
// UT fail if we validate that it exists (there might not even be a project)
|
|
106
|
+
apiVersion);
|
|
113
107
|
// TODO: a lot of this is duplicated from PC, PVC, and PVCR.
|
|
114
108
|
const createResult = await connection.tooling.create('Package2VersionCreateRequest', request);
|
|
115
109
|
if (!createResult.success) {
|
|
@@ -119,7 +113,7 @@ async function convertPackage(pkg, connection, options, project) {
|
|
|
119
113
|
}
|
|
120
114
|
let results;
|
|
121
115
|
if (options.wait) {
|
|
122
|
-
results = await pollForStatusWithInterval(createResult.id, maxRetries, packageId, branch, project, connection, options.frequency ?? kit_1.Duration.seconds(
|
|
116
|
+
results = await pollForStatusWithInterval(createResult.id, maxRetries, packageId, branch, project, connection, options.frequency ?? kit_1.Duration.seconds(POLL_INTERVAL_SECONDS));
|
|
123
117
|
}
|
|
124
118
|
else {
|
|
125
119
|
results = await (0, packageVersionCreateRequest_1.byId)(packageId, connection);
|
|
@@ -171,7 +165,7 @@ async function createPackageVersionCreateRequest(context, packageId, apiVersion)
|
|
|
171
165
|
const hasSeedMetadata = await new packageVersionCreate_1.MetadataResolver().resolveMetadata(context.seedmetadata, seedMetadataFolder, 'seedMDDirectoryDoesNotExist', apiVersion);
|
|
172
166
|
if (hasSeedMetadata) {
|
|
173
167
|
// Zip the seedMetadataFolder folder and put the zip in {packageVersBlobDirectory}/{seedMetadataZipFile}
|
|
174
|
-
|
|
168
|
+
core_1.Logger.childFromRoot('packageConvert:pollForStatusWithInterval').debug(`Including metadata found in '${context.seedmetadata}'.`);
|
|
175
169
|
await pkgUtils.zipDir(seedMetadataFolder, seedMetadataZipFile);
|
|
176
170
|
}
|
|
177
171
|
await settingsGenerator.createDeploy();
|
|
@@ -201,6 +195,7 @@ async function createRequestObject(packageId, options, packageVersTmpRoot, packa
|
|
|
201
195
|
return requestObject;
|
|
202
196
|
}
|
|
203
197
|
async function pollForStatusWithInterval(id, retries, packageId, branch, project, connection, interval) {
|
|
198
|
+
const logger = core_1.Logger.childFromRoot('packageConvert:pollForStatusWithInterval');
|
|
204
199
|
let remainingRetries = retries;
|
|
205
200
|
const pollingClient = await core_1.PollingClient.create({
|
|
206
201
|
poll: async () => {
|
|
@@ -259,7 +254,7 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, project
|
|
|
259
254
|
message: '',
|
|
260
255
|
timeRemaining: remainingTime,
|
|
261
256
|
});
|
|
262
|
-
|
|
257
|
+
logger.info(`Request in progress. Sleeping ${interval.seconds} seconds. Will wait a total of ${remainingTime.seconds} more seconds before timing out. Current Status='${(0, kit_1.camelCaseToTitleCase)(results[0]?.Status)}'`);
|
|
263
258
|
remainingRetries--;
|
|
264
259
|
return { completed: false, payload: results[0] };
|
|
265
260
|
}
|
|
@@ -282,7 +277,5 @@ async function addPackageAlias(project, packageName, packageId) {
|
|
|
282
277
|
* @param statuses array of statuses to look for
|
|
283
278
|
* @returns {boolean} if one of the values in status is found.
|
|
284
279
|
*/
|
|
285
|
-
|
|
286
|
-
return !results?.length ? false : statuses.some((status) => results[0].Status === status);
|
|
287
|
-
}
|
|
280
|
+
const isStatusEqualTo = (results, statuses = []) => (!results?.length ? false : statuses.some((status) => results[0].Status === status));
|
|
288
281
|
//# sourceMappingURL=packageConvert.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Connection,
|
|
1
|
+
import { Connection, SfProject } from '@salesforce/core';
|
|
2
|
+
import { PackagePackageDir } from '@salesforce/schemas';
|
|
2
3
|
import { PackageCreateOptions, PackagingSObjects } from '../interfaces';
|
|
3
4
|
type Package2Request = Pick<PackagingSObjects.Package2, 'Name' | 'Description' | 'NamespacePrefix' | 'ContainerOptions' | 'IsOrgDependent' | 'PackageErrorUsername'>;
|
|
4
5
|
export declare function createPackageRequestFromContext(project: SfProject, options: PackageCreateOptions): Package2Request;
|
|
@@ -9,7 +10,7 @@ export declare function createPackageRequestFromContext(project: SfProject, opti
|
|
|
9
10
|
* @param options - package create options
|
|
10
11
|
* @private
|
|
11
12
|
*/
|
|
12
|
-
export declare function createPackageDirEntry(project: SfProject, options: PackageCreateOptions):
|
|
13
|
+
export declare function createPackageDirEntry(project: SfProject, options: PackageCreateOptions): PackagePackageDir;
|
|
13
14
|
export declare function createPackage(connection: Connection, project: SfProject, options: PackageCreateOptions): Promise<{
|
|
14
15
|
Id: string;
|
|
15
16
|
}>;
|
|
@@ -55,34 +55,22 @@ exports.createPackageRequestFromContext = createPackageRequestFromContext;
|
|
|
55
55
|
*/
|
|
56
56
|
function createPackageDirEntry(project, options) {
|
|
57
57
|
const packageDirs = project.getSfProjectJson().getContents().packageDirectories ?? [];
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
.
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
if (packageDirs.length === 0) {
|
|
70
|
-
packageDir.default = true;
|
|
71
|
-
}
|
|
72
|
-
else if (isNew) {
|
|
73
|
-
packageDir.default = !packageDirs.find((pd) => pd.default);
|
|
74
|
-
}
|
|
75
|
-
packageDir.package = (0, packageUtils_1.replaceIfEmpty)(packageDir.package, options.name);
|
|
76
|
-
packageDir.versionName = (0, packageUtils_1.replaceIfEmpty)(packageDir.versionName, pkgUtils.DEFAULT_PACKAGE_DIR.versionName);
|
|
77
|
-
packageDir.versionNumber = (0, packageUtils_1.replaceIfEmpty)(packageDir.versionNumber, pkgUtils.DEFAULT_PACKAGE_DIR.versionNumber);
|
|
78
|
-
packageDir.versionDescription = (0, packageUtils_1.replaceIfEmpty)(packageDir.versionDescription, options.description);
|
|
79
|
-
return packageDir;
|
|
58
|
+
return {
|
|
59
|
+
package: options.name,
|
|
60
|
+
versionName: 'ver 0.1',
|
|
61
|
+
versionNumber: '0.1.0.NEXT',
|
|
62
|
+
...(packageDirs.filter((pd) => pd.path === options.path).find((pd) => !('id' in pd)) ?? {
|
|
63
|
+
// no match - create a new one
|
|
64
|
+
path: options.path,
|
|
65
|
+
default: packageDirs.length === 0 ? true : !packageDirs.some((pd) => pd.default === true),
|
|
66
|
+
}),
|
|
67
|
+
versionDescription: options.description,
|
|
68
|
+
};
|
|
80
69
|
}
|
|
81
70
|
exports.createPackageDirEntry = createPackageDirEntry;
|
|
82
71
|
async function createPackage(connection, project, options) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const request = createPackageRequestFromContext(project, options);
|
|
72
|
+
const cleanOptions = sanitizePackageCreateOptions(options);
|
|
73
|
+
const request = createPackageRequestFromContext(project, cleanOptions);
|
|
86
74
|
const createResult = await connection.tooling
|
|
87
75
|
.sobject('Package2')
|
|
88
76
|
.create(request)
|
|
@@ -94,12 +82,17 @@ async function createPackage(connection, project, options) {
|
|
|
94
82
|
throw pkgUtils.combineSaveErrors('Package2', 'create', createResult.errors);
|
|
95
83
|
}
|
|
96
84
|
if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE')) {
|
|
97
|
-
const packageDirectory = createPackageDirEntry(project,
|
|
85
|
+
const packageDirectory = createPackageDirEntry(project, cleanOptions);
|
|
98
86
|
project.getSfProjectJson().addPackageDirectory(packageDirectory);
|
|
99
|
-
project.getSfProjectJson().addPackageAlias(
|
|
87
|
+
project.getSfProjectJson().addPackageAlias(cleanOptions.name, createResult.id);
|
|
100
88
|
await project.getSfProjectJson().write();
|
|
101
89
|
}
|
|
102
90
|
return { Id: createResult.id };
|
|
103
91
|
}
|
|
104
92
|
exports.createPackage = createPackage;
|
|
93
|
+
/** strip trailing slash from path param */
|
|
94
|
+
const sanitizePackageCreateOptions = (options) => ({
|
|
95
|
+
...options,
|
|
96
|
+
path: options.path.replace(/\/$/, ''),
|
|
97
|
+
});
|
|
105
98
|
//# sourceMappingURL=packageCreate.js.map
|
|
@@ -11,10 +11,7 @@ const packageUtils_1 = require("../utils/packageUtils");
|
|
|
11
11
|
async function deletePackage(idOrAlias, project, connection, undelete) {
|
|
12
12
|
const packageId = project.getPackageIdFromAlias(idOrAlias) ?? idOrAlias;
|
|
13
13
|
(0, packageUtils_1.validateId)(packageUtils_1.BY_LABEL.PACKAGE_ID, packageId);
|
|
14
|
-
const request = {};
|
|
15
|
-
request.Id = packageId;
|
|
16
|
-
const isUndelete = undelete;
|
|
17
|
-
request.IsDeprecated = !isUndelete;
|
|
14
|
+
const request = { Id: packageId, IsDeprecated: !undelete };
|
|
18
15
|
const updateResult = await connection.tooling.update('Package2', request).catch((err) => {
|
|
19
16
|
if (err instanceof Error) {
|
|
20
17
|
throw (0, packageUtils_1.applyErrorAction)((0, packageUtils_1.massageErrorMessage)(err));
|
|
@@ -38,6 +38,7 @@ const node_os_1 = __importDefault(require("node:os"));
|
|
|
38
38
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
39
39
|
const core_1 = require("@salesforce/core");
|
|
40
40
|
const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
|
|
41
|
+
const project_1 = require("@salesforce/core/project");
|
|
41
42
|
const kit_1 = require("@salesforce/kit");
|
|
42
43
|
const fast_xml_parser_1 = require("fast-xml-parser");
|
|
43
44
|
const ts_types_1 = require("@salesforce/ts-types");
|
|
@@ -276,7 +277,7 @@ class PackageVersionCreate {
|
|
|
276
277
|
const mdOptions = {
|
|
277
278
|
deploydir: packageVersMetadataFolder,
|
|
278
279
|
sourceDir: sourceBaseDir,
|
|
279
|
-
sourceApiVersion: this.project?.getSfProjectJson()?.get('sourceApiVersion')
|
|
280
|
+
sourceApiVersion: this.project?.getSfProjectJson()?.get('sourceApiVersion'),
|
|
280
281
|
};
|
|
281
282
|
await node_fs_1.default.promises.mkdir(packageVersBlobDirectory, { recursive: true });
|
|
282
283
|
const settingsGenerator = new core_1.ScratchOrgSettingsGenerator({ asDirectory: true });
|
|
@@ -401,6 +402,7 @@ class PackageVersionCreate {
|
|
|
401
402
|
// don't package the profiles from any un-packagedMetadata dir in the project
|
|
402
403
|
profileExcludeDirs = this.project
|
|
403
404
|
.getPackageDirectories()
|
|
405
|
+
.filter(project_1.isNamedPackagingDirectory)
|
|
404
406
|
.map((packageDir) => packageDir.unpackagedMetadata?.path)
|
|
405
407
|
.filter(ts_types_1.isString);
|
|
406
408
|
let debugMsg = 'Searching for profiles to include from all packageDirectories';
|
|
@@ -504,7 +506,8 @@ class PackageVersionCreate {
|
|
|
504
506
|
if (!packageName)
|
|
505
507
|
throw messages.createError('errorMissingPackage', [this.options.packageId]);
|
|
506
508
|
}
|
|
507
|
-
packageObject = this.project.findPackage((namedPackageDir) =>
|
|
509
|
+
packageObject = this.project.findPackage((namedPackageDir) => (0, project_1.isPackagingDirectory)(namedPackageDir) &&
|
|
510
|
+
(namedPackageDir.package === packageName || namedPackageDir.name === packageName));
|
|
508
511
|
}
|
|
509
512
|
else {
|
|
510
513
|
// We'll either have a package ID or alias, or a directory path
|
|
@@ -512,9 +515,9 @@ class PackageVersionCreate {
|
|
|
512
515
|
throw messages.createError('errorMissingPackagePath', [JSON.stringify(this.options)]);
|
|
513
516
|
}
|
|
514
517
|
packageObject = this.project.getPackageFromPath(this.options.path);
|
|
515
|
-
|
|
516
|
-
if (!packageName)
|
|
518
|
+
if (!packageObject || !(0, project_1.isPackagingDirectory)(packageObject))
|
|
517
519
|
throw messages.createError('errorCouldNotFindPackageUsingPath', [this.options.path]);
|
|
520
|
+
packageName = packageObject?.package;
|
|
518
521
|
}
|
|
519
522
|
if (!packageObject) {
|
|
520
523
|
throw messages.createError('errorCouldNotFindPackageDir', [
|
|
@@ -564,7 +567,9 @@ class PackageVersionCreate {
|
|
|
564
567
|
}
|
|
565
568
|
async getPackageDirFromId(pkg) {
|
|
566
569
|
if (pkg.startsWith('0Ho')) {
|
|
567
|
-
const dir = (await this.project.getSfProjectJson().getPackageDirectories())
|
|
570
|
+
const dir = (await this.project.getSfProjectJson().getPackageDirectories())
|
|
571
|
+
.filter(project_1.isPackagingDirectory)
|
|
572
|
+
.filter((p) => p.package === pkg);
|
|
568
573
|
if (dir.length === 1) {
|
|
569
574
|
return dir[0];
|
|
570
575
|
}
|
|
@@ -21,13 +21,6 @@ const package_1 = require("./package");
|
|
|
21
21
|
const packageVersion_1 = require("./packageVersion");
|
|
22
22
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
23
23
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package');
|
|
24
|
-
let logger;
|
|
25
|
-
const getLogger = () => {
|
|
26
|
-
if (!logger) {
|
|
27
|
-
logger = core_1.Logger.childFromRoot('packageVersionRetrieve');
|
|
28
|
-
}
|
|
29
|
-
return logger;
|
|
30
|
-
};
|
|
31
24
|
/**
|
|
32
25
|
* Download the metadata files for a previously published package version, convert them to source format, and put them into a new project folder within the sfdx project.
|
|
33
26
|
*
|
|
@@ -96,8 +89,9 @@ exports.retrievePackageVersionMetadata = retrievePackageVersionMetadata;
|
|
|
96
89
|
*
|
|
97
90
|
*/
|
|
98
91
|
async function attemptToUpdateProjectJson(project, connection, packageId, subscriberPackageVersionId, dependencyIds, destinationFolder) {
|
|
92
|
+
const logger = core_1.Logger.childFromRoot('packageVersionRetrieve');
|
|
99
93
|
if (kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE')) {
|
|
100
|
-
|
|
94
|
+
logger.info('Skipping sfdx-project.json updates because SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE is set');
|
|
101
95
|
return;
|
|
102
96
|
}
|
|
103
97
|
try {
|
|
@@ -105,15 +99,14 @@ async function attemptToUpdateProjectJson(project, connection, packageId, subscr
|
|
|
105
99
|
.sobject('MetadataPackage')
|
|
106
100
|
.retrieve(packageId));
|
|
107
101
|
if (packageInfo.PackageCategory !== 'Package2') {
|
|
108
|
-
|
|
102
|
+
logger.info(`Skipping sfdx-project.json updates because ${packageId} is not a 2GP package. It has a PackageCategory of '${packageInfo.PackageCategory}'`);
|
|
109
103
|
return;
|
|
110
104
|
}
|
|
111
105
|
const queryOptions = {
|
|
112
106
|
whereClause: `WHERE SubscriberPackageVersionId = '${subscriberPackageVersionId}'`,
|
|
113
107
|
};
|
|
114
|
-
const
|
|
115
|
-
if (
|
|
116
|
-
const version = versions[0];
|
|
108
|
+
const [version] = await packageVersion_1.PackageVersion.queryPackage2Version(connection, queryOptions);
|
|
109
|
+
if (version) {
|
|
117
110
|
const pkg = new package_1.Package({
|
|
118
111
|
packageAliasOrId: version.Package2Id,
|
|
119
112
|
project,
|
|
@@ -130,13 +123,12 @@ async function attemptToUpdateProjectJson(project, connection, packageId, subscr
|
|
|
130
123
|
packageType: pkgData.ContainerOptions,
|
|
131
124
|
errorNotificationUsername: pkgData.PackageErrorUsername,
|
|
132
125
|
});
|
|
133
|
-
const dependencies = dependencyIds.map((dep) => ({ package: dep }));
|
|
134
126
|
const namedDir = {
|
|
135
127
|
...dirEntry,
|
|
136
128
|
versionNumber: '<set version number>',
|
|
137
129
|
versionName: '<set version name>',
|
|
138
130
|
ancestorVersion: '<set ancestor version>',
|
|
139
|
-
dependencies,
|
|
131
|
+
dependencies: dependencyIds.map((dep) => ({ package: dep })),
|
|
140
132
|
};
|
|
141
133
|
project.getSfProjectJson().addPackageDirectory(namedDir);
|
|
142
134
|
const packageVersionVersionString = `${version.MajorVersion}.${version.MinorVersion}.${version.PatchVersion}-${version.BuildNumber}`;
|
|
@@ -148,16 +140,16 @@ async function attemptToUpdateProjectJson(project, connection, packageId, subscr
|
|
|
148
140
|
await project.getSfProjectJson().write();
|
|
149
141
|
}
|
|
150
142
|
else {
|
|
151
|
-
|
|
143
|
+
logger.warn(`Failed to update sfdx-project.json. Could not find package for ${version.Package2Id}. This should never happen.`);
|
|
152
144
|
}
|
|
153
145
|
}
|
|
154
146
|
else {
|
|
155
|
-
|
|
147
|
+
logger.info(`Could not find Package2Version record for ${subscriberPackageVersionId}. No updates to sfdx-project.json will be made.`);
|
|
156
148
|
}
|
|
157
149
|
}
|
|
158
150
|
catch (e) {
|
|
159
151
|
const msg = e instanceof Error ? e.message : e;
|
|
160
|
-
|
|
152
|
+
logger.error(`Encountered error trying to update sfdx-project.json after retrieving package version metadata: ${msg}`);
|
|
161
153
|
}
|
|
162
154
|
}
|
|
163
155
|
//# sourceMappingURL=packageVersionRetrieve.js.map
|
|
@@ -11,7 +11,7 @@ import MetadataPackageVersion = PackagingSObjects.MetadataPackageVersion;
|
|
|
11
11
|
*
|
|
12
12
|
* `const pkgList = await Package1Version.list(connection);`
|
|
13
13
|
*
|
|
14
|
-
* Create a new 1GP package
|
|
14
|
+
* Create a new 1GP package version in the org:
|
|
15
15
|
*
|
|
16
16
|
* `const myPkg = await Package1Version.create(connection, options, pollingOptions);`
|
|
17
17
|
*
|
|
@@ -54,7 +54,6 @@ export declare class Package1Version implements IPackageVersion1GP {
|
|
|
54
54
|
* @returns Array of package version results
|
|
55
55
|
*/
|
|
56
56
|
static list(connection: Connection, id?: string): Promise<MetadataPackageVersion[]>;
|
|
57
|
-
private static packageUploadPolling;
|
|
58
57
|
/**
|
|
59
58
|
* Queries the org for the package version with the given ID
|
|
60
59
|
*/
|
|
@@ -25,7 +25,7 @@ const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package1
|
|
|
25
25
|
*
|
|
26
26
|
* `const pkgList = await Package1Version.list(connection);`
|
|
27
27
|
*
|
|
28
|
-
* Create a new 1GP package
|
|
28
|
+
* Create a new 1GP package version in the org:
|
|
29
29
|
*
|
|
30
30
|
* `const myPkg = await Package1Version.create(connection, options, pollingOptions);`
|
|
31
31
|
*
|
|
@@ -64,7 +64,7 @@ class Package1Version {
|
|
|
64
64
|
if (pollingOptions.timeout.seconds) {
|
|
65
65
|
const timeout = pollingOptions.timeout.seconds;
|
|
66
66
|
const pollingClient = await core_1.PollingClient.create({
|
|
67
|
-
poll: () =>
|
|
67
|
+
poll: () => packageUploadPolling(connection, createRequest.id, timeout, pollingOptions.frequency.seconds),
|
|
68
68
|
...pollingOptions,
|
|
69
69
|
});
|
|
70
70
|
return pollingClient.subscribe();
|
|
@@ -113,30 +113,6 @@ class Package1Version {
|
|
|
113
113
|
tooling: true,
|
|
114
114
|
}))?.records;
|
|
115
115
|
}
|
|
116
|
-
static async packageUploadPolling(connection, id, timeout, frequency) {
|
|
117
|
-
const pollingResult = await connection.tooling.sobject('PackageUploadRequest').retrieve(id);
|
|
118
|
-
switch (pollingResult.Status) {
|
|
119
|
-
case 'SUCCESS':
|
|
120
|
-
return { completed: true, payload: pollingResult };
|
|
121
|
-
case 'IN_PROGRESS':
|
|
122
|
-
case 'QUEUED':
|
|
123
|
-
timeout -= frequency;
|
|
124
|
-
await core_1.Lifecycle.getInstance().emit(interfaces_1.Package1VersionEvents.create.progress, { timeout, pollingResult });
|
|
125
|
-
return { completed: false, payload: pollingResult };
|
|
126
|
-
default: {
|
|
127
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
128
|
-
const errors = pollingResult?.Errors?.errors;
|
|
129
|
-
if (errors?.length > 0) {
|
|
130
|
-
throw messages.createError('package1VersionCreateCommandUploadFailure', [
|
|
131
|
-
errors.map((e) => e.message).join(node_os_1.default.EOL),
|
|
132
|
-
]);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
throw messages.createError('package1VersionCreateCommandUploadFailureDefault');
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
116
|
/**
|
|
141
117
|
* Queries the org for the package version with the given ID
|
|
142
118
|
*/
|
|
@@ -146,4 +122,28 @@ class Package1Version {
|
|
|
146
122
|
}
|
|
147
123
|
}
|
|
148
124
|
exports.Package1Version = Package1Version;
|
|
125
|
+
const packageUploadPolling = async (connection, id, timeout, frequency) => {
|
|
126
|
+
const pollingResult = await connection.tooling.sobject('PackageUploadRequest').retrieve(id);
|
|
127
|
+
switch (pollingResult.Status) {
|
|
128
|
+
case 'SUCCESS':
|
|
129
|
+
return { completed: true, payload: pollingResult };
|
|
130
|
+
case 'IN_PROGRESS':
|
|
131
|
+
case 'QUEUED':
|
|
132
|
+
timeout -= frequency;
|
|
133
|
+
await core_1.Lifecycle.getInstance().emit(interfaces_1.Package1VersionEvents.create.progress, { timeout, pollingResult });
|
|
134
|
+
return { completed: false, payload: pollingResult };
|
|
135
|
+
default: {
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
137
|
+
const errors = pollingResult?.Errors?.errors;
|
|
138
|
+
if (errors?.length > 0) {
|
|
139
|
+
throw messages.createError('package1VersionCreateCommandUploadFailure', [
|
|
140
|
+
errors.map((e) => e.message).join(node_os_1.default.EOL),
|
|
141
|
+
]);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
throw messages.createError('package1VersionCreateCommandUploadFailureDefault');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
149
|
//# sourceMappingURL=package1Version.js.map
|
|
@@ -12,14 +12,6 @@ export type IdRegistry = {
|
|
|
12
12
|
[key: string]: IdRegistryValue;
|
|
13
13
|
};
|
|
14
14
|
export declare const INSTALL_URL_BASE: SfdcUrl;
|
|
15
|
-
export declare const POLL_INTERVAL_SECONDS = 30;
|
|
16
|
-
export declare const DEFAULT_PACKAGE_DIR: {
|
|
17
|
-
path: string;
|
|
18
|
-
package: string;
|
|
19
|
-
versionName: string;
|
|
20
|
-
versionNumber: string;
|
|
21
|
-
default: boolean;
|
|
22
|
-
};
|
|
23
15
|
export declare const BY_LABEL: IdRegistry;
|
|
24
16
|
/**
|
|
25
17
|
* A function to generate a unique id and return it in the context of a template, if supplied.
|
|
@@ -114,9 +106,8 @@ export declare function copyDir(src: string, dest: string): void;
|
|
|
114
106
|
* overridden from definition file based on case-insensitive matches.
|
|
115
107
|
*/
|
|
116
108
|
export declare function copyDescriptorProperties(packageDescriptorJson: PackageDescriptorJson, definitionFileJson: ScratchOrgInfo): PackageDescriptorJson;
|
|
117
|
-
export declare function replaceIfEmpty<T>(value: T, replacement: T): T;
|
|
118
109
|
/**
|
|
119
|
-
* Brand new SFDX projects contain a force-app directory tree
|
|
110
|
+
* Brand new SFDX projects contain a force-app directory tree containing empty folders
|
|
120
111
|
* and a few .eslintrc.json files. We still want to consider such a directory tree
|
|
121
112
|
* as 'empty' for the sake of operations like downloading package version metadata.
|
|
122
113
|
*
|
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.isPackageDirectoryEffectivelyEmpty = exports.
|
|
29
|
+
exports.isPackageDirectoryEffectivelyEmpty = exports.copyDescriptorProperties = exports.copyDir = exports.zipDir = exports.numberToDuration = exports.combineSaveErrors = exports.generatePackageAliasEntry = exports.getPackageVersionNumber = exports.queryWithInConditionChunking = exports.getPackageVersionStrings = exports.getContainerOptions = exports.escapeInstallationKey = exports.getPackageVersionId = exports.massageErrorMessage = exports.applyErrorAction = exports.validateIdNoThrow = exports.validateId = exports.uniqid = exports.BY_LABEL = exports.INSTALL_URL_BASE = exports.VERSION_NUMBER_SEP = void 0;
|
|
30
30
|
/*
|
|
31
31
|
* Copyright (c) 2022, salesforce.com, inc.
|
|
32
32
|
* All rights reserved.
|
|
@@ -69,14 +69,6 @@ const ID_REGISTRY = [
|
|
|
69
69
|
exports.INSTALL_URL_BASE = new core_1.SfdcUrl('https://login.salesforce.com/packaging/installPackage.apexp?p0=');
|
|
70
70
|
// https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_soslsoql.htm
|
|
71
71
|
const SOQL_WHERE_CLAUSE_MAX_LENGTH = 4000;
|
|
72
|
-
exports.POLL_INTERVAL_SECONDS = 30;
|
|
73
|
-
exports.DEFAULT_PACKAGE_DIR = {
|
|
74
|
-
path: '',
|
|
75
|
-
package: '',
|
|
76
|
-
versionName: 'ver 0.1',
|
|
77
|
-
versionNumber: '0.1.0.NEXT',
|
|
78
|
-
default: true,
|
|
79
|
-
};
|
|
80
72
|
exports.BY_LABEL = (() => Object.fromEntries(ID_REGISTRY.map((id) => [id.label.replace(/ /g, '_').toUpperCase(), { prefix: id.prefix, label: id.label }])))();
|
|
81
73
|
/**
|
|
82
74
|
* A function to generate a unique id and return it in the context of a template, if supplied.
|
|
@@ -216,7 +208,7 @@ exports.escapeInstallationKey = escapeInstallationKey;
|
|
|
216
208
|
*/
|
|
217
209
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
218
210
|
async function getContainerOptions(packageIds, connection) {
|
|
219
|
-
const ids = (0, kit_1.ensureArray)(packageIds).filter(
|
|
211
|
+
const ids = (0, kit_1.ensureArray)(packageIds).filter(ts_types_1.isString);
|
|
220
212
|
if (ids.length === 0) {
|
|
221
213
|
return new Map();
|
|
222
214
|
}
|
|
@@ -430,20 +422,16 @@ exports.copyDir = copyDir;
|
|
|
430
422
|
* overridden from definition file based on case-insensitive matches.
|
|
431
423
|
*/
|
|
432
424
|
function copyDescriptorProperties(packageDescriptorJson, definitionFileJson) {
|
|
433
|
-
const packageDescriptorJsonCopy =
|
|
434
|
-
const definitionFileJsonCopy =
|
|
425
|
+
const packageDescriptorJsonCopy = structuredClone(packageDescriptorJson);
|
|
426
|
+
const definitionFileJsonCopy = structuredClone(definitionFileJson);
|
|
435
427
|
return Object.assign({}, packageDescriptorJsonCopy, Object.fromEntries(['country', 'edition', 'language', 'features', 'orgPreferences', 'snapshot', 'release', 'sourceOrg'].map((prop) => {
|
|
436
428
|
const matchCase = Object.keys(definitionFileJsonCopy).find((key) => key.toLowerCase() === prop.toLowerCase());
|
|
437
429
|
return [[prop], matchCase ? definitionFileJsonCopy[matchCase] : undefined];
|
|
438
430
|
})));
|
|
439
431
|
}
|
|
440
432
|
exports.copyDescriptorProperties = copyDescriptorProperties;
|
|
441
|
-
function replaceIfEmpty(value, replacement) {
|
|
442
|
-
return !(0, kit_1.isEmpty)(value) ? value : replacement;
|
|
443
|
-
}
|
|
444
|
-
exports.replaceIfEmpty = replaceIfEmpty;
|
|
445
433
|
/**
|
|
446
|
-
* Brand new SFDX projects contain a force-app directory tree
|
|
434
|
+
* Brand new SFDX projects contain a force-app directory tree containing empty folders
|
|
447
435
|
* and a few .eslintrc.json files. We still want to consider such a directory tree
|
|
448
436
|
* as 'empty' for the sake of operations like downloading package version metadata.
|
|
449
437
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# errorInvalidIdNoRecordFound
|
|
2
2
|
|
|
3
|
-
The subscriber package version %s is invalid,
|
|
3
|
+
The subscriber package version %s is either invalid or not yet available on your instance of salesforce.com. First double-check the ID to ensure it's correct. If it is, check back after a while and retry the package install.
|
|
4
4
|
|
|
5
5
|
# errorInvalidAliasOrId
|
|
6
6
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/packaging",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.3",
|
|
4
4
|
"description": "Packaging library for the Salesforce packaging platform",
|
|
5
5
|
"main": "lib/exported",
|
|
6
6
|
"types": "lib/exported.d.ts",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@jsforce/jsforce-node": "^3.2.0",
|
|
45
|
-
"@salesforce/core": "
|
|
45
|
+
"@salesforce/core": "8.0.1",
|
|
46
46
|
"@salesforce/kit": "^3.1.6",
|
|
47
47
|
"@salesforce/schemas": "^1.9.0",
|
|
48
|
-
"@salesforce/source-deploy-retrieve": "^
|
|
48
|
+
"@salesforce/source-deploy-retrieve": "^12.0.1",
|
|
49
49
|
"@salesforce/ts-types": "^2.0.9",
|
|
50
50
|
"@salesforce/types": "^1.1.0",
|
|
51
51
|
"fast-xml-parser": "^4.4.0",
|
|
@@ -57,12 +57,11 @@
|
|
|
57
57
|
"object-treeify": "^2"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@salesforce/cli-plugins-testkit": "^5.3.
|
|
61
|
-
"@salesforce/dev-scripts": "^
|
|
62
|
-
"@salesforce/ts-sinon": "^1.4.19",
|
|
60
|
+
"@salesforce/cli-plugins-testkit": "^5.3.15",
|
|
61
|
+
"@salesforce/dev-scripts": "^10.2.0",
|
|
63
62
|
"@types/globby": "^9.1.0",
|
|
64
63
|
"@types/jszip": "^3.4.1",
|
|
65
|
-
"eslint-plugin-sf-plugin": "^1.18.
|
|
64
|
+
"eslint-plugin-sf-plugin": "^1.18.8",
|
|
66
65
|
"shelljs": "0.8.5",
|
|
67
66
|
"ts-node": "^10.9.2",
|
|
68
67
|
"typescript": "^5.4.5"
|