in desktop/scripts/swagger/validate-models.ts [146:209]
private checkPropertyTypes(metadata) {
for (const name of Object.keys(metadata)) {
const swaggerProperty = this.definition.properties![name];
if (!swaggerProperty) {
// this.addPropertyError(name, `Swagger is missing property`);
continue;
}
const swaggerType = swaggerProperty.type;
const property = metadata[name];
const type = property.type;
if (swaggerType === "string" && swaggerProperty.format === "date-time") {
if (type !== Date) {
this.addPropertyError(name, `Expected type to be a date but was ${type}`);
}
} else if (swaggerType === "string" && swaggerProperty.format === "duration") {
if (type !== Duration) {
this.addPropertyError(name, `Expected type to be a duration but was ${type}`);
}
} else if (swaggerType === "string") {
if (type !== String) {
this.addPropertyError(name, `Expected type to be a string but was ${type}`);
}
} else if (swaggerType === "integer" || swaggerType === "number") {
if (type !== Number) {
this.addPropertyError(name, `Expected type to be a number but was ${type}`);
}
} else if (swaggerType === "boolean") {
if (type !== Boolean) {
this.addPropertyError(name, `Expected type to be a boolean but was ${type}`);
}
} else if (swaggerType === "array") {
if (!property.list) {
this.addPropertyError(name, `Expected type to be a array but wasn't defined as a list. ${property}`
+ `Check it has the @ListProp property not @Prop`);
}
} else if (swaggerProperty.$ref) {
const refTypeName = swaggerProperty.$ref.replace("#/definitions/", "");
const nestedType = this.specs.getDefinition(refTypeName);
if (nestedType.enum) {
if (type !== String) {
this.addPropertyError(name, `Expected type to be a enum ${refTypeName} but was ${type}`);
}
} else {
try {
const modelCls = getModel(refTypeName);
if (modelCls !== property.type) {
this.addPropertyError(name,
`Expected type to be of type ${refTypeName} but was ${property.cls}`);
}
} catch (e) {
this.addPropertyError(name, e.message);
}
}
} else if (swaggerType === "object") {
if (type !== Object) {
this.addPropertyError(name, `Expected type to be an object but was ${type}`);
}
} else {
console.log("Property", this.modelName, name, swaggerProperty, metadata[name]);
process.exit(1);
}
}
}