UNPKG

@gftdcojp/gftd-orm

Version:

Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture

141 lines 4.11 kB
/** * Configuration Management - 環境変数とセキュリティ設定 */ import dotenv from 'dotenv'; import { log } from './utils/logger'; // 環境変数を読み込み dotenv.config(); /** * 環境変数を取得する関数(必須チェック付き) */ function getEnvVar(name, defaultValue) { const value = process.env[name] || defaultValue; if (!value) { throw new Error(`Environment variable ${name} is required`); } return value; } /** * 環境変数を取得する関数(オプショナル) */ function getOptionalEnvVar(name, defaultValue) { return process.env[name] || defaultValue; } /** * 数値の環境変数を取得 */ function getNumberEnvVar(name, defaultValue) { const value = process.env[name]; if (!value) return defaultValue; const parsed = parseInt(value, 10); if (isNaN(parsed)) { throw new Error(`Environment variable ${name} must be a number`); } return parsed; } /** * ブール値の環境変数を取得 */ function getBooleanEnvVar(name, defaultValue) { const value = process.env[name]; if (!value) return defaultValue; return value.toLowerCase() === 'true'; } // 設定のキャッシュ let _coreConfig = null; let _databaseConfig = null; let _realtimeConfig = null; /** * コア設定 (遅延評価) */ export function getCoreConfig() { if (!_coreConfig) { _coreConfig = { url: getEnvVar('GFTD_URL', 'http://localhost:8088'), serviceRoleKey: getOptionalEnvVar('GFTD_SERVICE_ROLE_KEY'), anonKey: getOptionalEnvVar('GFTD_ANON_KEY'), }; } return _coreConfig; } /** * データベース設定 (遅延評価) */ export function getDatabaseConfig() { if (!_databaseConfig) { _databaseConfig = { ksql: { url: getEnvVar('GFTD_DB_URL', 'http://localhost:8088'), apiKey: getOptionalEnvVar('GFTD_DB_API_KEY'), apiSecret: getOptionalEnvVar('GFTD_DB_API_SECRET'), }, schemaRegistry: { url: getEnvVar('GFTD_SCHEMA_REGISTRY_URL', 'http://localhost:8081'), authUser: getOptionalEnvVar('GFTD_SCHEMA_REGISTRY_AUTH_USER'), authPassword: getOptionalEnvVar('GFTD_SCHEMA_REGISTRY_AUTH_PASSWORD'), apiKey: getOptionalEnvVar('GFTD_SCHEMA_REGISTRY_API_KEY'), }, }; } return _databaseConfig; } /** * リアルタイム設定 (遅延評価) */ export function getRealtimeConfig() { if (!_realtimeConfig) { _realtimeConfig = { url: getEnvVar('GFTD_REALTIME_URL', 'ws://localhost:8088'), apiKey: getOptionalEnvVar('GFTD_REALTIME_API_KEY'), }; } return _realtimeConfig; } // 遅延評価を維持するため、直接的な設定エクスポートは削除 // 各設定は get*Config() 関数を通してアクセスしてください /** * 設定の検証 */ export function validateConfig() { // 基本的な設定の存在確認 const core = getCoreConfig(); const database = getDatabaseConfig(); const realtime = getRealtimeConfig(); if (!core.url) { throw new Error('GFTD_URL is required'); } if (!database.ksql.url) { throw new Error('GFTD_DB_URL is required'); } if (!database.schemaRegistry.url) { throw new Error('GFTD_SCHEMA_REGISTRY_URL is required'); } } /** * 設定の初期化 */ export function initializeConfig() { try { validateConfig(); log.success('Configuration validated successfully'); } catch (error) { log.failure('Configuration validation failed:', error); process.exit(1); } } /** * 開発環境かどうかを判定 */ export const isDevelopment = process.env.NODE_ENV === 'development'; /** * 本番環境かどうかを判定 */ export const isProduction = process.env.NODE_ENV === 'production'; /** * テスト環境かどうかを判定 */ export const isTest = process.env.NODE_ENV === 'test'; //# sourceMappingURL=config.js.map