From 6966f4917df8e664a47563af516b9b2d51b6f226 Mon Sep 17 00:00:00 2001 From: Tobias Brauneis <34739665+tobifb@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:18:59 +0200 Subject: [PATCH 1/3] add parameter 'useURLSearchParams' to use JS build-in UrlSearchParams, instead of deprecated npm lib 'querystring' --- docs/generators/javascript.md | 1 + .../codegen/languages/JavascriptClientCodegen.java | 10 ++++++++++ .../libraries/javascript/ApiClient.mustache | 13 ++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/generators/javascript.md b/docs/generators/javascript.md index 2c4a02eee8f2..e8b1fa4b5115 100644 --- a/docs/generators/javascript.md +++ b/docs/generators/javascript.md @@ -43,6 +43,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sourceFolder|source folder for generated code| |src| |useInheritance|use JavaScript prototype chains & delegation for inheritance| |true| |usePromises|use Promises as return values from the client API, instead of superagent callbacks| |false| +|useURLSearchParams|use JS build-in UrlSearchParams, instead of deprecated npm lib 'querystring'| |false| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java index a03647b91060..06d0c634ae83 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java @@ -57,6 +57,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo public static final String EMIT_JS_DOC = "emitJSDoc"; public static final String USE_ES6 = "useES6"; public static final String NPM_REPOSITORY = "npmRepository"; + public static final String USE_URL_SEARCH_PARAMS = "useURLSearchParams"; public static final String LIBRARY_JAVASCRIPT = "javascript"; public static final String LIBRARY_APOLLO = "apollo"; @@ -80,6 +81,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo protected boolean useES6 = true; // default is ES6 @Setter protected String npmRepository = null; @Getter private String modelPropertyNaming = "camelCase"; + @Setter protected boolean useURLSearchParams = false; public JavascriptClientCodegen() { super(); @@ -190,6 +192,10 @@ public JavascriptClientCodegen() { .defaultValue(Boolean.TRUE.toString())); cliOptions.add(new CliOption(CodegenConstants.MODEL_PROPERTY_NAMING, CodegenConstants.MODEL_PROPERTY_NAMING_DESC).defaultValue("camelCase")); cliOptions.add(new CliOption(NPM_REPOSITORY, "Use this property to set an url your private npmRepo in the package.json")); + cliOptions.add(new CliOption(USE_URL_SEARCH_PARAMS, + "use JS build-in UrlSearchParams, instead of deprecated npm lib 'querystring'") + .defaultValue(Boolean.FALSE.toString()) + ); supportedLibraries.put(LIBRARY_JAVASCRIPT, "JavaScript client library"); supportedLibraries.put(LIBRARY_APOLLO, "Apollo REST DataSource"); @@ -267,6 +273,9 @@ public void processOpts() { if (additionalProperties.containsKey(NPM_REPOSITORY)) { setNpmRepository(((String) additionalProperties.get(NPM_REPOSITORY))); } + if (additionalProperties.containsKey(USE_URL_SEARCH_PARAMS)) { + setUseURLSearchParams(convertPropertyToBooleanAndWriteBack(USE_URL_SEARCH_PARAMS)); + } if (additionalProperties.containsKey(CodegenConstants.LIBRARY)) { setLibrary((String) additionalProperties.get(CodegenConstants.LIBRARY)); } @@ -334,6 +343,7 @@ public void preprocessOpenAPI(OpenAPI openAPI) { additionalProperties.put(EMIT_JS_DOC, emitJSDoc); additionalProperties.put(USE_ES6, useES6); additionalProperties.put(NPM_REPOSITORY, npmRepository); + additionalProperties.put(USE_URL_SEARCH_PARAMS, useURLSearchParams); // make api and model doc path available in mustache template additionalProperties.put("apiDocPath", apiDocPath); diff --git a/modules/openapi-generator/src/main/resources/Javascript/libraries/javascript/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Javascript/libraries/javascript/ApiClient.mustache index 542398b7f034..77bdd5ff1eab 100644 --- a/modules/openapi-generator/src/main/resources/Javascript/libraries/javascript/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Javascript/libraries/javascript/ApiClient.mustache @@ -1,7 +1,10 @@ {{>licenseInfo}} import superagent from "superagent"; +{{^useURLSearchParams}} import querystring from "querystring"; +{{! see https://www.npmjs.com/package/querystring && https://github.com/Gozala/querystring }} +{{/useURLSearchParams}} {{#emitJSDoc}}/** * @module {{#invokerPackage}}{{.}}/{{/invokerPackage}}ApiClient @@ -455,7 +458,15 @@ class ApiClient { } if (contentType === 'application/x-www-form-urlencoded') { - request.send(querystring.stringify(this.normalizeParams(formParams))); + {{^useURLSearchParams}} + let queryString = querystring.stringify(this.normalizeParams(formParams)); + {{/useURLSearchParams}} + {{#useURLSearchParams}} + let normalizedParams = this.normalizeParams(formParams) + let urlSearchParams = new URLSearchParams(normalizedParams); + let queryString = urlSearchParams.toString(); + {{/useURLSearchParams}} + request.send(queryString); } else if (contentType == 'multipart/form-data') { var _formParams = this.normalizeParams(formParams); for (var key in _formParams) { From 15c27e40d5dc02341f6d2c6e8e6193aa72aa0bb0 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 31 Oct 2024 13:48:05 +0800 Subject: [PATCH 2/3] update js samples --- samples/client/petstore/javascript-es6/src/ApiClient.js | 3 ++- .../client/petstore/javascript-promise-es6/src/ApiClient.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/samples/client/petstore/javascript-es6/src/ApiClient.js b/samples/client/petstore/javascript-es6/src/ApiClient.js index 271dc70cf0eb..d14d5ddf5a49 100644 --- a/samples/client/petstore/javascript-es6/src/ApiClient.js +++ b/samples/client/petstore/javascript-es6/src/ApiClient.js @@ -443,7 +443,8 @@ class ApiClient { } if (contentType === 'application/x-www-form-urlencoded') { - request.send(querystring.stringify(this.normalizeParams(formParams))); + let queryString = querystring.stringify(this.normalizeParams(formParams)); + request.send(queryString); } else if (contentType == 'multipart/form-data') { var _formParams = this.normalizeParams(formParams); for (var key in _formParams) { diff --git a/samples/client/petstore/javascript-promise-es6/src/ApiClient.js b/samples/client/petstore/javascript-promise-es6/src/ApiClient.js index 12762f0d47c9..0cfd0897936f 100644 --- a/samples/client/petstore/javascript-promise-es6/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise-es6/src/ApiClient.js @@ -435,7 +435,8 @@ class ApiClient { } if (contentType === 'application/x-www-form-urlencoded') { - request.send(querystring.stringify(this.normalizeParams(formParams))); + let queryString = querystring.stringify(this.normalizeParams(formParams)); + request.send(queryString); } else if (contentType == 'multipart/form-data') { var _formParams = this.normalizeParams(formParams); for (var key in _formParams) { From c062fcdbd5588d99150ee1bd095a08a35d5a6a90 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 31 Oct 2024 14:25:29 +0800 Subject: [PATCH 3/3] update samples --- .../codegen/languages/JavascriptClientCodegen.java | 2 +- samples/client/petstore/javascript-es6/src/ApiClient.js | 5 +++-- .../client/petstore/javascript-promise-es6/src/ApiClient.js | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java index 06d0c634ae83..a0849d9f0106 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java @@ -81,7 +81,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo protected boolean useES6 = true; // default is ES6 @Setter protected String npmRepository = null; @Getter private String modelPropertyNaming = "camelCase"; - @Setter protected boolean useURLSearchParams = false; + @Setter protected boolean useURLSearchParams = true; public JavascriptClientCodegen() { super(); diff --git a/samples/client/petstore/javascript-es6/src/ApiClient.js b/samples/client/petstore/javascript-es6/src/ApiClient.js index d14d5ddf5a49..22d36a30f7f8 100644 --- a/samples/client/petstore/javascript-es6/src/ApiClient.js +++ b/samples/client/petstore/javascript-es6/src/ApiClient.js @@ -13,7 +13,6 @@ import superagent from "superagent"; -import querystring from "querystring"; /** * @module ApiClient @@ -443,7 +442,9 @@ class ApiClient { } if (contentType === 'application/x-www-form-urlencoded') { - let queryString = querystring.stringify(this.normalizeParams(formParams)); + let normalizedParams = this.normalizeParams(formParams) + let urlSearchParams = new URLSearchParams(normalizedParams); + let queryString = urlSearchParams.toString(); request.send(queryString); } else if (contentType == 'multipart/form-data') { var _formParams = this.normalizeParams(formParams); diff --git a/samples/client/petstore/javascript-promise-es6/src/ApiClient.js b/samples/client/petstore/javascript-promise-es6/src/ApiClient.js index 0cfd0897936f..fc801fb55ee2 100644 --- a/samples/client/petstore/javascript-promise-es6/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise-es6/src/ApiClient.js @@ -13,7 +13,6 @@ import superagent from "superagent"; -import querystring from "querystring"; /** * @module ApiClient @@ -435,7 +434,9 @@ class ApiClient { } if (contentType === 'application/x-www-form-urlencoded') { - let queryString = querystring.stringify(this.normalizeParams(formParams)); + let normalizedParams = this.normalizeParams(formParams) + let urlSearchParams = new URLSearchParams(normalizedParams); + let queryString = urlSearchParams.toString(); request.send(queryString); } else if (contentType == 'multipart/form-data') { var _formParams = this.normalizeParams(formParams);