@twg-group/container-manager
Version:
Container management for Docker, Swarm, Kubernetes
98 lines • 4.29 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 __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeployConfigDto = void 0;
const class_transformer_1 = require("class-transformer");
const class_validator_1 = require("class-validator");
const port_binding_dto_1 = require("./port-binding.dto");
const volume_binding_dto_1 = require("./volume-binding.dto");
const class_transformer_2 = require("class-transformer");
class DeployConfigDto {
image;
name;
env;
ports;
volumes;
replicas = 1;
network;
labels;
restartPolicy = true;
static create(config) {
const instance = (0, class_transformer_2.plainToClass)(DeployConfigDto, config, {
enableImplicitConversion: true,
});
const errors = (0, class_validator_1.validateSync)(instance);
if (errors.length > 0) {
const errorMessages = errors.flatMap((e) => Object.values(e.constraints ?? {}));
throw new Error(`Configuration error: ${errorMessages.join('; ')}`);
}
return instance;
}
}
exports.DeployConfigDto = DeployConfigDto;
__decorate([
(0, class_validator_1.IsNotEmpty)({ message: 'Image must be specified' }),
(0, class_validator_1.IsString)(),
__metadata("design:type", String)
], DeployConfigDto.prototype, "image", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsString)(),
(0, class_validator_1.Matches)(/^[a-z0-9-_]+$/, {
message: 'Name can only contain lowercase letters, numbers, hyphens and underscores',
}),
__metadata("design:type", String)
], DeployConfigDto.prototype, "name", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsObject)(),
__metadata("design:type", Object)
], DeployConfigDto.prototype, "env", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsArray)(),
(0, class_validator_1.ValidateNested)({ each: true }),
(0, class_transformer_1.Type)(() => port_binding_dto_1.PortBindingDto),
__metadata("design:type", Array)
], DeployConfigDto.prototype, "ports", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsArray)(),
(0, class_validator_1.ValidateNested)({ each: true }),
(0, class_transformer_1.Type)(() => volume_binding_dto_1.VolumeBindingDto),
__metadata("design:type", Array)
], DeployConfigDto.prototype, "volumes", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsInt)(),
(0, class_validator_1.Min)(1, { message: 'Minimum 1 replica required' }),
(0, class_validator_1.Max)(20, { message: 'Maximum 20 replicas allowed' }),
__metadata("design:type", Number)
], DeployConfigDto.prototype, "replicas", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsString)(),
(0, class_validator_1.Matches)(/^[a-z0-9-_]+$/, {
message: 'Network name can only contain lowercase letters, numbers, hyphens and underscores',
}),
__metadata("design:type", String)
], DeployConfigDto.prototype, "network", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsObject)(),
__metadata("design:type", Object)
], DeployConfigDto.prototype, "labels", void 0);
__decorate([
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsBoolean)(),
__metadata("design:type", Boolean)
], DeployConfigDto.prototype, "restartPolicy", void 0);
//# sourceMappingURL=deploy-config.dto.js.map