UNPKG

jest-bdd-generator

Version:

Jest code generator empowered with Gherkin and BDD

95 lines (87 loc) 3.52 kB
import * as fs from 'fs'; import * as path from 'path'; import { Extractor, ExtractorConfig, ExtractorResult } from '@microsoft/api-extractor'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const packageJSON = JSON.parse(fs.readFileSync('./package.json', 'utf-8')); function getTemplate(entry: string, subModuleName: string) { const moduleNameParts = subModuleName.split('/'); const moduleName = moduleNameParts.splice(-1, 1)[0]; const modulePath = moduleNameParts.join('/'); const reportPath = path.join(`<projectFolder>/docs/`, modulePath); if (!fs.existsSync(reportPath)) { fs.mkdirSync(reportPath, { recursive: true }); } const basePath = path.relative(subModuleName, './'); return { extends: path.relative(`${pathOfConfig}/${subModuleName}`, pathOfBaseConfig), mainEntryPointFilePath: path.join('<projectFolder>', entry), apiReport: { reportFileName: `${moduleName}.api.md`, reportFolder: reportPath }, docModel: { apiJsonFilePath: `${reportPath}/${moduleName}.api.json` } }; } const originalFile = fs.readFileSync(path.join(__dirname, '../config/api-extractor.json'), 'utf-8'); const pathOfBaseConfig = './config/api-extractor.json'; const pathOfConfig = './config/api-extractor/'; const exportsPackageJSON = packageJSON.exports; if (!fs.existsSync(pathOfBaseConfig)) { const originalConfig = new Function(`return (${originalFile})`)(); (originalConfig.mainEntryPointFilePath = path.join('<projectFolder>', packageJSON.types)), fs.writeFileSync(pathOfBaseConfig, JSON.stringify(originalConfig, undefined, 2)); } generateAPIExtraction(pathOfBaseConfig); if (exportsPackageJSON && Object.keys(exportsPackageJSON).length) { Object.keys(exportsPackageJSON).forEach((subModuleName) => { // if (fs.exists(subModule)) const moduleConfig = exportsPackageJSON[subModuleName as keyof typeof exportsPackageJSON]; const route = path.join('./', moduleConfig.types); const info = fs.statSync(route); if (info.isDirectory()) { // const tempFile = path.join(route, 'package.json'); // const tempContent = JSON.stringify({ // name: route, // main: moduleConfig.require, // module: moduleConfig.import, // types: moduleConfig.types, // }); // fs.writeFileSync(tempFile, tempContent); } else { const pathFolder = path.join(pathOfConfig, subModuleName); if (!fs.existsSync(pathFolder)) { fs.mkdirSync(pathFolder, { recursive: true }); } const tempFile = path.join(pathFolder, `api-extractor.json`); const tempContent = JSON.stringify(getTemplate(route, subModuleName), undefined, 2); fs.writeFileSync(tempFile, tempContent); console.log(tempFile, pathFolder); generateAPIExtraction(tempFile); } }); } function generateAPIExtraction(tempFile: string) { const extractorConfig: ExtractorConfig = ExtractorConfig.loadFileAndPrepare(tempFile); const extractorResult: ExtractorResult = Extractor.invoke(extractorConfig, { localBuild: true, showVerboseMessages: true }); if (extractorResult.succeeded) { console.log(`API Extractor completed successfully`); process.exitCode = 0; } else { console.error( `API Extractor completed with ${extractorResult.errorCount} errors` + ` and ${extractorResult.warningCount} warnings` ); process.exitCode = 1; } }