Skip to content

Commit

Permalink
refactor(@nestjs) fix typos, extract module compiler, fix broken guards
Browse files Browse the repository at this point in the history
  • Loading branch information
kamilmysliwiec committed Apr 28, 2018
1 parent 59fb9c7 commit 5cfb0bf
Show file tree
Hide file tree
Showing 63 changed files with 500 additions and 390 deletions.
14 changes: 7 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,10 +174,10 @@

## 4.3.0
- **common**: `ValidationPipe` is now available out-of-the-box (`@nestjs/common`)
- **core**: `json` and `urlencoded` (`body-parser`) middlewares are applied by default now, bugfix #252
- **core**: `json` and `urlencoded` (`body-parser`) middleware are applied by default now, bugfix #252
- **core** more informative error message (injector) #223
example: `[ExceptionHandler] Nest can't resolve dependencies of the UsersService (+, +, ?, +, +, +). Please verify whether [2] argument is available in the current context.`
- **core**: bugfix #240 - middlewares container state
- **core**: bugfix #240 - middleware container state
- **core**: bugifx #257 - `@Next()` issue
- **testing**: testing module is now independent from `@nestjs/microservices`

Expand Down Expand Up @@ -227,7 +227,7 @@ example: `[ExceptionHandler] Nest can't resolve dependencies of the UsersService
- `@Shared()` deprecated (modules are singletons by default) [read more](http://www.docs.nestjs.com/modules)
- `@SingleScope()` decorator [read more](http://www.docs.nestjs.com/modules)
- Modules re-exporting [read more](http://www.docs.nestjs.com/modules)
- Deffered & functional middlewares [read more](http://www.docs.nestjs.com/middlewares)
- Deffered & functional middleware [read more](http://www.docs.nestjs.com/middleware)
- Guards feature [read more](http://www.docs.nestjs.com/guards)
- Async components [read more](http://www.docs.nestjs.com/advanced/async-components)
- Hierarchical injector improvements [read more](http://www.docs.nestjs.com/advanced/hierarchical-injector)
Expand All @@ -250,7 +250,7 @@ example: `[ExceptionHandler] Nest can't resolve dependencies of the UsersService
## 3.0.1 (24.06.2017)
**@nestjs/core**
- Hierarchical injector bugfix,
- Middlewares `@UseFilters()` bugfix (#95).
- Middleware `@UseFilters()` bugfix (#95).

**@nestjs/microservices**
- TCP server / client bugfix (#91)
Expand Down Expand Up @@ -315,12 +315,12 @@ example: `[ExceptionHandler] Nest can't resolve dependencies of the UsersService

## 1.0.0 (Final - 01.05.2017)

- Added **Gateway Middlewares** support:
- Added **Gateway Middleware** support:

```
@WebSocketGateway({
port: 2000,
middlewares: [ChatMiddleware],
middleware: [ChatMiddleware],
})
```
Gateway Middleware example:
Expand Down Expand Up @@ -363,7 +363,7 @@ Session: () => ParameterDecorator
Headers: (property?: string) => ParameterDecorator
```

- `MiddlewaresBuilder` -> `MiddlewaresConsumer`
- `MiddlewareBuilder` -> `MiddlewareConsumer`
- **Exception Filters** support

```
Expand Down
33 changes: 33 additions & 0 deletions integration/hello-world/e2e/local-pipes.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import * as request from 'supertest';
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { ApplicationModule } from './../src/app.module';

describe('Hello world (default adapter)', () => {
let server;
let app: INestApplication;

beforeEach(async () => {
const module = await Test.createTestingModule({
imports: [ApplicationModule],
})
.compile();

app = module.createNestApplication();
server = app.getHttpServer();
await app.init();
});

it(`should execute locally injected pipe`, () => {
return request(server)
.get('/hello/local-pipe/1')
.expect(200)
.expect({
id: '1',
});
});

afterEach(async () => {
await app.close();
});
});
11 changes: 10 additions & 1 deletion integration/hello-world/src/hello/hello.controller.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { HelloService } from './hello.service';
import { Controller, Get, Post, Body, Header } from '@nestjs/common';
import { Controller, Get, Post, Body, Header, Param } from '@nestjs/common';
import { Observable, of } from 'rxjs';
import { UserByIdPipe } from './users/user-by-id.pipe';

@Controller('hello')
export class HelloController {
Expand All @@ -21,4 +22,12 @@ export class HelloController {
streamGreeting(): Observable<string> {
return of(this.helloService.greeting());
}

@Get('local-pipe/:id')
localPipe(
@Param('id', UserByIdPipe)
user: any,
): any {
return user;
}
}
3 changes: 2 additions & 1 deletion integration/hello-world/src/hello/hello.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Module } from '@nestjs/common';
import { HelloController } from './hello.controller';
import { HelloService } from './hello.service';
import { UsersService } from './users/users.service';

@Module({
controllers: [HelloController],
providers: [HelloService],
providers: [HelloService, UsersService],
})
export class HelloModule {}
11 changes: 11 additions & 0 deletions integration/hello-world/src/hello/users/user-by-id.pipe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
import { UsersService } from './users.service';

@Injectable()
export class UserByIdPipe implements PipeTransform<string> {
constructor(private readonly usersService: UsersService) {}

transform(value: string, metadata: ArgumentMetadata) {
return this.usersService.findById(value);
}
}
8 changes: 8 additions & 0 deletions integration/hello-world/src/hello/users/users.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
findById(id: string) {
return { id };
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
"packages/common/http/*.ts",
"packages/microservices/exceptions/",
"packages/microservices/microservices-module.ts",
"packages/core/middlewares/middlewares-module.ts",
"packages/core/middleware/middleware-module.ts",
"packages/common/services/logger.service.ts"
],
"extension": [
Expand Down
2 changes: 1 addition & 1 deletion packages/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const GUARDS_METADATA = '__guards__';
export const RENDER_METADATA = '__renderTemplate__';
export const INTERCEPTORS_METADATA = '__interceptors__';
export const HTTP_CODE_METADATA = '__httpCode__';
export const GATEWAY_MIDDLEWARES = '__gatewayMiddlewares';
export const GATEWAY_MIDDLEWARES = '__gatewayMiddleware';
export const MODULE_PATH = '__module_path__';
export const HEADERS_METADATA = '__headers__';
export const REDIRECT_METADATA = '__redirect__';
30 changes: 15 additions & 15 deletions packages/common/decorators/modules/module.decorator.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import 'reflect-metadata';
import * as deprecate from 'deprecate';
import { metadata } from '../../constants';
import { metadata as metadataConstants } from '../../constants';
import { ModuleMetadata } from '../../interfaces/modules/module-metadata.interface';
import { InvalidModuleConfigException } from './exceptions/invalid-module-config.exception';

const metadataKeys = [
metadata.MODULES,
metadata.IMPORTS,
metadata.EXPORTS,
metadata.COMPONENTS,
metadata.CONTROLLERS,
metadata.PROVIDERS,
metadataConstants.MODULES,
metadataConstants.IMPORTS,
metadataConstants.EXPORTS,
metadataConstants.COMPONENTS,
metadataConstants.CONTROLLERS,
metadataConstants.PROVIDERS,
];

const validateKeys = (keys: string[]) => {
Expand All @@ -31,19 +31,19 @@ const validateKeys = (keys: string[]) => {
* - `providers` - the list of providers that belong to this module. They can be injected between themselves.
* - `exports` - the set of components, which should be available for modules, which imports this module
* - `components` - @deprecated the list of components that belong to this module. They can be injected between themselves.
* @param obj {ModuleMetadata} Module metadata
* @param options {ModuleMetadata} Module metadata
*/
export function Module(obj: ModuleMetadata): ClassDecorator {
const propsKeys = Object.keys(obj);
export function Module(metadata: ModuleMetadata): ClassDecorator {
const propsKeys = Object.keys(metadata);

validateKeys(propsKeys);
showDeprecatedWarnings(obj);
overrideModuleMetadata(obj);
showDeprecatedWarnings(metadata);
overrideModuleMetadata(metadata);

return (target: object) => {
for (const property in obj) {
if (obj.hasOwnProperty(property)) {
Reflect.defineMetadata(property, obj[property], target);
for (const property in metadata) {
if (metadata.hasOwnProperty(property)) {
Reflect.defineMetadata(property, metadata[property], target);
}
}
};
Expand Down
4 changes: 2 additions & 2 deletions packages/common/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ export {
INestApplication,
INestMicroservice,
NestMiddleware,
FunctionMiddleware,
MiddlewaresConsumer,
MiddlewareFunction,
MiddlewareConsumer,
OnModuleInit,
ExceptionFilter,
WebSocketAdapter,
Expand Down
2 changes: 1 addition & 1 deletion packages/common/interceptors/file.interceptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Observable } from 'rxjs';
import { MulterOptions } from '../interfaces/external/multer-options.interface';
import { mixin } from '../decorators/core/component.decorator';
import { transformException } from './multer/multer.utils';
import { ExecutionContext } from './../interfaces';
import { ExecutionContext } from '../interfaces';

export function FileInterceptor(fieldName: string, options?: MulterOptions) {
return mixin(
Expand Down
2 changes: 1 addition & 1 deletion packages/common/interceptors/files.interceptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { NestInterceptor } from './../interfaces/features/nest-interceptor.inter
import { Observable } from 'rxjs';
import { MulterOptions } from '../interfaces/external/multer-options.interface';
import { transformException } from './multer/multer.utils';
import { ExecutionContext } from './../interfaces';
import { ExecutionContext } from '../interfaces';

export function FilesInterceptor(
fieldName: string,
Expand Down
2 changes: 1 addition & 1 deletion packages/common/interfaces/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export * from './nest-application-context.interface';
export * from './modules/on-init.interface';
export * from './modules/on-destroy.interface';
export * from './exceptions/exception-filter.interface';
export * from './middlewares';
export * from './middleware';
export * from './websockets/web-socket-adapter.interface';
export * from './features/pipe-transform.interface';
export * from './features/paramtype.interface';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export * from './middleware-config-proxy.interface';
export * from './middlewares-consumer.interface';
export * from './middleware-consumer.interface';
export * from './middleware-configuration.interface';
export * from './nest-middleware.interface';
export * from './middleware.interface';
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { MiddlewaresConsumer } from './middlewares-consumer.interface';
import { MiddlewareConsumer } from './middleware-consumer.interface';
import { RequestMappingMetadata } from '../request-mapping-metadata.interface';
import { Type } from '../type.interface';

Expand All @@ -16,7 +16,7 @@ export interface MiddlewareConfigProxy {
* When you pass Controller class Nest will attach middleware to every path defined within this controller.
*
* @param {} ...routes
* @returns {MiddlewaresConsumer}
* @returns {MiddlewareConsumer}
*/
forRoutes(...routes: (string | Type<any>)[]): MiddlewaresConsumer;
forRoutes(...routes: (string | Type<any>)[]): MiddlewareConsumer;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Type } from './../type.interface';
import { Type } from '../type.interface';

export interface MiddlewareConfiguration {
middlewares: any;
middleware: any;
forRoutes: (Type<any> | string)[];
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { MiddlewareConfigProxy } from './middleware-config-proxy.interface';

export interface MiddlewaresConsumer {
export interface MiddlewareConsumer {
/**
* Takes single middleware class or array of classes
* that subsequently could be attached to the passed either routes or controllers.
*
* @param {any|any[]} middlewares
* @param {any|any[]} middleware
* @returns {MiddlewareConfigProxy}
*/
apply(middlewares: any | any[]): MiddlewareConfigProxy;
apply(middleware: any | any[]): MiddlewareConfigProxy;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export type MiddlewareFunction = (req?, res?, next?) => any;
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export type MiddlewareFunction = (req, res, next) => any | Promise<any>;
import { MiddlewareFunction } from './middleware.interface';

export interface NestMiddleware {
resolve(...args): MiddlewareFunction | Promise<MiddlewareFunction>;
}

This file was deleted.

4 changes: 2 additions & 2 deletions packages/common/interfaces/modules/nest-module.interface.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { MiddlewaresConsumer } from '../middlewares/middlewares-consumer.interface';
import { MiddlewareConsumer } from '../middleware/middleware-consumer.interface';

export interface NestModule {
configure(consumer: MiddlewaresConsumer): MiddlewaresConsumer | void;
configure(consumer: MiddlewareConsumer): MiddlewareConsumer | void;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'reflect-metadata';
import { expect } from 'chai';
import { Component, FunctionMiddleware, Interceptor, mixin, Injectable } from '../../index';
import { Component, MiddlewareFunction, Interceptor, mixin, Injectable } from '../../index';

describe('@Component', () => {
@Component()
Expand Down
2 changes: 1 addition & 1 deletion packages/common/test/pipes/parse-int.pipe.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as sinon from 'sinon';
import { expect } from 'chai';
import { ArgumentMetadata } from './../../interfaces';
import { ArgumentMetadata } from '../../interfaces';
import { ParseIntPipe } from './../../pipes/parse-int.pipe';

describe('ParseIntPipe', () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/common/test/pipes/validation.pipe.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as sinon from 'sinon';
import { expect } from 'chai';
import { ArgumentMetadata } from './../../interfaces';
import { ArgumentMetadata } from '../../interfaces';
import { IsString } from 'class-validator';
import { ValidationPipe } from './../../pipes/validation.pipe';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'mocha';
import 'reflect-metadata';
import { expect } from 'chai';
import { BindResolveMiddlewareValues } from '../../utils/bind-resolve-values.util';
import { NestMiddleware } from '../../interfaces/middlewares/nest-middleware.interface';
import { NestMiddleware } from '../../interfaces/middleware/nest-middleware.interface';

describe('BindResolveMiddlewareValues', () => {
let type;
Expand Down
2 changes: 1 addition & 1 deletion packages/common/utils/bind-resolve-values.util.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Constructor } from './merge-with-values.util';
import { NestMiddleware } from '../interfaces/middlewares/nest-middleware.interface';
import { NestMiddleware } from '../interfaces/middleware/nest-middleware.interface';
import { Injectable } from '../decorators/core/component.decorator';

export const BindResolveMiddlewareValues = <
Expand Down
4 changes: 2 additions & 2 deletions packages/core/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
* MIT Licensed
*/

export { MiddlewareBuilder } from './middlewares/builder';
export { MiddlewareBuilder } from './middleware/builder';
export { ModuleRef } from './injector/module-ref';
export { NestFactory } from './nest-factory';
export { APP_INTERCEPTOR, APP_FILTER, APP_GUARD, APP_PIPE } from './constants';
export * from './services/reflector.service';
export * from './services';
export * from './nest-application';
export * from './nest-application-context';
Loading

0 comments on commit 5cfb0bf

Please sign in to comment.