-- type.json -- { "type": "object", "title": "Main schema", "properties": { "fields" : { "type": "object", "minProperties": 3, "maxProperties": 10, "propertyNames": { "pattern": "^\\P{Lu}" } }, "additional": { "type": "object", "properties": { "foo": { "type": "number" }, "bar": { "type": "number" } }, "additionalProperties": { "type": "string" } }, "map": { "type": "object", "additionalProperties": { "type": "string" } }, "patterns": { "type": "object", "properties": { "foo": { "type": "number" }, "bar": { "type": "number" } }, "patternProperties": { "^\\P{Lu}": { "type": "string" }, "^\\P{Lo}": { "type": "integer" } } }, "patternsNoProps": { "type": "object", "patternProperties": { "^\\P{Lu}": { "type": "string" }, "^\\P{Lo}": { "type": "integer" } } }, "complex": { "type": "object", "properties": { "foo": { "type": "number" }, "bar": { "type": "number" } }, "patternProperties": { "^\\P{Lu}": { "type": "string" }, "^\\P{Lo}": { "type": "integer" } }, "additionalProperties": { "type": "string" } }, "multi": { "type": [ "object", "number" ], "properties": { "foo": { "type": "number" }, "bar": { "type": "number" } }, "maxProperties": 5, "minimum": 7 } }, "additionalProperties": false } -- out.cue -- import "struct" // Main schema fields?: struct.MaxFields(10) & { [=~"^\\P{Lu}"]: _ } additional?: { foo?: number bar?: number {[!~"^(foo|bar)$"]: string} } map?: [string]: string patterns?: { foo?: number bar?: number {[=~"^\\P{Lu}" & !~"^(foo|bar)$"]: string} {[=~"^\\P{Lo}" & !~"^(foo|bar)$"]: int} ... } patternsNoProps?: { {[=~"^\\P{Lu}" & !~"^()$"]: string} {[=~"^\\P{Lo}" & !~"^()$"]: int} ... } complex?: { foo?: number bar?: number {[=~"^\\P{Lu}" & !~"^(foo|bar)$"]: string} {[=~"^\\P{Lo}" & !~"^(foo|bar)$"]: int} {[!~"^\\P{Lu}" & !~"^\\P{Lo}" & !~"^(foo|bar)$"]: string} } multi?: >=7 | struct.MaxFields(5) & { foo?: number bar?: number ... }