{"_id":"@abdokouta/react-config","_rev":"4-c260baa3d216496c935484637d52fc01","name":"@abdokouta/react-config","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@abdokouta/react-config","version":"1.0.0","keywords":["react","config","configuration","environment","nestjs","env","dotenv"],"author":{"name":"Refine"},"license":"MIT","_id":"@abdokouta/react-config@1.0.0","maintainers":[{"name":"abdokouta","email":"akouta66@gmail.com"}],"homepage":"https://github.com/pixielity-inc/react-config#readme","bugs":{"url":"https://github.com/pixielity-inc/react-config/issues"},"dist":{"shasum":"d25da7338e8c9bfb25487a4f62c8e4345baedbd9","tarball":"https://registry.npmjs.org/@abdokouta/react-config/-/react-config-1.0.0.tgz","fileCount":42,"integrity":"sha512-ShFp4yMI2g7mWSb3O/FQQA+wGmM1UhoJ9Pdk9t0iay8qIBW4JQFV12vQCG2Me1k2c10dbKTZ9c193rN9mKeqAA==","signatures":[{"sig":"MEYCIQDpI8ao16tRwORVunAABud22kR+hE4qMd/ft5LqR2bykwIhAO3NMM6NVCNX/Xe55bC42ey1CvFD70MMrkSII1XjRBfX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206574},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.mjs","require":"./dist/vite-plugin.js"}},"gitHead":"beb05ef06f3813026b74ecb18ac7e783e8749c3b","scripts":{"dev":"tsup --watch","test":"vitest --run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json}\"","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest --run --coverage"},"_npmUser":{"name":"abdokouta","email":"akouta66@gmail.com"},"repository":{"url":"git+https://github.com/pixielity-inc/react-config.git","type":"git"},"_npmVersion":"10.9.4","description":"NestJS-inspired configuration management with multiple drivers (Env, File, Firebase) for React","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@abdokouta/react-di":"^2.1.0","@abdokouta/react-support":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.3","dotenv":"^17.3.1","vitest":"^4.1.2","prettier":"^3.8.1","@vitest/ui":"^4.1.2","typescript":"^6.0.2","@types/node":"^25.5.0","@nesvel/tsup-config":"^1.0.3","@nesvel/eslint-config":"^1.0.5","@nesvel/prettier-config":"^1.0.3","@nesvel/typescript-config":"^1.0.4"},"peerDependencies":{"vite":"^5.0.0","dotenv":"^16.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"dotenv":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-config_1.0.0_1774938006014_0.8803422959968024","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@abdokouta/react-config","version":"1.0.1","keywords":["react","config","configuration","environment","nestjs","env","dotenv"],"author":{"name":"Refine"},"license":"MIT","_id":"@abdokouta/react-config@1.0.1","maintainers":[{"name":"abdokouta","email":"akouta66@gmail.com"}],"homepage":"https://github.com/pixielity-inc/react-config#readme","bugs":{"url":"https://github.com/pixielity-inc/react-config/issues"},"dist":{"shasum":"25d8c32cdd1111576d2202a3ced4570e51859dc8","tarball":"https://registry.npmjs.org/@abdokouta/react-config/-/react-config-1.0.1.tgz","fileCount":44,"integrity":"sha512-v+vqi9P6emyx0VVJPD6Zyp26deSS7jXNNUihlB6VVd+PZpuBFQU7iVYp66rHkodVqu2P6YhsOQufvPMJkibG9A==","signatures":[{"sig":"MEQCIFbbzZVcNlmQaBfSW8twxmvCK00veTayd1RK1Lw7tmdyAiB3choTNSEkcUmRGkQSRCGi4p6cL5ZhuW/PKQgJ+ydKDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213121},"main":"dist/index.js","_from":"file:abdokouta-react-config-1.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.mjs","require":"./dist/vite-plugin.js"}},"scripts":{"dev":"tsup --watch","test":"vitest --run","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json}\"","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest --run --coverage"},"_npmUser":{"name":"abdokouta","email":"akouta66@gmail.com"},"_resolved":"/private/var/folders/7_/q437v6xs4sqf5p4755wbbzvh0000gn/T/06ac9ebb6c60a77034b8f8b6e0fd468a/abdokouta-react-config-1.0.1.tgz","_integrity":"sha512-v+vqi9P6emyx0VVJPD6Zyp26deSS7jXNNUihlB6VVd+PZpuBFQU7iVYp66rHkodVqu2P6YhsOQufvPMJkibG9A==","repository":{"url":"git+https://github.com/pixielity-inc/react-config.git","type":"git"},"_npmVersion":"10.9.4","description":"NestJS-inspired configuration management with multiple drivers (Env, File, Firebase) for React","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@abdokouta/react-di":"^2.0.0","@abdokouta/react-support":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.3","jsdom":"^29.0.1","dotenv":"^17.3.1","vitest":"^4.1.2","prettier":"^3.8.1","@vitest/ui":"^4.1.2","typescript":"^6.0.2","@types/node":"^25.5.0","@nesvel/tsup-config":"^1.0.3","@nesvel/eslint-config":"^1.0.5","@nesvel/prettier-config":"^1.0.3","@nesvel/typescript-config":"^1.0.4"},"peerDependencies":{"vite":"^5.0.0","dotenv":"^16.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"dotenv":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-config_1.0.1_1774943647605_0.18655661230973974","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@abdokouta/react-config","version":"1.0.2","keywords":["react","config","configuration","environment","nestjs","env","dotenv","dependency-injection","di"],"author":{"url":"https://github.com/abdokouta","name":"Abdelrhman Kouta","email":"abdelrhman@pixielity.com"},"license":"MIT","_id":"@abdokouta/react-config@1.0.2","maintainers":[{"name":"abdokouta","email":"akouta66@gmail.com"}],"homepage":"https://github.com/abdokouta/config#readme","bugs":{"url":"https://github.com/abdokouta/config/issues"},"dist":{"shasum":"f3ed05211ec844b9fe6825907652669c4bde63ab","tarball":"https://registry.npmjs.org/@abdokouta/react-config/-/react-config-1.0.2.tgz","fileCount":10,"integrity":"sha512-KljyamDs+VYu+nGINh8Pap07QdHoMajAYOEFbJBYVv0XopCRyQ/BGZpWiRziVQHGPMjcoVpMpkSqMKbWvHqdJA==","signatures":[{"sig":"MEQCIG3O7Q3ez4MHAkB8wP6rvi757Uz5fGzkSzrvAKRe9GVRAiBwEeiQHc9Ulx4jSiC1tdl3pYpbfWGuumEsUjgaMQt1Qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128250},"main":"./dist/index.js","type":"module","_from":"file:abdokouta-react-config-1.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0","pnpm":">=9.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.mjs","require":"./dist/vite-plugin.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint . --max-warnings 0","test":"vitest run","build":"tsup","clean":"rm -rf dist node_modules/.cache","format":"prettier --write .","release":"pnpm publish --access public --no-git-checks","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"abdokouta","email":"akouta66@gmail.com"},"_resolved":"/private/var/folders/7_/q437v6xs4sqf5p4755wbbzvh0000gn/T/6cc92bc6184e6f09092988d0d83947a8/abdokouta-react-config-1.0.2.tgz","_integrity":"sha512-KljyamDs+VYu+nGINh8Pap07QdHoMajAYOEFbJBYVv0XopCRyQ/BGZpWiRziVQHGPMjcoVpMpkSqMKbWvHqdJA==","repository":{"url":"git+https://github.com/abdokouta/config.git","type":"git","directory":"packages/config"},"_npmVersion":"11.12.1","description":"NestJS-inspired configuration management with multiple drivers (Env, File, Firebase) for React","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"@abdokouta/react-di":"^2.0.0","@abdokouta/react-support":"^1.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"^8.0.3","jsdom":"^29.0.1","dotenv":"^17.3.1","vitest":"^4.1.2","prettier":"^3.8.1","@vitest/ui":"^4.1.2","typescript":"^6.0.2","@types/node":"^25.5.0","@nesvel/tsup-config":"^1.0.3","@nesvel/eslint-config":"^1.0.5","@nesvel/prettier-config":"^1.0.3","@nesvel/typescript-config":"^1.0.4"},"peerDependencies":{"vite":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0","dotenv":"^16.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"dotenv":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-config_1.0.2_1774953620439_0.8280545286760663","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@abdokouta/react-config","version":"1.0.3","description":"NestJS-inspired configuration management with multiple drivers (Env, File, Firebase) for React","license":"MIT","author":{"name":"Abdelrhman Kouta","email":"abdelrhman@pixielity.com","url":"https://github.com/abdokouta"},"repository":{"type":"git","url":"git+https://github.com/abdokouta/config.git","directory":"packages/config"},"bugs":{"url":"https://github.com/abdokouta/config/issues"},"homepage":"https://github.com/abdokouta/config#readme","keywords":["react","config","configuration","environment","nestjs","env","dotenv","dependency-injection","di"],"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.mjs","require":"./dist/vite-plugin.js"}},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","dependencies":{"@abdokouta/ts-container":"^1.2.0"},"peerDependencies":{"dotenv":"^16.0.0","vite":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"peerDependenciesMeta":{"dotenv":{"optional":true},"vite":{"optional":true}},"devDependencies":{"@eslint/js":"10.0.1","@nesvel/eslint-config":"^1.0.5","@nesvel/prettier-config":"^1.0.3","@nesvel/tsup-config":"^1.0.3","@nesvel/typescript-config":"^1.0.4","@types/node":"^25.5.0","@vitest/ui":"^4.1.2","dotenv":"^17.3.1","jsdom":"^29.0.1","prettier":"^3.8.1","tsup":"^8.5.1","typescript":"^6.0.2","typescript-eslint":"^8.58.0","vite":"^8.0.3","vitest":"^4.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=18.0.0","pnpm":">=9.0.0"},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","clean":"rm -rf dist node_modules/.cache","typecheck":"tsc --noEmit","lint":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check .","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","release":"pnpm publish --access public --no-git-checks"},"_id":"@abdokouta/react-config@1.0.3","_integrity":"sha512-d9lvAmtPFGD88jqONr2VMWt6n6nxTPwXPaZuFmP+Mei5uetrp7HQ3qOBekROb3CqD8ay3HhhcbdXCkC05f93Cg==","_resolved":"/private/var/folders/7_/q437v6xs4sqf5p4755wbbzvh0000gn/T/c1421a0ff48e39fecd3b317c6e134ac4/abdokouta-react-config-1.0.3.tgz","_from":"file:abdokouta-react-config-1.0.3.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-d9lvAmtPFGD88jqONr2VMWt6n6nxTPwXPaZuFmP+Mei5uetrp7HQ3qOBekROb3CqD8ay3HhhcbdXCkC05f93Cg==","shasum":"7d151f47a2e54c64948f3c0acade56f0598ad28d","tarball":"https://registry.npmjs.org/@abdokouta/react-config/-/react-config-1.0.3.tgz","fileCount":10,"unpackedSize":160964,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC8MeCzth1/uvjkLqWOHkJmwNa7Ba+XQTFZHo+AuDSVmQIgA0SaVjGG+0bMxdDqTR9w1WTj5NrtD5FQl/m3v3Xq1J4="}]},"_npmUser":{"name":"abdokouta","email":"akouta66@gmail.com"},"directories":{},"maintainers":[{"name":"abdokouta","email":"akouta66@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-config_1.0.3_1775461710299_0.27669031218416995"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-31T06:20:05.617Z","modified":"2026-04-06T07:48:30.561Z","1.0.0":"2026-03-31T06:20:06.170Z","1.0.1":"2026-03-31T07:54:07.742Z","1.0.2":"2026-03-31T10:40:20.582Z","1.0.3":"2026-04-06T07:48:30.444Z"},"bugs":{"url":"https://github.com/abdokouta/config/issues"},"author":{"name":"Abdelrhman Kouta","email":"abdelrhman@pixielity.com","url":"https://github.com/abdokouta"},"license":"MIT","homepage":"https://github.com/abdokouta/config#readme","keywords":["react","config","configuration","environment","nestjs","env","dotenv","dependency-injection","di"],"repository":{"type":"git","url":"git+https://github.com/abdokouta/config.git","directory":"packages/config"},"description":"NestJS-inspired configuration management with multiple drivers (Env, File, Firebase) for React","maintainers":[{"name":"abdokouta","email":"akouta66@gmail.com"}],"readme":"# @abdokouta/config\n\nNestJS-inspired configuration management with multiple drivers (Env, File,\nFirebase) for Refine applications.\n\n## Features\n\n- 🔧 Multiple drivers: Environment variables, File-based, Firebase\n- 🎯 Type-safe getters: `getString()`, `getNumber()`, `getBool()`, etc.\n- 🌍 Environment helper: `Env.get()`, `Env.getBool()`, etc.\n- 📁 File pattern scanning for config files\n- 🔄 Variable expansion support\n- 💾 Built-in caching\n- 🎨 Laravel and NestJS inspired API\n\n## Installation\n\n```bash\nnpm install @abdokouta/config\n# or\npnpm add @abdokouta/config\n```\n\n## Quick Start\n\n### 1. Using Environment Variables (Default)\n\n```typescript\nimport { Module } from '@abdokouta/container';\nimport { ConfigModule, ConfigService } from '@abdokouta/config';\n\n@Module({\n  imports: [\n    ConfigModule.forRoot({\n      envFilePath: '.env',\n      isGlobal: true,\n    }),\n  ],\n})\nexport class AppModule {}\n\n// Use in your services\n@Injectable()\nexport class DatabaseService {\n  constructor(private config: ConfigService) {}\n\n  getConnection() {\n    return {\n      host: this.config.getString('DB_HOST', 'localhost'),\n      port: this.config.getNumber('DB_PORT', 5432),\n      ssl: this.config.getBool('DB_SSL', false),\n    };\n  }\n}\n```\n\n### 2. Using File-Based Configuration\n\n```typescript\n@Module({\n  imports: [\n    ConfigModule.forRoot({\n      driver: 'file',\n      filePattern: 'config/**/*.config.ts',\n      isGlobal: true,\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\nCreate config files:\n\n```typescript\n// config/database.config.ts\nexport default {\n  host: process.env.DB_HOST || 'localhost',\n  port: parseInt(process.env.DB_PORT || '5432'),\n  database: process.env.DB_NAME || 'myapp',\n};\n\n// config/cache.config.ts\nexport default {\n  driver: process.env.CACHE_DRIVER || 'memory',\n  ttl: 300,\n};\n```\n\nAccess in your code:\n\n```typescript\nconst dbHost = this.config.get('database.host');\nconst cacheDriver = this.config.get('cache.driver');\n```\n\n## ConfigService API\n\n### Type-Safe Getters\n\n```typescript\n// Get string\nconfig.getString('APP_NAME', 'MyApp');\nconfig.getStringOrThrow('APP_NAME');\n\n// Get number\nconfig.getNumber('PORT', 3000);\nconfig.getNumberOrThrow('PORT');\n\n// Get boolean\nconfig.getBool('DEBUG', false);\nconfig.getBoolOrThrow('DEBUG');\n\n// Get array (comma-separated)\nconfig.getArray('ALLOWED_HOSTS', ['localhost']);\n\n// Get JSON\nconfig.getJson<MyType>('COMPLEX_CONFIG', defaultValue);\n\n// Generic get\nconfig.get<string>('KEY', 'default');\nconfig.getOrThrow<string>('KEY');\n\n// Check existence\nconfig.has('KEY');\n\n// Get all\nconfig.all();\n```\n\n## Env Helper\n\nUse the `Env` helper for direct environment variable access:\n\n```typescript\nimport { Env } from '@abdokouta/config';\n\n// Get string\nconst appName = Env.get('APP_NAME', 'MyApp');\nconst apiKey = Env.getOrThrow('API_KEY');\n\n// Get number\nconst port = Env.getNumber('PORT', 3000);\n\n// Get boolean\nconst debug = Env.getBool('DEBUG', false);\n\n// Get array\nconst hosts = Env.getArray('ALLOWED_HOSTS', ['localhost']);\n\n// Get JSON\nconst config = Env.getJson<MyConfig>('APP_CONFIG');\n\n// Check existence\nif (Env.has('FEATURE_FLAG')) {\n  // ...\n}\n\n// Get all\nconst allEnv = Env.all();\n```\n\n## Configuration Options\n\n```typescript\ninterface ConfigModuleOptions {\n  // Driver type\n  driver?: 'env' | 'file' | 'firebase';\n\n  // Env driver options\n  envFilePath?: string | string[];\n  ignoreEnvFile?: boolean;\n  expandVariables?: boolean;\n\n  // File driver options\n  filePattern?: string | string[];\n\n  // Custom configuration\n  load?: Record<string, any> | (() => Record<string, any>);\n\n  // Module options\n  isGlobal?: boolean;\n  cache?: boolean;\n  validate?: (config: Record<string, any>) => void;\n}\n```\n\n## Examples\n\n### Environment Variables with Expansion\n\n```typescript\nConfigModule.forRoot({\n  envFilePath: '.env',\n  expandVariables: true, // Enables ${VAR} expansion\n});\n```\n\n```.env\nBASE_URL=https://api.example.com\nAPI_ENDPOINT=${BASE_URL}/v1\n```\n\n### Multiple Environment Files\n\n```typescript\nConfigModule.forRoot({\n  envFilePath: ['.env', `.env.${process.env.NODE_ENV}`],\n});\n```\n\n### Custom Configuration\n\n```typescript\nConfigModule.forRoot({\n  load: {\n    app: {\n      name: 'MyApp',\n      version: '1.0.0',\n    },\n  },\n});\n```\n\n### Validation\n\n```typescript\nConfigModule.forRoot({\n  validate: (config) => {\n    if (!config.DATABASE_URL) {\n      throw new Error('DATABASE_URL is required');\n    }\n  },\n});\n```\n\n## Comparison with Other Packages\n\n### vs @abdokouta/cache and @abdokouta/logger\n\nAll three packages follow the same pattern:\n\n```typescript\n// Cache\nimport cacheConfig from '@abdokouta/cache/config/cache.config';\nCacheModule.forRoot(cacheConfig);\n\n// Logger\nimport loggerConfig from '@abdokouta/logger/config/logger.config';\nLoggerModule.forRoot(loggerConfig);\n\n// Config (manages both!)\nimport { ConfigModule, ConfigService } from '@abdokouta/config';\nConfigModule.forRoot({ isGlobal: true });\n\n// Now use ConfigService to get cache/logger settings\nconst cacheDriver = config.getString('CACHE_DRIVER', 'memory');\nconst logLevel = config.getString('LOG_LEVEL', 'debug');\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}