UNPKG

@gftdcojp/gftd-orm

Version:

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

188 lines 4.96 kB
/** * クライアントサイド専用設定管理 * process.env を使わずに設定を管理 */ import { isBrowser } from './utils/env'; /** * グローバル設定のキャッシュ */ let globalClientConfig = null; /** * ブラウザ環境検証 */ function validateBrowserEnvironment() { if (!isBrowser()) { throw new Error('Client configuration can only be used in browser environment'); } } /** * クライアント設定を設定 */ export function setClientConfig(config) { validateBrowserEnvironment(); globalClientConfig = { ...config }; } /** * クライアント設定を取得 */ export function getClientConfig() { validateBrowserEnvironment(); return globalClientConfig; } /** * 必須設定を取得(エラーチェック付き) */ export function getRequiredClientConfig() { const config = getClientConfig(); if (!config) { throw new Error('Client configuration is not set. Call setClientConfig() first.'); } return config; } /** * データベース設定を取得 */ export function getDatabaseConfig() { const config = getRequiredClientConfig(); if (!config.database) { throw new Error('Database configuration is not set'); } return config.database; } /** * ksqlDB設定を取得 */ export function getKsqlDbConfig() { const dbConfig = getDatabaseConfig(); if (!dbConfig.ksql) { throw new Error('ksqlDB configuration is not set'); } return dbConfig.ksql; } /** * Schema Registry設定を取得 */ export function getSchemaRegistryConfig() { const dbConfig = getDatabaseConfig(); if (!dbConfig.schemaRegistry) { throw new Error('Schema Registry configuration is not set'); } return dbConfig.schemaRegistry; } /** * リアルタイム設定を取得 */ export function getRealtimeConfig() { const config = getRequiredClientConfig(); if (!config.realtime) { throw new Error('Realtime configuration is not set'); } return config.realtime; } /** * グローバル設定を取得 */ export function getGlobalConfig() { const config = getRequiredClientConfig(); return config.global || {}; } /** * デフォルト設定を作成 */ export function createDefaultConfig(baseUrl) { return { url: baseUrl, database: { ksql: { url: baseUrl, }, schemaRegistry: { url: baseUrl.replace(':8088', ':8081'), // デフォルトポート変更 }, }, realtime: { url: baseUrl.replace('http', 'ws'), autoReconnect: true, reconnectInterval: 1000, maxReconnectAttempts: 5, }, global: { timeout: 30000, retries: 3, }, }; } /** * 設定を検証 */ export function validateClientConfig(config) { if (!config.url) { throw new Error('Base URL is required'); } if (config.database) { if (config.database.ksql && !config.database.ksql.url) { throw new Error('ksqlDB URL is required'); } if (config.database.schemaRegistry && !config.database.schemaRegistry.url) { throw new Error('Schema Registry URL is required'); } } if (config.realtime && !config.realtime.url) { throw new Error('Realtime URL is required'); } } /** * 設定を初期化 */ export function initializeClientConfig(config) { validateClientConfig(config); setClientConfig(config); } /** * 設定をリセット */ export function resetClientConfig() { globalClientConfig = null; } /** * 設定が初期化されているかチェック */ export function isClientConfigInitialized() { return globalClientConfig !== null; } /** * 設定をマージ */ export function mergeClientConfig(additionalConfig) { const currentConfig = getClientConfig(); if (currentConfig) { const mergedConfig = { ...currentConfig, ...additionalConfig, }; // 個別にマージが必要な場合のみ処理 if (currentConfig.database && additionalConfig.database) { mergedConfig.database = { ...currentConfig.database, ...additionalConfig.database, }; } if (currentConfig.realtime && additionalConfig.realtime) { mergedConfig.realtime = { ...currentConfig.realtime, ...additionalConfig.realtime, }; } if (currentConfig.global && additionalConfig.global) { mergedConfig.global = { ...currentConfig.global, ...additionalConfig.global, }; } setClientConfig(mergedConfig); } else { throw new Error('Cannot merge configuration: no base configuration set'); } } //# sourceMappingURL=client-config.js.map