mihawk
Version:
A tiny & simple mock server tool, support json,js,cjs,ts(typescript).
97 lines (96 loc) • 5.34 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const color_cc_1 = __importDefault(require("color-cc"));
const fs_extra_1 = require("fs-extra");
const consts_1 = require("../../src/consts");
const cli_1 = require("../../src/utils/cli");
const rc_1 = require("../../src/composites/rc");
const print_1 = require("../../src/utils/print");
const init_file_1 = require("../../src/composites/init-file");
const obj_1 = require("../../src/utils/obj");
const callback = function init() {
return __awaiter(this, void 0, void 0, function* () {
const configFileName = `.${consts_1.PKG_NAME}rc`;
yield initRootConfigFileViaCli(configFileName);
const curConfig = yield (0, rc_1.getRcData)(configFileName);
const { mockDir, mockLogicFileType } = curConfig || {};
yield (0, init_file_1.initMockDataDir)(mockDir);
yield (0, init_file_1.initMockRoutesFile)(mockLogicFileType, mockDir);
yield (0, init_file_1.initMockMiddlewareFile)(mockLogicFileType, mockDir);
console.log();
});
};
exports.default = callback;
function initRootConfigFileViaCli(configFileName) {
return __awaiter(this, void 0, void 0, function* () {
configFileName = configFileName.replace(/^\.+/, '.');
const config = Object.assign({}, consts_1.DEFAULT_RC);
let hasRcExisted = false;
let existedExt = '';
for (const ext of ['json', 'js', 'ts']) {
const rcFilePath = path_1.default.join(consts_1.CWD, `./${configFileName}.${ext}`);
if ((0, fs_extra_1.existsSync)(rcFilePath)) {
hasRcExisted = true;
existedExt = ext;
break;
}
}
if (hasRcExisted) {
print_1.Printer.log(`RC-file ${color_cc_1.default.yellow(`${configFileName}.${existedExt}`)} is already existed, skip init!`);
return;
}
config.host = yield (0, cli_1.inputTxtInCLI)('type in host', consts_1.DEFAULT_RC.host);
config.port = yield (0, cli_1.inputNumInCLI)('type in port', { initial: consts_1.DEFAULT_RC.port, min: 1024, max: 10000 });
config.https = consts_1.DEFAULT_RC.https;
config.cors = yield (0, cli_1.confirmInCLI)('enable cors?', consts_1.DEFAULT_RC.cors);
config.cache = yield (0, cli_1.confirmInCLI)('enable file cache?', consts_1.DEFAULT_RC.cache);
config.watch = yield (0, cli_1.confirmInCLI)('enable file watch?', consts_1.DEFAULT_RC.watch);
config.mockDir = yield (0, cli_1.inputTxtInCLI)('type in mock data directory', consts_1.MOCK_DIR_NAME);
config.mockDataFileType = yield (0, cli_1.singleSelectInCli)('select mock data json file type', [
{ title: 'json', value: 'json' },
{ title: 'json5', value: 'json5', selected: true },
], 0);
config.mockLogicFileType = (yield (0, cli_1.singleSelectInCli)('select mock data logic file type (dafault none)', [
{ title: 'none', value: 'none' },
{ title: 'js(javascript)', value: 'js' },
{ title: 'cjs(same as js, with .cjs ext)', value: 'cjs' },
{ title: 'ts(typescript)', value: 'ts' },
], 0));
if (config.mockLogicFileType === 'typescript' || config.mockLogicFileType === 'ts') {
const defTsConfigPath = path_1.default.join(config.mockDir, './tsconfig.json');
if (defTsConfigPath && (0, fs_extra_1.existsSync)(defTsConfigPath)) {
config.tsconfigPath = yield (0, cli_1.inputTxtInCLI)(`type in tsconfig.json filepath`, defTsConfigPath);
}
}
if (config.mockLogicFileType !== 'none') {
config.autoCreateMockLogicFile = yield (0, cli_1.confirmInCLI)('Auto create mock logic file(js|cjs|ts)?', consts_1.DEFAULT_RC.autoCreateMockLogicFile);
}
(0, obj_1.delNillProps)(config);
const configFileExt = 'json';
const configFileNameWithExt = `${configFileName}.${configFileExt}`;
print_1.Printer.log('Will init rc file, like below:', config);
yield (0, rc_1.initRCfile)(configFileName, {
fileType: configFileExt,
initConfig: config,
overwrite: true,
tsInfo: {
typeImportId: `${consts_1.PKG_NAME}/com-types`,
typeName: 'MihawkRC',
},
});
print_1.Printer.log(color_cc_1.default.success(`Init ${configFileNameWithExt} success!`));
});
}