UNPKG

@zup-it/beagle-backend-cli

Version:

CLI for Beagle Backend using TypeScript

748 lines (644 loc) 30.6 kB
#!/usr/bin/env node /******/ (() => { // 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__; /******/ /******/ })() ;