forked from loafle/openapi-generator-original
Fix for Issue #2471 "JavaScript client code generator emits invalid code for map and array types"
This commit is contained in:
parent
77638bc21d
commit
023a941a15
@ -12,9 +12,12 @@ import io.swagger.codegen.CodegenProperty;
|
|||||||
import io.swagger.codegen.CodegenType;
|
import io.swagger.codegen.CodegenType;
|
||||||
import io.swagger.codegen.SupportingFile;
|
import io.swagger.codegen.SupportingFile;
|
||||||
import io.swagger.codegen.DefaultCodegen;
|
import io.swagger.codegen.DefaultCodegen;
|
||||||
|
import io.swagger.models.ArrayModel;
|
||||||
|
import io.swagger.models.ComposedModel;
|
||||||
import io.swagger.models.Info;
|
import io.swagger.models.Info;
|
||||||
import io.swagger.models.License;
|
import io.swagger.models.License;
|
||||||
import io.swagger.models.Model;
|
import io.swagger.models.Model;
|
||||||
|
import io.swagger.models.ModelImpl;
|
||||||
import io.swagger.models.Operation;
|
import io.swagger.models.Operation;
|
||||||
import io.swagger.models.Swagger;
|
import io.swagger.models.Swagger;
|
||||||
import io.swagger.models.properties.ArrayProperty;
|
import io.swagger.models.properties.ArrayProperty;
|
||||||
@ -705,6 +708,19 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
|
|||||||
final CodegenModel parentCodegenModel = super.fromModel(codegenModel.parent, parentModel);
|
final CodegenModel parentCodegenModel = super.fromModel(codegenModel.parent, parentModel);
|
||||||
codegenModel = JavascriptClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel);
|
codegenModel = JavascriptClientCodegen.reconcileInlineEnums(codegenModel, parentCodegenModel);
|
||||||
}
|
}
|
||||||
|
if (model instanceof ArrayModel) {
|
||||||
|
ArrayModel am = (ArrayModel) model;
|
||||||
|
if (am.getItems() != null) {
|
||||||
|
codegenModel.vendorExtensions.put("x-isArray", true);
|
||||||
|
codegenModel.vendorExtensions.put("x-itemType", getSwaggerType(am.getItems()));
|
||||||
|
}
|
||||||
|
} else if (model instanceof ModelImpl) {
|
||||||
|
ModelImpl mm = (ModelImpl)model;
|
||||||
|
if (mm.getAdditionalProperties() != null) {
|
||||||
|
codegenModel.vendorExtensions.put("x-isMap", true);
|
||||||
|
codegenModel.vendorExtensions.put("x-itemType", getSwaggerType(mm.getAdditionalProperties()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return codegenModel;
|
return codegenModel;
|
||||||
}
|
}
|
||||||
|
@ -474,6 +474,25 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
{{#emitJSDoc}} /**
|
||||||
|
* Constructs a new map or array model from REST data.
|
||||||
|
* @param data {Object|Array} The REST data.
|
||||||
|
* @param obj {Object|Array} The target object or array.
|
||||||
|
*/
|
||||||
|
{{/emitJSDoc}} exports.constructFromObject = function(data, obj, itemType) {
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
for (var i = 0; i < data.length; i++) {
|
||||||
|
if (data.hasOwnProperty(i))
|
||||||
|
obj[i] = exports.convertToType(data[i], itemType);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (var k in data) {
|
||||||
|
if (data.hasOwnProperty(k))
|
||||||
|
result[k] = exports.convertToType(data[k], itemType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
{{#emitJSDoc}} /**
|
{{#emitJSDoc}} /**
|
||||||
* The default API client implementation.
|
* The default API client implementation.
|
||||||
* @type {module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}ApiClient}
|
* @type {module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}ApiClient}
|
||||||
|
@ -26,15 +26,19 @@
|
|||||||
* {{description}}{{/description}}
|
* {{description}}{{/description}}
|
||||||
* @alias module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
|
* @alias module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
|
||||||
* @class{{#useInheritance}}{{#parent}}
|
* @class{{#useInheritance}}{{#parent}}
|
||||||
* @extends module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{parent}}{{/parent}}{{#interfaces}}
|
* @extends {{#parentModel}}module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{parent}}{{/parentModel}}{{^parentModel}}{{#vendorExtensions.x-isArray}}Array{{/vendorExtensions.x-isArray}}{{#vendorExtensions.x-isMap}}Object{{/vendorExtensions.x-isMap}}{{/parentModel}}{{/parent}}{{#interfaces}}
|
||||||
* @implements module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{.}}{{/interfaces}}{{/useInheritance}}{{#vendorExtensions.x-all-required}}
|
* @implements module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{.}}{{/interfaces}}{{/useInheritance}}{{#vendorExtensions.x-all-required}}
|
||||||
* @param {{.}}{{/vendorExtensions.x-all-required}}
|
* @param {{.}}{{/vendorExtensions.x-all-required}}
|
||||||
*/{{/emitJSDoc}}
|
*/
|
||||||
var exports = function({{#vendorExtensions.x-all-required}}{{.}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-all-required}}) {
|
{{/emitJSDoc}} var exports = function({{#vendorExtensions.x-all-required}}{{.}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-all-required}}) {
|
||||||
{{#useInheritance}}{{#parentModel}} {{classname}}.call(this{{#vendorExtensions.x-all-required}}, {{.}}{{/vendorExtensions.x-all-required}});{{/parentModel}}
|
var _this = this;
|
||||||
{{#interfaceModels}} {{classname}}.call(this{{#vendorExtensions.x-all-required}}, {{.}}{{/vendorExtensions.x-all-required}});
|
{{#parent}}{{^parentModel}}{{#vendorExtensions.x-isArray}} _this = new Array();
|
||||||
{{/interfaceModels}}{{/useInheritance}}{{#vars}}{{#required}} this['{{baseName}}'] = {{name}};{{/required}}
|
Object.setPrototypeOf(_this, exports);
|
||||||
{{/vars}} };
|
{{/vendorExtensions.x-isArray}}{{/parentModel}}{{/parent}}{{#useInheritance}}{{#parent}}{{#parentModel}} {{classname}}.call(_this{{#vendorExtensions.x-all-required}}, {{.}}{{/vendorExtensions.x-all-required}});{{/parentModel}}{{/parent}}
|
||||||
|
{{#interfaceModels}} {{classname}}.call(_this{{#vendorExtensions.x-all-required}}, {{.}}{{/vendorExtensions.x-all-required}});
|
||||||
|
{{/interfaceModels}}{{/useInheritance}}{{#vars}}{{#required}} _this['{{baseName}}'] = {{name}};{{/required}}
|
||||||
|
{{/vars}}{{#parent}}{{^parentModel}} return _this;
|
||||||
|
{{/parentModel}}{{/parent}} };
|
||||||
|
|
||||||
{{#emitJSDoc}} /**
|
{{#emitJSDoc}} /**
|
||||||
* Constructs a <code>{{classname}}</code> from a plain JavaScript object, optionally creating a new instance.
|
* Constructs a <code>{{classname}}</code> from a plain JavaScript object, optionally creating a new instance.
|
||||||
@ -44,9 +48,10 @@
|
|||||||
* @return {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> The populated <code>{{classname}}</code> instance.
|
* @return {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> The populated <code>{{classname}}</code> instance.
|
||||||
*/
|
*/
|
||||||
{{/emitJSDoc}} exports.constructFromObject = function(data, obj) {
|
{{/emitJSDoc}} exports.constructFromObject = function(data, obj) {
|
||||||
if (data) { {{!// TODO: support polymorphism: discriminator property on data determines class to instantiate.}}
|
if (data){{! TODO: support polymorphism: discriminator property on data determines class to instantiate.}} {
|
||||||
obj = obj || new exports();
|
obj = obj || new exports();
|
||||||
{{#useInheritance}}{{#parent}} {{.}}.constructFromObject(data, obj);{{/parent}}
|
{{#parent}}{{^parentModel}} ApiClient.constructFromObject(data, obj, {{vendorExtensions.x-itemType}});
|
||||||
|
{{/parentModel}}{{/parent}}{{#useInheritance}}{{#parentModel}}{{#parent}} {{parent}}.constructFromObject(data, obj);{{/parent}}{{/parentModel}}
|
||||||
{{#interfaces}} {{.}}.constructFromObject(data, obj);
|
{{#interfaces}} {{.}}.constructFromObject(data, obj);
|
||||||
{{/interfaces}}{{/useInheritance}}{{#vars}} if (data.hasOwnProperty('{{baseName}}')) {
|
{{/interfaces}}{{/useInheritance}}{{#vars}} if (data.hasOwnProperty('{{baseName}}')) {
|
||||||
obj['{{baseName}}']{{{defaultValueWithParam}}}
|
obj['{{baseName}}']{{{defaultValueWithParam}}}
|
||||||
@ -54,10 +59,10 @@
|
|||||||
{{/vars}} }
|
{{/vars}} }
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
{{#useInheritance}}{{#parent}}
|
{{#useInheritance}}{{#parentModel}}{{#parent}}
|
||||||
exports.prototype = Object.create({{parent}}.prototype);
|
exports.prototype = Object.create({{parent}}.prototype);
|
||||||
exports.prototype.constructor = exports;
|
exports.prototype.constructor = exports;
|
||||||
{{/parent}}{{/useInheritance}}
|
{{/parent}}{{/parentModel}}{{/useInheritance}}
|
||||||
{{#vars}}{{#emitJSDoc}}
|
{{#vars}}{{#emitJSDoc}}
|
||||||
/**{{#description}}
|
/**{{#description}}
|
||||||
* {{{description}}}{{/description}}
|
* {{{description}}}{{/description}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user