Skip to content

Commit 98a342e

Browse files
author
Gery Hirschfeld
authored
Merge pull request #95 from w3tecch/feature/uniform_env_vars
Feature/uniform env vars
2 parents c7902ae + 1140959 commit 98a342e

File tree

5 files changed

+76
-31
lines changed

5 files changed

+76
-31
lines changed

.env.example

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,27 @@ AUTH_ROUTE=http://localhost:3333/tokeninfo
2323
#
2424
# DATABASE
2525
#
26-
DB_TYPE=mysql
27-
DB_HOST=localhost
28-
DB_PORT=3306
29-
DB_USERNAME=root
30-
DB_PASSWORD=
31-
DB_DATABASE=my_database
32-
DB_SYNCHRONIZE=false
33-
DB_LOGGING=false
26+
TYPEORM_CONNECTION=mysql
27+
TYPEORM_HOST=localhost
28+
TYPEORM_PORT=3306
29+
TYPEORM_USERNAME=root
30+
TYPEORM_PASSWORD=
31+
TYPEORM_DATABASE=my_database
32+
TYPEORM_SYNCHRONIZE=false
33+
TYPEORM_LOGGING=false
34+
35+
#
36+
# Additional settings (optional as defaults are in env.ts)
37+
#
38+
# TYPEORM_MIGRATIONS=
39+
# TYPEORM_MIGRATIONS_DIR=
40+
# TYPEORM_ENTITIES=
41+
# TYPEORM_SUBSCRIBERS=
42+
# CONTROLLERS=
43+
# MIDDLEWARES=
44+
# INTERCEPTORS=
45+
# QUERIES=
46+
# MUTATIONS=
3447

3548
#
3649
# GraphQL

.env.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ AUTH_ROUTE=http://localhost:3333/tokeninfo
2323
#
2424
# DATABASE
2525
#
26-
DB_TYPE=sqlite
27-
DB_DATABASE=./mydb.sql
28-
DB_LOGGING=false
26+
TYPEORM_CONNECTION=sqlite
27+
TYPEORM_DATABASE=./mydb.sql
28+
TYPEORM_LOGGING=false
2929

3030
#
3131
# GraphQL

src/env.ts

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as dotenv from 'dotenv';
22
import * as path from 'path';
33

44
import * as pkg from '../package.json';
5-
import { getOsEnv, normalizePort, toBool, toNumber } from './lib/env';
5+
import { getOsEnv, getOsEnvArray, normalizePort, toBool, toNumber } from './lib/env';
66

77
/**
88
* Load .env file or for tests the .env.test file.
@@ -27,15 +27,39 @@ export const env = {
2727
port: normalizePort(process.env.PORT || getOsEnv('APP_PORT')),
2828
banner: toBool(getOsEnv('APP_BANNER')),
2929
dirs: {
30-
migrations: [path.relative(path.join(process.cwd()), path.join(__dirname, 'database/migrations/**/*.ts'))],
31-
migrationsDir: path.relative(path.join(process.cwd()), path.join(__dirname, 'database/migrations')),
32-
entities: [path.relative(path.join(process.cwd()), path.join(__dirname, 'api/models/**/*{.js,.ts}'))],
33-
subscribers: [path.join(__dirname, 'api/subscribers/**/*Subscriber{.js,.ts}')],
34-
controllers: [path.join(__dirname, 'api/controllers/**/*Controller{.js,.ts}')],
35-
middlewares: [path.join(__dirname, 'api/middlewares/**/*Middleware{.js,.ts}')],
36-
interceptors: [path.join(__dirname, 'api/interceptors/**/*Interceptor{.js,.ts}')],
37-
queries: [path.join(__dirname, 'api/queries/**/*Query{.js,.ts}')],
38-
mutations: [path.join(__dirname, 'api/mutations/**/*Mutation{.js,.ts}')],
30+
migrations: (
31+
getOsEnvArray('TYPEORM_MIGRATIONS') ||
32+
[path.relative(path.join(process.cwd()), path.join(__dirname, 'database/migrations/**/*.ts'))]
33+
) as string[],
34+
migrationsDir: getOsEnv('TYPEORM_MIGRATIONS_DIR') || path.relative(path.join(process.cwd()), path.join(__dirname, 'database/migrations')),
35+
entities: (
36+
getOsEnvArray('TYPEORM_ENTITIES') ||
37+
[path.relative(path.join(process.cwd()), path.join(__dirname, 'api/models/**/*{.js,.ts}'))]
38+
) as string[],
39+
subscribers: (
40+
getOsEnvArray('TYPEORM_SUBSCRIBERS') ||
41+
[path.join(__dirname, 'api/subscribers/**/*Subscriber{.js,.ts}')]
42+
) as string[],
43+
controllers: (
44+
getOsEnvArray('CONTROLLERS') ||
45+
[path.join(__dirname, 'api/controllers/**/*Controller{.js,.ts}')]
46+
) as string[],
47+
middlewares: (
48+
getOsEnvArray('MIDDLEWARES') ||
49+
[path.join(__dirname, 'api/middlewares/**/*Middleware{.js,.ts}')]
50+
) as string[],
51+
interceptors: (
52+
getOsEnvArray('INTERCEPTORS') ||
53+
[path.join(__dirname, 'api/interceptors/**/*Interceptor{.js,.ts}')]
54+
) as string[],
55+
queries: (
56+
getOsEnvArray('QUERIES') ||
57+
[path.join(__dirname, 'api/queries/**/*Query{.js,.ts}')]
58+
) as string[],
59+
mutations: (
60+
getOsEnvArray('MUTATIONS') ||
61+
[path.join(__dirname, 'api/mutations/**/*Mutation{.js,.ts}')]
62+
) as string[],
3963
},
4064
},
4165
log: {
@@ -47,14 +71,14 @@ export const env = {
4771
route: getOsEnv('AUTH_ROUTE'),
4872
},
4973
db: {
50-
type: getOsEnv('DB_TYPE'),
51-
host: getOsEnv('DB_HOST'),
52-
port: toNumber(getOsEnv('DB_PORT')),
53-
username: getOsEnv('DB_USERNAME'),
54-
password: getOsEnv('DB_PASSWORD'),
55-
database: getOsEnv('DB_DATABASE'),
56-
synchronize: toBool(getOsEnv('DB_SYNCHRONIZE')),
57-
logging: toBool(getOsEnv('DB_LOGGING')),
74+
type: getOsEnv('TYPEORM_CONNECTION'),
75+
host: getOsEnv('TYPEORM_HOST'),
76+
port: toNumber(getOsEnv('TYPEORM_PORT')),
77+
username: getOsEnv('TYPEORM_USERNAME'),
78+
password: getOsEnv('TYPEORM_PASSWORD'),
79+
database: getOsEnv('TYPEORM_DATABASE'),
80+
synchronize: toBool(getOsEnv('TYPEORM_SYNCHRONIZE')),
81+
logging: toBool(getOsEnv('TYPEORM_LOGGING')),
5882
},
5983
graphql: {
6084
enabled: toBool(getOsEnv('GRAPHQL_ENABLED')),

src/lib/env/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ export function getOsEnv(key: string): string {
22
return process.env[key] as string;
33
}
44

5+
export function getOsEnvArray(key: string, delimiter: string = ','): string[] | boolean {
6+
return process.env[key] && process.env[key].split(delimiter) || false;
7+
}
8+
59
export function toNumber(value: string): number {
610
return parseInt(value, 10);
711
}

src/loaders/typeormLoader.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { MicroframeworkLoader, MicroframeworkSettings } from 'microframework-w3tec';
2-
import { createConnection } from 'typeorm';
2+
import { createConnection, getConnectionOptions } from 'typeorm';
33

44
import { env } from '../env';
55

66
export const typeormLoader: MicroframeworkLoader = async (settings: MicroframeworkSettings | undefined) => {
77

8-
const connection = await createConnection({
8+
const loadedConnectionOptions = await getConnectionOptions();
9+
10+
const connectionOptions = Object.assign(loadedConnectionOptions, {
911
type: env.db.type as any, // See createConnection options for valid types
1012
host: env.db.host,
1113
port: env.db.port,
@@ -18,6 +20,8 @@ export const typeormLoader: MicroframeworkLoader = async (settings: Microframewo
1820
migrations: env.app.dirs.migrations,
1921
});
2022

23+
const connection = await createConnection(connectionOptions);
24+
2125
if (settings) {
2226
settings.setData('connection', connection);
2327
settings.onShutdown(() => connection.close());

0 commit comments

Comments
 (0)