create-validator-ts
Version:
Create JSON Schema validator from TypeScript.
45 lines • 2.22 kB
JavaScript
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