{"_id":"@cookiemonsterdev/kafka-config","_rev":"3-01d207ca1a0400c97025b487345993e3","name":"@cookiemonsterdev/kafka-config","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@cookiemonsterdev/kafka-config","version":"1.0.0","keywords":["config","config-loader","typescript","kafka"],"author":{"name":"Mykhailo Toporkov"},"license":"MIT","_id":"@cookiemonsterdev/kafka-config@1.0.0","maintainers":[{"name":"cookiemonsterdev","email":"mykhailo.toporkov@gmail.com"}],"homepage":"https://cookiemonsterdev.github.io/kafka/","bugs":{"url":"https://github.com/cookieMonsterDev/kafka/issues"},"dist":{"shasum":"989eee4486402a5586943fb23580e2222b6b8aac","tarball":"https://registry.npmjs.org/@cookiemonsterdev/kafka-config/-/kafka-config-1.0.0.tgz","fileCount":55,"integrity":"sha512-5UNSKZrFcsh7MJPtc+UYMbAs8GX6rIEkmoXC/ROtdQ3nAIAm8hlKYVdaCGZF2qPXHbZr3WvgGooRBR+xKx61rQ==","signatures":[{"sig":"MEQCIHT6Id/Bg/y5gOhEBl4v+GTWaVPhbjUwMGm3azbSE6uTAiBCbgLgFGRTuHFBVOroZk4T0/XxtJR7+bXsIrTfK3cjeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89470},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e6be510e6719a461488e15e1f584620635701889","scripts":{"dev":"vite build --watch","test":"vitest run","build":"pnpm run build:js && pnpm run build:types","clean":"rm -rf dist","build:js":"vite build","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p test/tsconfig.json --noEmit","test:watch":"vitest","build:types":"tsc -p tsconfig.json --emitDeclarationOnly"},"_npmUser":{"name":"cookiemonsterdev","email":"mykhailo.toporkov@gmail.com"},"repository":{"url":"git+https://github.com/cookieMonsterDev/kafka.git","type":"git","directory":"packages/config"},"_npmVersion":"11.16.0","description":"Generic config-file loader — discovery, sync/async loading, TypeScript transform rescue, layer merging, and diagnostics. Zero runtime dependencies.","directories":{},"_nodeVersion":"24.18.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"catalog:","vitest":"catalog:","typescript":"catalog:","@types/node":"catalog:","@vitest/coverage-v8":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/kafka-config_1.0.0_1787900736392_0.46902575286771975","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cookiemonsterdev/kafka-config","version":"1.1.0","keywords":["config","config-loader","typescript","kafka"],"author":{"name":"Mykhailo Toporkov"},"license":"MIT","_id":"@cookiemonsterdev/kafka-config@1.1.0","maintainers":[{"name":"cookiemonsterdev","email":"mykhailo.toporkov@gmail.com"}],"homepage":"https://cookiemonsterdev.github.io/kafka/","bugs":{"url":"https://github.com/cookieMonsterDev/kafka/issues"},"dist":{"shasum":"2d4032240a93867ed2962839ed9132cb2d3b636d","tarball":"https://registry.npmjs.org/@cookiemonsterdev/kafka-config/-/kafka-config-1.1.0.tgz","fileCount":61,"integrity":"sha512-DAUSZyF4adYC2u20s9Z6wzs8BUkqxi55DrW21lGeQ+oDuesCpNSYncJS1S6jWI+12op7dt7LaiztLkA2OeNQww==","signatures":[{"sig":"MEYCIQDV09KEtpLuRoTqWRpecLj9RFe0N2dPrEKpRa35XEJKmwIhALO5/6Cgo4+85SEopD9ZVtyYL2V0bur//zMY86+ZrLKZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cookiemonsterdev%2fkafka-config@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94376},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9ddd1b15a9880b54281281cea7f7ddabe9d6f172","scripts":{"dev":"vite build --watch","test":"vitest run","build":"pnpm run build:js && pnpm run build:types","clean":"rm -rf dist","build:js":"vite build","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p test/tsconfig.json --noEmit","test:watch":"vitest","build:types":"tsc -p tsconfig.json --emitDeclarationOnly"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0d16b2a-7b17-48f7-97f0-83224f0377b1"}},"repository":{"url":"git+https://github.com/cookieMonsterDev/kafka.git","type":"git","directory":"packages/config"},"_npmVersion":"10.9.8","description":"Generic config-file loader — discovery, sync/async loading, TypeScript transform rescue, layer merging, and diagnostics. Zero runtime dependencies.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"catalog:","vitest":"catalog:","typescript":"catalog:","@types/node":"catalog:","@vitest/coverage-v8":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/kafka-config_1.1.0_1788082591933_0.8313556206902966","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@cookiemonsterdev/kafka-config","version":"1.1.1","description":"Generic config-file loader — discovery, sync/async loading, TypeScript transform rescue, layer merging, and diagnostics. Zero runtime dependencies.","type":"module","license":"MIT","author":{"name":"Mykhailo Toporkov"},"homepage":"https://cookiemonsterdev.github.io/kafka/","bugs":{"url":"https://github.com/cookieMonsterDev/kafka/issues"},"repository":{"type":"git","url":"git+https://github.com/cookieMonsterDev/kafka.git","directory":"packages/config"},"keywords":["config","config-loader","typescript","kafka"],"engines":{"node":">=24.0.0"},"publishConfig":{"access":"public","provenance":true,"registry":"https://registry.npmjs.org/"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"pnpm run build:js && pnpm run build:types","build:js":"vite build","build:types":"tsc -p tsconfig.json --emitDeclarationOnly","dev":"vite build --watch","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p test/tsconfig.json --noEmit","test":"vitest run","test:watch":"vitest","clean":"rm -rf dist"},"devDependencies":{"@types/node":"catalog:","@vitest/coverage-v8":"catalog:","typescript":"catalog:","vite":"catalog:","vitest":"catalog:"},"_id":"@cookiemonsterdev/kafka-config@1.1.1","gitHead":"acf238629cfeec865235077ff66869f920baba49","_nodeVersion":"24.20.0","_npmVersion":"10.9.8","dist":{"integrity":"sha512-LedTpJaWM1gYkkvFDMpl0ZT0Tkw6haIB/VjipDuhSUbwd9MjfeOmvoIFUfqNCcjX0mzgiqBEe0Y7dvwWjtQzRA==","shasum":"8ba87f403b09cb86caa1861a1258575ef5c07e4c","tarball":"https://registry.npmjs.org/@cookiemonsterdev/kafka-config/-/kafka-config-1.1.1.tgz","fileCount":63,"unpackedSize":96339,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cookiemonsterdev%2fkafka-config@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDYOfMfHSvLqcvb6fZEWSH4t3T89P5l9wDPQ4RkKfGxJwIhAPko1oGTW+pgNMb7nx7u1H3U0EyZt9TEOk3mWpEZU+3r"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0d16b2a-7b17-48f7-97f0-83224f0377b1"}},"directories":{},"maintainers":[{"name":"cookiemonsterdev","email":"mykhailo.toporkov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kafka-config_1.1.1_1788505160804_0.7887459997565889"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-28T07:05:36.285Z","modified":"2026-09-04T06:59:21.256Z","1.0.0":"2026-08-28T07:05:36.607Z","1.1.0":"2026-08-30T09:36:32.077Z","1.1.1":"2026-09-04T06:59:20.953Z"},"bugs":{"url":"https://github.com/cookieMonsterDev/kafka/issues"},"author":{"name":"Mykhailo Toporkov"},"license":"MIT","homepage":"https://cookiemonsterdev.github.io/kafka/","keywords":["config","config-loader","typescript","kafka"],"repository":{"type":"git","url":"git+https://github.com/cookieMonsterDev/kafka.git","directory":"packages/config"},"description":"Generic config-file loader — discovery, sync/async loading, TypeScript transform rescue, layer merging, and diagnostics. Zero runtime dependencies.","maintainers":[{"name":"cookiemonsterdev","email":"mykhailo.toporkov@gmail.com"}],"readme":"# @cookiemonsterdev/kafka-config\n\n<p>\n  <a href=\"https://github.com/cookieMonsterDev/kafka/actions/workflows/ci.yml\"><img src=\"https://github.com/cookieMonsterDev/kafka/actions/workflows/ci.yml/badge.svg?branch=develop\" alt=\"CI\" /></a>\n  <a href=\"https://www.npmjs.com/package/@cookiemonsterdev/kafka-config\"><img src=\"https://img.shields.io/npm/v/@cookiemonsterdev/kafka-config.svg\" alt=\"npm\" /></a>\n  <a href=\"../../LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\" /></a>\n</p>\n\nFinds and loads a project's `<name>.config.*` file — think the same idea as `eslint.config.js` or\n`vite.config.ts`, but generic enough for you to point at your own app's name. It's a **zero-runtime-\ndependency** loader that handles discovery, sync/async loading, a TypeScript transform rescue,\nlayer merging, and diagnostics. It has no knowledge of Kafka, or of any other specific consumer —\nthat knowledge is injected via four extension points (below).\n\n`@cookiemonsterdev/kafka-core` doesn't read a config file yet — `new Kafka({...})` still takes its\noptions directly. This package is what [`@cookiemonsterdev/kafka-cli`](../cli/README.md) uses to\nload `kafka.config.ts`, published on its own so anything else (a studio UI, another CLI) can build\nthe same kind of config-file layer without depending on the rest of this workspace. See\n[the docs](https://cookiemonsterdev.github.io/kafka/config/reference/api/) for the full API\nreference.\n\n## Install\n\n```sh\nnpm install @cookiemonsterdev/kafka-config\n```\n\n## Quick example\n\n```ts\nimport { createDefineConfig, discoverConfigFile, loadConfigFileSync } from '@cookiemonsterdev/kafka-config';\n\ninterface AppConfig {\n  server?: { port?: number };\n}\n\nconst { defineConfig, assertValid } = createDefineConfig<AppConfig>({ objectSections: ['server'] });\n\n// app.config.ts\nexport default defineConfig({ server: { port: 4000 } } satisfies AppConfig);\n\n// elsewhere\nconst path = discoverConfigFile({ cwd: process.cwd(), name: 'app' });\nconst config = path == null ? {} : loadConfigFileSync<AppConfig>(path, { assertValid });\n```\n\n## What's exported\n\n- `discoverConfigFile`, `CANDIDATE_EXTENSIONS` — find a `<name>.config.*` / `.config/<name>.*` file.\n- `loadConfigFileSync`, `loadConfigFileAsync` — load and validate one, once resolved.\n- `createDefineConfig` — build a `defineConfig` + `assertValid` pair for your own config shape.\n- `mergeConfigLayers` — merge two config layers with `undefined`-is-absent semantics.\n- `KafkaConfigError`, `KafkaConfigRequiresAsyncError` — typed, `.name`-matchable errors. Match by\n  `.name`, not `instanceof` — if your project ends up with two installed copies of this package,\n  the classes are distinct objects even though the errors behave identically.\n- `defaultOnConfigDiagnostic`, `ConfigDiagnostic`, `OnConfigDiagnostic` — the diagnostics channel\n  every discovery/load function accepts.\n- `installConfigTransformHooks`, `areConfigTransformHooksInstalled` — the TypeScript transform\n  rescue (enums, extensionless imports, `export default` under a CommonJS-resolved file).\n\nDespite the package name, none of this is Kafka-specific — the name reflects where it was\nextracted from, not a Kafka dependency.\n\n## Development\n\nFrom the repo root:\n\n```sh\npnpm --filter @cookiemonsterdev/kafka-config build\npnpm --filter @cookiemonsterdev/kafka-config test\npnpm --filter @cookiemonsterdev/kafka-config typecheck\n```\n\nSee the root [CONTRIBUTING.md](../../CONTRIBUTING.md) for the full workspace workflow.\n\n## License\n\n[MIT](../../LICENSE) © Mykhailo Toporkov\n","readmeFilename":"README.md"}