From 676429ff3f24d136b47392084c3c29d1d3616844 Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 9 Nov 2018 15:33:44 -0500 Subject: [PATCH 1/6] Fix #1383 Poor Typings for Schema --- src/generator/generator.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/generator/generator.ts b/src/generator/generator.ts index b49f7f5cc36..42a26d0d759 100644 --- a/src/generator/generator.ts +++ b/src/generator/generator.ts @@ -42,13 +42,30 @@ export interface GeneratorOptions { includePrivate?: boolean; } +function getObjectType(item: SchemaItem): string { + if (item.additionalProperties) { + const valueType = getType(item.additionalProperties); + return `{ [key: string]: ${valueType} }`; + } else if (item.properties) { + const fields = item.properties; + const objectType = Object.keys(fields) + .map(field => ` ${field}?:${getType(fields[field])}`) + .join(','); + return `{${objectType} }`; + } else { + return 'any'; + } +} + function getType(item: SchemaItem): string { + if (item.$ref) { + return `Schema${item.$ref}`; + } switch (item.type) { case 'integer': return 'number'; case 'object': - // TODO: This can be improved with an inline type. - return 'any'; + return getObjectType(item); case 'array': const innerType = getType(item.items!); return `${innerType}[]`; From bf80de0468aef81b9fc27d443da11bb15507544b Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 9 Nov 2018 17:05:20 -0500 Subject: [PATCH 2/6] Fix special property --- src/generator/generator.ts | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/generator/generator.ts b/src/generator/generator.ts index 42a26d0d759..75295da6851 100644 --- a/src/generator/generator.ts +++ b/src/generator/generator.ts @@ -45,18 +45,30 @@ export interface GeneratorOptions { function getObjectType(item: SchemaItem): string { if (item.additionalProperties) { const valueType = getType(item.additionalProperties); - return `{ [key: string]: ${valueType} }`; + return `{ [key: string]: ${valueType}; }`; } else if (item.properties) { const fields = item.properties; - const objectType = Object.keys(fields) - .map(field => ` ${field}?:${getType(fields[field])}`) - .join(','); - return `{${objectType} }`; + // TODO: remove this once property with sprcial cha is removed + if (Object.keys(fields).filter(k => k.indexOf('-') > -1).length > 0) { + return `{ [key: string]: any; }`; + } + const objectType = + Object.keys(fields) + .map(field => `${field}?: ${getType(fields[field])};`) + .join(' '); + return `{ ${objectType} }`; } else { return 'any'; } } +function isSimpleType(type: string): boolean { + if (type.indexOf('{') > -1) { + return false; + } + return true; +} + function getType(item: SchemaItem): string { if (item.$ref) { return `Schema${item.$ref}`; @@ -68,7 +80,11 @@ function getType(item: SchemaItem): string { return getObjectType(item); case 'array': const innerType = getType(item.items!); - return `${innerType}[]`; + if (isSimpleType(innerType)) { + return `${innerType}[]`; + } else { + return `Array<${innerType}>`; + } default: return item.type!; } From 3db49554d4912c3318f9afc8ffa012c950df3b0c Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 9 Nov 2018 17:07:12 -0500 Subject: [PATCH 3/6] fix typo in comment --- src/generator/generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generator/generator.ts b/src/generator/generator.ts index 75295da6851..02ffd679d59 100644 --- a/src/generator/generator.ts +++ b/src/generator/generator.ts @@ -48,7 +48,7 @@ function getObjectType(item: SchemaItem): string { return `{ [key: string]: ${valueType}; }`; } else if (item.properties) { const fields = item.properties; - // TODO: remove this once property with sprcial cha is removed + // TODO: remove this once property with special char is removed if (Object.keys(fields).filter(k => k.indexOf('-') > -1).length > 0) { return `{ [key: string]: any; }`; } From 18c8a09cbb0dff71e97964d7e421c84f5e023bb9 Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 9 Nov 2018 17:46:43 -0500 Subject: [PATCH 4/6] clean property names --- src/generator/generator.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/generator/generator.ts b/src/generator/generator.ts index 02ffd679d59..c164d26b88e 100644 --- a/src/generator/generator.ts +++ b/src/generator/generator.ts @@ -48,13 +48,9 @@ function getObjectType(item: SchemaItem): string { return `{ [key: string]: ${valueType}; }`; } else if (item.properties) { const fields = item.properties; - // TODO: remove this once property with special char is removed - if (Object.keys(fields).filter(k => k.indexOf('-') > -1).length > 0) { - return `{ [key: string]: any; }`; - } const objectType = Object.keys(fields) - .map(field => `${field}?: ${getType(fields[field])};`) + .map(field => `${cleanPropertyName(field)}?: ${getType(fields[field])};`) .join(' '); return `{ ${objectType} }`; } else { @@ -69,6 +65,11 @@ function isSimpleType(type: string): boolean { return true; } +function cleanPropertyName(prop: string) { + const match = prop.match(/[-@.]/g); + return match ? `'${prop}'` : prop; +} + function getType(item: SchemaItem): string { if (item.$ref) { return `Schema${item.$ref}`; @@ -134,11 +135,6 @@ export class Generator { return param; } - private cleanPropertyName(prop: string) { - const match = prop.match(/[-@.]/g); - return match ? `'${prop}'` : prop; - } - private hasResourceParam(method: SchemaMethod) { return method.parameters && method.parameters['resource']; } @@ -158,7 +154,7 @@ export class Generator { this.env.addFilter('buildurl', buildurl); this.env.addFilter('oneLine', this.oneLine); this.env.addFilter('getType', getType); - this.env.addFilter('cleanPropertyName', this.cleanPropertyName); + this.env.addFilter('cleanPropertyName', cleanPropertyName); this.env.addFilter('cleanComments', this.cleanComments); this.env.addFilter('getPathParams', this.getPathParams); this.env.addFilter('getSafeParamName', this.getSafeParamName); From c387f301e1f9c1bfa04adf72461f84e2c28d736d Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 9 Nov 2018 18:01:10 -0500 Subject: [PATCH 5/6] fix lint --- src/generator/generator.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/generator/generator.ts b/src/generator/generator.ts index c164d26b88e..b26070dd37c 100644 --- a/src/generator/generator.ts +++ b/src/generator/generator.ts @@ -50,7 +50,9 @@ function getObjectType(item: SchemaItem): string { const fields = item.properties; const objectType = Object.keys(fields) - .map(field => `${cleanPropertyName(field)}?: ${getType(fields[field])};`) + .map( + field => + `${cleanPropertyName(field)}?: ${getType(fields[field])};`) .join(' '); return `{ ${objectType} }`; } else { From 759b35c57003a71b7b665fb06c19f24442e09080 Mon Sep 17 00:00:00 2001 From: Ajay Date: Tue, 13 Nov 2018 08:02:15 -0500 Subject: [PATCH 6/6] addming missing $ --- src/generator/generator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generator/generator.ts b/src/generator/generator.ts index b26070dd37c..f0c03c1a84d 100644 --- a/src/generator/generator.ts +++ b/src/generator/generator.ts @@ -74,7 +74,7 @@ function cleanPropertyName(prop: string) { function getType(item: SchemaItem): string { if (item.$ref) { - return `Schema${item.$ref}`; + return `Schema$${item.$ref}`; } switch (item.type) { case 'integer':