@salesforce/packaging 3.7.2 → 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.
@@ -1,5 +1,6 @@
1
1
  import { Duration } from '@salesforce/kit';
2
- import { Connection, NamedPackageDir, SfProject } from '@salesforce/core';
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<NamedPackageDir> & 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: string;
242
- definitionfile: string;
242
+ installationKey?: string;
243
+ definitionfile?: string;
244
+ /** @deprecated stop using it*/
243
245
  installationKeyBypass: boolean;
244
246
  wait: Duration;
245
- buildInstance: string;
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
- let logger;
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
- let maxRetries = 0;
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, apiVersion);
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(pkgUtils.POLL_INTERVAL_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
- getLogger().debug(`Including metadata found in '${context.seedmetadata}'.`);
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
- getLogger().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)}'`);
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
- function isStatusEqualTo(results, statuses = []) {
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, NamedPackageDir, PackageDir, SfProject } from '@salesforce/core';
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): PackageDir | NamedPackageDir;
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
- let isNew = false;
59
- // see if package exists (exists means it has an id or package)
60
- let packageDir = packageDirs
61
- .map((pd) => pd)
62
- .find((pd) => pd.path === options.path && !pd.id && !pd.package);
63
- if (!packageDir) {
64
- // no match - create a new one
65
- isNew = true;
66
- packageDir = { ...pkgUtils.DEFAULT_PACKAGE_DIR };
67
- packageDir.path = (0, packageUtils_1.replaceIfEmpty)(packageDir.path, options.path);
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
- // strip trailing slash from path param
84
- options.path = options.path.replace(/\/$/, '');
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, options);
85
+ const packageDirectory = createPackageDirEntry(project, cleanOptions);
98
86
  project.getSfProjectJson().addPackageDirectory(packageDirectory);
99
- project.getSfProjectJson().addPackageAlias(options.name, createResult.id);
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));
@@ -48,7 +48,7 @@ export declare class PackageVersion {
48
48
  private readonly project;
49
49
  private readonly connection;
50
50
  private data?;
51
- private packageType;
51
+ private packageType?;
52
52
  private id;
53
53
  constructor(options: PackageVersionOptions);
54
54
  /**
@@ -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') ?? undefined,
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) => namedPackageDir.package === packageName || namedPackageDir.name === packageName);
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
- packageName = packageObject?.package;
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()).filter((p) => p.package === pkg);
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
- getLogger().info('Skipping sfdx-project.json updates because SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE is set');
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
- getLogger().info(`Skipping sfdx-project.json updates because ${packageId} is not a 2GP package. It has a PackageCategory of '${packageInfo.PackageCategory}'`);
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 versions = await packageVersion_1.PackageVersion.queryPackage2Version(connection, queryOptions);
115
- if (versions.length && versions[0]) {
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
- getLogger().warn(`Failed to update sfdx-project.json. Could not find package for ${version.Package2Id}. This should never happen.`);
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
- getLogger().info(`Could not find Package2Version record for ${subscriberPackageVersionId}. No updates to sfdx-project.json will be made.`);
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
- getLogger().error(`Encountered error trying to update sfdx-project.json after retrieving package version metadata: ${msg}`);
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 vesion in the org:
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 vesion in the org:
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: () => Package1Version.packageUploadPolling(connection, createRequest.id, timeout, pollingOptions.frequency.seconds),
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 contiaining empty folders
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.replaceIfEmpty = 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.DEFAULT_PACKAGE_DIR = exports.POLL_INTERVAL_SECONDS = exports.INSTALL_URL_BASE = exports.VERSION_NUMBER_SEP = void 0;
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((id) => id);
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 = Object.assign({}, packageDescriptorJson);
434
- const definitionFileJsonCopy = Object.assign({}, definitionFileJson);
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 contiaining empty folders
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
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/packaging",
3
- "version": "3.7.2",
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": "^7.4.1",
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": "^11.6.9",
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.8",
61
- "@salesforce/dev-scripts": "^9.1.2",
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.5",
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"