UNPKG

declarapi

Version:
45 lines 1.92 kB
#!/usr/bin/env node import fs from 'fs'; import path from 'path'; import transform from './transform/transform.js'; import server from './generate/server.js'; import client from './generate/client.js'; export const generate = async (parts, schema, tokenPath) => { const out = await transform(schema); if (out.type === 'error') { console.error(JSON.stringify(out, null, 2)); throw out.errors; } return { server: parts === 'all' || parts === 'server' ? server(out.results) : undefined, client: parts === 'all' || parts === 'client' ? client(out.results, tokenPath) : undefined }; }; const loadFile = async (input) => { const realPath = await fs.promises.realpath(input); const basename = path.parse(realPath).name; return { filename: basename, data: JSON.parse(await fs.promises.readFile(realPath, 'utf8')) }; }; export const writeFile = async (input, outputFilename, outputDir) => { if (!fs.existsSync(outputDir)) { await fs.promises.mkdir(outputDir); } const outPath = await fs.promises.realpath(outputDir); if (!(await fs.promises.stat(outputDir)).isDirectory()) { throw new Error(`output_dir: "${outputDir}" must be a directory`); } if (input.server) { const serverOutPath = path.join(outPath, `${outputFilename}-server.ts`); await fs.promises.writeFile(serverOutPath, input.server, { encoding: 'utf8' }); } if (input.client) { const clientOutPath = path.join(outPath, `${outputFilename}-client.ts`); await fs.promises.writeFile(clientOutPath, input.client, { encoding: 'utf8' }); } }; export const cliProgram = async (input, output, parts = 'all', tokenPath) => { const loadFiles = await loadFile(input); const out = await generate(parts, loadFiles.data, tokenPath); await (writeFile(out, loadFiles.filename, output)); }; //# sourceMappingURL=index.js.map