UNPKG

mfdoc

Version:

Auto generate JS SDK and HTTP API documentation

104 lines 3.8 kB
import { execSync } from 'child_process'; import fse from 'fs-extra'; import path from 'path'; import { addScriptToPackageJson, hasPackageJson, kInstallScripts, } from './utils.js'; /** * setup js sdk * - generate from scratch * - update existing * * generate from scratch * - clone from template * - install js sdk base * - update package.json * - name * * update existing * - ensure js sdk base is installed * - add "pretty" script to package.json * - ensure "AbstractSdkEndpoints", "getDefaultSdkConfig", "SdkConfig", * "endpointsIndex" are present in the src/endpoints folder */ async function installMfdocJsSdkBase(params) { const { outputPath, provider = 'npm' } = params; const version = 'latest'; execSync(`${kInstallScripts[provider]('mfdoc-js-sdk-base@' + version)}`, { cwd: outputPath, stdio: 'inherit', }); } async function updatePackageJsonName(params) { const { outputPath, name } = params; const packageJson = await fse.readJson(path.join(outputPath, 'package.json')); packageJson.name = name; await fse.writeJson(path.join(outputPath, 'package.json'), packageJson, { spaces: 2, }); } async function cloneFromTemplate(params) { const { outputPath } = params; await fse.ensureDir(outputPath); await fse.copy(path.join(import.meta.dirname, '..', 'templates', 'mfdoc-js-sdk-template'), outputPath, { filter: (src, dest) => { if (src.includes('node_modules')) { return false; } return true; }, }); } async function ensureEndpointsFolder(params) { const { outputPath } = params; await fse.ensureDir(path.join(outputPath, 'src', 'endpoints')); const filesToCopy = [ { name: 'AbstractSdkEndpoints.ts', overwrite: true }, { name: 'getDefaultSdkConfig.ts', overwrite: false }, { name: 'SdkConfig.ts', overwrite: false }, { name: 'endpointsIndex.ts', overwrite: true }, ]; for (const file of filesToCopy) { const srcPath = path.join(import.meta.dirname, '..', 'templates', 'mfdoc-js-sdk-template', 'src', 'endpoints', file.name); const destPath = path.join(outputPath, 'src', 'endpoints', file.name); if (await fse.pathExists(destPath)) { if (file.overwrite) { await fse.remove(destPath); } else { continue; } } console.log('copying', srcPath, 'to', destPath); await fse.copy(srcPath, destPath, { overwrite: file.overwrite, errorOnExist: false, }); } } export async function setupJsSdk(params) { const { outputPath, name, provider = 'npm' } = params; console.log('name', name); console.log('provider', provider); console.log('outputPath', outputPath); console.log('--------------------------------'); if (await hasPackageJson({ outputPath })) { console.log('updating existing js sdk'); console.log('installing mfdoc-js-sdk-base'); await installMfdocJsSdkBase({ outputPath, provider }); console.log('adding "pretty" script to package.json'); await addScriptToPackageJson({ outputPath, scriptName: 'pretty', scriptValue: 'prettier --write', }); console.log('ensuring endpoints folder'); await ensureEndpointsFolder({ outputPath }); return; } console.log('cloning from template'); await cloneFromTemplate({ outputPath }); console.log('updating package.json name'); await updatePackageJsonName({ outputPath, name }); console.log('installing mfdoc-js-sdk-base'); await installMfdocJsSdkBase({ outputPath, provider }); } //# sourceMappingURL=setupJsSdk.js.map