@zup-it/beagle-backend-cli
Version:
CLI for Beagle Backend using TypeScript
748 lines (644 loc) • 30.6 kB
JavaScript
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./src/commands/generate-screen/index.ts":
/*!***********************************************!*\
!*** ./src/commands/generate-screen/index.ts ***!
\***********************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.generateScreen = void 0;
const process_1 = __webpack_require__(/*! process */ "process");
const promises_1 = __importDefault(__webpack_require__(/*! fs/promises */ "fs/promises"));
const utils_1 = __webpack_require__(/*! ../../utils */ "./src/utils/index.ts");
const utils_2 = __webpack_require__(/*! ../utils */ "./src/commands/utils/index.ts");
const screen_1 = __webpack_require__(/*! ./screen */ "./src/commands/generate-screen/screen.ts");
const generateScreen = async (screenName, options) => {
utils_1.logger.info('Beagle TypeScript CLI: Generate Screen:');
utils_1.logger.info(`- Preparing to generate screen: "${screenName}"...`);
if (!(0, utils_2.folderNameIsValid)(screenName)) {
utils_1.logger.error(`The screen name, "${screenName}",is not valid!`);
(0, process_1.exit)(1);
}
utils_1.logger.info('- Validating configuration file...');
const configFileExists = await (0, utils_2.pathExists)(`${(0, process_1.cwd)()}/beagle-ts.json`);
if (!configFileExists) {
utils_1.logger.error('This is not a Beagle Backend TypeScript Project! (Configuration file "beagle-ts.json" not found!)');
(0, process_1.exit)(1);
}
const configs = await (0, utils_2.getProjectConfigsFile)();
const pathToCreate = `${configs.screensFolderPath}/${screenName}.tsx`;
try {
utils_1.logger.info('- Generating screen code from boilerplate...');
const generatedScreenCode = await (0, screen_1.generateScreenCodeFromBoilerplate)(screenName, options);
utils_1.logger.info('- Writing screen file...');
await promises_1.default.writeFile(pathToCreate, generatedScreenCode);
utils_1.logger.info('- Updating routes...');
await (0, screen_1.updateRouteFile)(screenName, pathToCreate, configs);
}
catch (error) {
utils_1.logger.error(error);
(0, process_1.exit)(1);
}
utils_1.logger.success(`Screen created under this location: "${pathToCreate}"`);
(0, process_1.exit)();
};
exports.generateScreen = generateScreen;
/***/ }),
/***/ "./src/commands/generate-screen/screen.ts":
/*!************************************************!*\
!*** ./src/commands/generate-screen/screen.ts ***!
\************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.updateRouteFile = exports.generateScreenCodeFromBoilerplate = void 0;
const path_1 = __importDefault(__webpack_require__(/*! path */ "path"));
const promises_1 = __importDefault(__webpack_require__(/*! fs/promises */ "fs/promises"));
const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
const fs_extra_1 = __webpack_require__(/*! fs-extra */ "fs-extra");
const utils_1 = __webpack_require__(/*! ../../utils */ "./src/utils/index.ts");
const generateScreenCodeFromBoilerplate = async (screenName, options) => {
const formattedScreenName = (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(screenName));
const screenProps = {
...(options.withRouteParams ? { routeParams: { your: 'routeParams' } } : {}),
...(options.withHeaders ? { headers: { your: 'headers' } } : {}),
...(options.withBody ? { body: { your: 'body' } } : {}),
...(options.withQuery ? { query: { your: 'query' } } : {}),
...(options.withNavigationContext ? { navigationContext: { your: 'navigationContext' } } : {}),
};
const screenHasProps = Object.keys(screenProps).length > 0;
const screenPropsName = `${formattedScreenName}Props`;
const expressionsToReplace = [
{
expression: '// [generated-screen-import-screen]',
newText: screenHasProps ? 'import { Screen } from \'@zup-it/beagle-backend-express\'' : '',
},
{
expression: '// [generated-screen-props]',
newText: screenHasProps
? `\r\ninterface ${screenPropsName}${JSON.stringify(screenProps, null, 2)}\r\n`
: '',
},
{
expression: 'GeneratedScreenName',
newText: `${formattedScreenName}${screenHasProps ? `: Screen<${screenPropsName}>` : ''}`,
},
{
expression: '[formatted-screen-name]',
newText: formattedScreenName,
},
];
let screenBoilerplateContent = (await promises_1.default.readFile(path_1.default.resolve(__dirname, 'templates/screen/index.tsx'))).toString('utf8');
screenBoilerplateContent = expressionsToReplace.reduce((content, current) => (content = content.replaceAll(current.expression, current.newText)), screenBoilerplateContent);
return screenBoilerplateContent;
};
exports.generateScreenCodeFromBoilerplate = generateScreenCodeFromBoilerplate;
const updateRouteFile = async (screenName, screenPath, configs) => {
try {
const routesFileExists = await (0, fs_extra_1.pathExists)(configs.routes.filePath);
if (routesFileExists) {
const routesFileContent = (await promises_1.default.readFile(configs.routes.filePath)).toString('utf8');
const updatedCode = getUpdatedRoutesFileCode(routesFileContent, screenName, screenPath, configs);
await promises_1.default.writeFile(configs.routes.filePath, updatedCode);
utils_1.logger.info('- Routes file updated!');
}
}
catch (error) {
utils_1.logger.error(error);
utils_1.logger.error('ERROR - Could not update routes file');
}
};
exports.updateRouteFile = updateRouteFile;
const getUpdatedRoutesFileCode = (routesFileContent, screenName, screenPath, configs) => {
const varCodeBlock = routesFileContent.match(new RegExp(`${configs.routes.varName}.*?{([\\s\\S]*?)}`, 'gm'));
const formattedName = (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(screenName));
if (varCodeBlock && varCodeBlock.length) {
const routes = varCodeBlock[0].match(/'.*?':.*?[,|\n]/gm);
const importsCode = routesFileContent.match(/import {.*} from '.*?'\n/gm);
if (routes && routes.length && importsCode && importsCode.length) {
const onlyFolderPathRegExp = /\/[^\/]+$|\/$/gm;
let relativePath = path_1.default.relative(screenPath.replaceAll(onlyFolderPathRegExp, ''), configs.routes.filePath.replaceAll(onlyFolderPathRegExp, '')).replaceAll('\\', '/');
relativePath = `${relativePath ? '' : '.'}/${screenName}`;
const lastImport = importsCode[importsCode.length - 1];
const newImport = `${lastImport}import { ${formattedName} } from '${relativePath}'\r\n`;
routesFileContent = routesFileContent.replaceAll(lastImport, newImport);
const lastRoute = routes[routes.length - 1];
const lastRouteLastChar = lastRoute[lastRoute.length - 1] === ',' ? '' : ',';
const newRoute = `${lastRoute}${lastRouteLastChar}\r\n '/${screenName}': ${formattedName},`;
routesFileContent = routesFileContent.replaceAll(lastRoute, newRoute);
return routesFileContent;
}
throw new Error('ERROR - Could not find the routes declaration under the routes var defined on the config file.');
}
throw new Error('ERROR - Could not find the routes variable code block');
};
/***/ }),
/***/ "./src/commands/index.ts":
/*!*******************************!*\
!*** ./src/commands/index.ts ***!
\*******************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
__exportStar(__webpack_require__(/*! ./generate-screen */ "./src/commands/generate-screen/index.ts"), exports);
__exportStar(__webpack_require__(/*! ./new */ "./src/commands/new/index.ts"), exports);
__exportStar(__webpack_require__(/*! ./start */ "./src/commands/start/index.ts"), exports);
/***/ }),
/***/ "./src/commands/new/hierarchy.ts":
/*!***************************************!*\
!*** ./src/commands/new/hierarchy.ts ***!
\***************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.createBeagleTsConfigFile = exports.copyBoilerplateUpdatingFilesContent = void 0;
const path_1 = __importDefault(__webpack_require__(/*! path */ "path"));
const promises_1 = __importDefault(__webpack_require__(/*! fs/promises */ "fs/promises"));
const process_1 = __webpack_require__(/*! process */ "process");
const fs_extra_1 = __importDefault(__webpack_require__(/*! fs-extra */ "fs-extra"));
const BOILERPLATE_PATH = path_1.default.resolve(__dirname, 'templates/boilerplate');
const PROJECT_NAME_PLACEHOLDER = 'beagle-ts-cli-project-name';
const PORT_PLACEHOLDER = 'beagle-ts-cli-port';
const projectFilesToChange = [
{
name: 'package.json',
action: (content, projectName) => content.replace(PROJECT_NAME_PLACEHOLDER, projectName),
},
{
name: 'README.md',
action: (content, projectName, options) => content
.replace(PROJECT_NAME_PLACEHOLDER, projectName)
.replace(PORT_PLACEHOLDER, options.port),
},
];
const copyBoilerplateUpdatingFilesContent = async (newFolderName, options) => {
const boilerplateContent = await promises_1.default.readdir(BOILERPLATE_PATH);
const projectFolder = `${(0, process_1.cwd)()}/${newFolderName}`;
for (const dir of boilerplateContent) {
await fs_extra_1.default.copySync(`${BOILERPLATE_PATH}/${dir}`, `${projectFolder}/${dir}`);
}
for (const file of projectFilesToChange) {
const path = `${projectFolder}/${file.name}`;
let fileContent = (await promises_1.default.readFile(path)).toString('utf8');
fileContent = file.action(fileContent, newFolderName, options);
await promises_1.default.writeFile(path, fileContent);
}
};
exports.copyBoilerplateUpdatingFilesContent = copyBoilerplateUpdatingFilesContent;
const createBeagleTsConfigFile = async (projectName, options) => {
const { port, basePath } = options;
const projectFolder = `${(0, process_1.cwd)()}/${projectName}`;
await promises_1.default.writeFile(`${projectFolder}/beagle-ts.json`, JSON.stringify({
projectName,
port,
basePath,
screensFolderPath: 'src/screens',
routes: {
filePath: 'src/screens/index.ts',
varName: 'routes',
},
}, null, 2));
};
exports.createBeagleTsConfigFile = createBeagleTsConfigFile;
/***/ }),
/***/ "./src/commands/new/index.ts":
/*!***********************************!*\
!*** ./src/commands/new/index.ts ***!
\***********************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.newProject = void 0;
const process_1 = __webpack_require__(/*! process */ "process");
const utils_1 = __webpack_require__(/*! ../../utils */ "./src/utils/index.ts");
const utils_2 = __webpack_require__(/*! ../utils */ "./src/commands/utils/index.ts");
const path_1 = __webpack_require__(/*! ../utils/path */ "./src/commands/utils/path.ts");
const hierarchy_1 = __webpack_require__(/*! ./hierarchy */ "./src/commands/new/hierarchy.ts");
const newProject = async (projectName, options) => {
utils_1.logger.info('Beagle TypeScript CLI: Creating New Project:');
if (!(0, utils_2.folderNameIsValid)(projectName)) {
utils_1.logger.error('The project name is not valid for a folder name!');
(0, process_1.exit)(1);
}
if (await (0, utils_2.pathExists)(projectName)) {
utils_1.logger.error('There is already a folder with the same name!');
(0, process_1.exit)(1);
}
utils_1.logger.info(`1 - Beagle: Preparing to create the project: "${projectName}"...`);
await (0, path_1.createFolder)(projectName);
utils_1.logger.info('2 - Beagle: Creating new files...');
await (0, hierarchy_1.copyBoilerplateUpdatingFilesContent)(projectName, options);
utils_1.logger.info('3 - Beagle: Creating configuration file...');
await (0, hierarchy_1.createBeagleTsConfigFile)(projectName, options);
utils_1.logger.info('4 - Beagle: Installing dependencies...');
await (0, utils_1.execShellCommand)('npm install', { cwd: `${(0, process_1.cwd)()}/${projectName}` });
utils_1.logger.success(`Beagle: All done! The project was created under the folder: "${projectName}".`);
(0, process_1.exit)();
};
exports.newProject = newProject;
/***/ }),
/***/ "./src/commands/start/index.ts":
/*!*************************************!*\
!*** ./src/commands/start/index.ts ***!
\*************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.startServer = exports.hotReloadingString = void 0;
const child_process_1 = __webpack_require__(/*! child_process */ "child_process");
const utils_1 = __webpack_require__(/*! ../../utils */ "./src/utils/index.ts");
const utils_2 = __webpack_require__(/*! ../utils */ "./src/commands/utils/index.ts");
const websocket_1 = __webpack_require__(/*! ./websocket */ "./src/commands/start/websocket.ts");
/**
* String expected by the hot reloading service (cli: start) for identifying a server restart.
*
* @privateRemarks if you change this, don't forget to also change the variable of same name in the module "core".
*/
exports.hotReloadingString = '__[HOT RELOADING: SERVER_STARTED]__';
const defaultEntrypoint = 'src/index.ts';
async function startServer({ hotReloadingDisabled, hotReloadingPort, entrypoint }) {
entrypoint ??= defaultEntrypoint;
const isEntrypointValid = await (0, utils_2.pathExists)(entrypoint);
if (!isEntrypointValid) {
utils_1.logger.error(`Could not find file "${entrypoint}". Aborting. Please make to sure to run this command at the root of a Beagle Backend TS project.`);
process.exit(1);
}
if (!hotReloadingDisabled) {
(0, websocket_1.startWS)(hotReloadingPort ?? 3001);
}
const tsNodeDev = (0, child_process_1.spawn)('ts-node-dev', ['--transpile-only', entrypoint], { env: { ...process.env, HOT_RELOADING: `${!hotReloadingDisabled}` } });
tsNodeDev.stdout.on('data', (data) => {
const text = String.fromCharCode.apply(null, data);
if (text.startsWith(exports.hotReloadingString) && !hotReloadingDisabled) {
(0, websocket_1.reloadConnectedDevices)();
}
else
process.stdout.write(data);
});
tsNodeDev.stderr.pipe(process.stderr);
}
exports.startServer = startServer;
/***/ }),
/***/ "./src/commands/start/websocket.ts":
/*!*****************************************!*\
!*** ./src/commands/start/websocket.ts ***!
\*****************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reloadConnectedDevices = exports.startWS = void 0;
const ws_1 = __webpack_require__(/*! ws */ "ws");
const utils_1 = __webpack_require__(/*! ../../utils */ "./src/utils/index.ts");
let server = null;
function startWS(port) {
if (server)
return;
server = new ws_1.WebSocketServer({ port });
server.on('listening', () => utils_1.logger.info(`Hot reloading websocket running at ws://localhost:${port}`));
server.on('connection', (ws) => {
ws.on('message', (data) => {
try {
const message = JSON.parse(data.toString());
if (message.platform)
utils_1.logger.info(`${message.platform} connected to the hot reloading websocket.`);
}
catch { }
});
});
}
exports.startWS = startWS;
function reloadConnectedDevices() {
server?.clients.forEach((client) => {
if (client.readyState === ws_1.WebSocket.OPEN) {
client.send('reload');
}
});
}
exports.reloadConnectedDevices = reloadConnectedDevices;
/***/ }),
/***/ "./src/commands/utils/configs.ts":
/*!***************************************!*\
!*** ./src/commands/utils/configs.ts ***!
\***************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getProjectConfigsFile = void 0;
const process_1 = __webpack_require__(/*! process */ "process");
const promises_1 = __importDefault(__webpack_require__(/*! fs/promises */ "fs/promises"));
const getProjectConfigsFile = async () => JSON.parse((await promises_1.default.readFile(`${(0, process_1.cwd)()}/beagle-ts.json`)).toString('utf8'));
exports.getProjectConfigsFile = getProjectConfigsFile;
/***/ }),
/***/ "./src/commands/utils/index.ts":
/*!*************************************!*\
!*** ./src/commands/utils/index.ts ***!
\*************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
__exportStar(__webpack_require__(/*! ./configs */ "./src/commands/utils/configs.ts"), exports);
__exportStar(__webpack_require__(/*! ./path */ "./src/commands/utils/path.ts"), exports);
/***/ }),
/***/ "./src/commands/utils/path.ts":
/*!************************************!*\
!*** ./src/commands/utils/path.ts ***!
\************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.createFolder = exports.pathExists = exports.folderNameIsValid = void 0;
const promises_1 = __importDefault(__webpack_require__(/*! fs/promises */ "fs/promises"));
const fs_1 = __webpack_require__(/*! fs */ "fs");
async function executeFsToBooleanPromise(fn) {
try {
await fn;
return true;
}
catch (error) {
return false;
}
}
const folderNameIsValid = (folderName) => (/^[^\s^\x00-\x1f\\?*:"";<>|\/.][^\x00-\x1f\\?*:"";<>|\/]*[^\s^\x00-\x1f\\?*:"";<>|\/.]+$/g).test(folderName);
exports.folderNameIsValid = folderNameIsValid;
const pathExists = async (path) => executeFsToBooleanPromise(promises_1.default.access(path, fs_1.constants.F_OK));
exports.pathExists = pathExists;
const createFolder = async (folderName) => executeFsToBooleanPromise(promises_1.default.mkdir(folderName));
exports.createFolder = createFolder;
/***/ }),
/***/ "./src/index.ts":
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const clear_1 = __importDefault(__webpack_require__(/*! clear */ "clear"));
const commander_1 = __importDefault(__webpack_require__(/*! commander */ "commander"));
const commands_1 = __webpack_require__(/*! ./commands */ "./src/commands/index.ts");
(0, clear_1.default)();
const program = new commander_1.default.Command();
program
.name('beagle-ts')
.description('A command-line tool that helps using Beagle Backend TypeScript by initializing a project and creating new files from templates.')
.usage('[global options] command')
.version('1.0.0');
program
.command('new')
.description('Creates a new Beagle Backend TypeScript project.')
.argument('<project-name>', 'name of the project. eg. "name-of-my-project" (will be the name of the folder).')
.option('-bp, --base-path <string>', 'Base path that will be the root of the API.', '')
.option('-p, --port <number>', 'Port where the service will run.', '3000')
.action(commands_1.newProject);
program
.command('generate-screen')
.alias('gs')
.description('Generates a new Screen under /screens.')
.argument('<screen-name>', 'name of the screen that will be generated. eg. "name-of-my-screen".')
.option('-wrp, --with-route-params', 'The screen will have parameters on the url.')
.option('-wh, --with-headers', 'The screen will expect headers in the request.')
.option('-wb, --with-body', 'The screen will expect the request to have a body. Invalid for "GET" requests.')
.option('-wq, --with-query', 'The screen will expect query parameters in the url.')
.option('-wnc, --with-navigation-context', 'The screen will expect a navigation context.')
.option('-wctx, --with-context', 'A Context that will be made available for this Screen and its children.')
.action(commands_1.generateScreen);
program
.command('start')
.description('Starts the project and watches for file changes. It also starts a hot-reloading websocket server for front-ends to connect to.')
.option('-hrd, --hot-reloading-disabled', 'Disables the hot reloading websocket server.')
.option('-hrp, --hot-reloading-port', 'Changes the port for the hot reloading websocket server (3001 by default).')
.option('-e, --entrypoint', 'Changes the application entrypoint ("src/index.ts" by default).')
.action(commands_1.startServer);
program.parse(process.argv);
/***/ }),
/***/ "./src/utils/index.ts":
/*!****************************!*\
!*** ./src/utils/index.ts ***!
\****************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
__exportStar(__webpack_require__(/*! ./logger */ "./src/utils/logger.ts"), exports);
__exportStar(__webpack_require__(/*! ./shell */ "./src/utils/shell.ts"), exports);
/***/ }),
/***/ "./src/utils/logger.ts":
/*!*****************************!*\
!*** ./src/utils/logger.ts ***!
\*****************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.logger = void 0;
const chalk_1 = __importDefault(__webpack_require__(/*! chalk */ "chalk"));
function createLogger() {
let isEnabled = true;
function log(type, ...args) {
if (isEnabled) {
// eslint-disable-next-line no-console
console[type](...args);
}
}
return {
info: (...args) => log('info', chalk_1.default.cyanBright(...args)),
warn: (...args) => log('warn', chalk_1.default.yellowBright(...args)),
error: (...args) => log('error', chalk_1.default.redBright(...args)),
success: (...args) => log('info', chalk_1.default.greenBright(...args)),
disable: () => isEnabled = false,
enable: () => isEnabled = true,
};
}
exports.logger = createLogger();
/***/ }),
/***/ "./src/utils/shell.ts":
/*!****************************!*\
!*** ./src/utils/shell.ts ***!
\****************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.execShellCommand = void 0;
const child_process_1 = __webpack_require__(/*! child_process */ "child_process");
const _1 = __webpack_require__(/*! . */ "./src/utils/index.ts");
async function execShellCommand(command, options) {
return new Promise((resolve, reject) => {
if (command) {
const process = (0, child_process_1.exec)(command, options, (error, stdout, stderr) => {
stdout && _1.logger.info(stdout);
stderr && _1.logger.error(stderr);
if (error) {
reject(error);
}
});
process.on('close', resolve);
}
else {
reject(new Error('You should provide a valid shell command!'));
}
});
}
exports.execShellCommand = execShellCommand;
/***/ }),
/***/ "chalk":
/*!************************!*\
!*** external "chalk" ***!
\************************/
/***/ ((module) => {
module.exports = require("chalk");
/***/ }),
/***/ "clear":
/*!************************!*\
!*** external "clear" ***!
\************************/
/***/ ((module) => {
module.exports = require("clear");
/***/ }),
/***/ "commander":
/*!****************************!*\
!*** external "commander" ***!
\****************************/
/***/ ((module) => {
module.exports = require("commander");
/***/ }),
/***/ "fs-extra":
/*!***************************!*\
!*** external "fs-extra" ***!
\***************************/
/***/ ((module) => {
module.exports = require("fs-extra");
/***/ }),
/***/ "lodash":
/*!*************************!*\
!*** external "lodash" ***!
\*************************/
/***/ ((module) => {
module.exports = require("lodash");
/***/ }),
/***/ "ws":
/*!*********************!*\
!*** external "ws" ***!
\*********************/
/***/ ((module) => {
module.exports = require("ws");
/***/ }),
/***/ "child_process":
/*!********************************!*\
!*** external "child_process" ***!
\********************************/
/***/ ((module) => {
module.exports = require("child_process");
/***/ }),
/***/ "fs":
/*!*********************!*\
!*** external "fs" ***!
\*********************/
/***/ ((module) => {
module.exports = require("fs");
/***/ }),
/***/ "fs/promises":
/*!******************************!*\
!*** external "fs/promises" ***!
\******************************/
/***/ ((module) => {
module.exports = require("fs/promises");
/***/ }),
/***/ "path":
/*!***********************!*\
!*** external "path" ***!
\***********************/
/***/ ((module) => {
module.exports = require("path");
/***/ }),
/***/ "process":
/*!**************************!*\
!*** external "process" ***!
\**************************/
/***/ ((module) => {
module.exports = require("process");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module is referenced by other modules so it can't be inlined
/******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
/******/ exports.beagleTs = __webpack_exports__;
/******/
/******/ })()
;