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
							 |