@salesforce/packaging 2.3.10 → 2.4.1

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.
@@ -299,4 +299,10 @@ export declare namespace PackagingSObjects {
299
299
  IsDeprecated: boolean;
300
300
  MetadataZip?: string;
301
301
  };
302
+ type MetadataPackage = {
303
+ Id: string;
304
+ Name: string;
305
+ NamespacePrefix: string;
306
+ PackageCategory: 'Application' | 'Module' | 'Package' | 'Package2';
307
+ };
302
308
  }
@@ -1,5 +1,5 @@
1
1
  import { Connection, SfProject } from '@salesforce/core';
2
- import { ConvertPackageOptions, PackageCreateOptions, PackageOptions, PackageSaveResult, PackageType, PackageUpdateOptions, PackageVersionCreateRequestResult, PackageVersionListOptions, PackageVersionListResult, PackagingSObjects, PackageVersionMetadataDownloadOptions, PackageVersionMetadataDownloadResult } from '../interfaces';
2
+ import { ConvertPackageOptions, PackageCreateOptions, PackageOptions, PackageSaveResult, PackageType, PackageUpdateOptions, PackageVersionCreateRequestResult, PackageVersionListOptions, PackageVersionListResult, PackageVersionMetadataDownloadOptions, PackageVersionMetadataDownloadResult, PackagingSObjects } from '../interfaces';
3
3
  import { PackageAncestry } from './packageAncestry';
4
4
  export declare const Package2Fields: string[];
5
5
  /**
@@ -7,13 +7,11 @@ exports.Package = exports.Package2Fields = void 0;
7
7
  * Licensed under the BSD 3-Clause license.
8
8
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
9
9
  */
10
- const path = require("path");
11
- const fs = require("fs");
12
10
  const core_1 = require("@salesforce/core");
13
- const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
14
11
  const packageUtils_1 = require("../utils/packageUtils");
15
12
  const packageCreate_1 = require("./packageCreate");
16
13
  const packageConvert_1 = require("./packageConvert");
14
+ const packageVersionRetrieve_1 = require("./packageVersionRetrieve");
17
15
  const packageVersionList_1 = require("./packageVersionList");
18
16
  const packageDelete_1 = require("./packageDelete");
19
17
  const packageAncestry_1 = require("./packageAncestry");
@@ -162,46 +160,7 @@ class Package {
162
160
  * @returns
163
161
  */
164
162
  static async downloadPackageVersionMetadata(project, options, connection) {
165
- // Validate the destination path is suitable to extract package version metadata (must be new or empty)
166
- const destinationFolder = options.destinationFolder ?? 'force-app';
167
- if (path.isAbsolute(destinationFolder)) {
168
- throw messages.createError('sourcesDownloadDirectoryMustBeRelative');
169
- }
170
- const destinationPath = path.join(project.getPath(), destinationFolder);
171
- if (!fs.existsSync(destinationPath)) {
172
- fs.mkdirSync(destinationPath, { recursive: true });
173
- }
174
- if (!(0, packageUtils_1.isPackageDirectoryEffectivelyEmpty)(destinationPath)) {
175
- throw messages.createError('sourcesDownloadDirectoryNotEmpty');
176
- }
177
- // Get the MetadataZip URL from the MetadataPackageVersion record
178
- const subscriberPackageVersionId = project.getPackageIdFromAlias(options.subscriberPackageVersionId) ?? options.subscriberPackageVersionId;
179
- const versionInfo = (await connection.tooling
180
- .sobject('MetadataPackageVersion')
181
- .retrieve(subscriberPackageVersionId));
182
- if (!versionInfo.MetadataZip) {
183
- throw messages.createError('unableToAccessMetadataZip');
184
- }
185
- const responseBase64 = await connection.tooling.request(versionInfo.MetadataZip, {
186
- encoding: 'base64',
187
- });
188
- const buffer = Buffer.from(responseBase64, 'base64');
189
- // 2GP packages have the package.zip wrapped in an outer zip.
190
- let tree = await source_deploy_retrieve_1.ZipTreeContainer.create(buffer);
191
- if (tree.exists('package.zip')) {
192
- tree = await source_deploy_retrieve_1.ZipTreeContainer.create(await tree.readFile('package.zip'));
193
- }
194
- const zipComponents = source_deploy_retrieve_1.ComponentSet.fromSource({
195
- fsPaths: ['.'],
196
- tree,
197
- })
198
- .getSourceComponents()
199
- .toArray();
200
- return new source_deploy_retrieve_1.MetadataConverter().convert(zipComponents, 'source', {
201
- type: 'directory',
202
- outputDirectory: destinationPath,
203
- genUniqueDir: false,
204
- });
163
+ return (0, packageVersionRetrieve_1.retrievePackageVersionMetadata)(project, options, connection);
205
164
  }
206
165
  static getPackage2Fields(connection) {
207
166
  const apiVersion = connection.getApiVersion();
@@ -1,6 +1,6 @@
1
1
  import { Connection, SfProject } from '@salesforce/core';
2
2
  import { ConvertPackageOptions, PackageVersionCreateRequestResult, PackagingSObjects } from '../interfaces';
3
- export declare function findOrCreatePackage2(seedPackage: string, connection: Connection): Promise<string>;
3
+ export declare function findOrCreatePackage2(seedPackage: string, connection: Connection, project?: SfProject): Promise<string>;
4
4
  export declare function convertPackage(pkg: string, connection: Connection, options: ConvertPackageOptions, project?: SfProject): Promise<PackageVersionCreateRequestResult>;
5
5
  /**
6
6
  * Convert the list of command line options to a JSON object that can be used to create an Package2VersionCreateRequest entity.
@@ -29,8 +29,8 @@ const getLogger = () => {
29
29
  }
30
30
  return logger;
31
31
  };
32
- async function findOrCreatePackage2(seedPackage, connection) {
33
- const query = `SELECT Id FROM Package2 WHERE ConvertedFromPackageId = '${seedPackage}'`;
32
+ async function findOrCreatePackage2(seedPackage, connection, project) {
33
+ const query = `SELECT Id, Name FROM Package2 WHERE ConvertedFromPackageId = '${seedPackage}'`;
34
34
  const queryResult = (await connection.tooling.query(query)).records;
35
35
  if (queryResult?.length > 1) {
36
36
  const ids = queryResult.map((r) => r.Id);
@@ -38,6 +38,9 @@ async function findOrCreatePackage2(seedPackage, connection) {
38
38
  }
39
39
  if (queryResult?.length === 1) {
40
40
  // return the package2 object
41
+ if (project) {
42
+ await addPackageAlias(project, queryResult[0].Name, queryResult[0].Id);
43
+ }
41
44
  return queryResult[0].Id;
42
45
  }
43
46
  // Need to create a new Package2
@@ -62,6 +65,9 @@ async function findOrCreatePackage2(seedPackage, connection) {
62
65
  if (!createResult.success) {
63
66
  throw pkgUtils.combineSaveErrors('Package2', 'create', createResult.errors);
64
67
  }
68
+ if (project) {
69
+ await addPackageAlias(project, subscriberResult.Name, createResult.id);
70
+ }
65
71
  return createResult.id;
66
72
  }
67
73
  exports.findOrCreatePackage2 = findOrCreatePackage2;
@@ -71,7 +77,7 @@ async function convertPackage(pkg, connection, options, project) {
71
77
  if (options.wait) {
72
78
  maxRetries = (60 / pkgUtils.POLL_INTERVAL_SECONDS) * options.wait.minutes;
73
79
  }
74
- const packageId = await findOrCreatePackage2(pkg, connection);
80
+ const packageId = await findOrCreatePackage2(pkg, connection, project);
75
81
  const apiVersion = project?.getSfProjectJson()?.get('sourceApiVersion');
76
82
  const request = await createPackageVersionCreateRequest({
77
83
  installationkey: options.installationKey,
@@ -179,7 +185,7 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, project
179
185
  if (isStatusEqualTo(results, [Package2VersionStatus.success])) {
180
186
  // update sfdx-project.json
181
187
  let projectUpdated = false;
182
- if (project && !process.env.SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE) {
188
+ if (project && !kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE')) {
183
189
  projectUpdated = true;
184
190
  const query = `SELECT MajorVersion, MinorVersion, PatchVersion, BuildNumber FROM Package2Version WHERE Id = '${results[0].Package2VersionId}'`;
185
191
  const packageVersionVersionString = await connection.tooling
@@ -238,6 +244,12 @@ async function pollForStatusWithInterval(id, retries, packageId, branch, project
238
244
  });
239
245
  return pollingClient.subscribe();
240
246
  }
247
+ async function addPackageAlias(project, packageName, packageId) {
248
+ if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE')) {
249
+ project.getSfProjectJson().addPackageAlias(packageName, packageId);
250
+ await project.getSfProjectJson().write();
251
+ }
252
+ }
241
253
  /**
242
254
  * Return true if the queryResult.records[0].Status is equal to one of the values in statuses.
243
255
  *
@@ -8,6 +8,7 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.createPackage = exports.createPackageDirEntry = exports.createPackageRequestFromContext = void 0;
10
10
  const core_1 = require("@salesforce/core");
11
+ const kit_1 = require("@salesforce/kit");
11
12
  const pkgUtils = require("../utils/packageUtils");
12
13
  const packageUtils_1 = require("../utils/packageUtils");
13
14
  function createPackageRequestFromContext(project, options) {
@@ -39,7 +40,7 @@ function createPackageDirEntry(project, options) {
39
40
  if (!packageDir) {
40
41
  // no match - create a new one
41
42
  isNew = true;
42
- packageDir = pkgUtils.DEFAULT_PACKAGE_DIR;
43
+ packageDir = { ...pkgUtils.DEFAULT_PACKAGE_DIR };
43
44
  packageDir.path = (0, packageUtils_1.replaceIfEmpty)(packageDir.path, options.path);
44
45
  }
45
46
  if (packageDirs.length === 0) {
@@ -69,7 +70,7 @@ async function createPackage(connection, project, options) {
69
70
  if (!createResult.success) {
70
71
  throw pkgUtils.combineSaveErrors('Package2', 'create', createResult.errors);
71
72
  }
72
- if (!process.env.SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE) {
73
+ if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_CREATE')) {
73
74
  const packageDirectory = createPackageDirEntry(project, options);
74
75
  project.getSfProjectJson().addPackageDirectory(packageDirectory);
75
76
  project.getSfProjectJson().addPackageAlias(options.name, createResult.id);
@@ -498,7 +498,7 @@ class PackageVersion {
498
498
  return updateResult;
499
499
  }
500
500
  async updateProjectWithPackageVersion(results) {
501
- if (!process.env.SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE) {
501
+ if (!kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_CREATE')) {
502
502
  // get the newly created package version from the server
503
503
  const versionResult = (await this.connection.tooling.query(`SELECT Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber FROM Package2Version WHERE SubscriberPackageVersionId='${results.SubscriberPackageVersionId}'`)).records[0];
504
504
  const aliases = this.project.getAliasesFromPackageId(results.Package2Id);
@@ -221,7 +221,7 @@ class PackageVersionCreate {
221
221
  * @private
222
222
  */
223
223
  async createPackageVersionCreateRequestFromOptions() {
224
- const preserveFiles = !!(this.options.preserve ?? process.env.SFDX_PACKAGE2_VERSION_CREATE_PRESERVE);
224
+ const preserveFiles = !!(this.options.preserve ?? kit_1.env.getBoolean('SFDX_PACKAGE2_VERSION_CREATE_PRESERVE'));
225
225
  const uniqueHash = (0, packageUtils_1.uniqid)({ template: `${this.packageId}-%s` });
226
226
  const packageVersTmpRoot = path.join(os.tmpdir(), `${uniqueHash}`);
227
227
  const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
@@ -858,6 +858,7 @@ const packageXmlStringToPackageXmlJson = (rawXml) => {
858
858
  // make sure types and members is always an array
859
859
  isArray: (name) => ['types', 'members'].includes(name),
860
860
  });
861
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
861
862
  return parser.parse(rawXml).Package;
862
863
  };
863
864
  exports.packageXmlStringToPackageXmlJson = packageXmlStringToPackageXmlJson;
@@ -0,0 +1,11 @@
1
+ import { Connection, SfProject } from '@salesforce/core';
2
+ import { PackageVersionMetadataDownloadOptions, PackageVersionMetadataDownloadResult } from '../interfaces';
3
+ /**
4
+ * 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.
5
+ *
6
+ * @param project
7
+ * @param options {@link PackageVersionMetadataDownloadOptions}
8
+ * @param connection
9
+ * @returns
10
+ */
11
+ export declare function retrievePackageVersionMetadata(project: SfProject, options: PackageVersionMetadataDownloadOptions, connection: Connection): Promise<PackageVersionMetadataDownloadResult>;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retrievePackageVersionMetadata = void 0;
4
+ /*
5
+ * Copyright (c) 2023, salesforce.com, inc.
6
+ * All rights reserved.
7
+ * Licensed under the BSD 3-Clause license.
8
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
9
+ */
10
+ const path = require("path");
11
+ const fs = require("fs");
12
+ const core_1 = require("@salesforce/core");
13
+ const source_deploy_retrieve_1 = require("@salesforce/source-deploy-retrieve");
14
+ const kit_1 = require("@salesforce/kit");
15
+ const packageUtils_1 = require("../utils/packageUtils");
16
+ const packageCreate_1 = require("./packageCreate");
17
+ const package_1 = require("./package");
18
+ const packageVersion_1 = require("./packageVersion");
19
+ core_1.Messages.importMessagesDirectory(__dirname);
20
+ const messages = core_1.Messages.loadMessages('@salesforce/packaging', 'package');
21
+ let logger;
22
+ const getLogger = () => {
23
+ if (!logger) {
24
+ logger = core_1.Logger.childFromRoot('packageVersionRetrieve');
25
+ }
26
+ return logger;
27
+ };
28
+ /**
29
+ * 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.
30
+ *
31
+ * @param project
32
+ * @param options {@link PackageVersionMetadataDownloadOptions}
33
+ * @param connection
34
+ * @returns
35
+ */
36
+ async function retrievePackageVersionMetadata(project, options, connection) {
37
+ // Validate the destination path is suitable to extract package version metadata (must be new or empty)
38
+ const destinationFolder = options.destinationFolder ?? 'force-app';
39
+ if (path.isAbsolute(destinationFolder)) {
40
+ throw messages.createError('sourcesDownloadDirectoryMustBeRelative');
41
+ }
42
+ const destinationPath = path.join(project.getPath(), destinationFolder);
43
+ if (!fs.existsSync(destinationPath)) {
44
+ fs.mkdirSync(destinationPath, { recursive: true });
45
+ }
46
+ if (!(0, packageUtils_1.isPackageDirectoryEffectivelyEmpty)(destinationPath)) {
47
+ throw messages.createError('sourcesDownloadDirectoryNotEmpty');
48
+ }
49
+ // Get the MetadataZip URL from the MetadataPackageVersion record
50
+ const subscriberPackageVersionId = project.getPackageIdFromAlias(options.subscriberPackageVersionId) ?? options.subscriberPackageVersionId;
51
+ const versionInfo = (await connection.tooling
52
+ .sobject('MetadataPackageVersion')
53
+ .retrieve(subscriberPackageVersionId));
54
+ if (!versionInfo.MetadataZip) {
55
+ throw messages.createError('unableToAccessMetadataZip');
56
+ }
57
+ const responseBase64 = await connection.tooling.request(versionInfo.MetadataZip, {
58
+ encoding: 'base64',
59
+ });
60
+ const buffer = Buffer.from(responseBase64, 'base64');
61
+ let tree = await source_deploy_retrieve_1.ZipTreeContainer.create(buffer);
62
+ let dependencies = [];
63
+ // 2GP packages declare their dependencies in dependency-ids.json within the outer zip.
64
+ if (tree.exists('dependency-ids.json')) {
65
+ const f = await tree.readFile('dependency-ids.json');
66
+ const idsObj = JSON.parse(f.toString());
67
+ if (idsObj?.ids) {
68
+ dependencies = idsObj.ids;
69
+ }
70
+ }
71
+ // 2GP packages have the package.zip wrapped in an outer zip.
72
+ if (tree.exists('package.zip')) {
73
+ tree = await source_deploy_retrieve_1.ZipTreeContainer.create(await tree.readFile('package.zip'));
74
+ }
75
+ const zipComponents = source_deploy_retrieve_1.ComponentSet.fromSource({
76
+ fsPaths: ['.'],
77
+ tree,
78
+ })
79
+ .getSourceComponents()
80
+ .toArray();
81
+ const result = await new source_deploy_retrieve_1.MetadataConverter().convert(zipComponents, 'source', {
82
+ type: 'directory',
83
+ outputDirectory: destinationPath,
84
+ genUniqueDir: false,
85
+ });
86
+ await attemptToUpdateProjectJson(project, connection, versionInfo.MetadataPackageId, subscriberPackageVersionId, dependencies, destinationFolder);
87
+ return result;
88
+ }
89
+ exports.retrievePackageVersionMetadata = retrievePackageVersionMetadata;
90
+ /**
91
+ * Attempt to update the sfdx-project.json file to add information about the retrieved sources. If this fails for some reason we
92
+ * print out an error message and return so the user will still see a list of retrieved metadata.
93
+ *
94
+ */
95
+ async function attemptToUpdateProjectJson(project, connection, packageId, subscriberPackageVersionId, dependencyIds, destinationFolder) {
96
+ if (kit_1.env.getBoolean('SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE')) {
97
+ getLogger().info('Skipping sfdx-project.json updates because SF_PROJECT_AUTOUPDATE_DISABLE_FOR_PACKAGE_VERSION_RETRIEVE is set');
98
+ return;
99
+ }
100
+ try {
101
+ const packageInfo = (await connection.tooling
102
+ .sobject('MetadataPackage')
103
+ .retrieve(packageId));
104
+ if (packageInfo.PackageCategory !== 'Package2') {
105
+ getLogger().info(`Skipping sfdx-project.json updates because ${packageId} is not a 2GP package. It has a PackageCategory of '${packageInfo.PackageCategory}'`);
106
+ return;
107
+ }
108
+ const queryOptions = {
109
+ whereClause: `WHERE SubscriberPackageVersionId = '${subscriberPackageVersionId}'`,
110
+ };
111
+ const versions = await packageVersion_1.PackageVersion.queryPackage2Version(connection, queryOptions);
112
+ if (versions.length && versions[0]) {
113
+ const version = versions[0];
114
+ const pkg = new package_1.Package({
115
+ packageAliasOrId: version.Package2Id,
116
+ project,
117
+ connection,
118
+ });
119
+ const pkgData = await pkg.getPackageData();
120
+ if (pkgData) {
121
+ const dirEntry = (0, packageCreate_1.createPackageDirEntry)(project, {
122
+ name: pkgData.Name,
123
+ description: pkgData.Description,
124
+ path: destinationFolder,
125
+ noNamespace: pkgData.NamespacePrefix != null,
126
+ orgDependent: pkgData.IsOrgDependent,
127
+ packageType: pkgData.ContainerOptions,
128
+ errorNotificationUsername: pkgData.PackageErrorUsername,
129
+ });
130
+ const dependencies = dependencyIds.map((dep) => ({ package: dep }));
131
+ const namedDir = {
132
+ ...dirEntry,
133
+ versionNumber: '<set version number>',
134
+ versionName: '<set version name>',
135
+ ancestorVersion: '<set ancestor version>',
136
+ dependencies,
137
+ };
138
+ project.getSfProjectJson().addPackageDirectory(namedDir);
139
+ const packageVersionVersionString = `${version.MajorVersion}.${version.MinorVersion}.${version.PatchVersion}-${version.BuildNumber}`;
140
+ const [alias, writtenId] = await (0, packageUtils_1.generatePackageAliasEntry)(connection, project, subscriberPackageVersionId, packageVersionVersionString, 'main', pkg.getId());
141
+ project.getSfProjectJson().addPackageAlias(alias, writtenId);
142
+ if (pkgData.ContainerOptions === 'Managed' && !project.getSfProjectJson().getContents().namespace) {
143
+ project.getSfProjectJson().getContents().namespace = pkgData.NamespacePrefix;
144
+ }
145
+ await project.getSfProjectJson().write();
146
+ }
147
+ else {
148
+ getLogger().warn(`Failed to update sfdx-project.json. Could not find package for ${version.Package2Id}. This should never happen.`);
149
+ }
150
+ }
151
+ else {
152
+ getLogger().info(`Could not find Package2Version record for ${subscriberPackageVersionId}. No updates to sfdx-project.json will be made.`);
153
+ }
154
+ }
155
+ catch (e) {
156
+ const msg = e instanceof Error ? e.message : e;
157
+ getLogger().error(`Encountered error trying to update sfdx-project.json after retrieving package version metadata: ${msg}`);
158
+ }
159
+ }
160
+ //# sourceMappingURL=packageVersionRetrieve.js.map
@@ -78,6 +78,7 @@ const profileStringToProfile = (profileString) => {
78
78
  numberParseOptions: { leadingZeros: false, hex: false },
79
79
  isArray: (name) => rewriteProps.includes(name),
80
80
  });
81
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
81
82
  return parser.parse(profileString).Profile;
82
83
  };
83
84
  exports.profileStringToProfile = profileStringToProfile;
@@ -111,11 +111,11 @@ export declare function copyDescriptorProperties(packageDescriptorJson: PackageD
111
111
  export declare function replaceIfEmpty<T>(value: T, replacement: T): T;
112
112
  /**
113
113
  * Brand new SFDX projects contain a force-app directory tree contiaining empty folders
114
- * and a few .eslint.json files. We still want to consider such a directory tree
114
+ * and a few .eslintrc.json files. We still want to consider such a directory tree
115
115
  * as 'empty' for the sake of operations like downloading package version metadata.
116
116
  *
117
117
  * @param directory The absolute path to a directory
118
118
  * @returns true if the directory contains nothing except empty directories or
119
- * directories containing only an .eslint.json file.
119
+ * directories containing only an .eslintrc.json file.
120
120
  */
121
121
  export declare function isPackageDirectoryEffectivelyEmpty(directory: string): boolean;
@@ -410,12 +410,12 @@ function replaceIfEmpty(value, replacement) {
410
410
  exports.replaceIfEmpty = replaceIfEmpty;
411
411
  /**
412
412
  * Brand new SFDX projects contain a force-app directory tree contiaining empty folders
413
- * and a few .eslint.json files. We still want to consider such a directory tree
413
+ * and a few .eslintrc.json files. We still want to consider such a directory tree
414
414
  * as 'empty' for the sake of operations like downloading package version metadata.
415
415
  *
416
416
  * @param directory The absolute path to a directory
417
417
  * @returns true if the directory contains nothing except empty directories or
418
- * directories containing only an .eslint.json file.
418
+ * directories containing only an .eslintrc.json file.
419
419
  */
420
420
  function isPackageDirectoryEffectivelyEmpty(directory) {
421
421
  if (!fs.lstatSync(directory).isDirectory()) {
@@ -424,7 +424,7 @@ function isPackageDirectoryEffectivelyEmpty(directory) {
424
424
  const entries = fs.readdirSync(directory, { withFileTypes: true });
425
425
  return entries.every((entry) => entry.isDirectory()
426
426
  ? isPackageDirectoryEffectivelyEmpty((0, path_1.join)(directory, entry.name))
427
- : entry.name === '.eslint.json');
427
+ : entry.name === '.eslintrc.json');
428
428
  }
429
429
  exports.isPackageDirectoryEffectivelyEmpty = isPackageDirectoryEffectivelyEmpty;
430
430
  //# sourceMappingURL=packageUtils.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/packaging",
3
- "version": "2.3.10",
3
+ "version": "2.4.1",
4
4
  "description": "Packaging library for the Salesforce packaging platform",
5
5
  "main": "lib/exported",
6
6
  "types": "lib/exported.d.ts",
@@ -47,7 +47,7 @@
47
47
  "@salesforce/schemas": "^1.6.0",
48
48
  "@salesforce/source-deploy-retrieve": "^9.7.13",
49
49
  "@salesforce/ts-types": "^2.0.6",
50
- "fast-xml-parser": "^4.2.5",
50
+ "fast-xml-parser": "^4.3.0",
51
51
  "globby": "^11",
52
52
  "graphology": "^0.25.4",
53
53
  "graphology-traversal": "^0.3.1",