UNPKG

silvie

Version:

Typescript Back-end Framework

129 lines (128 loc) 4.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _project_structure = require("../../helpers/project_structure"); var _log = _interopRequireDefault(require("../../../utils/log")); var _crypto = require("crypto"); var _dotenv = _interopRequireDefault(require("dotenv")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var _default = async () => { const root = process.rootPath; let hasBadDirs = false; Object.keys(_project_structure.directories).forEach(dir => { const dirPath = _path.default.resolve(root, dir); if (!_fs.default.existsSync(dirPath)) { hasBadDirs = true; _fs.default.mkdirSync(dirPath, { recursive: true }); _log.default.info('[Directory Created]', dir); } }); if (hasBadDirs) { (0, _log.default)(''); } let envEmitted = false; let hasBadFiles = false; Object.keys(_project_structure.files).forEach(file => { const filePath = _path.default.resolve(root, file); if (!_fs.default.existsSync(filePath)) { hasBadFiles = true; if (_project_structure.files[file] === 'dotenv') { const appName = _path.default.basename(root); const appHash = (0, _crypto.createHash)('sha256').update(`${appName}${Date.now()}${Math.random()}`).digest('hex'); const content = _fs.default.readFileSync(_path.default.resolve(__dirname, `./samples/dotenv.txt`), 'utf8').replace(/APP_NAME=/, `APP_NAME=${/\s/gi.test(appName) ? `"${appName}"` : appName}`).replace(/APP_KEY=/, `APP_KEY=${appHash}`); _fs.default.writeFileSync(filePath, content, 'utf8'); envEmitted = true; } else { _fs.default.copyFileSync(_path.default.resolve(__dirname, `./samples/${_project_structure.files[file]}.txt`), filePath); } _log.default.info('[File Created]', file); } }); const typesFilePath = _path.default.resolve(root, 'src/bootstrap/types.d.ts'); if (!_fs.default.existsSync(typesFilePath)) { _fs.default.copyFileSync(_path.default.resolve(__dirname, `./samples/types.d.txt`), typesFilePath); _log.default.info('[File Created]', 'src/bootstrap/types.d.ts'); } let envOK = true; if (!envEmitted) { const appName = _path.default.basename(root); const appHash = (0, _crypto.createHash)('sha256').update(`${appName}${Date.now()}${Math.random()}`).digest('hex'); const envPath = _path.default.resolve(root, '.env'); let content = _fs.default.readFileSync(envPath, 'utf8'); const { parsed } = _dotenv.default.config({ path: envPath }); if (!parsed.APP_KEY) { envOK = false; if (parsed.APP_KEY === '') { content = content.replace(/APP_KEY=/, `APP_KEY=${appHash}`); } else { content += `\nAPP_KEY=${appHash}`; } } if (!parsed.APP_PORT) { envOK = false; if (parsed.APP_PORT === '') { content = content.replace(/APP_PORT=/, `APP_PORT=3000`); } else { content += `\nAPP_PORT=3000`; } } if (!parsed.DB_TYPE) { envOK = false; if (parsed.DB_TYPE === '') { content = content.replace(/DB_TYPE=/, `DB_TYPE=mysql`); } else { content += `\nDB_TYPE=mysql`; } } if (!parsed.DB_HOST) { envOK = false; if (parsed.DB_HOST === '') { content = content.replace(/DB_HOST=/, `DB_HOST=localhost`); } else { content += `\nDB_HOST=localhost`; } } if (!parsed.DB_PORT) { envOK = false; if (parsed.DB_PORT === '') { content = content.replace(/DB_PORT=/, `DB_PORT=3306`); } else { content += `\nDB_PORT=3306`; } } if (!parsed.DB_DATABASE) { envOK = false; if (parsed.DB_DATABASE === '') { content = content.replace(/DB_DATABASE=/, `DB_DATABASE=test`); } else { content += `\nDB_DATABASE=test`; } } if (!parsed.DB_USERNAME) { envOK = false; if (parsed.DB_USERNAME === '') { content = content.replace(/DB_USERNAME=/, `DB_USERNAME=root`); } else { content += `\nDB_USERNAME=root`; } } if (!envOK) { _fs.default.writeFileSync(envPath, content, 'utf8'); _log.default.info('[Dotenv]', '.env file has been fixed'); } } if (!(hasBadDirs || hasBadFiles) && envOK) { _log.default.success('[ALL GOOD]', 'There is nothing to be fixed.'); } }; exports.default = _default;