Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/m19c/type-cfg
Declare your configuration schema using classes and decorators.
https://github.com/m19c/type-cfg
config configuration decorators environment nodejs typescript
Last synced: 3 months ago
JSON representation
Declare your configuration schema using classes and decorators.
- Host: GitHub
- URL: https://github.com/m19c/type-cfg
- Owner: m19c
- License: mit
- Created: 2019-06-03T10:44:01.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-03T23:23:52.000Z (about 2 years ago)
- Last Synced: 2024-05-01T13:08:18.129Z (9 months ago)
- Topics: config, configuration, decorators, environment, nodejs, typescript
- Language: TypeScript
- Homepage:
- Size: 804 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
## 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
1. Install the node package:
`npm install type-cfg --save` OR `yarn add type-cfg`
1. You also need to install `reflect-metadata` shim:
`npm install reflect-metadata --save` OR `yarn add reflect-metadata`
1. Add `reflect-metadata` to your app-entry file:
`import 'reflect-metadata';`
1. 🔥 Enjoy!## Documentation
### Basic Usage
```typescript
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
- [Basic Usage](https://github.com/m19c/type-cfg/blob/master/examples/simple.ts)
- [Arrays](https://github.com/m19c/type-cfg/blob/master/examples/array.ts)
- [Nested](https://github.com/m19c/type-cfg/blob/master/examples/nested.ts)
- [TypeDI](https://github.com/m19c/type-cfg/blob/master/examples/typedi.ts)### Decorators
#### `@Definition`
Scope: Class Decorator
**Configuration**
-
**Usage**
```typescript
@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**
```typescript
@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
```typescript
import { accumulate } from 'type-cfg';const config = new MyConfig();
accumulate(config);// ...
```#### ...by using the abstract class
```typescript
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.