UNPKG

@mason-api/cli

Version:

CLI assistant for Mason builder

290 lines (236 loc) 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = exports.builder = exports.desc = exports.command = void 0; var _login = require("./login"); var _safe = _interopRequireDefault(require("colors/safe")); var _fs = _interopRequireDefault(require("fs")); var _utils = require("../utils"); var _generator = _interopRequireWildcard(require("@mason-api/generator")); var _lodash = _interopRequireDefault(require("lodash")); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var command = 'generate <format> <project> [component] [pages..]'; exports.command = command; var desc = 'Generate template out of a component page'; exports.desc = desc; var builder = function builder(yargs) { yargs.positional('format', { describe: 'Target file format for compilation', choices: ['html', 'ejs', 'pug', 'php', 'twig', 'erb', 'haml', 'handlebars', 'mustache'] }).positional('project', { describe: 'ID of a project that contains the component' }).positional('component', { describe: 'ID of a component (processes all components by default)', default: '*' }).positional('pages', { describe: 'List of pages to generate (process all pages by default)', default: '*' }).option('embed-data', { alias: 'e', type: 'array', describe: 'Unroll loops and fill interpolations' }).option('data-prefix', { alias: 'p', describe: 'Prefix for all top level variables' }).option('output', { alias: 'o', describe: 'Folder to output the file to', default: '.' }).option('file', { alias: 'f', describe: 'File name of an output file (defaults to page name)' }); }; exports.builder = builder; var handler = /*#__PURE__*/ function () { var _ref = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee3(argv) { var apiKey, verbose, json, project, components, datasourceIds; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.t0 = argv.k; if (_context3.t0) { _context3.next = 5; break; } _context3.next = 4; return (0, _login.getAPIKey)(); case 4: _context3.t0 = _context3.sent; case 5: apiKey = _context3.t0; if (apiKey) { _context3.next = 8; break; } return _context3.abrupt("return", null); case 8: verbose = !!(argv.verbose || argv.f || argv.o); Object.assign(argv, _lodash.default.mapKeys(argv, function (value, key) { return _lodash.default.camelCase(key); })); if (verbose) { console.log(" - Fetching project ".concat(_safe.default.bold(argv.project), "...")); } _context3.prev = 11; _context3.next = 14; return (0, _utils.fetchProject)(apiKey, argv.project, verbose, argv.verbose); case 14: json = _context3.sent; _context3.next = 20; break; case 17: _context3.prev = 17; _context3.t1 = _context3["catch"](11); return _context3.abrupt("return", console.log(_safe.default.red("Could not fetch project ".concat(_safe.default.bold(argv.project), " for api key ").concat(_safe.default.bold(apiKey))))); case 20: if (verbose && argv.component !== '*') { console.log(" - Finding component ".concat(_safe.default.bold(argv.component), "...")); } project = _lodash.default.find(json.projects, ['id', argv.project]); components = argv.component === '*' ? json.components : _lodash.default.find(json.components, ['id', argv.component]); if (!(argv.component && !components.length)) { _context3.next = 25; break; } return _context3.abrupt("return", console.log(_safe.default.red("Could not fetch component ".concat(_safe.default.bold(argv.component), " in project ").concat(_safe.default.bold(argv.project))))); case 25: datasourceIds = []; _lodash.default.forEach(components, function (comp) { _lodash.default.forEach(_lodash.default.get(comp, 'config.data'), function (page, name) { _lodash.default.forEach((0, _generator.getDatasourceIds)(comp.config, name), function (datasourceId) { if (!_lodash.default.includes(datasourceIds, datasourceId)) { datasourceIds.push(datasourceId); } }); }); }); if (!argv.embedData) { _context3.next = 30; break; } _context3.next = 30; return Promise.all(_lodash.default.map(datasourceIds, /*#__PURE__*/ function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee(datasourceId) { var datasource; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!_lodash.default.includes(argv.embedData, datasourceId)) { _context.next = 6; break; } datasource = _lodash.default.find(project.datasources, ['id', datasourceId]); if (verbose) { console.log(" - Fetching datasource ".concat(_safe.default.bold(datasourceId), "...")); } _context.next = 5; return (0, _utils.fetchDatasource)(datasource, argv.verbose); case 5: datasource.data = _context.sent; case 6: case "end": return _context.stop(); } } }, _callee); })); return function (_x2) { return _ref2.apply(this, arguments); }; }())); case 30: _lodash.default.forEach(components, function (component) { var pages = argv.pages[0] === '*' ? Object.keys(component.config.data) : argv.pages; return pages.map( /*#__PURE__*/ function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee2(page) { var template, dir, path; return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (verbose) { console.log(" - Generating ".concat(_safe.default.bold(argv.format), " template for ").concat(_safe.default.bold(page), " page of ").concat(_safe.default.bold(component.name), "...")); } try { template = (0, _generator.default)(component.config, page, { datasources: project.datasources, embedData: argv.format === 'html' ? true : argv.embedData, format: argv.format }); } catch (e) { console.log('Failed to generate file'); if (verbose) { console.log(e); } else { console.log('Set -v option to see the details of exceptions'); } } if (argv.f || argv.o) { dir = _lodash.default.join(_lodash.default.compact([argv.o, argv.pages[0] === '*' ? _lodash.default.snakeCase(component.name) : null]), '/'); path = "".concat(dir, "/").concat(argv.f || page, ".").concat(argv.format); if (verbose) { console.log(" - Writing file ".concat(_safe.default.bold(path), "...")); } mkdirRecursiveSync(dir); _fs.default.writeFileSync(path, template, { encoding: 'utf8', flag: 'w' }); } case 3: case "end": return _context2.stop(); } } }, _callee2); })); return function (_x3) { return _ref3.apply(this, arguments); }; }()); }); case 31: case "end": return _context3.stop(); } } }, _callee3, null, [[11, 17]]); })); return function handler(_x) { return _ref.apply(this, arguments); }; }(); exports.handler = handler; function mkdirRecursiveSync(path) { var paths = path.split('/'); var fullPath = ''; paths.forEach(function (path) { if (fullPath === '') { fullPath = path; } else { fullPath = "".concat(fullPath, "/").concat(path); } if (!_fs.default.existsSync(fullPath)) { _fs.default.mkdirSync(fullPath); } }); }