export async function handler()

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);
}