UNPKG

@shopify/slate

Version:
180 lines (137 loc) 6.85 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (program) { var _this = this; program.command('theme [name]').alias('t').description("Generates a new theme directory containing Slate's theme boilerplate.").option('--yarn', 'installs theme dependencies with yarn instead of npm').action(function () { var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(name) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var dirName, answers, workingDirectory, s3Url, root; return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: dirName = name; if (dirName) { _context2.next = 6; break; } _context2.next = 4; return (0, _inquirer.prompt)({ type: 'input', name: 'dirName', message: 'Please enter a directory name for your theme (a new folder will be created):', default: 'theme', validate: function validate(value) { var validateName = value.match(/^[\w^'@{}[\],$=!#().%+~\- ]+$/); if (validateName) { return true; } return 'A directory name is required.'; } }); case 4: answers = _context2.sent; dirName = answers.dirName; case 6: workingDirectory = process.cwd(); s3Url = 'https://sdks.shopifycdn.com/slate/latest/slate-src.zip'; root = (0, _path.join)(workingDirectory, dirName); if (!(0, _fs.existsSync)(root)) { _context2.next = 14; break; } console.log(''); console.error((0, _chalk.red)(' ' + _figures2.default.cross + ' The ' + root + ' directory already exists')); console.log(''); return _context2.abrupt('return', null); case 14: console.log(''); console.log(' This may take some time...'); console.log(''); (0, _fs.mkdirSync)(root); return _context2.abrupt('return', (0, _utils.downloadFromUrl)(s3Url, (0, _path.join)(root, 'slate-theme.zip')).then(function (themeZipFile) { return (0, _utils.unzip)(themeZipFile, root); }).then(function () { console.log(' ' + (0, _chalk.green)(_figures2.default.tick) + ' slate-theme download completed'); var pkg = (0, _path.join)(root, 'package.json'); (0, _utils.writePackageJsonSync)(pkg, dirName); if (options.yarn) { return (0, _utils.startProcess)('yarn', ['add', '@shopify/slate-tools@slate-v0', '--dev', '--exact'], { cwd: root }); } else { return (0, _utils.startProcess)('npm', ['install', '@shopify/slate-tools@slate-v0', '--save-dev', '--save-exact'], { cwd: root }); } }).then(function () { console.log(' ' + (0, _chalk.green)(_figures2.default.tick) + ' devDependencies installed'); console.log(' ' + (0, _chalk.green)(_figures2.default.tick) + ' ' + dirName + ' theme is ready'); console.log(''); return null; }).then(_asyncToGenerator(regeneratorRuntime.mark(function _callee() { var sampleFiles, renamePromiseFactory, promises; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: renamePromiseFactory = function renamePromiseFactory(_ref3) { var oldFile = _ref3.oldFile, newFile = _ref3.newFile, dir = _ref3.dir; return (0, _utils.renameFile)((0, _path.join)(dir, oldFile), (0, _path.join)(dir, newFile)); }; sampleFiles = [{ oldFile: 'config-sample.yml', newFile: 'config.yml', dir: root }, { oldFile: '.gitignore-sample', newFile: '.gitignore', dir: root }]; promises = sampleFiles.map(renamePromiseFactory); _context.prev = 3; _context.next = 6; return Promise.all(promises); case 6: _context.next = 11; break; case 8: _context.prev = 8; _context.t0 = _context['catch'](3); console.error((0, _chalk.red)(' ' + _context.t0)); case 11: return _context.abrupt('return', null); case 12: case 'end': return _context.stop(); } } }, _callee, _this, [[3, 8]]); }))).catch(function (err) { console.error((0, _chalk.red)(' ' + err)); (0, _rimraf2.default)(root, function () { console.log(''); console.log(' Cleaned up theme'); console.log(''); }); })); case 19: case 'end': return _context2.stop(); } } }, _callee2, _this); })); return function (_x) { return _ref.apply(this, arguments); }; }()); }; require('babel-polyfill'); var _fs = require('fs'); var _path = require('path'); var _inquirer = require('inquirer'); var _rimraf = require('rimraf'); var _rimraf2 = _interopRequireDefault(_rimraf); var _chalk = require('chalk'); var _figures = require('figures'); var _figures2 = _interopRequireDefault(_figures); var _utils = require('../utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }