UNPKG

create-validator-ts

Version:

Create JSON Schema validator from TypeScript.

45 lines 2.22 kB
import * as path from "node:path"; import * as fs from "node:fs/promises"; import { createGenerator, DEFAULT_CONFIG } from "ts-json-schema-generator"; export async function generateValidator({ cwd, validatorGenerator, tsconfigFilePath, filePath, extraTags = [], sortProps, strictTuples, skipTypeCheck = true, encodeRefs, additionalProperties = false }) { const absoluteFilePath = path.resolve(cwd, filePath); const parentFileDir = path.dirname(path.resolve(cwd, filePath)); const fileName = path.basename(absoluteFilePath, ".ts"); const apiTypesCode = await fs.readFile(filePath, "utf-8"); try { const config = { ...DEFAULT_CONFIG, path: absoluteFilePath, tsconfig: tsconfigFilePath, type: "*", skipTypeCheck: skipTypeCheck !== null && skipTypeCheck !== void 0 ? skipTypeCheck : true, additionalProperties: additionalProperties !== null && additionalProperties !== void 0 ? additionalProperties : false, sortProps: sortProps !== null && sortProps !== void 0 ? sortProps : DEFAULT_CONFIG.sortProps, strictTuples: strictTuples !== null && strictTuples !== void 0 ? strictTuples : DEFAULT_CONFIG.strictTuples, encodeRefs: encodeRefs !== null && encodeRefs !== void 0 ? encodeRefs : DEFAULT_CONFIG.encodeRefs, extraTags: extraTags !== null && extraTags !== void 0 ? extraTags : DEFAULT_CONFIG.extraTags }; const generator = createGenerator(config); const schema = generator.createSchema(config.type); if (!schema) { console.warn("No schema: " + filePath); return; } const validatorFilePath = path.join(parentFileDir, fileName + ".validator.ts"); const validator = validatorGenerator({ apiFileCode: apiTypesCode, apiFilePath: absoluteFilePath, validatorFilePath, schema }); return { validatorFilePath: validatorFilePath, code: validator }; } catch (error) { console.error("Fail to parse: " + filePath, error); throw error; } } //# sourceMappingURL=create-validator-ts.js.map