Skip to content

Commit

Permalink
fix: some object array cases
Browse files Browse the repository at this point in the history
  • Loading branch information
plantain-00 committed May 2, 2018
1 parent dd36f90 commit f9a32ff
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 3 deletions.
87 changes: 86 additions & 1 deletion demo/cases.json
Original file line number Diff line number Diff line change
Expand Up @@ -245,13 +245,98 @@
"exclusiveMinimum": 300,
"exclusiveMaximum": 400
}
},
"arrayType5": {
"type": "array",
"items": {
"type": "object",
"properties": {
"literal": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"required": [
"literal"
],
"additionalProperties": false
}
},
"arrayType6": {
"type": "array",
"items": {
"type": "object",
"properties": {
"literal": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"literal"
],
"additionalProperties": false
}
},
"arrayType7": {
"type": "array",
"items": {
"type": "object",
"properties": {
"literal": {
"anyOf": [
{
"$ref": "#/definitions/TypeLiteral"
},
{
"type": "null"
}
]
}
},
"required": [
"literal"
],
"additionalProperties": false
}
},
"arrayType8": {
"type": "array",
"items": {
"type": "object",
"properties": {
"literal": {
"type": "number"
}
},
"required": [
"literal"
],
"additionalProperties": false
}
}
},
"required": [
"arrayType1",
"arrayType2",
"arrayType3",
"arrayType4"
"arrayType4",
"arrayType5",
"arrayType6",
"arrayType7",
"arrayType8"
],
"additionalProperties": false
},
Expand Down
4 changes: 4 additions & 0 deletions demo/cases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,10 @@ type ArrayType = {
* @itemExclusiveMaximum 400
*/
arrayType4: uint32[];
arrayType5: { literal: number | string }[];
arrayType6: { literal: number | null }[];
arrayType7: { literal: TypeLiteral | null }[];
arrayType8: Array<{ literal: number }>;
}

type MapType7 = {
Expand Down
108 changes: 106 additions & 2 deletions demo/debug.json
Original file line number Diff line number Diff line change
Expand Up @@ -750,10 +750,114 @@
"exclusiveMaximum": 400
}
}
},
{
"name": "arrayType5",
"type": {
"kind": "array",
"type": {
"kind": "object",
"members": [
{
"name": "literal",
"type": {
"kind": "union",
"members": [
{
"kind": "number",
"type": "number"
},
{
"kind": "string"
}
]
}
}
],
"minProperties": 1,
"maxProperties": 1
}
}
},
{
"name": "arrayType6",
"type": {
"kind": "array",
"type": {
"kind": "object",
"members": [
{
"name": "literal",
"type": {
"kind": "union",
"members": [
{
"kind": "number",
"type": "number"
},
{
"kind": "null"
}
]
}
}
],
"minProperties": 1,
"maxProperties": 1
}
}
},
{
"name": "arrayType7",
"type": {
"kind": "array",
"type": {
"kind": "object",
"members": [
{
"name": "literal",
"type": {
"kind": "union",
"members": [
{
"kind": "reference",
"name": "TypeLiteral"
},
{
"kind": "null"
}
]
}
}
],
"minProperties": 1,
"maxProperties": 1
}
}
},
{
"name": "arrayType8",
"type": {
"kind": "array",
"type": {
"kind": "object",
"members": [
{
"name": "literal",
"type": {
"kind": "number",
"type": "number"
}
}
],
"minProperties": 1,
"maxProperties": 1
}
}
}
],
"minProperties": 4,
"maxProperties": 4
"minProperties": 8,
"maxProperties": 8
},
{
"kind": "object",
Expand Down
4 changes: 4 additions & 0 deletions online/variables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,10 @@ type ArrayType = {
* @itemExclusiveMaximum 400
*/
arrayType4: uint32[];
arrayType5: { literal: number | string }[];
arrayType6: { literal: number | null }[];
arrayType7: { literal: TypeLiteral | null }[];
arrayType8: Array<{ literal: number }>;
}
type MapType7 = {
Expand Down
20 changes: 20 additions & 0 deletions src/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,23 @@ export class Parser {
}
}

private getTypeOfArrayTypeReference(reference: ts.TypeReferenceNode): Type {
if (reference.typeArguments && reference.typeArguments.length === 1) {
const typeArgument = reference.typeArguments[0]
return {
kind: 'array',
type: this.getType(typeArgument)
}
} else {
return {
kind: 'array',
type: {
kind: undefined
}
}
}
}

private getTypeOfTypeReference(reference: ts.TypeReferenceNode): Type {
if (reference.typeName.kind === ts.SyntaxKind.Identifier) {
if (numberTypes.includes(reference.typeName.text)) {
Expand All @@ -415,6 +432,9 @@ export class Parser {
type: reference.typeName.text
}
} else {
if (reference.typeName.text === 'Array') {
return this.getTypeOfArrayTypeReference(reference)
}
return {
kind: 'reference',
name: reference.typeName.text
Expand Down

0 comments on commit f9a32ff

Please sign in to comment.