├── README.md ├── WSL 2 com Docker ├── Ambiente de desenvolvimento com WSL 2 e Docker.pdf:Zone.Identifier └── slides.pdf ├── iniciando-typescript ├── .vscode │ └── settings.json ├── dist │ ├── index.html │ ├── index.js │ └── index.js.map ├── slides.pdf ├── src │ └── index.ts └── tsconfig.json └── remote-container ├── .devcontainer ├── Dockerfile └── devcontainer.json ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── nest-cli.json ├── package-lock.json ├── package.json ├── slides.pdf ├── src ├── app.controller.spec.ts ├── app.controller.ts ├── app.module.ts ├── app.service.ts └── main.ts ├── test ├── app.e2e-spec.ts └── jest-e2e.json ├── tsconfig.build.json └── tsconfig.json /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | ## Descrição 6 | 7 | Fontes do Esquenta do Avança Dev 1.0 8 | 9 | ## Slides 10 | 11 | Se a live teve slides, terá um arquivo slides.pdf no projeto. 12 | -------------------------------------------------------------------------------- /WSL 2 com Docker/Ambiente de desenvolvimento com WSL 2 e Docker.pdf:Zone.Identifier: -------------------------------------------------------------------------------- 1 | [ZoneTransfer] 2 | ZoneId=3 3 | ReferrerUrl=https://docs.google.com/ 4 | HostUrl=https://doc-0g-78-slides.googleusercontent.com/export/vnu6g8aimvsj02nv97vjj2kas4/vfm4nc8feb4tjucbvj432erhs8/1604005525000/118302835890793790886/118302835890793790886/13JUyXGJZHcwwltJtjdO6TZPA26vEh7CrY1wlM07T2cM?id=13JUyXGJZHcwwltJtjdO6TZPA26vEh7CrY1wlM07T2cM&pageid=ga4e3e8b361_0_170&exportFormat=pdf&dat=ANCXxGjr0TS4zg4YATnUg8d2Igw6XoefXOVje6yI5-ZpqgpmjZ45Gjvq2opDo4wFBg8u1G6X7rvHZY2Or7RMRtHCAvK-tA2G8znWyYMxDZjXYRw2KerpYY-KMtXVDARbFZweHHD1OR3PoYSzKxsDksts0TgDYh6hXSLcXEBxbjDGCRAk5iiBTHTnpmDhGKonWfmYp0kaK2A_h9OEZeNe8HiG8GvMpJD1TuOG8iTYbpTLdPcfVAPJwnj1imPcJThb0ta720lUZW7dlQQYYASQpHjiLfry7lPJ_qOzJ6jiXcrFZnQFxr_srxZdNXPCsU5hRcwwfbnTG2cv3OOIzrVme3HgIJSYcF73CnBPkqiH5J8vqUAZh9MDAZPwYbT99MH7pRTl-bedCl6ZEoVmbTK6R1w8pFa2aSIUqb9902A_40Ki6ythX6acbkoIC3trHon_nD99UdsHHzZMn6tPqXJoEXYPGfiwmaOK2vQ8S-DFCet3YJjeJOvvimS7dAQatH64Y81vrKEMPx5H7XVSM4STgNPZAQYy1PVAAxmwucDWq6jhaC_m1zMLAp91erPClDB1t9cXwwm0CKUXW2vdycUcxIfsdAtES_dVXnMOado3yPFyjPyz4pC928M6uMVDPVJz_SlbM2ce8i-ApjGJ2ERMLMElbYd1rqv9j_uSDe7Whj68dtJEXzZOWLAZT70VcvGCSbeJq3HokCycCy4-wrBqE2GIVFSrh6t3TKPT 5 | -------------------------------------------------------------------------------- /WSL 2 com Docker/slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeedu/avancadev-edicao1/5533f3309ef632e1bc3daabe6b0947078c6e4de7/WSL 2 com Docker/slides.pdf -------------------------------------------------------------------------------- /iniciando-typescript/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.colorCustomizations": { 3 | "activityBar.activeBackground": "#0098ff", 4 | "activityBar.activeBorder": "#bf0072", 5 | "activityBar.background": "#0098ff", 6 | "activityBar.foreground": "#e7e7e7", 7 | "activityBar.inactiveForeground": "#e7e7e799", 8 | "activityBarBadge.background": "#bf0072", 9 | "activityBarBadge.foreground": "#e7e7e7", 10 | "statusBar.background": "#0098ff", 11 | "statusBar.foreground": "#e7e7e7", 12 | "statusBarItem.hoverBackground": "#33adff" 13 | }, 14 | "peacock.remoteColor": "#007acc" 15 | } -------------------------------------------------------------------------------- /iniciando-typescript/dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /iniciando-typescript/dist/index.js: -------------------------------------------------------------------------------- 1 | var _a; 2 | /* ### QUALQUER OUTRO TIPO É NÃO PRIMITIVO 3 | * - Object (nativo do JavaScript, não deve ser usado para tipagem) 4 | * - object (pode ser usado para tipagem) 5 | * - Class 6 | * - qualquer outra modelagem de object 7 | */ 8 | /* ### TIPOS IMPLÍCITOS E EXPLÍCITOS */ 9 | var impl_string = "typescript"; //string 10 | var impl_number = 5.5; //number 11 | var impl_boolean = true; //boolean 12 | var impl_obj = { name: "typescript" }; // {name: string} 13 | var expl_string = "typescript"; 14 | var expl_number = 5.5; 15 | var expl_boolean = true; 16 | var expl_obj = { name: "typescript" }; 17 | var obj = { 18 | firstName: "luiz", 19 | lastName: "diniz", 20 | fullName: function () { 21 | return "luiz carlos"; // 22 | } 23 | }; 24 | console.log("obj - user", obj); 25 | /* ### OPTIONAL CHAINING (PROPOSTA PARA ECMASCRIPT) */ 26 | var city = (_a = obj.address) === null || _a === void 0 ? void 0 : _a.city; 27 | console.log("city", city); 28 | /* ### NULLISH COALESCING (PROPOSTA PARA ECMASCRIPT) */ 29 | var cityLabel = city !== null && city !== void 0 ? city : "sem cidade"; 30 | console.log(cityLabel); 31 | /* ### NON-NULL ASSERTION (PROPOSTA PARA ECMASCRIPT) */ 32 | function addAddress(obj) { 33 | obj.address = { address: "rua x", city: "betim" }; 34 | } 35 | addAddress(obj); 36 | var cityNonNull = obj.address.city; 37 | //obj.address!.city = "valor" 38 | console.log("cityNonNull", cityNonNull); 39 | var num1 = undefined; 40 | var num2 = num1; 41 | console.log(num2); 42 | /* ### FUNÇÕES 43 | * Funções recebem parâmetros que podem ser tipados normalmente e 44 | * pode-se determinar o tipo de retorno com um tipo primitivo ou não-primitivo 45 | */ 46 | function soma(a, b) { 47 | return a + b; 48 | } 49 | //parâmetro lastName é opcional 50 | function fullName(firstName, lastName) { 51 | return lastName === undefined ? firstName : firstName + " " + lastName; 52 | } 53 | console.log("fullname", fullName("luiz", "diniz")); 54 | var UserCrud = /** @class */ (function () { 55 | function UserCrud(name, email, password) { 56 | this.name = name; 57 | this.email = email; 58 | this.password = password; 59 | this.variavel = 'valor'; 60 | } 61 | UserCrud.prototype.create = function (data) { 62 | throw new Error("Method not implemented."); 63 | }; 64 | UserCrud.prototype.fetch = function (filter) { 65 | throw new Error("Method not implemented."); 66 | }; 67 | UserCrud.prototype.find = function (id) { 68 | throw new Error("Method not implemented."); 69 | }; 70 | return UserCrud; 71 | }()); 72 | var user = new UserCrud('', '', ''); 73 | //user. 74 | /* ### ANY */ 75 | var variavel; 76 | variavel = "luiz carlos"; 77 | variavel = 5.5; 78 | variavel = true; 79 | var variavel2 = 56; 80 | // const variavel3: any = variavel2; 81 | // variavel3.existe('') 82 | variavel2.existe(' '); 83 | function soma1(a, b) { 84 | return a + b; 85 | } 86 | //soma1("luiz", "diniz"); 87 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /iniciando-typescript/dist/index.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "file": "index.js", 4 | "sourceRoot": "", 5 | "sources": [ 6 | "../src/index.ts" 7 | ], 8 | "names": [], 9 | "mappings": "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" 10 | } 11 | -------------------------------------------------------------------------------- /iniciando-typescript/slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeedu/avancadev-edicao1/5533f3309ef632e1bc3daabe6b0947078c6e4de7/iniciando-typescript/slides.pdf -------------------------------------------------------------------------------- /iniciando-typescript/src/index.ts: -------------------------------------------------------------------------------- 1 | /* ### TIPOS PRIMITIVOS */ 2 | //let, const e var 3 | type Primitive = string | boolean | number | bigint | symbol | null | undefined; 4 | 5 | /* ### QUALQUER OUTRO TIPO É NÃO PRIMITIVO 6 | * - Object (nativo do JavaScript, não deve ser usado para tipagem) 7 | * - object (pode ser usado para tipagem) 8 | * - Class 9 | * - qualquer outra modelagem de object 10 | */ 11 | 12 | /* ### TIPOS IMPLÍCITOS E EXPLÍCITOS */ 13 | 14 | const impl_string = "typescript"; //string 15 | const impl_number = 5.5; //number 16 | const impl_boolean = true; //boolean 17 | const impl_obj = { name: "typescript" }; // {name: string} 18 | 19 | const expl_string: string = "typescript"; 20 | const expl_number: number = 5.5; 21 | const expl_boolean: boolean = true; 22 | const expl_obj: { name: string } = { name: "typescript" }; 23 | 24 | /* ### INTERFACES */ 25 | 26 | interface AddressInterface { 27 | address: string; 28 | city: string; 29 | } 30 | 31 | //type 32 | interface UserInterface { 33 | firstName: string; 34 | lastName: string; 35 | fullName: () => string; 36 | address?: AddressInterface; 37 | } 38 | 39 | 40 | const obj: UserInterface = { 41 | firstName: "luiz", 42 | lastName: "diniz", 43 | fullName: () => { 44 | return "luiz carlos"; // 45 | }, 46 | //address não é obrigatório 47 | // address: { 48 | // address: "rua x", 49 | // city: "betim" 50 | // } 51 | }; 52 | 53 | console.log("obj - user", obj); 54 | 55 | /* ### OPTIONAL CHAINING (PROPOSTA PARA ECMASCRIPT) */ 56 | const city = obj.address?.city; 57 | 58 | console.log("city", city); 59 | 60 | /* ### NULLISH COALESCING (PROPOSTA PARA ECMASCRIPT) */ 61 | 62 | const cityLabel = city ?? "sem cidade"; 63 | 64 | console.log(cityLabel); 65 | 66 | /* ### NON-NULL ASSERTION (PROPOSTA PARA ECMASCRIPT) */ 67 | 68 | function addAddress(obj: UserInterface): void { 69 | obj.address = { address: "rua x", city: "betim" }; 70 | } 71 | addAddress(obj); 72 | 73 | const cityNonNull = obj.address!.city; 74 | //obj.address!.city = "valor" 75 | console.log("cityNonNull", cityNonNull); 76 | 77 | const num1: number | undefined = undefined; 78 | 79 | const num2: number = num1!; 80 | 81 | console.log(num2); 82 | 83 | /* ### FUNÇÕES 84 | * Funções recebem parâmetros que podem ser tipados normalmente e 85 | * pode-se determinar o tipo de retorno com um tipo primitivo ou não-primitivo 86 | */ 87 | function soma(a: number, b: number): number { 88 | return a + b; 89 | } 90 | 91 | //parâmetro lastName é opcional 92 | function fullName(firstName: string, lastName?: string): string { 93 | return lastName === undefined ? firstName : `${firstName} ${lastName}`; 94 | } 95 | 96 | console.log("fullname", fullName("luiz", "diniz")); 97 | 98 | /* ### CLASSES 99 | * O suporte a classes vem antes da ES6. 100 | * É suportado tudo que é possível fazer com classes na ES6 + 101 | * os recursos do próprio TypeScript. 102 | */ 103 | 104 | interface BaseCrudInterface { 105 | //@ts-ignore 106 | create(data: object); 107 | fetch(filter: object): UserInterface[]; 108 | find(id: string): UserInterface; 109 | } 110 | 111 | class UserCrud implements BaseCrudInterface { 112 | private variavel: string = 'valor'; 113 | private variavel1: number; 114 | 115 | constructor( 116 | private name: string, 117 | private email: string, 118 | private password: string 119 | ) { 120 | 121 | } 122 | create(data: object) { 123 | throw new Error("Method not implemented."); 124 | } 125 | fetch(filter: object): UserInterface[] { 126 | throw new Error("Method not implemented."); 127 | } 128 | find(id: string): UserInterface { 129 | throw new Error("Method not implemented."); 130 | } 131 | 132 | } 133 | const user = new UserCrud('', '', ''); 134 | //user. 135 | 136 | /* ### ANY */ 137 | 138 | let variavel; 139 | 140 | variavel = "luiz carlos"; 141 | 142 | variavel = 5.5 143 | 144 | variavel = true 145 | 146 | const variavel2 = 56; 147 | 148 | // const variavel3: any = variavel2; 149 | // variavel3.existe('') 150 | 151 | (variavel2 as any).existe(' ') 152 | 153 | function soma1(a: any, b: any){ 154 | return a+b; 155 | } 156 | 157 | //soma1("luiz", "diniz"); 158 | 159 | 160 | -------------------------------------------------------------------------------- /iniciando-typescript/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noEmitOnError": true, 4 | "strictNullChecks": true, 5 | "noImplicitAny": true, 6 | "outDir": "dist", 7 | "sourceMap": true 8 | }, 9 | "include": [ 10 | "src" 11 | ] 12 | } -------------------------------------------------------------------------------- /remote-container/.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.145.1/containers/javascript-node/.devcontainer/base.Dockerfile 2 | 3 | # [Choice] Node.js version: 14, 12, 10 4 | ARG VARIANT="14-buster" 5 | FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} 6 | 7 | # [Optional] Uncomment this section to install additional OS packages. 8 | # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ 9 | # && apt-get -y install --no-install-recommends 10 | 11 | # [Optional] Uncomment if you want to install an additional version of node using nvm 12 | # ARG EXTRA_NODE_VERSION=10 13 | # RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" 14 | 15 | # [Optional] Uncomment if you want to install more global node modules 16 | # RUN sudo -u node npm install -g 17 | RUN npm install -g @nestjs/cli -------------------------------------------------------------------------------- /remote-container/.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remote-container", 3 | "build": { 4 | "dockerfile": "Dockerfile", 5 | // Update 'VARIANT' to pick a Node version: 10, 12, 14 6 | "args": { "VARIANT": "12" } 7 | }, 8 | 9 | // Set *default* container specific settings.json values on container create. 10 | "settings": { 11 | "terminal.integrated.shell.linux": "/bin/bash" 12 | }, 13 | 14 | // Add the IDs of extensions you want installed when the container is created. 15 | "extensions": [ 16 | "dbaeumer.vscode-eslint" 17 | ], 18 | 19 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 20 | "forwardPorts": [3000], 21 | 22 | //"overrideCommand": false 23 | 24 | // Use 'postCreateCommand' to run commands after the container is created. 25 | // "postCreateCommand": "yarn install", 26 | 27 | // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. 28 | // "remoteUser": "node" 29 | } 30 | -------------------------------------------------------------------------------- /remote-container/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | project: 'tsconfig.json', 5 | sourceType: 'module', 6 | }, 7 | plugins: ['@typescript-eslint/eslint-plugin'], 8 | extends: [ 9 | 'plugin:@typescript-eslint/eslint-recommended', 10 | 'plugin:@typescript-eslint/recommended', 11 | 'prettier', 12 | 'prettier/@typescript-eslint', 13 | ], 14 | root: true, 15 | env: { 16 | node: true, 17 | jest: true, 18 | }, 19 | rules: { 20 | '@typescript-eslint/interface-name-prefix': 'off', 21 | '@typescript-eslint/explicit-function-return-type': 'off', 22 | '@typescript-eslint/explicit-module-boundary-types': 'off', 23 | '@typescript-eslint/no-explicit-any': 'off', 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /remote-container/.gitignore: -------------------------------------------------------------------------------- 1 | # compiled output 2 | /dist 3 | /node_modules 4 | 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # OS 14 | .DS_Store 15 | 16 | # Tests 17 | /coverage 18 | /.nyc_output 19 | 20 | # IDEs and editors 21 | /.idea 22 | .project 23 | .classpath 24 | .c9/ 25 | *.launch 26 | .settings/ 27 | *.sublime-workspace 28 | 29 | # IDE - VSCode 30 | .vscode/* 31 | !.vscode/settings.json 32 | !.vscode/tasks.json 33 | !.vscode/launch.json 34 | !.vscode/extensions.json -------------------------------------------------------------------------------- /remote-container/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /remote-container/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.colorCustomizations": { 3 | "activityBar.activeBackground": "#fc7d6d", 4 | "activityBar.activeBorder": "#a1fdac", 5 | "activityBar.background": "#fc7d6d", 6 | "activityBar.foreground": "#15202b", 7 | "activityBar.inactiveForeground": "#15202b99", 8 | "activityBarBadge.background": "#a1fdac", 9 | "activityBarBadge.foreground": "#15202b", 10 | "statusBar.background": "#fc7d6d", 11 | "statusBar.foreground": "#15202b", 12 | "statusBarItem.hoverBackground": "#fb503b" 13 | }, 14 | "peacock.remoteColor": "#fb503b" 15 | } -------------------------------------------------------------------------------- /remote-container/README.md: -------------------------------------------------------------------------------- 1 |

2 | Nest Logo 3 |

4 | 5 | [travis-image]: https://api.travis-ci.org/nestjs/nest.svg?branch=master 6 | [travis-url]: https://travis-ci.org/nestjs/nest 7 | [linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux 8 | [linux-url]: https://travis-ci.org/nestjs/nest 9 | 10 |

A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.

11 |

12 | NPM Version 13 | Package License 14 | NPM Downloads 15 | Travis 16 | Linux 17 | Coverage 18 | Gitter 19 | Backers on Open Collective 20 | Sponsors on Open Collective 21 | 22 | 23 |

24 | 26 | 27 | ## Description 28 | 29 | [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. 30 | 31 | ## Installation 32 | 33 | ```bash 34 | $ npm install 35 | ``` 36 | 37 | ## Running the app 38 | 39 | ```bash 40 | # development 41 | $ npm run start 42 | 43 | # watch mode 44 | $ npm run start:dev 45 | 46 | # production mode 47 | $ npm run start:prod 48 | ``` 49 | 50 | ## Test 51 | 52 | ```bash 53 | # unit tests 54 | $ npm run test 55 | 56 | # e2e tests 57 | $ npm run test:e2e 58 | 59 | # test coverage 60 | $ npm run test:cov 61 | ``` 62 | 63 | ## Support 64 | 65 | Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). 66 | 67 | ## Stay in touch 68 | 69 | - Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) 70 | - Website - [https://nestjs.com](https://nestjs.com/) 71 | - Twitter - [@nestframework](https://twitter.com/nestframework) 72 | 73 | ## License 74 | 75 | Nest is [MIT licensed](LICENSE). 76 | -------------------------------------------------------------------------------- /remote-container/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "collection": "@nestjs/schematics", 3 | "sourceRoot": "src" 4 | } 5 | -------------------------------------------------------------------------------- /remote-container/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remote-container", 3 | "version": "0.0.1", 4 | "description": "", 5 | "author": "", 6 | "private": true, 7 | "license": "UNLICENSED", 8 | "scripts": { 9 | "prebuild": "rimraf dist", 10 | "build": "nest build", 11 | "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", 12 | "start": "nest start", 13 | "start:dev": "nest start --watch", 14 | "start:debug": "nest start --debug --watch", 15 | "start:prod": "node dist/main", 16 | "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", 17 | "test": "jest", 18 | "test:watch": "jest --watch", 19 | "test:cov": "jest --coverage", 20 | "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", 21 | "test:e2e": "jest --config ./test/jest-e2e.json" 22 | }, 23 | "dependencies": { 24 | "@nestjs/common": "^7.0.0", 25 | "@nestjs/core": "^7.0.0", 26 | "@nestjs/platform-express": "^7.0.0", 27 | "reflect-metadata": "^0.1.13", 28 | "rimraf": "^3.0.2", 29 | "rxjs": "^6.5.4" 30 | }, 31 | "devDependencies": { 32 | "@nestjs/cli": "^7.0.0", 33 | "@nestjs/schematics": "^7.0.0", 34 | "@nestjs/testing": "^7.0.0", 35 | "@types/express": "^4.17.3", 36 | "@types/jest": "26.0.10", 37 | "@types/node": "^13.9.1", 38 | "@types/supertest": "^2.0.8", 39 | "@typescript-eslint/eslint-plugin": "3.9.1", 40 | "@typescript-eslint/parser": "3.9.1", 41 | "eslint": "7.7.0", 42 | "eslint-config-prettier": "^6.10.0", 43 | "eslint-plugin-import": "^2.20.1", 44 | "jest": "26.4.2", 45 | "prettier": "^1.19.1", 46 | "supertest": "^4.0.2", 47 | "ts-jest": "26.2.0", 48 | "ts-loader": "^6.2.1", 49 | "ts-node": "9.0.0", 50 | "tsconfig-paths": "^3.9.0", 51 | "typescript": "^3.7.4" 52 | }, 53 | "jest": { 54 | "moduleFileExtensions": [ 55 | "js", 56 | "json", 57 | "ts" 58 | ], 59 | "rootDir": "src", 60 | "testRegex": ".spec.ts$", 61 | "transform": { 62 | "^.+\\.(t|j)s$": "ts-jest" 63 | }, 64 | "coverageDirectory": "../coverage", 65 | "testEnvironment": "node" 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /remote-container/slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeedu/avancadev-edicao1/5533f3309ef632e1bc3daabe6b0947078c6e4de7/remote-container/slides.pdf -------------------------------------------------------------------------------- /remote-container/src/app.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppController', () => { 6 | let appController: AppController; 7 | 8 | beforeEach(async () => { 9 | const app: TestingModule = await Test.createTestingModule({ 10 | controllers: [AppController], 11 | providers: [AppService], 12 | }).compile(); 13 | 14 | appController = app.get(AppController); 15 | }); 16 | 17 | describe('root', () => { 18 | it('should return "Hello World!"', () => { 19 | expect(appController.getHello()).toBe('Hello World!'); 20 | }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /remote-container/src/app.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get } from '@nestjs/common'; 2 | import { AppService } from './app.service'; 3 | 4 | @Controller() 5 | export class AppController { 6 | constructor(private readonly appService: AppService) {} 7 | 8 | @Get() 9 | getHello(): string { 10 | return this.appService.getHello(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /remote-container/src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | @Module({ 6 | imports: [], 7 | controllers: [AppController], 8 | providers: [AppService], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /remote-container/src/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class AppService { 5 | getHello(): string { 6 | return 'Hello World!'; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /remote-container/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { AppModule } from './app.module'; 3 | 4 | async function bootstrap() { 5 | const app = await NestFactory.create(AppModule); 6 | await app.listen(3000); 7 | } 8 | bootstrap(); 9 | -------------------------------------------------------------------------------- /remote-container/test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { INestApplication } from '@nestjs/common'; 3 | import * as request from 'supertest'; 4 | import { AppModule } from './../src/app.module'; 5 | 6 | describe('AppController (e2e)', () => { 7 | let app: INestApplication; 8 | 9 | beforeEach(async () => { 10 | const moduleFixture: TestingModule = await Test.createTestingModule({ 11 | imports: [AppModule], 12 | }).compile(); 13 | 14 | app = moduleFixture.createNestApplication(); 15 | await app.init(); 16 | }); 17 | 18 | it('/ (GET)', () => { 19 | return request(app.getHttpServer()) 20 | .get('/') 21 | .expect(200) 22 | .expect('Hello World!'); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /remote-container/test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["js", "json", "ts"], 3 | "rootDir": ".", 4 | "testEnvironment": "node", 5 | "testRegex": ".e2e-spec.ts$", 6 | "transform": { 7 | "^.+\\.(t|j)s$": "ts-jest" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /remote-container/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /remote-container/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "target": "es2017", 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "baseUrl": "./", 13 | "incremental": true 14 | } 15 | } 16 | --------------------------------------------------------------------------------