in fuse-react-gen/commands/add.ts [36:90]
export async function handler(argv: ARGV & Arguments, extra?: string[]): Promise<string> {
const { source, target } = argv;
let realTarget = target;
const helpers = { capitalize, camelCase, pascalCase };
if (isDir(source)) {
const configPath = resolve(source, '.react-gen-rc.json');
logger.verbose(`configPath = ${configPath}`);
if (existsSync(configPath)) {
const config: Arguments & { _react_gen_target: string[] | string } = <any>{
...helpers,
...(await parseAgainstConfig(configPath, (extra || process.argv).join(' ')))
};
const genTarget = config._react_gen_target;
if (genTarget) {
logger.info('creating transforms');
const transforms = generateTransformSync(source);
logger.info(`transforms created as ${Object.keys(transforms)}`);
const data = <any>{ ...transforms, ...config };
logger.info(`data = ${Object.keys(data)}`);
const isFolder = Array.isArray(genTarget); // && genTarget.length > 1;
const transformedSource = _.template(source)(data);
realTarget = transformedSource !== source ? resolve(target, basename(transformedSource)) : target;
logger.info(`genTarget = ${genTarget} isFolder=${isFolder}`);
const targetFiles = typeof (genTarget) !== 'string'
? genTarget.reduce((cur, x) => ({ ...cur, [x]: resolve(realTarget, _.template(x)(data)) }), {})
: {
[genTarget]: isDir(target) ? resolve(realTarget, _.template(genTarget)(data)) : realTarget
};
ensurePath(realTarget);
const srcTargets = typeof genTarget !== 'string' ? genTarget : [genTarget];
for (const gen of srcTargets) {
logger.info(`gen = ${gen} src = ${resolve(source, gen)}, target = ${targetFiles[gen]}`);
await transformFile(data, resolve(source, gen), targetFiles[gen]);
}
} else {
ensurePath(realTarget);
await transformFolder(config, source, realTarget);
}
glob.sync(`${realTarget}/**/*.*`, { ignore: `${target}/node_modules/**/*` }).map(x => {
logger.info(`${x} created`);
});
} else {
const config = <Data>yargs.parse(argv._);
await transformFile(config, source, target);
logger.info(`${target} created`);
}
} else {
const config = <Data>yargs.parse(argv._);
await transformFile(config, source, target);
logger.info(`${target} created`);
}
return Promise.resolve(source);
}