nest-simple-config
Version:
A powerful and flexible configuration management library for NestJS applications. Supports JSON, YAML file loading, environment variable overrides, immutable configurations, and type-safe configuration access with dependency injection.
49 lines (48 loc) • 2.55 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var ConfigOptionsModule_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigOptionsModule = void 0;
/* eslint-disable @typescript-eslint/ban-types */
const class_transformer_1 = require("class-transformer");
const class_validator_1 = require("class-validator");
const common_1 = require("@nestjs/common");
const _1 = require(".");
const bind_option_token_1 = require("./utils/bind-option-token");
const bind_option_decorator_1 = require("./decorators/bind-option.decorator");
const options_1 = require("./types/options");
let ConfigOptionsModule = exports.ConfigOptionsModule = ConfigOptionsModule_1 = class ConfigOptionsModule {
static register(optionTypes) {
const providers = optionTypes.map((type) => {
const section = Reflect.getMetadata(bind_option_decorator_1.BIND_OPTION_METADATA, type);
if (!section)
throw new Error(`Missing @BindOption for ${type.name}`);
return {
provide: (0, bind_option_token_1.getBindOptionToken)(type),
useFactory: (config) => {
const raw = config.get(section);
const instance = (0, class_transformer_1.plainToInstance)(type, raw, { enableImplicitConversion: true });
const errors = (0, class_validator_1.validateSync)(instance, { whitelist: true });
if (errors.length > 0) {
throw new Error(`Invalid config for ${type.name}: ${JSON.stringify(errors)}`);
}
return new options_1.Options(instance);
},
inject: [_1.Configuration],
};
});
return {
module: ConfigOptionsModule_1,
providers,
exports: providers,
};
}
};
exports.ConfigOptionsModule = ConfigOptionsModule = ConfigOptionsModule_1 = __decorate([
(0, common_1.Module)({})
], ConfigOptionsModule);