UNPKG

whdx-ts

Version:

whdx-ts package

103 lines (97 loc) 3.22 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); let args = process.argv.slice(2); let ReadFilePath = '', SaveProjectPath = path.resolve(process.cwd(), './src', 'types'), isOutput = false, filePaths = [], currentProject = ''; //读取文件夹下的文件 function readFiles() { //判断是否是文件夹还是文件 let stats = fs.lstatSync(ReadFilePath); if (stats.isFile()) { filePaths.push(ReadFilePath); currentProject = path.basename(ReadFilePath.replace(/\\(\w+\.js)$/gi, "")); } else if (stats.isDirectory()) { currentProject = path.basename(ReadFilePath); fs.readdir(ReadFilePath, function (err, files) { files.forEach(file => { filePaths.push(ReadFilePath + '/' + file) }) }); } } function filesRead() { /** * 读取文件中的内容 */ filePaths.forEach(filePath => { let fileContent = fs.readFileSync(filePath, 'utf8'); let apiContent = fileContent.match(/export (const|function) \w+(\s|)(\((.*?)\))?/gi) || []; if (!apiContent.length) { return; } let array = ``; apiContent.forEach(item => { let matchParams = item.match(/\((.*?)\)/) && item.match(/\((.*?)\)/)[1]; if (matchParams) { let temMatchParams = matchParams.split(','); let params = ''; temMatchParams.forEach((param, index) => { params += index == 0 ? param + ':any' : "," + param + ':any'; }); item = item.replace(/\((.*?)\)/, `(${params})`) } let content = ` ${item}: any;\n`; array += ` ${content}`; }); let fileName = path.basename(filePath, '.js'); console.log(currentProject); let tsApiContent = `declare module '${currentProject}/${fileName}' {\n${array}}`; fs.writeFileSync(SaveProjectPath + '/' + currentProject + "_" + fileName + '.d.ts', tsApiContent); }); } /** * 判断是否创建目录 */ function checkCreateProject() { fs.stat(SaveProjectPath, function (err, stats) { stats ? filesRead() : createProject(); }); } /** * 创建目录 */ function createProject() { fs.mkdir(SaveProjectPath, function (error) { if (error) { return console.log("创建失败"); } filesRead(); }); } (function () { args = args.filter(arg => { let match; match = arg.match(/^--?([a-z][0-9a-z-]*)(?:=(.*))?$/i); if (match) { arg = match[1]; } switch (arg) { case 'o': SaveProjectPath = args[3] && path.resolve(process.cwd(), args[3]) || SaveProjectPath; isOutput = true; checkCreateProject(); break; case 's': ReadFilePath = path.resolve(process.cwd(), args[1]); readFiles(); break; } }); if (!isOutput) { checkCreateProject(); } })();