@nestjs-mod/docker-compose
Version:
Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience. (Generator docker-compose.yml for https://docs.docker.com/compose)
144 lines • 9.3 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DockerComposeRedis = void 0;
const common_1 = require("@nestjs-mod/common");
const case_anything_1 = require("case-anything");
const docker_compose_module_1 = require("../../docker-compose.module");
const docker_compose_utils_1 = require("../../docker-compose.utils");
const docker_compose_redis_errors_1 = require("./docker-compose-redis-errors");
const docker_compose_redis_constants_1 = require("./docker-compose-redis.constants");
const docker_compose_redis_settings_1 = require("./docker-compose-redis.settings");
const docker_compose_redis_utils_1 = require("./docker-compose-redis.utils");
exports.DockerComposeRedis = (0, common_1.createNestModule)({
moduleName: docker_compose_redis_constants_1.DOCKER_COMPOSE_REDIS_MODULE_NAME,
moduleDescription: 'The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker. (Generator for redis in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)',
globalEnvironmentsOptions: { skipValidation: true },
globalConfigurationOptions: { skipValidation: true },
staticConfigurationModel: docker_compose_redis_settings_1.DockerComposeRedisConfiguration,
staticEnvironmentsModel: docker_compose_redis_settings_1.DockerComposeRedisEnvironments,
wrapForRootAsync: (asyncModuleOptions) => {
if (!asyncModuleOptions) {
asyncModuleOptions = {};
}
if (asyncModuleOptions.staticConfiguration?.featureName) {
const FomatterClass = (0, common_1.getFeatureDotEnvPropertyNameFormatter)(asyncModuleOptions.staticConfiguration.featureName);
Object.assign(asyncModuleOptions, {
environmentsOptions: {
propertyNameFormatters: [new FomatterClass()],
name: asyncModuleOptions.staticConfiguration?.featureName,
},
});
}
return { asyncModuleOptions };
},
preWrapApplication: async ({ project, modules, current }) => {
if (!modules[common_1.NestModuleCategory.infrastructure]) {
modules[common_1.NestModuleCategory.infrastructure] = [];
}
const dockerComposeRedisModule = (0, common_1.createNestModule)({
project,
moduleName: docker_compose_redis_constants_1.DOCKER_COMPOSE_REDIS_MODULE_NAME,
moduleDescription: 'The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker. (Generator for redis in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)',
moduleCategory: common_1.NestModuleCategory.infrastructure,
globalEnvironmentsOptions: { name: project?.name, skipValidation: (0, common_1.isInfrastructureMode)() },
globalConfigurationOptions: { name: project?.name, skipValidation: (0, common_1.isInfrastructureMode)() },
staticConfigurationModel: docker_compose_redis_settings_1.DockerComposeRedisConfiguration,
staticEnvironmentsModel: docker_compose_redis_settings_1.DockerComposeRedisEnvironments,
wrapForRootAsync: (asyncModuleOptions) => {
if (!asyncModuleOptions) {
asyncModuleOptions = {};
}
if (asyncModuleOptions.staticConfiguration?.featureName) {
const FomatterClass = (0, common_1.getFeatureDotEnvPropertyNameFormatter)(asyncModuleOptions.staticConfiguration.featureName);
Object.assign(asyncModuleOptions, {
environmentsOptions: {
propertyNameFormatters: [new FomatterClass()],
name: asyncModuleOptions.staticConfiguration?.featureName,
},
});
}
return { asyncModuleOptions };
},
imports: ({ contextName, project, staticConfiguration, staticEnvironments }) => {
const networks = (project?.name
? staticConfiguration?.networks?.map((n) => ({
...n,
name: (0, case_anything_1.kebabCase)([project?.name, n.name, 'network'].filter(Boolean).join('-')),
})) ?? [{ name: (0, case_anything_1.kebabCase)(`${project?.name}-network`), driver: 'bridge' }]
: staticConfiguration?.networks) ?? [];
if (networks?.length === 0) {
networks.push({ name: 'default-network', driver: 'bridge' });
}
const networkNames = networks?.map((n) => n.name);
const serviceName = (0, docker_compose_utils_1.getDockerComposeServiceName)(project?.name, docker_compose_utils_1.DockerComposeServiceType.Redis);
let redisSettings = undefined;
if (!staticEnvironments?.redisUrl && !(0, common_1.isInfrastructureMode)()) {
throw new docker_compose_redis_errors_1.DockerComposeRedisError('redisUrl not set');
}
if (staticEnvironments?.redisUrl) {
redisSettings = (0, docker_compose_redis_utils_1.redisUrlParse)(staticEnvironments.redisUrl);
}
return [
common_1.ProjectUtils.forFeature({
featureModuleName: docker_compose_redis_constants_1.DOCKER_COMPOSE_REDIS_MODULE_NAME,
contextName,
}),
docker_compose_module_1.DockerCompose.forFeature({
contextName,
featureModuleName: (0, case_anything_1.constantCase)(serviceName),
featureConfiguration: {
services: {
[serviceName]: {
image: staticConfiguration?.image,
container_name: serviceName,
volumes: [`${serviceName}-volume:/bitnami/redis/data`],
ports: [`${staticConfiguration?.externalPort}:6379`],
networks: networkNames,
environment: {
...(redisSettings?.database
? {
REDIS_DATABASE: redisSettings?.database,
}
: {}),
...(redisSettings?.password ? { REDIS_PASSWORD: redisSettings?.password } : {}),
...(staticConfiguration?.disableCommands
? { REDIS_DISABLE_COMMANDS: staticConfiguration?.disableCommands }
: {}),
...(staticConfiguration?.ioThreads ? { REDIS_IO_THREADS: staticConfiguration?.ioThreads } : {}),
...(staticConfiguration?.ioThreadsDoReads
? { REDIS_IO_THREADS_DO_READS: staticConfiguration?.ioThreadsDoReads }
: {}),
},
keysOfEnvironmentsWithStaticValue: [
'disableCommands',
'featureName',
'image',
'ioThreads',
'ioThreadsDoReads',
'networks',
],
healthcheck: {
test: redisSettings?.password
? ['CMD-SHELL', 'redis-cli --no-auth-warning -a $$REDIS_PASSWORD ping | grep PONG']
: ['CMD-SHELL', 'redis-cli ping | grep PONG'],
interval: '5s',
timeout: '5s',
retries: 5,
},
tty: true,
restart: 'always',
},
},
networks: networks.reduce((all, cur) => ({ ...all, [cur.name]: { driver: cur.driver } }), {}),
volumes: {
[`${serviceName}-volume`]: { name: `${serviceName}-volume` },
},
},
}),
];
},
}).DockerComposeRedis;
modules[common_1.NestModuleCategory.infrastructure].push(dockerComposeRedisModule.forRootAsync(current.asyncModuleOptions));
},
}).DockerComposeRedis;
//# sourceMappingURL=docker-compose-redis.module.js.map
;