in src/type-generator.ts [411:432]
private emitProperty(code: Code, name: string, propDef: JSONSchema4, structFqn: string, structDef: JSONSchema4, toJson: ToJsonFunction) {
const originalName = name;
// if the name starts with '$' (like $ref or $schema), we remove the "$"
// and it's the same deal - will produce invalid output
if (name.startsWith('$')) {
name = name.substring(1);
}
// convert the name to camel case so it's compatible with JSII
name = camelCase(name);
this.emitDescription(code, `${structFqn}#${originalName}`, propDef.description);
const propertyType = this.typeForProperty(`${structFqn}.${name}`, propDef);
const required = this.isPropertyRequired(originalName, structDef);
const optional = required ? '' : '?';
code.line(`readonly ${name}${optional}: ${propertyType.type};`);
code.line();
toJson.addField(originalName, name, propertyType.toJson);
}