Validate the file before loading chain.
This commit is contained in:
@@ -148,7 +148,7 @@ export function buildRootChain(
|
|||||||
|
|
||||||
const configFileChain = emptyChain();
|
const configFileChain = emptyChain();
|
||||||
if (configFile) {
|
if (configFile) {
|
||||||
const result = loadFileChain(configFile, context);
|
const result = loadFileChain(validateFile(configFile), context);
|
||||||
if (!result) return null;
|
if (!result) return null;
|
||||||
|
|
||||||
mergeChain(configFileChain, result);
|
mergeChain(configFileChain, result);
|
||||||
@@ -180,7 +180,7 @@ export function buildRootChain(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (babelrcFile) {
|
if (babelrcFile) {
|
||||||
const result = loadFileChain(babelrcFile, context);
|
const result = loadFileChain(validateFile(babelrcFile), context);
|
||||||
if (!result) return null;
|
if (!result) return null;
|
||||||
|
|
||||||
mergeChain(fileChain, result);
|
mergeChain(fileChain, result);
|
||||||
@@ -231,11 +231,16 @@ function babelrcLoadEnabled(
|
|||||||
return micromatch(pkgData.directories, babelrcPatterns).length > 0;
|
return micromatch(pkgData.directories, babelrcPatterns).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const validateFile = makeWeakCache((file: ConfigFile): ValidatedFile => ({
|
||||||
|
filepath: file.filepath,
|
||||||
|
dirname: file.dirname,
|
||||||
|
options: validate("file", file.options),
|
||||||
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build a config chain for just the programmatic options passed into Babel.
|
* Build a config chain for just the programmatic options passed into Babel.
|
||||||
*/
|
*/
|
||||||
const loadProgrammaticChain = makeChainWalker({
|
const loadProgrammaticChain = makeChainWalker({
|
||||||
init: arg => arg,
|
|
||||||
root: input => buildRootDescriptors(input, "base", createCachedDescriptors),
|
root: input => buildRootDescriptors(input, "base", createCachedDescriptors),
|
||||||
env: (input, envName) =>
|
env: (input, envName) =>
|
||||||
buildEnvDescriptors(input, "base", createCachedDescriptors, envName),
|
buildEnvDescriptors(input, "base", createCachedDescriptors, envName),
|
||||||
@@ -255,18 +260,12 @@ const loadProgrammaticChain = makeChainWalker({
|
|||||||
* Build a config chain for a given file.
|
* Build a config chain for a given file.
|
||||||
*/
|
*/
|
||||||
const loadFileChain = makeChainWalker({
|
const loadFileChain = makeChainWalker({
|
||||||
init: input => validateFile(input),
|
|
||||||
root: file => loadFileDescriptors(file),
|
root: file => loadFileDescriptors(file),
|
||||||
env: (file, envName) => loadFileEnvDescriptors(file)(envName),
|
env: (file, envName) => loadFileEnvDescriptors(file)(envName),
|
||||||
overrides: (file, index) => loadFileOverridesDescriptors(file)(index),
|
overrides: (file, index) => loadFileOverridesDescriptors(file)(index),
|
||||||
overridesEnv: (file, index, envName) =>
|
overridesEnv: (file, index, envName) =>
|
||||||
loadFileOverridesEnvDescriptors(file)(index)(envName),
|
loadFileOverridesEnvDescriptors(file)(index)(envName),
|
||||||
});
|
});
|
||||||
const validateFile = makeWeakCache((file: ConfigFile): ValidatedFile => ({
|
|
||||||
filepath: file.filepath,
|
|
||||||
dirname: file.dirname,
|
|
||||||
options: validate("file", file.options),
|
|
||||||
}));
|
|
||||||
const loadFileDescriptors = makeWeakCache((file: ValidatedFile) =>
|
const loadFileDescriptors = makeWeakCache((file: ValidatedFile) =>
|
||||||
buildRootDescriptors(file, file.filepath, createUncachedDescriptors),
|
buildRootDescriptors(file, file.filepath, createUncachedDescriptors),
|
||||||
);
|
);
|
||||||
@@ -350,25 +349,18 @@ function buildOverrideEnvDescriptors(
|
|||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeChainWalker<
|
function makeChainWalker<ArgT: { options: ValidatedOptions, dirname: string }>({
|
||||||
ArgT,
|
|
||||||
InnerT: { options: ValidatedOptions, dirname: string },
|
|
||||||
>({
|
|
||||||
init,
|
|
||||||
root,
|
root,
|
||||||
env,
|
env,
|
||||||
overrides,
|
overrides,
|
||||||
overridesEnv,
|
overridesEnv,
|
||||||
}: {
|
}: {
|
||||||
init: ArgT => InnerT,
|
root: ArgT => OptionsAndDescriptors,
|
||||||
root: InnerT => OptionsAndDescriptors,
|
env: (ArgT, string) => OptionsAndDescriptors | null,
|
||||||
env: (InnerT, string) => OptionsAndDescriptors | null,
|
overrides: (ArgT, number) => OptionsAndDescriptors,
|
||||||
overrides: (InnerT, number) => OptionsAndDescriptors,
|
overridesEnv: (ArgT, number, string) => OptionsAndDescriptors | null,
|
||||||
overridesEnv: (InnerT, number, string) => OptionsAndDescriptors | null,
|
|
||||||
}): (ArgT, ConfigContext, Set<ConfigFile> | void) => ConfigChain | null {
|
}): (ArgT, ConfigContext, Set<ConfigFile> | void) => ConfigChain | null {
|
||||||
return (arg, context, files = new Set()) => {
|
return (input, context, files = new Set()) => {
|
||||||
const input = init(arg);
|
|
||||||
|
|
||||||
const { dirname } = input;
|
const { dirname } = input;
|
||||||
|
|
||||||
const flattenedConfigs = [];
|
const flattenedConfigs = [];
|
||||||
@@ -442,7 +434,7 @@ function mergeExtendsChain(
|
|||||||
}
|
}
|
||||||
|
|
||||||
files.add(file);
|
files.add(file);
|
||||||
const fileChain = loadFileChain(file, context, files);
|
const fileChain = loadFileChain(validateFile(file), context, files);
|
||||||
files.delete(file);
|
files.delete(file);
|
||||||
|
|
||||||
if (!fileChain) return false;
|
if (!fileChain) return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user