Adding support for nested types, array and dates!

This commit is contained in:
2023-01-19 18:39:51 +01:00
parent aa4399ea20
commit 70d5a6e752
9 changed files with 246 additions and 23 deletions

View File

@@ -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);
}