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
						
					
					
				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
 |