UNPKG

nestjs-typebox

Version:

This library provides helper utilities for writing and validating NestJS APIs using [TypeBox](https://github.com/sinclairzx81/typebox) as an alternative to class-validator/class-transformer. Can be configured to patch @nestjs/swagger allowing OpenAPI gene

73 lines 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.analyzeSchema = void 0; const typebox_1 = require("@sinclair/typebox"); function FromArray(schema, analysis) { Visit(schema.items, analysis); } function FromIntersect(schema, analysis) { analysis.hasTransform = analysis.hasTransform || typebox_1.TypeGuard.IsTransform(schema.unevaluatedProperties); schema.allOf.forEach(schema => Visit(schema, analysis)); } function FromObject(schema, analysis) { Object.values(schema.properties).forEach(schema => Visit(schema, analysis)); if (typebox_1.TypeGuard.IsSchema(schema.additionalProperties)) { Visit(schema.additionalProperties, analysis); } } function FromRecord(schema, analysis) { if (!analysis.hasTransform && typebox_1.TypeGuard.IsSchema(schema.additionalProperties)) { analysis.hasTransform = typebox_1.TypeGuard.IsTransform(schema.additionalProperties); } const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0]; const property = schema.patternProperties[pattern ?? '']; if (typebox_1.TypeGuard.IsSchema(property)) { Visit(property, analysis); } } function FromRef(schema, analysis) { const target = analysis.references.get(schema.$ref); if (target) { Visit(target, analysis); } } function FromTuple(schema, analysis) { if (schema.items) { schema.items.forEach(schema => Visit(schema, analysis)); } } function FromUnion(schema, analysis) { schema.anyOf.forEach(schema => Visit(schema, analysis)); } function Visit(schema, analysis) { analysis.hasTransform = analysis.hasTransform || typebox_1.TypeGuard.IsTransform(schema); analysis.hasDefault = analysis.hasDefault || 'default' in schema; if (schema.$id) { if (analysis.references.has(schema.$id)) return; analysis.references.set(schema.$id, schema); } switch (schema[typebox_1.Kind]) { case 'Array': return FromArray(schema, analysis); case 'Intersect': return FromIntersect(schema, analysis); case 'Object': return FromObject(schema, analysis); case 'Record': return FromRecord(schema, analysis); case 'Ref': return FromRef(schema, analysis); case 'Tuple': return FromTuple(schema, analysis); case 'Union': return FromUnion(schema, analysis); } } const analyzeSchema = (schema) => { const analysis = { hasTransform: false, hasDefault: false, references: new Map() }; Visit(schema, analysis); return analysis; }; exports.analyzeSchema = analyzeSchema; //# sourceMappingURL=analyze-schema.js.map