@gftdcojp/gftd-orm
Version:
Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture
141 lines • 4.11 kB
JavaScript
/**
* 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