*/ public const ENV_NAMES = ['POSTGRES_USER', 'PGUSER', 'POSTGRESQL_USERNAME']; public const DEFAULT = 'postgres'; /** * Shell parameter expansion that resolves the user from the container environment. */ public static function shellExpression(): string { return array_reduce( array_reverse(self::ENV_NAMES), fn (string $fallback, string $name): string => '${'.$name.':-'.$fallback.'}', self::DEFAULT, ); } /** * Resolves the user from `env` output lines (NAME=value) of the container. * * @param iterable $envLines */ public static function fromEnvLines(iterable $envLines): string { $values = []; foreach ($envLines as $line) { [$name, $value] = array_pad(explode('=', trim((string) $line), 2), 2, ''); $values[$name] = $value; } foreach (self::ENV_NAMES as $name) { if (($values[$name] ?? '') !== '') { return $values[$name]; } } return self::DEFAULT; } }