@salesforce/packaging 0.0.6 → 0.0.9
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 +18 -0
- package/lib/interfaces/packagingInterfacesAndType.d.ts +21 -8
- package/lib/interfaces/packagingSObjects.d.ts +11 -0
- package/lib/package/index.d.ts +1 -1
- package/lib/package/index.js +1 -1
- package/lib/package/packageConvert.d.ts +2 -2
- package/lib/package/packageConvert.js +8 -2
- package/lib/package/packageCreate.d.ts +1 -1
- package/lib/package/packageCreate.js +7 -8
- package/lib/package/{profileApi.d.ts → packageProfileApi.d.ts} +9 -5
- package/lib/package/{profileApi.js → packageProfileApi.js} +15 -12
- package/lib/package/packageVersion.d.ts +20 -3
- package/lib/package/packageVersion.js +49 -3
- package/lib/package/packageVersionCreate.d.ts +4 -6
- package/lib/package/packageVersionCreate.js +69 -94
- package/lib/package/packageVersionCreateRequest.d.ts +3 -3
- package/lib/package/packageVersionCreateRequest.js +7 -7
- package/lib/package/packageVersionList.js +1 -1
- package/lib/package1/index.d.ts +2 -0
- package/lib/package1/index.js +2 -0
- package/lib/package1/package1VersionCreateGet.d.ts +3 -0
- package/lib/package1/package1VersionCreateGet.js +16 -0
- package/lib/package1/packageDisplay.d.ts +9 -0
- package/lib/package1/packageDisplay.js +29 -0
- package/lib/utils/packageUtils.d.ts +10 -10
- package/lib/utils/packageUtils.js +39 -42
- package/lib/utils/srcDevUtils.js +23 -19
- package/lib/utils/versionNumber.js +6 -6
- package/messages/messages.md +32 -0
- package/package.json +8 -14
- package/lib/package/packageVersion2GP.d.ts +0 -17
- package/lib/package/packageVersion2GP.js +0 -46
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c)
|
|
3
|
+
* Copyright (c) 2022, salesforce.com, inc.
|
|
4
4
|
* All rights reserved.
|
|
5
5
|
* Licensed under the BSD 3-Clause license.
|
|
6
6
|
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.PackageVersionCreate = void 0;
|
|
10
|
-
const util = require("util");
|
|
11
10
|
const path = require("path");
|
|
12
11
|
const os = require("os");
|
|
13
12
|
const fs = require("fs");
|
|
@@ -21,7 +20,7 @@ const pkgUtils = require("../utils/packageUtils");
|
|
|
21
20
|
const constants_1 = require("../constants");
|
|
22
21
|
const utils_1 = require("../utils");
|
|
23
22
|
const versionNumber_1 = require("../utils/versionNumber");
|
|
24
|
-
const
|
|
23
|
+
const packageProfileApi_1 = require("./packageProfileApi");
|
|
25
24
|
const packageVersionCreateRequest_1 = require("./packageVersionCreateRequest");
|
|
26
25
|
core_1.Messages.importMessagesDirectory(__dirname);
|
|
27
26
|
const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'messages');
|
|
@@ -31,12 +30,11 @@ const POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS = 5;
|
|
|
31
30
|
class PackageVersionCreate {
|
|
32
31
|
constructor(options) {
|
|
33
32
|
this.options = options;
|
|
34
|
-
this.packageDirs = [];
|
|
35
33
|
this.connection = this.options.connection;
|
|
36
34
|
this.project = this.options.project;
|
|
37
35
|
}
|
|
38
|
-
createPackageVersion(
|
|
39
|
-
return this.packageVersionCreate(options).catch((err) => {
|
|
36
|
+
createPackageVersion() {
|
|
37
|
+
return this.packageVersionCreate(this.options).catch((err) => {
|
|
40
38
|
// TODO: until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
|
|
41
39
|
err = pkgUtils.massageErrorMessage(err);
|
|
42
40
|
throw pkgUtils.applyErrorAction(err);
|
|
@@ -48,32 +46,15 @@ class PackageVersionCreate {
|
|
|
48
46
|
async listRequestById(id, connection) {
|
|
49
47
|
return (0, packageVersionCreateRequest_1.byId)(id, connection);
|
|
50
48
|
}
|
|
51
|
-
rejectWithInstallKeyError() {
|
|
52
|
-
// This command also requires either the installationkey flag or installationkeybypass flag
|
|
53
|
-
const errorString = messages.getMessage('errorMissingFlagsInstallationKey', [
|
|
54
|
-
'--installationkey',
|
|
55
|
-
'--installationkeybypass',
|
|
56
|
-
]);
|
|
57
|
-
const error = new Error(errorString);
|
|
58
|
-
error['name'] = 'requiredFlagMissing';
|
|
59
|
-
return Promise.reject(error);
|
|
60
|
-
}
|
|
61
49
|
// convert source to mdapi format and copy to tmp dir packaging up
|
|
62
50
|
async generateMDFolderForArtifact(options) {
|
|
51
|
+
const sourcepath = options.sourcePaths ?? [options.sourceDir];
|
|
63
52
|
const componentSet = await source_deploy_retrieve_1.ComponentSetBuilder.build({
|
|
64
53
|
sourceapiversion: this.project.getSfProjectJson().get('sourceApiVersion'),
|
|
65
|
-
sourcepath
|
|
66
|
-
manifest: {
|
|
67
|
-
manifestPath: options.manifest,
|
|
68
|
-
directoryPaths: this.project.getPackageDirectories().map((dir) => dir.path),
|
|
69
|
-
},
|
|
70
|
-
metadata: {
|
|
71
|
-
metadataEntries: options.metadataPaths,
|
|
72
|
-
directoryPaths: this.project.getPackageDirectories().map((dir) => dir.path),
|
|
73
|
-
},
|
|
54
|
+
sourcepath,
|
|
74
55
|
});
|
|
75
56
|
const packageName = options.packageName;
|
|
76
|
-
const outputDirectory = path.resolve(options.
|
|
57
|
+
const outputDirectory = path.resolve(options.deploydir);
|
|
77
58
|
const converter = new source_deploy_retrieve_1.MetadataConverter();
|
|
78
59
|
const convertResult = await converter.convert(componentSet, 'metadata', {
|
|
79
60
|
type: 'directory',
|
|
@@ -161,7 +142,12 @@ class PackageVersionCreate {
|
|
|
161
142
|
const pkgVerQueryResult = await this.connection.tooling.query(query);
|
|
162
143
|
const subRecords = pkgVerQueryResult.records;
|
|
163
144
|
if (!subRecords || subRecords.length !== 1) {
|
|
164
|
-
throw
|
|
145
|
+
throw messages.createError('versionNumberNotFoundInDevHub', [
|
|
146
|
+
dependency.packageId,
|
|
147
|
+
branchString,
|
|
148
|
+
versionNumber.toString(),
|
|
149
|
+
resolvedBuildNumber,
|
|
150
|
+
]);
|
|
165
151
|
}
|
|
166
152
|
dependency.subscriberPackageVersionId = pkgVerQueryResult.records[0].SubscriberPackageVersionId;
|
|
167
153
|
// warn user of the resolved build number when LATEST and RELEASED keywords are used
|
|
@@ -210,10 +196,10 @@ class PackageVersionCreate {
|
|
|
210
196
|
const records = results.records;
|
|
211
197
|
if (!records || records.length === 0 || records[0].expr0 == null) {
|
|
212
198
|
if (versionNumber.build === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
213
|
-
throw
|
|
199
|
+
throw messages.createError('noReleaseVersionFound', [packageId, versionNumber.toString()]);
|
|
214
200
|
}
|
|
215
201
|
else {
|
|
216
|
-
throw
|
|
202
|
+
throw messages.createError('noReleaseVersionFoundForBranch', [packageId, branch, versionNumber.toString()]);
|
|
217
203
|
}
|
|
218
204
|
}
|
|
219
205
|
return `${results.records[0].expr0}`;
|
|
@@ -228,25 +214,25 @@ class PackageVersionCreate {
|
|
|
228
214
|
InstallKey: options.installationkey,
|
|
229
215
|
Instance: options.buildinstance,
|
|
230
216
|
SourceOrg: options.sourceorg,
|
|
231
|
-
CalculateCodeCoverage: options.codecoverage,
|
|
232
|
-
SkipValidation: options.skipvalidation,
|
|
217
|
+
CalculateCodeCoverage: options.codecoverage || false,
|
|
218
|
+
SkipValidation: options.skipvalidation || false,
|
|
233
219
|
};
|
|
234
220
|
if (preserveFiles) {
|
|
235
221
|
logger.info(messages.getMessage('tempFileLocation', [packageVersTmpRoot]));
|
|
236
222
|
return requestObject;
|
|
237
223
|
}
|
|
238
224
|
else {
|
|
239
|
-
return fs.promises.
|
|
225
|
+
return fs.promises.rm(packageVersTmpRoot, { recursive: true, force: true }).then(() => requestObject);
|
|
240
226
|
}
|
|
241
227
|
}
|
|
242
|
-
getPackageDescriptorJsonFromPackageId(packageId,
|
|
243
|
-
const artDir =
|
|
244
|
-
const packageDescriptorJson = this.
|
|
228
|
+
getPackageDescriptorJsonFromPackageId(packageId, options) {
|
|
229
|
+
const artDir = options.path;
|
|
230
|
+
const packageDescriptorJson = this.project.getPackageDirectories().find((packageDir) => {
|
|
245
231
|
const packageDirPackageId = pkgUtils.getPackageIdFromAlias(packageDir.package, this.project);
|
|
246
232
|
return !!packageDirPackageId && packageDirPackageId === packageId ? packageDir : null;
|
|
247
233
|
});
|
|
248
234
|
if (!packageDescriptorJson) {
|
|
249
|
-
throw
|
|
235
|
+
throw messages.createError('packagingDirNotFoundInConfigFile', [constants_1.consts.WORKSPACE_CONFIG_FILENAME, artDir]);
|
|
250
236
|
}
|
|
251
237
|
return packageDescriptorJson;
|
|
252
238
|
}
|
|
@@ -261,7 +247,7 @@ class PackageVersionCreate {
|
|
|
261
247
|
*/
|
|
262
248
|
async createPackageVersionCreateRequestFromOptions(options, packageId, versionNumberString) {
|
|
263
249
|
const artDir = options.path;
|
|
264
|
-
const preserveFiles =
|
|
250
|
+
const preserveFiles = !!(options.preserve || process.env.SFDX_PACKAGE2_VERSION_CREATE_PRESERVE);
|
|
265
251
|
const uniqueHash = (0, testSetup_1.uniqid)({ template: `${packageId}-%s` });
|
|
266
252
|
const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
|
|
267
253
|
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
|
|
@@ -275,11 +261,12 @@ class PackageVersionCreate {
|
|
|
275
261
|
const sourceBaseDir = path.join(this.project.getPath(), artDir);
|
|
276
262
|
const mdOptions = {
|
|
277
263
|
deploydir: packageVersMetadataFolder,
|
|
278
|
-
|
|
264
|
+
sourceDir: sourceBaseDir,
|
|
279
265
|
};
|
|
280
266
|
// Stores any additional client side info that might be needed later on in the process
|
|
281
267
|
const clientSideInfo = new Map();
|
|
282
|
-
|
|
268
|
+
await fs.promises.mkdir(packageVersBlobDirectory, { recursive: true });
|
|
269
|
+
const settingsGenerator = new scratchOrgSettingsGenerator_1.default({ asDirectory: true });
|
|
283
270
|
// Copy all of the metadata from the workspace to a tmp folder
|
|
284
271
|
await this.generateMDFolderForArtifact(mdOptions);
|
|
285
272
|
const packageDescriptorJson = this.getPackageDescriptorJsonFromPackageId(packageId, options);
|
|
@@ -320,15 +307,14 @@ class PackageVersionCreate {
|
|
|
320
307
|
}
|
|
321
308
|
});
|
|
322
309
|
}
|
|
323
|
-
|
|
324
|
-
const [hasUnpackagedMetadata, unpackagedPromise] = await this.resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, options.codecoverage);
|
|
310
|
+
const hasUnpackagedMetadata = await this.resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, options.codecoverage);
|
|
325
311
|
this.resolveApexTestPermissions(packageDescriptorJson, options);
|
|
326
312
|
// All dependencies for the packaging dir should be resolved to an 04t id to be passed to the server.
|
|
327
313
|
// (see _retrieveSubscriberPackageVersionId for details)
|
|
328
314
|
const dependencies = packageDescriptorJson.dependencies;
|
|
329
315
|
// branch can be set via flag or descriptor; flag takes precedence
|
|
330
316
|
options.branch = options.branch ? options.branch : packageDescriptorJson.branch;
|
|
331
|
-
const resultValues = await Promise.all(dependencies
|
|
317
|
+
const resultValues = await Promise.all(!dependencies
|
|
332
318
|
? []
|
|
333
319
|
: dependencies.map((dependency) => this.retrieveSubscriberPackageVersionId(dependency, options.branch)));
|
|
334
320
|
const ancestorId = await pkgUtils.getAncestorId(packageDescriptorJson, this.connection, this.project, versionNumberString, options.skipancestorcheck);
|
|
@@ -341,19 +327,19 @@ class PackageVersionCreate {
|
|
|
341
327
|
this.setPackageDescriptorJsonValues(packageDescriptorJson, options);
|
|
342
328
|
await fs.promises.mkdir(packageVersTmpRoot, { recursive: true });
|
|
343
329
|
await fs.promises.mkdir(packageVersBlobDirectory, { recursive: true });
|
|
344
|
-
if (
|
|
330
|
+
if (Reflect.has(packageDescriptorJson, 'ancestorVersion')) {
|
|
345
331
|
delete packageDescriptorJson.ancestorVersion;
|
|
346
332
|
}
|
|
347
333
|
packageDescriptorJson.ancestorId = ancestorId;
|
|
348
334
|
await fs.promises.writeFile(path.join(packageVersBlobDirectory, DESCRIPTOR_FILE),
|
|
349
335
|
// TODO: need to make sure packageDescriptorJson contains the right values for the descriptor
|
|
350
|
-
JSON.stringify(packageDescriptorJson
|
|
336
|
+
JSON.stringify(packageDescriptorJson), 'utf-8');
|
|
351
337
|
// As part of the source convert process, the package.xml has been written into the tmp metadata directory.
|
|
352
338
|
// The package.xml may need to be manipulated due to processing profiles in the workspace or additional
|
|
353
339
|
// metadata exclusions. If necessary, read the existing package.xml and then re-write it.
|
|
354
340
|
const currentPackageXml = await fs.promises.readFile(path.join(packageVersMetadataFolder, 'package.xml'), 'utf8');
|
|
355
341
|
// convert to json
|
|
356
|
-
const packageJson = xml2js.
|
|
342
|
+
const packageJson = await xml2js.parseStringPromise(currentPackageXml);
|
|
357
343
|
fs.mkdirSync(packageVersMetadataFolder, { recursive: true });
|
|
358
344
|
fs.mkdirSync(packageVersProfileFolder, { recursive: true });
|
|
359
345
|
// Apply any necessary exclusions to typesArr.
|
|
@@ -396,7 +382,7 @@ class PackageVersionCreate {
|
|
|
396
382
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
397
383
|
await fs.promises.writeFile(path.join(packageVersMetadataFolder, 'package.xml'), xml, 'utf-8');
|
|
398
384
|
// Zip the packageVersMetadataFolder folder and put the zip in {packageVersBlobDirectory}/package.zip
|
|
399
|
-
(0, utils_1.zipDir)(packageVersMetadataFolder, metadataZipFile);
|
|
385
|
+
await (0, utils_1.zipDir)(packageVersMetadataFolder, metadataZipFile);
|
|
400
386
|
if (hasUnpackagedMetadata) {
|
|
401
387
|
// Zip the unpackagedMetadataFolder folder and put the zip in {packageVersBlobDirectory}/{unpackagedMetadataZipFile}
|
|
402
388
|
await (0, utils_1.zipDir)(unpackagedMetadataFolder, unpackagedMetadataZipFile);
|
|
@@ -404,22 +390,11 @@ class PackageVersionCreate {
|
|
|
404
390
|
// Zip up the expanded settings (if present)
|
|
405
391
|
if (settingsGenerator.hasSettings()) {
|
|
406
392
|
await settingsGenerator.createDeploy();
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
// so we need to convert to mdapi format here.
|
|
410
|
-
const compSet = source_deploy_retrieve_1.ComponentSet.fromSource(settingsRoot);
|
|
411
|
-
compSet.apiVersion = this.apiVersionFromPackageXml;
|
|
412
|
-
compSet.sourceApiVersion = this.apiVersionFromPackageXml;
|
|
413
|
-
const mdConverter = new source_deploy_retrieve_1.MetadataConverter();
|
|
414
|
-
const convertResult = await mdConverter.convert(compSet, 'metadata', {
|
|
415
|
-
type: 'directory',
|
|
416
|
-
outputDirectory: path.join(settingsRoot, 'pkgMdSettings'),
|
|
417
|
-
genUniqueDir: false,
|
|
418
|
-
});
|
|
419
|
-
(0, utils_1.zipDir)(convertResult.packagePath, settingsZipFile);
|
|
393
|
+
await settingsGenerator.createDeployPackageContents(this.apiVersionFromPackageXml);
|
|
394
|
+
await (0, utils_1.zipDir)(`${settingsGenerator.getDestinationPath()}${path.sep}${settingsGenerator.getShapeDirName()}`, settingsZipFile);
|
|
420
395
|
}
|
|
421
396
|
// Zip the Version Info and package.zip files into another zip
|
|
422
|
-
(0, utils_1.zipDir)(packageVersBlobDirectory, packageVersBlobZipFile);
|
|
397
|
+
await (0, utils_1.zipDir)(packageVersBlobDirectory, packageVersBlobZipFile);
|
|
423
398
|
return this.createRequestObject(packageId, options, preserveFiles, packageVersTmpRoot, packageVersBlobZipFile);
|
|
424
399
|
}
|
|
425
400
|
resolveApexTestPermissions(packageDescriptorJson, options) {
|
|
@@ -445,7 +420,6 @@ class PackageVersionCreate {
|
|
|
445
420
|
delete packageDescriptorJson.apexTestAccess;
|
|
446
421
|
}
|
|
447
422
|
async resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, codeCoverage) {
|
|
448
|
-
let unpackagedPromise = null;
|
|
449
423
|
let hasUnpackagedMetadata = false;
|
|
450
424
|
// Add the Unpackaged Metadata, if any, to the output directory, only when code coverage is specified
|
|
451
425
|
if (codeCoverage && packageDescriptorJson.unpackagedMetadata && packageDescriptorJson.unpackagedMetadata.path) {
|
|
@@ -455,17 +429,19 @@ class PackageVersionCreate {
|
|
|
455
429
|
fs.statSync(unpackagedPath);
|
|
456
430
|
}
|
|
457
431
|
catch (err) {
|
|
458
|
-
throw
|
|
432
|
+
throw messages.createError('unpackagedMDDirectoryDoesNotExist', [
|
|
433
|
+
packageDescriptorJson.unpackagedMetadata.path,
|
|
434
|
+
]);
|
|
459
435
|
}
|
|
460
436
|
fs.mkdirSync(unpackagedMetadataFolder, { recursive: true });
|
|
461
|
-
|
|
437
|
+
await this.generateMDFolderForArtifact({
|
|
462
438
|
deploydir: unpackagedMetadataFolder,
|
|
463
439
|
sourceDir: unpackagedPath,
|
|
464
440
|
});
|
|
465
441
|
// Set which package is the "unpackaged" package
|
|
466
442
|
clientSideInfo.set('UnpackagedMetadataPath', packageDescriptorJson.unpackagedMetadata.path);
|
|
467
443
|
}
|
|
468
|
-
return
|
|
444
|
+
return hasUnpackagedMetadata;
|
|
469
445
|
}
|
|
470
446
|
getPackagePropertyFromPackage(packageDirs, options) {
|
|
471
447
|
let foundByPackage = packageDirs.some((x) => x['package'] === options.package);
|
|
@@ -580,12 +556,10 @@ class PackageVersionCreate {
|
|
|
580
556
|
}
|
|
581
557
|
return value;
|
|
582
558
|
}
|
|
583
|
-
// eslint-disable-next-line complexity
|
|
584
559
|
async packageVersionCreate(options) {
|
|
585
|
-
var _a;
|
|
586
560
|
let pollInterval = kit_1.Duration.seconds(pkgUtils.POLL_INTERVAL_SECONDS);
|
|
587
561
|
let maxRetries = 0;
|
|
588
|
-
if (options.wait
|
|
562
|
+
if (options.wait?.milliseconds > 0) {
|
|
589
563
|
if (options.skipvalidation === true) {
|
|
590
564
|
pollInterval = kit_1.Duration.seconds(POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS);
|
|
591
565
|
}
|
|
@@ -597,7 +571,7 @@ class PackageVersionCreate {
|
|
|
597
571
|
await this.project.getSfProjectJson().schemaValidate();
|
|
598
572
|
}
|
|
599
573
|
// Check for empty packageDirectories
|
|
600
|
-
if (
|
|
574
|
+
if (this.project.getPackageDirectories()?.length === 0) {
|
|
601
575
|
throw messages.createError('errorEmptyPackageDirs');
|
|
602
576
|
}
|
|
603
577
|
const canonicalPackageProperty = this.resolveCanonicalPackageProperty(options);
|
|
@@ -611,29 +585,31 @@ class PackageVersionCreate {
|
|
|
611
585
|
fs.statSync(path.join(process.cwd(), options.path));
|
|
612
586
|
}
|
|
613
587
|
catch (err) {
|
|
614
|
-
throw
|
|
588
|
+
throw messages.createError('directoryDoesNotExist', [options.path]);
|
|
615
589
|
}
|
|
616
|
-
options.profileApi = this.resolveUserLicenses(canonicalPackageProperty, options);
|
|
590
|
+
options.profileApi = await this.resolveUserLicenses(canonicalPackageProperty, options);
|
|
617
591
|
[pollInterval, maxRetries] = await this.resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries);
|
|
618
592
|
const request = await this.createPackageVersionCreateRequestFromOptions(options, resolvedPackageId, versionNumberString);
|
|
619
593
|
const createResult = await this.connection.tooling.create('Package2VersionCreateRequest', request);
|
|
620
594
|
if (!createResult.success) {
|
|
621
595
|
const errStr = createResult.errors && createResult.errors.length ? createResult.errors.join(', ') : createResult.errors;
|
|
622
|
-
throw
|
|
596
|
+
throw messages.createError('failedToCreatePVCRequest', [
|
|
597
|
+
createResult.id ? ` [${createResult.id}]` : '',
|
|
598
|
+
errStr.toString(),
|
|
599
|
+
]);
|
|
623
600
|
}
|
|
624
601
|
let result;
|
|
625
602
|
if (options.wait && options.wait.milliseconds > 0) {
|
|
626
|
-
pollInterval = pollInterval
|
|
603
|
+
pollInterval = pollInterval ?? kit_1.Duration.seconds(options.wait.seconds / maxRetries);
|
|
627
604
|
if (pollInterval) {
|
|
628
605
|
result = await pkgUtils.pollForStatusWithInterval(createResult.id, maxRetries, resolvedPackageId, options.branch, this.project, this.connection, pollInterval);
|
|
629
606
|
}
|
|
630
607
|
}
|
|
631
608
|
else {
|
|
632
|
-
result = await this.listRequestById(createResult.id, this.connection);
|
|
609
|
+
result = (await this.listRequestById(createResult.id, this.connection))[0];
|
|
633
610
|
}
|
|
634
611
|
return result;
|
|
635
612
|
}
|
|
636
|
-
// TODO: should be in pkg utils
|
|
637
613
|
resolveCanonicalPackageProperty(options) {
|
|
638
614
|
let canonicalPackageProperty;
|
|
639
615
|
if (!options.package) {
|
|
@@ -648,7 +624,7 @@ class PackageVersionCreate {
|
|
|
648
624
|
else {
|
|
649
625
|
canonicalPackageProperty = this.getPackagePropertyFromPackage(this.project.getPackageDirectories(), options);
|
|
650
626
|
this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), canonicalPackageProperty, 'path', options.path, 'path', options);
|
|
651
|
-
const expectedPackageId = this.getConfigPackageDirectoriesValue(this.
|
|
627
|
+
const expectedPackageId = this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), canonicalPackageProperty, 'path', options.path, 'path', options);
|
|
652
628
|
// This will throw an error if the package id flag value doesn't match
|
|
653
629
|
// any of the :id values in the package dirs.
|
|
654
630
|
this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'path', canonicalPackageProperty, options.package, 'package', options);
|
|
@@ -665,21 +641,25 @@ class PackageVersionCreate {
|
|
|
665
641
|
// validate the versionNumber flag value if specified, otherwise the descriptor value
|
|
666
642
|
const versionNumberString = options.versionnumber
|
|
667
643
|
? options.versionnumber
|
|
668
|
-
: this.getConfigPackageDirectoriesValue(this.
|
|
644
|
+
: this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'versionNumber', canonicalPackageProperty, options.package, 'package', options);
|
|
669
645
|
pkgUtils.validateVersionNumber(versionNumberString, versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN, null);
|
|
670
646
|
await pkgUtils.validatePatchVersion(this.connection, versionNumberString, resolvedPackageId);
|
|
671
647
|
return versionNumberString;
|
|
672
648
|
}
|
|
673
|
-
resolveUserLicenses(canonicalPackageProperty, options) {
|
|
649
|
+
async resolveUserLicenses(canonicalPackageProperty, options) {
|
|
674
650
|
// Check for an includeProfileUserLiceneses flag in the packageDirectory
|
|
675
|
-
const includeProfileUserLicenses = this.getConfigPackageDirectoriesValue(this.
|
|
651
|
+
const includeProfileUserLicenses = this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'includeProfileUserLicenses', canonicalPackageProperty, options.package, 'package', options);
|
|
676
652
|
if (includeProfileUserLicenses !== undefined &&
|
|
677
653
|
includeProfileUserLicenses !== true &&
|
|
678
654
|
includeProfileUserLicenses !== false) {
|
|
679
655
|
throw messages.createError('errorProfileUserLicensesInvalidValue', [includeProfileUserLicenses]);
|
|
680
656
|
}
|
|
681
657
|
const shouldGenerateProfileInformation = logger.shouldLog(core_1.LoggerLevel.INFO) || logger.shouldLog(core_1.LoggerLevel.DEBUG);
|
|
682
|
-
return
|
|
658
|
+
return packageProfileApi_1.PackageProfileApi.create({
|
|
659
|
+
project: this.project,
|
|
660
|
+
includeUserLicenses: includeProfileUserLicenses,
|
|
661
|
+
generateProfileInformation: shouldGenerateProfileInformation,
|
|
662
|
+
});
|
|
683
663
|
}
|
|
684
664
|
async resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries) {
|
|
685
665
|
let pi = pollInterval;
|
|
@@ -703,7 +683,7 @@ class PackageVersionCreate {
|
|
|
703
683
|
return [pi, mr];
|
|
704
684
|
}
|
|
705
685
|
async validateFlagsForPackageType(packageId, options) {
|
|
706
|
-
const packageType = await pkgUtils.
|
|
686
|
+
const packageType = await pkgUtils.getPackageType(packageId, this.connection);
|
|
707
687
|
if (packageType === 'Unlocked') {
|
|
708
688
|
if (options.postinstallscript || options.uninstallscript) {
|
|
709
689
|
// migrate coreMessages to messages
|
|
@@ -722,18 +702,13 @@ class PackageVersionCreate {
|
|
|
722
702
|
* Cleans invalid attribute(s) from the packageDescriptorJSON
|
|
723
703
|
*/
|
|
724
704
|
cleanPackageDescriptorJson(packageDescriptorJson) {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
delete packageDescriptorJson.unpackagedMetadata; // for client-side use only, not needed
|
|
733
|
-
}
|
|
734
|
-
if (typeof packageDescriptorJson.branch !== 'undefined') {
|
|
735
|
-
delete packageDescriptorJson.branch; // for client-side use only, not needed
|
|
736
|
-
}
|
|
705
|
+
delete packageDescriptorJson.default; // for client-side use only, not needed
|
|
706
|
+
delete packageDescriptorJson.includeProfileUserLicenses; // for client-side use only, not needed
|
|
707
|
+
delete packageDescriptorJson.unpackagedMetadata; // for client-side use only, not needed
|
|
708
|
+
delete packageDescriptorJson.branch; // for client-side use only, not needed
|
|
709
|
+
delete packageDescriptorJson.fullPath; // for client-side use only, not needed
|
|
710
|
+
delete packageDescriptorJson.name; // for client-side use only, not needed
|
|
711
|
+
return packageDescriptorJson;
|
|
737
712
|
}
|
|
738
713
|
/**
|
|
739
714
|
* Sets default or override values for packageDescriptorJSON attribs
|
|
@@ -761,13 +736,13 @@ class PackageVersionCreate {
|
|
|
761
736
|
packageDescriptorJson.releaseNotesUrl = options.releasenotesurl;
|
|
762
737
|
}
|
|
763
738
|
if (packageDescriptorJson.releaseNotesUrl && !pkgUtils.validUrl(packageDescriptorJson.releaseNotesUrl)) {
|
|
764
|
-
throw
|
|
739
|
+
throw messages.createError('malformedUrl', ['releaseNotesUrl', packageDescriptorJson.releaseNotesUrl]);
|
|
765
740
|
}
|
|
766
741
|
if (options.postinstallurl) {
|
|
767
742
|
packageDescriptorJson.postInstallUrl = options.postinstallurl;
|
|
768
743
|
}
|
|
769
744
|
if (packageDescriptorJson.postInstallUrl && !pkgUtils.validUrl(packageDescriptorJson.postInstallUrl)) {
|
|
770
|
-
throw
|
|
745
|
+
throw messages.createError('malformedUrl', ['postInstallUrl', packageDescriptorJson.postInstallUrl]);
|
|
771
746
|
}
|
|
772
747
|
if (options.postinstallscript) {
|
|
773
748
|
packageDescriptorJson.postInstallScript = options.postinstallscript;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
|
-
import {
|
|
3
|
-
export declare function list(options?: PackageVersionCreateRequestQueryOptions): Promise<
|
|
4
|
-
export declare function byId(
|
|
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[]>;
|
|
@@ -25,10 +25,10 @@ async function list(options = {}) {
|
|
|
25
25
|
return _query(util.format(QUERY, whereClause), options.connection);
|
|
26
26
|
}
|
|
27
27
|
exports.list = list;
|
|
28
|
-
async function byId(
|
|
29
|
-
const results = await _query(util.format(QUERY, `WHERE Id = '${
|
|
28
|
+
async function byId(packageVersionCreateRequestId, connection) {
|
|
29
|
+
const results = await _query(util.format(QUERY, `WHERE Id = '${packageVersionCreateRequestId}' `), connection);
|
|
30
30
|
if (results && results.length === 1 && results[0].Status === STATUS_ERROR) {
|
|
31
|
-
results[0].Error = await _queryErrors(
|
|
31
|
+
results[0].Error = await _queryErrors(packageVersionCreateRequestId, connection);
|
|
32
32
|
}
|
|
33
33
|
return results;
|
|
34
34
|
}
|
|
@@ -49,9 +49,9 @@ async function _query(query, connection) {
|
|
|
49
49
|
CreatedBy: record.CreatedById,
|
|
50
50
|
}));
|
|
51
51
|
}
|
|
52
|
-
async function _queryErrors(
|
|
52
|
+
async function _queryErrors(packageVersionCreateRequestId, connection) {
|
|
53
53
|
const errorResults = [];
|
|
54
|
-
const queryResult = connection.tooling.query(util.format(ERROR_QUERY,
|
|
54
|
+
const queryResult = connection.tooling.query(util.format(ERROR_QUERY, packageVersionCreateRequestId));
|
|
55
55
|
if (queryResult.records) {
|
|
56
56
|
queryResult.records.forEach((record) => {
|
|
57
57
|
errorResults.push(record.Message);
|
|
@@ -64,7 +64,7 @@ function _constructWhere(options) {
|
|
|
64
64
|
// filter on created date, days ago: 0 for today, etc
|
|
65
65
|
if (!util.isNullOrUndefined(this.options.createdlastdays)) {
|
|
66
66
|
if (options.createdlastdays < 0) {
|
|
67
|
-
throw
|
|
67
|
+
throw messages.createError('invalidDaysNumber', ['createdlastdays', options.createdlastdays]);
|
|
68
68
|
}
|
|
69
69
|
where.push(`CreatedDate = LAST_N_DAYS:${this.options.createdlastdays}`);
|
|
70
70
|
}
|
|
@@ -76,7 +76,7 @@ function _constructWhere(options) {
|
|
|
76
76
|
STATUSES.forEach((status) => {
|
|
77
77
|
args.push(status);
|
|
78
78
|
});
|
|
79
|
-
throw
|
|
79
|
+
throw messages.createError('invalidStatus', args);
|
|
80
80
|
}
|
|
81
81
|
where.push(`Status = '${foundStatus}'`);
|
|
82
82
|
}
|
|
@@ -51,7 +51,7 @@ exports._assembleQueryParts = _assembleQueryParts;
|
|
|
51
51
|
function _constructWhere(idsOrAliases, createdLastDays, lastModLastDays, project) {
|
|
52
52
|
const where = [];
|
|
53
53
|
// filter on given package ids
|
|
54
|
-
if (
|
|
54
|
+
if (idsOrAliases?.length > 0) {
|
|
55
55
|
// remove dups
|
|
56
56
|
const aliasesOrIds = [...new Set(idsOrAliases)];
|
|
57
57
|
// resolve any aliases
|
package/lib/package1/index.d.ts
CHANGED
package/lib/package1/index.js
CHANGED
|
@@ -21,4 +21,6 @@ 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("./packageVersion1GP"), exports);
|
|
24
|
+
__exportStar(require("./packageDisplay"), exports);
|
|
25
|
+
__exportStar(require("./package1VersionCreateGet"), exports);
|
|
24
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
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.package1VersionCreateGet = void 0;
|
|
10
|
+
async function package1VersionCreateGet(connection, id) {
|
|
11
|
+
return (await connection.tooling
|
|
12
|
+
.sobject('PackageUploadRequest')
|
|
13
|
+
.retrieve(id));
|
|
14
|
+
}
|
|
15
|
+
exports.package1VersionCreateGet = package1VersionCreateGet;
|
|
16
|
+
//# sourceMappingURL=package1VersionCreateGet.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
2
|
+
import { Package1Display } from '../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Executes server-side logic for the package1:display command
|
|
5
|
+
*
|
|
6
|
+
* @param connection
|
|
7
|
+
* @param id: id of the MetadataPackageVersion sObject
|
|
8
|
+
*/
|
|
9
|
+
export declare function package1Display(connection: Connection, id: string): Promise<Package1Display[]>;
|
|
@@ -0,0 +1,29 @@
|
|
|
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.package1Display = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Executes server-side logic for the package1:display command
|
|
12
|
+
*
|
|
13
|
+
* @param connection
|
|
14
|
+
* @param id: id of the MetadataPackageVersion sObject
|
|
15
|
+
*/
|
|
16
|
+
async function package1Display(connection, id) {
|
|
17
|
+
const query = `SELECT Id,MetadataPackageId,Name,ReleaseState,MajorVersion,MinorVersion,PatchVersion,BuildNumber FROM MetadataPackageVersion WHERE id = '${id}'`;
|
|
18
|
+
const results = (await connection.tooling.query(query)).records;
|
|
19
|
+
return results.map((result) => ({
|
|
20
|
+
MetadataPackageVersionId: result.Id,
|
|
21
|
+
MetadataPackageId: result.MetadataPackageId,
|
|
22
|
+
Name: result.Name,
|
|
23
|
+
ReleaseState: result.ReleaseState,
|
|
24
|
+
Version: `${result.MajorVersion}.${result.MinorVersion}.${result.PatchVersion}`,
|
|
25
|
+
BuildNumber: result.BuildNumber,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
exports.package1Display = package1Display;
|
|
29
|
+
//# sourceMappingURL=packageDisplay.js.map
|
|
@@ -2,7 +2,7 @@ import { Connection, NamedPackageDir, PackageDir, SfError, SfProject } from '@sa
|
|
|
2
2
|
import { Duration } from '@salesforce/kit';
|
|
3
3
|
import { Many } from '@salesforce/ts-types';
|
|
4
4
|
import { SaveError } from 'jsforce';
|
|
5
|
-
import { PackagingSObjects,
|
|
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,7 +121,7 @@ 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
126
|
export declare function getConfigPackageDirectory(packageDirs: NamedPackageDir[] | PackageDir[], lookupProperty: string, lookupValue: unknown): NamedPackageDir | PackageDir | undefined;
|
|
127
127
|
/**
|
|
@@ -145,8 +145,8 @@ 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 pollForStatusWithInterval(id: string, retries: number, packageId: string, branch: string, withProject: SfProject, connection: Connection, interval: Duration): Promise<
|
|
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>;
|
|
150
150
|
export declare function getSoqlWhereClauseMaxLength(): number;
|
|
151
151
|
export declare function formatDate(date: Date): string;
|
|
152
152
|
export declare function combineSaveErrors(sObject: string, crudOperation: string, errors: SaveError[]): SfError;
|