@nestjs-mod/common
Version:
A collection of utilities for unifying NestJS applications and modules
48 lines • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnvModel = EnvModel;
exports.EnvModelProperty = EnvModelProperty;
const common_1 = require("@nestjs/common");
const constants_1 = require("./constants");
const default_property_value_extractor_1 = require("./extractors/default-property-value.extractor");
const process_env_property_value_extractor_1 = require("./extractors/process-env-property-value.extractor");
const dot_env_property_name_formatter_1 = require("./formatters/dot-env-property-name.formatter");
/**
* Decorator to mark a class as an environment model
* Sets up default property value extractors and name formatters if not provided
* @param options Optional configuration for the environment model
*/
function EnvModel(options) {
const modelOptions = {
...options,
};
// Set default property value extractors if not provided
if (!modelOptions.propertyValueExtractors) {
modelOptions.propertyValueExtractors = [
new default_property_value_extractor_1.DefaultPropertyValueExtractor(),
new process_env_property_value_extractor_1.ProcessEnvPropertyValueExtractor(),
];
}
// Set default property name formatters if not provided
if (!modelOptions.propertyNameFormatters) {
modelOptions.propertyNameFormatters = [new dot_env_property_name_formatter_1.DotEnvPropertyNameFormatter()];
}
return (0, common_1.applyDecorators)((0, common_1.Injectable)(), (target) => {
Reflect.defineMetadata(constants_1.ENV_MODEL_METADATA, {
...modelOptions,
originalName: target.name,
}, target);
});
}
/**
* Decorator to define a property within an environment model
* @param options Property configuration options (excluding originalName)
*/
function EnvModelProperty(options) {
return (target, propertyKey) => {
const existingMetadata = Reflect.getOwnMetadata(constants_1.ENV_MODEL_PROPERTIES_METADATA, target.constructor) || [];
existingMetadata.push({ ...options, originalName: propertyKey });
Reflect.defineMetadata(constants_1.ENV_MODEL_PROPERTIES_METADATA, existingMetadata, target.constructor);
};
}
//# sourceMappingURL=decorators.js.map