@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
JavaScript
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
;