From e50e653e3d8788d0e2e9bb4d4f923d4413cc41ae Mon Sep 17 00:00:00 2001 From: Julien Dupouy Date: Sun, 26 Mar 2017 16:53:35 +0200 Subject: [PATCH] Binary support for javascript client (#5194) --- .../languages/JavascriptClientCodegen.java | 9 +++++---- .../main/resources/Javascript/ApiClient.mustache | 6 ++++++ .../main/resources/Javascript/package.mustache | 2 +- .../codegen/javascript/JavaScriptModelTest.java | 4 ++-- .../petstore/javascript-promise/docs/FakeApi.md | 8 ++++---- .../javascript-promise/docs/FormatTest.md | 4 ++-- .../petstore/javascript-promise/package.json | 2 +- .../petstore/javascript-promise/src/ApiClient.js | 6 ++++++ .../javascript-promise/src/api/FakeApi.js | 16 ++++++++-------- .../javascript-promise/src/model/FormatTest.js | 10 +++++----- .../client/petstore/javascript/docs/FakeApi.md | 8 ++++---- .../petstore/javascript/docs/FormatTest.md | 4 ++-- samples/client/petstore/javascript/package.json | 2 +- .../client/petstore/javascript/src/ApiClient.js | 6 ++++++ .../petstore/javascript/src/api/FakeApi.js | 8 ++++---- .../petstore/javascript/src/model/FormatTest.js | 10 +++++----- 16 files changed, 62 insertions(+), 43 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 04f557cef83a..f5a4c59162ee 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -22,6 +22,7 @@ import io.swagger.models.Operation; import io.swagger.models.Swagger; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.BooleanProperty; +import io.swagger.models.properties.ByteArrayProperty; import io.swagger.models.properties.DateProperty; import io.swagger.models.properties.DateTimeProperty; import io.swagger.models.properties.DoubleProperty; @@ -113,7 +114,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo ); languageSpecificPrimitives = new HashSet( - Arrays.asList("String", "Boolean", "Number", "Array", "Object", "Date", "File") + Arrays.asList("String", "Boolean", "Number", "Array", "Object", "Date", "File", "Blob") ); defaultIncludes = new HashSet(languageSpecificPrimitives); @@ -138,8 +139,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo typeMapping.put("object", "Object"); typeMapping.put("integer", "Number"); // binary not supported in JavaScript client right now, using String as a workaround - typeMapping.put("ByteArray", "String"); // I don't see ByteArray defined in the Swagger docs. - typeMapping.put("binary", "String"); + typeMapping.put("ByteArray", "Blob"); // I don't see ByteArray defined in the Swagger docs. + typeMapping.put("binary", "Blob"); typeMapping.put("UUID", "String"); importMapping.clear(); @@ -652,7 +653,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo * @return Normalized type */ public String normalizeType(String type) { - return type.replaceAll("\\b(Boolean|Integer|Number|String|Date)\\b", "'$1'"); + return type.replaceAll("\\b(Boolean|Integer|Number|String|Date|Blob)\\b", "'$1'"); } @Override diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index a07b3366a690..2310731ef450 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -421,6 +421,10 @@ request.accept(accept); } + if (returnType === 'Blob') { + request.responseType('blob'); + } + // Attach previously saved cookies, if enabled if (this.enableCookies){ if (typeof window === 'undefined') { @@ -501,6 +505,8 @@ return String(data); case 'Date': return this.parseDate(String(data)); + case 'Blob': + return data; default: if (type === Object) { // generic object, return directly diff --git a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache index 95ff2b10cfae..8922c22b72d1 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache @@ -8,7 +8,7 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "superagent": "1.7.1" + "superagent": "3.5.2" }, "devDependencies": { "mocha": "~2.3.4", diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/javascript/JavaScriptModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/javascript/JavaScriptModelTest.java index b159918c73c3..a1b87bfe2c22 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/javascript/JavaScriptModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/javascript/JavaScriptModelTest.java @@ -420,10 +420,10 @@ public class JavaScriptModelTest { Assert.assertEquals(property.baseName, "inputBinaryData"); Assert.assertEquals(property.getter, "getInputBinaryData"); Assert.assertEquals(property.setter, "setInputBinaryData"); - Assert.assertEquals(property.datatype, "String"); + Assert.assertEquals(property.datatype, "Blob"); Assert.assertEquals(property.name, "inputBinaryData"); Assert.assertEquals(property.defaultValue, null); - Assert.assertEquals(property.baseType, "String"); + Assert.assertEquals(property.baseType, "Blob"); Assert.assertFalse(property.hasMore); Assert.assertFalse(property.required); Assert.assertTrue(property.isNotContainer); diff --git a/samples/client/petstore/javascript-promise/docs/FakeApi.md b/samples/client/petstore/javascript-promise/docs/FakeApi.md index 5d825199ebf3..4f81dbd60bc8 100644 --- a/samples/client/petstore/javascript-promise/docs/FakeApi.md +++ b/samples/client/petstore/javascript-promise/docs/FakeApi.md @@ -78,7 +78,7 @@ var _double = 1.2; // Number | None var patternWithoutDelimiter = "patternWithoutDelimiter_example"; // String | None -var _byte = "B"; // String | None +var _byte = B; // Blob | None var opts = { 'integer': 56, // Number | None @@ -86,7 +86,7 @@ var opts = { 'int64': 789, // Number | None '_float': 3.4, // Number | None '_string': "_string_example", // String | None - 'binary': "B", // String | None + 'binary': B, // Blob | None '_date': new Date("2013-10-20"), // Date | None 'dateTime': new Date("2013-10-20T19:20:30+01:00"), // Date | None 'password': "password_example", // String | None @@ -107,13 +107,13 @@ Name | Type | Description | Notes **_number** | **Number**| None | **_double** | **Number**| None | **patternWithoutDelimiter** | **String**| None | - **_byte** | **String**| None | + **_byte** | **Blob**| None | **integer** | **Number**| None | [optional] **int32** | **Number**| None | [optional] **int64** | **Number**| None | [optional] **_float** | **Number**| None | [optional] **_string** | **String**| None | [optional] - **binary** | **String**| None | [optional] + **binary** | **Blob**| None | [optional] **_date** | **Date**| None | [optional] **dateTime** | **Date**| None | [optional] **password** | **String**| None | [optional] diff --git a/samples/client/petstore/javascript-promise/docs/FormatTest.md b/samples/client/petstore/javascript-promise/docs/FormatTest.md index 33f4070faf4e..cb5b11416faa 100644 --- a/samples/client/petstore/javascript-promise/docs/FormatTest.md +++ b/samples/client/petstore/javascript-promise/docs/FormatTest.md @@ -10,8 +10,8 @@ Name | Type | Description | Notes **_float** | **Number** | | [optional] **_double** | **Number** | | [optional] **_string** | **String** | | [optional] -**_byte** | **String** | | -**binary** | **String** | | [optional] +**_byte** | **Blob** | | +**binary** | **Blob** | | [optional] **_date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **String** | | [optional] diff --git a/samples/client/petstore/javascript-promise/package.json b/samples/client/petstore/javascript-promise/package.json index d57d1d6f2317..b7f9daa0ab55 100644 --- a/samples/client/petstore/javascript-promise/package.json +++ b/samples/client/petstore/javascript-promise/package.json @@ -8,7 +8,7 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "superagent": "1.7.1" + "superagent": "3.5.2" }, "devDependencies": { "mocha": "~2.3.4", diff --git a/samples/client/petstore/javascript-promise/src/ApiClient.js b/samples/client/petstore/javascript-promise/src/ApiClient.js index 4b3872b980e8..5698969bf5d0 100644 --- a/samples/client/petstore/javascript-promise/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise/src/ApiClient.js @@ -414,6 +414,10 @@ if (accept) { request.accept(accept); } + + if (returnType === 'Blob') { + request.responseType('blob'); + } // Attach previously saved cookies, if enabled if (this.enableCookies){ @@ -477,6 +481,8 @@ return String(data); case 'Date': return this.parseDate(String(data)); + case 'Blob': + return data; default: if (type === Object) { // generic object, return directly diff --git a/samples/client/petstore/javascript-promise/src/api/FakeApi.js b/samples/client/petstore/javascript-promise/src/api/FakeApi.js index 30f48949f2a3..f6fc70bfb88c 100644 --- a/samples/client/petstore/javascript-promise/src/api/FakeApi.js +++ b/samples/client/petstore/javascript-promise/src/api/FakeApi.js @@ -102,14 +102,14 @@ * @param {Number} _number None * @param {Number} _double None * @param {String} patternWithoutDelimiter None - * @param {String} _byte None + * @param {Blob} _byte None * @param {Object} opts Optional parameters * @param {Number} opts.integer None * @param {Number} opts.int32 None * @param {Number} opts.int64 None * @param {Number} opts._float None * @param {String} opts._string None - * @param {String} opts.binary None + * @param {Blob} opts.binary None * @param {Date} opts._date None * @param {Date} opts.dateTime None * @param {String} opts.password None @@ -182,14 +182,14 @@ * @param {Number} _number None * @param {Number} _double None * @param {String} patternWithoutDelimiter None - * @param {String} _byte None + * @param {Blob} _byte None * @param {Object} opts Optional parameters * @param {Number} opts.integer None * @param {Number} opts.int32 None * @param {Number} opts.int64 None * @param {Number} opts._float None * @param {String} opts._string None - * @param {String} opts.binary None + * @param {Blob} opts.binary None * @param {Date} opts._date None * @param {Date} opts.dateTime None * @param {String} opts.password None @@ -214,8 +214,8 @@ * @param {module:model/String} opts.enumHeaderString Header parameter enum test (string) (default to -efg) * @param {Array.} opts.enumQueryStringArray Query parameter enum test (string array) * @param {module:model/String} opts.enumQueryString Query parameter enum test (string) (default to -efg) - * @param {Number} opts.enumQueryInteger Query parameter enum test (double) - * @param {Number} opts.enumQueryDouble Query parameter enum test (double) + * @param {module:model/Number} opts.enumQueryInteger Query parameter enum test (double) + * @param {module:model/Number} opts.enumQueryDouble Query parameter enum test (double) * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing HTTP response */ this.testEnumParametersWithHttpInfo = function(opts) { @@ -262,8 +262,8 @@ * @param {module:model/String} opts.enumHeaderString Header parameter enum test (string) (default to -efg) * @param {Array.} opts.enumQueryStringArray Query parameter enum test (string array) * @param {module:model/String} opts.enumQueryString Query parameter enum test (string) (default to -efg) - * @param {Number} opts.enumQueryInteger Query parameter enum test (double) - * @param {Number} opts.enumQueryDouble Query parameter enum test (double) + * @param {module:model/Number} opts.enumQueryInteger Query parameter enum test (double) + * @param {module:model/Number} opts.enumQueryDouble Query parameter enum test (double) * @return {Promise} a {@link https://www.promisejs.org/|Promise} */ this.testEnumParameters = function(opts) { diff --git a/samples/client/petstore/javascript-promise/src/model/FormatTest.js b/samples/client/petstore/javascript-promise/src/model/FormatTest.js index cc72ebd47f3c..b9fd8e93fa9e 100644 --- a/samples/client/petstore/javascript-promise/src/model/FormatTest.js +++ b/samples/client/petstore/javascript-promise/src/model/FormatTest.js @@ -42,7 +42,7 @@ * @alias module:model/FormatTest * @class * @param _number {Number} - * @param _byte {String} + * @param _byte {Blob} * @param _date {Date} * @param password {String} */ @@ -97,10 +97,10 @@ obj['string'] = ApiClient.convertToType(data['string'], 'String'); } if (data.hasOwnProperty('byte')) { - obj['byte'] = ApiClient.convertToType(data['byte'], 'String'); + obj['byte'] = ApiClient.convertToType(data['byte'], Blob); } if (data.hasOwnProperty('binary')) { - obj['binary'] = ApiClient.convertToType(data['binary'], 'String'); + obj['binary'] = ApiClient.convertToType(data['binary'], Blob); } if (data.hasOwnProperty('date')) { obj['date'] = ApiClient.convertToType(data['date'], 'Date'); @@ -147,11 +147,11 @@ */ exports.prototype['string'] = undefined; /** - * @member {String} byte + * @member {Blob} byte */ exports.prototype['byte'] = undefined; /** - * @member {String} binary + * @member {Blob} binary */ exports.prototype['binary'] = undefined; /** diff --git a/samples/client/petstore/javascript/docs/FakeApi.md b/samples/client/petstore/javascript/docs/FakeApi.md index 3b05c7158e09..af6d06ccd3ee 100644 --- a/samples/client/petstore/javascript/docs/FakeApi.md +++ b/samples/client/petstore/javascript/docs/FakeApi.md @@ -81,7 +81,7 @@ var _double = 1.2; // Number | None var patternWithoutDelimiter = "patternWithoutDelimiter_example"; // String | None -var _byte = "B"; // String | None +var _byte = B; // Blob | None var opts = { 'integer': 56, // Number | None @@ -89,7 +89,7 @@ var opts = { 'int64': 789, // Number | None '_float': 3.4, // Number | None '_string': "_string_example", // String | None - 'binary': "B", // String | None + 'binary': B, // Blob | None '_date': new Date("2013-10-20"), // Date | None 'dateTime': new Date("2013-10-20T19:20:30+01:00"), // Date | None 'password': "password_example", // String | None @@ -113,13 +113,13 @@ Name | Type | Description | Notes **_number** | **Number**| None | **_double** | **Number**| None | **patternWithoutDelimiter** | **String**| None | - **_byte** | **String**| None | + **_byte** | **Blob**| None | **integer** | **Number**| None | [optional] **int32** | **Number**| None | [optional] **int64** | **Number**| None | [optional] **_float** | **Number**| None | [optional] **_string** | **String**| None | [optional] - **binary** | **String**| None | [optional] + **binary** | **Blob**| None | [optional] **_date** | **Date**| None | [optional] **dateTime** | **Date**| None | [optional] **password** | **String**| None | [optional] diff --git a/samples/client/petstore/javascript/docs/FormatTest.md b/samples/client/petstore/javascript/docs/FormatTest.md index 33f4070faf4e..cb5b11416faa 100644 --- a/samples/client/petstore/javascript/docs/FormatTest.md +++ b/samples/client/petstore/javascript/docs/FormatTest.md @@ -10,8 +10,8 @@ Name | Type | Description | Notes **_float** | **Number** | | [optional] **_double** | **Number** | | [optional] **_string** | **String** | | [optional] -**_byte** | **String** | | -**binary** | **String** | | [optional] +**_byte** | **Blob** | | +**binary** | **Blob** | | [optional] **_date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **String** | | [optional] diff --git a/samples/client/petstore/javascript/package.json b/samples/client/petstore/javascript/package.json index d57d1d6f2317..b7f9daa0ab55 100644 --- a/samples/client/petstore/javascript/package.json +++ b/samples/client/petstore/javascript/package.json @@ -8,7 +8,7 @@ "test": "./node_modules/mocha/bin/mocha --recursive" }, "dependencies": { - "superagent": "1.7.1" + "superagent": "3.5.2" }, "devDependencies": { "mocha": "~2.3.4", diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 017b50b1335d..8cb614ae3c60 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -423,6 +423,10 @@ if (accept) { request.accept(accept); } + + if (returnType === 'Blob') { + request.responseType('blob'); + } // Attach previously saved cookies, if enabled if (this.enableCookies){ @@ -488,6 +492,8 @@ return String(data); case 'Date': return this.parseDate(String(data)); + case 'Blob': + return data; default: if (type === Object) { // generic object, return directly diff --git a/samples/client/petstore/javascript/src/api/FakeApi.js b/samples/client/petstore/javascript/src/api/FakeApi.js index 9a64ccfc0a60..431a790007ff 100644 --- a/samples/client/petstore/javascript/src/api/FakeApi.js +++ b/samples/client/petstore/javascript/src/api/FakeApi.js @@ -104,14 +104,14 @@ * @param {Number} _number None * @param {Number} _double None * @param {String} patternWithoutDelimiter None - * @param {String} _byte None + * @param {Blob} _byte None * @param {Object} opts Optional parameters * @param {Number} opts.integer None * @param {Number} opts.int32 None * @param {Number} opts.int64 None * @param {Number} opts._float None * @param {String} opts._string None - * @param {String} opts.binary None + * @param {Blob} opts.binary None * @param {Date} opts._date None * @param {Date} opts.dateTime None * @param {String} opts.password None @@ -196,8 +196,8 @@ * @param {module:model/String} opts.enumHeaderString Header parameter enum test (string) (default to -efg) * @param {Array.} opts.enumQueryStringArray Query parameter enum test (string array) * @param {module:model/String} opts.enumQueryString Query parameter enum test (string) (default to -efg) - * @param {Number} opts.enumQueryInteger Query parameter enum test (double) - * @param {Number} opts.enumQueryDouble Query parameter enum test (double) + * @param {module:model/Number} opts.enumQueryInteger Query parameter enum test (double) + * @param {module:model/Number} opts.enumQueryDouble Query parameter enum test (double) * @param {module:api/FakeApi~testEnumParametersCallback} callback The callback function, accepting three arguments: error, data, response */ this.testEnumParameters = function(opts, callback) { diff --git a/samples/client/petstore/javascript/src/model/FormatTest.js b/samples/client/petstore/javascript/src/model/FormatTest.js index cc72ebd47f3c..b9fd8e93fa9e 100644 --- a/samples/client/petstore/javascript/src/model/FormatTest.js +++ b/samples/client/petstore/javascript/src/model/FormatTest.js @@ -42,7 +42,7 @@ * @alias module:model/FormatTest * @class * @param _number {Number} - * @param _byte {String} + * @param _byte {Blob} * @param _date {Date} * @param password {String} */ @@ -97,10 +97,10 @@ obj['string'] = ApiClient.convertToType(data['string'], 'String'); } if (data.hasOwnProperty('byte')) { - obj['byte'] = ApiClient.convertToType(data['byte'], 'String'); + obj['byte'] = ApiClient.convertToType(data['byte'], Blob); } if (data.hasOwnProperty('binary')) { - obj['binary'] = ApiClient.convertToType(data['binary'], 'String'); + obj['binary'] = ApiClient.convertToType(data['binary'], Blob); } if (data.hasOwnProperty('date')) { obj['date'] = ApiClient.convertToType(data['date'], 'Date'); @@ -147,11 +147,11 @@ */ exports.prototype['string'] = undefined; /** - * @member {String} byte + * @member {Blob} byte */ exports.prototype['byte'] = undefined; /** - * @member {String} binary + * @member {Blob} binary */ exports.prototype['binary'] = undefined; /**