@shopify/slate
Version:
Slate CLI tools
180 lines (137 loc) • 6.85 kB
JavaScript
;
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"); }); }; }