{"_id":"@codylabs/nestjs-env","_rev":"6-9c68ea39034a6895dfdf1896fde2d808","name":"@codylabs/nestjs-env","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@codylabs/nestjs-env","version":"0.0.1","author":{"name":"Cody Nguyen"},"license":"MIT","_id":"@codylabs/nestjs-env@0.0.1","maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"dist":{"shasum":"9aaf98954cad8d2f034cba984ac20c00c5f417aa","tarball":"https://registry.npmjs.org/@codylabs/nestjs-env/-/nestjs-env-0.0.1.tgz","fileCount":32,"integrity":"sha512-Y603LTVPoOj0ssonUe6CedGBQ02zL7wG3UQYwFU8cyFZXoDYrx0RdaJ6Lke7aui3HnQq3ehUCHYXA97kCrS2qQ==","signatures":[{"sig":"MEUCIQCqkMRhzE6FvlSIJuYk+YD1qMSQFXwWLbhpKJ5UKzOcSAIgbVHnDkIb7qz9XOsW51836z43aQdGgHCgFgk20/KEzG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286739},"main":"./dist/index.js","_from":"file:codylabs-nestjs-env-0.0.1.tgz","types":"./dist/index.d.ts","scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf .turbo node_modules dist","prebuild":"rimraf dist","test:watch":"jest --watch"},"_npmUser":{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"},"_resolved":"/private/var/folders/hk/4rrl8z7x7fx14d_xr0bclqyr0000gn/T/6d40f7fd70c460ac61c7ad117c636205/codylabs-nestjs-env-0.0.1.tgz","_integrity":"sha512-Y603LTVPoOj0ssonUe6CedGBQ02zL7wG3UQYwFU8cyFZXoDYrx0RdaJ6Lke7aui3HnQq3ehUCHYXA97kCrS2qQ==","_npmVersion":"11.6.2","description":"Environment variable module for NestJS","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^13.0.0","rxjs":"^7.8.2","destr":"^2.0.5","express":"^5.2.1","@types/node":"^25.0.3","@nestjs/config":"^4.0.2","@types/express":"^5.0.6","class-validator":"^0.14.3","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1","@codylabs/helper-fns":"0.0.4","@nestjs/platform-express":"^11.1.10","@codylabs/typescript-configs":"0.0.7"},"peerDependencies":{"@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-env_0.0.1_1766740598198_0.1973330294418021","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@codylabs/nestjs-env","version":"0.0.2","author":{"name":"Cody Nguyen"},"license":"MIT","_id":"@codylabs/nestjs-env@0.0.2","maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"dist":{"shasum":"eec3419f6402b450f269053705813c9fd0e80a71","tarball":"https://registry.npmjs.org/@codylabs/nestjs-env/-/nestjs-env-0.0.2.tgz","fileCount":32,"integrity":"sha512-LCMMRtPIhhylACwToVAFsO9h3xc7aPRICtsQOA5qwwU/reqOAM+Hv/t6DvxscwGLBNTGmb7SRxTKVKfuPgDgYQ==","signatures":[{"sig":"MEQCIAtX0NCkQPt2q/WEz128GVo9Oa0F3h5DS1VpIvH1Ry4CAiAsjSj7AUQiMP9hegVgCkSCIPI8yGFnDUnxlyPRkJXNew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286763},"main":"./dist/index.js","_from":"file:codylabs-nestjs-env-0.0.2.tgz","types":"./dist/index.d.ts","scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf .turbo node_modules dist","prebuild":"rimraf dist","test:watch":"jest --watch"},"_npmUser":{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"},"_resolved":"/private/var/folders/hk/4rrl8z7x7fx14d_xr0bclqyr0000gn/T/c08a6315f918abb6c5e3bd0e22a81fb0/codylabs-nestjs-env-0.0.2.tgz","_integrity":"sha512-LCMMRtPIhhylACwToVAFsO9h3xc7aPRICtsQOA5qwwU/reqOAM+Hv/t6DvxscwGLBNTGmb7SRxTKVKfuPgDgYQ==","_npmVersion":"11.6.2","description":"Environment variable module for NestJS","directories":{},"_nodeVersion":"24.12.0","dependencies":{"glob":"^13.0.0","destr":"^2.0.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","express":"^5.2.1","@types/node":"^25.0.3","@nestjs/config":"^4.0.2","@types/express":"^5.0.6","class-validator":"^0.14.3","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1","@codylabs/helper-fns":"0.0.4","@nestjs/platform-express":"^11.1.11","@codylabs/typescript-configs":"0.0.7"},"peerDependencies":{"@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-env_0.0.2_1767155130517_0.463509802112233","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@codylabs/nestjs-env","version":"0.0.3","author":"Cody Nguyen","license":"MIT","_id":"@codylabs/nestjs-env@0.0.3","maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"dist":{"shasum":"f6d152ca9e3d8d6223a52bb18fb43cedc7bf2994","tarball":"https://registry.npmjs.org/@codylabs/nestjs-env/-/nestjs-env-0.0.3.tgz","fileCount":32,"integrity":"sha512-14mJuRNALjqvIOjsi1Ipwlr8n1aTs0gIP/PsoKhQhpeSH8OU9Nz6Tba0FhGQB0j8QbZfpB6ddCepYZix2WC89Q==","signatures":[{"sig":"MEQCICHnc4ioW9JOswtT6yxo51HWuJXKFnuvcvdx/Fr6gTZiAiBX0Kz33ob5i5w5uVCp2cpyWwwl0jxJMMnTnIe7WpTBoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230619},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf .turbo node_modules dist","prebuild":"rimraf dist","test:watch":"jest --watch"},"_npmUser":{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"},"description":"Environment variable module for NestJS","directories":{},"_nodeVersion":"24.16.0","dependencies":{"glob":"^13.0.6","destr":"^2.0.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","express":"^5.2.1","@types/node":"^25.9.1","@nestjs/config":"^4.0.4","@types/express":"^5.0.6","class-validator":"^0.15.1","reflect-metadata":"^0.2.2","class-transformer":"^0.5.1","@codylabs/helper-fns":"0.0.5","@nestjs/platform-express":"^11.1.23","@codylabs/typescript-configs":"0.0.8"},"peerDependencies":{"@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-env_0.0.3_1779529537821_0.3890935710158374","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@codylabs/nestjs-env","version":"0.0.4","author":"Cody Nguyen","license":"MIT","_id":"@codylabs/nestjs-env@0.0.4","maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"dist":{"shasum":"cd6b24ce2bf09204a3920e15565a3549244f4b07","tarball":"https://registry.npmjs.org/@codylabs/nestjs-env/-/nestjs-env-0.0.4.tgz","fileCount":63,"integrity":"sha512-LxH6QPXSD+c9nedaxVn9xlNh/ov5aBB0EWflIgkj1oZUudkqY8/65ot9NwOf6TzN5NkkU5Vu6TdtmCuqpB89kw==","signatures":[{"sig":"MEUCIQD8e5PSOybbptnxSWaTduDleuPzl0HA/JLp49KPY6gLagIgXN4Q0wTeX9ZWHoUKLtYoo1v7SsFBGmf2GaMu8LDkIWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204719},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf .turbo node_modules dist","prebuild":"rimraf dist","test:watch":"jest --watch"},"_npmUser":{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"},"description":"Environment variable module for NestJS","directories":{},"_nodeVersion":"24.16.0","dependencies":{"glob":"^13.0.6","destr":"^2.0.5","dotenv":"^17.4.2","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","express":"^5.2.1","@types/node":"^25.9.1","@types/express":"^5.0.6","reflect-metadata":"^0.2.2","@codylabs/helper-fns":"0.0.5","@nestjs/platform-express":"^11.1.24","@codylabs/typescript-configs":"0.0.8"},"peerDependencies":{"@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-env_0.0.4_1779866801859_0.8575453043487287","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@codylabs/nestjs-env","version":"0.0.5","author":"Cody Nguyen","license":"MIT","_id":"@codylabs/nestjs-env@0.0.5","maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"homepage":"https://github.com/cuongnd1705/codylabs#readme","bugs":{"url":"https://github.com/cuongnd1705/codylabs/issues"},"dist":{"shasum":"a7710a2306f66fe823d37b4d5fb31fff597a9f58","tarball":"https://registry.npmjs.org/@codylabs/nestjs-env/-/nestjs-env-0.0.5.tgz","fileCount":63,"integrity":"sha512-TIc1BZ7vcHKV0Fvbvt6W3H7zTe53u/IWqgBOlRXF/33hB4O8V7yA/c4lkMkv/Zh96W05TtkN2GvIpgw+xdUzgA==","signatures":[{"sig":"MEUCIQDOdAx3I2iPVFG+QyDgFkzLkiiDnLU8M9SLdRyksjqK2AIgaaGavuOhSIi4eQ9LWTbPeYwVaXRiIQjB/6/f+Ykn298=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204963},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.build.json","clean":"rm -rf .turbo node_modules dist","prebuild":"rimraf dist","test:watch":"jest --watch"},"_npmUser":{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"},"repository":{"url":"git+https://github.com/cuongnd1705/codylabs.git","type":"git"},"description":"Environment variable module for NestJS","directories":{},"_nodeVersion":"24.16.0","dependencies":{"glob":"^13.0.6","destr":"^2.0.5","dotenv":"^17.4.2","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","express":"^5.2.1","@types/node":"^25.9.1","@types/express":"^5.0.6","reflect-metadata":"^0.2.2","@codylabs/helper-fns":"0.0.6","@nestjs/platform-express":"^11.1.24","@codylabs/typescript-configs":"0.0.9"},"peerDependencies":{"@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-env_0.0.5_1780126504304_0.9157019966103646","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@codylabs/nestjs-env","version":"0.1.0","description":"Environment variable module for NestJS","homepage":"https://github.com/cuongnd1705/codylabs#readme","bugs":{"url":"https://github.com/cuongnd1705/codylabs/issues"},"license":"MIT","author":"Cody Nguyen","repository":{"type":"git","url":"git+https://github.com/cuongnd1705/codylabs.git"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"dependencies":{"@standard-schema/spec":"^1.1.0","destr":"^2.0.5","dotenv":"^17.4.2","glob":"^13.0.6"},"devDependencies":{"@codylabs/helper-fns":"0.1.0","@codylabs/typescript-configs":"0.1.0","@nestjs/platform-express":"^12.0.1","@swc/core":"^1.16.1","@types/express":"^5.0.6","@types/node":"^26.4.0","express":"^5.2.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.2","unplugin-swc":"^1.5.11","vitest":"^4.1.11"},"peerDependencies":{"@nestjs/common":"^12.0.0","@nestjs/core":"^12.0.0"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf .turbo node_modules dist","prebuild":"rimraf dist","test":"vitest run --passWithNoTests","test:watch":"vitest"},"_nodeVersion":"24.20.0","_id":"@codylabs/nestjs-env@0.1.0","dist":{"integrity":"sha512-2rU7rvO9pAD0+/137ZNfghBijd5VBmAN3HBOkogYXOomgOxD9R/tu8Ty7QH0JF18K6UAvyLyBxfOyHEfiCHjJQ==","shasum":"43ddb72bfca88cb84e655f29a5c43552288f0b15","tarball":"https://registry.npmjs.org/@codylabs/nestjs-env/-/nestjs-env-0.1.0.tgz","fileCount":63,"unpackedSize":216989,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD7H6towowO6hPuXSekPnwCV6OuyLCah5hbgB1Fr/MuSwIhAIrWGHjS9GNhLcosSE400DDZtn/v0Y4yRVJablL7beXi"}]},"_npmUser":{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"},"directories":{},"maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-env_0.1.0_1788017131100_0.14176476520660541"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-26T09:16:38.076Z","modified":"2026-08-29T15:25:31.411Z","0.0.1":"2025-12-26T09:16:38.354Z","0.0.2":"2025-12-31T04:25:30.727Z","0.0.3":"2026-05-23T09:45:38.010Z","0.0.4":"2026-05-27T07:26:42.018Z","0.0.5":"2026-05-30T07:35:04.459Z","0.1.0":"2026-08-29T15:25:31.234Z"},"bugs":{"url":"https://github.com/cuongnd1705/codylabs/issues"},"author":"Cody Nguyen","license":"MIT","homepage":"https://github.com/cuongnd1705/codylabs#readme","repository":{"type":"git","url":"git+https://github.com/cuongnd1705/codylabs.git"},"description":"Environment variable module for NestJS","maintainers":[{"name":"cuongnd1705","email":"cuongnd.work@gmail.com"}],"readme":"# @codylabs/nestjs-env\n\nSchema-driven environment/config module for NestJS.\n\nLoads configuration from composable **loaders**, validates it with the [Standard Schema](https://standardschema.dev/) interface (works with Zod, Valibot, ArkType, and other compatible validators), and exposes a type-safe `EnvService` for runtime access.\n\n## Features\n\n- Composable loader pattern — combine `fileLoader`, `processEnvLoader`, or your own custom loaders\n- `process.env` support out of the box via `processEnvLoader`\n- Standard Schema validation — not tied to any specific validator library\n- Supports `.json` and `.env` config files with deterministic layered loading and deep merge\n- `register` and `registerAsync` support\n- Type-safe dot-notation access via `EnvService.get('a.b.c')`\n- Helper methods: `getRequired`, `getOrDefault`, `getNumber`, `getBoolean`, `getArray`, `getUrl`, `getMany`, `getParsed`\n- Schema is optional — skip validation for simple use cases\n\n## Installation\n\n```bash\npnpm add @codylabs/nestjs-env\n# plus your schema library, for example:\npnpm add zod\n```\n\n## Quick Start\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { z } from 'zod';\nimport { EnvModule, fileLoader, processEnvLoader } from '@codylabs/nestjs-env';\n\nconst appSchema = z.object({\n  app: z.object({\n    port: z.number().int().positive(),\n    url: z.string().url(),\n  }),\n  db: z.object({\n    host: z.string(),\n    port: z.number().int(),\n  }),\n});\n\n@Module({\n  imports: [\n    EnvModule.register({\n      schema: appSchema,\n      load: [\n        // 1. Load from JSON/env files in ./config\n        fileLoader({\n          env: process.env.NODE_ENV,\n          configDir: 'config',\n          extensions: ['.json', '.env'],\n        }),\n        // 2. Override with process.env (highest priority)\n        processEnvLoader(),\n      ],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n## Async Registration\n\n```ts\n@Module({\n  imports: [\n    EnvModule.registerAsync({\n      useFactory: async () => ({\n        schema: appSchema,\n        load: [fileLoader({ env: process.env.NODE_ENV }), processEnvLoader()],\n      }),\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n## Using EnvService\n\nInject `EnvService` with a generic for full type safety:\n\n```ts\nimport { Injectable } from '@nestjs/common';\nimport { EnvService } from '@codylabs/nestjs-env';\nimport type { z } from 'zod';\nimport type { appSchema } from './config.schema';\n\ntype AppConfig = z.infer<typeof appSchema>;\n\n@Injectable()\nexport class AppService {\n  constructor(private readonly env: EnvService<AppConfig>) {}\n\n  getPort(): number {\n    return this.env.getNumber('app.port'); // typed, autocompleted\n  }\n\n  getDbHost(): string {\n    return this.env.getRequired('db.host');\n  }\n\n  getDbUrl(): URL {\n    return this.env.getUrl('db.url');\n  }\n}\n```\n\n## Loaders\n\nLoaders are plain functions with the signature `() => Record<string, unknown> | Promise<Record<string, unknown>>`. They are called in array order and their results are **deep-merged** — later loaders take precedence over earlier ones.\n\n### `fileLoader(options?)`\n\nLoads from layered config files in the following order (later entries override earlier ones):\n\n| Priority    | File                                                     |\n| ----------- | -------------------------------------------------------- |\n| 1 (lowest)  | `global{ext}`                                            |\n| 2           | `*.global{ext}` (glob, when `enableGlobalPattern: true`) |\n| 3           | `global.{env}{ext}`                                      |\n| 4           | `local{ext}`                                             |\n| 5           | `local.{env}{ext}`                                       |\n| 6 (highest) | `secret{ext}`                                            |\n\nEach slot resolves the first matching extension from the `extensions` array.\n\n```ts\nfileLoader({\n  env?: string;           // e.g. process.env.NODE_ENV\n  configDir?: string;     // default: 'config'\n  basePath?: string;      // default: process.cwd()\n  extensions?: string[];  // default: ['.json']\n  enableGlobalPattern?: boolean; // default: true\n  nestingSeparator?: string;     // default: '__'\n})\n```\n\n### `processEnvLoader(options?)`\n\nReads from `process.env`. Keys are lowercased and split by `nestingSeparator` into a nested object. Values are coerced via [`destr`](https://github.com/unjs/destr) (`\"true\"` → `true`, `\"42\"` → `42`).\n\n```ts\nprocessEnvLoader({\n  nestingSeparator?: string; // default: '__'\n})\n```\n\n### Custom loader\n\nAny function that returns a (possibly async) plain object works:\n\n```ts\nEnvModule.register({\n  schema: appSchema,\n  load: async () => {\n    const remote = await fetch('https://config-service/app').then((r) => r.json());\n    return remote;\n  },\n});\n```\n\n### Multiple loaders\n\n```ts\nload: [\n  fileLoader({ env: process.env.NODE_ENV }), // base from files\n  processEnvLoader(), // env vars win\n];\n```\n\n## `.env` Nesting\n\n`.env` keys are converted to nested paths using `nestingSeparator` (default `__`) and lowercased:\n\n```env\nAPP__PORT=3000\nAPP__URL=https://example.com\nDB__HOST=localhost\nDB__PORT=5432\n```\n\nBecomes:\n\n```json\n{\n  \"app\": { \"port\": 3000, \"url\": \"https://example.com\" },\n  \"db\": { \"host\": \"localhost\", \"port\": 5432 }\n}\n```\n\n## EnvModule Options\n\n```ts\ninterface EnvModuleOptions {\n  schema?: StandardSchemaV1; // omit to skip validation\n  load?: Loader | Loader[]; // one or more loaders\n}\n```\n\n## EnvService API\n\n| Method                        | Description                                           |\n| ----------------------------- | ----------------------------------------------------- |\n| `get(path)`                   | Returns value at dot-notation path                    |\n| `getRequired(path)`           | Returns value, throws if `undefined` or `null`        |\n| `getOrDefault(path, default)` | Returns value or fallback                             |\n| `getNumber(path)`             | Returns value coerced to `number`                     |\n| `getBoolean(path)`            | Returns value coerced to `boolean`                    |\n| `getArray(path, delimiter?)`  | Returns value as `string[]`, splits strings           |\n| `getUrl(path)`                | Returns value as `URL`                                |\n| `getParsed(path, parser)`     | Returns value transformed by a custom parser function |\n| `getMany(paths)`              | Returns multiple values keyed by path                 |\n| `getAll()`                    | Returns the entire config object                      |\n\n## Validation\n\n- Runs during module bootstrap using the Standard Schema `~standard.validate` interface.\n- Works with any compliant library: Zod, Valibot, ArkType, etc.\n- Throws with formatted field-level issue messages on failure.\n- When `schema` is omitted, the raw merged config is used as-is.\n\n## License\n\nMIT\n","readmeFilename":""}