diff --git a/bin/lint-commits.sh b/bin/lint-commits.sh index 5bccf2534092..cfee5a7e4054 100755 --- a/bin/lint-commits.sh +++ b/bin/lint-commits.sh @@ -23,12 +23,12 @@ echo "TRAVIS_BRANCH => $TRAVIS_BRANCH" echo "TRAVIS_COMMIT => $TRAVIS_COMMIT" echo "TRAVIS_COMMIT_MSG => $TRAVIS_COMMIT_MESSAGE" echo "TRAVIS_COMMIT_RANGE => $TRAVIS_COMMIT_RANGE" -echo "TRAVIS_EVENT_TYPE => $TRAVIS_EVENT_TYPE" +echo "TRAVIS_EVENT_TYPE => $TRAVIS_EVENT_TYPE"https://travis-ci.org/strongloop/loopback-next/jobs/281324624 echo "TRAVIS_PULL_REQUEST => $TRAVIS_PULL_REQUEST" echo "TRAVIS_PULL_REQUEST_BRANCH => $TRAVIS_PULL_REQUEST_BRANCH" echo "TRAVIS_PULL_REQUEST_SHA => $TRAVIS_PULL_REQUEST_SHA" echo "TRAVIS_PULL_REQUEST_SLUG => $TRAVIS_PULL_REQUEST_SLUG" -echo "TRAVIS_REPO_SLUG => $TRAVIS_REPO_SLUG" +echo "TRAVIS_REPO_SLUG => $TRAVIS_REPO_SLUG" # Lint all commits in the PR # - Covers fork pull requests (when TO=slug/branch) @@ -37,4 +37,8 @@ echo "TRAVIS_REPO_SLUG => $TRAVIS_REPO_SLUG" # Always lint the triggering commit # - Covers direct commits -./node_modules/.bin/commitlint --from="$TRAVIS_COMMIT" +COMMIT=$TRAVIS_COMMIT +if [[ $TRAVIS_PULL_REQUEST_SHA != "" && $TRAVIS_PULL_REQUEST_SHA != $TRAVIS_COMMIT ]]; then + COMMIT=$TRAVIS_PULL_REQUEST_SHA +fi +./node_modules/.bin/commitlint --from="$COMMIT" diff --git a/packages/authentication/src/auth-component.ts b/packages/authentication/src/auth-component.ts index a1ded1ce165f..916bd723c613 100644 --- a/packages/authentication/src/auth-component.ts +++ b/packages/authentication/src/auth-component.ts @@ -4,7 +4,6 @@ // License text available at https://opensource.org/licenses/MIT import {AuthenticationBindings} from './keys'; -import {Constructor} from '@loopback/context'; import {Component, ProviderMap} from '@loopback/core'; import {AuthenticationProvider} from './providers/authenticate'; import {AuthMetadataProvider} from './providers/auth-metadata'; diff --git a/packages/authentication/src/providers/authenticate.ts b/packages/authentication/src/providers/authenticate.ts index 6b4f63643124..a6832eeeaec0 100644 --- a/packages/authentication/src/providers/authenticate.ts +++ b/packages/authentication/src/providers/authenticate.ts @@ -3,8 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import * as http from 'http'; -import {HttpErrors, ParsedRequest} from '@loopback/rest'; +import {ParsedRequest} from '@loopback/rest'; import {inject} from '@loopback/core'; import {Provider, Getter, Setter} from '@loopback/context'; import {Strategy} from 'passport'; diff --git a/packages/authentication/src/strategy-adapter.ts b/packages/authentication/src/strategy-adapter.ts index 1554620ec65b..5924644d9dcd 100644 --- a/packages/authentication/src/strategy-adapter.ts +++ b/packages/authentication/src/strategy-adapter.ts @@ -2,7 +2,6 @@ // Node module: loopback // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import * as http from 'http'; import {HttpErrors, ParsedRequest} from '@loopback/rest'; import {Strategy} from 'passport'; import {UserProfile} from './providers/authenticate'; diff --git a/packages/authentication/test/acceptance/basic-auth.ts b/packages/authentication/test/acceptance/basic-auth.ts index eeb2c5ff5bac..b22ab72ee09d 100644 --- a/packages/authentication/test/acceptance/basic-auth.ts +++ b/packages/authentication/test/acceptance/basic-auth.ts @@ -3,7 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Application, Server, mountComponent} from '@loopback/core'; +import {Application} from '@loopback/core'; import { api, RestBindings, @@ -12,18 +12,14 @@ import { ParseParams, FindRoute, InvokeMethod, - GetFromContext, - BindElement, - HttpErrors, Send, Reject, - HttpHandler, SequenceHandler, get, RestServer, RestComponent, } from '@loopback/rest'; -import {expect, Client, createClientForHandler} from '@loopback/testlab'; +import {Client, createClientForHandler} from '@loopback/testlab'; import {anOpenApiSpec} from '@loopback/openapi-spec-builder'; import {inject, Provider, ValueOrPromise} from '@loopback/context'; import { @@ -31,7 +27,6 @@ import { UserProfile, AuthenticationBindings, AuthenticateFn, - AuthMetadataProvider, AuthenticationMetadata, AuthenticationComponent, } from '../..'; @@ -148,7 +143,7 @@ describe('Basic Authentication', () => { const route = this.findRoute(req); // Authenticate - const user = await this.authenticateRequest(req); + await this.authenticateRequest(req); // Authentication successful, proceed to invoke controller const args = await this.parseParams(req, route); diff --git a/packages/authentication/test/unit/authenticate-action.test.ts b/packages/authentication/test/unit/authenticate-action.test.ts index 36c8c2c6894d..d663c0c848d1 100644 --- a/packages/authentication/test/unit/authenticate-action.test.ts +++ b/packages/authentication/test/unit/authenticate-action.test.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {expect} from '@loopback/testlab'; -import {Context, Provider, instantiateClass} from '@loopback/context'; +import {Context, instantiateClass} from '@loopback/context'; import {ParsedRequest} from '@loopback/rest'; import { AuthenticationProvider, @@ -13,11 +13,12 @@ import { AuthenticationBindings, } from '../..'; import {MockStrategy} from './fixtures/mock-strategy'; - +// FIXME: All of these BDD titles are too verbose and should be reworded +// to not run afoul of the lint rules! +// tslint:disable:max-line-length describe('AuthenticationProvider', () => { describe('constructor()', () => { - it('instantiateClass injects authentication.strategy in the constructor', - async () => { + it('instantiateClass injects authentication.strategy in the constructor', async () => { const context = new Context(); const strategy = new MockStrategy(); context.bind(AuthenticationBindings.STRATEGY).to(strategy); @@ -35,8 +36,7 @@ describe('AuthenticationProvider', () => { beforeEach(givenAuthenticationProvider); - it('returns a function which authenticates a request and returns a user', - async () => { + it('returns a function which authenticates a request and returns a user', async () => { const authenticate: AuthenticateFn = await Promise.resolve( provider.value(), ); @@ -45,16 +45,15 @@ describe('AuthenticationProvider', () => { expect(user).to.be.equal(mockUser); }); - it('updates current user', async () => { - const authenticate = await Promise.resolve(provider.value()); - const request = {}; - await authenticate(request); - expect(currentUser).to.equal(mockUser); - }); + it('updates current user', async () => { + const authenticate = await Promise.resolve(provider.value()); + const request = {}; + await authenticate(request); + expect(currentUser).to.equal(mockUser); + }); describe('context.get(provider_key)', () => { - it('returns a function which authenticates a request and returns a user', - async () => { + it('returns a function which authenticates a request and returns a user', async () => { const context: Context = new Context(); context.bind(AuthenticationBindings.STRATEGY).to(strategy); context @@ -68,8 +67,7 @@ describe('AuthenticationProvider', () => { expect(user).to.be.equal(mockUser); }); - it('throws an error if the injected passport strategy is not valid', - async () => { + it('throws an error if the injected passport strategy is not valid', async () => { const context: Context = new Context(); context.bind(AuthenticationBindings.STRATEGY).to({}); context @@ -88,8 +86,7 @@ describe('AuthenticationProvider', () => { expect(error).to.have.property('message', 'invalid strategy parameter'); }); - it('throws Unauthorized error when authentication fails', - async () => { + it('throws Unauthorized error when authentication fails', async () => { const context: Context = new Context(); context.bind(AuthenticationBindings.STRATEGY).to(strategy); context @@ -115,7 +112,8 @@ describe('AuthenticationProvider', () => { strategy.setMockUser(mockUser); provider = new AuthenticationProvider( () => Promise.resolve(strategy), - u => currentUser = u); + u => (currentUser = u), + ); currentUser = undefined; } }); diff --git a/packages/authentication/test/unit/authenticate-decorator.test.ts b/packages/authentication/test/unit/authenticate-decorator.test.ts index 03dc6ab879ba..353cebe24e4d 100644 --- a/packages/authentication/test/unit/authenticate-decorator.test.ts +++ b/packages/authentication/test/unit/authenticate-decorator.test.ts @@ -7,7 +7,6 @@ import {expect} from '@loopback/testlab'; import { authenticate, getAuthenticateMetadata, - AuthenticationMetadata, } from '../..'; describe('Authentication', () => { diff --git a/packages/authentication/test/unit/fixtures/mock-strategy.ts b/packages/authentication/test/unit/fixtures/mock-strategy.ts index 3752b245f8ad..0fcf0d4135fe 100644 --- a/packages/authentication/test/unit/fixtures/mock-strategy.ts +++ b/packages/authentication/test/unit/fixtures/mock-strategy.ts @@ -2,7 +2,6 @@ // Node module: loopback // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {ParsedRequest} from '@loopback/rest'; import {Strategy} from 'passport'; import * as http from 'http'; diff --git a/packages/authentication/test/unit/metadata-provider.test.ts b/packages/authentication/test/unit/metadata-provider.test.ts index fae48c7ab14f..5e26bd68b4d2 100644 --- a/packages/authentication/test/unit/metadata-provider.test.ts +++ b/packages/authentication/test/unit/metadata-provider.test.ts @@ -6,7 +6,6 @@ import {expect} from '@loopback/testlab'; import {CoreBindings} from '@loopback/core'; import {Context, Provider} from '@loopback/context'; -import {ParsedRequest} from '@loopback/rest'; import { AuthMetadataProvider, AuthenticationMetadata, @@ -28,8 +27,7 @@ describe('AuthMetadataProvider', () => { beforeEach(givenAuthMetadataProvider); describe('value()', () => { - it('returns the authentication metadata of a controller method', - async () => { + it('returns the auth metadata of a controller method', async () => { const authMetadata: | AuthenticationMetadata | undefined = await provider.value(); @@ -40,8 +38,7 @@ describe('AuthMetadataProvider', () => { }); describe('context.get(provider_key)', () => { - it('returns the authentication metadata of a controller method', - async () => { + it('returns the auth metadata of a controller method', async () => { const context: Context = new Context(); context.bind(CoreBindings.CONTROLLER_CLASS).to(TestController); context.bind(CoreBindings.CONTROLLER_METHOD_NAME).to('whoAmI'); @@ -57,8 +54,7 @@ describe('AuthMetadataProvider', () => { }); }); - it('returns undefined if no authentication metadata is defined', - async () => { + it('returns undefined if no auth metadata is defined', async () => { const context: Context = new Context(); context .bind(CoreBindings.CONTROLLER_CLASS) diff --git a/packages/authentication/test/unit/strategy-adapter.test.ts b/packages/authentication/test/unit/strategy-adapter.test.ts index 38fab5a03b24..afca026e1ce1 100644 --- a/packages/authentication/test/unit/strategy-adapter.test.ts +++ b/packages/authentication/test/unit/strategy-adapter.test.ts @@ -47,7 +47,7 @@ describe('Strategy Adapter', () => { request.headers = {testState: 'fail'}; let error; try { - const user: Object = await adapter.authenticate(request); + await adapter.authenticate(request); } catch (err) { error = err; } @@ -62,7 +62,7 @@ describe('Strategy Adapter', () => { request.headers = {testState: 'error'}; let error; try { - const user: Object = await adapter.authenticate(request); + await adapter.authenticate(request); } catch (err) { error = err; } @@ -70,4 +70,3 @@ describe('Strategy Adapter', () => { }); }); }); - diff --git a/packages/context/src/context.ts b/packages/context/src/context.ts index 32bf28dbcafe..03a0dd596988 100644 --- a/packages/context/src/context.ts +++ b/packages/context/src/context.ts @@ -4,7 +4,6 @@ // License text available at https://opensource.org/licenses/MIT import {Binding, BoundValue, ValueOrPromise} from './binding'; -import {inject} from './inject'; import {isPromise} from './is-promise'; export class Context { diff --git a/packages/context/src/inject.ts b/packages/context/src/inject.ts index 352dd1934d6a..163e8f8edc08 100644 --- a/packages/context/src/inject.ts +++ b/packages/context/src/inject.ts @@ -3,7 +3,6 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import * as assert from 'assert'; import {Reflector} from './reflect'; import {BoundValue, ValueOrPromise} from './binding'; import {Context} from './context'; diff --git a/packages/context/src/reflect.ts b/packages/context/src/reflect.ts index e1f1038de3a0..ce89365024f6 100644 --- a/packages/context/src/reflect.ts +++ b/packages/context/src/reflect.ts @@ -3,7 +3,6 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {inject, Constructor} from '..'; import 'reflect-metadata'; /* tslint:disable:no-any */ diff --git a/packages/context/src/resolver.ts b/packages/context/src/resolver.ts index cbf22a410cf7..816c89ef4291 100644 --- a/packages/context/src/resolver.ts +++ b/packages/context/src/resolver.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {Context} from './context'; -import {Binding, BoundValue, ValueOrPromise} from './binding'; +import {BoundValue, ValueOrPromise} from './binding'; import {isPromise} from './is-promise'; import { describeInjectedArguments, diff --git a/packages/context/test/acceptance/class-level-bindings.ts b/packages/context/test/acceptance/class-level-bindings.ts index c140d766a235..9cfbd9670aa9 100644 --- a/packages/context/test/acceptance/class-level-bindings.ts +++ b/packages/context/test/acceptance/class-level-bindings.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {expect} from '@loopback/testlab'; -import {Context, inject, isPromise, Setter, Getter} from '../..'; +import {Context, inject, Setter, Getter} from '../..'; const INFO_CONTROLLER = 'controllers.info'; diff --git a/packages/context/test/acceptance/creating-and-resolving-bindings.ts b/packages/context/test/acceptance/creating-and-resolving-bindings.ts index 6bc1827110e1..c11c7570c9c2 100644 --- a/packages/context/test/acceptance/creating-and-resolving-bindings.ts +++ b/packages/context/test/acceptance/creating-and-resolving-bindings.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {expect} from '@loopback/testlab'; -import {Context, isPromise} from '../..'; +import {Context} from '../..'; describe('Context bindings - Creating and resolving bindings', () => { let ctx: Context; diff --git a/packages/context/test/acceptance/unlocking-bindings.ts b/packages/context/test/acceptance/unlocking-bindings.ts index 20fef1ca0879..167be1e202ec 100644 --- a/packages/context/test/acceptance/unlocking-bindings.ts +++ b/packages/context/test/acceptance/unlocking-bindings.ts @@ -30,7 +30,6 @@ describe(`Context bindings - Unlocking bindings`, () => { describe('when the context', () => { context('rebinds the duplicate key with an unlocked binding', () => { it('does not throw a rebinding error', () => { - const key = 'foo'; const operation = () => ctx.bind('foo').to('baz'); expect(operation).to.not.throw(); }); diff --git a/packages/context/test/unit/context.ts b/packages/context/test/unit/context.ts index 17be5e18adea..8081ae2d8241 100644 --- a/packages/context/test/unit/context.ts +++ b/packages/context/test/unit/context.ts @@ -44,7 +44,7 @@ describe('Context', () => { describe('find', () => { it('returns matching binding', () => { const b1 = ctx.bind('foo'); - const b2 = ctx.bind('bar'); + ctx.bind('bar'); const result = ctx.find('foo'); expect(result).to.be.eql([b1]); }); @@ -63,7 +63,7 @@ describe('Context', () => { describe('findByTag', () => { it('returns matching binding', () => { const b1 = ctx.bind('foo').tag('t1'); - const b2 = ctx.bind('bar').tag('t2'); + ctx.bind('bar').tag('t2'); const result = ctx.findByTag('t1'); expect(result).to.be.eql([b1]); }); diff --git a/packages/context/test/unit/inject.test.ts b/packages/context/test/unit/inject.test.ts index 1db2fe462543..863eae25c708 100644 --- a/packages/context/test/unit/inject.test.ts +++ b/packages/context/test/unit/inject.test.ts @@ -12,6 +12,7 @@ import { describe('function argument injection', () => { it('can decorate class constructor arguments', () => { + // tslint:disable-next-line:no-unused-variable class TestClass { constructor(@inject('foo') foo: string) {} } @@ -28,6 +29,7 @@ describe('function argument injection', () => { }); it('can retrieve information about injected method arguments', () => { + // tslint:disable-next-line:no-unused-variable class TestClass { test(@inject('foo') foo: string) {} } @@ -81,6 +83,7 @@ describe('function argument injection', () => { describe('property injection', () => { it('can decorate properties', () => { + // tslint:disable-next-line:no-unused-variable class TestClass { @inject('foo') foo: string; } @@ -107,6 +110,7 @@ describe('property injection', () => { it('cannot decorate static properties', () => { expect(() => { + // tslint:disable-next-line:no-unused-variable class TestClass { @inject('foo') static foo: string; } diff --git a/packages/context/test/unit/provider.ts b/packages/context/test/unit/provider.ts index 4944bc708d13..61ed3434691a 100644 --- a/packages/context/test/unit/provider.ts +++ b/packages/context/test/unit/provider.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {expect} from '@loopback/testlab'; -import {Provider, Context, Binding} from '../../src'; +import {Provider} from '../../src'; describe('Provider', () => { let provider: Provider; diff --git a/packages/context/test/unit/resolver.test.ts b/packages/context/test/unit/resolver.test.ts index 1bcca349ba9d..b156503de336 100644 --- a/packages/context/test/unit/resolver.test.ts +++ b/packages/context/test/unit/resolver.test.ts @@ -33,7 +33,7 @@ describe('constructor injection', () => { } expect(() => { - const t = instantiateClass(TestClass, ctx) as TestClass; + instantiateClass(TestClass, ctx); }).to.throw(/Cannot resolve injected arguments/); }); @@ -140,7 +140,7 @@ describe('property injection', () => { } expect(() => { - const t = instantiateClass(TestClass, ctx) as TestClass; + instantiateClass(TestClass, ctx); }).to.throw(/Cannot resolve injected property/); }); diff --git a/packages/core/src/server.ts b/packages/core/src/server.ts index 60c3f5ecff93..1153465280e3 100644 --- a/packages/core/src/server.ts +++ b/packages/core/src/server.ts @@ -3,8 +3,6 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Constructor} from '@loopback/context'; - /** * Defines the requirements to implement a Server for LoopBack applications: * start() : Promise diff --git a/packages/core/test/acceptance/application.acceptance.ts b/packages/core/test/acceptance/application.acceptance.ts index 85c7decebce2..a732c98cc4ef 100644 --- a/packages/core/test/acceptance/application.acceptance.ts +++ b/packages/core/test/acceptance/application.acceptance.ts @@ -3,7 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {expect, supertest} from '@loopback/testlab'; +import {expect} from '@loopback/testlab'; import {Constructor, Provider, inject} from '@loopback/context'; import {Application, ControllerClass} from '../..'; diff --git a/packages/example-codehub/test/acceptance/smoke.test.ts b/packages/example-codehub/test/acceptance/smoke.test.ts index eca7d9d3f2e1..56db42522504 100644 --- a/packages/example-codehub/test/acceptance/smoke.test.ts +++ b/packages/example-codehub/test/acceptance/smoke.test.ts @@ -5,7 +5,7 @@ import {CodeHubApplication} from '../../src/codehub-application'; import {validateApiSpec} from '@loopback/testlab'; -import {RestServer, RestComponent} from '@loopback/rest'; +import {RestServer} from '@loopback/rest'; describe('Server', () => { it('has a valid OpenAPI spec', async () => { diff --git a/packages/example-codehub/test/support/util.ts b/packages/example-codehub/test/support/util.ts index 212e760d0b1c..2a6697d2554c 100644 --- a/packages/example-codehub/test/support/util.ts +++ b/packages/example-codehub/test/support/util.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {supertest} from '@loopback/testlab'; -import {RestBindings, RestComponent} from '@loopback/rest'; +import {RestBindings} from '@loopback/rest'; import {CodeHubApplication} from '../../src/codehub-application'; import {RestServer} from '../../../rest/src/rest-server'; diff --git a/packages/repository/examples/controllers/customer-controller-with-class-di.ts b/packages/repository/examples/controllers/customer-controller-with-class-di.ts index 22f05cf8282e..67a154075bc4 100644 --- a/packages/repository/examples/controllers/customer-controller-with-class-di.ts +++ b/packages/repository/examples/controllers/customer-controller-with-class-di.ts @@ -3,8 +3,6 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {EntityCrudRepository} from '../../src/repository'; -import {Customer} from '../models/customer'; import {repository} from '../../src/decorators/repository'; /** diff --git a/packages/repository/examples/controllers/customer-controller-with-constructor-di.ts b/packages/repository/examples/controllers/customer-controller-with-constructor-di.ts index 99a17433ee01..64d942a44c1a 100644 --- a/packages/repository/examples/controllers/customer-controller-with-constructor-di.ts +++ b/packages/repository/examples/controllers/customer-controller-with-constructor-di.ts @@ -3,6 +3,8 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT +// tslint:disable:no-unused-variable + import {EntityCrudRepository} from '../../src/repository'; import {Customer} from '../models/customer'; import {repository} from '../../src/decorators/repository'; @@ -10,9 +12,11 @@ import {repository} from '../../src/decorators/repository'; * Controller for Customer */ // @controller + export class CustomerController { constructor( // Use constructor dependency injection + // tslint:disable-next-line:no-unused-variable @repository('Customer', 'mongodbDataSource') private _repository: EntityCrudRepository, ) {} diff --git a/packages/repository/examples/controllers/customer-controller-with-property-di.ts b/packages/repository/examples/controllers/customer-controller-with-property-di.ts index 60a4d58a8bf4..e288b3a9a9ad 100644 --- a/packages/repository/examples/controllers/customer-controller-with-property-di.ts +++ b/packages/repository/examples/controllers/customer-controller-with-property-di.ts @@ -3,6 +3,8 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT +// tslint:disable:no-unused-variable + import {EntityCrudRepository} from '../../src/repository'; import {repository} from '../../src/decorators/repository'; import {Customer} from '../models/customer'; diff --git a/packages/repository/examples/juggler-bridge/note-with-repo-class.ts b/packages/repository/examples/juggler-bridge/note-with-repo-class.ts index 463bee7d98d9..f585909bbb01 100644 --- a/packages/repository/examples/juggler-bridge/note-with-repo-class.ts +++ b/packages/repository/examples/juggler-bridge/note-with-repo-class.ts @@ -7,7 +7,6 @@ import {Context, inject} from '@loopback/context'; import { repository, - Repository, DataSourceConstructor, juggler, Entity, diff --git a/packages/repository/examples/juggler-bridge/note-with-repo-instance.ts b/packages/repository/examples/juggler-bridge/note-with-repo-instance.ts index 9a65fe46c838..77dda2927660 100644 --- a/packages/repository/examples/juggler-bridge/note-with-repo-instance.ts +++ b/packages/repository/examples/juggler-bridge/note-with-repo-instance.ts @@ -3,17 +3,15 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Context, inject} from '@loopback/context'; +import {Context} from '@loopback/context'; import { repository, - Repository, DataSourceConstructor, juggler, Entity, Options, DataObject, - Filter, EntityCrudRepository, DefaultCrudRepository, ModelDefinition, diff --git a/packages/repository/examples/models/order.ts b/packages/repository/examples/models/order.ts index 2715bae78e86..1cfbe490e6dc 100644 --- a/packages/repository/examples/models/order.ts +++ b/packages/repository/examples/models/order.ts @@ -8,6 +8,8 @@ import {property, model} from '../../src/decorators/model'; import {belongsTo} from '../../src/decorators/relation'; import {Customer} from './customer'; +// tslint:disable:no-unused-variable + @model() class Order extends Entity { @property({ diff --git a/packages/repository/examples/repositories/customer-repository.ts b/packages/repository/examples/repositories/customer-repository.ts index 14156d54e1d0..8b7d13880764 100644 --- a/packages/repository/examples/repositories/customer-repository.ts +++ b/packages/repository/examples/repositories/customer-repository.ts @@ -7,7 +7,7 @@ import {Options} from '../../src/common-types'; import {Where} from '../../src/query'; import {DataSource} from '../../src/datasource'; -import {EntityCrudRepository, CrudRepositoryImpl} from '../../src/repository'; +import {CrudRepositoryImpl} from '../../src/repository'; import {Customer} from '../models/customer'; /** diff --git a/packages/repository/src/crud-connector.ts b/packages/repository/src/crud-connector.ts index cf01f4cefe09..14b857645cce 100644 --- a/packages/repository/src/crud-connector.ts +++ b/packages/repository/src/crud-connector.ts @@ -6,7 +6,7 @@ import {Connector} from './connector'; import {Entity, EntityData} from './model'; import {Filter, Where} from './query'; -import {Class, DataObject, Options} from './common-types'; +import {Class, Options} from './common-types'; /** * CRUD operations for connector implementations diff --git a/packages/repository/src/decorators/model.ts b/packages/repository/src/decorators/model.ts index 5ef8c25d7ec3..24644560858b 100644 --- a/packages/repository/src/decorators/model.ts +++ b/packages/repository/src/decorators/model.ts @@ -3,9 +3,8 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Class} from '../common-types'; import {Reflector} from '@loopback/context'; -import {ModelDefinition, PropertyType, ModelDefinitionSyntax} from '../model'; +import {ModelDefinition, ModelDefinitionSyntax} from '../model'; import {PropertyDefinition} from '../index'; export const MODEL_KEY = 'loopback:model'; diff --git a/packages/repository/src/decorators/repository.ts b/packages/repository/src/decorators/repository.ts index eb90b2cac415..cdd53d5f5d77 100644 --- a/packages/repository/src/decorators/repository.ts +++ b/packages/repository/src/decorators/repository.ts @@ -4,7 +4,6 @@ // License text available at https://opensource.org/licenses/MIT import * as assert from 'assert'; -import {Class} from '../common-types'; import {Model, Entity} from '../model'; import {Repository} from '../repository'; import {DataSource} from '../datasource'; diff --git a/packages/repository/src/kv-connector.ts b/packages/repository/src/kv-connector.ts index 68ca12e29137..c975c7f12654 100644 --- a/packages/repository/src/kv-connector.ts +++ b/packages/repository/src/kv-connector.ts @@ -5,7 +5,7 @@ import {Connector} from './connector'; import {Entity, EntityData} from './model'; -import {Class, DataObject, Options} from './common-types'; +import {Class, Options} from './common-types'; import {Filter} from './query'; /** diff --git a/packages/repository/src/kv-repository.ts b/packages/repository/src/kv-repository.ts index 8436fa681419..1fbbc3ae038f 100644 --- a/packages/repository/src/kv-repository.ts +++ b/packages/repository/src/kv-repository.ts @@ -6,7 +6,7 @@ import {Repository} from './repository'; import {Options} from './common-types'; import {Model} from './model'; -import {Class, DataObject} from './common-types'; +import {DataObject} from './common-types'; import {Filter} from './query'; /** diff --git a/packages/repository/src/legacy-juggler-bridge.ts b/packages/repository/src/legacy-juggler-bridge.ts index 5380d83f1ca3..d14ee15c7e66 100644 --- a/packages/repository/src/legacy-juggler-bridge.ts +++ b/packages/repository/src/legacy-juggler-bridge.ts @@ -7,9 +7,7 @@ export const jugglerModule = require('loopback-datasource-juggler'); import * as assert from 'assert'; import {isPromise} from '@loopback/context'; -import {MixinBuilder} from './mixin'; import { - Class, DataObject, Options, AnyObject, diff --git a/packages/repository/src/loopback-datasource-juggler.ts b/packages/repository/src/loopback-datasource-juggler.ts index 1500e42d365e..7d17aa8cf3a5 100644 --- a/packages/repository/src/loopback-datasource-juggler.ts +++ b/packages/repository/src/loopback-datasource-juggler.ts @@ -3,7 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Class, Options, Callback, AnyObject} from './common-types'; +import {Options, Callback, AnyObject} from './common-types'; import {EventEmitter} from 'events'; // tslint:disable:no-any diff --git a/packages/repository/src/repository-mixin.ts b/packages/repository/src/repository-mixin.ts index fe70ae433bc1..1ec4d84b3516 100644 --- a/packages/repository/src/repository-mixin.ts +++ b/packages/repository/src/repository-mixin.ts @@ -4,7 +4,6 @@ // License text available at https://opensource.org/licenses/MIT import { Class } from './common-types'; -import { MixinBuilder } from './mixin'; import { Repository } from './repository'; // tslint:disable:no-any diff --git a/packages/repository/src/repository.ts b/packages/repository/src/repository.ts index 4564e8f41128..916910b34de7 100644 --- a/packages/repository/src/repository.ts +++ b/packages/repository/src/repository.ts @@ -4,17 +4,19 @@ // License text available at https://opensource.org/licenses/MIT import {Entity, ValueObject, Model} from './model'; -import {Class, DataObject, AnyObject, Options} from './common-types'; +import {Class, DataObject, Options} from './common-types'; import {DataSource} from './datasource'; import {CrudConnector} from './crud-connector'; -import {Fields, Filter, Where, Operators, Inclusion} from './query'; +import {Filter, Where} from './query'; + +// tslint:disable:no-unused-variable export interface Repository {} /** * Basic CRUD operations for ValueObject and Entity. No ID is required. */ -export interface CrudRepository +export interface CrudRepository extends Repository { /** * Create a new record @@ -79,7 +81,8 @@ export interface EntityRepository extends Repository {} * CRUD operations for a repository of entities */ export interface EntityCrudRepository - extends EntityRepository, CrudRepository { + extends EntityRepository, + CrudRepository { /** * Save an entity. If no id is present, create a new entity * @param entity Entity to be saved @@ -197,7 +200,8 @@ export class CrudRepositoryImpl createAll(entities: DataObject[], options?: Options): Promise { return this.toModels( - this.connector.createAll!(this.model, entities, options)); + this.connector.createAll!(this.model, entities, options), + ); } save(entity: DataObject, options?: Options): Promise { @@ -268,6 +272,7 @@ export class CrudRepositoryImpl return this.connector.replaceById(this.model, id, data, options); } // FIXME: populate inst with all properties + // tslint:disable-next-line:no-unused-variable const inst = data; const where = this.model.buildWhereForId(id); return this.updateAll(data, where, options).then( diff --git a/packages/repository/src/types/model.ts b/packages/repository/src/types/model.ts index 13d31c01cd58..00329b1eaeee 100644 --- a/packages/repository/src/types/model.ts +++ b/packages/repository/src/types/model.ts @@ -3,9 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import * as util from 'util'; import {Model, Class} from '..'; -import {Type} from './type'; import {ObjectType} from './object'; // tslint:disable:no-any diff --git a/packages/repository/src/types/type.ts b/packages/repository/src/types/type.ts index c034e80bc418..57f150f11535 100644 --- a/packages/repository/src/types/type.ts +++ b/packages/repository/src/types/type.ts @@ -7,7 +7,6 @@ * Typing system for LoopBack */ import {Options} from '../common-types'; -import * as util from 'util'; // tslint:disable:no-any diff --git a/packages/repository/test/acceptance/thinking-in-loopback/thinking-in-loopback.acceptance.ts b/packages/repository/test/acceptance/thinking-in-loopback/thinking-in-loopback.acceptance.ts index 46904776af73..6367232f727a 100644 --- a/packages/repository/test/acceptance/thinking-in-loopback/thinking-in-loopback.acceptance.ts +++ b/packages/repository/test/acceptance/thinking-in-loopback/thinking-in-loopback.acceptance.ts @@ -3,7 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {juggler, DataSourceConstructor} from '../../..'; +import {DataSourceConstructor} from '../../..'; import {Product} from './models/product.model'; import {ProductRepository} from './repositories/product.repository'; import {expect} from '@loopback/testlab'; @@ -30,7 +30,7 @@ describe('Repository in Thinking in LoopBack', () => { p.name = 'Red Pencil'; await repo.save(p); - const saved = await repo.findById(p.id); + await repo.findById(p.id); expect(p).to.have.properties({ slug: 'pencil', name: 'Red Pencil', diff --git a/packages/repository/test/unit/decorator/repository-with-di.ts b/packages/repository/test/unit/decorator/repository-with-di.ts index bde597062959..cd31cd981486 100644 --- a/packages/repository/test/unit/decorator/repository-with-di.ts +++ b/packages/repository/test/unit/decorator/repository-with-di.ts @@ -10,8 +10,6 @@ import { Repository, Entity, repository, - jugglerModule, - bindModel, DataSourceConstructor, DefaultCrudRepository, ModelDefinition, diff --git a/packages/repository/test/unit/decorator/repository-with-value-provider.ts b/packages/repository/test/unit/decorator/repository-with-value-provider.ts index 837a076d0294..b51f59d84415 100644 --- a/packages/repository/test/unit/decorator/repository-with-value-provider.ts +++ b/packages/repository/test/unit/decorator/repository-with-value-provider.ts @@ -10,7 +10,6 @@ import { Repository, Entity, repository, - bindModel, DataSourceConstructor, DataSourceType, DefaultCrudRepository, diff --git a/packages/repository/test/unit/decorator/repository.ts b/packages/repository/test/unit/decorator/repository.ts index 134085865411..e4641b842f53 100644 --- a/packages/repository/test/unit/decorator/repository.ts +++ b/packages/repository/test/unit/decorator/repository.ts @@ -9,8 +9,6 @@ import {repository} from '../../../'; import {Repository} from '../../../'; import { - jugglerModule, - bindModel, DataSourceConstructor, juggler, DefaultCrudRepository, @@ -19,9 +17,7 @@ import { } from '../../../'; class MyController { - constructor( - @repository('noteRepo') public noteRepo: Repository, - ) {} + constructor(@repository('noteRepo') public noteRepo: Repository) {} @repository('noteRepo') noteRepo2: Repository; } @@ -75,31 +71,32 @@ describe('repository decorator', () => { it('throws not implemented for class-level @repository', () => { expect(() => { @repository('noteRepo') + // tslint:disable-next-line:no-unused-variable class Controller1 {} }).to.throw(/not implemented/); }); it('supports @repository(model, dataSource) by names', async () => { class Controller2 { - constructor(@repository('Note', 'memory') - public noteRepo: Repository) {} + constructor( + @repository('Note', 'memory') + public noteRepo: Repository, + ) {} } ctx.bind('controllers.Controller2').toClass(Controller2); - const myController: MyController = await ctx.get( - 'controllers.Controller2', - ); + const myController: MyController = await ctx.get('controllers.Controller2'); expect(myController.noteRepo).to.be.not.null(); }); it('supports @repository(model, dataSource)', async () => { class Controller3 { - constructor(@repository(Note, ds) - public noteRepo: Repository) {} + constructor( + @repository(Note, ds) + public noteRepo: Repository, + ) {} } ctx.bind('controllers.Controller3').toClass(Controller3); - const myController: MyController = await ctx.get( - 'controllers.Controller3', - ); + const myController: MyController = await ctx.get('controllers.Controller3'); expect(myController.noteRepo).to.be.not.null(); }); diff --git a/packages/repository/test/unit/mixin/mixin.ts b/packages/repository/test/unit/mixin/mixin.ts index c998a0b3d24d..e0a21f66d89f 100644 --- a/packages/repository/test/unit/mixin/mixin.ts +++ b/packages/repository/test/unit/mixin/mixin.ts @@ -5,7 +5,7 @@ import {expect} from '@loopback/testlab'; import {Class} from '../../../'; -import {MixinBuilder, ConstructorFunction} from '../../../'; +import {MixinBuilder} from '../../../'; // tslint:disable:no-any diff --git a/packages/repository/test/unit/model/model.ts b/packages/repository/test/unit/model/model.ts index 328814a26d2c..ba927d192841 100644 --- a/packages/repository/test/unit/model/model.ts +++ b/packages/repository/test/unit/model/model.ts @@ -5,7 +5,7 @@ import {expect} from '@loopback/testlab'; import {STRING} from '../../../'; -import {Model, Entity, ModelDefinition, PropertyDefinition} from '../../../'; +import {Entity, ModelDefinition} from '../../../'; describe('model', () => { const customerDef = new ModelDefinition('Customer'); @@ -39,6 +39,7 @@ describe('model', () => { static definition = realmCustomerDef; } + // tslint:disable-next-line:no-unused-variable class User extends Entity { static definition = userDef; } diff --git a/packages/repository/test/unit/repository/crud-repository.ts b/packages/repository/test/unit/repository/crud-repository.ts index 467ec3f519e7..43ddd7e8a845 100644 --- a/packages/repository/test/unit/repository/crud-repository.ts +++ b/packages/repository/test/unit/repository/crud-repository.ts @@ -128,8 +128,8 @@ describe('CrudRepositoryImpl', () => { }); it('updates all entities', async () => { - const c1 = await repo.create({id: 1, email: 'john@example.com'}); - const c2 = await repo.create({id: 2, email: 'mary@example.com'}); + await repo.create({id: 1, email: 'john@example.com'}); + await repo.create({id: 2, email: 'mary@example.com'}); const count = await repo.updateAll({email: 'xyz@example.com'}); expect(count).to.be.eql(2); }); @@ -149,7 +149,7 @@ describe('CrudRepositoryImpl', () => { }); it('count all entities', async () => { - const customer = await repo.create({id: 1, email: 'john@example.com'}); + await repo.create({id: 1, email: 'john@example.com'}); const count = await repo.count(); expect(count).to.be.eql(1); }); diff --git a/packages/repository/test/unit/repository/legacy-juggler-bridge.ts b/packages/repository/test/unit/repository/legacy-juggler-bridge.ts index 3238dea0223d..2a880e7aa407 100644 --- a/packages/repository/test/unit/repository/legacy-juggler-bridge.ts +++ b/packages/repository/test/unit/repository/legacy-juggler-bridge.ts @@ -6,7 +6,6 @@ import {expect} from '@loopback/testlab'; import { - jugglerModule, bindModel, DataSourceConstructor, juggler, @@ -114,8 +113,8 @@ describe('DefaultCrudRepository', () => { it('implements Repository.deleteAll()', async () => { const repo = new DefaultCrudRepository(Note, ds); - const note1 = await repo.create({title: 't3', content: 'c3'}); - const note2 = await repo.create({title: 't4', content: 'c4'}); + await repo.create({title: 't3', content: 'c3'}); + await repo.create({title: 't4', content: 'c4'}); const result = await repo.deleteAll({title: 't3'}); expect(result).to.eql(1); }); @@ -132,8 +131,8 @@ describe('DefaultCrudRepository', () => { it('implements Repository.updateAll()', async () => { const repo = new DefaultCrudRepository(Note, ds); - const note1 = await repo.create({title: 't3', content: 'c3'}); - const note2 = await repo.create({title: 't4', content: 'c4'}); + await repo.create({title: 't3', content: 'c3'}); + await repo.create({title: 't4', content: 'c4'}); const result = await repo.updateAll({content: 'c5'}, {}); expect(result).to.eql(2); const notes = await repo.find({where: {title: 't3'}}); @@ -142,8 +141,8 @@ describe('DefaultCrudRepository', () => { it('implements Repository.count()', async () => { const repo = new DefaultCrudRepository(Note, ds); - const note1 = await repo.create({title: 't3', content: 'c3'}); - const note2 = await repo.create({title: 't4', content: 'c4'}); + await repo.create({title: 't3', content: 'c3'}); + await repo.create({title: 't4', content: 'c4'}); const result = await repo.count(); expect(result).to.eql(2); }); diff --git a/packages/rest/src/http-handler.ts b/packages/rest/src/http-handler.ts index d11142765ff7..dc5d0144314f 100644 --- a/packages/rest/src/http-handler.ts +++ b/packages/rest/src/http-handler.ts @@ -3,13 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import { - Binding, - Context, - ValueOrPromise, - BoundValue, - Constructor, -} from '@loopback/context'; +import {Context} from '@loopback/context'; import {PathsObject} from '@loopback/openapi-spec'; import {ServerRequest, ServerResponse} from 'http'; import {ControllerSpec} from './router/metadata'; @@ -22,16 +16,10 @@ import { RouteEntry, ControllerClass, } from './router/routing-table'; -import { - FindRoute, - OperationArgs, - ParsedRequest, -} from './internal-types'; +import {ParsedRequest} from './internal-types'; import {RestBindings} from './keys'; -const debug = require('debug')('loopback:core:http-handler'); - export class HttpHandler { protected _routes: RoutingTable = new RoutingTable(); diff --git a/packages/rest/src/internal-types.ts b/packages/rest/src/internal-types.ts index 98d156f55a98..1fcf5e977c80 100644 --- a/packages/rest/src/internal-types.ts +++ b/packages/rest/src/internal-types.ts @@ -3,9 +3,9 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Binding, BoundValue, ValueOrPromise} from '@loopback/context'; +import {Binding, BoundValue} from '@loopback/context'; import {ServerRequest, ServerResponse} from 'http'; -import {ResolvedRoute, Route, RouteEntry} from './router/routing-table'; +import {ResolvedRoute, RouteEntry} from './router/routing-table'; export interface ParsedRequest extends ServerRequest { // see http://expressjs.com/en/4x/api.html#req.path diff --git a/packages/rest/src/parser.ts b/packages/rest/src/parser.ts index 41815bc48b71..9d12c1af44ca 100644 --- a/packages/rest/src/parser.ts +++ b/packages/rest/src/parser.ts @@ -4,7 +4,7 @@ // License text available at https://opensource.org/licenses/MIT import {ServerRequest} from 'http'; -import {HttpErrors, Route, RouteEntry} from './'; +import {HttpErrors} from './'; import {OperationObject, ParameterObject} from '@loopback/openapi-spec'; import {promisify} from '@loopback/core'; import { @@ -13,7 +13,6 @@ import { PathParameterValues, } from './internal-types'; import {ResolvedRoute} from './router/routing-table'; -import {RestBindings} from './keys'; type HttpError = HttpErrors.HttpError; type jsonBodyFn = ( diff --git a/packages/rest/src/providers/bind-element.ts b/packages/rest/src/providers/bind-element.ts index 03ffb708d88a..b2f5f73ac621 100644 --- a/packages/rest/src/providers/bind-element.ts +++ b/packages/rest/src/providers/bind-element.ts @@ -3,14 +3,13 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {Binding, Context, inject, Provider} from '@loopback/context'; +import {Context, inject, Provider} from '@loopback/context'; import {BindElement} from '../internal-types'; import {RestBindings} from '../keys'; export class BindElementProvider implements Provider { constructor(@inject(RestBindings.Http.CONTEXT) protected context: Context) {} - - value() { + value(): BindElement { return (key: string) => this.context.bind(key); } } diff --git a/packages/rest/src/rest-component.ts b/packages/rest/src/rest-component.ts index f3116e8441b1..d62581be0ae4 100644 --- a/packages/rest/src/rest-component.ts +++ b/packages/rest/src/rest-component.ts @@ -4,7 +4,6 @@ // License text available at https://opensource.org/licenses/MIT import { - ApplicationConfig, Component, CoreBindings, ProviderMap, @@ -12,10 +11,6 @@ import { Application, } from '@loopback/core'; import { - BoundValue, - Context, - Injection, - ValueOrPromise, inject, Constructor, } from '@loopback/context'; diff --git a/packages/rest/src/rest-server.ts b/packages/rest/src/rest-server.ts index 3d2a920fcdac..fae4a1253b94 100644 --- a/packages/rest/src/rest-server.ts +++ b/packages/rest/src/rest-server.ts @@ -6,20 +6,8 @@ import {AssertionError} from 'assert'; const swagger2openapi = require('swagger2openapi'); import {safeDump} from 'js-yaml'; -import { - Binding, - Context, - Constructor, - Provider, - inject, -} from '@loopback/context'; -import { - Route, - ControllerRoute, - RouteEntry, - parseOperationArgs, - ParsedRequest, -} from '.'; +import {Binding, Context, Constructor, inject} from '@loopback/context'; +import {Route, ControllerRoute, RouteEntry, ParsedRequest} from '.'; import { OpenApiSpec, createEmptyApiSpec, @@ -27,17 +15,9 @@ import { } from '@loopback/openapi-spec'; import {ServerRequest, ServerResponse, createServer} from 'http'; import * as Http from 'http'; -import { - Application, - Component, - CoreBindings, - Server, - mountComponent, - ProviderMap, -} from '@loopback/core'; +import {Application, CoreBindings, Server} from '@loopback/core'; import {getControllerSpec} from './router/metadata'; import {HttpHandler} from './http-handler'; -import {writeResultToResponse} from './writer'; import {DefaultSequence, SequenceHandler, SequenceFunction} from './sequence'; import { FindRoute, @@ -57,8 +37,6 @@ const SequenceActions = RestBindings.SequenceActions; // a non-module entity and cannot be imported using this construct. const cloneDeep: (value: T) => T = require('lodash/cloneDeep'); -const debug = require('debug')('loopback:core:application'); - interface OpenApiSpecOptions { version?: string; format?: string; diff --git a/packages/rest/src/router/metadata.ts b/packages/rest/src/router/metadata.ts index b42c859b6d6a..9b323ab4d7e7 100644 --- a/packages/rest/src/router/metadata.ts +++ b/packages/rest/src/router/metadata.ts @@ -11,7 +11,6 @@ import { ParameterObject, SchemaObject, ParameterType, - createEmptyApiSpec, PathsObject, } from '@loopback/openapi-spec'; diff --git a/packages/rest/src/sequence.ts b/packages/rest/src/sequence.ts index 3246772d8a82..e7729ad93f9a 100644 --- a/packages/rest/src/sequence.ts +++ b/packages/rest/src/sequence.ts @@ -4,21 +4,17 @@ // License text available at https://opensource.org/licenses/MIT const debug = require('debug')('loopback:core:sequence'); -import {ServerRequest, ServerResponse} from 'http'; +import {ServerResponse} from 'http'; import {inject, Context} from '@loopback/context'; import { FindRoute, InvokeMethod, - LogError, - OperationRetval, ParsedRequest, Send, Reject, ParseParams, } from './internal-types'; import {RestBindings} from './keys'; -import {writeResultToResponse} from './writer'; -import {HttpError} from 'http-errors'; const SequenceActions = RestBindings.SequenceActions; @@ -63,7 +59,7 @@ export interface SequenceHandler { * ``` */ export class DefaultSequence implements SequenceHandler { - /** + /** * Constructor: Injects findRoute, invokeMethod & logError * methods as promises. * @@ -74,15 +70,13 @@ export class DefaultSequence implements SequenceHandler { */ constructor( @inject(RestBindings.Http.CONTEXT) public ctx: Context, - @inject(SequenceActions.FIND_ROUTE) - protected findRoute: FindRoute, + @inject(SequenceActions.FIND_ROUTE) protected findRoute: FindRoute, @inject(SequenceActions.PARSE_PARAMS) protected parseParams: ParseParams, @inject(SequenceActions.INVOKE_METHOD) protected invoke: InvokeMethod, @inject(SequenceActions.SEND) public send: Send, @inject(SequenceActions.REJECT) public reject: Reject, ) {} - /** * Runs the default sequence. Given a request and response, running the * sequence will produce a response or an error. diff --git a/packages/rest/test/acceptance/bootstrapping/rest.acceptance.ts b/packages/rest/test/acceptance/bootstrapping/rest.acceptance.ts index 657669c85764..42622d920b25 100644 --- a/packages/rest/test/acceptance/bootstrapping/rest.acceptance.ts +++ b/packages/rest/test/acceptance/bootstrapping/rest.acceptance.ts @@ -4,14 +4,13 @@ // License text available at https://opensource.org/licenses/MIT import {expect, supertest} from '@loopback/testlab'; -import {Constructor, Provider, inject} from '@loopback/context'; import { DefaultSequence, RestBindings, RestServer, RestComponent, } from '../../..'; -import {Application, ControllerClass} from '@loopback/core'; +import {Application} from '@loopback/core'; describe('Bootstrapping with RestComponent', () => { context('with a user-defined sequence', () => { diff --git a/packages/rest/test/acceptance/routing/routing.acceptance.ts b/packages/rest/test/acceptance/routing/routing.acceptance.ts index 05bd350332bb..f1715ab860f0 100644 --- a/packages/rest/test/acceptance/routing/routing.acceptance.ts +++ b/packages/rest/test/acceptance/routing/routing.acceptance.ts @@ -14,7 +14,7 @@ import { RestServer, RestComponent, } from '../../..'; -import {Application, Server} from '@loopback/core'; +import {Application} from '@loopback/core'; import { ParameterObject, @@ -24,7 +24,7 @@ import { import {expect, Client, createClientForHandler} from '@loopback/testlab'; import {anOpenApiSpec, anOperationSpec} from '@loopback/openapi-spec-builder'; -import {inject, Constructor, Context} from '@loopback/context'; +import {inject, Context} from '@loopback/context'; import {ControllerClass} from '../../../src/router/routing-table'; /* # Feature: Routing diff --git a/packages/rest/test/acceptance/sequence/sequence.acceptance.ts b/packages/rest/test/acceptance/sequence/sequence.acceptance.ts index 251c3674ac65..95291760eabb 100644 --- a/packages/rest/test/acceptance/sequence/sequence.acceptance.ts +++ b/packages/rest/test/acceptance/sequence/sequence.acceptance.ts @@ -5,10 +5,8 @@ import { api, - ServerRequest, ServerResponse, ParsedRequest, - OperationArgs, FindRoute, InvokeMethod, Send, @@ -21,10 +19,9 @@ import { RestComponent, } from '../../..'; import {Application} from '@loopback/core'; -import {ParameterObject} from '@loopback/openapi-spec'; import {expect, Client, createClientForHandler} from '@loopback/testlab'; import {anOpenApiSpec} from '@loopback/openapi-spec-builder'; -import {inject, Constructor, Context} from '@loopback/context'; +import {inject, Context} from '@loopback/context'; import {ControllerClass} from '../../../src/router/routing-table'; const SequenceActions = RestBindings.SequenceActions; diff --git a/packages/rest/test/integration/http-handler.integration.ts b/packages/rest/test/integration/http-handler.integration.ts index a968f5599623..7d5c84632eb5 100644 --- a/packages/rest/test/integration/http-handler.integration.ts +++ b/packages/rest/test/integration/http-handler.integration.ts @@ -13,7 +13,7 @@ import { RestBindings, } from '../..'; import {Context} from '@loopback/context'; -import {expect, Client, createClientForHandler} from '@loopback/testlab'; +import {Client, createClientForHandler} from '@loopback/testlab'; import {ParameterObject} from '@loopback/openapi-spec'; import {anOpenApiSpec, anOperationSpec} from '@loopback/openapi-spec-builder'; import { diff --git a/packages/rest/test/integration/rest-server.integration.ts b/packages/rest/test/integration/rest-server.integration.ts index e9a31e88a1a4..4195ad2f9a0b 100644 --- a/packages/rest/test/integration/rest-server.integration.ts +++ b/packages/rest/test/integration/rest-server.integration.ts @@ -6,12 +6,6 @@ import {Application, ApplicationConfig} from '@loopback/core'; import {expect, createClientForHandler} from '@loopback/testlab'; import {Route, RestBindings, RestServer, RestComponent} from '../..'; -import { - ResponseObject, - SchemaObject, - ReferenceObject, -} from '@loopback/openapi-spec'; -import {Context} from '@loopback/context'; describe('RestServer (integration)', () => { it('updates rest.port binding when listening on ephemeral port', async () => { @@ -202,7 +196,7 @@ components: const response = await createClientForHandler(server.handleHttp).get( '/swagger-ui', ); - const port = await server.get(RestBindings.PORT); + await server.get(RestBindings.PORT); const url = new RegExp( [ 'http://petstore.swagger.io', diff --git a/packages/rest/test/unit/parser.test.ts b/packages/rest/test/unit/parser.test.ts index c65590c2f934..a947649122aa 100644 --- a/packages/rest/test/unit/parser.test.ts +++ b/packages/rest/test/unit/parser.test.ts @@ -5,7 +5,6 @@ import { parseOperationArgs, - ServerRequest, ParsedRequest, parseRequestUrl, ResolvedRoute, diff --git a/packages/rest/test/unit/rest-component.test.ts b/packages/rest/test/unit/rest-component.test.ts index f4da5c8a990e..aa2ada77c9ec 100644 --- a/packages/rest/test/unit/rest-component.test.ts +++ b/packages/rest/test/unit/rest-component.test.ts @@ -5,13 +5,7 @@ import {expect, ShotRequest} from '@loopback/testlab'; import {Application, ProviderMap, CoreBindings} from '@loopback/core'; -import { - inject, - Provider, - BoundValue, - Constructor, - Context, -} from '@loopback/context'; +import {inject, Provider, BoundValue, Context} from '@loopback/context'; import { RestComponent, diff --git a/packages/rest/test/unit/rest-server/rest-server.open-api-spec.test.ts b/packages/rest/test/unit/rest-server/rest-server.open-api-spec.test.ts index 66d1e5b7abc4..2d8205d72b1a 100644 --- a/packages/rest/test/unit/rest-server/rest-server.open-api-spec.test.ts +++ b/packages/rest/test/unit/rest-server/rest-server.open-api-spec.test.ts @@ -5,7 +5,7 @@ import {expect, validateApiSpec} from '@loopback/testlab'; import {Application} from '@loopback/core'; -import {RestServer, api, get, Route, RestComponent} from '../../..'; +import {RestServer, get, Route, RestComponent} from '../../..'; import {anOpenApiSpec} from '@loopback/openapi-spec-builder'; describe('RestServer.getApiSpec()', () => { diff --git a/packages/rest/test/unit/rest-server/rest-server.test.ts b/packages/rest/test/unit/rest-server/rest-server.test.ts index 1c19b96d89a4..00e3f6eb0c48 100644 --- a/packages/rest/test/unit/rest-server/rest-server.test.ts +++ b/packages/rest/test/unit/rest-server/rest-server.test.ts @@ -3,30 +3,20 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {expect, ShotRequest} from '@loopback/testlab'; +import {expect} from '@loopback/testlab'; import {anOperationSpec} from '@loopback/openapi-spec-builder'; -import { - Binding, - Context, - Provider, - BoundValue, - inject, -} from '@loopback/context'; -import {Application, ProviderMap, CoreBindings} from '@loopback/core'; +import {Binding, Context} from '@loopback/context'; +import {Application} from '@loopback/core'; import { RestServer, - ServerRequest, BindElement, GetFromContext, Route, InvokeMethod, RestBindings, RestComponent, - RestComponentConfig, } from '../../..'; -const SequenceActions = RestBindings.SequenceActions; - describe('RestServer', () => { describe('"bindElement" binding', () => { it('returns a function for creating new bindings', async () => { diff --git a/packages/rest/test/unit/router/metadata.test.ts b/packages/rest/test/unit/router/metadata.test.ts index 14ea688aecff..7ecb1b5ccc12 100644 --- a/packages/rest/test/unit/router/metadata.test.ts +++ b/packages/rest/test/unit/router/metadata.test.ts @@ -6,7 +6,6 @@ import { get, api, - param, getControllerSpec, operation, post, @@ -14,7 +13,6 @@ import { patch, del, } from '../../..'; -import {ParameterObject} from '@loopback/openapi-spec'; import {expect} from '@loopback/testlab'; import {anOpenApiSpec, anOperationSpec} from '@loopback/openapi-spec-builder'; @@ -36,7 +34,9 @@ describe('Routing metadata', () => { }); it('returns spec defined via @get decorator', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class MyController { @get('/greet', operationSpec) @@ -60,7 +60,9 @@ describe('Routing metadata', () => { }); it('returns spec defined via @post decorator', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class MyController { @post('/greeting', operationSpec) @@ -82,7 +84,9 @@ describe('Routing metadata', () => { }); it('returns spec defined via @put decorator', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class MyController { @put('/greeting', operationSpec) @@ -104,7 +108,9 @@ describe('Routing metadata', () => { }); it('returns spec defined via @patch decorator', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class MyController { @patch('/greeting', operationSpec) @@ -126,7 +132,9 @@ describe('Routing metadata', () => { }); it('returns spec defined via @del decorator', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class MyController { @del('/greeting', operationSpec) @@ -148,7 +156,9 @@ describe('Routing metadata', () => { }); it('returns spec defined via @operation decorator', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class MyController { @operation('post', '/greeting', operationSpec) @@ -198,7 +208,9 @@ describe('Routing metadata', () => { }); it('honours specifications from inherited methods', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class Parent { @get('/parent', operationSpec) @@ -235,7 +247,9 @@ describe('Routing metadata', () => { }); it('allows children to override parent REST endpoints', () => { - const operationSpec = anOperationSpec().withStringResponse().build(); + const operationSpec = anOperationSpec() + .withStringResponse() + .build(); class Parent { @get('/name', operationSpec) diff --git a/packages/rest/test/unit/router/metadata/param.test.ts b/packages/rest/test/unit/router/metadata/param.test.ts index 48cd0649d8b0..61d54377852d 100644 --- a/packages/rest/test/unit/router/metadata/param.test.ts +++ b/packages/rest/test/unit/router/metadata/param.test.ts @@ -3,17 +3,11 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT +import {get, param, getControllerSpec, operation} from '../../../..'; import { - get, - api, - param, - getControllerSpec, - operation, -} from '../../../..'; -import { - OperationObject, - ParameterObject, - ResponsesObject, + OperationObject, + ParameterObject, + ResponsesObject, } from '@loopback/openapi-spec'; import {expect} from '@loopback/testlab'; import {anOperationSpec} from '@loopback/openapi-spec-builder'; @@ -99,11 +93,10 @@ describe('Routing metadata for parameters', () => { pageSizeSpec, ]); }); - - it('throws an error if @param is used at both method and parameter level', - () => { - expect(() => { - const offsetSpec: ParameterObject = { + // tslint:disable-next-line:max-line-length + it('throws an error if @param is used at both method and parameter level', () => { + expect(() => { + const offsetSpec: ParameterObject = { name: 'offset', type: 'number', in: 'query', @@ -114,17 +107,15 @@ describe('Routing metadata for parameters', () => { type: 'number', in: 'query', }; - + // tslint:disable-next-line:no-unused-variable class MyController { @get('/') @param(offsetSpec) - list( - offset?: number, - @param(pageSizeSpec) pageSize?: number, - ) {} + list(offset?: number, @param(pageSizeSpec) pageSize?: number) {} } }).to.throw( - /Mixed usage of @param at method\/parameter level is not allowed/); + /Mixed usage of @param at method\/parameter level is not allowed/, + ); }); it('adds to existing spec provided via @operation', () => { diff --git a/packages/rest/test/unit/router/reject.test.ts b/packages/rest/test/unit/router/reject.test.ts index 83161180bd47..73fb6eb21449 100644 --- a/packages/rest/test/unit/router/reject.test.ts +++ b/packages/rest/test/unit/router/reject.test.ts @@ -3,13 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import { - ServerRequest, - ParsedRequest, - Reject, - RejectProvider, - LogError, -} from '../../..'; +import {Reject, RejectProvider, LogError} from '../../..'; import { expect, @@ -39,7 +33,7 @@ describe('reject', () => { const reject = new RejectProvider(logger).value(); reject(mock.response, mock.request, testError); - const result = await mock.result; + await mock.result; expect(logger).to.be.calledWith(testError, 500, mock.request); }); diff --git a/packages/rest/test/unit/router/routing-table.test.ts b/packages/rest/test/unit/router/routing-table.test.ts index e1c930c88d9b..4726d41b64ce 100644 --- a/packages/rest/test/unit/router/routing-table.test.ts +++ b/packages/rest/test/unit/router/routing-table.test.ts @@ -4,7 +4,6 @@ // License text available at https://opensource.org/licenses/MIT import { - ServerRequest, ParsedRequest, parseRequestUrl, RoutingTable, @@ -12,7 +11,6 @@ import { ControllerRoute, } from '../../..'; import {expect, ShotRequestOptions, ShotRequest} from '@loopback/testlab'; -import {OperationObject, ParameterObject} from '@loopback/openapi-spec'; import {anOpenApiSpec} from '@loopback/openapi-spec-builder'; describe('RoutingTable', () => { diff --git a/packages/rest/test/unit/writer.test.ts b/packages/rest/test/unit/writer.test.ts index 6eafbdbd271c..6f63df15b4ed 100644 --- a/packages/rest/test/unit/writer.test.ts +++ b/packages/rest/test/unit/writer.test.ts @@ -3,13 +3,12 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {ServerResponse, OperationRetval, writeResultToResponse} from '../..'; +import {ServerResponse, writeResultToResponse} from '../..'; import { expect, mockResponse, ShotObservedResponse, - ShotRequest, } from '@loopback/testlab'; describe('writer', () => { diff --git a/tslint.json b/tslint.json index dfc1d8b7aba3..1ceb34b74fe0 100644 --- a/tslint.json +++ b/tslint.json @@ -20,12 +20,9 @@ "no-shadowed-variable": true, "no-string-throw": true, "no-unused-expression": true, + "no-unused-variable": true, "no-var-keyword": true, - "triple-equals": [ - true, - "allow-null-check", - "allow-undefined-check" - ], + "triple-equals": [true, "allow-null-check", "allow-undefined-check"], "typeof-compare": true, // These rules make code maintenance easier @@ -34,10 +31,13 @@ "no-default-export": true, "no-trailing-whitespace": true, "prefer-const": true, - "trailing-comma": [true, { - "multiline": "always", - "singleline": "never" - }], + "trailing-comma": [ + true, + { + "multiline": "always", + "singleline": "never" + } + ], // These rules enforce consistent style across your codebase: "arrow-return-shorthand": [true], @@ -51,14 +51,22 @@ "prefer-method-signature": true, "quotemark": [true, "single", "avoid-escape"], "semicolon": [true, "always"], - "space-before-function-paren": [true, { - "anonymous": "never", - "named": "never", - "asyncArrow": "always", - "method": "never", - "constructor": "never" - }], - "variable-name": [true, "allow-leading-underscore", "ban-keywords", "check-format"], + "space-before-function-paren": [ + true, + { + "anonymous": "never", + "named": "never", + "asyncArrow": "always", + "method": "never", + "constructor": "never" + } + ], + "variable-name": [ + true, + "allow-leading-underscore", + "ban-keywords", + "check-format" + ], "whitespace": [ true, "check-branch",