typescript-express-starter 8.0.1 → 8.1.3

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 (152) hide show
  1. package/README.kr.md +5 -0
  2. package/README.md +20 -15
  3. package/lib/default/.env.development.local +13 -0
  4. package/lib/default/.env.production.local +13 -0
  5. package/lib/default/.env.test.local +13 -0
  6. package/lib/default/.swcrc +1 -0
  7. package/lib/default/package.json +0 -2
  8. package/lib/default/src/app.ts +6 -7
  9. package/lib/default/src/config/index.ts +5 -0
  10. package/lib/default/src/middlewares/auth.middleware.ts +2 -2
  11. package/lib/default/src/server.ts +0 -2
  12. package/lib/default/src/services/auth.service.ts +2 -2
  13. package/lib/default/src/utils/logger.ts +2 -2
  14. package/lib/default/tsconfig.json +1 -0
  15. package/lib/graphql/.env.development.local +20 -0
  16. package/lib/graphql/.env.production.local +20 -0
  17. package/lib/graphql/.env.test.local +20 -0
  18. package/lib/graphql/.swcrc +1 -0
  19. package/lib/graphql/package.json +0 -2
  20. package/lib/graphql/src/app.ts +7 -8
  21. package/lib/graphql/src/config/index.ts +5 -0
  22. package/lib/graphql/src/databases/index.ts +6 -8
  23. package/lib/graphql/src/middlewares/auth.middleware.ts +2 -2
  24. package/lib/graphql/src/repositories/auth.repository.ts +2 -2
  25. package/lib/graphql/src/server.ts +0 -3
  26. package/lib/graphql/src/utils/logger.ts +2 -2
  27. package/lib/graphql/tsconfig.json +1 -0
  28. package/lib/knex/.env.development.local +20 -0
  29. package/lib/knex/.env.production.local +20 -0
  30. package/lib/knex/.env.test.local +20 -0
  31. package/lib/knex/.swcrc +1 -0
  32. package/lib/knex/knexfile.ts +6 -10
  33. package/lib/knex/package.json +0 -2
  34. package/lib/knex/src/app.ts +6 -7
  35. package/lib/knex/src/config/index.ts +5 -0
  36. package/lib/knex/src/controllers/users.controller.ts +2 -2
  37. package/lib/knex/src/databases/index.ts +6 -8
  38. package/lib/knex/src/middlewares/auth.middleware.ts +2 -2
  39. package/lib/knex/src/server.ts +0 -2
  40. package/lib/knex/src/services/auth.service.ts +2 -2
  41. package/lib/knex/src/utils/logger.ts +2 -2
  42. package/lib/knex/tsconfig.json +1 -0
  43. package/lib/mongoose/.env.development.local +18 -0
  44. package/lib/mongoose/.env.production.local +18 -0
  45. package/lib/mongoose/.env.test.local +18 -0
  46. package/lib/mongoose/.swcrc +1 -0
  47. package/lib/mongoose/package.json +0 -2
  48. package/lib/mongoose/src/app.ts +6 -7
  49. package/lib/mongoose/src/config/index.ts +5 -0
  50. package/lib/mongoose/src/databases/index.ts +2 -5
  51. package/lib/mongoose/src/middlewares/auth.middleware.ts +2 -2
  52. package/lib/mongoose/src/server.ts +0 -2
  53. package/lib/mongoose/src/services/auth.service.ts +2 -2
  54. package/lib/mongoose/src/utils/logger.ts +2 -2
  55. package/lib/mongoose/tsconfig.json +1 -0
  56. package/lib/prisma/.env.development.local +16 -0
  57. package/lib/prisma/.env.production.local +16 -0
  58. package/lib/prisma/.env.test.local +16 -0
  59. package/lib/prisma/.swcrc +1 -0
  60. package/lib/prisma/package.json +0 -2
  61. package/lib/prisma/src/app.ts +6 -7
  62. package/lib/prisma/src/config/index.ts +5 -0
  63. package/lib/prisma/src/middlewares/auth.middleware.ts +2 -2
  64. package/lib/prisma/src/server.ts +0 -2
  65. package/lib/prisma/src/services/auth.service.ts +2 -2
  66. package/lib/prisma/src/utils/logger.ts +2 -2
  67. package/lib/prisma/tsconfig.json +1 -0
  68. package/lib/routing-controllers/.env.development.local +13 -0
  69. package/lib/routing-controllers/.env.production.local +13 -0
  70. package/lib/routing-controllers/.env.test.local +13 -0
  71. package/lib/routing-controllers/.swcrc +1 -0
  72. package/lib/routing-controllers/package.json +0 -2
  73. package/lib/routing-controllers/src/app.ts +7 -8
  74. package/lib/routing-controllers/src/config/index.ts +5 -0
  75. package/lib/routing-controllers/src/middlewares/auth.middleware.ts +2 -2
  76. package/lib/routing-controllers/src/server.ts +0 -2
  77. package/lib/routing-controllers/src/services/auth.service.ts +2 -2
  78. package/lib/routing-controllers/src/utils/logger.ts +2 -2
  79. package/lib/routing-controllers/tsconfig.json +1 -0
  80. package/lib/sequelize/.env.development.local +20 -0
  81. package/lib/sequelize/.env.production.local +20 -0
  82. package/lib/sequelize/.env.test.local +20 -0
  83. package/lib/sequelize/.swcrc +1 -0
  84. package/lib/sequelize/package.json +0 -2
  85. package/lib/sequelize/src/app.ts +6 -7
  86. package/lib/sequelize/src/config/index.ts +5 -0
  87. package/lib/sequelize/src/databases/index.ts +7 -8
  88. package/lib/sequelize/src/middlewares/auth.middleware.ts +2 -2
  89. package/lib/sequelize/src/server.ts +0 -2
  90. package/lib/sequelize/src/services/auth.service.ts +2 -2
  91. package/lib/sequelize/src/utils/logger.ts +2 -2
  92. package/lib/sequelize/tsconfig.json +1 -0
  93. package/lib/typegoose/package.json +1 -1
  94. package/lib/typeorm/.env.development.local +20 -0
  95. package/lib/typeorm/.env.production.local +20 -0
  96. package/lib/typeorm/.env.test.local +20 -0
  97. package/lib/typeorm/.swcrc +1 -0
  98. package/lib/typeorm/package.json +0 -2
  99. package/lib/typeorm/src/app.ts +6 -7
  100. package/lib/typeorm/src/config/index.ts +5 -0
  101. package/lib/typeorm/src/databases/index.ts +6 -8
  102. package/lib/typeorm/src/middlewares/auth.middleware.ts +2 -2
  103. package/lib/typeorm/src/server.ts +0 -2
  104. package/lib/typeorm/src/services/auth.service.ts +2 -2
  105. package/lib/typeorm/src/utils/logger.ts +2 -2
  106. package/lib/typeorm/tsconfig.json +1 -0
  107. package/package.json +1 -1
  108. package/lib/default/.env +0 -1
  109. package/lib/default/src/configs/development.json +0 -12
  110. package/lib/default/src/configs/production.json +0 -12
  111. package/lib/default/src/configs/test.json +0 -12
  112. package/lib/default/src/index.ts +0 -1
  113. package/lib/graphql/.env +0 -1
  114. package/lib/graphql/src/configs/development.json +0 -19
  115. package/lib/graphql/src/configs/production.json +0 -19
  116. package/lib/graphql/src/configs/test.json +0 -19
  117. package/lib/graphql/src/index.ts +0 -1
  118. package/lib/graphql/src/interfaces/db.interface.ts +0 -7
  119. package/lib/knex/.env +0 -1
  120. package/lib/knex/src/configs/development.json +0 -19
  121. package/lib/knex/src/configs/production.json +0 -19
  122. package/lib/knex/src/configs/test.json +0 -19
  123. package/lib/knex/src/index.ts +0 -1
  124. package/lib/knex/src/interfaces/db.interface.ts +0 -7
  125. package/lib/mongoose/.env +0 -1
  126. package/lib/mongoose/src/configs/development.json +0 -17
  127. package/lib/mongoose/src/configs/production.json +0 -17
  128. package/lib/mongoose/src/configs/test.json +0 -17
  129. package/lib/mongoose/src/index.ts +0 -1
  130. package/lib/mongoose/src/interfaces/db.interface.ts +0 -5
  131. package/lib/prisma/.env +0 -10
  132. package/lib/prisma/src/configs/development.json +0 -12
  133. package/lib/prisma/src/configs/production.json +0 -12
  134. package/lib/prisma/src/configs/test.json +0 -12
  135. package/lib/prisma/src/index.ts +0 -1
  136. package/lib/routing-controllers/.env +0 -1
  137. package/lib/routing-controllers/src/configs/development.json +0 -12
  138. package/lib/routing-controllers/src/configs/production.json +0 -12
  139. package/lib/routing-controllers/src/configs/test.json +0 -12
  140. package/lib/routing-controllers/src/index.ts +0 -1
  141. package/lib/sequelize/.env +0 -1
  142. package/lib/sequelize/src/configs/development.json +0 -22
  143. package/lib/sequelize/src/configs/production.json +0 -22
  144. package/lib/sequelize/src/configs/test.json +0 -22
  145. package/lib/sequelize/src/index.ts +0 -1
  146. package/lib/sequelize/src/interfaces/db.interface.ts +0 -10
  147. package/lib/typeorm/.env +0 -1
  148. package/lib/typeorm/src/configs/development.json +0 -18
  149. package/lib/typeorm/src/configs/production.json +0 -18
  150. package/lib/typeorm/src/configs/test.json +0 -18
  151. package/lib/typeorm/src/index.ts +0 -1
  152. package/lib/typeorm/src/interfaces/db.interface.ts +0 -6
package/README.kr.md CHANGED
@@ -107,6 +107,7 @@ $ npx typescript-express-starter "project name"
107
107
  | Knex | 쿼리 빌더를 위한 라이브러리 |
108
108
  | GraphQL | API 용 쿼리 언어이며 기존 데이터로 이러한 쿼리를 수행하기위한 런타임 |
109
109
  | Typegoose | 타입스크립트 클래스를 사용하여 몽구스 모델 정의 |
110
+ | mikro-orm (개발중) | 데이터 매퍼, 작업 단위 및 아이덴티티 맵 패턴을 기반으로 하는 Node.js용 TypeScript ORM. MongoDB, MySQL, MariaDB, PostgreSQL 및 SQLite 데이터베이스를 지원합니다. |
110
111
 
111
112
  ## 🛎 Script 명령어
112
113
 
@@ -370,6 +371,10 @@ VSCode Extension에서 [REST Client](https://marketplace.visualstudio.com/items?
370
371
 
371
372
  - WhatIfWeDigDeeper [https://github.com/WhatIfWeDigDeeper](https://github.com/WhatIfWeDigDeeper)
372
373
 
374
+ - David Stewart [https://github.com/davidjmstewart](https://github.com/davidjmstewart)
375
+
376
+ - JagTheFriend [JagTheFriend](https://github.com/JagTheFriend)
377
+
373
378
  ## 💳 라이센스
374
379
 
375
380
  [MIT](LICENSE)
package/README.md CHANGED
@@ -100,17 +100,18 @@ Start your typescript-express-starter app in development mode at `http://localho
100
100
 
101
101
  #### Template Type
102
102
 
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 |
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 |
114
+ | mikro-orm (Develop) | TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL and SQLite databases. |
114
115
 
115
116
  ## 🛎 Available Commands for the Server
116
117
 
@@ -243,9 +244,7 @@ Modify `.swcrc` file to your source code.
243
244
 
244
245
  ├── /src
245
246
  │ ├── /configs
246
- │ │ ├── development.json
247
- │ │ ├── production.json
248
- │ │ └── test.json
247
+ │ │ ├── index.ts
249
248
  │ │
250
249
  │ ├── /controllers
251
250
  │ │ ├── auth.controller.ts
@@ -300,7 +299,9 @@ Modify `.swcrc` file to your source code.
300
299
 
301
300
  ├── .dockerignore
302
301
  ├── .editorconfig
303
- ├── .env
302
+ ├── .env.development.local
303
+ ├── .env.production.local
304
+ ├── .env.test.local
304
305
  ├── .eslintignore
305
306
  ├── .eslintrc
306
307
  ├── .gitignore
@@ -375,6 +376,10 @@ Modify `.swcrc` file to your source code.
375
376
 
376
377
  - WhatIfWeDigDeeper [https://github.com/WhatIfWeDigDeeper](https://github.com/WhatIfWeDigDeeper)
377
378
 
379
+ - David Stewart [https://github.com/davidjmstewart](https://github.com/davidjmstewart)
380
+
381
+ - JagTheFriend [JagTheFriend](https://github.com/JagTheFriend)
382
+
378
383
  ## 💳 License
379
384
 
380
385
  [MIT](LICENSE)
@@ -0,0 +1,13 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # TOKEN
5
+ SECRET_KEY = secretKey
6
+
7
+ # LOG
8
+ LOG_FORMAT = dev
9
+ LOG_DIR = ../logs
10
+
11
+ # CORS
12
+ ORIGIN = *
13
+ CREDENTIALS = true
@@ -0,0 +1,13 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # TOKEN
5
+ SECRET_KEY = secretKey
6
+
7
+ # LOG
8
+ LOG_FORMAT = combined
9
+ LOG_DIR = ../logs
10
+
11
+ # CORS
12
+ ORIGIN = your.domain.com
13
+ CREDENTIALS = true
@@ -0,0 +1,13 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # TOKEN
5
+ SECRET_KEY = secretKey
6
+
7
+ # LOG
8
+ LOG_FORMAT = dev
9
+ LOG_DIR = ../logs
10
+
11
+ # CORS
12
+ ORIGIN = *
13
+ CREDENTIALS = true
@@ -21,6 +21,7 @@
21
21
  "baseUrl": "src",
22
22
  "paths": {
23
23
  "@/*": ["*"],
24
+ "@config": ["config"],
24
25
  "@controllers/*": ["controllers/*"],
25
26
  "@dtos/*": ["dtos/*"],
26
27
  "@exceptions/*": ["exceptions/*"],
@@ -20,7 +20,6 @@
20
20
  "class-transformer": "^0.4.0",
21
21
  "class-validator": "^0.13.1",
22
22
  "compression": "^1.7.4",
23
- "config": "^3.3.6",
24
23
  "cookie-parser": "^1.4.5",
25
24
  "cors": "^2.8.5",
26
25
  "dotenv": "^10.0.0",
@@ -40,7 +39,6 @@
40
39
  "@swc/core": "^1.2.108",
41
40
  "@types/bcrypt": "^5.0.0",
42
41
  "@types/compression": "^1.7.1",
43
- "@types/config": "^0.0.39",
44
42
  "@types/cookie-parser": "^1.4.2",
45
43
  "@types/cors": "^2.8.11",
46
44
  "@types/dotenv": "^8.2.0",
@@ -1,27 +1,26 @@
1
- import '@/index';
2
1
  import compression from 'compression';
3
2
  import cookieParser from 'cookie-parser';
4
3
  import cors from 'cors';
5
- import config from 'config';
6
4
  import express from 'express';
7
5
  import helmet from 'helmet';
8
6
  import hpp from 'hpp';
9
7
  import morgan from 'morgan';
10
8
  import swaggerJSDoc from 'swagger-jsdoc';
11
9
  import swaggerUi from 'swagger-ui-express';
10
+ import { NODE_ENV, PORT, LOG_FORMAT, ORIGIN, CREDENTIALS } from '@config';
12
11
  import { Routes } from '@interfaces/routes.interface';
13
12
  import errorMiddleware from '@middlewares/error.middleware';
14
13
  import { logger, stream } from '@utils/logger';
15
14
 
16
15
  class App {
17
16
  public app: express.Application;
18
- public port: string | number;
19
17
  public env: string;
18
+ public port: string | number;
20
19
 
21
20
  constructor(routes: Routes[]) {
22
21
  this.app = express();
23
- this.port = process.env.PORT || 3000;
24
- this.env = process.env.NODE_ENV || 'development';
22
+ this.env = NODE_ENV || 'development';
23
+ this.port = PORT || 3000;
25
24
 
26
25
  this.initializeMiddlewares();
27
26
  this.initializeRoutes(routes);
@@ -43,8 +42,8 @@ class App {
43
42
  }
44
43
 
45
44
  private initializeMiddlewares() {
46
- this.app.use(morgan(config.get('log.format'), { stream }));
47
- this.app.use(cors({ origin: config.get('cors.origin'), credentials: config.get('cors.credentials') }));
45
+ this.app.use(morgan(LOG_FORMAT, { stream }));
46
+ this.app.use(cors({ origin: ORIGIN, credentials: CREDENTIALS }));
48
47
  this.app.use(hpp());
49
48
  this.app.use(helmet());
50
49
  this.app.use(compression());
@@ -0,0 +1,5 @@
1
+ import { config } from 'dotenv';
2
+ config({ path: `.env.${process.env.NODE_ENV || 'development'}.local` });
3
+
4
+ export const CREDENTIALS = process.env.CREDENTIALS === 'true';
5
+ export const { NODE_ENV, PORT, SECRET_KEY, LOG_FORMAT, LOG_DIR, ORIGIN } = process.env;
@@ -1,6 +1,6 @@
1
- import config from 'config';
2
1
  import { NextFunction, Response } from 'express';
3
2
  import { verify } from 'jsonwebtoken';
3
+ import { SECRET_KEY } from '@config';
4
4
  import { HttpException } from '@exceptions/HttpException';
5
5
  import { DataStoredInToken, RequestWithUser } from '@interfaces/auth.interface';
6
6
  import userModel from '@models/users.model';
@@ -10,7 +10,7 @@ const authMiddleware = async (req: RequestWithUser, res: Response, next: NextFun
10
10
  const Authorization = req.cookies['Authorization'] || (req.header('Authorization') ? req.header('Authorization').split('Bearer ')[1] : null);
11
11
 
12
12
  if (Authorization) {
13
- const secretKey: string = config.get('secretKey');
13
+ const secretKey: string = SECRET_KEY;
14
14
  const verificationResponse = (await verify(Authorization, secretKey)) as DataStoredInToken;
15
15
  const userId = verificationResponse.id;
16
16
  const findUser = userModel.find(user => user.id === userId);
@@ -1,5 +1,3 @@
1
- import 'dotenv/config';
2
- import '@/index';
3
1
  import App from '@/app';
4
2
  import AuthRoute from '@routes/auth.route';
5
3
  import IndexRoute from '@routes/index.route';
@@ -1,6 +1,6 @@
1
1
  import { hash, compare } from 'bcrypt';
2
- import config from 'config';
3
2
  import { sign } from 'jsonwebtoken';
3
+ import { SECRET_KEY } from '@config';
4
4
  import { CreateUserDto } from '@dtos/users.dto';
5
5
  import { HttpException } from '@exceptions/HttpException';
6
6
  import { DataStoredInToken, TokenData } from '@interfaces/auth.interface';
@@ -49,7 +49,7 @@ class AuthService {
49
49
 
50
50
  public createToken(user: User): TokenData {
51
51
  const dataStoredInToken: DataStoredInToken = { id: user.id };
52
- const secretKey: string = config.get('secretKey');
52
+ const secretKey: string = SECRET_KEY;
53
53
  const expiresIn: number = 60 * 60;
54
54
 
55
55
  return { expiresIn, token: sign(dataStoredInToken, secretKey, { expiresIn }) };
@@ -1,11 +1,11 @@
1
- import config from 'config';
2
1
  import { existsSync, mkdirSync } from 'fs';
3
2
  import { join } from 'path';
4
3
  import winston from 'winston';
5
4
  import winstonDaily from 'winston-daily-rotate-file';
5
+ import { LOG_DIR } from '@config';
6
6
 
7
7
  // logs dir
8
- const logDir: string = join(__dirname, config.get('log.dir'));
8
+ const logDir: string = join(__dirname, LOG_DIR);
9
9
 
10
10
  if (!existsSync(logDir)) {
11
11
  mkdirSync(logDir);
@@ -22,6 +22,7 @@
22
22
  "baseUrl": "src",
23
23
  "paths": {
24
24
  "@/*": ["*"],
25
+ "@config": ["config"],
25
26
  "@controllers/*": ["controllers/*"],
26
27
  "@dtos/*": ["dtos/*"],
27
28
  "@exceptions/*": ["exceptions/*"],
@@ -0,0 +1,20 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 3306
7
+ DB_USER = root
8
+ DB_PASSWORD = password
9
+ DB_DATABASE = test
10
+
11
+ # TOKEN
12
+ SECRET_KEY = secretKey
13
+
14
+ # LOG
15
+ LOG_FORMAT = dev
16
+ LOG_DIR = ../logs
17
+
18
+ # CORS
19
+ ORIGIN = *
20
+ CREDENTIALS = true
@@ -0,0 +1,20 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 3306
7
+ DB_USER = root
8
+ DB_PASSWORD = password
9
+ DB_DATABASE = test
10
+
11
+ # TOKEN
12
+ SECRET_KEY = secretKey
13
+
14
+ # LOG
15
+ LOG_FORMAT = combined
16
+ LOG_DIR = ../logs
17
+
18
+ # CORS
19
+ ORIGIN = your.domain.com
20
+ CREDENTIALS = true
@@ -0,0 +1,20 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 3306
7
+ DB_USER = root
8
+ DB_PASSWORD = password
9
+ DB_DATABASE = test
10
+
11
+ # TOKEN
12
+ SECRET_KEY = secretKey
13
+
14
+ # LOG
15
+ LOG_FORMAT = dev
16
+ LOG_DIR = ../logs
17
+
18
+ # CORS
19
+ ORIGIN = *
20
+ CREDENTIALS = true
@@ -21,6 +21,7 @@
21
21
  "baseUrl": "src",
22
22
  "paths": {
23
23
  "@/*": ["*"],
24
+ "@config": ["config"],
24
25
  "@databases": ["databases"],
25
26
  "@dtos/*": ["dtos/*"],
26
27
  "@entities/*": ["entities/*"],
@@ -21,7 +21,6 @@
21
21
  "bcrypt": "^5.0.1",
22
22
  "class-validator": "^0.13.1",
23
23
  "compression": "^1.7.4",
24
- "config": "^3.3.6",
25
24
  "cookie-parser": "^1.4.5",
26
25
  "cors": "^2.8.5",
27
26
  "dotenv": "^10.0.0",
@@ -43,7 +42,6 @@
43
42
  "@swc/core": "^1.2.108",
44
43
  "@types/bcrypt": "^5.0.0",
45
44
  "@types/compression": "^1.7.1",
46
- "@types/config": "^0.0.39",
47
45
  "@types/cookie-parser": "^1.4.2",
48
46
  "@types/cors": "^2.8.11",
49
47
  "@types/dotenv": "^8.2.0",
@@ -1,16 +1,15 @@
1
1
  import 'reflect-metadata';
2
- import '@/index';
3
2
  import { ApolloServerPluginLandingPageProductionDefault, ApolloServerPluginLandingPageLocalDefault } from 'apollo-server-core';
4
3
  import { ApolloServer } from 'apollo-server-express';
5
4
  import compression from 'compression';
6
5
  import cookieParser from 'cookie-parser';
7
6
  import cors from 'cors';
8
- import config from 'config';
9
7
  import express from 'express';
10
8
  import helmet from 'helmet';
11
9
  import hpp from 'hpp';
12
10
  import { buildSchema } from 'type-graphql';
13
11
  import { createConnection } from 'typeorm';
12
+ import { NODE_ENV, PORT, ORIGIN, CREDENTIALS } from '@config';
14
13
  import { dbConnection } from '@databases';
15
14
  import { authMiddleware, authChecker } from '@middlewares/auth.middleware';
16
15
  import errorMiddleware from '@middlewares/error.middleware';
@@ -18,13 +17,13 @@ import { logger, responseLogger, errorLogger } from '@utils/logger';
18
17
 
19
18
  class App {
20
19
  public app: express.Application;
21
- public port: string | number;
22
20
  public env: string;
21
+ public port: string | number;
23
22
 
24
23
  constructor(resolvers) {
25
24
  this.app = express();
26
- this.port = process.env.PORT || 3000;
27
- this.env = process.env.NODE_ENV || 'development';
25
+ this.env = NODE_ENV || 'development';
26
+ this.port = PORT || 3000;
28
27
 
29
28
  this.connectToDatabase();
30
29
  this.initializeMiddlewares();
@@ -51,7 +50,7 @@ class App {
51
50
  }
52
51
 
53
52
  private initializeMiddlewares() {
54
- this.app.use(cors({ origin: config.get('cors.origin'), credentials: config.get('cors.credentials') }));
53
+ this.app.use(cors({ origin: ORIGIN, credentials: CREDENTIALS }));
55
54
  this.app.use(hpp());
56
55
  this.app.use(helmet());
57
56
  this.app.use(compression());
@@ -69,7 +68,7 @@ class App {
69
68
  const apolloServer = new ApolloServer({
70
69
  schema: schema,
71
70
  plugins: [
72
- process.env.NODE_ENV === 'production'
71
+ NODE_ENV === 'production'
73
72
  ? ApolloServerPluginLandingPageProductionDefault({ footer: false })
74
73
  : ApolloServerPluginLandingPageLocalDefault({ footer: false }),
75
74
  ],
@@ -94,7 +93,7 @@ class App {
94
93
  });
95
94
 
96
95
  await apolloServer.start();
97
- apolloServer.applyMiddleware({ app: this.app, cors: true, path: '/graphql' });
96
+ apolloServer.applyMiddleware({ app: this.app, cors: ORIGIN, path: '/graphql' });
98
97
  }
99
98
 
100
99
  private initializeErrorHandling() {
@@ -0,0 +1,5 @@
1
+ import { config } from 'dotenv';
2
+ config({ path: `.env.${process.env.NODE_ENV || 'development'}.local` });
3
+
4
+ export const CREDENTIALS = process.env.CREDENTIALS === 'true';
5
+ export const { NODE_ENV, PORT, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE, SECRET_KEY, LOG_FORMAT, LOG_DIR, ORIGIN } = process.env;
@@ -1,16 +1,14 @@
1
- import config from 'config';
2
1
  import { join } from 'path';
3
2
  import { ConnectionOptions } from 'typeorm';
4
- import { dbConfig } from '@interfaces/db.interface';
3
+ import { DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE } from '@config';
5
4
 
6
- const { host, port, user, password, database }: dbConfig = config.get('dbConfig');
7
5
  export const dbConnection: ConnectionOptions = {
8
6
  type: 'postgres',
9
- host: host,
10
- port: port,
11
- username: user,
12
- password: password,
13
- database: database,
7
+ host: DB_HOST,
8
+ port: DB_PORT,
9
+ username: DB_USER,
10
+ password: DB_PASSWORD,
11
+ database: DB_DATABASE,
14
12
  synchronize: true,
15
13
  logging: false,
16
14
  entities: [join(__dirname, '../**/*.entity{.ts,.js}')],
@@ -1,7 +1,7 @@
1
- import config from 'config';
2
1
  import { verify } from 'jsonwebtoken';
3
2
  import { AuthChecker } from 'type-graphql';
4
3
  import { getRepository } from 'typeorm';
4
+ import { SECRET_KEY } from '@config';
5
5
  import { UserEntity } from '@entities/users.entity';
6
6
  import { HttpException } from '@exceptions/HttpException';
7
7
  import { RequestWithUser, DataStoredInToken } from '@interfaces/auth.interface';
@@ -10,7 +10,7 @@ export const authMiddleware = async req => {
10
10
  try {
11
11
  const Authorization = req.cookies['Authorization'] || (req.header('Authorization') ? req.header('Authorization').split('Bearer ')[1] : null);
12
12
  if (Authorization) {
13
- const secretKey: string = config.get('secretKey');
13
+ const secretKey: string = SECRET_KEY;
14
14
  const { id } = (await verify(Authorization, secretKey)) as DataStoredInToken;
15
15
  const userRepository = getRepository(UserEntity);
16
16
  const findUser = await userRepository.findOne(id, { select: ['id', 'email', 'password'] });
@@ -1,7 +1,7 @@
1
1
  import { hash, compare } from 'bcrypt';
2
- import config from 'config';
3
2
  import { sign } from 'jsonwebtoken';
4
3
  import { EntityRepository } from 'typeorm';
4
+ import { SECRET_KEY } from '@config';
5
5
  import { CreateUserDto } from '@dtos/users.dto';
6
6
  import { UserEntity } from '@entities/users.entity';
7
7
  import { HttpException } from '@exceptions/HttpException';
@@ -49,7 +49,7 @@ export default class AuthRepository {
49
49
 
50
50
  public createToken(user: User): TokenData {
51
51
  const dataStoredInToken: DataStoredInToken = { id: user.id };
52
- const secretKey: string = config.get('secretKey');
52
+ const secretKey: string = SECRET_KEY;
53
53
  const expiresIn: number = 60 * 60;
54
54
 
55
55
  return { expiresIn, token: sign(dataStoredInToken, secretKey, { expiresIn }) };
@@ -1,6 +1,3 @@
1
- import 'reflect-metadata';
2
- import 'dotenv/config';
3
- import '@/index';
4
1
  import App from '@/app';
5
2
  import validateEnv from '@utils/validateEnv';
6
3
 
@@ -1,11 +1,11 @@
1
- import config from 'config';
2
1
  import { existsSync, mkdirSync } from 'fs';
3
2
  import { join } from 'path';
4
3
  import winston from 'winston';
5
4
  import winstonDaily from 'winston-daily-rotate-file';
5
+ import { LOG_DIR } from '@config';
6
6
 
7
7
  // logs dir
8
- const logDir: string = join(__dirname, config.get('log.dir'));
8
+ const logDir: string = join(__dirname, LOG_DIR);
9
9
 
10
10
  if (!existsSync(logDir)) {
11
11
  mkdirSync(logDir);
@@ -22,6 +22,7 @@
22
22
  "baseUrl": "src",
23
23
  "paths": {
24
24
  "@/*": ["*"],
25
+ "@config": ["config"],
25
26
  "@databases": ["databases"],
26
27
  "@dtos/*": ["dtos/*"],
27
28
  "@entities/*": ["entities/*"],
@@ -0,0 +1,20 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 3306
7
+ DB_USER = root
8
+ DB_PASSWORD = password
9
+ DB_DATABASE = test
10
+
11
+ # TOKEN
12
+ SECRET_KEY = secretKey
13
+
14
+ # LOG
15
+ LOG_FORMAT = dev
16
+ LOG_DIR = ../logs
17
+
18
+ # CORS
19
+ ORIGIN = *
20
+ CREDENTIALS = true
@@ -0,0 +1,20 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 3306
7
+ DB_USER = root
8
+ DB_PASSWORD = password
9
+ DB_DATABASE = test
10
+
11
+ # TOKEN
12
+ SECRET_KEY = secretKey
13
+
14
+ # LOG
15
+ LOG_FORMAT = combined
16
+ LOG_DIR = ../logs
17
+
18
+ # CORS
19
+ ORIGIN = your.domain.com
20
+ CREDENTIALS = true
@@ -0,0 +1,20 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 3306
7
+ DB_USER = root
8
+ DB_PASSWORD = password
9
+ DB_DATABASE = test
10
+
11
+ # TOKEN
12
+ SECRET_KEY = secretKey
13
+
14
+ # LOG
15
+ LOG_FORMAT = dev
16
+ LOG_DIR = ../logs
17
+
18
+ # CORS
19
+ ORIGIN = *
20
+ CREDENTIALS = true
package/lib/knex/.swcrc CHANGED
@@ -21,6 +21,7 @@
21
21
  "baseUrl": "src",
22
22
  "paths": {
23
23
  "@/*": ["*"],
24
+ "@config": ["config"],
24
25
  "@controllers/*": ["controllers/*"],
25
26
  "@databases": ["databases"],
26
27
  "@dtos/*": ["dtos/*"],
@@ -1,19 +1,15 @@
1
- process.env['NODE_CONFIG_DIR'] = __dirname + '/src/configs';
1
+ import { DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE } from './src/config';
2
2
 
3
- import config from 'config';
4
- import { dbConfig } from './src/interfaces/db.interface';
5
-
6
- const { host, user, password, database, port }: dbConfig = config.get('dbConfig');
7
3
  export = {
8
4
  client: 'mysql',
9
5
  connection: {
10
6
  charset: 'utf8',
11
7
  timezone: 'UTC',
12
- host: host,
13
- user: user,
14
- password: password,
15
- database: database,
16
- port: port,
8
+ host: DB_HOST,
9
+ port: DB_PORT,
10
+ user: DB_USER,
11
+ password: DB_PASSWORD,
12
+ database: DB_DATABASE
17
13
  },
18
14
  migrations: {
19
15
  directory: 'src/databases/migrations',
@@ -25,7 +25,6 @@
25
25
  "class-transformer": "^0.4.0",
26
26
  "class-validator": "^0.13.1",
27
27
  "compression": "^1.7.4",
28
- "config": "^3.3.6",
29
28
  "cookie-parser": "^1.4.5",
30
29
  "cors": "^2.8.5",
31
30
  "dotenv": "^9.0.2",
@@ -48,7 +47,6 @@
48
47
  "@swc/core": "^1.2.108",
49
48
  "@types/bcrypt": "^5.0.0",
50
49
  "@types/compression": "^1.7.0",
51
- "@types/config": "0.0.38",
52
50
  "@types/cookie-parser": "^1.4.2",
53
51
  "@types/cors": "^2.8.10",
54
52
  "@types/dotenv": "^8.2.0",