-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathormconfig.js
85 lines (79 loc) · 2.56 KB
/
ormconfig.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const envalid = require('envalid');
const rule = {
API_BASE_PATH: envalid.str({ default: 'prod', devDefault: 'dev' }),
API_PORT: envalid.port({ default: 3000 }),
API_DEFAULT_STRATEGY: envalid.str({ default: 'jwt' }),
DB_TYPE: envalid.str({ default: 'mysql' }),
DB_DATABASE: envalid.str({ devDefault: 'dev' }),
DB_HOST: envalid.str({ default: '', devDefault: 'localhost' }),
DB_PASSWORD: envalid.str({ default: '', devDefault: '1234' }),
DB_PORT: envalid.port({ default: 3306 }),
DB_USER: envalid.str({ default: '', devDefault: 'root' }),
DB_SYNCHRONIZE: envalid.bool({ default: false, devDefault: true }),
DB_MIGRATIONS_RUN: envalid.bool({ default: true }),
DB_IS_LOCAL: envalid.bool({ default: true }),
SQLITE_DATABASE_HOST_PATH: envalid.str({ default: '' }),
DB_TIMEOUT: envalid.num({ default: 20000 }),
API_JWT_EXPIRES_IN: envalid.str({ default: '7d' }),
JWT_SECRET_KEY: envalid.str({ devDefault: 'CHANGE_THIS_SECRET' }),
SWAGGER_DESCRIPTION: envalid.str({ default: 'Base API' }),
SWAGGER_TAG: envalid.str({ default: 'Base' }),
SWAGGER_TITLE: envalid.str({ default: 'Base' }),
SWAGGER_VERSION: envalid.str({ default: '1.0' }),
};
const env = envalid.cleanEnv(process.env, rule, { dotEnvPath: '.env', strict: true, });
const config = {
type: env.DB_TYPE,
database: env.DB_DATABASE,
logging: env.isDevelopment,
migrationsRun: env.DB_MIGRATIONS_RUN,
acquireTimeout: env.DB_TIMEOUT,
synchronize: env.DB_SYNCHRONIZE,
entities: [
'src/**/*.entity{.ts,.js}',
],
migrations: [
'src/migrations/**/*{.ts,.js}',
],
cli: {
migrationsDir: 'src/migrations',
},
};
if (config.type === 'mysql')
Object.assign(config, {
charset: 'utf8mb4',
collation: 'utf8mb4_unicode_ci',
port: env.DB_PORT,
host: env.DB_HOST,
username: env.DB_USER,
password: env.DB_PASSWORD,
});
if (env.DB_TYPE === 'postgres')
Object.assign(config, {
type: 'postgres',
charset: 'utf8mb4',
collation: 'utf8mb4_unicode_ci',
// https://stackoverflow.com/questions/35553432/error-handshake-inactivity-timeout-in-node-js-mysql-module
keepConnectionAlive: true,
host: env.DB_HOST,
port: env.DB_PORT,
username: env.DB_USER,
password: env.DB_PASSWORD,
acquireTimeout: env.DB_TIMEOUT,
rejectUnauthorized: true,
...env.DB_IS_LOCAL && {
rejectUnauthorized: false,
},
...!env.DB_IS_LOCAL && {
rejectUnauthorized: true,
extra: {
ssl: {
rejectUnauthorized: false,
},
},
ssl: {
rejectUnauthorized: false,
},
},
});
module.exports = config;