From 57462f229dde2bed57b28aab5126db326065f27d Mon Sep 17 00:00:00 2001 From: kemotx90 <60275739+kemotx90@users.noreply.github.com> Date: Mon, 7 Sep 2026 14:48:01 +0200 Subject: [PATCH 1/4] refactor(deps): remove legacy constructor decorators in favor of inject() Remove legacy @Inject() / @Optional() constructor decorators Adopt functional inject() API for cleaner dependency injection Required update to support "experimentalDecorators": false in new projects --- .../resources/typescript-angular/api.module.mustache | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache index c2b03b340bb2..19836f559e6a 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { {{configurationClassName}} } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -26,12 +26,14 @@ export class {{apiModuleClassName}} { }; } - constructor( @Optional() @SkipSelf() parentModule: {{apiModuleClassName}}, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: {{apiModuleClassName}} = inject({{apiModuleClassName}}, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('{{apiModuleClassName}} is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } From ea8fd5306cadbdbe6de4135b430c14e49e0921ed Mon Sep 17 00:00:00 2001 From: kemotx90 <60275739+kemotx90@users.noreply.github.com> Date: Mon, 7 Sep 2026 14:49:46 +0200 Subject: [PATCH 2/4] refactor(deps): remove legacy constructor decorators in favor of inject() Remove legacy @Inject() / @Optional() constructor decorators Adopt functional inject() API for cleaner dependency injection Required update to support "experimentalDecorators": false in new projects --- .../resources/typescript-angular/api.service.mustache | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/api.service.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/api.service.mustache index f60df119a660..3581b3df86e6 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/api.service.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/api.service.mustache @@ -1,7 +1,7 @@ {{>licenseInfo}} /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent{{#httpContextInOptions}}, HttpContext {{/httpContextInOptions}} } from '@angular/common/http'; @@ -62,8 +62,13 @@ export class {{classname}} extends BaseService implements {{classname}}Interface export class {{classname}} extends BaseService { {{/withInterfaces}} - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: {{configurationClassName}}) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject({{configurationClassName}}, { optional: true }) ?? undefined + ); } {{#operation}} From 284b52856d8b52e17693769d3b2567b6cd67b821 Mon Sep 17 00:00:00 2001 From: 048200987 Date: Mon, 7 Sep 2026 16:03:01 +0200 Subject: [PATCH 3/4] execute ./bin/generate-samples.sh bin/configs/typescript-angular* execute ./bin/utils/export_docs_generators.sh --- .../builds/query-param-deep-object/api.module.ts | 12 +++++++----- .../query-param-deep-object/api/default.service.ts | 11 ++++++++--- .../builds/query-param-form/api.module.ts | 12 +++++++----- .../builds/query-param-form/api/default.service.ts | 11 ++++++++--- .../builds/query-param-json/api.module.ts | 12 +++++++----- .../builds/query-param-json/api/default.service.ts | 11 ++++++++--- .../composed-schemas-tagged-unions/api.module.ts | 12 +++++++----- .../api/pet.service.ts | 11 ++++++++--- .../builds/composed-schemas/api.module.ts | 12 +++++++----- .../builds/composed-schemas/api/pet.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- .../builds/default/api.module.ts | 12 +++++++----- .../builds/default/api/pet.service.ts | 11 ++++++++--- .../builds/default/api/store.service.ts | 11 ++++++++--- .../builds/default/api/user.service.ts | 11 ++++++++--- 50 files changed, 385 insertions(+), 180 deletions(-) diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.module.ts b/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.module.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api/default.service.ts b/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api/default.service.ts index 0f653f71e65e..0427e2ac5c5c 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api/default.service.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-deep-object/api/default.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class DefaultService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-form/api.module.ts b/samples/client/others/typescript-angular-v20/builds/query-param-form/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-form/api.module.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-form/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-form/api/default.service.ts b/samples/client/others/typescript-angular-v20/builds/query-param-form/api/default.service.ts index 7359f92de421..fe540b70da2f 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-form/api/default.service.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-form/api/default.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class DefaultService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-json/api.module.ts b/samples/client/others/typescript-angular-v20/builds/query-param-json/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-json/api.module.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-json/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/others/typescript-angular-v20/builds/query-param-json/api/default.service.ts b/samples/client/others/typescript-angular-v20/builds/query-param-json/api/default.service.ts index d7733df8c4b2..2a76aa350919 100644 --- a/samples/client/others/typescript-angular-v20/builds/query-param-json/api/default.service.ts +++ b/samples/client/others/typescript-angular-v20/builds/query-param-json/api/default.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class DefaultService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.module.ts b/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.module.ts +++ b/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api/pet.service.ts b/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api/pet.service.ts index 3871ae285460..8333afdde84e 100644 --- a/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api/pet.service.ts +++ b/samples/client/others/typescript-angular/builds/composed-schemas-tagged-unions/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/others/typescript-angular/builds/composed-schemas/api.module.ts b/samples/client/others/typescript-angular/builds/composed-schemas/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/others/typescript-angular/builds/composed-schemas/api.module.ts +++ b/samples/client/others/typescript-angular/builds/composed-schemas/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/others/typescript-angular/builds/composed-schemas/api/pet.service.ts b/samples/client/others/typescript-angular/builds/composed-schemas/api/pet.service.ts index 3871ae285460..8333afdde84e 100644 --- a/samples/client/others/typescript-angular/builds/composed-schemas/api/pet.service.ts +++ b/samples/client/others/typescript-angular/builds/composed-schemas/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v18-provided-in-root/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v19-provided-in-root/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v19-with-angular-dependency-params/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v19/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v19/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v19/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v19/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v19/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v19/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v19/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v19/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v19/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v19/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v19/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v19/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v19/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v19/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v20-provided-in-root/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v20/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v20/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v20/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v20/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v20/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v20/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v20/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v20/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v20/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v20/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v20/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v20/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v20/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v20/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v20/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v20/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v21-provided-in-root/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v21/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v21/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v21/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v21/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v21/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v21/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v21/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v21/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v21/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v21/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v21/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v21/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v21/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v21/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v21/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v21/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v22-provided-in-root/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v22/builds/default/api.module.ts b/samples/client/petstore/typescript-angular-v22/builds/default/api.module.ts index 58d341fbd2e5..95ced704c97d 100644 --- a/samples/client/petstore/typescript-angular-v22/builds/default/api.module.ts +++ b/samples/client/petstore/typescript-angular-v22/builds/default/api.module.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { NgModule, ModuleWithProviders, inject } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; @@ -17,12 +17,14 @@ export class ApiModule { }; } - constructor( @Optional() @SkipSelf() parentModule: ApiModule, - @Optional() http: HttpClient) { - if (parentModule) { + private parentModule: ApiModule = inject(ApiModule, { optional: true, skipSelf: true }); + private http: HttpClient = inject(HttpClient, { optional: true }); + + constructor() { + if (this.parentModule) { throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); } - if (!http) { + if (!this.http) { throw new Error('You need to import the HttpClientModule in your AppModule! \n' + 'See also https://github.com/angular/angular/issues/20575'); } diff --git a/samples/client/petstore/typescript-angular-v22/builds/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v22/builds/default/api/pet.service.ts index 0ce593623908..23f9d40a51ab 100644 --- a/samples/client/petstore/typescript-angular-v22/builds/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v22/builds/default/api/pet.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -33,8 +33,13 @@ import { BaseService } from '../api.base.service'; }) export class PetService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v22/builds/default/api/store.service.ts b/samples/client/petstore/typescript-angular-v22/builds/default/api/store.service.ts index f871a415dfb7..4a63d0fedced 100644 --- a/samples/client/petstore/typescript-angular-v22/builds/default/api/store.service.ts +++ b/samples/client/petstore/typescript-angular-v22/builds/default/api/store.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class StoreService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** diff --git a/samples/client/petstore/typescript-angular-v22/builds/default/api/user.service.ts b/samples/client/petstore/typescript-angular-v22/builds/default/api/user.service.ts index a2d4d9a47446..fc6c09ad2ede 100644 --- a/samples/client/petstore/typescript-angular-v22/builds/default/api/user.service.ts +++ b/samples/client/petstore/typescript-angular-v22/builds/default/api/user.service.ts @@ -9,7 +9,7 @@ */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpEvent, HttpContext } from '@angular/common/http'; @@ -31,8 +31,13 @@ import { BaseService } from '../api.base.service'; }) export class UserService extends BaseService { - constructor(protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string|string[], @Optional() configuration?: Configuration) { - super(basePath, configuration); + protected httpClient: HttpClient = inject(HttpClient); + + constructor() { + super( + inject(BASE_PATH, { optional: true }) ?? undefined, + inject(Configuration, { optional: true }) ?? undefined + ); } /** From 27f15f2a83f4937f3f5abe5aab31bb67c7971677 Mon Sep 17 00:00:00 2001 From: kemotx90 <60275739+kemotx90@users.noreply.github.com> Date: Mon, 7 Sep 2026 17:19:47 +0200 Subject: [PATCH 4/4] fix Infer type | null --- .../src/main/resources/typescript-angular/api.module.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache index 19836f559e6a..cc5a8c9e3eb0 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/api.module.mustache @@ -26,8 +26,8 @@ export class {{apiModuleClassName}} { }; } - private parentModule: {{apiModuleClassName}} = inject({{apiModuleClassName}}, { optional: true, skipSelf: true }); - private http: HttpClient = inject(HttpClient, { optional: true }); + private parentModule: {{apiModuleClassName}} | null = inject({{apiModuleClassName}}, { optional: true, skipSelf: true }); + private http: HttpClient | null = inject(HttpClient, { optional: true }); constructor() { if (this.parentModule) {