typescript-express-starter 7.0.0 → 8.1.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 (203) hide show
  1. package/README.kr.md +12 -6
  2. package/README.md +12 -6
  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 +2 -4
  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 +2 -4
  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 +2 -4
  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 +2 -4
  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 +2 -4
  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 +2 -4
  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 +2 -4
  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/.dockerignore +18 -0
  94. package/lib/typegoose/.editorconfig +9 -0
  95. package/lib/typegoose/.env.development.local +18 -0
  96. package/lib/typegoose/.env.production.local +18 -0
  97. package/lib/typegoose/.env.test.local +18 -0
  98. package/lib/typegoose/.eslintignore +1 -0
  99. package/lib/typegoose/.eslintrc +18 -0
  100. package/lib/typegoose/.huskyrc +5 -0
  101. package/lib/typegoose/.lintstagedrc.json +5 -0
  102. package/lib/typegoose/.prettierrc +8 -0
  103. package/lib/typegoose/.swcrc +40 -0
  104. package/lib/typegoose/.vscode/launch.json +35 -0
  105. package/lib/typegoose/.vscode/settings.json +6 -0
  106. package/lib/typegoose/Dockerfile +24 -0
  107. package/lib/typegoose/Makefile +6 -0
  108. package/lib/typegoose/docker-compose.yml +46 -0
  109. package/lib/typegoose/ecosystem.config.js +57 -0
  110. package/lib/typegoose/jest.config.js +12 -0
  111. package/lib/typegoose/nginx.conf +40 -0
  112. package/lib/typegoose/nodemon.json +12 -0
  113. package/lib/typegoose/package.json +80 -0
  114. package/lib/typegoose/src/app.ts +93 -0
  115. package/lib/typegoose/src/config/index.ts +5 -0
  116. package/lib/typegoose/src/controllers/auth.controller.ts +46 -0
  117. package/lib/typegoose/src/controllers/index.controller.ts +13 -0
  118. package/lib/typegoose/src/controllers/users.controller.ts +65 -0
  119. package/lib/typegoose/src/databases/index.ts +3 -0
  120. package/lib/typegoose/src/dtos/users.dto.ts +9 -0
  121. package/lib/typegoose/src/exceptions/HttpException.ts +10 -0
  122. package/lib/typegoose/src/http/auth.http +32 -0
  123. package/lib/typegoose/src/http/users.http +34 -0
  124. package/lib/typegoose/src/interfaces/auth.interface.ts +15 -0
  125. package/lib/typegoose/src/interfaces/routes.interface.ts +6 -0
  126. package/lib/typegoose/src/interfaces/users.interface.ts +5 -0
  127. package/lib/typegoose/src/middlewares/auth.middleware.ts +32 -0
  128. package/lib/typegoose/src/middlewares/error.middleware.ts +17 -0
  129. package/lib/typegoose/src/middlewares/validation.middleware.ts +25 -0
  130. package/lib/typegoose/src/models/users.model.ts +18 -0
  131. package/lib/typegoose/src/routes/auth.route.ts +24 -0
  132. package/lib/typegoose/src/routes/index.route.ts +19 -0
  133. package/lib/typegoose/src/routes/users.route.ts +25 -0
  134. package/lib/typegoose/src/server.ts +11 -0
  135. package/lib/typegoose/src/services/auth.service.ts +61 -0
  136. package/lib/typegoose/src/services/users.service.ts +64 -0
  137. package/lib/typegoose/src/tests/auth.test.ts +83 -0
  138. package/lib/typegoose/src/tests/index.test.ts +18 -0
  139. package/lib/typegoose/src/tests/users.test.ts +133 -0
  140. package/lib/typegoose/src/utils/logger.ts +65 -0
  141. package/lib/typegoose/src/utils/util.ts +19 -0
  142. package/lib/typegoose/src/utils/validateEnv.ts +10 -0
  143. package/lib/typegoose/swagger.yaml +122 -0
  144. package/lib/typegoose/tsconfig.json +40 -0
  145. package/lib/typeorm/.env.development.local +20 -0
  146. package/lib/typeorm/.env.production.local +20 -0
  147. package/lib/typeorm/.env.test.local +20 -0
  148. package/lib/typeorm/.swcrc +1 -0
  149. package/lib/typeorm/package.json +2 -4
  150. package/lib/typeorm/src/app.ts +6 -7
  151. package/lib/typeorm/src/config/index.ts +5 -0
  152. package/lib/typeorm/src/databases/index.ts +6 -8
  153. package/lib/typeorm/src/middlewares/auth.middleware.ts +2 -2
  154. package/lib/typeorm/src/server.ts +0 -2
  155. package/lib/typeorm/src/services/auth.service.ts +2 -2
  156. package/lib/typeorm/src/utils/logger.ts +2 -2
  157. package/lib/typeorm/tsconfig.json +1 -0
  158. package/package.json +2 -1
  159. package/lib/default/.env +0 -1
  160. package/lib/default/src/configs/development.json +0 -12
  161. package/lib/default/src/configs/production.json +0 -12
  162. package/lib/default/src/configs/test.json +0 -12
  163. package/lib/default/src/index.ts +0 -1
  164. package/lib/graphql/.env +0 -1
  165. package/lib/graphql/src/configs/development.json +0 -19
  166. package/lib/graphql/src/configs/production.json +0 -19
  167. package/lib/graphql/src/configs/test.json +0 -19
  168. package/lib/graphql/src/index.ts +0 -1
  169. package/lib/graphql/src/interfaces/db.interface.ts +0 -7
  170. package/lib/knex/.env +0 -1
  171. package/lib/knex/src/configs/development.json +0 -19
  172. package/lib/knex/src/configs/production.json +0 -19
  173. package/lib/knex/src/configs/test.json +0 -19
  174. package/lib/knex/src/index.ts +0 -1
  175. package/lib/knex/src/interfaces/db.interface.ts +0 -7
  176. package/lib/mongoose/.env +0 -1
  177. package/lib/mongoose/src/configs/development.json +0 -17
  178. package/lib/mongoose/src/configs/production.json +0 -17
  179. package/lib/mongoose/src/configs/test.json +0 -17
  180. package/lib/mongoose/src/index.ts +0 -1
  181. package/lib/mongoose/src/interfaces/db.interface.ts +0 -5
  182. package/lib/prisma/.env +0 -10
  183. package/lib/prisma/src/configs/development.json +0 -12
  184. package/lib/prisma/src/configs/production.json +0 -12
  185. package/lib/prisma/src/configs/test.json +0 -12
  186. package/lib/prisma/src/index.ts +0 -1
  187. package/lib/routing-controllers/.env +0 -1
  188. package/lib/routing-controllers/src/configs/development.json +0 -12
  189. package/lib/routing-controllers/src/configs/production.json +0 -12
  190. package/lib/routing-controllers/src/configs/test.json +0 -12
  191. package/lib/routing-controllers/src/index.ts +0 -1
  192. package/lib/sequelize/.env +0 -1
  193. package/lib/sequelize/src/configs/development.json +0 -22
  194. package/lib/sequelize/src/configs/production.json +0 -22
  195. package/lib/sequelize/src/configs/test.json +0 -22
  196. package/lib/sequelize/src/index.ts +0 -1
  197. package/lib/sequelize/src/interfaces/db.interface.ts +0 -10
  198. package/lib/typeorm/.env +0 -1
  199. package/lib/typeorm/src/configs/development.json +0 -18
  200. package/lib/typeorm/src/configs/production.json +0 -18
  201. package/lib/typeorm/src/configs/test.json +0 -18
  202. package/lib/typeorm/src/index.ts +0 -1
  203. package/lib/typeorm/src/interfaces/db.interface.ts +0 -6
@@ -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,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/*"],
@@ -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",
@@ -21,7 +21,6 @@
21
21
  "class-validator": "^0.13.1",
22
22
  "class-validator-jsonschema": "^3.0.2",
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,10 +1,8 @@
1
1
  import 'reflect-metadata';
2
- import '@/index';
3
2
  import { defaultMetadataStorage } from 'class-transformer';
4
3
  import { validationMetadatasToSchemas } from 'class-validator-jsonschema';
5
4
  import compression from 'compression';
6
5
  import cookieParser from 'cookie-parser';
7
- import config from 'config';
8
6
  import express from 'express';
9
7
  import helmet from 'helmet';
10
8
  import hpp from 'hpp';
@@ -12,18 +10,19 @@ import morgan from 'morgan';
12
10
  import { useExpressServer, getMetadataArgsStorage } from 'routing-controllers';
13
11
  import { routingControllersToSpec } from 'routing-controllers-openapi';
14
12
  import swaggerUi from 'swagger-ui-express';
13
+ import { NODE_ENV, PORT, LOG_FORMAT, ORIGIN, CREDENTIALS } from '@config';
15
14
  import errorMiddleware from '@middlewares/error.middleware';
16
15
  import { logger, stream } from '@utils/logger';
17
16
 
18
17
  class App {
19
18
  public app: express.Application;
20
- public port: string | number;
21
19
  public env: string;
20
+ public port: string | number;
22
21
 
23
22
  constructor(Controllers: Function[]) {
24
23
  this.app = express();
25
- this.port = process.env.PORT || 3000;
26
- this.env = process.env.NODE_ENV || 'development';
24
+ this.env = NODE_ENV || 'development';
25
+ this.port = PORT || 3000;
27
26
 
28
27
  this.initializeMiddlewares();
29
28
  this.initializeRoutes(Controllers);
@@ -45,7 +44,7 @@ class App {
45
44
  }
46
45
 
47
46
  private initializeMiddlewares() {
48
- this.app.use(morgan(config.get('log.format'), { stream }));
47
+ this.app.use(morgan(LOG_FORMAT, { stream }));
49
48
  this.app.use(hpp());
50
49
  this.app.use(helmet());
51
50
  this.app.use(compression());
@@ -57,8 +56,8 @@ class App {
57
56
  private initializeRoutes(controllers: Function[]) {
58
57
  useExpressServer(this.app, {
59
58
  cors: {
60
- origin: config.get('cors.origin'),
61
- credentials: config.get('cors.credentials'),
59
+ origin: ORIGIN,
60
+ credentials: CREDENTIALS,
62
61
  },
63
62
  controllers: controllers,
64
63
  defaultErrorHandler: false,
@@ -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 { AuthController } from '@controllers/auth.controller';
5
3
  import { IndexController } from '@controllers/index.controller';
@@ -1,6 +1,6 @@
1
1
  import { compare, hash } 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
  "@controllers/*": ["controllers/*"],
25
26
  "@databases": ["databases"],
26
27
  "@dtos/*": ["dtos/*"],
@@ -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",
@@ -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",
@@ -42,7 +41,6 @@
42
41
  "@swc/core": "^1.2.108",
43
42
  "@types/bcrypt": "^5.0.0",
44
43
  "@types/compression": "^1.7.1",
45
- "@types/config": "^0.0.39",
46
44
  "@types/cookie-parser": "^1.4.2",
47
45
  "@types/cors": "^2.8.11",
48
46
  "@types/dotenv": "^8.2.0",
@@ -1,14 +1,13 @@
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 DB from '@databases';
13
12
  import { Routes } from '@interfaces/routes.interface';
14
13
  import errorMiddleware from '@middlewares/error.middleware';
@@ -16,13 +15,13 @@ import { logger, stream } from '@utils/logger';
16
15
 
17
16
  class App {
18
17
  public app: express.Application;
19
- public port: string | number;
20
18
  public env: string;
19
+ public port: string | number;
21
20
 
22
21
  constructor(routes: Routes[]) {
23
22
  this.app = express();
24
- this.port = process.env.PORT || 3000;
25
- this.env = process.env.NODE_ENV || 'development';
23
+ this.env = NODE_ENV || 'development';
24
+ this.port = PORT || 3000;
26
25
 
27
26
  this.connectToDatabase();
28
27
  this.initializeMiddlewares();
@@ -49,8 +48,8 @@ class App {
49
48
  }
50
49
 
51
50
  private initializeMiddlewares() {
52
- this.app.use(morgan(config.get('log.format'), { stream }));
53
- this.app.use(cors({ origin: config.get('cors.origin'), credentials: config.get('cors.credentials') }));
51
+ this.app.use(morgan(LOG_FORMAT, { stream }));
52
+ this.app.use(cors({ origin: ORIGIN, credentials: CREDENTIALS }));
54
53
  this.app.use(hpp());
55
54
  this.app.use(helmet());
56
55
  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, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE, SECRET_KEY, LOG_FORMAT, LOG_DIR, ORIGIN } = process.env;
@@ -1,13 +1,12 @@
1
- import config from 'config';
2
1
  import Sequelize from 'sequelize';
3
- import { dbConfig } from '@interfaces/db.interface';
2
+ import { NODE_ENV, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE } from '@config';
4
3
  import UserModel from '@models/users.model';
5
4
  import { logger } from '@utils/logger';
6
5
 
7
- const { host, user, password, database, pool }: dbConfig = config.get('dbConfig');
8
- const sequelize = new Sequelize.Sequelize(database, user, password, {
9
- host: host,
6
+ const sequelize = new Sequelize.Sequelize(DB_DATABASE, DB_USER, DB_PASSWORD, {
10
7
  dialect: 'mysql',
8
+ host: DB_HOST,
9
+ port: DB_PORT,
11
10
  timezone: '+09:00',
12
11
  define: {
13
12
  charset: 'utf8mb4',
@@ -16,10 +15,10 @@ const sequelize = new Sequelize.Sequelize(database, user, password, {
16
15
  freezeTableName: true,
17
16
  },
18
17
  pool: {
19
- min: pool.min,
20
- max: pool.max,
18
+ min: 0,
19
+ max: 5,
21
20
  },
22
- logQueryParameters: process.env.NODE_ENV === 'development',
21
+ logQueryParameters: NODE_ENV === 'development',
23
22
  logging: (query, time) => {
24
23
  logger.info(time + 'ms' + ' ' + query);
25
24
  },
@@ -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 DB from '@databases';
5
5
  import { HttpException } from '@exceptions/HttpException';
6
6
  import { DataStoredInToken, RequestWithUser } from '@interfaces/auth.interface';
@@ -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 = verify(Authorization, secretKey) as DataStoredInToken;
15
15
  const userId = verificationResponse.id;
16
16
  const findUser = await DB.Users.findByPk(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 { compare, hash } from 'bcrypt';
2
- import config from 'config';
3
2
  import { sign } from 'jsonwebtoken';
3
+ import { SECRET_KEY } from '@config';
4
4
  import DB from '@databases';
5
5
  import { CreateUserDto } from '@dtos/users.dto';
6
6
  import { HttpException } from '@exceptions/HttpException';
@@ -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
  "@databases": ["databases"],
27
28
  "@dtos/*": ["dtos/*"],
@@ -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,18 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 27017
7
+ DB_DATABASE = test
8
+
9
+ # TOKEN
10
+ SECRET_KEY = secretKey
11
+
12
+ # LOG
13
+ LOG_FORMAT = dev
14
+ LOG_DIR = ../logs
15
+
16
+ # CORS
17
+ ORIGIN = *
18
+ CREDENTIALS = true
@@ -0,0 +1,18 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 27017
7
+ DB_DATABASE = test
8
+
9
+ # TOKEN
10
+ SECRET_KEY = secretKey
11
+
12
+ # LOG
13
+ LOG_FORMAT = combined
14
+ LOG_DIR = ../logs
15
+
16
+ # CORS
17
+ ORIGIN = your.domain.com
18
+ CREDENTIALS = true
@@ -0,0 +1,18 @@
1
+ # PORT
2
+ PORT = 3000
3
+
4
+ # DATABASE
5
+ DB_HOST = localhost
6
+ DB_PORT = 27017
7
+ DB_DATABASE = test
8
+
9
+ # TOKEN
10
+ SECRET_KEY = secretKey
11
+
12
+ # LOG
13
+ LOG_FORMAT = dev
14
+ LOG_DIR = ../logs
15
+
16
+ # CORS
17
+ ORIGIN = *
18
+ CREDENTIALS = true
@@ -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,40 @@
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
+ "@config": ["config"],
25
+ "@controllers/*": ["controllers/*"],
26
+ "@databases": ["databases"],
27
+ "@dtos/*": ["dtos/*"],
28
+ "@exceptions/*": ["exceptions/*"],
29
+ "@interfaces/*": ["interfaces/*"],
30
+ "@middlewares/*": ["middlewares/*"],
31
+ "@models/*": ["models/*"],
32
+ "@routes/*": ["routes/*"],
33
+ "@services/*": ["services/*"],
34
+ "@utils/*": ["utils/*"]
35
+ }
36
+ },
37
+ "module": {
38
+ "type": "commonjs"
39
+ }
40
+ }