< Summary - Envilder Core (TypeScript)

Information
Class: src/envilder/apps/shared/ContainerConfiguration.ts
Assembly: Default
File(s): src/envilder/apps/shared/ContainerConfiguration.ts
Tag: 151_24479375065
Line coverage
100%
Covered lines: 20
Uncovered lines: 0
Coverable lines: 20
Total lines: 95
Line coverage: 100%
Branch coverage
100%
Covered branches: 14
Total branches: 14
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src/envilder/apps/shared/ContainerConfiguration.ts

#LineLine coverage
 1import type { Container } from 'inversify';
 2
 3import { DispatchActionCommandHandler } from '../../core/application/dispatch/DispatchActionCommandHandler.js';
 4import { PullSecretsToEnvCommandHandler } from '../../core/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.j
 5import { PushEnvToSecretsCommandHandler } from '../../core/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.j
 6import { PushSingleCommandHandler } from '../../core/application/pushSingle/PushSingleCommandHandler.js';
 7import { InvalidArgumentError } from '../../core/domain/errors/DomainErrors.js';
 8import type { MapFileConfig } from '../../core/domain/MapFileConfig.js';
 9import type { ILogger } from '../../core/domain/ports/ILogger.js';
 10import type { ISecretProvider } from '../../core/domain/ports/ISecretProvider.js';
 11import type { IVariableStore } from '../../core/domain/ports/IVariableStore.js';
 12import { createAwsSecretProvider } from '../../core/infrastructure/aws/AwsSecretProviderFactory.js';
 13import {
 14  type AzureProviderOptions,
 15  createAzureSecretProvider,
 16} from '../../core/infrastructure/azure/AzureSecretProviderFactory.js';
 17import { ConsoleLogger } from '../../core/infrastructure/logger/ConsoleLogger.js';
 18import { FileVariableStore } from '../../core/infrastructure/variableStore/FileVariableStore.js';
 19import { TYPES } from '../../core/types.js';
 20
 21export type InfrastructureOptions = AzureProviderOptions;
 22
 23type ProviderFactory = (
 24  config: MapFileConfig,
 25  options: InfrastructureOptions,
 26) => ISecretProvider;
 27
 728const providerFactories: Record<string, ProviderFactory> = {
 2229  aws: (config) => createAwsSecretProvider(config),
 1730  azure: (config, options) => createAzureSecretProvider(config, options),
 31};
 32
 33export function configureInfrastructureServices(
 34  container: Container,
 35  config: MapFileConfig = {},
 36  options: InfrastructureOptions = {},
 37): void {
 4238  if (!container.isBound(TYPES.ILogger)) {
 3739    container.bind<ILogger>(TYPES.ILogger).to(ConsoleLogger).inSingletonScope();
 40  }
 41
 4242  if (!container.isBound(TYPES.IVariableStore)) {
 4143    container
 44      .bind<IVariableStore>(TYPES.IVariableStore)
 45      .to(FileVariableStore)
 46      .inSingletonScope();
 47  }
 48
 4249  const selectedProvider = config.provider?.toLowerCase() || 'aws';
 50
 4251  if (config.profile && selectedProvider !== 'aws') {
 152    const logger = container.get<ILogger>(TYPES.ILogger);
 153    logger.warn(
 54      `--profile is only supported with the aws provider` +
 55        ` and will be ignored` +
 56        ` (current provider: ${selectedProvider}).`,
 57    );
 58  }
 59
 4260  const factory = providerFactories[selectedProvider];
 4261  if (!factory) {
 362    throw new InvalidArgumentError(
 63      `Unsupported provider: ${config.provider}.` +
 64        ` Supported providers:` +
 65        ` ${Object.keys(providerFactories).join(', ')}`,
 66    );
 67  }
 3968  const secretProvider = factory(config, options);
 69
 3970  container
 71    .bind<ISecretProvider>(TYPES.ISecretProvider)
 72    .toConstantValue(secretProvider);
 73}
 74
 75export function configureApplicationServices(container: Container): void {
 3876  container
 77    .bind<PullSecretsToEnvCommandHandler>(TYPES.PullSecretsToEnvCommandHandler)
 78    .to(PullSecretsToEnvCommandHandler)
 79    .inTransientScope();
 80
 3881  container
 82    .bind<PushEnvToSecretsCommandHandler>(TYPES.PushEnvToSecretsCommandHandler)
 83    .to(PushEnvToSecretsCommandHandler)
 84    .inTransientScope();
 85
 3886  container
 87    .bind<PushSingleCommandHandler>(TYPES.PushSingleCommandHandler)
 88    .to(PushSingleCommandHandler)
 89    .inTransientScope();
 90
 3891  container
 92    .bind<DispatchActionCommandHandler>(TYPES.DispatchActionCommandHandler)
 93    .to(DispatchActionCommandHandler)
 94    .inTransientScope();
 95}