Files
image-platform/apps/worker/src/config.ts

41 lines
1.1 KiB
TypeScript
Raw Normal View History

import { loadQueueTopologyFromEnv, type QueueTopology } from "@image-platform/queue"
import { loadStorageConfigFromEnv, type StorageConfig } from "@image-platform/storage"
export type WorkerConfig = {
imgproxyUpstream: URL
prefetch: number
queueTopology: QueueTopology
rabbitmqUrl: string
storage: StorageConfig
}
export function loadWorkerConfig(env: NodeJS.ProcessEnv = process.env): WorkerConfig {
return {
imgproxyUpstream: new URL(getRequiredEnv(env, "IMGPROXY_UPSTREAM")),
prefetch: parsePositiveInteger(env.WORKER_PREFETCH, 2),
queueTopology: loadQueueTopologyFromEnv(env),
rabbitmqUrl: getRequiredEnv(env, "RABBITMQ_URL"),
storage: loadStorageConfigFromEnv(env),
}
}
function getRequiredEnv(env: NodeJS.ProcessEnv, name: string) {
const value = env[name]
if (!value) {
throw new Error(`${name} is required`)
}
return value
}
function parsePositiveInteger(value: string | undefined, fallback: number) {
if (!value) {
return fallback
}
const parsed = Number.parseInt(value, 10)
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : fallback
}