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.
		
		
		
		
		
			
		
			
				
					
					
						
							130 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							130 lines
						
					
					
						
							2.5 KiB
						
					
					
				
								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
							 |