You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					174 lines
				
				4.7 KiB
			
		
		
			
		
	
	
					174 lines
				
				4.7 KiB
			| 
											3 years ago
										 | import { Options as AjvOptions } from "ajv" | ||
|  | declare namespace build { | ||
|  |   interface BaseSchema { | ||
|  |     /** | ||
|  |      * Schema title | ||
|  |      */ | ||
|  |     title?: string; | ||
|  |     /** | ||
|  |      * Schema description | ||
|  |      */ | ||
|  |     description?: string; | ||
|  |     /** | ||
|  |      * A comment to be added to the schema | ||
|  |      */ | ||
|  |     $comment?: string; | ||
|  |     /** | ||
|  |      * Default value to be assigned when no value is given in the document | ||
|  |      */ | ||
|  |     default?: any; | ||
|  |     /** | ||
|  |      * A list of example values that match this schema | ||
|  |      */ | ||
|  |     examples?: any[]; | ||
|  |     /** | ||
|  |      * Additional schema definition to reference from within the schema | ||
|  |      */ | ||
|  |     definitions?: Record<string, Schema> | ||
|  |     /** | ||
|  |      * A set of schemas of which at least one must match | ||
|  |      */ | ||
|  |     anyOf?: Partial<Schema>[]; | ||
|  |     /** | ||
|  |      * A set of schemas which must all match | ||
|  |      */ | ||
|  |     allOf?: Partial<Schema>[]; | ||
|  |     /** | ||
|  |      * A conditional schema to check, controls schemas defined in `then` and `else` | ||
|  |      */ | ||
|  |     if?: Partial<Schema>; | ||
|  |     /** | ||
|  |      * A schema to apply if the conditional schema from `if` passes | ||
|  |      */ | ||
|  |     then?: Partial<Schema>; | ||
|  |     /** | ||
|  |      * A schema to apply if the conditional schema from `if` fails | ||
|  |      */ | ||
|  |     else?: Partial<Schema>; | ||
|  |     /** | ||
|  |      * Open API 3.0 spec states that any value that can be null must be declared `nullable` | ||
|  |      * @default false | ||
|  |      */ | ||
|  |     nullable?: boolean; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface RefSchema { | ||
|  |     /** | ||
|  |      * A json-pointer to a schema to use as a reference | ||
|  |      */ | ||
|  |     $ref: string; | ||
|  |   } | ||
|  |    | ||
|  |   export interface AnySchema extends BaseSchema { | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface StringSchema extends BaseSchema { | ||
|  |     type: "string"; | ||
|  |     format?: string; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface IntegerSchema extends BaseSchema { | ||
|  |     type: "integer"; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface NumberSchema extends BaseSchema { | ||
|  |     type: "number"; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface NullSchema extends BaseSchema { | ||
|  |     type: "null"; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface BooleanSchema extends BaseSchema { | ||
|  |     type: "boolean"; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface ArraySchema extends BaseSchema { | ||
|  |     type: "array"; | ||
|  |     /** | ||
|  |      * The schema for the items in the array | ||
|  |      */ | ||
|  |     items: Schema | {} | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface TupleSchema extends BaseSchema { | ||
|  |     type: "array"; | ||
|  |     /** | ||
|  |      * The schemas for the items in the tuple | ||
|  |      */ | ||
|  |     items: Schema[]; | ||
|  |   } | ||
|  | 
 | ||
|  |   type ObjectProperties = Record<string, Partial<Schema>> & { | ||
|  |     anyOf?: ObjectProperties[]; | ||
|  |     allOf?: ObjectProperties[]; | ||
|  |     if?: ObjectProperties; | ||
|  |     then?: ObjectProperties; | ||
|  |     else?: ObjectProperties; | ||
|  |   } | ||
|  | 
 | ||
|  |   export interface ObjectSchema extends BaseSchema { | ||
|  |     type: "object"; | ||
|  |     /** | ||
|  |      * Describe the properties of the object | ||
|  |      */ | ||
|  |     properties?: ObjectProperties; | ||
|  |     /** | ||
|  |      * The required properties of the object | ||
|  |      */ | ||
|  |     required?: string[]; | ||
|  |     /** | ||
|  |      * Describe properties that have keys following a given pattern | ||
|  |      */ | ||
|  |     patternProperties?: ObjectProperties; | ||
|  |     /** | ||
|  |      * Specifies whether additional properties on the object are allowed, and optionally what schema they should | ||
|  |      * adhere to | ||
|  |      * @default false | ||
|  |      */ | ||
|  |     additionalProperties?: Schema | boolean; | ||
|  |   } | ||
|  | 
 | ||
|  |   export type Schema = | ||
|  |     | RefSchema | ||
|  |     | StringSchema | ||
|  |     | IntegerSchema | ||
|  |     | NumberSchema | ||
|  |     | NullSchema | ||
|  |     | BooleanSchema | ||
|  |     | ArraySchema | ||
|  |     | TupleSchema | ||
|  |     | ObjectSchema; | ||
|  | 
 | ||
|  |   export interface Options { | ||
|  |     /** | ||
|  |      * Optionally add an external definition to reference from your schema | ||
|  |      */ | ||
|  |     schema?: Record<string, Schema> | ||
|  |     /** | ||
|  |      * Configure Ajv, which is used to evaluate conditional schemas and combined (anyOf) schemas | ||
|  |      */ | ||
|  |     ajv?: AjvOptions | ||
|  |     /** | ||
|  |      * Optionally configure how the integer will be rounded | ||
|  |      */ | ||
|  |     rounding?: 'ceil' | 'floor' | 'round' | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Build a stringify function using a schema of the documents that should be stringified | ||
|  |  * @param schema The schema used to stringify values | ||
|  |  * @param options The options to use (optional) | ||
|  |  */ | ||
|  | declare function build(schema: build.AnySchema, options?: build.Options): (doc: any) => any; | ||
|  | declare function build(schema: build.StringSchema, options?: build.Options): (doc: string) => string; | ||
|  | declare function build(schema: build.IntegerSchema | build.NumberSchema, options?: build.Options): (doc: number) => string; | ||
|  | declare function build(schema: build.NullSchema, options?: build.Options): (doc: null) => "null"; | ||
|  | declare function build(schema: build.BooleanSchema, options?: build.Options): (doc: boolean) => string; | ||
|  | declare function build(schema: build.ArraySchema | build.TupleSchema, options?: build.Options): (doc: any[]) => string; | ||
|  | declare function build(schema: build.ObjectSchema, options?: build.Options): (doc: object) => string; | ||
|  | declare function build(schema: build.Schema, options?: build.Options): (doc: object | any[] | string | number | boolean | null) => string; | ||
|  | 
 | ||
|  | export = build; |