{"_id":"@bernierllc/config-manager","_rev":"10-df7e277360090858f63dfe7be9c7fec2","name":"@bernierllc/config-manager","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.1":{"name":"@bernierllc/config-manager","version":"1.0.1","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"5ff9b88374906d1bc50820d1d5f947c3088d562c","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.0.1.tgz","fileCount":47,"integrity":"sha512-OtrDSE0/i9B84pUUccQxZ+FFFPseZ5cxBkrxjMlqG+bXN2haYJU9J2k2MChpTsN/OJfJsyuZQiwDDEH6a1Uveg==","signatures":[{"sig":"MEUCIAYslikh9chs3vr1TTMKESluP7EAUBWMmPjcfSEJpdrHAiEAunEvM6T/jiHhFjR7oeWUvkxxzf44GFVP7Dqcpm2IJdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163825},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"81013b640085d28f628595fb617630c010eae3a0","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.4.2","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"24.4.1","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.0.1_1756499761308_0.900822133954442","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/config-manager","version":"1.0.2","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"2dc3c693fdb73d24cb358a0a8d8adfcd80e7d2fc","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.0.2.tgz","fileCount":47,"integrity":"sha512-/y3ODqMGICQ+V7xNk3g5zp5yNAwQPW0j9X8U6mFIEMq/DCLgONMT9VQxu8GiwvLk0GsteMWSUPD3aFC3OsL7jw==","signatures":[{"sig":"MEUCIBELzOvApG3G0YbEHDB0xpP3jRwh+z3hxlTqRUDNUW7CAiEAmzxP0xY5jXfOcUi6vpsP8Ao8imCTUTuY0SVayTBRRK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163825},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f7ba3a65899c248b5f73dd1f83173f78ffca1ad1","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.4.2","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"24.4.1","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.0.2_1756499847905_0.3093638646685184","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bernierllc/config-manager","version":"1.0.3","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.0.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"14e8cc5bd68d5e3dd3d01960a7800192218eca9a","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.0.3.tgz","fileCount":47,"integrity":"sha512-OrQ5KfNujpjSKqBed12bCSKisao5rbFYDiL4a6x3GNogw4SUQI0K1fWdT+cUw5GvHQlR9joQu9BwHVo+H+GL+w==","signatures":[{"sig":"MEQCICt95MIdguEanv7Nr23ke1eHgOE6L3akCHpqmhIGPjwzAiBbtsotbz8xaRvWFRQ6jT0dANGDnx6ZgQQy/sCKQxH24g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163825},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6ee95cfe1d24e092ea9d306c588ff2b381c9e11c","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.4.2","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"24.4.1","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.0.3_1756500839270_0.645548729510439","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bernierllc/config-manager","version":"1.0.5","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.0.5","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"6fbb103a7b952382d9e38702079662a2301354ce","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.0.5.tgz","fileCount":47,"integrity":"sha512-aIv+xWmp1XqF9kZn3fKdYqpSf+wDBFT6m3hO0JcFj1CPY02dUb9TOd2QaA4/7clFKhr/VQl8u7khsbwuvOydJQ==","signatures":[{"sig":"MEQCIAm7H3s6curPkZxKPjr7HAFEWzWarBa+IlYGB4J5s3phAiAo7A/Hy+q4QOGP6Jp75z5Qowjfuzm3vpCn2kcGeQoAxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167308},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:109e17d2-56c0-4a9e-9aa5-e4a9ae8f2f93"}},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"20.19.6","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.0.5_1767642287143_0.5642244958362317","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bernierllc/config-manager","version":"1.0.6","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.0.6","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"12bdd5ed328f2aae3d221c1f4d4b2679ad9ef1b9","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.0.6.tgz","fileCount":47,"integrity":"sha512-9Fk5s19bQRE1vPve5KrLDr99Pn/pJIiOEzbO0tzbnnVo4hdaatdfuyNZ4JE/lhOdCoiG4RkS3ESnkwZCVQjKAQ==","signatures":[{"sig":"MEUCIQDOA+GPGA6Ol0EPw3I4qWwzZbbZbN1/L3Q7YAi4VVtKvgIgfKLrGrd7ABp6wbdMDudOnXUzxFyRBAOcTCuLBZVRaAw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167250},"main":"dist/index.js","_from":"file:bernierllc-config-manager-1.0.6.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/Users/mattbernier/projects/tools/packages/core/config-manager/bernierllc-config-manager-1.0.6.tgz","_integrity":"sha512-9Fk5s19bQRE1vPve5KrLDr99Pn/pJIiOEzbO0tzbnnVo4hdaatdfuyNZ4JE/lhOdCoiG4RkS3ESnkwZCVQjKAQ==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.6.2","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"25.2.1","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.0.6_1772571626905_0.17952112711887236","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@bernierllc/config-manager","version":"1.0.7","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.0.7","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"88c6f13d28eefc6daf3e943cdd32da715f8b4208","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.0.7.tgz","fileCount":47,"integrity":"sha512-CzvxfzQ3puHXV97uVzD0QaUQBqBGvWRz74Bxf8l/HVLNZTzeF20hubzSV6I8YXodMTRMaAhQm0LLEEFpVyQFjw==","signatures":[{"sig":"MEUCIEJ0PcycXQu1nZXf3Gjhuc9dCYlJJIWlJRFa18adK5tMAiEAjLX+DjSa4myVOeui4MyBDhAEFmwG7YX86VSa6L6wWo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167250},"main":"dist/index.js","_from":"file:bernierllc-config-manager-1.0.7.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:109e17d2-56c0-4a9e-9aa5-e4a9ae8f2f93"}},"_resolved":"/tmp/03cf2ee5468c468f7ba5a86704cf2647/bernierllc-config-manager-1.0.7.tgz","_integrity":"sha512-CzvxfzQ3puHXV97uVzD0QaUQBqBGvWRz74Bxf8l/HVLNZTzeF20hubzSV6I8YXodMTRMaAhQm0LLEEFpVyQFjw==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.11.0","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"20.20.0","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.0.7_1773081128686_0.9415502015088131","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/config-manager","version":"1.2.0","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"53f2e635dee4b036ae83ec4a669946312f3aaac4","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.2.0.tgz","fileCount":51,"integrity":"sha512-wsth6eqEpoXEVHVzZkt8whrzHzak2B3pC8KqWzrijfnNq8cR+uJdQuLSr/r49LXXAMLe0VHRWeJZLWldxuq9bA==","signatures":[{"sig":"MEYCIQC8KbuJtWdzSSHs9fZ+sGne8OX4TnKjuASaZlQydydrXwIhANpoNGvlJoyAW2ItHnf4WZ76UEXZidjs1dwFoP6Ty6mX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170447},"main":"dist/index.js","_from":"file:bernierllc-config-manager-1.2.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:109e17d2-56c0-4a9e-9aa5-e4a9ae8f2f93"}},"_resolved":"/home/runner/work/tools/tools/packages/core/config-manager/bernierllc-config-manager-1.2.0.tgz","_integrity":"sha512-wsth6eqEpoXEVHVzZkt8whrzHzak2B3pC8KqWzrijfnNq8cR+uJdQuLSr/r49LXXAMLe0VHRWeJZLWldxuq9bA==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.14.1","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"20.20.2","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.2.0_1779233849298_0.44039087637716867","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/config-manager","version":"1.3.0","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","_id":"@bernierllc/config-manager@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"a370e5a450350f0b9123f0eee766c7e298d67835","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.3.0.tgz","fileCount":51,"integrity":"sha512-TkRtkuY5zT56DHPgy6AgNhurcGkZTZMI4pHonqb26UhJgMuUO8xqtaM9uJwZen2VJEGvYsMbfUyvAIKQsy05wg==","signatures":[{"sig":"MEQCIBFqkkzjRZu+JdnFWC10S6Rhim8e+pBUdCrlE9KCOXCwAiAc04Id66KR+e1Jd+J3K63HJEdkGlSZZCG3XBWoUEQMCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170447},"main":"dist/index.js","_from":"file:bernierllc-config-manager-1.3.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rimraf dist","test:run":"jest --passWithNoTests","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:109e17d2-56c0-4a9e-9aa5-e4a9ae8f2f93"}},"_resolved":"/home/runner/work/tools/tools/packages/core/config-manager/bernierllc-config-manager-1.3.0.tgz","_integrity":"sha512-TkRtkuY5zT56DHPgy6AgNhurcGkZTZMI4pHonqb26UhJgMuUO8xqtaM9uJwZen2VJEGvYsMbfUyvAIKQsy05wg==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/core/config-manager"},"_npmVersion":"11.14.1","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","directories":{},"_nodeVersion":"20.20.2","dependencies":{"yaml":"^2.4.1","dotenv":"^16.4.5","chokidar":"^3.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0"},"_npmOperationalInternal":{"tmp":"tmp/config-manager_1.3.0_1779240960923_0.5936611077349507","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/config-manager","version":"1.4.0","description":"Environment-based configuration management with validation, hot reloading, and multi-source support","main":"dist/index.js","types":"dist/index.d.ts","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"author":{"name":"Bernier LLC"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bernier-llc/tools.git","directory":"packages/core/config-manager"},"dependencies":{"chokidar":"^3.6.0","dotenv":"^16.4.5","yaml":"^2.4.1"},"devDependencies":{"@types/jest":"^29.5.5","@types/node":"^20.6.0","eslint":"^8.50.0","jest":"^29.6.4","rimraf":"^5.0.0","ts-jest":"^29.1.1","typescript":"^5.2.2"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","test:run":"jest --passWithNoTests","lint":"eslint src/**/*.ts","clean":"rimraf dist"},"_id":"@bernierllc/config-manager@1.4.0","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"homepage":"https://github.com/bernier-llc/tools#readme","_integrity":"sha512-H2LiDoVpvVPQH3lKKt89cKXtuCRblfurKE4G1c8TYYgH4CQI22TlTeSfz5CghLpDWcQ99pj9ixE/TOzLApPfyw==","_resolved":"/home/runner/work/tools/tools/packages/core/config-manager/bernierllc-config-manager-1.4.0.tgz","_from":"file:bernierllc-config-manager-1.4.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-H2LiDoVpvVPQH3lKKt89cKXtuCRblfurKE4G1c8TYYgH4CQI22TlTeSfz5CghLpDWcQ99pj9ixE/TOzLApPfyw==","shasum":"4da8a6eedbda9d57a7dd0aede4dab96e5a2f2abd","tarball":"https://registry.npmjs.org/@bernierllc/config-manager/-/config-manager-1.4.0.tgz","fileCount":51,"unpackedSize":170447,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDUPVAtBBsYO9l5UKWjtOE4iiXqylRivlD5qiKC30jMeAIhAJm7EQAKNJuc+7mY/tbD4J2BgUIDXFj/G3qT7snRTFbZ"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:109e17d2-56c0-4a9e-9aa5-e4a9ae8f2f93"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/config-manager_1.4.0_1779249696559_0.24948448841955662"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-29T20:36:00.701Z","modified":"2026-05-20T04:01:36.825Z","1.0.1":"2025-08-29T20:36:01.510Z","1.0.2":"2025-08-29T20:37:28.121Z","1.0.3":"2025-08-29T20:53:59.455Z","1.0.5":"2026-01-05T19:44:47.276Z","1.0.6":"2026-03-03T21:00:27.050Z","1.0.7":"2026-03-09T18:32:08.840Z","1.2.0":"2026-05-19T23:37:29.452Z","1.3.0":"2026-05-20T01:36:01.167Z","1.4.0":"2026-05-20T04:01:36.720Z"},"bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"MIT","homepage":"https://github.com/bernier-llc/tools#readme","keywords":["configuration","environment","config","settings","validation","hot-reload","multi-source","schema","bernierllc"],"repository":{"type":"git","url":"git+https://github.com/bernier-llc/tools.git","directory":"packages/core/config-manager"},"description":"Environment-based configuration management with validation, hot reloading, and multi-source support","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/config-manager\n\nEnvironment-based configuration management with validation, hot reloading, and multi-source support.\n\n## Features\n\n- **🔄 Multiple Sources** - Environment variables, JSON/YAML files, remote APIs, CLI arguments\n- **🔍 Type Safety** - TypeScript interfaces with runtime validation  \n- **⚡ Hot Reloading** - Automatic config updates without restart\n- **📊 Hierarchical Merging** - Override configs by priority\n- **✅ Validation** - Schema validation with detailed error messages\n- **🔒 Secret Management** - Secure handling of sensitive configuration\n- **💾 Caching** - Efficient config caching with TTL\n- **🎛️ Specialized Managers** - Database and API-specific configuration helpers\n\n## Installation\n\n```bash\nnpm install @bernierllc/config-manager\n```\n\n## Quick Start\n\n```typescript\nimport { \n  ConfigManager, \n  EnvConfigSource, \n  FileConfigSource \n} from '@bernierllc/config-manager';\n\ninterface AppConfig {\n  server: {\n    port: number;\n    host: string;\n  };\n  database: {\n    url: string;\n    maxConnections: number;\n  };\n  auth: {\n    jwtSecret: string;\n    tokenExpiry: string;\n  };\n  features: {\n    enableAnalytics: boolean;\n    enableCache: boolean;\n  };\n}\n\nconst configManager = new ConfigManager<AppConfig>({\n  sources: [\n    new FileConfigSource('./config/default.json', { priority: 10 }),\n    new FileConfigSource(`./config/${process.env.NODE_ENV}.json`, { \n      priority: 20, \n      optional: true \n    }),\n    new EnvConfigSource({ prefix: 'APP_', priority: 30 })\n  ],\n  defaults: {\n    server: {\n      port: 3000,\n      host: '0.0.0.0'\n    },\n    features: {\n      enableAnalytics: false,\n      enableCache: true\n    }\n  },\n  required: ['database.url', 'auth.jwtSecret'],\n  watch: true\n});\n\nconst config = await configManager.load();\nconsole.log(`Server starting on ${config.server.host}:${config.server.port}`);\n\n// Get specific values\nconst port = configManager.get('server').port;\nconst jwtSecret = configManager.get('auth').jwtSecret;\n\n// Check if key exists\nif (configManager.has('features')) {\n  const features = configManager.get('features');\n}\n\n// Update configuration dynamically\nconfigManager.set('server', { ...config.server, port: 8080 });\nconfigManager.merge({ features: { enableAnalytics: true } });\n```\n\n## Configuration Sources\n\n### Environment Variables\n\n```typescript\nimport { EnvConfigSource } from '@bernierllc/config-manager';\n\n// Basic environment source\nconst envSource = new EnvConfigSource();\n\n// With prefix filtering\nconst appEnvSource = new EnvConfigSource({ \n  prefix: 'APP_',\n  separator: '_' \n});\n\n// Environment variables like APP_DATABASE_HOST become config.database.host\n```\n\n### File Sources\n\n```typescript\nimport { FileConfigSource } from '@bernierllc/config-manager';\n\n// JSON configuration\nconst jsonSource = new FileConfigSource('./config.json');\n\n// YAML configuration\nconst yamlSource = new FileConfigSource('./config.yaml', {\n  optional: true,  // Don't fail if file doesn't exist\n  priority: 20\n});\n\n// With transformation\nconst transformSource = new FileConfigSource('./config.json', {\n  transform: (data) => ({\n    ...data,\n    port: parseInt(data.port) // Transform string to number\n  })\n});\n```\n\n### Remote Configuration\n\n```typescript\nimport { RemoteConfigSource } from '@bernierllc/config-manager';\n\nconst remoteSource = new RemoteConfigSource('https://config.example.com/api/config', {\n  headers: {\n    'Authorization': `Bearer ${process.env.CONFIG_TOKEN}`\n  },\n  refreshInterval: 30000, // Refresh every 30 seconds\n  retries: 3,\n  fallbackData: { \n    feature: { enabled: false } // Used if remote fails\n  }\n});\n```\n\n### Command Line Arguments\n\n```typescript\nimport { CliConfigSource } from '@bernierllc/config-manager';\n\n// Parse process.argv\nconst cliSource = new CliConfigSource();\n\n// With custom args and aliases\nconst customCli = new CliConfigSource({\n  aliases: { p: 'port', h: 'host' },\n  transform: {\n    timeout: (value) => parseInt(value) * 1000 // Convert to milliseconds\n  }\n}, ['--port=3000', '-h', 'localhost']);\n```\n\n## Schema Validation\n\n```typescript\nconst configManager = new ConfigManager<AppConfig>({\n  sources: [envSource, fileSource],\n  schema: {\n    type: 'object',\n    properties: {\n      server: {\n        type: 'object',\n        properties: {\n          port: { \n            type: 'number', \n            validate: (port) => port > 0 && port < 65536,\n            description: 'Server port (1-65535)'\n          },\n          host: { \n            type: 'string',\n            default: 'localhost'\n          }\n        }\n      },\n      database: {\n        type: 'object',\n        properties: {\n          url: { \n            type: 'string', \n            required: true,\n            validate: (url) => url.startsWith('postgresql://'),\n            description: 'PostgreSQL connection URL'\n          },\n          maxConnections: { \n            type: 'number',\n            default: 10,\n            validate: (n) => n > 0 && n <= 100\n          }\n        }\n      }\n    }\n  },\n  required: ['database.url'],\n  onUpdate: (newConfig, prevConfig) => {\n    console.log('Configuration updated');\n  },\n  onError: (error, sourceName) => {\n    console.error(`Config source '${sourceName}' failed:`, error);\n  }\n});\n\n// Validate configuration\nconst validation = configManager.validate();\nif (!validation.valid) {\n  validation.errors.forEach(error => {\n    console.error(`${error.path}: ${error.message}`);\n  });\n}\n```\n\n## Hot Reloading\n\n```typescript\nconst configManager = new ConfigManager({\n  sources: [\n    new FileConfigSource('./config.json'),\n    new RemoteConfigSource('https://api.example.com/config', {\n      refreshInterval: 60000 // Check every minute\n    })\n  ],\n  watch: true, // Enable hot reloading\n  onUpdate: async (newConfig, prevConfig) => {\n    // Handle configuration changes\n    if (newConfig.features.enableNewFeature !== prevConfig.features.enableNewFeature) {\n      if (newConfig.features.enableNewFeature) {\n        await enableNewFeature();\n      } else {\n        await disableNewFeature();\n      }\n    }\n  }\n});\n\n// Start watching for changes\nconfigManager.startWatching();\n\n// Stop watching when done\nprocess.on('exit', () => {\n  configManager.stopWatching();\n});\n```\n\n## Specialized Configuration Managers\n\n### Database Configuration\n\n```typescript\nimport { DatabaseConfig, EnvConfigSource } from '@bernierllc/config-manager';\n\nconst dbConfig = new DatabaseConfig({\n  sources: [new EnvConfigSource({ prefix: 'DB_' })],\n  schema: {\n    type: 'object',\n    properties: {\n      host: { type: 'string', required: true },\n      port: { type: 'number', default: 5432 },\n      database: { type: 'string', required: true },\n      username: { type: 'string', required: true },\n      password: { type: 'string', required: true },\n      ssl: { type: 'boolean', default: false },\n      pool: {\n        type: 'object',\n        properties: {\n          min: { type: 'number', default: 2 },\n          max: { type: 'number', default: 10 }\n        }\n      }\n    }\n  }\n});\n\nawait dbConfig.load();\n\n// Get connection string\nconst connectionString = dbConfig.getConnectionString();\n// postgresql://user:pass@host:port/database\n\n// Get pool configuration\nconst poolConfig = dbConfig.getPoolConfig();\n// { min: 2, max: 10, acquireTimeoutMillis: 60000, ... }\n\n// Get engine-specific config\nconst pgConfig = dbConfig.getEngineConfig('postgresql');\n```\n\n### API Configuration\n\n```typescript\nimport { ApiConfig, FileConfigSource } from '@bernierllc/config-manager';\n\nconst apiConfig = new ApiConfig({\n  sources: [new FileConfigSource('./api-config.json')]\n});\n\nawait apiConfig.load();\n\n// Get resolved endpoints (relative URLs combined with baseUrl)\nconst endpoints = apiConfig.getEndpoints();\n// { users: 'https://api.example.com/users', posts: 'https://api.example.com/posts' }\n\n// Get authentication config\nconst auth = apiConfig.getAuth();\n// { type: 'bearer', token: 'abc123' }\n\n// Get request configuration for HTTP client\nconst requestConfig = apiConfig.getRequestConfig();\n// { timeout: 30000, retries: 3, headers: { Authorization: 'Bearer abc123' } }\n\n// Test API connectivity\nconst results = await apiConfig.testConnectivity();\n// [{ endpoint: 'users', success: true }, { endpoint: 'posts', success: false, error: 'timeout' }]\n```\n\n## Configuration Export and Debugging\n\n```typescript\n// Export current configuration (with sensitive data redacted)\nconsole.log('JSON:', configManager.export('json'));\nconsole.log('YAML:', configManager.export('yaml'));\nconsole.log('ENV:', configManager.export('env'));\n\n// Debug configuration sources\nconst sourceInfo = configManager.getSourceInfo();\nsourceInfo.forEach(info => {\n  console.log(`Source: ${info.name} (priority: ${info.priority})`);\n  console.log(`  Status: ${info.loaded ? 'loaded' : 'failed'}`);\n  console.log(`  Keys: ${info.keys.join(', ')}`);\n  if (info.error) {\n    console.log(`  Error: ${info.error}`);\n  }\n});\n```\n\n## Advanced Usage\n\n### Custom Configuration Sources\n\n```typescript\nimport { ConfigSource, ConfigData } from '@bernierllc/config-manager';\n\nclass CustomConfigSource implements ConfigSource {\n  name = 'custom';\n  priority = 50;\n\n  async load(): Promise<ConfigData> {\n    // Your custom loading logic\n    return { customKey: 'customValue' };\n  }\n\n  watch(callback: (data: ConfigData) => void): void {\n    // Optional: implement watching\n    setInterval(async () => {\n      const data = await this.load();\n      callback(data);\n    }, 10000);\n  }\n\n  stop(): void {\n    // Optional: cleanup watching\n  }\n}\n```\n\n### Configuration Transforms\n\n```typescript\nconst configManager = new ConfigManager({\n  sources: [fileSource],\n  transform: {\n    // Transform relative URLs to absolute\n    'api.endpoints': (endpoints) => {\n      const baseUrl = configManager.get('api').baseUrl;\n      return Object.fromEntries(\n        Object.entries(endpoints).map(([key, url]) => [\n          key, \n          url.startsWith('http') ? url : `${baseUrl}${url}`\n        ])\n      );\n    },\n    // Parse connection strings\n    'database.url': (url) => {\n      // Parse and validate database URL\n      return new URL(url);\n    }\n  }\n});\n```\n\n### Partial Updates\n\n```typescript\n// Validate partial configuration before applying\nconst partialConfig = { server: { port: 8080 } };\nconst validation = configManager.validatePartial(partialConfig);\n\nif (validation.valid) {\n  configManager.merge(partialConfig);\n} else {\n  console.error('Invalid partial config:', validation.errors);\n}\n```\n\n## Error Handling\n\n```typescript\nconst configManager = new ConfigManager({\n  sources: [\n    new RemoteConfigSource('https://unreliable-config-api.com'),\n    new FileConfigSource('./fallback-config.json') // Fallback\n  ],\n  onError: (error, sourceName) => {\n    // Log error but continue with other sources\n    console.warn(`Config source '${sourceName}' failed: ${error.message}`);\n    \n    // Could also emit metrics, send alerts, etc.\n    metrics.increment('config.source.error', { source: sourceName });\n  }\n});\n\ntry {\n  const config = await configManager.load();\n} catch (error) {\n  // All sources failed\n  console.error('Failed to load configuration:', error);\n  process.exit(1);\n}\n```\n\n## Caching\n\n```typescript\nconst configManager = new ConfigManager({\n  sources: [remoteSource],\n  cache: true,\n  cacheTTL: 5 * 60 * 1000, // 5 minutes\n  onUpdate: (newConfig) => {\n    console.log('Configuration cache refreshed');\n  }\n});\n\n// First load - fetches from sources\nconst config1 = await configManager.load(); \n\n// Second load - uses cache (if within TTL)\nconst config2 = await configManager.load();\n\n// Force reload - bypasses cache\nconst config3 = await configManager.reload();\n```\n\n## TypeScript Support\n\nFull TypeScript support with type-safe configuration access:\n\n```typescript\ninterface MyConfig {\n  server: {\n    port: number;\n    host: string;\n  };\n  database: {\n    url: string;\n  };\n}\n\nconst configManager = new ConfigManager<MyConfig>({\n  // ... sources\n});\n\nawait configManager.load();\n\n// Type-safe access\nconst port: number = configManager.get('server').port;\nconst host: string = configManager.get('server').host;\n\n// TypeScript will catch invalid keys\n// configManager.get('invalid'); // ✗ TypeScript error\n```\n\n## Performance\n\n- **Fast Configuration Access**: < 1ms for cached configurations\n- **Efficient Merging**: Optimized deep merge algorithms\n- **Smart Caching**: TTL-based caching with automatic invalidation\n- **Minimal Memory Usage**: Efficient data structures and cleanup\n- **Hot Reload Optimization**: Debounced file watching and change detection\n\n## Integration Status\n\n### Logger Integration\n**Status**: Optional (recommended for configuration monitoring)\n\n**Justification**: While this package can function without logging, it's highly recommended to integrate `@bernierllc/logger` for configuration change monitoring and debugging. Config managers handle sensitive data and configuration changes, and logging these events helps with security auditing, debugging configuration issues, and tracking configuration drift. However, the package is designed to work without logging for environments where logging isn't available.\n\n**Pattern**: Optional integration - package works without logger, but logger enhances configuration monitoring capabilities.\n\n**Example Integration**:\n```typescript\nimport { Logger } from '@bernierllc/logger';\nimport { ConfigManager } from '@bernierllc/config-manager';\n\nconst logger = new Logger({ service: 'config-manager' });\nconst configManager = new ConfigManager({\n  // ... config\n});\n\n// Log configuration changes\nconfigManager.on('change', (changes) => {\n  logger.info('Configuration changed', { keys: Object.keys(changes) });\n});\n```\n\n### NeverHub Integration\n**Status**: Optional (recommended for distributed configuration)\n\n**Justification**: While this package can function without NeverHub, it's highly recommended to integrate `@bernierllc/neverhub-adapter` for distributed configuration management. Config managers often need to coordinate configuration across services, and NeverHub provides a service mesh for publishing configuration changes that other services can subscribe to. However, the package is designed to work without NeverHub for simpler use cases.\n\n**Pattern**: Optional integration - package works without NeverHub, but NeverHub enhances distributed configuration capabilities.\n\n**Example Integration**:\n```typescript\nimport { NeverHubAdapter } from '@bernierllc/neverhub-adapter';\nimport { ConfigManager } from '@bernierllc/config-manager';\n\nconst neverhub = new NeverHubAdapter({ service: 'config-manager' });\nconst configManager = new ConfigManager({ /* config */ });\n\n// Publish configuration changes to NeverHub\nconfigManager.on('change', async (changes) => {\n  await neverhub.publish('config.changed', {\n    service: 'config-manager',\n    changes,\n    timestamp: Date.now()\n  });\n});\n```\n\n### Docs-Suite Integration\n**Status**: Ready\n\n**Format**: TypeDoc-compatible JSDoc comments are included throughout the source code. All public APIs are documented with examples and type information.\n\n## Security\n\n- **Sensitive Data Protection**: Automatic redaction of passwords, keys, tokens\n- **Source Validation**: Validate configuration sources and data integrity  \n- **Secure Remote Fetching**: Timeout protection and retry limits\n- **No Secret Logging**: Sensitive values never appear in logs or exports\n\n## Dependencies\n\n- `chokidar` - File watching for hot reload\n- `yaml` - YAML configuration file support\n- `dotenv` - Environment file loading\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.","readmeFilename":"README.md"}