venmjs
Version:
This is a tool ๐ง that can be installed in your terminal at any time โ๏ธ it was made for beginners and even for experts, for his utilities, and for a simple creation process ๐งจ. Every web developer knows how frustrating is to deal with the creation of a ne
121 lines (89 loc) โข 4.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _execa = _interopRequireDefault(require("execa"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _nodeBanner = _interopRequireDefault(require("node-banner"));
var _helpers = require("../../utils/helpers");
var _validate = require("../../utils/validate");
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); }); }; }
/**
* @param {String} configFile - File whose content is to be read
* @returns {String[]}
* Make data directory for mongo container to mount in order to persist the database.
* @returns {void}
* Launch multiple containers with docker-compose (client, server and mongo client)
* @returns {Promise<void>}
*/
var getFileContent = function getFileContent(configFile) {
// Holds reference to the path where docker-config files reside
var dockerConfigTemplatePath = _path["default"].join(__dirname, '..', '..', 'templates', 'docker', configFile);
return (0, _helpers.readFileContent)(dockerConfigTemplatePath);
};
var _default = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var dockerComposeTemplate, dockerFileTemplate, clientDockerFilePath, serverDockerFilePath, serverDockerIgnorePath, clientDockerIgnorePath, dockerIgnoreContent;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _nodeBanner["default"])('VENM', 'Docker process is starting ๐ณ', 'blue', 'white');
case 2:
_context.next = 4;
return (0, _validate.validateInstallation)('docker');
case 4:
dockerComposeTemplate = getFileContent('docker-compose.yml');
dockerFileTemplate = getFileContent('Dockerfile');
clientDockerFilePath = _path["default"].join('client', 'Dockerfile');
if (!_fs["default"].existsSync(clientDockerFilePath)) {
// docker-compose.yml
dockerComposeTemplate[4] = "".concat(' '.repeat(4), "command: bash -c \"npm install && npm i mongoose && npm run dev\"");
dockerComposeTemplate[9] = "".concat(' '.repeat(6), "- \"8080:8080\"");
_fs["default"].writeFileSync(clientDockerFilePath, dockerFileTemplate.join('\n'));
}
if (!_fs["default"].existsSync('server')) {
_context.next = 24;
break;
}
// Create Dockerfile for server directory
serverDockerFilePath = _path["default"].join('server', 'Dockerfile');
if (!_fs["default"].existsSync(serverDockerFilePath)) {
_fs["default"].writeFileSync(serverDockerFilePath, dockerFileTemplate.join('\n'));
} // Create .dockerignore within server directory
serverDockerIgnorePath = _path["default"].join('server', '.dockerignore');
clientDockerIgnorePath = _path["default"].join('client', '.dockerignore');
if (!_fs["default"].existsSync(serverDockerIgnorePath)) {
_fs["default"].writeFileSync(serverDockerIgnorePath, 'node_modules');
}
if (!_fs["default"].existsSync(clientDockerIgnorePath)) {
dockerIgnoreContent = 'node_modules\ndist';
_fs["default"].writeFileSync(clientDockerIgnorePath, "".concat(dockerIgnoreContent));
} // Create docker-compose.yml at project root
if (!_fs["default"].existsSync('docker-compose.yml')) {
_fs["default"].writeFileSync('docker-compose.yml', dockerComposeTemplate.join('\n'));
}
_context.prev = 16;
_context.next = 19;
return _execa["default"].command('docker-compose up', {
stdio: 'inherit'
});
case 19:
_context.next = 24;
break;
case 21:
_context.prev = 21;
_context.t0 = _context["catch"](16);
process.exit(1);
case 24:
case "end":
return _context.stop();
}
}
}, _callee, null, [[16, 21]]);
}));
exports["default"] = _default;