Skip to content

Commit

Permalink
fix: throw on bad presets (#1266)
Browse files Browse the repository at this point in the history
  • Loading branch information
mshanemc committed Mar 29, 2024
1 parent 83c7219 commit 0385629
Showing 1 changed file with 28 additions and 23 deletions.
51 changes: 28 additions & 23 deletions src/registry/variants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/
import * as fs from 'node:fs';
import * as path from 'node:path';
import { Logger, SfProject } from '@salesforce/core';
import { Logger, SfProject, SfProjectJson } from '@salesforce/core';
import { deepFreeze } from '../utils/collections';
import { MetadataRegistry } from './types';
import * as registryData from './metadataRegistry.json';
Expand All @@ -27,32 +27,37 @@ export const getEffectiveRegistry = (input?: RegistryLoadInput): MetadataRegistr
/** read the project to get additional registry customizations and presets */
const loadVariants = ({ projectDir }: RegistryLoadInput = {}): MetadataRegistry => {
const logger = Logger.childFromRoot('variants');
try {
const projJson = SfProject.getInstance(projectDir ?? process.cwd()).getSfProjectJson();

// there might not be any customizations in a project, so we default to the emptyRegistry
const customizations = projJson.get<MetadataRegistry>('registryCustomizations') ?? emptyRegistry;
const presets = projJson.get<string[]>('registryPresets') ?? [];
if (Object.keys(customizations.types).length > 0) {
logger.debug(
`found registryCustomizations for types [${Object.keys(customizations.types).join(
','
)}] in ${projJson.getPath()}`
);
}
if (presets.length > 0) {
logger.debug(`using registryPresets [${presets.join(',')}] in ${projJson.getPath()}`);
}
const registryFromPresets = presets.reduce<MetadataRegistry>(
(prev, curr) => firstLevelMerge(prev, loadPreset(curr)),
emptyRegistry
);
return firstLevelMerge(registryFromPresets, customizations);
} catch (e) {
const projJson = maybeGetProject(projectDir);
if (!projJson) {
logger.debug('no project found, using standard registry');
// there might not be a project at all and that's ok
return emptyRegistry;
}

// there might not be any customizations in a project, so we default to the emptyRegistry
const customizations = projJson.get<MetadataRegistry>('registryCustomizations') ?? emptyRegistry;
const presets = projJson.get<string[]>('registryPresets') ?? [];
if (Object.keys(customizations.types).length > 0) {
logger.debug(
`found registryCustomizations for types [${Object.keys(customizations.types).join(',')}] in ${projJson.getPath()}`
);
}
if (presets.length > 0) {
logger.debug(`using registryPresets [${presets.join(',')}] in ${projJson.getPath()}`);
}
const registryFromPresets = presets.reduce<MetadataRegistry>(
(prev, curr) => firstLevelMerge(prev, loadPreset(curr)),
emptyRegistry
);
return firstLevelMerge(registryFromPresets, customizations);
};

const maybeGetProject = (projectDir?: string): SfProjectJson | undefined => {
try {
return SfProject.getInstance(projectDir ?? process.cwd()).getSfProjectJson();
} catch (e) {
return undefined;
}
};

// TODO: this type should maybe live somewhere else and be part of the sfdx-project schema
Expand Down

0 comments on commit 0385629

Please sign in to comment.