Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] [typescript-angular] Base Path can't be set to '<empty string>' #2731

Closed
6 tasks done
DanielHabenicht opened this issue Apr 24, 2019 · 13 comments · Fixed by #3489 or #10057
Closed
6 tasks done

[BUG] [typescript-angular] Base Path can't be set to '<empty string>' #2731

DanielHabenicht opened this issue Apr 24, 2019 · 13 comments · Fixed by #3489 or #10057

Comments

@DanielHabenicht
Copy link
Contributor

DanielHabenicht commented Apr 24, 2019

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used?
  • Have you search for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Bounty to sponsor the fix (example)
Description

If the basePath in the config is set to '' (empty string). The configuration is ignored and 'http://localhost' is used instead. That is unexpected behaviour.

Background

The basePath of the typescript-angular generated Files are currently set to 'http://localhost' (as a Fallback). When trying to setup the basePath to '' (empty String) the config is not used as the generated line of code configuration.basePath || basePath || this.basePath; is evaluated to false, because empty string in javascript is false.

  protected basePath = 'http://localhost';
  public configuration = new Configuration();

  constructor(
    protected httpClient: HttpClient,
    @Optional() @Inject(BASE_PATH) basePath: string,
    @Optional() configuration: Configuration
  ) {
    if (configuration) {
      this.configuration = configuration;
      this.configuration.basePath = configuration.basePath || basePath || this.basePath;
    } else {
      this.configuration.basePath = basePath || this.basePath;
    }
  }
openapi-generator version

4.0.0-beta2

OpenAPI declaration file content or url
Command line used for generation
npm install @openapitools/openapi-generator-cli@0.0.8-4.0.0-beta2
openapi-generator generate -i swagger.json -g typescript-angular -o projects/client-api/src/lib/ --additional-properties="ngVersion=6.1.7" --additional-properties="supportsES6=true"
Steps to reproduce
  1. Generate typescript-angular package from openapi.config
  2. Configure the ApiModule in app.module.ts
  3. Use a service from the generated typescript-angular package.
Related issues/PRs

Nothing found.

Suggest a fix

Two ways:

  1. Remove the fallback basePath by setting it to '' (empty string)
  2. Fix the evalutation basePath property.
@auto-labeler
Copy link

auto-labeler bot commented Apr 24, 2019

👍 Thanks for opening this issue!
🏷 I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.

@macjohnny
Copy link
Member

@DanielHabenicht would you like to implement a fix for this?

@DanielHabenicht
Copy link
Contributor Author

If you can tell me where the basePath is set I would be more than happy to provide a PR. :)
I've ready searched for it but could not find the code.

@macjohnny
Copy link
Member

protected basePath = '{{{basePath}}}';
public defaultHeaders = new {{#useHttpClient}}Http{{/useHttpClient}}Headers();
public configuration = new Configuration();
constructor(protected {{#useHttpClient}}httpClient: HttpClient{{/useHttpClient}}{{^useHttpClient}}http: Http{{/useHttpClient}}, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {
if (configuration) {
this.configuration = configuration;
this.configuration.basePath = configuration.basePath || basePath || this.basePath;
} else {
this.configuration.basePath = basePath || this.basePath;
}

@macjohnny
Copy link
Member

But you can set the basepath in your .yaml file

macjohnny pushed a commit that referenced this issue Sep 9, 2019
* [typescript-angular] Fixing #2731 - empty string basePath

* typescript-angular: refactor base path configuration

* typescript-angular: refactor base path configuration
@macjohnny macjohnny added this to the 4.1.2 milestone Sep 9, 2019
hokamoto pushed a commit to hokamoto/openapi-generator that referenced this issue Sep 12, 2019
* [typescript-angular] Fixing OpenAPITools#2731 - empty string basePath

* typescript-angular: refactor base path configuration

* typescript-angular: refactor base path configuration
wing328 pushed a commit that referenced this issue Sep 13, 2019
* First version of Nim Client

* Add some codes

* Add some codes

* Add some codes

* Add some codes

* Add some codes

* First version of Nim Client

* Add some codes

* Add some codes

* [Dart] Fix README template and update testing doco (#3809)

* [Dart] Fix README template and update testing doco

- deleted redundant shell script
- fixed and updated README template
- updated test package and moved to a dev_dependency
- removed old unused dev_dependency packages
- updated testing documentation in petstore sample

* Remove references to dart-flutter-petstore.sh

* Fix typos

* Fix typo

* Support custom git repository (#3757)

* add gitHost param to GeneratorSettings and related

* parameterize gitHost in READMEs

* parameterize gitHost in go.mod

* parameterize gitHost in git_push

* update petstore samples

* run ./bin/utils/export_docs_generators.sh

* run meta-codehen.sh

* Revert "run meta-codehen.sh"

This reverts commit d6d579f.

* Revert "run ./bin/utils/export_docs_generators.sh"

This reverts commit 1b81538.

* Revert "update petstore samples"

This reverts commit f513add.

* run ensure-up-to-date

* Add links to article and video (#3820)

* Better Go code format (#3819)

* better varible naming

* better comments

* better code format for go experimental client

* better comment, update samples

* Add some codes

* Add some codes

* Add some codes

* Add gRPC Protobuf schema generator (#3818)

* add grpc protobuf generator

* update doc

* add new doc

* add windows batch, comment out root proto

* 1792 fix remote spec handling and hash calculation (#3440)

* fixed bug where nullApi.java would be generated.  Instead, generated DefaultApi.java to match the default path /{pathParam} (#3821)

* Revert "1792 fix remote spec handling and hash calculation (#3440)"

This reverts commit 2a2eefe.

* Add  nickmeinhold to Dart technical committee (#3830)

* Bug #2845 typescript angular inheritance (#3812)

* issue #2845: enable 'supportsMultipleInheritance' on typescript angular client codegen

- note I reran ./bin/openapi3/typescript-angular-petstore-all.sh and no changes occurred.
  this suggests to me that the petstore.yaml sample should be improved to make use of the
  anyOf / allOf / oneOf keywords, in order to better show the effects of changes on generated code.

* issue #2845: run ./bin/openapi3/typescript-angular-petstore-all.sh

* run `mvn clean package && ./bin/typescript-angular-petstore-all.sh`

* revert extranous files

* fix warnings in csharp-netcore client (#3831)

* Add missing files to the form request (#3834)

* [client][go] avoid duplicated reflect imports (#3847)

* Following up for #3440 (1792 fix remote spec handling and hash calculation) (#3826)

* This patch fixes the bug that we cannot access to remote files when checking file updates.
Following up #3440, supporting auth.

* 1792 fix remote spec handling and hash calculation (#3440)

(cherry picked from commit 2a2eefe)

* fix detecting remote file / local file logic while finding the hash file, taking care of IllegalArgumentException for local files.

* add testcase

* Add a link (#3850)

* Add Element AI to the list (#3856)

* maven-plugin-plugin 3.6.0 (#3854)

*  [Java][okhttp-gson] fix failure to deserialize floats (#3846)

* fixed bug where nullApi.java would be generated.  Instead, generated DefaultApi.java to match the default path /{pathParam}

* fix to bug #3157

* update samples

* Adds Http Info To Dart Api (#3851)

* [C++][Pistache] Add missing setter for arrays (#3837)

* [C++][Pistache] Add missing setter for arrays

Fixes #3769

* [C++][Pistache] Update Petstore sample

* typescript-inversify: improve check for required parameters, support multiple media types (#3849)

* [typescript-inversify] Allow falsy parameters

A required parameter to an api method must not be `null` or `undefined`.
It can be any other falsy value, e.g. `""`, `0` or `false` though. This
change makes sure an error is only thrown in the former case and not in
the latter.

* [typescript-inversify] Handle multiple media types

The Accept and Content-Type HTTP headers can contain a list of media
types. Previously all but the first media type in the api definition
were ignored. Now the headers are properly generated.

* [typescript-inversify] Fix http client interface

The api service methods allow the `body` parameter to be optional. The
parameter is then passed to an `IHttpClient`. So it needs to be optional
there as well.
Also fixed the sample implementation `HttpClient`.

Fixes #3618.

* [typescript-inversify] Regenerate Petstore sample

* [typescript-inversify] Use more explicit null check

This does not change the semantic of the generated code, but makes it more explicit.

Co-Authored-By: Esteban Gehring <esteban.gehring@gmail.com>

* [typescript-angular] allow empty string basePath (#3489)

* [typescript-angular] Fixing #2731 - empty string basePath

* typescript-angular: refactor base path configuration

* typescript-angular: refactor base path configuration

* Fix/r/serialization fix and minor 3xx resp fix (#3817)

* fix(qlik): fix for minor serialization bug

* fix(r): add petsore generated classes

* fix(r): indendation fixes

* typescript-axios: Fix baseoptions (#3866)

* Fixed missing baseOptions of typescript-axios.

The typescript-axios template was missing the baseOptions setting when building an API Configuration. Set it.

* update sample.

* re-generate typescript axios samples

* Rename gRPC generator to "protobuf-schema" (#3864)

* rename grpc generator to protobuf-schema

* update doc

* Prepare v4.1.2 release (#3873)

* update samples

* update date

* fix version in readme

* BugFix #2053 Spring Boot fails to parse LocalDate query parameter (#3860)

Adds the format annotation so that Spring is able to serialize OpenApi date/date-time format into LocalDate/OffsetDateTime.

* update doc, samples (#3875)

* update stable release

* Update the batch for Windows

* Add a test snippet

* Update ensure-up-to-date

* Add Nim to README.md

* Ran ensure-up-to-date to pass CircleCI tests
@nyszilard
Copy link

nyszilard commented Sep 30, 2021

It doesn't work for me...

@Bean
public OpenAPI openAPI() {
    OpenAPI openAPI = new OpenAPI().info(
        new Info()
            .title("API")
            .description("API description")
            .version("1.0.0")
    );
    Server server = new Server();
    server.setUrl("");
    openAPI.setServers(List.of(server));
    return openAPI;
}

Output:

protected basePath = 'http://localhost';

@bartbergmans
Copy link

For our project where we use the latest version of the openapi-generator it still defaults the basePath as http://localhost. Any idea if this problem is back or if we are using it wrong?

@NetzwergX
Copy link

Neither the empty string nor a relative URL like / currently work. This makes it extremely hard to use the generator for portable code. We have at least two different projects where we'd like to set the base path to /. It appears that way in our YAML file, and the generator should not simply ignore that.

Please redirect effort towards this issue, it has been open long enough. We are currently patching the generated source files, which is a really, really dirty practice.

@macjohnny
Copy link
Member

@NetzwergX happy to accept your PR

@martinnovak
Copy link
Contributor

@NetzwergX what do you mean by having the base path as relative url, but setting it as /?

I use OpenAPI this way - I define API endpoint as /api/users and then I set the base url as empty string.

@hieucd04
Copy link

I'm running into this issue today too.

  • I tried to set basePath to both '' (empty string) and / and none of them work.
  • I also tried to set server to both '' (empty string) and / and none of them work.

My use case is simple: I just want to send HTTP requests to whatever appears in browser address bar without using window.location.href (window is not even available in my case as I'm doing React SSR)

My current workaround is to modify the typescript-axios template files which is OK for now but will become an overhead in the long run as I will have to keep updating the template to keep it in sync with its online version.

Can this issue be reopened so that I can subscribe to it and be notified when it's closed?

@macjohnny
Copy link
Member

@hieucd04 you can open a new issue and provide a fix for it

@kerren
Copy link

kerren commented Apr 9, 2023

For anyone that's arriving here from search, I've been able to set the basePath variable in Angular using basePath=<YOUR_PATH> in the additional-properties flag in the CLI generate command. An example would be:

npx --yes @openapitools/openapi-generator-cli \
	generate -i ./src/openapi.yaml \
	-g typescript-angular \
	-o ./src/generated-client \
	--additional-properties=fileNaming=kebab-case,basePath=''

You'll now see in your Angular classes the following:

	protected basePath = '';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
8 participants