@nrfcloud/ts-json-schema-transformer
Version:
A TypeScript transformer that generates JSON schemas and validators from TypeScript interfaces
53 lines • 2.56 kB
JavaScript
;
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