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)

110 lines 7.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DockerComposePostgreSQL = void 0; const common_1 = require("@nestjs-mod/common"); const case_anything_1 = require("case-anything"); const rxjs_1 = require("rxjs"); const docker_compose_module_1 = require("../../docker-compose.module"); const docker_compose_utils_1 = require("../../docker-compose.utils"); const docker_compose_postgresql_database_service_1 = require("./docker-compose-postgresql-database.service"); const docker_compose_postgresql_constants_1 = require("./docker-compose-postgresql.constants"); const docker_compose_postgresql_service_1 = require("./docker-compose-postgresql.service"); const docker_compose_postgresql_settings_1 = require("./docker-compose-postgresql.settings"); // eslint-disable-next-line @typescript-eslint/no-explicit-any let globalDockerComposePostgresModule; const globalDockerComposePostgresService = {}; // todo: try refactor all in this file later const globalDockerComposePostgresModuleInitStream = new rxjs_1.Subject(); exports.DockerComposePostgreSQL = (0, common_1.createNestModule)({ moduleName: docker_compose_postgresql_constants_1.DOCKER_COMPOSE_POSTGRES_MODULE_NAME, moduleDescription: 'PostgreSQL (Postgres) is an open source object-relational database known for reliability and data integrity. ACID-compliant, it supports foreign keys, joins, views, triggers and stored procedures. (Generator for databases in docker-compose.yml for https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/libs/infrastructure/docker-compose)', globalEnvironmentsOptions: { skipValidation: true }, globalConfigurationOptions: { skipValidation: true }, staticConfigurationModel: docker_compose_postgresql_settings_1.DockerComposePostgresConfiguration, staticEnvironmentsModel: docker_compose_postgresql_settings_1.DockerComposePostgresEnvironments, featureEnvironmentsModel: docker_compose_postgresql_settings_1.DockerComposePostgresFeatureEnvironments, featureConfigurationModel: docker_compose_postgresql_settings_1.DockerComposePostgresFeatureConfiguration, sharedImports: [docker_compose_module_1.DockerCompose.forFeature({ featureModuleName: docker_compose_postgresql_constants_1.DOCKER_COMPOSE_POSTGRES_MODULE_NAME })], sharedProviders: [docker_compose_postgresql_service_1.DockerComposePostgresService, docker_compose_postgresql_database_service_1.DockerComposePostgresDatabaseService], wrapForFeatureAsync: (asyncModuleOptions) => { return { module: (0, rxjs_1.firstValueFrom)(globalDockerComposePostgresModuleInitStream.pipe((0, rxjs_1.concatMap)(async () => globalDockerComposePostgresModule.forFeatureAsync(asyncModuleOptions)))), }; }, preWrapApplication: async ({ project, modules, current }) => { if (!modules[common_1.NestModuleCategory.infrastructure]) { modules[common_1.NestModuleCategory.infrastructure] = []; } const networks = (project?.name ? current.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' }] : current.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.PostgreSQL); globalDockerComposePostgresModule = (0, common_1.createNestModule)({ project, moduleName: docker_compose_postgresql_constants_1.DOCKER_COMPOSE_POSTGRES_MODULE_NAME, moduleDescription: 'PostgreSQL (Postgres) is an open source object-relational database known for reliability and data integrity. ACID-compliant, it supports foreign keys, joins, views, triggers and stored procedures. (Generator for databases in docker-compose.yml for https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/libs/infrastructure/docker-compose)', moduleCategory: common_1.NestModuleCategory.infrastructure, staticConfigurationModel: docker_compose_postgresql_settings_1.DockerComposePostgresConfiguration, staticEnvironmentsModel: docker_compose_postgresql_settings_1.DockerComposePostgresEnvironments, featureEnvironmentsModel: docker_compose_postgresql_settings_1.DockerComposePostgresFeatureEnvironments, featureConfigurationModel: docker_compose_postgresql_settings_1.DockerComposePostgresFeatureConfiguration, globalEnvironmentsOptions: { name: project?.name, skipValidation: (0, common_1.isInfrastructureMode)() }, globalConfigurationOptions: { name: project?.name, skipValidation: (0, common_1.isInfrastructureMode)() }, providers: [ docker_compose_postgresql_service_1.DockerComposePostgresService, docker_compose_postgresql_database_service_1.DockerComposePostgresDatabaseService, { provide: `DockerComposePostgresService_map_to_main`, useFactory: (dockerComposePostgresService) => { Object.setPrototypeOf(globalDockerComposePostgresService, dockerComposePostgresService); Object.assign(globalDockerComposePostgresService, dockerComposePostgresService); }, inject: [docker_compose_postgresql_service_1.DockerComposePostgresService], }, ], imports: [ common_1.ProjectUtils.forFeature({ featureModuleName: docker_compose_postgresql_constants_1.DOCKER_COMPOSE_POSTGRES_MODULE_NAME, contextName: current.asyncModuleOptions.contextName, }), docker_compose_module_1.DockerCompose.forFeature({ contextName: current.asyncModuleOptions.contextName, featureModuleName: (0, case_anything_1.constantCase)(serviceName), featureConfiguration: { services: { [serviceName]: { image: current.staticConfiguration?.image, container_name: serviceName, volumes: [`${serviceName}-volume:/bitnami/postgresql`], ports: [`${current.staticConfiguration?.externalPort}:5432`], networks: networkNames, healthcheck: { test: ['CMD-SHELL', 'pg_isready -U postgres'], 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` }, }, }, }), ], }).DockerComposePostgreSQL; globalDockerComposePostgresModuleInitStream.next(true); modules[common_1.NestModuleCategory.infrastructure].push(globalDockerComposePostgresModule.forRootAsync(current.asyncModuleOptions)); }, }).DockerComposePostgreSQL; //# sourceMappingURL=docker-compose-postgresql.module.js.map