Skip to content

Commit 359ba7e

Browse files
committed
thjs-59: + convict to config package
1 parent d221555 commit 359ba7e

File tree

3 files changed

+100
-31
lines changed

3 files changed

+100
-31
lines changed

package-lock.json

Lines changed: 18 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"start": "nodemon src/main.js",
1919
"lint:js": "npx eslint --ext .js src",
2020
"lint": "npm run lint:js",
21+
"pretest": "cross-env NODE_ENV=test npm run migrate:run",
2122
"test": "cross-env NODE_ENV=test node --experimental-vm-modules --expose-gc --no-compilation-cache ../node_modules/jest/bin/jest.js --runInBand",
2223
"test:starter": "npm run test -- --verbose --rootDir=tests/api/0-starter/",
2324
"test:dislike-post": "npm run test -- --verbose --rootDir=tests/api/1-dislike-post/",
@@ -39,6 +40,7 @@
3940
"@fastify/static": "6.10.2",
4041
"axios": "1.4.0",
4142
"bcrypt": "5.1.0",
43+
"convict": "6.2.4",
4244
"dotenv": "16.3.0",
4345
"fastify": "4.18.0",
4446
"fastify-multer": "2.0.3",

server/src/libs/packages/config/config.package.js

Lines changed: 80 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,104 @@
1+
import convict from 'convict';
12
import { config } from 'dotenv';
23

4+
import { AppEnvironment } from '#libs/enums/enums.js';
5+
36
class Config {
47
constructor() {
58
config();
69

7-
this.ENV = this.#envSchema;
10+
this.#envSchema.load({});
11+
this.#envSchema.validate({ allowed: 'strict' });
12+
this.ENV = this.#envSchema.getProperties();
813
}
914

1015
get #envSchema() {
11-
const {
12-
APP_PORT,
13-
SECRET_KEY,
14-
DB_NAME,
15-
DB_USERNAME,
16-
DB_PASSWORD,
17-
DB_HOST,
18-
DB_PORT,
19-
DB_CLIENT,
20-
NODE_ENV,
21-
TEST_DB_NAME,
22-
GYAZO_UPLOAD_API_URL,
23-
GYAZO_ACCESS_TOKEN
24-
} = process.env;
25-
26-
return {
16+
return convict({
2717
APP: {
2818
API_PATH: '/api',
29-
PORT: APP_PORT,
30-
ENVIRONMENT: NODE_ENV
19+
PORT: {
20+
doc: 'Port for incoming connections',
21+
format: Number,
22+
env: 'APP_PORT',
23+
default: null
24+
},
25+
ENVIRONMENT: {
26+
doc: 'Application environment',
27+
format: Object.values(AppEnvironment),
28+
env: 'NODE_ENV',
29+
default: null
30+
}
3131
},
3232
JWT: {
33-
SECRET: SECRET_KEY,
33+
SECRET_KEY: {
34+
doc: 'Secret key for token generation',
35+
format: String,
36+
env: 'SECRET_KEY',
37+
default: null
38+
},
3439
EXPIRES_IN: '24h'
3540
},
3641
DB: {
37-
DATABASE: DB_NAME,
38-
TEST_DATABASE: TEST_DB_NAME,
39-
USERNAME: DB_USERNAME,
40-
PASSWORD: DB_PASSWORD,
41-
HOST: DB_HOST,
42-
PORT: DB_PORT,
43-
CLIENT: DB_CLIENT,
42+
DATABASE: {
43+
doc: 'Database name',
44+
format: String,
45+
env: 'DB_NAME',
46+
default: null
47+
},
48+
TEST_DATABASE: {
49+
doc: 'Test database name',
50+
format: String,
51+
env: 'TEST_DB_NAME',
52+
default: null
53+
},
54+
USERNAME: {
55+
doc: 'Database connection username',
56+
format: String,
57+
env: 'DB_USERNAME',
58+
default: null
59+
},
60+
PASSWORD: {
61+
doc: 'Database connection password',
62+
format: String,
63+
env: 'DB_PASSWORD',
64+
default: null
65+
},
66+
HOST: {
67+
doc: 'Database connection host',
68+
format: String,
69+
env: 'DB_HOST',
70+
default: null
71+
},
72+
PORT: {
73+
doc: 'Database connection port',
74+
format: Number,
75+
env: 'DB_PORT',
76+
default: null
77+
},
78+
CLIENT: {
79+
doc: 'Database connection client',
80+
format: String,
81+
env: 'DB_CLIENT',
82+
default: null
83+
},
4484
DEBUG: false
4585
},
4686
GYAZO: {
47-
ACCESS_KEY: GYAZO_ACCESS_TOKEN,
48-
UPLOAD_API_URL: GYAZO_UPLOAD_API_URL,
87+
ACCESS_KEY: {
88+
doc: 'Gyazo access key',
89+
format: String,
90+
env: 'GYAZO_ACCESS_TOKEN',
91+
default: null
92+
},
93+
UPLOAD_API_URL: {
94+
doc: 'Gyazo upload api url',
95+
format: String,
96+
env: 'GYAZO_UPLOAD_API_URL',
97+
default: null
98+
},
4999
FILE_SIZE: 10_000_000
50100
}
51-
};
101+
});
52102
}
53103
}
54104

0 commit comments

Comments
 (0)