UNPKG

@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
"use strict"; 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