@salesforce/packaging 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/lib/interfaces/packagingInterfacesAndType.d.ts +13 -8
- 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 +4 -4
- 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 +70 -93
- package/lib/package/packageVersionCreateRequest.d.ts +3 -3
- package/lib/package/packageVersionCreateRequest.js +7 -7
- package/lib/utils/packageUtils.d.ts +10 -10
- package/lib/utils/packageUtils.js +29 -29
- package/lib/utils/srcDevUtils.js +23 -19
- package/lib/utils/versionNumber.js +5 -5
- package/messages/messages.md +32 -0
- package/package.json +8 -16
- 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,16 @@ 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
|
+
var _a;
|
|
52
|
+
const sourcepath = (_a = options.sourcePaths) !== null && _a !== void 0 ? _a : [options.sourceDir];
|
|
63
53
|
const componentSet = await source_deploy_retrieve_1.ComponentSetBuilder.build({
|
|
64
54
|
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
|
-
},
|
|
55
|
+
sourcepath,
|
|
74
56
|
});
|
|
75
57
|
const packageName = options.packageName;
|
|
76
|
-
const outputDirectory = path.resolve(options.
|
|
58
|
+
const outputDirectory = path.resolve(options.deploydir);
|
|
77
59
|
const converter = new source_deploy_retrieve_1.MetadataConverter();
|
|
78
60
|
const convertResult = await converter.convert(componentSet, 'metadata', {
|
|
79
61
|
type: 'directory',
|
|
@@ -161,7 +143,12 @@ class PackageVersionCreate {
|
|
|
161
143
|
const pkgVerQueryResult = await this.connection.tooling.query(query);
|
|
162
144
|
const subRecords = pkgVerQueryResult.records;
|
|
163
145
|
if (!subRecords || subRecords.length !== 1) {
|
|
164
|
-
throw
|
|
146
|
+
throw messages.createError('versionNumberNotFoundInDevHub', [
|
|
147
|
+
dependency.packageId,
|
|
148
|
+
branchString,
|
|
149
|
+
versionNumber.toString(),
|
|
150
|
+
resolvedBuildNumber,
|
|
151
|
+
]);
|
|
165
152
|
}
|
|
166
153
|
dependency.subscriberPackageVersionId = pkgVerQueryResult.records[0].SubscriberPackageVersionId;
|
|
167
154
|
// warn user of the resolved build number when LATEST and RELEASED keywords are used
|
|
@@ -210,10 +197,10 @@ class PackageVersionCreate {
|
|
|
210
197
|
const records = results.records;
|
|
211
198
|
if (!records || records.length === 0 || records[0].expr0 == null) {
|
|
212
199
|
if (versionNumber.build === versionNumber_1.BuildNumberToken.RELEASED_BUILD_NUMBER_TOKEN) {
|
|
213
|
-
throw
|
|
200
|
+
throw messages.createError('noReleaseVersionFound', [packageId, versionNumber.toString()]);
|
|
214
201
|
}
|
|
215
202
|
else {
|
|
216
|
-
throw
|
|
203
|
+
throw messages.createError('noReleaseVersionFoundForBranch', [packageId, branch, versionNumber.toString()]);
|
|
217
204
|
}
|
|
218
205
|
}
|
|
219
206
|
return `${results.records[0].expr0}`;
|
|
@@ -228,25 +215,25 @@ class PackageVersionCreate {
|
|
|
228
215
|
InstallKey: options.installationkey,
|
|
229
216
|
Instance: options.buildinstance,
|
|
230
217
|
SourceOrg: options.sourceorg,
|
|
231
|
-
CalculateCodeCoverage: options.codecoverage,
|
|
232
|
-
SkipValidation: options.skipvalidation,
|
|
218
|
+
CalculateCodeCoverage: options.codecoverage || false,
|
|
219
|
+
SkipValidation: options.skipvalidation || false,
|
|
233
220
|
};
|
|
234
221
|
if (preserveFiles) {
|
|
235
222
|
logger.info(messages.getMessage('tempFileLocation', [packageVersTmpRoot]));
|
|
236
223
|
return requestObject;
|
|
237
224
|
}
|
|
238
225
|
else {
|
|
239
|
-
return fs.promises.
|
|
226
|
+
return fs.promises.rm(packageVersTmpRoot, { recursive: true, force: true }).then(() => requestObject);
|
|
240
227
|
}
|
|
241
228
|
}
|
|
242
|
-
getPackageDescriptorJsonFromPackageId(packageId,
|
|
243
|
-
const artDir =
|
|
244
|
-
const packageDescriptorJson = this.
|
|
229
|
+
getPackageDescriptorJsonFromPackageId(packageId, options) {
|
|
230
|
+
const artDir = options.path;
|
|
231
|
+
const packageDescriptorJson = this.project.getPackageDirectories().find((packageDir) => {
|
|
245
232
|
const packageDirPackageId = pkgUtils.getPackageIdFromAlias(packageDir.package, this.project);
|
|
246
233
|
return !!packageDirPackageId && packageDirPackageId === packageId ? packageDir : null;
|
|
247
234
|
});
|
|
248
235
|
if (!packageDescriptorJson) {
|
|
249
|
-
throw
|
|
236
|
+
throw messages.createError('packagingDirNotFoundInConfigFile', [constants_1.consts.WORKSPACE_CONFIG_FILENAME, artDir]);
|
|
250
237
|
}
|
|
251
238
|
return packageDescriptorJson;
|
|
252
239
|
}
|
|
@@ -261,7 +248,7 @@ class PackageVersionCreate {
|
|
|
261
248
|
*/
|
|
262
249
|
async createPackageVersionCreateRequestFromOptions(options, packageId, versionNumberString) {
|
|
263
250
|
const artDir = options.path;
|
|
264
|
-
const preserveFiles =
|
|
251
|
+
const preserveFiles = !!(options.preserve || process.env.SFDX_PACKAGE2_VERSION_CREATE_PRESERVE);
|
|
265
252
|
const uniqueHash = (0, testSetup_1.uniqid)({ template: `${packageId}-%s` });
|
|
266
253
|
const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
|
|
267
254
|
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
|
|
@@ -275,11 +262,12 @@ class PackageVersionCreate {
|
|
|
275
262
|
const sourceBaseDir = path.join(this.project.getPath(), artDir);
|
|
276
263
|
const mdOptions = {
|
|
277
264
|
deploydir: packageVersMetadataFolder,
|
|
278
|
-
|
|
265
|
+
sourceDir: sourceBaseDir,
|
|
279
266
|
};
|
|
280
267
|
// Stores any additional client side info that might be needed later on in the process
|
|
281
268
|
const clientSideInfo = new Map();
|
|
282
|
-
|
|
269
|
+
await fs.promises.mkdir(packageVersBlobDirectory, { recursive: true });
|
|
270
|
+
const settingsGenerator = new scratchOrgSettingsGenerator_1.default({ asDirectory: true });
|
|
283
271
|
// Copy all of the metadata from the workspace to a tmp folder
|
|
284
272
|
await this.generateMDFolderForArtifact(mdOptions);
|
|
285
273
|
const packageDescriptorJson = this.getPackageDescriptorJsonFromPackageId(packageId, options);
|
|
@@ -320,15 +308,14 @@ class PackageVersionCreate {
|
|
|
320
308
|
}
|
|
321
309
|
});
|
|
322
310
|
}
|
|
323
|
-
|
|
324
|
-
const [hasUnpackagedMetadata, unpackagedPromise] = await this.resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, options.codecoverage);
|
|
311
|
+
const hasUnpackagedMetadata = await this.resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, options.codecoverage);
|
|
325
312
|
this.resolveApexTestPermissions(packageDescriptorJson, options);
|
|
326
313
|
// All dependencies for the packaging dir should be resolved to an 04t id to be passed to the server.
|
|
327
314
|
// (see _retrieveSubscriberPackageVersionId for details)
|
|
328
315
|
const dependencies = packageDescriptorJson.dependencies;
|
|
329
316
|
// branch can be set via flag or descriptor; flag takes precedence
|
|
330
317
|
options.branch = options.branch ? options.branch : packageDescriptorJson.branch;
|
|
331
|
-
const resultValues = await Promise.all(dependencies
|
|
318
|
+
const resultValues = await Promise.all(!dependencies
|
|
332
319
|
? []
|
|
333
320
|
: dependencies.map((dependency) => this.retrieveSubscriberPackageVersionId(dependency, options.branch)));
|
|
334
321
|
const ancestorId = await pkgUtils.getAncestorId(packageDescriptorJson, this.connection, this.project, versionNumberString, options.skipancestorcheck);
|
|
@@ -341,19 +328,19 @@ class PackageVersionCreate {
|
|
|
341
328
|
this.setPackageDescriptorJsonValues(packageDescriptorJson, options);
|
|
342
329
|
await fs.promises.mkdir(packageVersTmpRoot, { recursive: true });
|
|
343
330
|
await fs.promises.mkdir(packageVersBlobDirectory, { recursive: true });
|
|
344
|
-
if (
|
|
331
|
+
if (Reflect.has(packageDescriptorJson, 'ancestorVersion')) {
|
|
345
332
|
delete packageDescriptorJson.ancestorVersion;
|
|
346
333
|
}
|
|
347
334
|
packageDescriptorJson.ancestorId = ancestorId;
|
|
348
335
|
await fs.promises.writeFile(path.join(packageVersBlobDirectory, DESCRIPTOR_FILE),
|
|
349
336
|
// TODO: need to make sure packageDescriptorJson contains the right values for the descriptor
|
|
350
|
-
JSON.stringify(packageDescriptorJson
|
|
337
|
+
JSON.stringify(packageDescriptorJson), 'utf-8');
|
|
351
338
|
// As part of the source convert process, the package.xml has been written into the tmp metadata directory.
|
|
352
339
|
// The package.xml may need to be manipulated due to processing profiles in the workspace or additional
|
|
353
340
|
// metadata exclusions. If necessary, read the existing package.xml and then re-write it.
|
|
354
341
|
const currentPackageXml = await fs.promises.readFile(path.join(packageVersMetadataFolder, 'package.xml'), 'utf8');
|
|
355
342
|
// convert to json
|
|
356
|
-
const packageJson = xml2js.
|
|
343
|
+
const packageJson = await xml2js.parseStringPromise(currentPackageXml);
|
|
357
344
|
fs.mkdirSync(packageVersMetadataFolder, { recursive: true });
|
|
358
345
|
fs.mkdirSync(packageVersProfileFolder, { recursive: true });
|
|
359
346
|
// Apply any necessary exclusions to typesArr.
|
|
@@ -396,7 +383,7 @@ class PackageVersionCreate {
|
|
|
396
383
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
397
384
|
await fs.promises.writeFile(path.join(packageVersMetadataFolder, 'package.xml'), xml, 'utf-8');
|
|
398
385
|
// Zip the packageVersMetadataFolder folder and put the zip in {packageVersBlobDirectory}/package.zip
|
|
399
|
-
(0, utils_1.zipDir)(packageVersMetadataFolder, metadataZipFile);
|
|
386
|
+
await (0, utils_1.zipDir)(packageVersMetadataFolder, metadataZipFile);
|
|
400
387
|
if (hasUnpackagedMetadata) {
|
|
401
388
|
// Zip the unpackagedMetadataFolder folder and put the zip in {packageVersBlobDirectory}/{unpackagedMetadataZipFile}
|
|
402
389
|
await (0, utils_1.zipDir)(unpackagedMetadataFolder, unpackagedMetadataZipFile);
|
|
@@ -404,22 +391,11 @@ class PackageVersionCreate {
|
|
|
404
391
|
// Zip up the expanded settings (if present)
|
|
405
392
|
if (settingsGenerator.hasSettings()) {
|
|
406
393
|
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);
|
|
394
|
+
await settingsGenerator.createDeployPackageContents(this.apiVersionFromPackageXml);
|
|
395
|
+
await (0, utils_1.zipDir)(`${settingsGenerator.getDestinationPath()}${path.sep}${settingsGenerator.getShapeDirName()}`, settingsZipFile);
|
|
420
396
|
}
|
|
421
397
|
// Zip the Version Info and package.zip files into another zip
|
|
422
|
-
(0, utils_1.zipDir)(packageVersBlobDirectory, packageVersBlobZipFile);
|
|
398
|
+
await (0, utils_1.zipDir)(packageVersBlobDirectory, packageVersBlobZipFile);
|
|
423
399
|
return this.createRequestObject(packageId, options, preserveFiles, packageVersTmpRoot, packageVersBlobZipFile);
|
|
424
400
|
}
|
|
425
401
|
resolveApexTestPermissions(packageDescriptorJson, options) {
|
|
@@ -445,7 +421,6 @@ class PackageVersionCreate {
|
|
|
445
421
|
delete packageDescriptorJson.apexTestAccess;
|
|
446
422
|
}
|
|
447
423
|
async resolveUnpackagedMetadata(packageDescriptorJson, unpackagedMetadataFolder, clientSideInfo, codeCoverage) {
|
|
448
|
-
let unpackagedPromise = null;
|
|
449
424
|
let hasUnpackagedMetadata = false;
|
|
450
425
|
// Add the Unpackaged Metadata, if any, to the output directory, only when code coverage is specified
|
|
451
426
|
if (codeCoverage && packageDescriptorJson.unpackagedMetadata && packageDescriptorJson.unpackagedMetadata.path) {
|
|
@@ -455,17 +430,19 @@ class PackageVersionCreate {
|
|
|
455
430
|
fs.statSync(unpackagedPath);
|
|
456
431
|
}
|
|
457
432
|
catch (err) {
|
|
458
|
-
throw
|
|
433
|
+
throw messages.createError('unpackagedMDDirectoryDoesNotExist', [
|
|
434
|
+
packageDescriptorJson.unpackagedMetadata.path,
|
|
435
|
+
]);
|
|
459
436
|
}
|
|
460
437
|
fs.mkdirSync(unpackagedMetadataFolder, { recursive: true });
|
|
461
|
-
|
|
438
|
+
await this.generateMDFolderForArtifact({
|
|
462
439
|
deploydir: unpackagedMetadataFolder,
|
|
463
440
|
sourceDir: unpackagedPath,
|
|
464
441
|
});
|
|
465
442
|
// Set which package is the "unpackaged" package
|
|
466
443
|
clientSideInfo.set('UnpackagedMetadataPath', packageDescriptorJson.unpackagedMetadata.path);
|
|
467
444
|
}
|
|
468
|
-
return
|
|
445
|
+
return hasUnpackagedMetadata;
|
|
469
446
|
}
|
|
470
447
|
getPackagePropertyFromPackage(packageDirs, options) {
|
|
471
448
|
let foundByPackage = packageDirs.some((x) => x['package'] === options.package);
|
|
@@ -580,12 +557,11 @@ class PackageVersionCreate {
|
|
|
580
557
|
}
|
|
581
558
|
return value;
|
|
582
559
|
}
|
|
583
|
-
// eslint-disable-next-line complexity
|
|
584
560
|
async packageVersionCreate(options) {
|
|
585
|
-
var _a;
|
|
561
|
+
var _a, _b;
|
|
586
562
|
let pollInterval = kit_1.Duration.seconds(pkgUtils.POLL_INTERVAL_SECONDS);
|
|
587
563
|
let maxRetries = 0;
|
|
588
|
-
if (options.wait.milliseconds > 0) {
|
|
564
|
+
if (((_a = options.wait) === null || _a === void 0 ? void 0 : _a.milliseconds) > 0) {
|
|
589
565
|
if (options.skipvalidation === true) {
|
|
590
566
|
pollInterval = kit_1.Duration.seconds(POLL_INTERVAL_WITHOUT_VALIDATION_SECONDS);
|
|
591
567
|
}
|
|
@@ -597,7 +573,7 @@ class PackageVersionCreate {
|
|
|
597
573
|
await this.project.getSfProjectJson().schemaValidate();
|
|
598
574
|
}
|
|
599
575
|
// Check for empty packageDirectories
|
|
600
|
-
if (((
|
|
576
|
+
if (((_b = this.project.getPackageDirectories()) === null || _b === void 0 ? void 0 : _b.length) === 0) {
|
|
601
577
|
throw messages.createError('errorEmptyPackageDirs');
|
|
602
578
|
}
|
|
603
579
|
const canonicalPackageProperty = this.resolveCanonicalPackageProperty(options);
|
|
@@ -611,15 +587,18 @@ class PackageVersionCreate {
|
|
|
611
587
|
fs.statSync(path.join(process.cwd(), options.path));
|
|
612
588
|
}
|
|
613
589
|
catch (err) {
|
|
614
|
-
throw
|
|
590
|
+
throw messages.createError('directoryDoesNotExist', [options.path]);
|
|
615
591
|
}
|
|
616
|
-
options.profileApi = this.resolveUserLicenses(canonicalPackageProperty, options);
|
|
592
|
+
options.profileApi = await this.resolveUserLicenses(canonicalPackageProperty, options);
|
|
617
593
|
[pollInterval, maxRetries] = await this.resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries);
|
|
618
594
|
const request = await this.createPackageVersionCreateRequestFromOptions(options, resolvedPackageId, versionNumberString);
|
|
619
595
|
const createResult = await this.connection.tooling.create('Package2VersionCreateRequest', request);
|
|
620
596
|
if (!createResult.success) {
|
|
621
597
|
const errStr = createResult.errors && createResult.errors.length ? createResult.errors.join(', ') : createResult.errors;
|
|
622
|
-
throw
|
|
598
|
+
throw messages.createError('failedToCreatePVCRequest', [
|
|
599
|
+
createResult.id ? ` [${createResult.id}]` : '',
|
|
600
|
+
errStr.toString(),
|
|
601
|
+
]);
|
|
623
602
|
}
|
|
624
603
|
let result;
|
|
625
604
|
if (options.wait && options.wait.milliseconds > 0) {
|
|
@@ -629,11 +608,10 @@ class PackageVersionCreate {
|
|
|
629
608
|
}
|
|
630
609
|
}
|
|
631
610
|
else {
|
|
632
|
-
result = await this.listRequestById(createResult.id, this.connection);
|
|
611
|
+
result = (await this.listRequestById(createResult.id, this.connection))[0];
|
|
633
612
|
}
|
|
634
613
|
return result;
|
|
635
614
|
}
|
|
636
|
-
// TODO: should be in pkg utils
|
|
637
615
|
resolveCanonicalPackageProperty(options) {
|
|
638
616
|
let canonicalPackageProperty;
|
|
639
617
|
if (!options.package) {
|
|
@@ -648,7 +626,7 @@ class PackageVersionCreate {
|
|
|
648
626
|
else {
|
|
649
627
|
canonicalPackageProperty = this.getPackagePropertyFromPackage(this.project.getPackageDirectories(), options);
|
|
650
628
|
this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), canonicalPackageProperty, 'path', options.path, 'path', options);
|
|
651
|
-
const expectedPackageId = this.getConfigPackageDirectoriesValue(this.
|
|
629
|
+
const expectedPackageId = this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), canonicalPackageProperty, 'path', options.path, 'path', options);
|
|
652
630
|
// This will throw an error if the package id flag value doesn't match
|
|
653
631
|
// any of the :id values in the package dirs.
|
|
654
632
|
this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'path', canonicalPackageProperty, options.package, 'package', options);
|
|
@@ -665,21 +643,25 @@ class PackageVersionCreate {
|
|
|
665
643
|
// validate the versionNumber flag value if specified, otherwise the descriptor value
|
|
666
644
|
const versionNumberString = options.versionnumber
|
|
667
645
|
? options.versionnumber
|
|
668
|
-
: this.getConfigPackageDirectoriesValue(this.
|
|
646
|
+
: this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'versionNumber', canonicalPackageProperty, options.package, 'package', options);
|
|
669
647
|
pkgUtils.validateVersionNumber(versionNumberString, versionNumber_1.BuildNumberToken.NEXT_BUILD_NUMBER_TOKEN, null);
|
|
670
648
|
await pkgUtils.validatePatchVersion(this.connection, versionNumberString, resolvedPackageId);
|
|
671
649
|
return versionNumberString;
|
|
672
650
|
}
|
|
673
|
-
resolveUserLicenses(canonicalPackageProperty, options) {
|
|
651
|
+
async resolveUserLicenses(canonicalPackageProperty, options) {
|
|
674
652
|
// Check for an includeProfileUserLiceneses flag in the packageDirectory
|
|
675
|
-
const includeProfileUserLicenses = this.getConfigPackageDirectoriesValue(this.
|
|
653
|
+
const includeProfileUserLicenses = this.getConfigPackageDirectoriesValue(this.project.getPackageDirectories(), 'includeProfileUserLicenses', canonicalPackageProperty, options.package, 'package', options);
|
|
676
654
|
if (includeProfileUserLicenses !== undefined &&
|
|
677
655
|
includeProfileUserLicenses !== true &&
|
|
678
656
|
includeProfileUserLicenses !== false) {
|
|
679
657
|
throw messages.createError('errorProfileUserLicensesInvalidValue', [includeProfileUserLicenses]);
|
|
680
658
|
}
|
|
681
659
|
const shouldGenerateProfileInformation = logger.shouldLog(core_1.LoggerLevel.INFO) || logger.shouldLog(core_1.LoggerLevel.DEBUG);
|
|
682
|
-
return
|
|
660
|
+
return packageProfileApi_1.PackageProfileApi.create({
|
|
661
|
+
project: this.project,
|
|
662
|
+
includeUserLicenses: includeProfileUserLicenses,
|
|
663
|
+
generateProfileInformation: shouldGenerateProfileInformation,
|
|
664
|
+
});
|
|
683
665
|
}
|
|
684
666
|
async resolveOrgDependentPollingTime(resolvedPackageId, options, pollInterval, maxRetries) {
|
|
685
667
|
let pi = pollInterval;
|
|
@@ -703,7 +685,7 @@ class PackageVersionCreate {
|
|
|
703
685
|
return [pi, mr];
|
|
704
686
|
}
|
|
705
687
|
async validateFlagsForPackageType(packageId, options) {
|
|
706
|
-
const packageType = await pkgUtils.
|
|
688
|
+
const packageType = await pkgUtils.getPackageType(packageId, this.connection);
|
|
707
689
|
if (packageType === 'Unlocked') {
|
|
708
690
|
if (options.postinstallscript || options.uninstallscript) {
|
|
709
691
|
// migrate coreMessages to messages
|
|
@@ -722,18 +704,13 @@ class PackageVersionCreate {
|
|
|
722
704
|
* Cleans invalid attribute(s) from the packageDescriptorJSON
|
|
723
705
|
*/
|
|
724
706
|
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
|
-
}
|
|
707
|
+
delete packageDescriptorJson.default; // for client-side use only, not needed
|
|
708
|
+
delete packageDescriptorJson.includeProfileUserLicenses; // for client-side use only, not needed
|
|
709
|
+
delete packageDescriptorJson.unpackagedMetadata; // for client-side use only, not needed
|
|
710
|
+
delete packageDescriptorJson.branch; // for client-side use only, not needed
|
|
711
|
+
delete packageDescriptorJson.fullPath; // for client-side use only, not needed
|
|
712
|
+
delete packageDescriptorJson.name; // for client-side use only, not needed
|
|
713
|
+
return packageDescriptorJson;
|
|
737
714
|
}
|
|
738
715
|
/**
|
|
739
716
|
* Sets default or override values for packageDescriptorJSON attribs
|
|
@@ -761,13 +738,13 @@ class PackageVersionCreate {
|
|
|
761
738
|
packageDescriptorJson.releaseNotesUrl = options.releasenotesurl;
|
|
762
739
|
}
|
|
763
740
|
if (packageDescriptorJson.releaseNotesUrl && !pkgUtils.validUrl(packageDescriptorJson.releaseNotesUrl)) {
|
|
764
|
-
throw
|
|
741
|
+
throw messages.createError('malformedUrl', ['releaseNotesUrl', packageDescriptorJson.releaseNotesUrl]);
|
|
765
742
|
}
|
|
766
743
|
if (options.postinstallurl) {
|
|
767
744
|
packageDescriptorJson.postInstallUrl = options.postinstallurl;
|
|
768
745
|
}
|
|
769
746
|
if (packageDescriptorJson.postInstallUrl && !pkgUtils.validUrl(packageDescriptorJson.postInstallUrl)) {
|
|
770
|
-
throw
|
|
747
|
+
throw messages.createError('malformedUrl', ['postInstallUrl', packageDescriptorJson.postInstallUrl]);
|
|
771
748
|
}
|
|
772
749
|
if (options.postinstallscript) {
|
|
773
750
|
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
|
}
|
|
@@ -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;
|