diff --git a/docs/site/Create-custom-authentication-strategy.md b/docs/site/Create-custom-authentication-strategy.md index de55463f47a4..f157b1632f88 100644 --- a/docs/site/Create-custom-authentication-strategy.md +++ b/docs/site/Create-custom-authentication-strategy.md @@ -136,9 +136,9 @@ point**. AuthenticationBindings.AUTHENTICATION_STRATEGY_EXTENSION_POINT_NAME, {scope: BindingScope.TRANSIENT}, ) //this needs to be transient, e.g. for request level context. -export class AuthenticationStrategyProvider - implements Provider -{ +export class AuthenticationStrategyProvider implements Provider< + AuthenticationStrategy | undefined +> { constructor( @extensions() private authenticationStrategies: Getter, diff --git a/docs/site/Interceptor.md b/docs/site/Interceptor.md index 4fbdb445525b..9a7978de23d2 100644 --- a/docs/site/Interceptor.md +++ b/docs/site/Interceptor.md @@ -777,8 +777,7 @@ and chains. For example, import {GenericInvocationChain, GenericInterceptor} from '@loopback/core'; import {RequestContext} from '@loopback/rest'; -export interface RequestInterceptor - extends GenericInterceptor {} +export interface RequestInterceptor extends GenericInterceptor {} export class RequestInterceptorChain extends GenericInterceptorChain {} ``` diff --git a/docs/site/REST-middleware-sequence.md b/docs/site/REST-middleware-sequence.md index 760ce7a38873..2b4052bb110c 100644 --- a/docs/site/REST-middleware-sequence.md +++ b/docs/site/REST-middleware-sequence.md @@ -271,8 +271,7 @@ cascading style. The order of groups is determined by two factors: upstreamGroups: ['cors', 'findRoute'], }), ) - export class AuthenticationMiddlewareProvider - implements Provider {} + export class AuthenticationMiddlewareProvider implements Provider {} ``` - downstreamGroups: An array of group names that should be downstream to @@ -286,8 +285,7 @@ cascading style. The order of groups is determined by two factors: chain: RestTags.REST_MIDDLEWARE_CHAIN, }), ) - export class SendResponseMiddlewareProvider - implements Provider {} + export class SendResponseMiddlewareProvider implements Provider {} ``` 2. The overall order of groups for the sequence diff --git a/examples/passport-login/src/authentication-strategy-providers/facebook.express-mw.ts b/examples/passport-login/src/authentication-strategy-providers/facebook.express-mw.ts index 3d46ea64a9dd..40860bdabc06 100644 --- a/examples/passport-login/src/authentication-strategy-providers/facebook.express-mw.ts +++ b/examples/passport-login/src/authentication-strategy-providers/facebook.express-mw.ts @@ -9,9 +9,7 @@ import {ExpressRequestHandler} from '@loopback/rest'; import {Strategy as FacebookStrategy} from 'passport-facebook'; @injectable.provider({scope: BindingScope.SINGLETON}) -export class FacebookOauth2ExpressMiddleware - implements Provider -{ +export class FacebookOauth2ExpressMiddleware implements Provider { constructor( @inject('facebookStrategy') public facebookStrategy: FacebookStrategy, diff --git a/examples/passport-login/src/authentication-strategy-providers/google.express-mw.ts b/examples/passport-login/src/authentication-strategy-providers/google.express-mw.ts index c21976c538ec..778c816e7030 100644 --- a/examples/passport-login/src/authentication-strategy-providers/google.express-mw.ts +++ b/examples/passport-login/src/authentication-strategy-providers/google.express-mw.ts @@ -9,9 +9,7 @@ import {ExpressRequestHandler} from '@loopback/rest'; import {Strategy as GoogleStrategy} from 'passport-google-oauth2'; @injectable.provider({scope: BindingScope.SINGLETON}) -export class GoogleOauth2ExpressMiddleware - implements Provider -{ +export class GoogleOauth2ExpressMiddleware implements Provider { constructor( @inject('googleStrategy') public strategy: GoogleStrategy, diff --git a/examples/passport-login/src/authentication-strategy-providers/oauth2.express-mw.ts b/examples/passport-login/src/authentication-strategy-providers/oauth2.express-mw.ts index 17591146d440..7f023bc20edb 100644 --- a/examples/passport-login/src/authentication-strategy-providers/oauth2.express-mw.ts +++ b/examples/passport-login/src/authentication-strategy-providers/oauth2.express-mw.ts @@ -9,9 +9,7 @@ import {ExpressRequestHandler} from '@loopback/rest'; import {Strategy as OAuth2Strategy} from 'passport-oauth2'; @injectable.provider({scope: BindingScope.SINGLETON}) -export class CustomOauth2ExpressMiddleware - implements Provider -{ +export class CustomOauth2ExpressMiddleware implements Provider { constructor( @inject('oauth2Strategy') public oauth2Strategy: OAuth2Strategy, diff --git a/examples/passport-login/src/authentication-strategy-providers/twitter.express-mw.ts b/examples/passport-login/src/authentication-strategy-providers/twitter.express-mw.ts index 9bb79f823148..20f1f15c9a2e 100644 --- a/examples/passport-login/src/authentication-strategy-providers/twitter.express-mw.ts +++ b/examples/passport-login/src/authentication-strategy-providers/twitter.express-mw.ts @@ -9,9 +9,7 @@ import {ExpressRequestHandler} from '@loopback/rest'; import {Strategy as TwitterStrategy} from 'passport-twitter'; @injectable.provider({scope: BindingScope.SINGLETON}) -export class TwitterOauthExpressMiddleware - implements Provider -{ +export class TwitterOauthExpressMiddleware implements Provider { constructor( @inject('twitterStrategy') public twitterStrategy: TwitterStrategy, diff --git a/examples/passport-login/src/services/user.service.ts b/examples/passport-login/src/services/user.service.ts index fa76226af1a3..ad776baf4ee8 100644 --- a/examples/passport-login/src/services/user.service.ts +++ b/examples/passport-login/src/services/user.service.ts @@ -13,9 +13,10 @@ import {UserIdentityRepository} from '../repositories/user-identity.repository'; /** * User service to accept a 'passport' user profile and save it locally */ -export class PassportUserIdentityService - implements UserIdentityService -{ +export class PassportUserIdentityService implements UserIdentityService< + PassportProfile, + User +> { constructor( @repository(UserRepository) public userRepository: UserRepository, diff --git a/extensions/authentication-passport/README.md b/extensions/authentication-passport/README.md index 8983a42bdc96..86fa057da66f 100644 --- a/extensions/authentication-passport/README.md +++ b/extensions/authentication-passport/README.md @@ -283,9 +283,7 @@ in import {BasicVerifyFunction} from 'passport-http'; import {INVALID_USER_CREDENTIALS_MESSAGE} from '../keys'; - export class VerifyFunctionProvider - implements Provider - { + export class VerifyFunctionProvider implements Provider { constructor(@repository('users') private userRepo: MyUserRepository) {} value(): BasicVerifyFunction { diff --git a/extensions/pooling/README.md b/extensions/pooling/README.md index 79ef643c9336..d4a5fbfd8ae6 100644 --- a/extensions/pooling/README.md +++ b/extensions/pooling/README.md @@ -225,9 +225,9 @@ instances. ```ts import {PooledValue, PoolingService} from '@loopback/pooling'; -class ExpensiveResourceProvider - implements Provider> -{ +class ExpensiveResourceProvider implements Provider< + PooledValue +> { constructor( @inject(POOL_SERVICE) private poolingService: PoolingService, diff --git a/extensions/pooling/src/__tests__/acceptance/pooling.acceptance.ts b/extensions/pooling/src/__tests__/acceptance/pooling.acceptance.ts index a0812c6ddb8d..3a131c68fe01 100644 --- a/extensions/pooling/src/__tests__/acceptance/pooling.acceptance.ts +++ b/extensions/pooling/src/__tests__/acceptance/pooling.acceptance.ts @@ -334,9 +334,9 @@ describe('Resource pool', () => { /** * Wrap the expensive resource as a LoopBack binding provider */ - class ExpensiveResourceProvider - implements Provider> - { + class ExpensiveResourceProvider implements Provider< + PooledValue + > { constructor( @inject(POOLING_SERVICE) private poolingService: PoolingService, diff --git a/extensions/sequelize/src/sequelize/sequelize.repository.base.ts b/extensions/sequelize/src/sequelize/sequelize.repository.base.ts index 525c36c85e6a..839672ed6b64 100644 --- a/extensions/sequelize/src/sequelize/sequelize.repository.base.ts +++ b/extensions/sequelize/src/sequelize/sequelize.repository.base.ts @@ -97,8 +97,7 @@ export class SequelizeCrudRepository< T extends Entity, ID, Relations extends object = {}, -> implements EntityCrudRepository -{ +> implements EntityCrudRepository { constructor( public entityClass: typeof Entity & { prototype: T; diff --git a/extensions/socketio/src/providers/invoke-method.provider.ts b/extensions/socketio/src/providers/invoke-method.provider.ts index 93876aa2e396..33b224cc7266 100644 --- a/extensions/socketio/src/providers/invoke-method.provider.ts +++ b/extensions/socketio/src/providers/invoke-method.provider.ts @@ -6,9 +6,7 @@ import {Context, ControllerClass, invokeMethod, Provider} from '@loopback/core'; import {SocketIoInvokeMethod} from '../types'; -export class SocketIoInvokeMethodProvider - implements Provider -{ +export class SocketIoInvokeMethodProvider implements Provider { constructor() {} value(): SocketIoInvokeMethod { diff --git a/package-lock.json b/package-lock.json index 8ab72775d5a6..5505d5792b07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "lint-staged": "^16.2.7", "markdown-table": "^3.0.4", "open-cli": "^8.0.0", - "prettier": "^3.6.2", + "prettier": "^3.7.4", "typescript": "~5.2.2" }, "engines": { @@ -31187,9 +31187,9 @@ } }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -34123,6 +34123,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, "optional": true, "dependencies": { "@gar/promisify": "^1.0.1", @@ -34133,6 +34134,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "optional": true, "engines": { "node": ">= 6" @@ -34142,6 +34144,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -34152,6 +34155,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, "optional": true, "dependencies": { "@npmcli/fs": "^1.0.0", @@ -34181,6 +34185,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "optional": true, "dependencies": { "minipass": "^3.0.0" @@ -34193,6 +34198,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -34213,6 +34219,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "optional": true, "dependencies": { "@tootallnate/once": "1", @@ -34227,12 +34234,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "optional": true }, "node_modules/sqlite3/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -34245,6 +34254,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, "optional": true, "dependencies": { "agentkeepalive": "^4.1.3", @@ -34272,6 +34282,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -34284,6 +34295,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -34296,6 +34308,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, "optional": true, "dependencies": { "minipass": "^3.1.0", @@ -34313,6 +34326,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "optional": true, "bin": { "mkdirp": "bin/cmd.js" @@ -34325,6 +34339,7 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, "optional": true, "dependencies": { "env-paths": "^2.2.0", @@ -34349,6 +34364,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, "optional": true, "dependencies": { "abbrev": "1" @@ -34364,6 +34380,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "optional": true, "dependencies": { "glob": "^7.1.3" @@ -34379,6 +34396,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, "optional": true, "dependencies": { "agent-base": "^6.0.2", @@ -34393,6 +34411,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, "optional": true, "dependencies": { "minipass": "^3.1.1" @@ -34405,6 +34424,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, "optional": true, "dependencies": { "unique-slug": "^2.0.0" @@ -34414,6 +34434,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, "optional": true, "dependencies": { "imurmurhash": "^0.1.4" @@ -34423,6 +34444,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "optional": true, "dependencies": { "isexe": "^2.0.0" @@ -40246,7 +40268,7 @@ "lodash": "^4.17.21", "mocha": "^11.7.5", "nyc": "^17.1.0", - "prettier": "^3.6.2", + "prettier": "^3.7.4", "rimraf": "^5.0.10", "source-map-support": "^0.5.21", "typescript": "~5.2.2" diff --git a/package.json b/package.json index 4ee78d2041f2..82e02d82aa2f 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "lint-staged": "^16.2.7", "markdown-table": "^3.0.4", "open-cli": "^8.0.0", - "prettier": "^3.6.2", + "prettier": "^3.7.4", "typescript": "~5.2.2" }, "engineStrict": true, diff --git a/packages/authentication/src/__tests__/fixtures/services/basic-auth-user-service.ts b/packages/authentication/src/__tests__/fixtures/services/basic-auth-user-service.ts index e924165d222e..7c5550f5bdd4 100644 --- a/packages/authentication/src/__tests__/fixtures/services/basic-auth-user-service.ts +++ b/packages/authentication/src/__tests__/fixtures/services/basic-auth-user-service.ts @@ -14,9 +14,10 @@ import {BasicAuthenticationStrategyCredentials} from '../strategies/basic-strate import {User} from '../users/user'; import {UserRepository} from '../users/user.repository'; -export class BasicAuthenticationUserService - implements UserService -{ +export class BasicAuthenticationUserService implements UserService< + User, + BasicAuthenticationStrategyCredentials +> { constructor( @inject(USER_REPO) private userRepository: UserRepository, diff --git a/packages/authentication/src/providers/auth-metadata.provider.ts b/packages/authentication/src/providers/auth-metadata.provider.ts index e2b02db3f70f..ab7d68c9e8e3 100644 --- a/packages/authentication/src/providers/auth-metadata.provider.ts +++ b/packages/authentication/src/providers/auth-metadata.provider.ts @@ -18,9 +18,9 @@ import {AuthenticationMetadata, AuthenticationOptions} from '../types'; * Provides authentication metadata of a controller method * @example `context.bind('authentication.operationMetadata').toProvider(AuthMetadataProvider)` */ -export class AuthMetadataProvider - implements Provider -{ +export class AuthMetadataProvider implements Provider< + AuthenticationMetadata[] | undefined +> { constructor( @inject(CoreBindings.CONTROLLER_CLASS, {optional: true}) private readonly controllerClass: Constructor<{}>, diff --git a/packages/authentication/src/providers/auth-strategy.provider.ts b/packages/authentication/src/providers/auth-strategy.provider.ts index 9d2fd6f15435..35abe8dff715 100644 --- a/packages/authentication/src/providers/auth-strategy.provider.ts +++ b/packages/authentication/src/providers/auth-strategy.provider.ts @@ -31,9 +31,9 @@ import { AuthenticationBindings.AUTHENTICATION_STRATEGY_EXTENSION_POINT_NAME, {scope: BindingScope.TRANSIENT}, ) //this needs to be transient, e.g. for request level context. -export class AuthenticationStrategyProvider - implements Provider -{ +export class AuthenticationStrategyProvider implements Provider< + AuthenticationStrategy[] | undefined +> { constructor( @extensions() protected authenticationStrategies: Getter, diff --git a/packages/build/package.json b/packages/build/package.json index aab1de785fea..e297718d9c90 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -42,7 +42,7 @@ "lodash": "^4.17.21", "mocha": "^11.7.5", "nyc": "^17.1.0", - "prettier": "^3.6.2", + "prettier": "^3.7.4", "rimraf": "^5.0.10", "source-map-support": "^0.5.21", "typescript": "~5.2.2" diff --git a/packages/cli/test/integration/generators/import-lb3-models.integration.js b/packages/cli/test/integration/generators/import-lb3-models.integration.js index da3c1b47794f..5c408d441755 100644 --- a/packages/cli/test/integration/generators/import-lb3-models.integration.js +++ b/packages/cli/test/integration/generators/import-lb3-models.integration.js @@ -24,13 +24,11 @@ const { loadLb3App, } = require('../../../generators/import-lb3-models/lb3app-loader'); -const COFFEE_SHOP_EXAMPLE = require.resolve( - '../../../../../examples/lb3-application/lb3app/server/server', -); +const COFFEE_SHOP_EXAMPLE = + require.resolve('../../../../../examples/lb3-application/lb3app/server/server'); -const APP_USING_MODEL_INHERITANCE = require.resolve( - '../../fixtures/import-lb3-models/app-using-model-inheritance', -); +const APP_USING_MODEL_INHERITANCE = + require.resolve('../../fixtures/import-lb3-models/app-using-model-inheritance'); describe('lb4 import-lb3-models', function () { require('../lib/base-generator')(generator, {args: ['path-to-lb3-app']})(); diff --git a/packages/context/src/binding.ts b/packages/context/src/binding.ts index 839905107b6f..e74eb98115b6 100644 --- a/packages/context/src/binding.ts +++ b/packages/context/src/binding.ts @@ -308,8 +308,7 @@ export type ValueFactory = ( * ``` */ export interface DynamicValueProviderClass - extends Constructor, - Function { + extends Constructor, Function { value: (...args: BoundValue[]) => ValueOrPromise; } diff --git a/packages/core/src/__tests__/unit/application.unit.ts b/packages/core/src/__tests__/unit/application.unit.ts index b403897f7303..e32fcdf0b9ff 100644 --- a/packages/core/src/__tests__/unit/application.unit.ts +++ b/packages/core/src/__tests__/unit/application.unit.ts @@ -524,9 +524,7 @@ describe('Application', () => { } } - class LogInterceptorProviderWithoutDecoration - implements Provider - { + class LogInterceptorProviderWithoutDecoration implements Provider { value() { return logInterceptor; } diff --git a/packages/express/src/middleware-interceptor.ts b/packages/express/src/middleware-interceptor.ts index 5ccfd43039e7..b107f83c1932 100644 --- a/packages/express/src/middleware-interceptor.ts +++ b/packages/express/src/middleware-interceptor.ts @@ -191,8 +191,7 @@ export function createInterceptor( export abstract class ExpressMiddlewareInterceptorProvider< CFG, CTX extends Context = InvocationContext, -> implements Provider> -{ +> implements Provider> { protected middlewareConfigView?: ContextView; protected middlewareConfig?: CFG; diff --git a/packages/express/src/types.ts b/packages/express/src/types.ts index 7c79c2210039..6d6d70c411ab 100644 --- a/packages/express/src/types.ts +++ b/packages/express/src/types.ts @@ -263,8 +263,9 @@ export interface MiddlewareCreationOptions { * Options to create a middleware binding for the sequence action or interceptor. * @typeParam CTX - Context class */ -export interface BaseMiddlewareBindingOptions - extends MiddlewareCreationOptions { +export interface BaseMiddlewareBindingOptions< + CTX extends Context, +> extends MiddlewareCreationOptions { /** * Binding key for the middleware. */ @@ -278,8 +279,7 @@ export interface BaseMiddlewareBindingOptions /** * Options to bind a middleware as an interceptor to the context */ -export interface MiddlewareInterceptorBindingOptions - extends BaseMiddlewareBindingOptions { +export interface MiddlewareInterceptorBindingOptions extends BaseMiddlewareBindingOptions { /** * A flag to control if the interceptor should be global. Default to `true`. */ @@ -290,8 +290,7 @@ export interface MiddlewareInterceptorBindingOptions * Options to bind middleware as a request context based interceptor within an * `InvokeMiddleware` action of the sequence. */ -export interface MiddlewareBindingOptions - extends BaseMiddlewareBindingOptions { +export interface MiddlewareBindingOptions extends BaseMiddlewareBindingOptions { /** * Name of the middleware extension point. Default to `DEFAULT_MIDDLEWARE_CHAIN`. */ diff --git a/packages/http-server/src/http-server.ts b/packages/http-server/src/http-server.ts index 64268bc240ca..739f43bc5412 100644 --- a/packages/http-server/src/http-server.ts +++ b/packages/http-server/src/http-server.ts @@ -39,8 +39,7 @@ export type HttpServerProperties = Pick< * Base options that are common to http and https servers */ export interface BaseHttpOptions - extends ListenOptions, - Partial { + extends ListenOptions, Partial { /** * The `gracePeriodForClose` property controls how to stop the server * gracefully. Its value is the number of milliseconds to wait before diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/address.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/address.model.ts index 482a0cc7a596..da712aff9e5f 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/address.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/address.model.ts @@ -49,8 +49,10 @@ export interface AddressRelations { export type AddressWithRelations = Address & AddressRelations; -export interface AddressRepository - extends EntityCrudRepository { +export interface AddressRepository extends EntityCrudRepository< + Address, + typeof Address.prototype.id +> { // define additional members like relation methods here customer?: BelongsToAccessor; } diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/cart-item.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/cart-item.model.ts index 80c37185ad9a..9b1cbdc656b1 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/cart-item.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/cart-item.model.ts @@ -44,8 +44,10 @@ export interface CartItemRelations { export type CartItemWithRelations = CartItem & CartItemRelations; -export interface CartItemRepository - extends EntityCrudRepository { +export interface CartItemRepository extends EntityCrudRepository< + CartItem, + typeof CartItem.prototype.id +> { order: BelongsToAccessor; customers: HasManyThroughRepositoryFactory< Customer, diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/contact.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/contact.model.ts index 043604a6cb31..6d05696e648e 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/contact.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/contact.model.ts @@ -49,8 +49,10 @@ export interface ContactRelations { export type ContactWithRelations = Contact & ContactRelations; -export interface ContactRepository - extends EntityCrudRepository { +export interface ContactRepository extends EntityCrudRepository< + Contact, + typeof Contact.prototype.id +> { // define additional members like relation methods here stakeholder: BelongsToAccessor; } diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/customer-cart-item-link.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/customer-cart-item-link.model.ts index 782efa83df9f..a620b48ebd46 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/customer-cart-item-link.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/customer-cart-item-link.model.ts @@ -37,8 +37,7 @@ export interface CustomerCartItemLinkRelations {} export type CustomerCartItemLinkWithRelations = CustomerCartItemLink & CustomerCartItemLinkRelations; -export interface CustomerCartItemLinkRepository - extends EntityCrudRepository< - CustomerCartItemLink, - typeof CustomerCartItemLink.prototype.id - > {} +export interface CustomerCartItemLinkRepository extends EntityCrudRepository< + CustomerCartItemLink, + typeof CustomerCartItemLink.prototype.id +> {} diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/customer-promotion-link.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/customer-promotion-link.model.ts index a1d392c3ac17..3a05047e3edd 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/customer-promotion-link.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/customer-promotion-link.model.ts @@ -45,8 +45,7 @@ export interface CustomerPromotionLinkRelations {} export type CustomerPromotionLinkWithRelations = CustomerPromotionLink & CustomerPromotionLinkRelations; -export interface CustomerPromotionLinkRepository - extends EntityCrudRepository< - CustomerPromotionLink, - typeof CustomerPromotionLink.prototype.id - > {} +export interface CustomerPromotionLinkRepository extends EntityCrudRepository< + CustomerPromotionLink, + typeof CustomerPromotionLink.prototype.id +> {} diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/customer.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/customer.model.ts index 4598ece83cf3..4d5d53e2a438 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/customer.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/customer.model.ts @@ -84,8 +84,10 @@ export interface CustomerRelations { export type CustomerWithRelations = Customer & CustomerRelations; -export interface CustomerRepository - extends EntityCrudRepository { +export interface CustomerRepository extends EntityCrudRepository< + Customer, + typeof Customer.prototype.id +> { // define additional members like relation methods here address: HasOneRepositoryFactory; orders: HasManyRepositoryFactory; diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/order.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/order.model.ts index fe4b7a6f8f97..88fb82d22101 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/order.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/order.model.ts @@ -50,8 +50,10 @@ export interface OrderRelations { export type OrderWithRelations = Order & OrderRelations; -export interface OrderRepository - extends EntityCrudRepository { +export interface OrderRepository extends EntityCrudRepository< + Order, + typeof Order.prototype.id +> { // define additional members like relation methods here customer: BelongsToAccessor; shipment: BelongsToAccessor; diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/payment-method.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/payment-method.model.ts index 421df0755ce9..a7d2d9de69b7 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/payment-method.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/payment-method.model.ts @@ -98,21 +98,27 @@ export interface CashRelations { export type CashWithRelations = Cash & CashRelations; -export interface CreditCardRepository - extends EntityCrudRepository { +export interface CreditCardRepository extends EntityCrudRepository< + CreditCard, + typeof CreditCard.prototype.id +> { // define additional members like relation methods here customer: BelongsToAccessor; cardInfo: HasOneRepositoryFactory; } -export interface CashRepository - extends EntityCrudRepository { +export interface CashRepository extends EntityCrudRepository< + Cash, + typeof Cash.prototype.id +> { // define additional members like relation methods here customer: BelongsToAccessor; } -export interface CardInfoRepository - extends EntityCrudRepository { +export interface CardInfoRepository extends EntityCrudRepository< + CardInfo, + typeof CardInfo.prototype.id +> { // define additional members like relation methods here creditCard: BelongsToAccessor; } diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/promotion.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/promotion.model.ts index ff2efcd6f962..f808248a193f 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/promotion.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/promotion.model.ts @@ -30,8 +30,10 @@ export interface PromotionRelations {} export type PromotionWithRelations = Promotion & PromotionRelations; -export interface PromotionRepository - extends EntityCrudRepository {} +export interface PromotionRepository extends EntityCrudRepository< + Promotion, + typeof Promotion.prototype.id +> {} @model() export class FreeDelivery extends Promotion { @@ -45,11 +47,10 @@ export interface FreeDeliveryRelations {} export type FreeDeliveryWithRelations = FreeDelivery & FreeDeliveryRelations; -export interface FreeDeliveryRepository - extends EntityCrudRepository< - FreeDelivery, - typeof FreeDelivery.prototype.id - > {} +export interface FreeDeliveryRepository extends EntityCrudRepository< + FreeDelivery, + typeof FreeDelivery.prototype.id +> {} @model() export class HalfPrice extends Promotion { @@ -63,5 +64,7 @@ export interface HalfPriceRelations {} export type HalfPriceWithRelations = HalfPrice & HalfPriceRelations; -export interface HalfPriceRepository - extends EntityCrudRepository {} +export interface HalfPriceRepository extends EntityCrudRepository< + HalfPrice, + typeof HalfPrice.prototype.id +> {} diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/shipment.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/shipment.model.ts index 3332789b1b4a..3c82b289c428 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/shipment.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/shipment.model.ts @@ -47,8 +47,10 @@ export interface ShipmentRelations { export type ShipmentWithRelations = Shipment & ShipmentRelations; -export interface ShipmentRepository - extends EntityCrudRepository { +export interface ShipmentRepository extends EntityCrudRepository< + Shipment, + typeof Shipment.prototype.id +> { // define additional members like relation methods here shipmentOrders: HasManyRepositoryFactory; } diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/supplier.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/supplier.model.ts index 3f3e7a68913a..7d30c72cb320 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/supplier.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/supplier.model.ts @@ -28,8 +28,10 @@ export interface SupplierRelations { export type SupplierWithRelations = Supplier & SupplierRelations; -export interface SupplierRepository - extends EntityCrudRepository { +export interface SupplierRepository extends EntityCrudRepository< + Supplier, + typeof Supplier.prototype.id +> { // define additional members like relation methods here contact: HasOneRepositoryFactory; } diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/user-link.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/user-link.model.ts index 75b198c5f112..914b67792124 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/user-link.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/user-link.model.ts @@ -36,5 +36,7 @@ export interface UserLinkRelations {} export type UserLinkWithRelations = UserLink & UserLinkRelations; -export interface UserLinkRepository - extends EntityCrudRepository {} +export interface UserLinkRepository extends EntityCrudRepository< + UserLink, + typeof UserLink.prototype.id +> {} diff --git a/packages/repository-tests/src/crud/relations/fixtures/models/user.model.ts b/packages/repository-tests/src/crud/relations/fixtures/models/user.model.ts index 60dc0f4d4e0f..b4a25c7dff4c 100644 --- a/packages/repository-tests/src/crud/relations/fixtures/models/user.model.ts +++ b/packages/repository-tests/src/crud/relations/fixtures/models/user.model.ts @@ -44,8 +44,10 @@ export interface UserRelations { export type UserWithRelations = User & UserRelations; -export interface UserRepository - extends EntityCrudRepository { +export interface UserRepository extends EntityCrudRepository< + User, + typeof User.prototype.id +> { // define additional members like relation methods here users: HasManyThroughRepositoryFactory< User, diff --git a/packages/repository/src/__tests__/unit/decorator/repository-with-value-provider.decorator.unit.ts b/packages/repository/src/__tests__/unit/decorator/repository-with-value-provider.decorator.unit.ts index 179a2e5f7afe..d11e93dad82a 100644 --- a/packages/repository/src/__tests__/unit/decorator/repository-with-value-provider.decorator.unit.ts +++ b/packages/repository/src/__tests__/unit/decorator/repository-with-value-provider.decorator.unit.ts @@ -18,9 +18,9 @@ class MyController { constructor(@repository('noteRepo') public noteRepo: Repository) {} } -class MyRepositoryProvider - implements Provider> -{ +class MyRepositoryProvider implements Provider< + DefaultCrudRepository +> { constructor( @inject('models.Note') private myModel: typeof Entity, @inject('dataSources.memory') private dataSource: juggler.DataSource, diff --git a/packages/repository/src/__tests__/unit/repositories/relation.repository.unit.ts b/packages/repository/src/__tests__/unit/repositories/relation.repository.unit.ts index 53e13da138ac..9e800912ffb2 100644 --- a/packages/repository/src/__tests__/unit/repositories/relation.repository.unit.ts +++ b/packages/repository/src/__tests__/unit/repositories/relation.repository.unit.ts @@ -36,9 +36,9 @@ describe('relation repository', () => { */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - class TestHasManyEntityCrudRepository - implements HasManyRepository - { + class TestHasManyEntityCrudRepository< + T extends Entity, + > implements HasManyRepository { create( targetModelData: DataObject, options?: AnyObject | undefined, diff --git a/packages/repository/src/relations/belongs-to/belongs-to.repository.ts b/packages/repository/src/relations/belongs-to/belongs-to.repository.ts index 3c09c82e8fad..169a0a0a8aeb 100644 --- a/packages/repository/src/relations/belongs-to/belongs-to.repository.ts +++ b/packages/repository/src/relations/belongs-to/belongs-to.repository.ts @@ -31,8 +31,7 @@ export class DefaultBelongsToRepository< TargetEntity extends Entity, TargetId, TargetRepository extends EntityCrudRepository, -> implements BelongsToRepository -{ +> implements BelongsToRepository { /** * Constructor of DefaultBelongsToEntityCrudRepository * @param getTargetRepository - either a dictionary of target model type - target repository instance diff --git a/packages/repository/src/relations/has-many/has-many-through.repository.ts b/packages/repository/src/relations/has-many/has-many-through.repository.ts index 832adfa8c523..5d3103853266 100644 --- a/packages/repository/src/relations/has-many/has-many-through.repository.ts +++ b/packages/repository/src/relations/has-many/has-many-through.repository.ts @@ -156,8 +156,7 @@ export class DefaultHasManyThroughRepository< ThroughEntity extends Entity, ThroughID, ThroughRepository extends EntityCrudRepository, -> implements HasManyThroughRepository -{ +> implements HasManyThroughRepository { constructor( public getTargetRepository: | Getter diff --git a/packages/repository/src/relations/has-many/has-many.repository.ts b/packages/repository/src/relations/has-many/has-many.repository.ts index 98a3d1042ce0..6fc2783a594c 100644 --- a/packages/repository/src/relations/has-many/has-many.repository.ts +++ b/packages/repository/src/relations/has-many/has-many.repository.ts @@ -60,8 +60,7 @@ export class DefaultHasManyRepository< TargetEntity extends Entity, TargetID, TargetRepository extends EntityCrudRepository, -> implements HasManyRepository -{ +> implements HasManyRepository { /** * Constructor of DefaultHasManyEntityCrudRepository * @param getTargetRepository - the getter of the related target model repository instance diff --git a/packages/repository/src/relations/has-one/has-one.repository.ts b/packages/repository/src/relations/has-one/has-one.repository.ts index 730f1600ec49..7521ddc0f0a8 100644 --- a/packages/repository/src/relations/has-one/has-one.repository.ts +++ b/packages/repository/src/relations/has-one/has-one.repository.ts @@ -82,8 +82,7 @@ export class DefaultHasOneRepository< TargetEntity extends Entity, TargetID, TargetRepository extends EntityCrudRepository, -> implements HasOneRepository -{ +> implements HasOneRepository { /** * Constructor of DefaultHasOneEntityCrudRepository * @param getTargetRepository - either a dictionary of target model type - target repository instance diff --git a/packages/repository/src/relations/references-many/references-many.repository.ts b/packages/repository/src/relations/references-many/references-many.repository.ts index 6c4300bd2561..ba1c75de6253 100644 --- a/packages/repository/src/relations/references-many/references-many.repository.ts +++ b/packages/repository/src/relations/references-many/references-many.repository.ts @@ -26,8 +26,7 @@ export class DefaultReferencesManyRepository< TargetEntity extends Entity, TargetIds, TargetRepository extends EntityCrudRepository, -> implements ReferencesManyRepository -{ +> implements ReferencesManyRepository { /** * Constructor of DefaultReferencesManyEntityCrudRepository * @param getTargetRepository - the getter of the related target model repository instance diff --git a/packages/repository/src/repositories/kv.repository.bridge.ts b/packages/repository/src/repositories/kv.repository.bridge.ts index f832b7174ef5..abacb3843b81 100644 --- a/packages/repository/src/repositories/kv.repository.bridge.ts +++ b/packages/repository/src/repositories/kv.repository.bridge.ts @@ -12,9 +12,9 @@ import {ensurePromise, juggler} from './legacy-juggler-bridge'; /** * An implementation of KeyValueRepository based on loopback-datasource-juggler */ -export class DefaultKeyValueRepository - implements KeyValueRepository -{ +export class DefaultKeyValueRepository< + T extends Model, +> implements KeyValueRepository { /** * A legacy KeyValueModel class */ diff --git a/packages/repository/src/repositories/legacy-juggler-bridge.ts b/packages/repository/src/repositories/legacy-juggler-bridge.ts index 3df52ed95514..025ea10393e0 100644 --- a/packages/repository/src/repositories/legacy-juggler-bridge.ts +++ b/packages/repository/src/repositories/legacy-juggler-bridge.ts @@ -114,8 +114,7 @@ export class DefaultCrudRepository< T extends Entity, ID, Relations extends object = {}, -> implements EntityCrudRepository -{ +> implements EntityCrudRepository { modelClass: juggler.PersistedModelClass; public readonly inclusionResolvers: Map< @@ -837,10 +836,10 @@ export class DefaultCrudRepository< */ export class DefaultTransactionalRepository< - T extends Entity, - ID, - Relations extends object = {}, - > + T extends Entity, + ID, + Relations extends object = {}, +> extends DefaultCrudRepository implements TransactionalEntityRepository { diff --git a/packages/repository/src/repositories/repository.ts b/packages/repository/src/repositories/repository.ts index 6cb2cd507eb1..bca42f398450 100644 --- a/packages/repository/src/repositories/repository.ts +++ b/packages/repository/src/repositories/repository.ts @@ -53,8 +53,9 @@ export type TransactionalEntityRepository< * * @typeParam T Generic type for the Entity */ -export interface TransactionalRepository - extends Repository { +export interface TransactionalRepository< + T extends Entity, +> extends Repository { /** * Begin a new Transaction * @param options - Options for the operations @@ -128,8 +129,10 @@ export interface CrudRepository< /** * Base interface for a repository of entities */ -export interface EntityRepository - extends ExecutableRepository {} +export interface EntityRepository< + T extends Entity, + ID, +> extends ExecutableRepository {} /** * CRUD operations for a repository of entities @@ -138,8 +141,8 @@ export interface EntityCrudRepository< T extends Entity, ID, Relations extends object = {}, -> extends EntityRepository, - CrudRepository { +> + extends EntityRepository, CrudRepository { // entityClass should have type "typeof T", but that's not supported by TSC entityClass: typeof Entity & {prototype: T}; inclusionResolvers: Map>; @@ -253,9 +256,10 @@ export interface EntityCrudRepository< * } * ``` */ -export class CrudRepositoryImpl - implements EntityCrudRepository -{ +export class CrudRepositoryImpl< + T extends Entity, + ID, +> implements EntityCrudRepository { private connector: CrudConnector; public readonly inclusionResolvers: Map< string, diff --git a/packages/rest-crud/src/crud-rest.controller.ts b/packages/rest-crud/src/crud-rest.controller.ts index 0b8446712c9c..dcf134cd491f 100644 --- a/packages/rest-crud/src/crud-rest.controller.ts +++ b/packages/rest-crud/src/crud-rest.controller.ts @@ -148,9 +148,11 @@ export function defineCrudRestController< }; @api({basePath: options.basePath, paths: {}}) - class ReadonlyRestControllerImpl - implements CrudRestController - { + class ReadonlyRestControllerImpl implements CrudRestController< + T, + IdType, + IdName + > { constructor( public readonly repository: EntityCrudRepository, ) {}