{"_id":"@ace-common/config","_rev":"4-8de4e61a854b2dea64e1ad8689ef15fb","name":"@ace-common/config","dist-tags":{"latest":"2.1.2"},"versions":{"2.0.0":{"name":"@ace-common/config","version":"2.0.0","keywords":["nestjs","config","env","validation","typed-config"],"license":"MIT","_id":"@ace-common/config@2.0.0","maintainers":[{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"}],"dist":{"shasum":"bdb549922eb4614e5b702133b80c473c9b098a4a","tarball":"https://registry.npmjs.org/@ace-common/config/-/config-2.0.0.tgz","fileCount":39,"integrity":"sha512-TRd60jGDagkHnLf4AbZcFR603qL7u2K+HbYb8lf5EtRsFWSNwGh12iQ8hkSYBfpoSZxJOuX569eXo7GZyHCbQw==","signatures":[{"sig":"MEUCIQD+d/CFOVtH59sYiC9X8/NbAM975yRQ5/SttwNTRg/L+QIgcaO061Rkd0mUta6yzXJ/k2/J82DXqFr76jMi2hhO0ZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24651},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"60cdba9fa313d64694384b7a5c27aa3264cc69c1","scripts":{"lint":"eslint 'src/**/*.ts'","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint 'src/**/*.ts' --fix","prepublishOnly":"npm run clean && npm run lint && npm run build"},"_npmUser":{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"},"_npmVersion":"10.9.4","description":"Type-safe, validated environment configuration for NestJS","directories":{},"_nodeVersion":"22.22.1","dependencies":{"dotenv":"^16.4.7","class-validator":"^0.14.1","class-transformer":"^0.5.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.1+sha512.3590e550d5384caa39bd5c7c739f72270234b2f6059e13018f975c313b1eb9fefcc09714048765d4d9efe961382c312e624572c0420762bdc5d5940cdf9be73a","devDependencies":{"eslint":"^9.17.0","@eslint/js":"^9.0.0","typescript":"^5.5.0","@types/node":"^25.5.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.0","typescript-eslint":"^8.0.0"},"peerDependencies":{"@nestjs/core":">=10.0.0","@nestjs/common":">=10.0.0","reflect-metadata":">=0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/config_2.0.0_1775179237224_0.28873687934334646","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@ace-common/config","version":"2.1.0","keywords":["nestjs","config","env","validation","typed-config"],"license":"MIT","_id":"@ace-common/config@2.1.0","maintainers":[{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"}],"dist":{"shasum":"d93b23f9e02845bc1edf2f132cbfbdfc30a1f4be","tarball":"https://registry.npmjs.org/@ace-common/config/-/config-2.1.0.tgz","fileCount":39,"integrity":"sha512-VUnlokBCg8pYefd0fGTA+GHxcEez/7hFeMoal0VsRrOJSTyJrWY3a8o0/50Z+iG5Pp56H9IozGCTSx6/Zvrcrw==","signatures":[{"sig":"MEYCIQCpNfSn/BMxGYsSP8wunZynttARHB7bAM1rw9RUMkXw/QIhAOvFS2IZwyS9k7AjCAKAcjJAtaB997Dpam6k3yuhEl7N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24759},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"97bb42f93cbaef52750ef41cd8448a4e05c677f7","scripts":{"lint":"eslint 'src/**/*.ts'","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint 'src/**/*.ts' --fix","prepublishOnly":"npm run clean && npm run lint && npm run build"},"_npmUser":{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"},"_npmVersion":"10.9.7","description":"Type-safe, validated environment configuration for NestJS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"dotenv":"^16.4.7","class-validator":"^0.14.1","class-transformer":"^0.5.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.1+sha512.3590e550d5384caa39bd5c7c739f72270234b2f6059e13018f975c313b1eb9fefcc09714048765d4d9efe961382c312e624572c0420762bdc5d5940cdf9be73a","devDependencies":{"eslint":"^9.17.0","@eslint/js":"^9.0.0","typescript":"^5.5.0","@types/node":"^25.5.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.0","typescript-eslint":"^8.0.0"},"peerDependencies":{"@nestjs/core":">=10.0.0","@nestjs/common":">=10.0.0","reflect-metadata":">=0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/config_2.1.0_1775256984903_0.6398340593518326","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@ace-common/config","version":"2.1.1","keywords":["nestjs","config","env","validation","typed-config"],"license":"MIT","_id":"@ace-common/config@2.1.1","maintainers":[{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"}],"dist":{"shasum":"27eb3bbb9c681488f147c06c2a2f16a9a2c42988","tarball":"https://registry.npmjs.org/@ace-common/config/-/config-2.1.1.tgz","fileCount":39,"integrity":"sha512-zKOlF6VaESIEGDvMR89KFGSaBy4n1prPpqX4t8u1hj2HwWP8vFrBevPIpE03Zh4Y/cS3YWV7De1ss9z37ydYyw==","signatures":[{"sig":"MEQCIGsC5h1oFrSmYNs3QwGiuWLdV8fYz1cPPnl8EagyRY9bAiB2Uctowani2Psb+F3v0/MhmscsuUVG9kxM8lupY3fScw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24756},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6ceb3ebe8115f8c053aee59f798f281b288c857b","scripts":{"lint":"eslint 'src/**/*.ts'","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint 'src/**/*.ts' --fix","prepublishOnly":"npm run clean && npm run lint && npm run build"},"_npmUser":{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"},"_npmVersion":"10.9.7","description":"Type-safe, validated environment configuration for NestJS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"dotenv":"^16.4.7","class-validator":"^0.14.1","class-transformer":"^0.5.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.1+sha512.3590e550d5384caa39bd5c7c739f72270234b2f6059e13018f975c313b1eb9fefcc09714048765d4d9efe961382c312e624572c0420762bdc5d5940cdf9be73a","devDependencies":{"eslint":"^9.17.0","@eslint/js":"^9.0.0","typescript":"^5.5.0","@types/node":">=18","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","reflect-metadata":"^0.2.0","typescript-eslint":"^8.0.0"},"peerDependencies":{"@nestjs/core":">=10.0.0","@nestjs/common":">=10.0.0","reflect-metadata":">=0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/config_2.1.1_1775306854843_0.8661575590099218","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@ace-common/config","version":"2.1.2","description":"Type-safe, validated environment configuration for NestJS","license":"MIT","keywords":["nestjs","config","env","validation","typed-config"],"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc","lint":"eslint 'src/**/*.ts'","lint:fix":"eslint 'src/**/*.ts' --fix","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run lint && npm run build"},"peerDependencies":{"@nestjs/common":">=10.0.0","@nestjs/core":">=10.0.0","reflect-metadata":">=0.1.13"},"dependencies":{"class-transformer":"^0.5.1","class-validator":"^0.14.1","dotenv":"^16.4.7"},"devDependencies":{"@eslint/js":"^9.0.0","@nestjs/common":"^11.0.0","@nestjs/core":"^11.0.0","@types/node":">=18","eslint":"^9.17.0","reflect-metadata":"^0.2.0","typescript":"^5.5.0","typescript-eslint":"^8.0.0"},"packageManager":"pnpm@10.30.1+sha512.3590e550d5384caa39bd5c7c739f72270234b2f6059e13018f975c313b1eb9fefcc09714048765d4d9efe961382c312e624572c0420762bdc5d5940cdf9be73a","_id":"@ace-common/config@2.1.2","gitHead":"eb10e44df56bd530c055fe8f05baa2d27d3183de","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-Mo/pQ49qug8jJNu6jpv9hS4LvLzlFCpbEMXHjjZf3nHvQSf8hxG0A8vPLVrE1XG0THSc6Hal+L3XMTa2aj7+Gw==","shasum":"7fce5792fa52047b55c4da9d0ca1a250a6a68fb6","tarball":"https://registry.npmjs.org/@ace-common/config/-/config-2.1.2.tgz","fileCount":39,"unpackedSize":25529,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEExn3nmjXm7gERN8gK5PIjdB4jXvMBGejXjaVOP+VOUAiAu8PatNKWoPbs+d9mKBp9h2jv6kd7s9LIEzbD2tvthhg=="}]},"_npmUser":{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"},"directories":{},"maintainers":[{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/config_2.1.2_1775972966624_0.6367556117619317"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T01:20:37.113Z","modified":"2026-04-12T05:49:26.868Z","2.0.0":"2026-04-03T01:20:37.386Z","2.1.0":"2026-04-03T22:56:25.047Z","2.1.1":"2026-04-04T12:47:35.004Z","2.1.2":"2026-04-12T05:49:26.751Z"},"license":"MIT","keywords":["nestjs","config","env","validation","typed-config"],"description":"Type-safe, validated environment configuration for NestJS","maintainers":[{"name":"mohamedmostafa0","email":"mohamed.it.999@hotmail.com"}],"readme":"# @ace-common/config\n\nType-safe, validated environment configuration for NestJS. Define your env schema as a class, get instant startup validation and typed injection everywhere.\n\n## Installation\n\n```bash\npnpm add @ace-common/config\n```\n\nPeer dependencies: `@nestjs/common`, `@nestjs/core`, `reflect-metadata`.\n\n## Quick Start\n\n### 1. Define your config schema\n\n```typescript\nimport {\n  EnvString,\n  EnvPort,\n  EnvBoolean,\n  EnvBooleanOptional,\n  EnvStringOptional,\n} from \"@ace-common/config\";\n\nexport class AppConfig {\n  @EnvPort()\n  PORT: number;\n\n  @EnvString()\n  JWT_SECRET: string;\n\n  @EnvString()\n  DATABASE_URL: string;\n\n  @EnvStringOptional()\n  APP_NAME?: string;\n\n  @EnvBooleanOptional()\n  DEBUG?: boolean;\n}\n```\n\n### 2. Register the module\n\n```typescript\nimport { configureConfig } from \"@ace-common/config\";\nimport { AppConfig } from \"./app.config\";\n\n@Module({\n  imports: [\n    configureConfig({ schema: AppConfig }),\n    // ... other modules\n  ],\n})\nexport class AppModule {}\n```\n\nOn startup, if any env var is missing or invalid, the app crashes immediately with a clear message:\n\n```\nConfigValidationException: Environment configuration validation failed:\n  - JWT_SECRET: JWT_SECRET should not be empty\n  - DATABASE_URL: DATABASE_URL should not be empty\n  - PORT: PORT must be an integer number\n```\n\n### 3. Inject the typed config\n\n```typescript\nimport { InjectConfig } from \"@ace-common/config\";\nimport { AppConfig } from \"./app.config\";\n\n@Injectable()\nexport class MyService {\n  constructor(@InjectConfig() private readonly config: AppConfig) {}\n\n  connect() {\n    console.log(this.config.DATABASE_URL); // string, typed\n    console.log(this.config.PORT); // number, already converted\n  }\n}\n```\n\n## Options\n\n```typescript\nconfigureConfig({\n  schema: AppConfig,\n  envFilePaths: [\".env.local\", \".env\"], // default\n  skipEnvFile: false, // set true in production\n});\n```\n\n| Option         | Default                  | Description                                  |\n| -------------- | ------------------------ | -------------------------------------------- |\n| `schema`       | _required_               | Class decorated with validation decorators   |\n| `envFilePaths` | `[\".env.local\", \".env\"]` | `.env` files to load (first wins)            |\n| `skipEnvFile`  | `false`                  | Skip dotenv loading, read only `process.env` |\n\n## Built-in Decorators\n\n| Decorator               | Type       | Required | Description                               |\n| ----------------------- | ---------- | -------- | ----------------------------------------- |\n| `@EnvString()`          | `string`   | Yes      | Non-empty string                          |\n| `@EnvStringOptional()`  | `string?`  | No       | Optional string                           |\n| `@EnvNumber()`          | `number`   | Yes      | Numeric value                             |\n| `@EnvNumberOptional()`  | `number?`  | No       | Optional number                           |\n| `@EnvPort()`            | `number`   | Yes      | Integer >= 0                              |\n| `@EnvBoolean()`         | `boolean`  | Yes      | Accepts `\"true\"`, `\"1\"`, `\"false\"`, `\"0\"` |\n| `@EnvBooleanOptional()` | `boolean?` | No       | Optional boolean                          |\n\nYou can also use any `class-validator` / `class-transformer` decorator directly on your schema class for custom validation (e.g. `@IsUrl()`, `@IsEnum()`, `@Matches()`).\n\n## Exports\n\n| Export                         | Description                                    |\n| ------------------------------ | ---------------------------------------------- |\n| `configureConfig`              | Module configuration helper                    |\n| `AceConfigModule`              | NestJS dynamic module (`forRoot`)              |\n| `InjectConfig`                 | Parameter decorator for typed config injection |\n| `ConfigValidationException`    | Thrown on validation failure                   |\n| `validateConfig`               | Standalone validation function                 |\n| `EnvString`, `EnvNumber`, etc. | Built-in schema decorators                     |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}