diff --git a/crop-x/env/.env.dev b/crop-x/env/.env.dev new file mode 100644 index 0000000..6c47580 --- /dev/null +++ b/crop-x/env/.env.dev @@ -0,0 +1,23 @@ +# 开发环境配置 +NODE_ENV=development + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.dev.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=https://cavin-smart-crop-backend-app.dev.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=true + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=开发环境 \ No newline at end of file diff --git a/crop-x/env/.env.prod b/crop-x/env/.env.prod new file mode 100644 index 0000000..4846d46 --- /dev/null +++ b/crop-x/env/.env.prod @@ -0,0 +1,43 @@ +# 生产环境配置 +NODE_ENV=production + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.prod.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=https://cavin-smart-crop-backend-app.prod.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=false + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=生产环境 + +# 生产环境特有配置 +API_TIMEOUT=30000 +ENABLE_ERROR_LOGGING=true +ENABLE_PERFORMANCE_MONITORING=true +ENABLE_USER_BEHAVIOR_TRACKING=true +ENABLE_ANALYTICS=true + +# 安全配置 +SENTRY_DSN=https://your-sentry-dsn.prod@sentry.io/project-id +CDN_BASE_URL=https://cdn.cavin-smart-crop.com + +# 功能开关 +ENABLE_MAINTENANCE_MODE=false +ENABLE_NEW_FEATURES=true +ENABLE_BETA_FEATURES=false + +# 缓存配置 +CACHE_TTL=3600 +ENABLE_SERVICE_WORKER=true \ No newline at end of file diff --git a/crop-x/env/.env.test b/crop-x/env/.env.test new file mode 100644 index 0000000..413f02a --- /dev/null +++ b/crop-x/env/.env.test @@ -0,0 +1,28 @@ +# 测试环境配置 +NODE_ENV=test + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.test.maimaiag.com + +# 后端 API 地址 (等待后端部署,先用开发环境的) +BACKEND_BASE_URL=https://cavin-smart-crop-backend-app.dev.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=true + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=测试环境 + +# 其他测试环境特有配置 +API_TIMEOUT=15000 +ENABLE_ERROR_LOGGING=true +ENABLE_PERFORMANCE_MONITORING=true \ No newline at end of file diff --git a/crop-x/env/.env.uat b/crop-x/env/.env.uat new file mode 100644 index 0000000..2226ac9 --- /dev/null +++ b/crop-x/env/.env.uat @@ -0,0 +1,30 @@ +# UAT (用户验收测试) 环境配置 +NODE_ENV=production + +# 前端域名 +FRONTEND_BASE_URL=https://cavin-smart-crop-ui-app.uat.maimaiag.com + +# 后端 API 地址 +BACKEND_BASE_URL=https://cavin-smart-crop-backend-app.uat.maimaiag.com + +# API 版本 +API_VERSION=v1 + +# 调试模式 +DEBUG=false + +# 是否开启 Mock 数据 +USE_MOCK=false + +# 应用名称 +APP_NAME=智慧农业生产管理系统 + +# 环境描述 +ENV_DESCRIPTION=UAT 环境 + +# UAT 特有配置 +API_TIMEOUT=20000 +ENABLE_ERROR_LOGGING=true +ENABLE_PERFORMANCE_MONITORING=true +ENABLE_USER_BEHAVIOR_TRACKING=true +SENTRY_DSN=https://your-sentry-dsn.uat@sentry.io/project-id \ No newline at end of file diff --git a/crop-x/next.config.js b/crop-x/next.config.js index 6dc9b6c..ca84e3a 100644 --- a/crop-x/next.config.js +++ b/crop-x/next.config.js @@ -11,15 +11,18 @@ const nextConfig = { // 修复CSS构建问题 experimental: { // forceSwcTransforms: true, - turbo: { - rules: { - '*.svg': { - loaders: ['@svgr/webpack'], - as: '*.js', - }, + }, + // 新的 Turbopack 配置 + turbopack: { + rules: { + '*.svg': { + loaders: ['@svgr/webpack'], + as: '*.js', }, }, }, + // 解决工作区根目录问题 + outputFileTracingRoot: process.cwd(), }; export default nextConfig; \ No newline at end of file diff --git a/crop-x/package.json b/crop-x/package.json index 17ec280..f7821a2 100644 --- a/crop-x/package.json +++ b/crop-x/package.json @@ -5,19 +5,17 @@ "type": "module", "scripts": { "dev": "next dev --turbopack", - "test:ts": "tsc --noEmit", "build": "next build", "start": "next start", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --ext ts,tsx --fix", - "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"", - "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"", "type-check": "tsc --noEmit", - "scripts:setup": "node scripts/setup-dev-tools.js", - "scripts:enable": "node scripts/setup-dev-tools.js --enable", - "scripts:disable": "node scripts/setup-dev-tools.js --disable", "api:generate": "node scripts/generate-api.cjs", - "deploy": "node scripts/deploy.js" + "deploy": "node scripts/deploy.js", + "build:dev": "node scripts/build.cjs dev", + "build:test": "node scripts/build.cjs test", + "build:uat": "node scripts/build.cjs uat", + "build:prod": "node scripts/build.cjs prod" }, "dependencies": { "@hookform/resolvers": "^5.2.2", diff --git a/crop-x/scripts/build.cjs b/crop-x/scripts/build.cjs new file mode 100644 index 0000000..e196750 --- /dev/null +++ b/crop-x/scripts/build.cjs @@ -0,0 +1,343 @@ +/** + * 统一构建脚本 + * + * 整合环境设置、API生成和Next.js构建的完整构建流程 + * 支持多环境构建:dev, test, uat, prod + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync, spawn } = require('child_process'); + +// ANSI 颜色代码 +const colors = { + reset: '\x1b[0m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + cyan: '\x1b[36m', + white: '\x1b[37m' +}; + +// 日志函数 +function log(message, color = 'white') { + console.log(`${colors[color]}${message}${colors.reset}`); +} + +function logSuccess(message) { + log(`✓ ${message}`, 'green'); +} + +function logError(message) { + log(`✗ ${message}`, 'red'); +} + +function logInfo(message) { + log(`ℹ ${message}`, 'blue'); +} + +function logStep(message) { + log(`🔄 ${message}`, 'cyan'); +} + +function logWarning(message) { + log(`⚠ ${message}`, 'yellow'); +} + +/** + * 获取命令行参数中的环境 + */ +function getEnvironmentFromArgs() { + const args = process.argv.slice(2); + + // 查找 --env 参数 + const envArg = args.find(arg => arg.startsWith('--env=')); + if (envArg) { + return envArg.split('=')[1]; + } + + // 查找直接的参数 + const directEnv = args[0]; + if (['dev', 'test', 'uat', 'prod'].includes(directEnv)) { + return directEnv; + } + + return null; +} + +/** + * 验证环境名称 + */ +function validateEnvironment(env) { + const validEnvs = ['dev', 'test', 'uat', 'prod']; + if (!validEnvs.includes(env)) { + logError(`无效的环境名称: ${env}`); + logInfo(`支持的环境: ${validEnvs.join(', ')}`); + return false; + } + return true; +} + +/** + * 复制环境配置文件 + */ +function copyEnvironmentConfig(env) { + logStep(`设置 ${env} 环境配置`); + + const envDir = path.join(process.cwd(), 'env'); + const sourceFile = path.join(envDir, `.env.${env}`); + const targetFile = path.join(process.cwd(), '.env.local'); + + // 检查源文件是否存在 + if (!fs.existsSync(sourceFile)) { + logError(`环境配置文件不存在: ${sourceFile}`); + return false; + } + + try { + // 复制文件 + fs.copyFileSync(sourceFile, targetFile); + logSuccess(`已复制环境配置: ${env}`); + + return true; + } catch (error) { + logError(`复制环境配置文件失败: ${error.message}`); + return false; + } +} + +/** + * 清理缓存目录 + */ +function cleanCache() { + logStep('清理缓存目录'); + + const dirsToClean = ['.next', 'node_modules/.cache']; + + dirsToClean.forEach(dir => { + const dirPath = path.join(process.cwd(), dir); + if (fs.existsSync(dirPath)) { + try { + fs.rmSync(dirPath, { recursive: true, force: true }); + logSuccess(`已清理: ${dir}`); + } catch (error) { + logWarning(`清理 ${dir} 失败: ${error.message}`); + } + } + }); +} + +/** + * 生成API客户端代码 + */ +function generateApi(env) { + logStep('生成API客户端代码'); + + try { + // 设置环境变量 + const apiBaseUrl = getApiBaseUrl(env); + process.env.API_BASE_URL = apiBaseUrl; + + logInfo(`API服务器: ${apiBaseUrl}`); + + // 执行API生成脚本 + execSync('node scripts/generate-api.cjs', { + stdio: 'inherit', + cwd: process.cwd() + }); + + logSuccess('API客户端代码生成完成'); + return true; + } catch (error) { + logError(`API生成失败: ${error.message}`); + return false; + } +} + +/** + * 获取API基础URL + */ +function getApiBaseUrl(env) { + const apiUrls = { + dev: 'http://localhost:8080', // 开发环境使用本地后端 + test: 'http://pengcode.tech:8080', // 测试环境使用指定后端 + uat: 'https://cavin-smart-crop-backend-app.uat.maimaiag.com', + prod: 'https://cavin-smart-crop-backend-app.prod.maimaiag.com' + }; + + return apiUrls[env] || apiUrls.dev; +} + +/** + * Next.js 构建 + */ +function buildNext(env) { + logStep('执行 Next.js 构建'); + + try { + // 设置环境变量 + process.env.NODE_ENV = 'production'; // 所有构建都使用 production 模式 + process.env.NEXT_PUBLIC_ENV = env; + + // 执行构建 + execSync('npm run build', { + stdio: 'inherit', + cwd: process.cwd() + }); + + logSuccess('Next.js 构建完成'); + return true; + } catch (error) { + logError(`Next.js 构建失败: ${error.message}`); + return false; + } +} + +/** + * 显示构建信息 + */ +function showBuildInfo(env, totalTime) { + const config = { + dev: { name: '开发环境', url: 'https://cavin-smart-crop-ui-app.dev.maimaiag.com' }, + test: { name: '测试环境', url: 'https://cavin-smart-crop-ui-app.test.maimaiag.com' }, + uat: { name: 'UAT环境', url: 'https://cavin-smart-crop-ui-app.uat.maimaiag.com' }, + prod: { name: '生产环境', url: 'https://cavin-smart-crop-ui-app.prod.maimaiag.com' } + }; + + const envConfig = config[env]; + + log('='.repeat(60), 'green'); + logSuccess(`构建完成!总耗时: ${totalTime}ms`); + logSuccess(`环境: ${envConfig.name} (${env})`); + logSuccess(`前端地址: ${envConfig.url}`); + logSuccess(`后端地址: ${getApiBaseUrl(env)}`); + logSuccess('构建产物: .next 目录'); + log('='.repeat(60), 'green'); + + logInfo('部署建议:'); + logInfo(` 将 .next 目录和 package.json 部署到 ${envConfig.name}`); + if (env !== 'dev') { + logInfo(` 确保环境变量 NODE_ENV=production 和 NEXT_PUBLIC_ENV=${env}`); + } +} + +/** + * 显示帮助信息 + */ +function showHelp() { + log('用法: node scripts/build.cjs [环境] [选项]', 'cyan'); + log(''); + log('环境:', 'yellow'); + log(' dev 开发环境', 'white'); + log(' test 测试环境', 'white'); + log(' uat UAT 环境', 'white'); + log(' prod 生产环境', 'white'); + log(''); + log('选项:', 'yellow'); + log(' --env= 指定环境 (与直接指定环境等效)', 'white'); + log(' --clean 构建前清理缓存', 'white'); + log(' --skip-api 跳过API生成', 'white'); + log(' --skip-build 跳过Next.js构建(仅设置环境)', 'white'); + log(' --help 显示此帮助信息', 'white'); + log(''); + log('示例:', 'yellow'); + log(' node scripts/build.cjs dev # 开发环境完整构建', 'white'); + log(' node scripts/build.cjs test --clean # 测试环境清理缓存后构建', 'white'); + log(' node scripts/build.cjs prod --skip-api # 生产环境跳过API生成构建', 'white'); + log(' node scripts/build.cjs uat --skip-build # UAT环境仅设置环境和API生成', 'white'); + log(''); +} + +/** + * 主函数 + */ +function main() { + const startTime = Date.now(); + + log('='.repeat(60), 'cyan'); + log('统一构建脚本', 'cyan'); + log('整合环境设置、API生成和Next.js构建', 'cyan'); + log('='.repeat(60), 'cyan'); + + // 检查帮助参数 + if (process.argv.includes('--help') || process.argv.includes('-h')) { + showHelp(); + process.exit(0); + } + + // 获取环境参数 + let env = getEnvironmentFromArgs(); + if (!env) { + logError('请指定环境参数'); + logInfo('使用 --help 查看帮助信息'); + process.exit(1); + } + + // 验证环境 + if (!validateEnvironment(env)) { + process.exit(1); + } + + // 解析选项 + const shouldClean = process.argv.includes('--clean'); + const skipApi = process.argv.includes('--skip-api'); + const skipBuild = process.argv.includes('--skip-build'); + + logInfo(`目标环境: ${env}`); + logInfo(`工作目录: ${process.cwd()}`); + + try { + // 1. 设置环境配置 + const envSuccess = copyEnvironmentConfig(env); + if (!envSuccess) { + process.exit(1); + } + + // 2. 清理缓存(可选) + if (shouldClean) { + cleanCache(); + } + + // 3. 生成API客户端(可选) + if (!skipApi) { + const apiSuccess = generateApi(env); + if (!apiSuccess) { + process.exit(1); + } + } else { + logInfo('跳过API生成'); + } + + // 4. Next.js 构建(可选) + if (!skipBuild) { + const buildSuccess = buildNext(env); + if (!buildSuccess) { + process.exit(1); + } + } else { + logInfo('跳过Next.js构建'); + } + + const totalTime = Date.now() - startTime; + showBuildInfo(env, totalTime); + + } catch (error) { + const totalTime = Date.now() - startTime; + logError(`构建失败 (${totalTime}ms): ${error.message}`); + process.exit(1); + } +} + +// 执行主函数 +if (require.main === module) { + main(); +} + +module.exports = { + copyEnvironmentConfig, + generateApi, + buildNext, + validateEnvironment, + getEnvironmentFromArgs +}; \ No newline at end of file diff --git a/crop-x/src/env/index.ts b/crop-x/src/env/index.ts new file mode 100644 index 0000000..5aaa2ee --- /dev/null +++ b/crop-x/src/env/index.ts @@ -0,0 +1,289 @@ +/** + * 环境变量管理系统 + * + * 这个模块提供统一的环境配置管理,支持多环境切换 + * 根据构建时的 NODE_ENV 自动加载对应的环境配置文件 + */ + +// 环境类型定义 +export type Environment = 'dev' | 'test' | 'uat' | 'prod'; + +// 环境配置接口 +export interface EnvironmentConfig { + // 基础配置 + NODE_ENV: string; + FRONTEND_BASE_URL: string; + BACKEND_BASE_URL: string; + API_VERSION: string; + + // 功能配置 + DEBUG: boolean; + USE_MOCK: boolean; + + // 应用信息 + APP_NAME: string; + ENV_DESCRIPTION: string; + + // 高级配置 + API_TIMEOUT?: number; + ENABLE_ERROR_LOGGING?: boolean; + ENABLE_PERFORMANCE_MONITORING?: boolean; + ENABLE_USER_BEHAVIOR_TRACKING?: boolean; + SENTRY_DSN?: string; + CDN_BASE_URL?: string; + + // 生产环境特有 + ENABLE_MAINTENANCE_MODE?: boolean; + ENABLE_NEW_FEATURES?: boolean; + ENABLE_BETA_FEATURES?: boolean; + ENABLE_ANALYTICS?: boolean; + CACHE_TTL?: number; + ENABLE_SERVICE_WORKER?: boolean; +} + +// 环境配置映射 +const ENV_CONFIGS: Record = { + dev: { + NODE_ENV: 'development', + FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.dev.maimaiag.com', + BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.dev.maimaiag.com', + API_VERSION: 'v1', + DEBUG: true, + USE_MOCK: false, + APP_NAME: '智慧农业生产管理系统', + ENV_DESCRIPTION: '开发环境', + API_TIMEOUT: 10000, + ENABLE_ERROR_LOGGING: true, + ENABLE_PERFORMANCE_MONITORING: true, + }, + + test: { + NODE_ENV: 'test', + FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.test.maimaiag.com', + BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.dev.maimaiag.com', // 临时使用开发环境后端 + API_VERSION: 'v1', + DEBUG: true, + USE_MOCK: false, + APP_NAME: '智慧农业生产管理系统', + ENV_DESCRIPTION: '测试环境', + API_TIMEOUT: 15000, + ENABLE_ERROR_LOGGING: true, + ENABLE_PERFORMANCE_MONITORING: true, + ENABLE_USER_BEHAVIOR_TRACKING: true, + }, + + uat: { + NODE_ENV: 'production', + FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.uat.maimaiag.com', + BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.uat.maimaiag.com', + API_VERSION: 'v1', + DEBUG: false, + USE_MOCK: false, + APP_NAME: '智慧农业生产管理系统', + ENV_DESCRIPTION: 'UAT 环境', + API_TIMEOUT: 20000, + ENABLE_ERROR_LOGGING: true, + ENABLE_PERFORMANCE_MONITORING: true, + ENABLE_USER_BEHAVIOR_TRACKING: true, + SENTRY_DSN: 'https://your-sentry-dsn.uat@sentry.io/project-id', + }, + + prod: { + NODE_ENV: 'production', + FRONTEND_BASE_URL: 'https://cavin-smart-crop-ui-app.prod.maimaiag.com', + BACKEND_BASE_URL: 'https://cavin-smart-crop-backend-app.prod.maimaiag.com', + API_VERSION: 'v1', + DEBUG: false, + USE_MOCK: false, + APP_NAME: '智慧农业生产管理系统', + ENV_DESCRIPTION: '生产环境', + API_TIMEOUT: 30000, + ENABLE_ERROR_LOGGING: true, + ENABLE_PERFORMANCE_MONITORING: true, + ENABLE_USER_BEHAVIOR_TRACKING: true, + ENABLE_ANALYTICS: true, + SENTRY_DSN: 'https://your-sentry-dsn.prod@sentry.io/project-id', + CDN_BASE_URL: 'https://cdn.cavin-smart-crop.com', + ENABLE_MAINTENANCE_MODE: false, + ENABLE_NEW_FEATURES: true, + ENABLE_BETA_FEATURES: false, + CACHE_TTL: 3600, + ENABLE_SERVICE_WORKER: true, + }, +}; + +/** + * 获取当前环境 + * + * 优先级: + * 1. 环境变量 NEXT_PUBLIC_ENV + * 2. 环境变量 NODE_ENV + * 3. 默认 'dev' 环境 + */ +export const getEnv = (): Environment => { + // 浏览器环境 + if (typeof window !== 'undefined') { + const env = process.env.NEXT_PUBLIC_ENV as Environment; + if (env && Object.keys(ENV_CONFIGS).includes(env)) { + return env; + } + } + + // 服务端环境 + const nodeEnv = process.env.NODE_ENV; + if (nodeEnv === 'development') return 'dev'; + if (nodeEnv === 'test') return 'test'; + if (nodeEnv === 'production') { + // 生产环境下需要进一步区分 UAT 和 PROD + const env = process.env.NEXT_PUBLIC_ENV as Environment; + return (env === 'uat' || env === 'prod') ? env : 'prod'; + } + + return 'dev'; // 默认开发环境 +}; + +/** + * 获取当前环境配置 + */ +export const getEnvConfig = (): EnvironmentConfig => { + const currentEnv = getEnv(); + return ENV_CONFIGS[currentEnv]; +}; + +/** + * 获取当前环境名称 + */ +export const getEnvironmentName = (): string => { + const config = getEnvConfig(); + return config.ENV_DESCRIPTION; +}; + +/** + * 获取当前服务器域名(前端地址) + */ +export const getLocalhost = (): string => { + const config = getEnvConfig(); + return config.FRONTEND_BASE_URL; +}; + +/** + * 获取后端 API 地址 + */ +export const getBackendUrl = (): string => { + const config = getEnvConfig(); + return config.BACKEND_BASE_URL; +}; + +/** + * 获取完整的 API 地址 + */ +export const getApiUrl = (path?: string): string => { + const backendUrl = getBackendUrl(); + const apiVersion = getEnvConfig().API_VERSION; + const apiPath = `/api/${apiVersion}${path || ''}`; + return `${backendUrl}${apiPath}`; +}; + +/** + * 是否为开发环境 + */ +export const isDevelopment = (): boolean => { + return getEnv() === 'dev'; +}; + +/** + * 是否为测试环境 + */ +export const isTest = (): boolean => { + return getEnv() === 'test'; +}; + +/** + * 是否为 UAT 环境 + */ +export const isUAT = (): boolean => { + return getEnv() === 'uat'; +}; + +/** + * 是否为生产环境 + */ +export const isProduction = (): boolean => { + return getEnv() === 'prod'; +}; + +/** + * 是否为非开发环境 + */ +export const isNonDevelopment = (): boolean => { + return !isDevelopment(); +}; + +/** + * 是否开启调试模式 + */ +export const isDebugMode = (): boolean => { + return getEnvConfig().DEBUG; +}; + +/** + * 是否使用 Mock 数据 + */ +export const shouldUseMock = (): boolean => { + return getEnvConfig().USE_MOCK; +}; + +/** + * 获取 API 超时时间(毫秒) + */ +export const getApiTimeout = (): number => { + return getEnvConfig().API_TIMEOUT || 10000; +}; + +/** + * 获取应用名称 + */ +export const getAppName = (): string => { + return getEnvConfig().APP_NAME; +}; + +/** + * 环境信息调试输出 + */ +export const debugEnvInfo = (): void => { + if (isDebugMode()) { + const config = getEnvConfig(); + const env = getEnv(); + + console.group('🌍 环境信息'); + console.log('当前环境:', env); + console.log('环境描述:', config.ENV_DESCRIPTION); + console.log('前端地址:', config.FRONTEND_BASE_URL); + console.log('后端地址:', config.BACKEND_BASE_URL); + console.log('调试模式:', config.DEBUG); + console.log('使用 Mock:', config.USE_MOCK); + console.log('NODE_ENV:', process.env.NODE_ENV); + console.log('NEXT_PUBLIC_ENV:', process.env.NEXT_PUBLIC_ENV); + console.groupEnd(); + } +}; + +// 默认导出主要函数 +export default { + getEnv, + getEnvConfig, + getEnvironmentName, + getLocalhost, + getBackendUrl, + getApiUrl, + isDevelopment, + isTest, + isUAT, + isProduction, + isNonDevelopment, + isDebugMode, + shouldUseMock, + getApiTimeout, + getAppName, + debugEnvInfo, +}; \ No newline at end of file diff --git a/crop-x/src/lib/api/client.gen.ts b/crop-x/src/lib/api/client.gen.ts index 81a9ea5..c8a8e25 100644 --- a/crop-x/src/lib/api/client.gen.ts +++ b/crop-x/src/lib/api/client.gen.ts @@ -14,5 +14,5 @@ import type { ClientOptions as ClientOptions2 } from './types.gen'; export type CreateClientConfig = (override?: Config) => Config & T>; export const client = createClient(createConfig({ - baseUrl: 'http://pengcode.tech:8080/' + baseUrl: 'http://pengcode.tech:8080' })); diff --git a/crop-x/src/lib/api/types.gen.ts b/crop-x/src/lib/api/types.gen.ts index ca30c94..123fed9 100644 --- a/crop-x/src/lib/api/types.gen.ts +++ b/crop-x/src/lib/api/types.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts export type ClientOptions = { - baseUrl: 'http://localhost:8080' | (string & {}); + baseUrl: 'http://pengcode.tech:8080' | (string & {}); }; /**