@code-pushup/cli
Version:
A CLI to run all kinds of code quality measurements to align your team with company goals
56 lines • 2.56 kB
JavaScript
import { autoloadRc, readRcByPath } from '@code-pushup/core';
import { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, uploadConfigSchema, validate, } from '@code-pushup/models';
import { logger, pluralizeToken } from '@code-pushup/utils';
function buildPersistConfig(cliPersist, rcPersist) {
return {
outputDir: cliPersist?.outputDir ??
rcPersist?.outputDir ??
DEFAULT_PERSIST_OUTPUT_DIR,
filename: cliPersist?.filename ?? rcPersist?.filename ?? DEFAULT_PERSIST_FILENAME,
format: normalizeFormats(cliPersist?.format ?? rcPersist?.format ?? DEFAULT_PERSIST_FORMAT),
skipReports: cliPersist?.skipReports ?? rcPersist?.skipReports ?? false,
};
}
export async function coreConfigMiddleware(processArgs) {
const { config, tsconfig, persist: cliPersist, upload: cliUpload, cache: cliCache, ...remainingCliOptions } = processArgs;
return logger.group('Loading configuration', async () => {
// Search for possible configuration file extensions if path is not given
const importedRc = config
? await readRcByPath(config, tsconfig)
: await autoloadRc(tsconfig);
const { persist: rcPersist, upload: rcUpload, ...remainingRcConfig } = importedRc;
const upload = rcUpload == null && cliUpload == null
? undefined
: validate(uploadConfigSchema, { ...rcUpload, ...cliUpload });
const result = {
...(config != null && { config }),
cache: normalizeCache(cliCache),
persist: buildPersistConfig(cliPersist, rcPersist),
...(upload != null && { upload }),
...remainingRcConfig,
...remainingCliOptions,
};
return {
message: `Parsed config: ${summarizeConfig(result)}`,
result,
};
});
}
function summarizeConfig(config) {
return [
pluralizeToken('plugin', config.plugins.length),
pluralizeToken('category', config.categories?.length ?? 0),
`upload ${config.upload ? 'enabled' : 'disabled'}`,
].join(', ');
}
export const normalizeCache = (cache) => {
if (cache == null) {
return { write: false, read: false };
}
if (typeof cache === 'boolean') {
return { write: cache, read: cache };
}
return { write: cache.write ?? false, read: cache.read ?? false };
};
export const normalizeFormats = (formats) => (formats ?? []).flatMap(format => format.split(','));
//# sourceMappingURL=core-config.middleware.js.map