@gftdcojp/gftd-orm
Version:
Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture
126 lines (124 loc) • 4.45 kB
JavaScript
/**
* Next.js環境対応のクライアントエントリポイント
* 環境を自動判定して適切なクライアントを提供
*/
import { isBrowser, isServerSide, getEnvironmentInfo } from '../utils/env';
// 型定義をエクスポート
export * from './types';
// 環境別クライアントを個別にエクスポート
export { BrowserClient, createBrowserClient, createNextBrowserClient } from './browser';
export { ServerClient, createServerClient, createNextServerClient, createServerClientFromEnv } from './server';
// 環境判定ユーティリティ
export { getEnvironmentInfo } from '../utils/env';
/**
* 環境を自動判定してクライアントを作成
*/
export function createClient(config) {
if (isBrowser()) {
const { createBrowserClient } = require('./browser');
return createBrowserClient(config);
}
else if (isServerSide()) {
const { createServerClient } = require('./server');
return createServerClient(config);
}
else {
throw new Error('Unable to determine environment. Please use createBrowserClient or createServerClient explicitly.');
}
}
/**
* Next.js専用のクライアント作成関数
*/
export function createNextClient(config) {
if (isBrowser()) {
const { createNextBrowserClient } = require('./browser');
return createNextBrowserClient(config);
}
else if (isServerSide()) {
const { createNextServerClient } = require('./server');
return createNextServerClient(config);
}
else {
throw new Error('Unable to determine Next.js environment. Please use createNextBrowserClient or createNextServerClient explicitly.');
}
}
/**
* 環境情報を取得
*/
export function getClientEnvironment() {
return getEnvironmentInfo();
}
/**
* 環境の検証
*/
export function validateEnvironment() {
const env = getEnvironmentInfo();
if (!env.isBrowser && !env.isServerSide) {
throw new Error('Invalid environment: Neither browser nor server environment detected.');
}
if (env.isBrowser && env.isServerSide) {
throw new Error('Invalid environment: Both browser and server environment detected.');
}
return env;
}
/**
* 開発用の環境情報表示
*/
export function logEnvironmentInfo() {
const env = getEnvironmentInfo();
console.log('🌍 Environment Information:');
console.log(` • Browser: ${env.isBrowser ? '✅' : '❌'}`);
console.log(` • Node.js: ${env.isNode ? '✅' : '❌'}`);
console.log(` • Next.js: ${env.isNextJS ? '✅' : '❌'}`);
console.log(` • Server-side: ${env.isServerSide ? '✅' : '❌'}`);
console.log(` • Client-side: ${env.isClientSide ? '✅' : '❌'}`);
console.log(` • Development: ${env.isDevelopment ? '✅' : '❌'}`);
console.log(` • Production: ${env.isProduction ? '✅' : '❌'}`);
return env;
}
/**
* 推奨されるクライアント作成方法を表示
*/
export function getRecommendedClientUsage() {
const env = getEnvironmentInfo();
if (env.isBrowser) {
return {
recommendation: 'Browser Client',
usage: 'Use createBrowserClient() or createNextBrowserClient() for Client Components',
example: `
import { createBrowserClient } from '@gftdcojp/gftd-orm/client';
const client = createBrowserClient({
url: 'https://your-api.com',
database: {
ksql: { url: 'https://your-ksql.com', apiKey: 'public-key' },
schemaRegistry: { url: 'https://your-sr.com', apiKey: 'public-key' }
}
});
`,
};
}
else if (env.isServerSide) {
return {
recommendation: 'Server Client',
usage: 'Use createServerClient() or createNextServerClient() for Server Components and API Routes',
example: `
import { createServerClient } from '@gftdcojp/gftd-orm/client';
const client = createServerClient({
url: 'https://your-api.com',
database: {
ksql: { url: 'https://your-ksql.com', apiKey: 'api-key', apiSecret: 'secret' },
schemaRegistry: { url: 'https://your-sr.com', authUser: 'user', authPassword: 'pass' }
}
});
`,
};
}
else {
return {
recommendation: 'Unknown Environment',
usage: 'Please check your environment configuration',
example: 'Unable to determine appropriate client type',
};
}
}
//# sourceMappingURL=index.js.map