silvie
Version:
Typescript Back-end Framework
129 lines (128 loc) • 4.58 kB
JavaScript
;
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;