@adopture/next
Version:
Next.js SDK for Adopture feature adoption tracking with SSR support
1 lines • 6.33 kB
Source Map (JSON)
{"version":3,"sources":["../src/shared/config-loader.ts"],"names":["adoptureConfigFileSchema","z","loadConfigFile","cwd","fs","join","configPath","content","parsed","result","error","loadConfigFromWindow","globalConfig","convertConfigFileToNextConfig","configFile","convertConfigFileToServerConfig","mergeConfigs","envConfig","configFileConfig","manualConfig","key","value"],"mappings":"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","file":"chunk-ZCOFW4UQ.mjs","sourcesContent":["import { z } from 'zod';\nimport type { NextAdoptureConfig, ServerAdoptureConfig } from '../types';\n\n/**\n * Schema for .adopture.config.json file\n * Matches the schema used by CLI\n */\nexport const adoptureConfigFileSchema = z.object({\n projectId: z.string().uuid(),\n projectName: z.string().min(1),\n apiKey: z.string().regex(/^ad_(live|test)_[a-zA-Z0-9]+$/),\n environment: z.enum(['live', 'test']),\n apiUrl: z.string().url(),\n});\n\nexport type AdoptureConfigFile = z.infer<typeof adoptureConfigFileSchema>;\n\n/**\n * Load .adopture.config.json file from the file system\n * This only works in Node.js environments (server-side)\n */\nexport async function loadConfigFile(cwd?: string): Promise<AdoptureConfigFile | null> {\n // Only attempt to load on server-side\n if (typeof window !== 'undefined') {\n return null;\n }\n\n try {\n // Dynamic import to avoid bundling filesystem modules on client\n const { promises: fs } = await import('fs');\n const { join } = await import('path');\n\n const configPath = join(cwd || process.cwd(), '.adopture.config.json');\n const content = await fs.readFile(configPath, 'utf-8');\n const parsed = JSON.parse(content);\n\n const result = adoptureConfigFileSchema.safeParse(parsed);\n if (!result.success) {\n console.warn('[ADOPTURE] Invalid .adopture.config.json file:', result.error.message);\n return null;\n }\n\n return result.data;\n } catch (error) {\n // Config file not found or other error - this is not a failure\n if ((error as any)?.code !== 'ENOENT') {\n console.warn('[ADOPTURE] Failed to load .adopture.config.json:', error);\n }\n return null;\n }\n}\n\n/**\n * Load config for browser environments by checking if config was injected\n * This can be used when config is injected at build time\n */\nexport function loadConfigFromWindow(): Partial<NextAdoptureConfig> | null {\n if (typeof window === 'undefined') {\n return null;\n }\n\n try {\n // Check if config was injected by build process\n const globalConfig = (window as any).__ADOPTURE_CONFIG__;\n if (globalConfig && typeof globalConfig === 'object') {\n return globalConfig;\n }\n } catch {\n // Ignore errors\n }\n\n return null;\n}\n\n/**\n * Convert config file format to Next.js config format\n */\nexport function convertConfigFileToNextConfig(configFile: AdoptureConfigFile): Partial<NextAdoptureConfig> {\n return {\n apiKey: configFile.apiKey,\n apiUrl: configFile.apiUrl,\n projectId: configFile.projectId,\n environment: configFile.environment,\n };\n}\n\n/**\n * Convert config file format to Server config format\n */\nexport function convertConfigFileToServerConfig(configFile: AdoptureConfigFile): Partial<ServerAdoptureConfig> {\n return {\n apiKey: configFile.apiKey,\n apiUrl: configFile.apiUrl,\n projectId: configFile.projectId,\n environment: configFile.environment,\n };\n}\n\n/**\n * Merge configurations with priority: manual > configFile > environment\n */\nexport function mergeConfigs<T extends Record<string, any>>(\n envConfig: T,\n configFileConfig: Partial<T> | null,\n manualConfig: Partial<T>\n): T {\n const result = { ...envConfig };\n\n // Apply config file values (lower priority than manual config)\n if (configFileConfig) {\n Object.entries(configFileConfig).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n (result as any)[key] = value;\n }\n });\n }\n\n // Apply manual config (highest priority)\n if (manualConfig) {\n Object.entries(manualConfig).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n (result as any)[key] = value;\n }\n });\n }\n\n return result;\n}"]}