import { Class } from "oly"; import { IJsonSchema } from "../interfaces"; import { JsonMapper } from "./JsonMapper"; import { JsonSanitizer } from "./JsonSanitizer"; import { JsonSchemaReader } from "./JsonSchemaReader"; import { JsonValidator } from "./JsonValidator"; /** * Allow to parse object and array of objects */ export declare class Json { protected mapper: JsonMapper; protected sanitizer: JsonSanitizer; protected validator: JsonValidator; protected schemaReader: JsonSchemaReader; /** * Like JSON.parse. * * @param data Raw (string or object) * @return Json object */ parse(data: string | object): object; /** * Like JSON.stringify. * * @param data Json (string or object) * @return Json string */ stringify(data: string | object): string; /** * Transform json into class. * * @param type Class definition * @param data Json data * @return Mapped object */ map(type: Class, data: object): T; /** * Validator based on ajv. * Result can be different (depend on ajv configuration). * * ```ts * class Data { * @field name: string; * } * * const validData = this.json.validate(Data, {name: "Jean"}); * ``` * * @param type Class definition with JsonSchemaReader * @param data Json data * @return Data after validation if valid */ validate(type: Class, data: T): T; /** * Sanitize data. * * ```ts * class Data { * @field({upper: true}) name: string; * } * * Kernel.create().get(Json).sanitize(Data, {name: "Jean"}); * ``` * * @param type Class definition * @param data Json data * @return Sanitized data */ sanitize(type: Class, data: T): T; /** * Json#parse(), Json#validate(), Json#map() and Json#sanitize(). * * ```ts * class Data { * @field name: string; * } * * Kernel.create().get(Json).build(Data, {name: "Jean"}); * ``` * * @param type Class definition * @param data Raw data (string or object) */ build(type: Class, data: any): T; /** * Extract JsonSchemaReader from a class. * * ```ts * class Data { * @field name: string; * } * * Kernel.create().get(Json).schema(Data); // {properties: { ... * ``` * * @param type Definition * @return JsonSchema */ schema(type: Class): IJsonSchema; }