@mason-api/cli
Version:
CLI assistant for Mason builder
290 lines (236 loc) • 11.1 kB
JavaScript
;
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);
}
});
}