Skip to content

Commit db46af6

Browse files
fix: use import rather than fs read (#1359)
* fix: presets are static imports * chore: use import rather than fs read * chore: reword * chore: bump core & jsforce-node * chore: update yarn lock * chore: apply shane's suggestion * chore: apply shane advice * feat: export presets * test: update test for presetMap's existence --------- Co-authored-by: mshanemc <[email protected]>
1 parent c6eff37 commit db46af6

File tree

5 files changed

+86
-14
lines changed

5 files changed

+86
-14
lines changed

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,5 @@ export {
100100
RecompositionStrategy,
101101
TransformerStrategy,
102102
} from './registry';
103+
104+
export { presetMap } from './registry/presets/presetMap';

src/registry/presets/presetMap.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright (c) 2023, salesforce.com, inc.
3+
* All rights reserved.
4+
* Licensed under the BSD 3-Clause license.
5+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6+
*/
7+
import { MetadataRegistry } from '../types';
8+
9+
// we have to import all presets explicitly for VSCE's esbuild bundling process
10+
import * as decomposeCustomLabelsBeta from './decomposeCustomLabelsBeta.json';
11+
import * as decomposePermissionSetBeta from './decomposePermissionSetBeta.json';
12+
import * as decomposeSharingRulesBeta from './decomposeSharingRulesBeta.json';
13+
import * as decomposeWorkflowBeta from './decomposeWorkflowBeta.json';
14+
15+
export const presetMap = new Map<string, MetadataRegistry>([
16+
['decomposeCustomLabelsBeta', decomposeCustomLabelsBeta as MetadataRegistry],
17+
['decomposePermissionSetBeta', decomposePermissionSetBeta as MetadataRegistry],
18+
['decomposeSharingRulesBeta', decomposeSharingRulesBeta as MetadataRegistry],
19+
['decomposeWorkflowBeta', decomposeWorkflowBeta as MetadataRegistry],
20+
]);

src/registry/variants.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
* Licensed under the BSD 3-Clause license.
55
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
*/
7-
import * as fs from 'node:fs';
8-
import * as path from 'node:path';
9-
import { Logger, SfProject, SfProjectJson, Lifecycle } from '@salesforce/core';
7+
import { Logger, SfProject, SfProjectJson, Lifecycle, SfError } from '@salesforce/core';
108
import { deepFreeze } from '../utils/collections';
119
import { MetadataRegistry } from './types';
1210
import * as registryData from './metadataRegistry.json';
11+
import { presetMap } from './presets/presetMap';
1312

1413
export type RegistryLoadInput = {
1514
/** The project directory to look at sfdx-project.json file
@@ -76,14 +75,18 @@ const maybeGetProject = (projectDir?: string): SfProjectJson | undefined => {
7675
};
7776

7877
const loadPreset = (preset: string): MetadataRegistry => {
79-
const pathToCheck = path.join(__dirname, 'presets', `${preset}.json`);
80-
81-
try {
82-
const rawPreset = fs.readFileSync(pathToCheck, 'utf-8');
83-
return JSON.parse(rawPreset) as MetadataRegistry;
84-
} catch (e) {
85-
throw new Error(`Failed to load preset ${preset} in ${pathToCheck}`);
78+
const matchedPreset = presetMap.get(preset);
79+
if (matchedPreset) {
80+
return matchedPreset;
8681
}
82+
throw SfError.create({
83+
message: `Failed to load preset "${preset}"`,
84+
name: 'InvalidPreset',
85+
actions: [
86+
`Use a valid preset. Currently available presets are: [${[...presetMap.keys()].join(', ')}]`,
87+
'Updating your CLI may be required to get newer presets',
88+
],
89+
});
8790
};
8891

8992
const emptyRegistry = {

test/registry/presetTesting.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ type RegistryIterator = {
1616
registry: MetadataRegistry;
1717
};
1818

19-
const registriesFromPresets = fs.readdirSync(presetFolder, { withFileTypes: true }).map((file) => ({
20-
name: file.name,
21-
registry: JSON.parse(fs.readFileSync(path.join(file.path, file.name), 'utf-8')) as MetadataRegistry,
22-
}));
19+
const registriesFromPresets = fs
20+
.readdirSync(presetFolder, { withFileTypes: true })
21+
.filter((file) => file.name.endsWith('.json'))
22+
.map((file) => ({
23+
name: file.name,
24+
registry: JSON.parse(fs.readFileSync(path.join(file.path, file.name), 'utf-8')) as MetadataRegistry,
25+
}));
2326

2427
const allMerged = registriesFromPresets.reduce<MetadataRegistry>(
2528
(acc, { registry }) => firstLevelMerge(acc, registry),

yarn.lock

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,26 @@
522522
strip-ansi "^6.0.0"
523523
xml2js "^0.6.2"
524524

525+
"@jsforce/jsforce-node@^3.2.1":
526+
version "3.2.1"
527+
resolved "https://registry.yarnpkg.com/@jsforce/jsforce-node/-/jsforce-node-3.2.1.tgz#00fab05919e0cbe91ae4d873377e56cfbc087b98"
528+
integrity sha512-hjmZQbYVikm6ATmaErOp5NaKR2VofNZsrcGGHrdbGA+bAgpfg/+MA/HzRTb8BvYyPDq3RRc5A8Yk8gx9Vtcrxg==
529+
dependencies:
530+
"@sindresorhus/is" "^4"
531+
"@types/node" "^18.15.3"
532+
abort-controller "^3.0.0"
533+
base64url "^3.0.1"
534+
csv-parse "^5.5.2"
535+
csv-stringify "^6.4.4"
536+
faye "^1.4.0"
537+
form-data "^4.0.0"
538+
fs-extra "^8.1.0"
539+
https-proxy-agent "^5.0.0"
540+
multistream "^3.1.0"
541+
node-fetch "^2.6.1"
542+
strip-ansi "^6.0.0"
543+
xml2js "^0.6.2"
544+
525545
"@nodelib/[email protected]":
526546
version "2.1.5"
527547
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -588,6 +608,30 @@
588608
semver "^7.6.2"
589609
ts-retry-promise "^0.8.1"
590610

611+
"@salesforce/core@^8.1.0":
612+
version "8.1.0"
613+
resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.1.0.tgz#8ee25acdacf9d70a6249907a2fe3503461f18766"
614+
integrity sha512-oItr8cdeMe67glJN3dP1Gh/kasD0DUT6S6RfcLTH32wwuZNQAwMXNgBOCvlskr8nxPZ+YSSw7CVuqYMUmCtUXA==
615+
dependencies:
616+
"@jsforce/jsforce-node" "^3.2.1"
617+
"@salesforce/kit" "^3.1.6"
618+
"@salesforce/schemas" "^1.9.0"
619+
"@salesforce/ts-types" "^2.0.10"
620+
ajv "^8.16.0"
621+
change-case "^4.1.2"
622+
fast-levenshtein "^3.0.0"
623+
faye "^1.4.0"
624+
form-data "^4.0.0"
625+
js2xmlparser "^4.0.1"
626+
jsonwebtoken "9.0.2"
627+
jszip "3.10.1"
628+
pino "^9.2.0"
629+
pino-abstract-transport "^1.2.0"
630+
pino-pretty "^11.2.1"
631+
proper-lockfile "^4.1.2"
632+
semver "^7.6.2"
633+
ts-retry-promise "^0.8.1"
634+
591635
"@salesforce/dev-config@^4.1.0":
592636
version "4.1.0"
593637
resolved "https://registry.yarnpkg.com/@salesforce/dev-config/-/dev-config-4.1.0.tgz#e529576466d074e7a5f1441236510fef123da01e"

0 commit comments

Comments
 (0)