1.0.0 • Published 5 years ago
type-cfg v1.0.0
Motivation
We all know the pain that comes with using environment variables in your application. Since each variable is a string you have to cast the content of it to actually use it.
With type-cfg there is just one declartion for your entire application: one config to rule them all.
Installation
- Install the node package:
npm install type-cfg --save
ORyarn add type-cfg
- You also need to install
reflect-metadata
shim:npm install reflect-metadata --save
ORyarn add reflect-metadata
- Add
reflect-metadata
to your app-entry file:import 'reflect-metadata';
- 🔥 Enjoy!
Documentation
Basic Usage
import TypeConfig, { Definition, Property } from 'type-cfg';
@Definition()
class Config extends TypeConfig {
@Property({ source: 'NODE_ENV' })
environment: string;
}
const config = new Config();
if (config.environment === 'development') {
// ...
}
Examples
Decorators
@Definition
Scope: Class Decorator
Configuration
-
Usage
@Definition();
@Property
Scope: Property Decorator
Configuration
Property | Required | Default | Description |
---|---|---|---|
source | ❌ | - | The environment variable / object key as a string of the value you want to acquire |
delimiter | ❌ | , | The delimiter used to split the value into an array |
required | ❌ | true | Marks the property as required |
defaultValue | ❌ | - | The default value. Note that the defaultValue will be applied even if the value is required |
Usage
@Property();
@Property(options: PropertyOptions);
@Property(typeFunction: TypeFunction);
@Property(typeFunction: TypeFunction, options: PropertyOptions);
Accumulate
Once your configuration is decorated you can accumulate it...
...by using a function call
import { accumulate } from 'type-cfg';
const config = new MyConfig();
accumulate(config);
// ...
...by using the abstract class
import TypeConfig, { Definition, Property } from 'type-cfg';
class MyConfig extends TypeConfig {
// ...
}
const config = new MyConfig();
// ...
Thank you
A huge thanks goes to the creators of TypeGraphQL and TypeORM. They gave me the inspiration to not only manage GraphQL schemas and Database relations but also configurations.