UNPKG

react-templates

Version:

Light weight templates for react -> write html get valid react code

115 lines (108 loc) 3.82 kB
'use strict'; var _ = require('lodash'); var path = require('path'); // const fs = require('fs'); var api = require('./api'); var context = require('./context'); var shell = require('./shell'); var pkg = require('../package.json'); var options = require('./options'); var reactDOMSupport = require('./reactDOMSupport'); var reactTemplates = require('./reactTemplates'); var rtStyle = require('./rtStyle'); var glob = require('glob'); /** * @param {Options} currentOptions * @return {number} */ function executeOptions(currentOptions) { var ret = 0; var files = currentOptions._; context.options.format = currentOptions.format || 'stylish'; if (currentOptions.version) { console.log('v' + pkg.version); } else if (currentOptions.help) { if (files.length) { console.log(options.generateHelpForOption(files[0])); } else { console.log(options.generateHelp()); } } else if (currentOptions.listTargetVersion) { printVersions(currentOptions); } else if (files.length) { // console.log(files); // console.log(files.length); // const allFiles = _.flatMap(files, f => { // const fp = path.resolve(context.cwd, f); // if (fs.statSync(fp).isDirectory()) { // // TODO: consider removing glob and simply walk the directory // return glob.sync(`${fp}/**/*.rt`, {cwd: context.cwd}); // } // return fp; // }); var allFiles = _.flatMap(files, function (f) { return glob.sync(f, { cwd: context.cwd }); }); // console.log(allFiles.length); _.forEach(allFiles, handleSingleFile.bind(this, currentOptions)); ret = shell.printResults(context); } else { console.log(options.generateHelp()); } return ret; } function printVersions(currentOptions) { var ret = Object.keys(reactDOMSupport); if (currentOptions.format === 'json') { console.log(JSON.stringify(ret, undefined, 2)); } else { console.log(ret.join(', ')); } } /** * @param {Options} currentOptions * @param {string} filename file name to process */ function handleSingleFile(currentOptions, filename) { try { var sourceExt = path.extname(filename); var outputFilename = void 0; if (sourceExt === '.rt') { outputFilename = filename + (currentOptions.modules === 'typescript' ? '.ts' : '.js'); } else if (sourceExt === '.jsrt') { outputFilename = filename.replace(/\.jsrt$/, '.js'); currentOptions = _.assign({}, currentOptions, { modules: 'jsrt' }); } else if (sourceExt === '.rts') { outputFilename = filename + '.js'; currentOptions = _.assign({}, currentOptions, { modules: 'rts' }); } else { context.error('invalid file, only handle rt/jsrt files', filename); return; } api.convertFile(filename, outputFilename, currentOptions, context); } catch (e) { context.error(e.message, filename, e.line, e.column, e.startOffset, e.endOffset); } } /** * Executes the CLI based on an array of arguments that is passed in. * @param {string|Array|Object} args The arguments to process. * @returns {int} The exit code for the operation. */ function execute(args) { try { var currentOptions = options.parse(args); return executeOptions(currentOptions); } catch (error) { console.error(error.message); return 1; } } module.exports = { context: context, execute: execute, executeOptions: executeOptions, handleSingleFile: handleSingleFile, convertTemplateToReact: reactTemplates.convertTemplateToReact, convertStyle: rtStyle.convert };