typescript-express-starter 6.3.0 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.kr.md +24 -16
  2. package/README.md +23 -15
  3. package/lib/default/package.json +2 -2
  4. package/lib/graphql/.dockerignore +18 -0
  5. package/lib/graphql/.editorconfig +9 -0
  6. package/lib/graphql/.env +1 -0
  7. package/lib/graphql/.eslintignore +1 -0
  8. package/lib/graphql/.eslintrc +18 -0
  9. package/lib/graphql/.huskyrc +5 -0
  10. package/lib/graphql/.lintstagedrc.json +5 -0
  11. package/lib/graphql/.prettierrc +8 -0
  12. package/lib/graphql/.swcrc +39 -0
  13. package/lib/graphql/.vscode/launch.json +35 -0
  14. package/lib/graphql/.vscode/settings.json +6 -0
  15. package/lib/graphql/Dockerfile +24 -0
  16. package/lib/graphql/Makefile +6 -0
  17. package/lib/graphql/docker-compose.yml +50 -0
  18. package/lib/graphql/ecosystem.config.js +59 -0
  19. package/lib/graphql/jest.config.js +12 -0
  20. package/lib/graphql/nginx.conf +40 -0
  21. package/lib/graphql/nodemon.json +12 -0
  22. package/lib/graphql/package.json +79 -0
  23. package/lib/graphql/src/app.ts +105 -0
  24. package/lib/graphql/src/configs/development.json +19 -0
  25. package/lib/graphql/src/configs/production.json +19 -0
  26. package/lib/graphql/src/configs/test.json +19 -0
  27. package/lib/graphql/src/databases/index.ts +24 -0
  28. package/lib/graphql/src/dtos/users.dto.ts +14 -0
  29. package/lib/graphql/src/entities/users.entity.ts +26 -0
  30. package/lib/graphql/src/exceptions/HttpException.ts +10 -0
  31. package/lib/graphql/src/http/auth.http +49 -0
  32. package/lib/graphql/src/http/users.http +78 -0
  33. package/lib/graphql/src/index.ts +1 -0
  34. package/lib/graphql/src/interfaces/auth.interface.ts +14 -0
  35. package/lib/graphql/src/interfaces/db.interface.ts +7 -0
  36. package/lib/graphql/src/interfaces/users.interface.ts +5 -0
  37. package/lib/graphql/src/middlewares/auth.middleware.ts +32 -0
  38. package/lib/graphql/src/middlewares/error.middleware.ts +17 -0
  39. package/lib/graphql/src/repositories/auth.repository.ts +61 -0
  40. package/lib/graphql/src/repositories/users.repository.ts +60 -0
  41. package/lib/graphql/src/resolvers/auth.resolver.ts +32 -0
  42. package/lib/graphql/src/resolvers/users.resolver.ts +47 -0
  43. package/lib/graphql/src/server.ts +14 -0
  44. package/lib/graphql/src/tests/auth.test.ts +52 -0
  45. package/lib/graphql/src/tests/index.test.ts +18 -0
  46. package/lib/graphql/src/tests/users.test.ts +71 -0
  47. package/lib/graphql/src/typedefs/users.type.ts +13 -0
  48. package/lib/graphql/src/utils/logger.ts +75 -0
  49. package/lib/graphql/src/utils/util.ts +19 -0
  50. package/lib/graphql/src/utils/validateEnv.ts +10 -0
  51. package/lib/graphql/tsconfig.json +39 -0
  52. package/lib/knex/package.json +2 -2
  53. package/lib/knex/src/controllers/users.controller.ts +2 -2
  54. package/lib/mongoose/package.json +2 -2
  55. package/lib/prisma/package.json +2 -2
  56. package/lib/routing-controllers/package.json +2 -2
  57. package/lib/sequelize/package.json +2 -2
  58. package/lib/typegoose/.dockerignore +18 -0
  59. package/lib/typegoose/.editorconfig +9 -0
  60. package/lib/typegoose/.env.development.local +18 -0
  61. package/lib/typegoose/.env.production.local +18 -0
  62. package/lib/typegoose/.env.test.local +18 -0
  63. package/lib/typegoose/.eslintignore +1 -0
  64. package/lib/typegoose/.eslintrc +18 -0
  65. package/lib/typegoose/.huskyrc +5 -0
  66. package/lib/typegoose/.lintstagedrc.json +5 -0
  67. package/lib/typegoose/.prettierrc +8 -0
  68. package/lib/typegoose/.swcrc +40 -0
  69. package/lib/typegoose/.vscode/launch.json +35 -0
  70. package/lib/typegoose/.vscode/settings.json +6 -0
  71. package/lib/typegoose/Dockerfile +24 -0
  72. package/lib/typegoose/Makefile +6 -0
  73. package/lib/typegoose/docker-compose.yml +46 -0
  74. package/lib/typegoose/ecosystem.config.js +57 -0
  75. package/lib/typegoose/jest.config.js +12 -0
  76. package/lib/typegoose/nginx.conf +40 -0
  77. package/lib/typegoose/nodemon.json +12 -0
  78. package/lib/typegoose/package.json +80 -0
  79. package/lib/typegoose/src/app.ts +93 -0
  80. package/lib/typegoose/src/config/index.ts +5 -0
  81. package/lib/typegoose/src/controllers/auth.controller.ts +46 -0
  82. package/lib/typegoose/src/controllers/index.controller.ts +13 -0
  83. package/lib/typegoose/src/controllers/users.controller.ts +65 -0
  84. package/lib/typegoose/src/databases/index.ts +3 -0
  85. package/lib/typegoose/src/dtos/users.dto.ts +9 -0
  86. package/lib/typegoose/src/exceptions/HttpException.ts +10 -0
  87. package/lib/typegoose/src/http/auth.http +32 -0
  88. package/lib/typegoose/src/http/users.http +34 -0
  89. package/lib/typegoose/src/interfaces/auth.interface.ts +15 -0
  90. package/lib/typegoose/src/interfaces/routes.interface.ts +6 -0
  91. package/lib/typegoose/src/interfaces/users.interface.ts +5 -0
  92. package/lib/typegoose/src/middlewares/auth.middleware.ts +32 -0
  93. package/lib/typegoose/src/middlewares/error.middleware.ts +17 -0
  94. package/lib/typegoose/src/middlewares/validation.middleware.ts +25 -0
  95. package/lib/typegoose/src/models/users.model.ts +18 -0
  96. package/lib/typegoose/src/routes/auth.route.ts +24 -0
  97. package/lib/typegoose/src/routes/index.route.ts +19 -0
  98. package/lib/typegoose/src/routes/users.route.ts +25 -0
  99. package/lib/typegoose/src/server.ts +11 -0
  100. package/lib/typegoose/src/services/auth.service.ts +61 -0
  101. package/lib/typegoose/src/services/users.service.ts +64 -0
  102. package/lib/typegoose/src/tests/auth.test.ts +83 -0
  103. package/lib/typegoose/src/tests/index.test.ts +18 -0
  104. package/lib/typegoose/src/tests/users.test.ts +133 -0
  105. package/lib/typegoose/src/utils/logger.ts +65 -0
  106. package/lib/typegoose/src/utils/util.ts +19 -0
  107. package/lib/typegoose/src/utils/validateEnv.ts +10 -0
  108. package/lib/typegoose/swagger.yaml +122 -0
  109. package/lib/typegoose/tsconfig.json +40 -0
  110. package/lib/typeorm/package.json +2 -2
  111. package/package.json +4 -1
package/README.kr.md CHANGED
@@ -46,7 +46,7 @@
46
46
  - [🇺🇸 영어](https://github.com/ljlm0402/typescript-express-starter/blob/master/README.md)
47
47
  - [🇰🇷 한국어](https://github.com/ljlm0402/typescript-express-starter/blob/master/README.kr.md)
48
48
 
49
- > 번역을 도와주실 분은 이슈 남겨주시기 바랍니다. 💜
49
+ > 번역을 도와주실 분은 [이슈](https://github.com/ljlm0402/typescript-express-starter/issues/new?assignees=ljlm0402&labels=%F0%9F%92%B1+Translations&template=translations-language---.md&title=) 남겨주시기 바랍니다. 💜
50
50
 
51
51
  <br />
52
52
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  - [💁🏻‍♂️ Dylan Iqbal :: A TypeScript Express Starter App](https://bit.ly/3rrZFZ9)
56
56
 
57
- > 웹 사이트 및 블로그에 소개를 원하시는 분은 이슈 남겨주시기 바랍니다. 💙
57
+ > 웹 사이트 및 블로그에 소개를 원하시는 분은 [이슈](https://github.com/ljlm0402/typescript-express-starter/issues/new?assignees=ljlm0402&labels=%F0%9F%91%80+Introducetion&template=introducetion-project---.md&title=) 남겨주시기 바랍니다. 💙
58
58
 
59
59
  <br />
60
60
 
@@ -100,18 +100,19 @@ $ npx typescript-express-starter "project name"
100
100
  | :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
101
101
  | Default | Express 기본 |
102
102
  | Routing Controllers | 데코레이터 사용량이 많은 구조화되고 선언적이며 아름답게 구성된 클래스 기반 컨트롤러 생성 |
103
- | Sequlize | Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server를 지원하는 Promise 패턴 기반의 Node.js ORM |
103
+ | Sequelize | PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Server를 지원하는 Promise 패턴 기반의 Node.js ORM |
104
104
  | Mongoose | Node.js와 MongoDB를 위한 ODM(Object Data Mapping) 라이브러리 |
105
105
  | TypeORM | 자바스크립트, 타입스크립트과 함께 사용되어 Node.js, React Native, Expo에서 실행될 수 있는 ORM |
106
106
  | Prisma | 데이터베이스에 데이터를 프로그래밍 언어의 객체와 매핑하여 기존에 SQL로 작성하던 데이터를 수정, 테이블 구조 변경등의 작업을 객체를 통해 프로그래밍적으로 할 수 있도록 해주는 ORM |
107
107
  | Knex | 쿼리 빌더를 위한 라이브러리 |
108
- | GraphQL (개발중) | API 용 쿼리 언어이며 기존 데이터로 이러한 쿼리를 수행하기위한 런타임 |
108
+ | GraphQL | API 용 쿼리 언어이며 기존 데이터로 이러한 쿼리를 수행하기위한 런타임 |
109
+ | Typegoose | 타입스크립트 클래스를 사용하여 몽구스 모델 정의 |
109
110
 
110
111
  ## 🛎 Script 명령어
111
112
 
112
113
  - 프로덕션 모드 실행 : `npm run start` 아니면 `Start typescript-express-starter` VS Code 로
113
114
  - 개발 모드 실행 : `npm run dev` 아니면 `Dev typescript-express-starter` VS Code 로
114
- - 단위 테스트 : `npm run test` 아니면 `Test typescript-express-starter` VS Code 로
115
+ - 단위 테스트 : `npm test` 아니면 `Test typescript-express-starter` VS Code 로
115
116
  - 코드 포맷터 검사 : `npm run lint` 아니면 `Lint typescript-express-starter` VS Code 로
116
117
  - 코드 포맷터 적용 : `npm run lint:fix` 아니면 `Lint:Fix typescript-express-starter` VS Code 로
117
118
 
@@ -132,6 +133,7 @@ $ npx typescript-express-starter "project name"
132
133
  ![](https://img.shields.io/badge/-ESLint-4B32C3?style=for-the-badge&logo=ESLint&logoColor=fff)
133
134
  ![](https://img.shields.io/badge/-Prettier-F7B93E?style=for-the-badge&logo=Prettier&logoColor=000)
134
135
  ![](https://img.shields.io/badge/-Jest-C21325?style=for-the-badge&logo=Jest&logoColor=fff)
136
+ ![](https://img.shields.io/badge/-SWC-FFFFFF?style=for-the-badge&logo=swc&logoColor=FBE1A6)
135
137
 
136
138
  - Utilities
137
139
 
@@ -145,24 +147,24 @@ $ npx typescript-express-starter "project name"
145
147
 
146
148
  > [Simple Icons](https://simpleicons.org/)
147
149
 
148
- ### 🐳 도커 :: 컨테이너 플랫폼
150
+ ### 🐳 Docker :: 컨테이너 플랫폼
149
151
 
150
- [도커](https://docs.docker.com/)란, 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
152
+ [Docker](https://docs.docker.com/)란, 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
151
153
 
152
- [도커 설치 홈페이지](https://docs.docker.com/get-docker/)에 접속해서 설치를 해줍니다.
154
+ [설치 홈페이지](https://docs.docker.com/get-docker/)에 접속해서 설치를 해줍니다.
153
155
 
154
156
  - 백그라운드에서 컨테이너를 시작하고 실행 : `docker-compose up -d`
155
157
  - 컨테이너를 중지하고 컨테이너, 네트워크, 볼륨 및 이미지를 제거 : `docker-compose down`
156
158
 
157
159
  수정을 원하시면 `docker-compose.yml`과 `Dockerfile`를 수정해주시면 됩니다.
158
160
 
159
- ### ♻️ 엔진엑스 :: 웹 서버
161
+ ### ♻️ Nginx :: 웹 서버
160
162
 
161
- [엔진엑스](https://www.nginx.com/) 역방향 프록시,로드 밸런서, 메일 프록시 및 HTTP 캐시로도 사용할 수있는 웹 서버입니다.
163
+ [Nginx](https://www.nginx.com/) 역방향 프록시,로드 밸런서, 메일 프록시 및 HTTP 캐시로도 사용할 수있는 웹 서버입니다.
162
164
 
163
165
  프록시는 일반적으로 여러 서버에로드를 분산하거나, 다른 웹 사이트의 콘텐츠를 원활하게 표시하거나, HTTP 이외의 프로토콜을 통해 처리 요청을 애플리케이션 서버에 전달하는 데 사용됩니다.
164
166
 
165
- 엔진엑스가 요청을 프록시하면 지정된 프록시 서버로 요청을 보내고 응답을 가져 와서 클라이언트로 다시 보냅니다.
167
+ Nginx 요청을 프록시하면 지정된 프록시 서버로 요청을 보내고 응답을 가져 와서 클라이언트로 다시 보냅니다.
166
168
 
167
169
  수정을 원하시면 `nginx.conf` 파일을 수정해주시면 됩니다.
168
170
 
@@ -188,13 +190,13 @@ $ npx typescript-express-starter "project name"
188
190
 
189
191
  > 2019년, TSLint 지원이 종료 되어 ESLint를 적용하였습니다.
190
192
 
191
- ### 📗 스웨거 :: API 문서화
193
+ ### 📗 Swagger :: API 문서화
192
194
 
193
- [스웨거](https://swagger.io/)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다.
195
+ [Swagger](https://swagger.io/)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다.
194
196
 
195
197
  API를 대규모로 설계하고 문서화하는 데 용이하게 사용합니다.
196
198
 
197
- 스웨거 URL은 `http://localhost:3000/api-docs` 으로 작성했습니다.
199
+ Swagger URL은 `http://localhost:3000/api-docs` 으로 작성했습니다.
198
200
 
199
201
  수정을 원하시면 `swagger.yaml` 파일을 수정해주시면 됩니다.
200
202
 
@@ -221,8 +223,8 @@ VSCode Extension에서 [REST Client](https://marketplace.visualstudio.com/items?
221
223
 
222
224
  `SWC는 단일 스레드에서 Babel보다 20배, 4개 코어에서 70배 빠릅니다.`
223
225
 
224
- - swc 빌드 :: `npm run build`
225
- - tsc 빌드 :: `npm run build:tsc`
226
+ - tsc 빌드 :: `npm run build`
227
+ - swc 빌드 :: `npm run build:swc`
226
228
 
227
229
  수정을 원하시면 `.swcrc` 파일을 수정해주시면 됩니다.
228
230
 
@@ -364,6 +366,12 @@ VSCode Extension에서 [REST Client](https://marketplace.visualstudio.com/items?
364
366
 
365
367
  - oricc [https://github.com/oricc](https://github.com/oricc)
366
368
 
369
+ - Dustin Newbold [https://github.com/dustinnewbold](https://github.com/dustinnewbold)
370
+
371
+ - WhatIfWeDigDeeper [https://github.com/WhatIfWeDigDeeper](https://github.com/WhatIfWeDigDeeper)
372
+
373
+ - David Stewart [https://github.com/davidjmstewart](https://github.com/davidjmstewart)
374
+
367
375
  ## 💳 라이센스
368
376
 
369
377
  [MIT](LICENSE)
package/README.md CHANGED
@@ -46,7 +46,7 @@
46
46
  - [🇺🇸 English](https://github.com/ljlm0402/typescript-express-starter/blob/master/README.md)
47
47
  - [🇰🇷 Korean](https://github.com/ljlm0402/typescript-express-starter/blob/master/README.kr.md)
48
48
 
49
- > Want to translate to your own language? please open an issue 💜
49
+ > Want to translate to your own language? please open an [issue](https://github.com/ljlm0402/typescript-express-starter/issues/new?assignees=ljlm0402&labels=%F0%9F%92%B1+Translations&template=translations-language---.md&title=) 💜
50
50
 
51
51
  <br />
52
52
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  - [💁🏻‍♂️ Dylan Iqbal :: A TypeScript Express Starter App](https://bit.ly/3rrZFZ9)
56
56
 
57
- > Want to be featured on your blog or site? please open an issue 💙
57
+ > Want to be featured on your blog or site? please open an [issue](https://github.com/ljlm0402/typescript-express-starter/issues/new?assignees=ljlm0402&labels=%F0%9F%91%80+Introducetion&template=introducetion-project---.md&title=) 💙
58
58
 
59
59
  <br />
60
60
 
@@ -100,22 +100,23 @@ Start your typescript-express-starter app in development mode at `http://localho
100
100
 
101
101
  #### Template Type
102
102
 
103
- | Name | Desc |
104
- | :------------------- | :----------------------------------------------------------------------------------------------------------- |
105
- | Default | Express Default |
106
- | Routing Controllers | Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage |
107
- | Sequelize | Easy to use multi SQL dialect ORM for Node.js |
108
- | Mongoose | MongoDB Object Modeling(ODM) designed to work in an asynchronous environment |
109
- | TypeORM | An ORM that can run in Node.js and Others |
110
- | Prisma | Modern Database Access for TypeScript & Node.js |
111
- | Knex | SQL query builder for Postgres, MySQL, MariaDB, SQLite3 and Oracle |
112
- | GraphQL (Developing) | query language for APIs and a runtime for fulfilling those queries with your existing data |
103
+ | Name | Description |
104
+ | :------------------ | :----------------------------------------------------------------------------------------------------------- |
105
+ | Default | Express Default |
106
+ | Routing Controllers | Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage |
107
+ | Sequelize | Easy to use multi SQL dialect ORM for Node.js |
108
+ | Mongoose | MongoDB Object Modeling(ODM) designed to work in an asynchronous environment |
109
+ | TypeORM | An ORM that can run in Node.js and Others |
110
+ | Prisma | Modern Database Access for TypeScript & Node.js |
111
+ | Knex | SQL query builder for Postgres, MySQL, MariaDB, SQLite3 and Oracle |
112
+ | GraphQL | query language for APIs and a runtime for fulfilling those queries with your existing data |
113
+ | Typegoose | Define Mongoose models using TypeScript classes |
113
114
 
114
115
  ## 🛎 Available Commands for the Server
115
116
 
116
117
  - Run the Server in production mode : `npm run start` or `Start typescript-express-starter` in VS Code
117
118
  - Run the Server in development mode : `npm run dev` or `Dev typescript-express-starter` in VS Code
118
- - Run all unit-tests : `npm run test` or `Test typescript-express-starter` in VS Code
119
+ - Run all unit-tests : `npm test` or `Test typescript-express-starter` in VS Code
119
120
  - Check for linting errors : `npm run lint` or `Lint typescript-express-starter` in VS Code
120
121
  - Fix for linting : `npm run lint:fix` or `Lint:Fix typescript-express-starter` in VS Code
121
122
 
@@ -136,6 +137,7 @@ Start your typescript-express-starter app in development mode at `http://localho
136
137
  ![](https://img.shields.io/badge/-ESLint-4B32C3?style=for-the-badge&logo=ESLint&logoColor=fff)
137
138
  ![](https://img.shields.io/badge/-Prettier-F7B93E?style=for-the-badge&logo=Prettier&logoColor=000)
138
139
  ![](https://img.shields.io/badge/-Jest-C21325?style=for-the-badge&logo=Jest&logoColor=fff)
140
+ ![](https://img.shields.io/badge/-SWC-FFFFFF?style=for-the-badge&logo=swc&logoColor=FBE1A6)
139
141
 
140
142
  - Utilities
141
143
 
@@ -226,8 +228,8 @@ Modify `ecosystem.config.js` file to your source code.
226
228
 
227
229
  `SWC is 20x faster than Babel on a single thread and 70x faster on four cores.`
228
230
 
229
- - swc build :: `npm run build`
230
- - tsc build :: `npm run build:tsc`
231
+ - tsc build :: `npm run build`
232
+ - swc build :: `npm run build:swc`
231
233
 
232
234
  Modify `.swcrc` file to your source code.
233
235
 
@@ -369,6 +371,12 @@ Modify `.swcrc` file to your source code.
369
371
 
370
372
  - oricc [https://github.com/oricc](https://github.com/oricc)
371
373
 
374
+ - Dustin Newbold [https://github.com/dustinnewbold](https://github.com/dustinnewbold)
375
+
376
+ - WhatIfWeDigDeeper [https://github.com/WhatIfWeDigDeeper](https://github.com/WhatIfWeDigDeeper)
377
+
378
+ - David Stewart [https://github.com/davidjmstewart](https://github.com/davidjmstewart)
379
+
372
380
  ## 💳 License
373
381
 
374
382
  [MIT](LICENSE)
@@ -7,8 +7,8 @@
7
7
  "scripts": {
8
8
  "start": "npm run build && cross-env NODE_ENV=production node dist/server.js",
9
9
  "dev": "cross-env NODE_ENV=development nodemon",
10
- "build": "swc src -d dist --source-maps --copy-files",
11
- "build:tsc": "tsc && tsc-alias",
10
+ "build": "tsc && tsc-alias",
11
+ "build:swc": "swc src -d dist --source-maps --copy-files",
12
12
  "test": "jest --forceExit --detectOpenHandles",
13
13
  "lint": "eslint --ignore-path .gitignore --ext .ts src/",
14
14
  "lint:fix": "npm run lint -- --fix",
@@ -0,0 +1,18 @@
1
+ # compiled output
2
+ .vscode
3
+ /node_modules
4
+
5
+ # code formatter
6
+ .eslintrc
7
+ .eslintignore
8
+ .editorconfig
9
+ .huskyrc
10
+ .lintstagedrc.json
11
+ .prettierrc
12
+
13
+ # test
14
+ jest.config.js
15
+
16
+ # docker
17
+ Dockerfile
18
+ docker-compose.yml
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
@@ -0,0 +1 @@
1
+ PORT=3000
@@ -0,0 +1 @@
1
+ /dist
@@ -0,0 +1,18 @@
1
+ {
2
+ "parser": "@typescript-eslint/parser",
3
+ "extends": ["prettier", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
4
+ "parserOptions": {
5
+ "ecmaVersion": 2018,
6
+ "sourceType": "module"
7
+ },
8
+ "rules": {
9
+ "@typescript-eslint/explicit-member-accessibility": 0,
10
+ "@typescript-eslint/explicit-function-return-type": 0,
11
+ "@typescript-eslint/no-parameter-properties": 0,
12
+ "@typescript-eslint/interface-name-prefix": 0,
13
+ "@typescript-eslint/explicit-module-boundary-types": 0,
14
+ "@typescript-eslint/no-explicit-any": "off",
15
+ "@typescript-eslint/ban-types": "off",
16
+ "@typescript-eslint/no-var-requires": "off"
17
+ }
18
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "hooks": {
3
+ "pre-commit": "lint-staged"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "*.ts": [
3
+ "npm run lint"
4
+ ]
5
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "printWidth": 150,
3
+ "tabWidth": 2,
4
+ "singleQuote": true,
5
+ "trailingComma": "all",
6
+ "semi": true,
7
+ "arrowParens": "avoid"
8
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "jsc": {
3
+ "parser": {
4
+ "syntax": "typescript",
5
+ "tsx": false,
6
+ "dynamicImport": true,
7
+ "decorators": true
8
+ },
9
+ "transform": {
10
+ "legacyDecorator": true,
11
+ "decoratorMetadata": true
12
+ },
13
+ "target": "es2017",
14
+ "externalHelpers": false,
15
+ "keepClassNames": true,
16
+ "loose": false,
17
+ "minify": {
18
+ "compress": false,
19
+ "mangle": false
20
+ },
21
+ "baseUrl": "src",
22
+ "paths": {
23
+ "@/*": ["*"],
24
+ "@databases": ["databases"],
25
+ "@dtos/*": ["dtos/*"],
26
+ "@entities/*": ["entities/*"],
27
+ "@exceptions/*": ["exceptions/*"],
28
+ "@interfaces/*": ["interfaces/*"],
29
+ "@middlewares/*": ["middlewares/*"],
30
+ "@repositories/*": ["repositories/*"],
31
+ "@resolvers/*": ["resolvers/*"],
32
+ "@typedefs/*": ["typedefs/*"],
33
+ "@utils/*": ["utils/*"]
34
+ }
35
+ },
36
+ "module": {
37
+ "type": "commonjs"
38
+ }
39
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "type": "node-terminal",
6
+ "request": "launch",
7
+ "name": "Dev typescript-express-starter",
8
+ "command": "npm run dev"
9
+ },
10
+ {
11
+ "type": "node-terminal",
12
+ "request": "launch",
13
+ "name": "Start typescript-express-starter",
14
+ "command": "npm run start"
15
+ },
16
+ {
17
+ "type": "node-terminal",
18
+ "request": "launch",
19
+ "name": "Test typescript-express-starter",
20
+ "command": "npm run test"
21
+ },
22
+ {
23
+ "type": "node-terminal",
24
+ "request": "launch",
25
+ "name": "Lint typescript-express-starter",
26
+ "command": "npm run lint"
27
+ },
28
+ {
29
+ "type": "node-terminal",
30
+ "request": "launch",
31
+ "name": "Lint:Fix typescript-express-starter",
32
+ "command": "npm run lint:fix"
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "editor.codeActionsOnSave": {
3
+ "source.fixAll.eslint": true
4
+ },
5
+ "editor.formatOnSave": false
6
+ }
@@ -0,0 +1,24 @@
1
+ # Common build stage
2
+ FROM node:14.14.0-alpine3.12 as common-build-stage
3
+
4
+ COPY . ./app
5
+
6
+ WORKDIR /app
7
+
8
+ RUN npm install
9
+
10
+ EXPOSE 3000
11
+
12
+ # Development build stage
13
+ FROM common-build-stage as development-build-stage
14
+
15
+ ENV NODE_ENV development
16
+
17
+ CMD ["npm", "run", "dev"]
18
+
19
+ # Production build stage
20
+ FROM common-build-stage as production-build-stage
21
+
22
+ ENV NODE_ENV production
23
+
24
+ CMD ["npm", "run", "start"]
@@ -0,0 +1,6 @@
1
+ build:
2
+ docker build -t ${tag} .
3
+ clean:
4
+ docker rmi -f ${tag}
5
+ run:
6
+ docker run -d -p ${port}:${port} --name ${name} ${tag}
@@ -0,0 +1,50 @@
1
+ version: '3.7'
2
+
3
+ services:
4
+ proxy:
5
+ image: nginx:alpine
6
+ container_name: proxy
7
+ ports:
8
+ - '80:80'
9
+ volumes:
10
+ - ./nginx.conf:/etc/nginx/nginx.conf
11
+ restart: 'unless-stopped'
12
+ networks:
13
+ - backend
14
+ server:
15
+ build:
16
+ context: ./
17
+ target: development-build-stage
18
+ dockerfile: Dockerfile
19
+ container_name: server
20
+ ports:
21
+ - '3000:3000'
22
+ volumes:
23
+ - ./:/app
24
+ - /app/node_modules
25
+ restart: 'unless-stopped'
26
+ networks:
27
+ - backend
28
+ links:
29
+ - pg
30
+ depends_on:
31
+ - pg
32
+ pg:
33
+ image: bitnami/postgresql:11-debian-9
34
+ container_name: pg
35
+ environment:
36
+ POSTGRESQL_USERNAME: root
37
+ POSTGRESQL_PASSWORD: password
38
+ POSTGRESQL_DATABASE: test
39
+ ports:
40
+ - '5432:5432'
41
+ networks:
42
+ - backend
43
+
44
+ networks:
45
+ backend:
46
+ driver: bridge
47
+
48
+ volumes:
49
+ data:
50
+ driver: local
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @description pm2 configuration file.
3
+ * @example
4
+ * production mode :: pm2 start ecosystem.config.js --only prod
5
+ * development mode :: pm2 start ecosystem.config.js --only dev
6
+ */
7
+ module.exports = {
8
+ apps: [
9
+ {
10
+ name: 'prod', // pm2 start App name
11
+ script: 'dist/server.js',
12
+ exec_mode: 'cluster', // 'cluster' or 'fork'
13
+ instance_var: 'INSTANCE_ID', // instance variable
14
+ instances: 2, // pm2 instance count
15
+ autorestart: true, // auto restart if process crash
16
+ watch: false, // files change automatic restart
17
+ ignore_watch: ['node_modules', 'logs'], // ignore files change
18
+ max_memory_restart: '1G', // restart if process use more than 1G memory
19
+ merge_logs: true, // if true, stdout and stderr will be merged and sent to pm2 log
20
+ output: './logs/access.log', // pm2 log file
21
+ error: './logs/error.log', // pm2 error log file
22
+ env: {
23
+ // environment variable
24
+ PORT: 3000,
25
+ NODE_ENV: 'production',
26
+ },
27
+ },
28
+ {
29
+ name: 'dev', // pm2 start App name
30
+ script: 'ts-node', // ts-node
31
+ args: '-r tsconfig-paths/register --transpile-only src/server.ts', // ts-node args
32
+ exec_mode: 'cluster', // 'cluster' or 'fork'
33
+ instance_var: 'INSTANCE_ID', // instance variable
34
+ instances: 2, // pm2 instance count
35
+ autorestart: true, // auto restart if process crash
36
+ watch: false, // files change automatic restart
37
+ ignore_watch: ['node_modules', 'logs'], // ignore files change
38
+ max_memory_restart: '1G', // restart if process use more than 1G memory
39
+ merge_logs: true, // if true, stdout and stderr will be merged and sent to pm2 log
40
+ output: './logs/access.log', // pm2 log file
41
+ error: './logs/error.log', // pm2 error log file
42
+ env: {
43
+ // environment variable
44
+ PORT: 3000,
45
+ NODE_ENV: 'development',
46
+ },
47
+ },
48
+ ],
49
+ deploy: {
50
+ production: {
51
+ user: 'user',
52
+ host: '0.0.0.0',
53
+ ref: 'origin/master',
54
+ repo: 'git@github.com:repo.git',
55
+ path: 'dist/server.js',
56
+ 'post-deploy': 'npm install && npm run build && pm2 reload ecosystem.config.js --only prod',
57
+ },
58
+ },
59
+ };
@@ -0,0 +1,12 @@
1
+ const { pathsToModuleNameMapper } = require('ts-jest/utils');
2
+ const { compilerOptions } = require('./tsconfig.json');
3
+
4
+ module.exports = {
5
+ preset: 'ts-jest',
6
+ testEnvironment: 'node',
7
+ roots: ['<rootDir>/src'],
8
+ transform: {
9
+ '^.+\\.tsx?$': 'ts-jest',
10
+ },
11
+ moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/src' }),
12
+ };
@@ -0,0 +1,40 @@
1
+ user nginx;
2
+ worker_processes 1;
3
+
4
+ error_log /var/log/nginx/error.log warn;
5
+ pid /var/run/nginx.pid;
6
+
7
+ events {
8
+ worker_connections 1024;
9
+ }
10
+
11
+ http {
12
+ include /etc/nginx/mime.types;
13
+ default_type application/octet-stream;
14
+
15
+ upstream api-server {
16
+ server server:3000;
17
+ keepalive 100;
18
+ }
19
+
20
+ server {
21
+ listen 80;
22
+ server_name localhost;
23
+
24
+ location / {
25
+ proxy_http_version 1.1;
26
+ proxy_pass http://api-server;
27
+ }
28
+
29
+ }
30
+
31
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
32
+ '$status $body_bytes_sent "$http_referer" '
33
+ '"$http_user_agent" "$http_x_forwarded_for"';
34
+
35
+ access_log /var/log/nginx/access.log main;
36
+
37
+ sendfile on;
38
+ keepalive_timeout 65;
39
+ include /etc/nginx/conf.d/*.conf;
40
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "watch": [
3
+ "src",
4
+ ".env"
5
+ ],
6
+ "ext": "js,ts,json",
7
+ "ignore": [
8
+ "src/logs/*",
9
+ "src/**/*.{spec,test}.ts"
10
+ ],
11
+ "exec": "ts-node -r tsconfig-paths/register --transpile-only src/server.ts"
12
+ }