class-validator-jsonschema
Advanced tools
Comparing version 3.0.2 to 3.1.0
@@ -18,3 +18,3 @@ // tslint:disable:no-submodule-imports | ||
import { ValidationMetadata } from 'class-validator/types/metadata/ValidationMetadata' | ||
import { validationMetadatasToSchemas } from '../src' | ||
import { targetConstructorToSchema, validationMetadatasToSchemas } from '../src' | ||
@@ -163,2 +163,66 @@ class User { | ||
it('combines converted class-validator metadata for one object into JSON Schemas', () => { | ||
const postSchema = targetConstructorToSchema(Post) | ||
expect(postSchema).toEqual({ | ||
properties: { | ||
published: { | ||
type: 'boolean', | ||
}, | ||
title: { | ||
maxLength: 100, | ||
minLength: 2, | ||
type: 'string', | ||
}, | ||
user: { | ||
$ref: '#/definitions/User', | ||
}, | ||
}, | ||
type: 'object', | ||
}) | ||
const userSchema = targetConstructorToSchema(User) | ||
expect(userSchema).toEqual({ | ||
properties: { | ||
empty: { | ||
anyOf: [ | ||
{ type: 'string', enum: [''] }, | ||
{ | ||
not: { | ||
anyOf: [ | ||
{ type: 'string' }, | ||
{ type: 'number' }, | ||
{ type: 'boolean' }, | ||
{ type: 'integer' }, | ||
{ type: 'array' }, | ||
{ type: 'object' }, | ||
], | ||
}, | ||
nullable: true, | ||
}, | ||
], | ||
}, | ||
firstName: { minLength: 5, type: 'string' }, | ||
id: { type: 'string' }, | ||
object: { type: 'object' }, | ||
nonEmptyObject: { type: 'object', minProperties: 1 }, | ||
any: {}, | ||
tags: { | ||
items: { | ||
maxLength: 20, | ||
not: { | ||
anyOf: [{ enum: ['admin'], type: 'string' }], | ||
}, | ||
type: 'string', | ||
}, | ||
maxItems: 5, | ||
type: 'array', | ||
}, | ||
}, | ||
required: ['id', 'firstName', 'object', 'any'], | ||
type: 'object', | ||
}) | ||
}) | ||
it('should use custom schema name field', () => { | ||
@@ -165,0 +229,0 @@ const schemas = validationMetadatasToSchemas({ |
@@ -0,6 +1,7 @@ | ||
import { ValidationMetadata } from 'class-validator/types/metadata/ValidationMetadata'; | ||
import { SchemaObject } from 'openapi3-ts'; | ||
import { IOptions } from './options'; | ||
export { JSONSchema } from './decorators'; | ||
export declare function validationMetadatasToSchemas(userOptions?: Partial<IOptions>): { | ||
[key: string]: SchemaObject; | ||
}; | ||
export declare function validationMetadatasToSchemas(userOptions?: Partial<IOptions>): Record<string, SchemaObject>; | ||
export declare function validationMetadataArrayToSchemas(metadatas: ValidationMetadata[], userOptions?: Partial<IOptions>): Record<string, SchemaObject>; | ||
export declare function targetConstructorToSchema(targetConstructor: Function, userOptions?: Partial<IOptions>): SchemaObject; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.validationMetadatasToSchemas = exports.JSONSchema = void 0; | ||
exports.targetConstructorToSchema = exports.validationMetadataArrayToSchemas = exports.validationMetadatasToSchemas = exports.JSONSchema = void 0; | ||
const tslib_1 = require("tslib"); | ||
@@ -16,2 +16,7 @@ const cv = tslib_1.__importStar(require("class-validator")); | ||
const metadatas = getMetadatasFromStorage(options.classValidatorMetadataStorage); | ||
return validationMetadataArrayToSchemas(metadatas, userOptions); | ||
} | ||
exports.validationMetadatasToSchemas = validationMetadatasToSchemas; | ||
function validationMetadataArrayToSchemas(metadatas, userOptions) { | ||
const options = Object.assign(Object.assign({}, options_1.defaultOptions), userOptions); | ||
const schemas = {}; | ||
@@ -40,5 +45,17 @@ Object.entries(lodash_groupby_1.default(metadatas, ({ target }) => { var _a; return (_a = target[options.schemaNameField]) !== null && _a !== void 0 ? _a : target.name; })).forEach(([key, ownMetas]) => { | ||
} | ||
exports.validationMetadatasToSchemas = validationMetadatasToSchemas; | ||
exports.validationMetadataArrayToSchemas = validationMetadataArrayToSchemas; | ||
function targetConstructorToSchema(targetConstructor, userOptions) { | ||
const options = Object.assign(Object.assign({}, options_1.defaultOptions), userOptions); | ||
const storage = options.classValidatorMetadataStorage; | ||
let metadatas = storage.getTargetValidationMetadatas(targetConstructor, '', true, false); | ||
metadatas = populateMetadatasWithConstraints(storage, metadatas); | ||
const schemas = validationMetadataArrayToSchemas(metadatas, userOptions); | ||
return Object.values(schemas).length ? Object.values(schemas)[0] : {}; | ||
} | ||
exports.targetConstructorToSchema = targetConstructorToSchema; | ||
function getMetadatasFromStorage(storage) { | ||
const metadatas = storage.validationMetadatas; | ||
return populateMetadatasWithConstraints(storage, metadatas); | ||
} | ||
function populateMetadatasWithConstraints(storage, metadatas) { | ||
const constraints = storage.constraintMetadatas; | ||
@@ -110,2 +127,2 @@ return metadatas.map((meta) => { | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDREQUFxQztBQUdyQyw0RUFBcUM7QUFDckMsd0VBQWlDO0FBR2pDLDZDQUFnRDtBQUNoRCwyREFBdUQ7QUFDdkQsdUNBQW9EO0FBRXBELDJDQUF5QztBQUFoQyx3R0FBQSxVQUFVLE9BQUE7QUFLbkIsU0FBZ0IsNEJBQTRCLENBQUMsV0FBK0I7SUFDMUUsTUFBTSxPQUFPLG1DQUNSLHdCQUFjLEdBQ2QsV0FBVyxDQUNmLENBQUE7SUFFRCxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FDdkMsT0FBTyxDQUFDLDZCQUE2QixDQUN0QyxDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQW9DLEVBQUUsQ0FBQTtJQUNuRCxNQUFNLENBQUMsT0FBTyxDQUNaLHdCQUFRLENBQ04sU0FBUyxFQUNULENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLHdCQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBc0MsQ0FBQyxtQ0FDckQsTUFBbUIsQ0FBQyxJQUFJLEdBQUEsQ0FDNUIsQ0FDRixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQWtCLENBQUE7UUFDN0MsTUFBTSxLQUFLLEdBQUcsUUFBUTthQUNuQixNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ2hELE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFdkQsTUFBTSxVQUFVLEdBQXFDLEVBQUUsQ0FBQTtRQUV2RCxNQUFNLENBQUMsT0FBTyxDQUFDLHdCQUFRLENBQUMsS0FBSyxFQUFFLGNBQWMs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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDREQUFxQztBQUdyQyw0RUFBcUM7QUFDckMsd0VBQWlDO0FBR2pDLDZDQUFnRDtBQUNoRCwyREFBdUQ7QUFDdkQsdUNBQW9EO0FBRXBELDJDQUF5QztBQUFoQyx3R0FBQSxVQUFVLE9BQUE7QUFLbkIsU0FBZ0IsNEJBQTRCLENBQzFDLFdBQStCO0lBRS9CLE1BQU0sT0FBTyxtQ0FDUix3QkFBYyxHQUNkLFdBQVcsQ0FDZixDQUFBO0lBRUQsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQ3ZDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FDdEMsQ0FBQTtJQUVELE9BQU8sZ0NBQWdDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0FBQ2pFLENBQUM7QUFiRCxvRUFhQztBQUtELFNBQWdCLGdDQUFnQyxDQUM5QyxTQUErQixFQUMvQixXQUErQjtJQUUvQixNQUFNLE9BQU8sbUNBQ1Isd0JBQWMsR0FDZCxXQUFXLENBQ2YsQ0FBQTtJQUVELE1BQU0sT0FBTyxHQUFvQyxFQUFFLENBQUE7SUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FDWix3QkFBUSxDQUNOLFNBQVMsRUFDVCxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSx3QkFDYixNQUFNLENBQUMsT0FBTyxDQUFDLGVBQXNDLENBQUMsbUNBQ3JELE1BQW1CLENBQUMsSUFBSSxHQUFBLENBQzVCLENBQ0YsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1FBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFrQixDQUFBO1FBQzdDLE1BQU0sS0FBSyxHQUFHLFFBQVE7YUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNoRCxNQUFN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 |
{ | ||
"name": "class-validator-jsonschema", | ||
"version": "3.0.2", | ||
"version": "3.1.0", | ||
"description": "Convert class-validator-decorated classes into JSON schema", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -18,3 +18,5 @@ // tslint:disable:no-submodule-imports ban-types | ||
*/ | ||
export function validationMetadatasToSchemas(userOptions?: Partial<IOptions>) { | ||
export function validationMetadatasToSchemas( | ||
userOptions?: Partial<IOptions> | ||
): Record<string, SchemaObject> { | ||
const options: IOptions = { | ||
@@ -29,2 +31,17 @@ ...defaultOptions, | ||
return validationMetadataArrayToSchemas(metadatas, userOptions) | ||
} | ||
/** | ||
* Convert an array of class-validator metadata into JSON Schema definitions. | ||
*/ | ||
export function validationMetadataArrayToSchemas( | ||
metadatas: ValidationMetadata[], | ||
userOptions?: Partial<IOptions> | ||
): Record<string, SchemaObject> { | ||
const options: IOptions = { | ||
...defaultOptions, | ||
...userOptions, | ||
} | ||
const schemas: { [key: string]: SchemaObject } = {} | ||
@@ -80,2 +97,27 @@ Object.entries( | ||
/** | ||
* Generate JSON Schema definitions from the target object constructor. | ||
*/ | ||
export function targetConstructorToSchema( | ||
targetConstructor: Function, | ||
userOptions?: Partial<IOptions> | ||
): SchemaObject { | ||
const options: IOptions = { | ||
...defaultOptions, | ||
...userOptions, | ||
} | ||
const storage = options.classValidatorMetadataStorage | ||
let metadatas = storage.getTargetValidationMetadatas( | ||
targetConstructor, | ||
'', | ||
true, | ||
false | ||
) | ||
metadatas = populateMetadatasWithConstraints(storage, metadatas) | ||
const schemas = validationMetadataArrayToSchemas(metadatas, userOptions) | ||
return Object.values(schemas).length ? Object.values(schemas)[0] : {} | ||
} | ||
/** | ||
* Return `storage.validationMetadatas` populated with `constraintMetadatas`. | ||
@@ -87,2 +129,9 @@ */ | ||
const metadatas: ValidationMetadata[] = (storage as any).validationMetadatas | ||
return populateMetadatasWithConstraints(storage, metadatas) | ||
} | ||
function populateMetadatasWithConstraints( | ||
storage: cv.MetadataStorage, | ||
metadatas: ValidationMetadata[] | ||
): ValidationMetadata[] { | ||
const constraints: ConstraintMetadata[] = (storage as any).constraintMetadatas | ||
@@ -89,0 +138,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
116148
2512