UNPKG

typescript-scaffolder

Version:

![npm version](https://img.shields.io/npm/v/typescript-scaffolder) ![coverage](https://img.shields.io/badge/coverage-97.38%25-green)

61 lines (60 loc) 2.53 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateInterfacesFromFile = generateInterfacesFromFile; exports.generateInterfacesFromPath = generateInterfacesFromPath; const file_system_1 = require("../utils/file-system"); const schema_inferer_1 = require("../utils/schema-inferer"); const fs_1 = __importDefault(require("fs")); const node_path_1 = __importDefault(require("node:path")); const logger_1 = require("../utils/logger"); /** * processes the JSON files and generates typescript * interfaces using the same folder structure * @param file * @param relativePath * @param outputBaseDir */ async function generateInterfacesFromFile(file, relativePath, outputBaseDir) { const funcName = 'generateTypedInterfaces'; logger_1.Logger.debug(funcName, "Generating typed interfaces..."); const outputDir = node_path_1.default.join(outputBaseDir, node_path_1.default.dirname(relativePath)); (0, file_system_1.ensureDir)(outputDir); const outFile = node_path_1.default.join(outputDir, node_path_1.default.basename(file, '.json') + '.ts'); try { const tsInterface = await (0, schema_inferer_1.inferJsonSchemaFromPath)(file); if (tsInterface !== null) { fs_1.default.writeFileSync(outFile, tsInterface, 'utf-8'); logger_1.Logger.debug(funcName, `Generated: ${outFile}`); } else { logger_1.Logger.warn(funcName, `Failed to generate interface from ${file}`); } } catch (error) { const err = `Critical error when trying to process ${file}, ${error}`; logger_1.Logger.error(funcName, err); throw new Error(err); } } /** * Parses a directory structure housing JSON schemas and * regenerates the directory tree with interfaces. * Only does JSON for now * @param schemaDir * @param outputDir * @param ext */ async function generateInterfacesFromPath(schemaDir, outputDir, ext = '.json') { const funcName = 'generateTypedInterfaces'; logger_1.Logger.debug(funcName, `Walking directory for enums: ${schemaDir}`); (0, file_system_1.ensureDir)(outputDir); const tasks = []; (0, file_system_1.walkDirectory)(schemaDir, (filePath, relativePath) => { const task = generateInterfacesFromFile(filePath, relativePath, outputDir); tasks.push(task); }, ext); await Promise.all(tasks); }