Adding support for nested types, array and dates!
This commit is contained in:
@@ -32,15 +32,35 @@ export class JsonschemasService {
|
||||
for (let prop_name in resource.properties) {
|
||||
let prop = resource.properties[prop_name];
|
||||
|
||||
if (this.is_reference(prop)) {
|
||||
let subresourceName = this.get_reference_name(prop);
|
||||
resource.components.schemas[subresourceName] = this.buildResource(subresourceName);
|
||||
if (prop_name === '_id') {
|
||||
delete resource.properties[prop_name]
|
||||
} else if (this.is_reference(prop)) {
|
||||
this.resolveReference(resource, prop);
|
||||
} else if (prop.hasOwnProperty('oneOf')) {
|
||||
for (let i in prop.oneOf) {
|
||||
this.resolveReference(resource, prop.oneOf[i]);
|
||||
}
|
||||
} else if (prop.hasOwnProperty('items') && this.is_reference(prop.items)) {
|
||||
this.resolveReference(resource, prop.items);
|
||||
} else if (prop.format === 'date-time') {
|
||||
prop.type = "datetime";
|
||||
}
|
||||
}
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
||||
resolveReference(resource: any, prop_reference: any) {
|
||||
let subresourceName = this.get_reference_name(prop_reference);
|
||||
let subresource = this.buildResource(subresourceName);
|
||||
resource.components.schemas[subresourceName] = subresource;
|
||||
for (let subsubresourceName in subresource.components.schemas) {
|
||||
if (! resource.components.schemas.hasOwnProperty(subsubresourceName)) {
|
||||
resource.components.schemas[subsubresourceName] = subresource.components.schemas[subsubresourceName];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getCreateResource(resourceName: string): Observable<Schema> {
|
||||
return new Observable<Schema>((observer) => {
|
||||
this.getSchemas().subscribe(() => {
|
||||
@@ -75,6 +95,10 @@ export class JsonschemasService {
|
||||
return prop.hasOwnProperty('$ref');
|
||||
}
|
||||
|
||||
private is_union(prop: any) {
|
||||
return prop.hasOwnProperty('oneOf');
|
||||
}
|
||||
|
||||
private get_reference_name(prop: any) {
|
||||
return prop['$ref'].substring(prop['$ref'].lastIndexOf('/')+1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user