Skip to content

Commit c607ea8

Browse files
deleniuswing328
authored andcommitted
Add fixes for es6 generator (#180)
Various fixes for JS (ES6) generator
1 parent 53d9878 commit c607ea8

194 files changed

Lines changed: 8076 additions & 4552 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,11 @@ public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
986986
}
987987
String jsdocType = getJSDocType(operation);
988988
operation.vendorExtensions.put("x-jsdoc-type", jsdocType);
989+
990+
// Format the return type correctly
991+
if (operation.returnType != null) {
992+
operation.vendorExtensions.put("x-return-type", normalizeType(operation.returnType));
993+
}
989994
}
990995
}
991996
return objs;

modules/openapi-generator/src/main/resources/Javascript/api.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
var authNames = [<#authMethods>'<name>'<#hasMore>, </hasMore></authMethods>];
8585
var contentTypes = [<#consumes>'<& mediaType>'<#hasMore>, </hasMore></consumes>];
8686
var accepts = [<#produces>'<& mediaType>'<#hasMore>, </hasMore></produces>];
87-
var returnType = <#returnType><&returnType></returnType><^returnType>null</returnType>;
87+
var returnType = <#vendorExtensions.x-return-type><&vendorExtensions.x-return-type></vendorExtensions.x-return-type><^vendorExtensions.x-return-type>null</vendorExtensions.x-return-type>;
8888

8989
return this.apiClient.callApi(
9090
'<&path>', '<httpMethod>',

modules/openapi-generator/src/main/resources/Javascript/es6/ApiClient.mustache

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import querystring from "querystring";
1515
* @alias module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}ApiClient
1616
* @class
1717
*/{{/emitJSDoc}}
18-
export default class ApiClient {
18+
class ApiClient {
1919
constructor() {
2020
{{#emitJSDoc}}/**
2121
* The base URL against which to resolve every API call's (relative) path.
@@ -221,43 +221,6 @@ export default class ApiClient {
221221
return newParams;
222222
}
223223

224-
{{#emitJSDoc}}/**
225-
* Enumeration of collection format separator strategies.
226-
* @enum {String}
227-
* @readonly
228-
*/{{/emitJSDoc}}
229-
static CollectionFormatEnum = {
230-
{{#emitJSDoc}}/**
231-
* Comma-separated values. Value: <code>csv</code>
232-
* @const
233-
*/{{/emitJSDoc}}
234-
CSV: ',',
235-
236-
{{#emitJSDoc}}/**
237-
* Space-separated values. Value: <code>ssv</code>
238-
* @const
239-
*/{{/emitJSDoc}}
240-
SSV: ' ',
241-
242-
{{#emitJSDoc}}/**
243-
* Tab-separated values. Value: <code>tsv</code>
244-
* @const
245-
*/{{/emitJSDoc}}
246-
TSV: '\t',
247-
248-
{{#emitJSDoc}}/**
249-
* Pipe(|)-separated values. Value: <code>pipes</code>
250-
* @const
251-
*/{{/emitJSDoc}}
252-
PIPES: '|',
253-
254-
{{#emitJSDoc}}/**
255-
* Native array. Value: <code>multi</code>
256-
* @const
257-
*/{{/emitJSDoc}}
258-
MULTI: 'multi'
259-
};
260-
261224
{{#emitJSDoc}}/**
262225
* Builds a string representation of an array-type actual parameter, according to the given collection format.
263226
* @param {Array} param An array parameter.
@@ -597,8 +560,46 @@ export default class ApiClient {
597560
};
598561
}
599562

563+
{{#emitJSDoc}}/**
564+
* Enumeration of collection format separator strategies.
565+
* @enum {String}
566+
* @readonly
567+
*/{{/emitJSDoc}}
568+
ApiClient.CollectionFormatEnum = {
569+
{{#emitJSDoc}}/**
570+
* Comma-separated values. Value: <code>csv</code>
571+
* @const
572+
*/{{/emitJSDoc}}
573+
CSV: ',',
574+
575+
{{#emitJSDoc}}/**
576+
* Space-separated values. Value: <code>ssv</code>
577+
* @const
578+
*/{{/emitJSDoc}}
579+
SSV: ' ',
580+
581+
{{#emitJSDoc}}/**
582+
* Tab-separated values. Value: <code>tsv</code>
583+
* @const
584+
*/{{/emitJSDoc}}
585+
TSV: '\t',
586+
587+
{{#emitJSDoc}}/**
588+
* Pipe(|)-separated values. Value: <code>pipes</code>
589+
* @const
590+
*/{{/emitJSDoc}}
591+
PIPES: '|',
592+
593+
{{#emitJSDoc}}/**
594+
* Native array. Value: <code>multi</code>
595+
* @const
596+
*/{{/emitJSDoc}}
597+
MULTI: 'multi'
598+
};
599+
600600
{{#emitJSDoc}}/**
601601
* The default API client implementation.
602602
* @type {module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}ApiClient}
603603
*/{{/emitJSDoc}}
604604
ApiClient.instance = new ApiClient();
605+
export default ApiClient;

modules/openapi-generator/src/main/resources/Javascript/es6/api.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export default class <classname> {
6969
let authNames = [<#authMethods>'<name>'<#hasMore>, </hasMore></authMethods>];
7070
let contentTypes = [<#consumes>'<& mediaType>'<#hasMore>, </hasMore></consumes>];
7171
let accepts = [<#produces>'<& mediaType>'<#hasMore>, </hasMore></produces>];
72-
let returnType = <#returnType><&returnType></returnType><^returnType>null</returnType>;
72+
let returnType = <#vendorExtensions.x-return-type><&vendorExtensions.x-return-type></vendorExtensions.x-return-type><^vendorExtensions.x-return-type>null</vendorExtensions.x-return-type>;
7373

7474
return this.apiClient.callApi(
7575
'<&path>', '<httpMethod>',
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
11
{{>licenseInfo}}
2-
32
import ApiClient from '../ApiClient';
43
{{#imports}}import {{import}} from './{{import}}';
5-
{{/imports}}
6-
7-
{{#models}}{{#model}}
8-
{{#isEnum}}{{>partial_model_enum_class}}{{/isEnum}}{{^isEnum}}{{>partial_model_generic}}{{/isEnum}}
9-
{{/model}}{{/models}}
4+
{{/imports}}{{#models}}{{#model}}{{#isEnum}}{{>partial_model_enum_class}}{{/isEnum}}{{^isEnum}}{{>partial_model_generic}}{{/isEnum}}{{/model}}{{/models}}

modules/openapi-generator/src/main/resources/Javascript/es6/partial_model_enum_class.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export default class {{classname}} {
99
* value: {{{value}}}
1010
* @const
1111
*/{{/emitJSDoc}}
12-
{{name}} = {{{value}}};
12+
"{{name}}" = {{{value}}};
1313

1414
{{/enumVars}}{{/allowableValues}}
1515

Lines changed: 70 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,49 @@
11

2-
{{#models}}{{#model}}
3-
4-
{{#emitJSDoc}}/**
5-
* The {{classname}} model module.
6-
* @module {{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
7-
* @version {{projectVersion}}
8-
*/{{/emitJSDoc}}
9-
export default class {{classname}} {{#parent}}{{^parentModel}}{{#vendorExtensions.x-isArray}}extends Array {{/vendorExtensions.x-isArray}}{{/parentModel}}{{/parent}}{
2+
{{#models}}{{#model}}{{#emitJSDoc}}/**
3+
* The {{classname}} model module.
4+
* @module {{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
5+
* @version {{projectVersion}}
6+
*/{{/emitJSDoc}}
7+
class {{classname}} {{#parent}}{{^parentModel}}{{#vendorExtensions.x-isArray}}extends Array {{/vendorExtensions.x-isArray}}{{/parentModel}}{{/parent}}{
108
{{#emitJSDoc}}/**
11-
* Constructs a new <code>{{classname}}</code>.{{#description}}
12-
* {{description}}{{/description}}
13-
* @alias module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
14-
* @class{{#useInheritance}}{{#parent}}
15-
* @extends {{#parentModel}}module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}{{/parentModel}}{{^parentModel}}{{#vendorExtensions.x-isArray}}Array{{/vendorExtensions.x-isArray}}{{#vendorExtensions.x-isMap}}Object{{/vendorExtensions.x-isMap}}{{/parentModel}}{{/parent}}{{#interfaces}}
16-
* @implements module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{.}}{{/interfaces}}{{/useInheritance}}{{#vendorExtensions.x-all-required}}
17-
* @param {{name}} {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{#description}}{{{description}}}{{/description}}{{/vendorExtensions.x-all-required}}
18-
*/{{/emitJSDoc}}
19-
20-
constructor({{#vendorExtensions.x-all-required}}{{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-all-required}}) {
21-
{{#parent}}{{^parentModel}}{{#vendorExtensions.x-isArray}}
9+
* Constructs a new <code>{{classname}}</code>.{{#description}}
10+
* {{description}}{{/description}}
11+
* @alias module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}{{#useInheritance}}{{#parent}}
12+
* @extends {{#parentModel}}module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}{{/parentModel}}{{^parentModel}}{{#vendorExtensions.x-isArray}}Array{{/vendorExtensions.x-isArray}}{{#vendorExtensions.x-isMap}}Object{{/vendorExtensions.x-isMap}}{{/parentModel}}{{/parent}}{{#interfaces}}
13+
* @implements module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{.}}{{/interfaces}}{{/useInheritance}}{{#vendorExtensions.x-all-required}}
14+
* @param {{name}} {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{#description}}{{{description}}}{{/description}}{{/vendorExtensions.x-all-required}}
15+
*/{{/emitJSDoc}}
16+
constructor({{#vendorExtensions.x-all-required}}{{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-all-required}}) { {{#parent}}{{^parentModel}}{{#vendorExtensions.x-isArray}}
2217
super();
23-
{{/vendorExtensions.x-isArray}}{{/parentModel}}{{/parent}}
24-
25-
{{#useInheritance}}
26-
{{#parentModel}}{{classname}}.call(this{{#vendorExtensions.x-all-required}}, {{name}}{{/vendorExtensions.x-all-required}});{{/parentModel}}
27-
{{#interfaceModels}}{{classname}}.call(this{{#vendorExtensions.x-all-required}}, {{name}}{{/vendorExtensions.x-all-required}});{{/interfaceModels}}
28-
{{/useInheritance}}
29-
30-
{{#vars}}{{#required}}this['{{baseName}}'] = {{name}};{{/required}}{{/vars}}
18+
{{/vendorExtensions.x-isArray}}{{/parentModel}}{{/parent}}{{#useInheritance}}
19+
{{#interfaceModels}}{{classname}}.initialize(this{{#vendorExtensions.x-all-required}}, {{name}}{{/vendorExtensions.x-all-required}});{{/interfaceModels}}{{/useInheritance}}
20+
{{classname}}.initialize(this{{#vendorExtensions.x-all-required}}, {{name}}{{/vendorExtensions.x-all-required}});
21+
}
3122

32-
{{#parent}}{{^parentModel}}return this;{{/parentModel}}{{/parent}}
23+
{{#emitJSDoc}}/**
24+
* Initializes the fields of this object.
25+
* This method is used by the constructors of any subclasses, in order to implement multiple inheritance (mix-ins).
26+
* Only for internal use.
27+
*/{{/emitJSDoc}}
28+
static initialize(obj{{#vendorExtensions.x-all-required}}, {{name}}{{/vendorExtensions.x-all-required}}) { {{#vars}}{{#required}}
29+
obj['{{baseName}}'] = {{name}};{{/required}}{{/vars}}
3330
}
3431

3532
{{#emitJSDoc}}/**
36-
* Constructs a <code>{{classname}}</code> from a plain JavaScript object, optionally creating a new instance.
37-
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
38-
* @param {Object} data The plain JavaScript object bearing properties of interest.
39-
* @param {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> obj Optional instance to populate.
40-
* @return {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> The populated <code>{{classname}}</code> instance.
41-
*/{{/emitJSDoc}}
33+
* Constructs a <code>{{classname}}</code> from a plain JavaScript object, optionally creating a new instance.
34+
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
35+
* @param {Object} data The plain JavaScript object bearing properties of interest.
36+
* @param {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> obj Optional instance to populate.
37+
* @return {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> The populated <code>{{classname}}</code> instance.
38+
*/{{/emitJSDoc}}
4239
static constructFromObject(data, obj) {
4340
if (data){{! TODO: support polymorphism: discriminator property on data determines class to instantiate.}} {
44-
obj = obj || new {{classname}}();
45-
46-
{{#parent}}{{^parentModel}}ApiClient.constructFromObject(data, obj, '{{vendorExtensions.x-itemType}}');{{/parentModel}}
47-
{{/parent}}
41+
obj = obj || new {{classname}}();{{#parent}}{{^parentModel}}
4842

49-
{{#useInheritance}}{{#parentModel}}{{classname}}.constructFromObject(data, obj);{{/parentModel}}
50-
{{#interfaces}}{{.}}.constructFromObject(data, obj);{{/interfaces}}
51-
{{/useInheritance}}
43+
ApiClient.constructFromObject(data, obj, '{{vendorExtensions.x-itemType}}');
44+
{{/parentModel}}{{/parent}}{{#useInheritance}}{{#parentModel}}
45+
{{classname}}.constructFromObject(data, obj);{{/parentModel}}{{#interfaces}}
46+
{{.}}.constructFromObject(data, obj);{{/interfaces}}{{/useInheritance}}
5247

5348
{{#vars}}
5449
if (data.hasOwnProperty('{{baseName}}')) {
@@ -59,61 +54,49 @@ export default class {{classname}} {{#parent}}{{^parentModel}}{{#vendorExtension
5954
return obj;
6055
}
6156

62-
{{#vars}}
63-
{{#emitJSDoc}}/**{{#description}}
64-
* {{{description}}}{{/description}}
65-
* @member {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{baseName}}{{#defaultValue}}
66-
* @default {{{defaultValue}}}{{/defaultValue}}
67-
*/{{/emitJSDoc}}
68-
{{baseName}} = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}undefined{{/defaultValue}};
69-
{{/vars}}
70-
71-
{{#useInheritance}}{{#interfaceModels}}
72-
// Implement {{classname}} interface:
73-
{{#allVars}}{{#emitJSDoc}}/**{{#description}}
74-
* {{{description}}}{{/description}}
75-
* @member {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{baseName}}{{#defaultValue}}
76-
* @default {{{defaultValue}}}{{/defaultValue}}
77-
*/{{/emitJSDoc}}
78-
{{baseName}} = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}undefined{{/defaultValue}};
79-
{{/allVars}}
80-
{{/interfaceModels}}{{/useInheritance}}
81-
82-
83-
{{#emitModelMethods}}{{#vars}}
84-
{{#emitJSDoc}}/**{{#description}}
85-
* Returns {{{description}}}{{/description}}{{#minimum}}
86-
* minimum: {{minimum}}{{/minimum}}{{#maximum}}
87-
* maximum: {{maximum}}{{/maximum}}
88-
* @return {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=>
89-
*/{{/emitJSDoc}}
57+
{{#emitModelMethods}}{{#vars}}{{#emitJSDoc}}/**{{#description}}
58+
* Returns {{{description}}}{{/description}}{{#minimum}}
59+
* minimum: {{minimum}}{{/minimum}}{{#maximum}}
60+
* maximum: {{maximum}}{{/maximum}}
61+
* @return {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=>
62+
*/{{/emitJSDoc}}
9063
{{getter}}() {
9164
return this.{{baseName}};
9265
}
9366

9467
{{#emitJSDoc}}/**{{#description}}
95-
* Sets {{{description}}}{{/description}}
96-
* @param {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{name}}{{#description}} {{{description}}}{{/description}}
97-
*/{{/emitJSDoc}}
68+
* Sets {{{description}}}{{/description}}
69+
* @param {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{name}}{{#description}} {{{description}}}{{/description}}
70+
*/{{/emitJSDoc}}
9871
{{setter}}({{name}}) {
9972
this['{{baseName}}'] = {{name}};
10073
}
101-
{{/vars}}{{/emitModelMethods}}
74+
{{/vars}}{{/emitModelMethods}}{{/model}}
75+
}
76+
77+
{{#vars}}{{#emitJSDoc}}/**{{#description}}
78+
* {{{description}}}{{/description}}
79+
* @member {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{baseName}}{{#defaultValue}}
80+
* @default {{{defaultValue}}}{{/defaultValue}}
81+
*/{{/emitJSDoc}}
82+
{{classname}}.prototype['{{baseName}}'] = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}undefined{{/defaultValue}};
10283

103-
{{#vars}}
104-
{{#isEnum}}
105-
{{^isContainer}}
84+
{{/vars}}
85+
86+
{{#useInheritance}}{{#interfaceModels}}// Implement {{classname}} interface:
87+
{{#allVars}}{{#emitJSDoc}}/**{{#description}}
88+
* {{{description}}}{{/description}}
89+
* @member {{=< >=}}{<&vendorExtensions.x-jsdoc-type>}<={{ }}=> {{baseName}}{{#defaultValue}}
90+
* @default {{{defaultValue}}}{{/defaultValue}}
91+
*/{{/emitJSDoc}}
92+
{{classname}}.prototype['{{baseName}}'] = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}undefined{{/defaultValue}};
93+
{{/allVars}}{{/interfaceModels}}{{/useInheritance}}
94+
95+
{{#vars}}{{#isEnum}}{{^isContainer}}
10696
{{>partial_model_inner_enum}}
107-
{{/isContainer}}
108-
{{/isEnum}}
109-
{{#items.isEnum}}
110-
{{#items}}
111-
{{^isContainer}}
97+
{{/isContainer}}{{/isEnum}}{{#items.isEnum}}{{#items}}{{^isContainer}}
11298
{{>partial_model_inner_enum}}
113-
{{/isContainer}}
114-
{{/items}}
115-
{{/items.isEnum}}
116-
{{/vars}}
99+
{{/isContainer}}{{/items}}{{/items.isEnum}}{{/vars}}
117100

118-
{{/model}}{{/models}}
119-
}
101+
export default {{classname}};
102+
{{/models}}
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1+
{{#emitJSDoc}}/**
2+
* Allowed values for the <code>{{baseName}}</code> property.
3+
* @enum {{=<% %>=}}{<%datatype%>}<%={{ }}=%>
4+
* @readonly
5+
*/{{/emitJSDoc}}
6+
{{classname}}['{{datatypeWithEnum}}'] = {
7+
{{#allowableValues}}{{#enumVars}}
18
{{#emitJSDoc}}/**
2-
* Allowed values for the <code>{{baseName}}</code> property.
3-
* @enum {{=<% %>=}}{<%datatype%>}<%={{ }}=%>
4-
* @readonly
5-
*/{{/emitJSDoc}}
6-
static {{datatypeWithEnum}} = {
7-
{{#allowableValues}}{{#enumVars}}
8-
{{#emitJSDoc}}/**
9-
* value: {{{value}}}
10-
* @const
11-
*/{{/emitJSDoc}}
12-
"{{name}}": {{{value}}}{{^-last}},
13-
{{/-last}}
14-
{{/enumVars}}{{/allowableValues}}
15-
};
9+
* value: {{{value}}}
10+
* @const
11+
*/{{/emitJSDoc}}
12+
"{{name}}": {{{value}}}{{^-last}},
13+
{{/-last}}
14+
{{/enumVars}}{{/allowableValues}}
15+
};

0 commit comments

Comments
 (0)