core.d.ts 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. export { Format, FormatDefinition, AsyncFormatDefinition, KeywordDefinition, KeywordErrorDefinition, CodeKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition, Vocabulary, Schema, SchemaObject, AnySchemaObject, AsyncSchema, AnySchema, ValidateFunction, AsyncValidateFunction, AnyValidateFunction, ErrorObject, ErrorNoParams, } from "./types";
  2. export { SchemaCxt, SchemaObjCxt } from "./compile";
  3. export interface Plugin<Opts> {
  4. (ajv: Ajv, options?: Opts): Ajv;
  5. [prop: string]: any;
  6. }
  7. export { KeywordCxt } from "./compile/validate";
  8. export { DefinedError } from "./vocabularies/errors";
  9. export { JSONType } from "./compile/rules";
  10. export { JSONSchemaType } from "./types/json-schema";
  11. export { JTDSchemaType, SomeJTDSchemaType, JTDDataType } from "./types/jtd-schema";
  12. export { _, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions } from "./compile/codegen";
  13. import type { Schema, AnySchema, AnySchemaObject, SchemaObject, AsyncSchema, Vocabulary, KeywordDefinition, AddedKeywordDefinition, AnyValidateFunction, ValidateFunction, AsyncValidateFunction, ErrorObject, Format, AddedFormat, RegExpEngine, UriResolver } from "./types";
  14. import type { JSONSchemaType } from "./types/json-schema";
  15. import type { JTDSchemaType, SomeJTDSchemaType, JTDDataType } from "./types/jtd-schema";
  16. import ValidationError from "./runtime/validation_error";
  17. import MissingRefError from "./compile/ref_error";
  18. import { ValidationRules } from "./compile/rules";
  19. import { SchemaEnv } from "./compile";
  20. import { Code, ValueScope } from "./compile/codegen";
  21. export type Options = CurrentOptions & DeprecatedOptions;
  22. export interface CurrentOptions {
  23. strict?: boolean | "log";
  24. strictSchema?: boolean | "log";
  25. strictNumbers?: boolean | "log";
  26. strictTypes?: boolean | "log";
  27. strictTuples?: boolean | "log";
  28. strictRequired?: boolean | "log";
  29. allowMatchingProperties?: boolean;
  30. allowUnionTypes?: boolean;
  31. validateFormats?: boolean;
  32. $data?: boolean;
  33. allErrors?: boolean;
  34. verbose?: boolean;
  35. discriminator?: boolean;
  36. unicodeRegExp?: boolean;
  37. timestamp?: "string" | "date";
  38. parseDate?: boolean;
  39. allowDate?: boolean;
  40. $comment?: true | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown);
  41. formats?: {
  42. [Name in string]?: Format;
  43. };
  44. keywords?: Vocabulary;
  45. schemas?: AnySchema[] | {
  46. [Key in string]?: AnySchema;
  47. };
  48. logger?: Logger | false;
  49. loadSchema?: (uri: string) => Promise<AnySchemaObject>;
  50. removeAdditional?: boolean | "all" | "failing";
  51. useDefaults?: boolean | "empty";
  52. coerceTypes?: boolean | "array";
  53. next?: boolean;
  54. unevaluated?: boolean;
  55. dynamicRef?: boolean;
  56. schemaId?: "id" | "$id";
  57. jtd?: boolean;
  58. meta?: SchemaObject | boolean;
  59. defaultMeta?: string | AnySchemaObject;
  60. validateSchema?: boolean | "log";
  61. addUsedSchema?: boolean;
  62. inlineRefs?: boolean | number;
  63. passContext?: boolean;
  64. loopRequired?: number;
  65. loopEnum?: number;
  66. ownProperties?: boolean;
  67. multipleOfPrecision?: number;
  68. int32range?: boolean;
  69. messages?: boolean;
  70. code?: CodeOptions;
  71. uriResolver?: UriResolver;
  72. }
  73. export interface CodeOptions {
  74. es5?: boolean;
  75. esm?: boolean;
  76. lines?: boolean;
  77. optimize?: boolean | number;
  78. formats?: Code;
  79. source?: boolean;
  80. process?: (code: string, schema?: SchemaEnv) => string;
  81. regExp?: RegExpEngine;
  82. }
  83. interface InstanceCodeOptions extends CodeOptions {
  84. regExp: RegExpEngine;
  85. optimize: number;
  86. }
  87. interface DeprecatedOptions {
  88. /** @deprecated */
  89. ignoreKeywordsWithRef?: boolean;
  90. /** @deprecated */
  91. jsPropertySyntax?: boolean;
  92. /** @deprecated */
  93. unicode?: boolean;
  94. }
  95. type RequiredInstanceOptions = {
  96. [K in "strictSchema" | "strictNumbers" | "strictTypes" | "strictTuples" | "strictRequired" | "inlineRefs" | "loopRequired" | "loopEnum" | "meta" | "messages" | "schemaId" | "addUsedSchema" | "validateSchema" | "validateFormats" | "int32range" | "unicodeRegExp" | "uriResolver"]: NonNullable<Options[K]>;
  97. } & {
  98. code: InstanceCodeOptions;
  99. };
  100. export type InstanceOptions = Options & RequiredInstanceOptions;
  101. export interface Logger {
  102. log(...args: unknown[]): unknown;
  103. warn(...args: unknown[]): unknown;
  104. error(...args: unknown[]): unknown;
  105. }
  106. export default class Ajv {
  107. opts: InstanceOptions;
  108. errors?: ErrorObject[] | null;
  109. logger: Logger;
  110. readonly scope: ValueScope;
  111. readonly schemas: {
  112. [Key in string]?: SchemaEnv;
  113. };
  114. readonly refs: {
  115. [Ref in string]?: SchemaEnv | string;
  116. };
  117. readonly formats: {
  118. [Name in string]?: AddedFormat;
  119. };
  120. readonly RULES: ValidationRules;
  121. readonly _compilations: Set<SchemaEnv>;
  122. private readonly _loading;
  123. private readonly _cache;
  124. private readonly _metaOpts;
  125. static ValidationError: typeof ValidationError;
  126. static MissingRefError: typeof MissingRefError;
  127. constructor(opts?: Options);
  128. _addVocabularies(): void;
  129. _addDefaultMetaSchema(): void;
  130. defaultMeta(): string | AnySchemaObject | undefined;
  131. validate(schema: Schema | string, data: unknown): boolean;
  132. validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>;
  133. validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T;
  134. validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T;
  135. validate<N extends never, T extends SomeJTDSchemaType>(schema: T, data: unknown): data is JTDDataType<T>;
  136. validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>;
  137. validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>;
  138. compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>;
  139. compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>;
  140. compile<N extends never, T extends SomeJTDSchemaType>(schema: T, _meta?: boolean): ValidateFunction<JTDDataType<T>>;
  141. compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>;
  142. compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>;
  143. compileAsync<T = unknown>(schema: SchemaObject | JSONSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>;
  144. compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>;
  145. compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>;
  146. compileAsync<T = unknown>(schema: AnySchemaObject, meta?: boolean): Promise<AnyValidateFunction<T>>;
  147. addSchema(schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored
  148. key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
  149. _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.
  150. _validateSchema?: boolean | "log"): Ajv;
  151. addMetaSchema(schema: AnySchemaObject, key?: string, // schema key
  152. _validateSchema?: boolean | "log"): Ajv;
  153. validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown>;
  154. getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined;
  155. removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv;
  156. addVocabulary(definitions: Vocabulary): Ajv;
  157. addKeyword(kwdOrDef: string | KeywordDefinition, def?: KeywordDefinition): Ajv;
  158. getKeyword(keyword: string): AddedKeywordDefinition | boolean;
  159. removeKeyword(keyword: string): Ajv;
  160. addFormat(name: string, format: Format): Ajv;
  161. errorsText(errors?: ErrorObject[] | null | undefined, // optional array of validation errors
  162. { separator, dataVar }?: ErrorsTextOptions): string;
  163. $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject;
  164. private _removeAllSchemas;
  165. _addSchema(schema: AnySchema, meta?: boolean, baseId?: string, validateSchema?: boolean | "log", addSchema?: boolean): SchemaEnv;
  166. private _checkUnique;
  167. private _compileSchemaEnv;
  168. private _compileMetaSchema;
  169. }
  170. export interface ErrorsTextOptions {
  171. separator?: string;
  172. dataVar?: string;
  173. }