in fuse-react-gen/acquire-config.ts [18:65]
export async function parseAgainstConfig(
configPath: string,
cli: string,
promptOverride?: (questions: Question[]) => Promise<Answers>): Promise<Arguments> {
const options = await readFileAsObj<YargOptions>(configPath);
const args = yargs.exitProcess(false).fail(ignoreFailure).option(options).parse(cli);
const keys = Object.keys(options);
const missingKeys = keys.filter(key => !args[key]);
const questions = missingKeys.map(key => {
const option = options[key];
return {
type: 'input',
name: key,
message: option.describe,
validate: async x => Promise.resolve<boolean>(option.required ? !!x : true)
};
});
const answers: any = promptOverride ? await promptOverride(questions) : await prompt(questions);
const answerKeys = Object.keys(answers);
const typedAnswers = answerKeys.reduce(
(cur, key) => {
const val = answers[key];
const option = options[key];
return {
...cur,
//key: options[key].type === 'array' ? val.split(',').map(x => x.trim()) : val
[key]: option && option.type === 'array' ? asList(val) : val
};
},
{});
const argKeys = Object.keys(args);
const transformedArgs: any = argKeys.reduce(
(cur, key) => {
const val = args[key];
const transformedVal = typeof val === 'string' ? _.template(val)({ ...args, ...answers, ...stringCases }) : val;
return { ...cur, [key]: transformedVal };
},
{});
return { ...transformedArgs, ...typedAnswers };
}