UNPKG

mock-convert

Version:

convert interface data to mock data

206 lines (177 loc) 5.43 kB
const path = require('path'); const fs = require('fs'); const debug = require('debug')('mockGen'); const Translate = require('./translate'); function writeFile(outPath, data) { fs.writeFile(outPath, data, (err) => { if (!err) { debug('write file: %s success', outPath); } else { debug('write file: %s failed, err: %O', outPath, err); } }); } function generateSingleFile(projectObj, outOpt) { let fileData = ''; if (Array.isArray(projectObj)) { fileData += 'module.exports = {\n'; for (let m = 0; m < projectObj.length; m++) { const { name, introduction, moduleList } = projectObj[m]; if (name) { fileData += name; } if (introduction) { fileData += introduction; } if (moduleList) { for (let i = 0, len = moduleList.length; i < len; i++) { const { parse } = moduleList[i]; fileData += parse; } } } fileData += '};\n'; } else { const { name, introduction, moduleList } = projectObj; if (name) { fileData += name; } if (introduction) { fileData += introduction; } fileData += 'module.exports = {\n'; if (moduleList) { for (let i = 0, len = moduleList.length; i < len; i++) { const { parse } = moduleList[i]; fileData += parse; } } fileData += '};\n'; } // 写入单个文件 const { outPath } = outOpt; writeFile(outPath, fileData); } function formatName(name) { let result = name; if (name) { result = name.replace(/\(.*?\)/g, ''); result = result.replace(/(.*?)/g, ''); result = result.replace(/ /g, ''); } return result; } function preGenerateFiles(projectObj, outOpt, translateOpt, trans) { const fileList = []; const originFileList = []; const translatePromise = []; const _moduleList = []; if (Array.isArray(projectObj)) { for (let m = 0; m < projectObj.length; m++) { const { moduleList } = projectObj[m]; let { fileNames } = translateOpt; if (!fileNames) { fileNames = outOpt.fileNames; // 兼容以前的版本 } if (moduleList) { for (let i = 0, len = moduleList.length; i < len; i++) { let { name: moduleName } = moduleList[i]; _moduleList.push(moduleList[i]); moduleName = formatName(moduleName); const fileName = fileNames[moduleName]; originFileList.push(moduleName); if (!fileName) { fileList.push(null); translatePromise.push(trans.translate(moduleName)); } else { fileList.push(fileName); } } } } } else { const { moduleList } = projectObj; let { fileNames } = translateOpt; if (!fileNames) { fileNames = outOpt.fileNames; // 兼容以前的版本 } if (moduleList) { for (let i = 0, len = moduleList.length; i < len; i++) { let { name: moduleName } = moduleList[i]; _moduleList.push(moduleList[i]); moduleName = formatName(moduleName); const fileName = fileNames[moduleName]; originFileList.push(moduleName); if (!fileName) { fileList.push(null); translatePromise.push(trans.translate(moduleName)); } else { fileList.push(fileName); } } } } return { fileList, originFileList, moduleList: _moduleList, translatePromise }; } function generateFiles(projectObj, outOpt, translateOpt) { let indexFileData = ''; const { outPath } = outOpt; let outDir = path.dirname(outPath); if (outDir[outDir.length - 1] !== '/' && outDir.length > 0) { outDir += '/'; } const { apiHost, appKey, secretKey } = translateOpt; const trans = new Translate(apiHost, appKey, secretKey); const { fileList = [], originFileList = [], translatePromise = [], moduleList, } = preGenerateFiles(projectObj, outOpt, translateOpt, trans); Promise.all(translatePromise).then((wordArray) => { debug('translate data: ', wordArray); let fileName = ''; for (let i = 0, j = 0, len = fileList.length; i < len; i++) { if (!fileList[i]) { fileList[i] = trans.postProcess(wordArray[j]) || originFileList[i]; j++; } fileList[i] = fileList[i].replace('-', ''); fileName = fileList[i]; indexFileData += `const ${fileName} = require('./${fileName}');\n`; fileName += '.js'; const filePath = path.resolve(outDir, fileName); let fileData = ''; fileData += 'module.exports = {\n'; const { parse } = moduleList[i]; fileData += parse; fileData += '};\n'; writeFile(filePath, fileData); } indexFileData += '\nmodule.exports = Object.assign({}'; for (let j = 0, len = fileList.length; j < len; j++) { indexFileData += ',\n '; indexFileData += fileList[j]; } indexFileData += ');\n'; writeFile(outPath, indexFileData); }).catch((err) => { debug('write file failed', err); }); } module.exports = function persist(projectObj, outOpt, translateOpt) { const { outPath, singleFile, } = outOpt; const outDir = path.dirname(outPath); if (!fs.existsSync(outDir)) { debug('directory is not exist: %s', outDir); return; } if (singleFile) { generateSingleFile(projectObj, outOpt); } else { generateFiles(projectObj, outOpt, translateOpt); } };