UNPKG

@nrfcloud/ts-json-schema-transformer

Version:

A TypeScript transformer that generates JSON schemas and validators from TypeScript interfaces

53 lines 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = transform; const ts_json_schema_generator_1 = require("ts-json-schema-generator"); const project_js_1 = require("./project.js"); const file_transformer_js_1 = require("./transformers/file-transformer.js"); function transform(program, options = {}) { const { loopRequired, additionalProperties, encodeRefs, strictTuples, jsDoc, removeAdditional, coerceTypes, useDefaults, allErrors, sortProps, expose, seed, } = options ?? {}; const schemaConfig = { ...project_js_1.SCHEMA_DEFAULTS, jsDoc: jsDoc || project_js_1.SCHEMA_DEFAULTS.jsDoc, strictTuples: strictTuples || project_js_1.SCHEMA_DEFAULTS.strictTuples, encodeRefs: encodeRefs || project_js_1.SCHEMA_DEFAULTS.encodeRefs, additionalProperties: additionalProperties ?? project_js_1.SCHEMA_DEFAULTS.additionalProperties, sortProps: sortProps || project_js_1.SCHEMA_DEFAULTS.sortProps, expose: expose || project_js_1.SCHEMA_DEFAULTS.expose, }; const validationConfig = { ...project_js_1.AJV_DEFAULTS, loopRequired: loopRequired || project_js_1.AJV_DEFAULTS.loopRequired, removeAdditional: removeAdditional || project_js_1.AJV_DEFAULTS.removeAdditional, coerceTypes: coerceTypes || project_js_1.AJV_DEFAULTS.coerceTypes, useDefaults: useDefaults || project_js_1.AJV_DEFAULTS.useDefaults, allErrors: allErrors || project_js_1.AJV_DEFAULTS.allErrors, }; const nodeParser = (0, ts_json_schema_generator_1.createParser)(program, { ...schemaConfig, }); const typeFormatter = (0, ts_json_schema_generator_1.createFormatter)({ ...schemaConfig, }); const schemaGenerator = new ts_json_schema_generator_1.SchemaGenerator(program, nodeParser, typeFormatter, schemaConfig); const project = { checker: program.getTypeChecker(), options: { mock: { seed: seed ?? project_js_1.DEFAULT_SEED, }, schema: schemaConfig, validation: validationConfig, }, program, nodeParser: (0, ts_json_schema_generator_1.createParser)(program, schemaConfig), schemaGenerator, typeFormatter: (0, ts_json_schema_generator_1.createFormatter)(schemaConfig), }; return (context) => { return (file) => { return file_transformer_js_1.FileTransformer.transform(project, context, file); }; }; } //# sourceMappingURL=transform.js.map