sample(@nestjs) add class serializer sample

This commit is contained in:
Kamil Myśliwiec
2018-08-27 16:58:39 +02:00
parent 08e6278a77
commit 95dfd59e4e
12 changed files with 9275 additions and 0 deletions

21
sample/21-serializer/.gitignore vendored Normal file
View File

@@ -0,0 +1,21 @@
# dependencies
/node_modules
# IDE
/.idea
/.awcache
/.vscode
# misc
npm-debug.log
# example
/quick-start
# tests
/test
/coverage
/.nyc_output
# dist
/dist

View File

@@ -0,0 +1,14 @@
{
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"transform": {
"^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"testRegex": "/src/.*\\.(test|spec).(ts|tsx|js)$",
"collectCoverageFrom" : ["src/**/*.{js,jsx,tsx,ts}", "!**/node_modules/**", "!**/vendor/**"],
"coverageReporters": ["json", "lcov"]
}

5668
sample/21-serializer/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,37 @@
{
"name": "nest-typescript-starter",
"version": "1.0.0",
"description": "Nest TypeScript starter repository",
"license": "MIT",
"scripts": {
"start": "ts-node src/main.ts",
"prestart:prod": "tsc",
"start:prod": "node dist/main.js",
"test": "jest --config=jest.json",
"test:watch": "jest --watch --config=jest.json",
"test:coverage":
"jest --config=jest.json --coverage --coverageDirectory=coverage",
"e2e": "jest --config=e2e/jest-e2e.json --forceExit",
"e2e:watch": "jest --watch --config=e2e/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "^5.1.0",
"@nestjs/core": "^5.1.0",
"@nestjs/microservices": "^5.1.0",
"@nestjs/testing": "^5.1.0",
"@nestjs/websockets": "^5.1.0",
"class-transformer": "^0.1.7",
"reflect-metadata": "^0.1.12",
"rxjs": "^6.0.0",
"typescript": "^2.8.0"
},
"devDependencies": {
"@types/jest": "^20.0.8",
"@types/node": "^7.0.41",
"jest": "^20.0.4",
"supertest": "^3.0.0",
"ts-jest": "^20.0.14",
"ts-node": "^6.0.0",
"tslint": "^5.9.1"
}
}

View File

@@ -0,0 +1,27 @@
import {
ClassSerializerInterceptor,
Controller,
Get,
SerializeOptions,
UseInterceptors,
} from '@nestjs/common';
import { RoleEntity } from './entities/role.entity';
import { UserEntity } from './entities/user.entity';
@Controller()
@UseInterceptors(ClassSerializerInterceptor)
export class AppController {
@Get()
@SerializeOptions({
excludePrefixes: 'excludeAll',
})
findOne(): UserEntity {
return new UserEntity({
id: 1,
firstName: 'Kamil',
lastName: 'Mysliwiec',
password: 'password',
role: new RoleEntity({ id: 1, name: 'admin' }),
});
}
}

View File

@@ -0,0 +1,7 @@
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
@Module({
controllers: [AppController],
})
export class ApplicationModule {}

View File

@@ -0,0 +1,8 @@
export class RoleEntity {
id: number;
name: string;
constructor(partial: Partial<RoleEntity>) {
Object.assign(this, partial);
}
}

View File

@@ -0,0 +1,22 @@
import { Exclude, Expose, Transform } from 'class-transformer';
import { RoleEntity } from './role.entity';
export class UserEntity {
id: number;
firstName: string;
lastName: string;
@Exclude() password: string;
@Expose()
get fullName(): string {
return `${this.firstName} ${this.lastName}`;
}
@Transform(role => role.name)
role: RoleEntity;
constructor(partial: Partial<UserEntity>) {
Object.assign(this, partial);
}
}

View File

@@ -0,0 +1,10 @@
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();

View File

@@ -0,0 +1,22 @@
{
"compilerOptions": {
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es6",
"sourceMap": true,
"allowJs": true,
"outDir": "./dist"
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,53 @@
{
"defaultSeverity": "error",
"extends": [
"tslint:recommended"
],
"jsRules": {
"no-unused-expression": true
},
"rules": {
"eofline": false,
"quotemark": [
true,
"single"
],
"ordered-imports": [
false
],
"max-line-length": [
150
],
"member-ordering": [
false
],
"curly": false,
"interface-name": [
false
],
"array-type": [
false
],
"member-access": [
false
],
"no-empty-interface": false,
"no-empty": false,
"arrow-parens": false,
"object-literal-sort-keys": false,
"no-unused-expression": false,
"max-classes-per-file": [
false
],
"variable-name": [
false
],
"one-line": [
false
],
"one-variable-per-declaration": [
false
]
},
"rulesDirectory": []
}

File diff suppressed because it is too large Load Diff