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.
		
		
		
		
		
			
		
			
				
					131 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					131 lines
				
				2.5 KiB
			| 
											3 years ago
										 | import {SchemaObject} from "../types" | ||
|  | 
 | ||
|  | type MetaSchema = (root: boolean) => SchemaObject | ||
|  | 
 | ||
|  | const shared: MetaSchema = (root) => { | ||
|  |   const sch: SchemaObject = { | ||
|  |     nullable: {type: "boolean"}, | ||
|  |     metadata: { | ||
|  |       optionalProperties: { | ||
|  |         union: {elements: {ref: "schema"}}, | ||
|  |       }, | ||
|  |       additionalProperties: true, | ||
|  |     }, | ||
|  |   } | ||
|  |   if (root) sch.definitions = {values: {ref: "schema"}} | ||
|  |   return sch | ||
|  | } | ||
|  | 
 | ||
|  | const emptyForm: MetaSchema = (root) => ({ | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const refForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     ref: {type: "string"}, | ||
|  |   }, | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const typeForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     type: { | ||
|  |       enum: [ | ||
|  |         "boolean", | ||
|  |         "timestamp", | ||
|  |         "string", | ||
|  |         "float32", | ||
|  |         "float64", | ||
|  |         "int8", | ||
|  |         "uint8", | ||
|  |         "int16", | ||
|  |         "uint16", | ||
|  |         "int32", | ||
|  |         "uint32", | ||
|  |       ], | ||
|  |     }, | ||
|  |   }, | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const enumForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     enum: {elements: {type: "string"}}, | ||
|  |   }, | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const elementsForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     elements: {ref: "schema"}, | ||
|  |   }, | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const propertiesForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     properties: {values: {ref: "schema"}}, | ||
|  |   }, | ||
|  |   optionalProperties: { | ||
|  |     optionalProperties: {values: {ref: "schema"}}, | ||
|  |     additionalProperties: {type: "boolean"}, | ||
|  |     ...shared(root), | ||
|  |   }, | ||
|  | }) | ||
|  | 
 | ||
|  | const optionalPropertiesForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     optionalProperties: {values: {ref: "schema"}}, | ||
|  |   }, | ||
|  |   optionalProperties: { | ||
|  |     additionalProperties: {type: "boolean"}, | ||
|  |     ...shared(root), | ||
|  |   }, | ||
|  | }) | ||
|  | 
 | ||
|  | const discriminatorForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     discriminator: {type: "string"}, | ||
|  |     mapping: { | ||
|  |       values: { | ||
|  |         metadata: { | ||
|  |           union: [propertiesForm(false), optionalPropertiesForm(false)], | ||
|  |         }, | ||
|  |       }, | ||
|  |     }, | ||
|  |   }, | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const valuesForm: MetaSchema = (root) => ({ | ||
|  |   properties: { | ||
|  |     values: {ref: "schema"}, | ||
|  |   }, | ||
|  |   optionalProperties: shared(root), | ||
|  | }) | ||
|  | 
 | ||
|  | const schema: MetaSchema = (root) => ({ | ||
|  |   metadata: { | ||
|  |     union: [ | ||
|  |       emptyForm, | ||
|  |       refForm, | ||
|  |       typeForm, | ||
|  |       enumForm, | ||
|  |       elementsForm, | ||
|  |       propertiesForm, | ||
|  |       optionalPropertiesForm, | ||
|  |       discriminatorForm, | ||
|  |       valuesForm, | ||
|  |     ].map((s) => s(root)), | ||
|  |   }, | ||
|  | }) | ||
|  | 
 | ||
|  | const jtdMetaSchema: SchemaObject = { | ||
|  |   definitions: { | ||
|  |     schema: schema(false), | ||
|  |   }, | ||
|  |   ...schema(true), | ||
|  | } | ||
|  | 
 | ||
|  | export default jtdMetaSchema |