{"_id":"@bernierllc/validators-license-headers","_rev":"7-dde058ebf1fd236c8dfec2620e6ab096","name":"@bernierllc/validators-license-headers","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.2":{"name":"@bernierllc/validators-license-headers","version":"0.1.2","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-license-headers@0.1.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"204f92827f48be4760b01c2a811886b374f3a179","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.1.2.tgz","fileCount":21,"integrity":"sha512-lkm4fpwH6Qizd8eGxp5XSLyk+FnQ5yZQ4iTH93L4sgHeruBENV+fVduw5OAPo/NT19sQc++HN+6CvcnnTweOGA==","signatures":[{"sig":"MEUCIQDAX3XaLP9F8xEoSEfrfLZk154vIWMJU1tZnO6gsolOZAIgbbUQrrsAXGSHbh+WcvRhfuWVhRSWH9qM8Zjsq2MgVWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49986},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c5ae13f5ff57b9795ce9a1e574455bf202c93763","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"bernierllc":{"type":"primitive","domain":"release","category":"validators","integration":{"neverhub":"not-applicable"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-license-headers"},"_npmVersion":"11.4.2","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/validators-core":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-license-headers_0.1.2_1760211137571_0.6310797994777921","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bernierllc/validators-license-headers","version":"0.3.0","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-license-headers@0.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"d685f8b9413dc68b28b80d78b10a7b95c1526deb","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.3.0.tgz","fileCount":21,"integrity":"sha512-6ZmnFDOf3tnM6O8Eol2aADKUn424xR0/LWXRYSa7sUDo7ub+QA83BG1nvtZPgpHXC0m+qAbcbzEUvcz4GNP2zQ==","signatures":[{"sig":"MEYCIQC9ufxXAhGbanqQyPSr9UhMBKh6LRwvoFrnmpRRm71NKgIhAJthyR4Ji/EOa0wqr/bYiygKwxjF2Wvq1oRvB4/ogNyX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50089},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b774911f-514b-463c-9b4c-0f6db7359f6a"}},"bernierllc":{"type":"primitive","domain":"release","category":"validators","integration":{"neverhub":"not-applicable"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-license-headers"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/validators-core":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-license-headers_0.3.0_1767642368598_0.03646917162723695","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bernierllc/validators-license-headers","version":"0.3.1","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-license-headers@0.3.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"fd87e832c1fd2dd11c20aa7b31fa76e0fa9b85e9","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.3.1.tgz","fileCount":21,"integrity":"sha512-ouPrJgTmpzSU/3m7NKzgS+DDzVUlFuO66osnA+o/3WbOWU6lkMlHgJAfPlwowsf95d7VmIVWKeUsrcvvdfpIcA==","signatures":[{"sig":"MEUCIEMnjljqAeEBIJhrFLzc9gDmY1hyxUs1u96sF8Dxgl2HAiEAmXTqjt+gnKPX0QOj05Ggl12CK8mJl3ju8m27ZvOE8mE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50031},"main":"dist/index.js","_from":"file:bernierllc-validators-license-headers-0.3.1.tgz","types":"dist/index.d.ts","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b774911f-514b-463c-9b4c-0f6db7359f6a"}},"_resolved":"/tmp/7f72ac24c7a81b010886752915751eda/bernierllc-validators-license-headers-0.3.1.tgz","_integrity":"sha512-ouPrJgTmpzSU/3m7NKzgS+DDzVUlFuO66osnA+o/3WbOWU6lkMlHgJAfPlwowsf95d7VmIVWKeUsrcvvdfpIcA==","bernierllc":{"type":"primitive","domain":"release","category":"validators","integration":{"neverhub":"not-applicable"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-license-headers"},"_npmVersion":"11.11.0","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-license-headers_0.3.1_1773078299968_0.46553301499051325","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bernierllc/validators-license-headers","version":"0.3.2","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-license-headers@0.3.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"e754f2c5a387de6d36e22e4bed2bc699613a0606","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.3.2.tgz","fileCount":21,"integrity":"sha512-7Q6NFdIUFkJ+4ff0jQD2nnhRKP/gHRi895gnwagcL00yjfX7RBqQL2ZqAFtvztDxR7cVG1s/IlVMkgq5NhPtRw==","signatures":[{"sig":"MEUCIFgtF37fRYgFhU49XXyoPmAmTSxZ1vnu8Jtx0BYL4CD7AiEA6X3lM2VcxnBtPVmwBkIgQ471gxYC6nkglKUmJZbLsEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50031},"main":"dist/index.js","_from":"file:bernierllc-validators-license-headers-0.3.2.tgz","types":"dist/index.d.ts","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b774911f-514b-463c-9b4c-0f6db7359f6a"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-license-headers/bernierllc-validators-license-headers-0.3.2.tgz","_integrity":"sha512-7Q6NFdIUFkJ+4ff0jQD2nnhRKP/gHRi895gnwagcL00yjfX7RBqQL2ZqAFtvztDxR7cVG1s/IlVMkgq5NhPtRw==","bernierllc":{"type":"primitive","domain":"release","category":"validators","integration":{"neverhub":"not-applicable"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-license-headers"},"_npmVersion":"11.11.0","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-license-headers_0.3.2_1773163945086_0.5132042052885071","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/validators-license-headers","version":"0.4.0","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-license-headers@0.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"d15deff9cb4ccb2bbac676b40eb71b5d5832298b","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.4.0.tgz","fileCount":21,"integrity":"sha512-FPkFeAMLC60bFghN6w2W7LXks5zvt1dc9YQsYLaaW7W4LAuuaC4rl49Ixv8VqTMOBbaTSlKCnvHiHsSFZg8eUg==","signatures":[{"sig":"MEUCIEx9A6osHxqpNU7b7RXqq9YcsnB1FGFtb+P/tFiUpdlQAiEAoA8v4dd/aMS3j6lFt+mikUEUeoNYbxasP4Owuq7+edI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50031},"main":"dist/index.js","_from":"file:bernierllc-validators-license-headers-0.4.0.tgz","types":"dist/index.d.ts","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b774911f-514b-463c-9b4c-0f6db7359f6a"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-license-headers/bernierllc-validators-license-headers-0.4.0.tgz","_integrity":"sha512-FPkFeAMLC60bFghN6w2W7LXks5zvt1dc9YQsYLaaW7W4LAuuaC4rl49Ixv8VqTMOBbaTSlKCnvHiHsSFZg8eUg==","bernierllc":{"type":"primitive","domain":"release","category":"validators","integration":{"neverhub":"not-applicable"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-license-headers"},"_npmVersion":"11.14.1","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-license-headers_0.4.0_1779242175326_0.44093749875577015","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bernierllc/validators-license-headers","version":"0.5.0","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-license-headers@0.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"0ca0e3db2e5339476f23fa6406e379c80a0ee0fe","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.5.0.tgz","fileCount":21,"integrity":"sha512-rotvNCTFgmgLCa3b0oiYKwLney7b/yED7fNBpzeaXjYdlhcYB6tp267IoTEpCklFNc7ChN0KiPhrAZ/rAjX7IQ==","signatures":[{"sig":"MEQCIEbKDaGgLNnH6J+/PYON97zkOh1Z9YBNNzWXst9R2QFSAiAc6DpIHDmiAEZ8GtsE0tbGVjy08r9Uw5VKi65u+mo3ew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50031},"main":"dist/index.js","_from":"file:bernierllc-validators-license-headers-0.5.0.tgz","types":"dist/index.d.ts","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b774911f-514b-463c-9b4c-0f6db7359f6a"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-license-headers/bernierllc-validators-license-headers-0.5.0.tgz","_integrity":"sha512-rotvNCTFgmgLCa3b0oiYKwLney7b/yED7fNBpzeaXjYdlhcYB6tp267IoTEpCklFNc7ChN0KiPhrAZ/rAjX7IQ==","bernierllc":{"type":"primitive","domain":"release","category":"validators","integration":{"neverhub":"not-applicable"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-license-headers"},"_npmVersion":"11.14.1","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-license-headers_0.5.0_1779250932623_0.6830729979872598","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@bernierllc/validators-license-headers","version":"0.7.0","description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","main":"dist/index.js","types":"dist/index.d.ts","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","private":false,"dependencies":{"@bernierllc/validators-core":"0.4.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/eslint-plugin":"^5.57.0","@typescript-eslint/parser":"^5.57.0","eslint":"^8.37.0","jest":"^29.5.0","ts-jest":"^29.0.5","typescript":"^5.0.0"},"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/validators/validators-license-headers"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bernierllc":{"category":"validators","type":"primitive","domain":"release","integration":{"neverhub":"not-applicable"}},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","clean":"rm -rf dist"},"_id":"@bernierllc/validators-license-headers@0.7.0","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_integrity":"sha512-aJ0l4OWaL+BiXxWl5anJvCZFLetOcgdUytZ1V/f1c40oOm1y2bTfucmvXGUD+pwUcOTQf7ejnDuN/ATc5VLRMw==","_resolved":"/home/runner/work/tools/tools/packages/validators/validators-license-headers/bernierllc-validators-license-headers-0.7.0.tgz","_from":"file:bernierllc-validators-license-headers-0.7.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-aJ0l4OWaL+BiXxWl5anJvCZFLetOcgdUytZ1V/f1c40oOm1y2bTfucmvXGUD+pwUcOTQf7ejnDuN/ATc5VLRMw==","shasum":"4bb5cd512899df242cce306a34f0dbccb4836cc7","tarball":"https://registry.npmjs.org/@bernierllc/validators-license-headers/-/validators-license-headers-0.7.0.tgz","fileCount":23,"unpackedSize":51771,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDpj5iuoo/+vJF5ck+Ok1zCy28J3E3Gqk4mf/DX61n11wIgTvd9EgL31eIHH57f/cDhTIV675b3RgGhlxqe21odBKA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b774911f-514b-463c-9b4c-0f6db7359f6a"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validators-license-headers_0.7.0_1779252219657_0.5350985265369728"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-11T19:32:17.483Z","modified":"2026-05-20T04:43:39.938Z","0.1.2":"2025-10-11T19:32:17.751Z","0.3.0":"2026-01-05T19:46:08.741Z","0.3.1":"2026-03-09T17:45:00.148Z","0.3.2":"2026-03-10T17:32:25.281Z","0.4.0":"2026-05-20T01:56:15.490Z","0.5.0":"2026-05-20T04:22:12.770Z","0.7.0":"2026-05-20T04:43:39.799Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/bernierllc/tools#readme","keywords":["validation","validators","license","copyright","spdx","compliance","release","primitive","mece","legal"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/validators/validators-license-headers"},"description":"License header validation primitive - header presence, copyright year, forbidden licenses, SPDX identifiers","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/validators-license-headers\n\nLicense header validation primitive for ensuring source files contain proper copyright notices, SPDX identifiers, and compliant licensing information.\n\n## Installation\n\n```bash\nnpm install @bernierllc/validators-license-headers\n```\n\n## Overview\n\nThis validator provides comprehensive license header validation for source code files, checking for:\n- **Header presence** - Ensures files contain license headers\n- **Copyright year** - Validates year is present and current\n- **Forbidden licenses** - Detects incompatible licenses (e.g., GPL in commercial code)\n- **SPDX identifiers** - Validates standard license identifiers\n- **Copyright holders** - Verifies copyright holder information\n\n## Usage\n\n### Basic Validation\n\n```typescript\nimport { validateLicenseHeaders } from '@bernierllc/validators-license-headers';\nimport type { SharedUtils } from '@bernierllc/validators-core';\n\nconst fileMetadata = {\n  path: 'src/index.ts',\n  content: fileContent,\n  extension: '.ts'\n};\n\nconst utils: SharedUtils = /* validators utils */;\n\nconst result = await validateLicenseHeaders(fileMetadata, {}, utils);\n\nif (result.problems.length > 0) {\n  console.log('License header issues found:');\n  result.problems.forEach(problem => {\n    console.log(`- ${problem.message}`);\n  });\n}\n```\n\n### With Custom Options\n\n```typescript\nconst result = await validateLicenseHeaders(\n  fileMetadata,\n  {\n    requireHeader: true,\n    validateCopyrightYear: true,\n    expectedYear: 2025,\n    checkForbiddenLicenses: true,\n    forbiddenLicenses: ['GPL-2.0', 'GPL-3.0', 'AGPL-3.0'],\n    requireSpdxIdentifier: true,\n    allowedSpdxIdentifiers: ['MIT', 'Apache-2.0', 'ISC'],\n    requireCopyrightHolder: true,\n    expectedCopyrightHolders: ['Bernier LLC'],\n    maxHeaderLineOffset: 10\n  },\n  utils\n);\n```\n\n### Create Configured Validator\n\n```typescript\nimport { createLicenseHeaderValidator } from '@bernierllc/validators-license-headers';\n\nconst validator = createLicenseHeaderValidator({\n  requireHeader: true,\n  validateCopyrightYear: true,\n  expectedYear: 2025,\n  checkForbiddenLicenses: true\n});\n\nconst result = await validator.validate(fileMetadata, utils);\n\n// Get validator metadata\nconst meta = validator.getMeta();\nconsole.log(`Validator: ${meta.name}`);\nconsole.log(`Enabled rules: ${meta.enabledRules.join(', ')}`);\n```\n\n## Configuration Options\n\n### `LicenseHeaderOptions`\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `requireHeader` | `boolean` | `true` | Require license header to be present |\n| `validateCopyrightYear` | `boolean` | `true` | Validate copyright year is present and valid |\n| `expectedYear` | `number \\| number[]` | Current year | Expected copyright year(s) |\n| `checkForbiddenLicenses` | `boolean` | `true` | Check for forbidden licenses |\n| `forbiddenLicenses` | `string[]` | `['GPL-2.0', 'GPL-3.0', 'AGPL-3.0']` | List of forbidden license identifiers |\n| `requireSpdxIdentifier` | `boolean` | `false` | Require SPDX identifier to be present |\n| `allowedSpdxIdentifiers` | `string[]` | `[]` | List of allowed SPDX identifiers (empty = all allowed) |\n| `requireCopyrightHolder` | `boolean` | `false` | Require copyright holder to be specified |\n| `expectedCopyrightHolders` | `string[]` | `[]` | Expected copyright holder(s) |\n| `maxHeaderLineOffset` | `number` | `10` | Maximum lines from top of file to search for header |\n\n## Validation Rules\n\n### Header Presence\n\nValidates that source files contain a license header in the first few lines.\n\n**Severity**: `error`\n\n**Example violation**:\n```typescript\n// No license header\nconst x = 1;\n```\n\n**Example passing**:\n```typescript\n/*\nCopyright (c) 2025 Bernier LLC\nSPDX-License-Identifier: MIT\n*/\n\nconst x = 1;\n```\n\n### Copyright Year\n\nValidates copyright year is present and matches expected year(s).\n\n**Severity**: `warn` (for mismatch), `error` (for missing)\n\n**Example violation**:\n```typescript\n/*\nCopyright (c) 2020 Bernier LLC\n*/\n// Expected: 2025\n```\n\n**Example passing**:\n```typescript\n/*\nCopyright (c) 2025 Bernier LLC\n*/\n\n/*\nCopyright (c) 2020-2025 Bernier LLC\n*/\n```\n\n### Forbidden Licenses\n\nDetects forbidden licenses like GPL in commercial code.\n\n**Severity**: `error`\n\n**Example violation**:\n```typescript\n/*\nCopyright (c) 2025 Company\nSPDX-License-Identifier: GPL-3.0\n*/\n```\n\n**Reason**: GPL requires derivative works to be open source (copyleft)\n\n### SPDX Identifier\n\nValidates SPDX license identifier is present and matches allowed list.\n\n**Severity**: `warn` (for missing), `error` (for not allowed)\n\n**Example violation**:\n```typescript\n/*\nCopyright (c) 2025 Bernier LLC\n*/\n// Missing SPDX-License-Identifier\n```\n\n**Example passing**:\n```typescript\n/*\nCopyright (c) 2025 Bernier LLC\nSPDX-License-Identifier: MIT\n*/\n```\n\n### Copyright Holder\n\nValidates copyright holder is present and matches expected values.\n\n**Severity**: `warn` (for missing), `error` (for mismatch)\n\n**Example violation**:\n```typescript\n/*\nCopyright (c) 2025\n*/\n// Missing copyright holder\n```\n\n**Example passing**:\n```typescript\n/*\nCopyright (c) 2025 Bernier LLC\n*/\n```\n\n## Parser Utilities\n\nThe package exports parser utilities for extracting license header information:\n\n```typescript\nimport {\n  extractLicenseHeader,\n  extractCopyrightYear,\n  extractCopyrightHolder,\n  extractSpdxIdentifier,\n  parseYearSpec,\n  isYearAcceptable\n} from '@bernierllc/validators-license-headers';\n\n// Extract complete header information\nconst header = extractLicenseHeader(fileContent);\nconsole.log(header?.copyrightYear);      // \"2025\"\nconsole.log(header?.copyrightHolder);    // \"Bernier LLC\"\nconsole.log(header?.spdxIdentifier);     // \"MIT\"\n\n// Extract specific components\nconst year = extractCopyrightYear(\"Copyright (c) 2025 Company\");\nconst holder = extractCopyrightHolder(\"Copyright (c) 2025 Company\");\nconst spdx = extractSpdxIdentifier(\"SPDX-License-Identifier: MIT\");\n\n// Year validation\nconst years = parseYearSpec(\"2020-2025\");  // [2020, 2021, 2022, 2023, 2024, 2025]\nconst acceptable = isYearAcceptable(\"2025\", 2025);  // true\n```\n\n## Supported Header Formats\n\n### Block Comments\n\n```typescript\n/*\nCopyright (c) 2025 Bernier LLC\nSPDX-License-Identifier: MIT\n*/\n```\n\n```c\n/*\n * Copyright (c) 2025 Bernier LLC\n * License: Apache-2.0\n */\n```\n\n### Line Comments\n\n```javascript\n// Copyright (c) 2025 Bernier LLC\n// SPDX-License-Identifier: ISC\n```\n\n```python\n# Copyright (c) 2025 Bernier LLC\n# License: MIT\n```\n\n### Year Formats\n\n- Single year: `Copyright (c) 2025`\n- Year range: `Copyright (c) 2020-2025`\n- Alternative symbols: `© 2025`, `(c) 2025`\n\n## Individual Rules Export\n\nFor advanced usage, you can import and use individual rules:\n\n```typescript\nimport {\n  headerPresenceRule,\n  copyrightYearRule,\n  forbiddenLicensesRule,\n  spdxIdentifierRule,\n  copyrightHolderRule\n} from '@bernierllc/validators-license-headers';\n```\n\n## API Reference\n\n### `validateLicenseHeaders(fileMetadata, options, utils): Promise<ValidationResult>`\n\nValidates license headers in a file.\n\n**Parameters:**\n- `fileMetadata: FileMetadata` - File to validate\n- `options: LicenseHeaderOptions` - Validation options\n- `utils: SharedUtils` - Shared utilities from validators-core\n\n**Returns:** `Promise<ValidationResult>` - Validation results with problems and stats\n\n### `createLicenseHeaderValidator(options): { validate, getMeta }`\n\nCreates a configured validator instance.\n\n**Parameters:**\n- `options: LicenseHeaderOptions` - Validator configuration\n\n**Returns:** Object with `validate` function and `getMeta` function\n\n## Integration Status\n\n### Logger Integration\n**Status**: Not applicable - Pure validation primitive\n\nThis package is a primitive validator that doesn't require logger integration. It's designed to be used by domain validators and validation runners that handle logging at a higher level.\n\n### Docs-Suite Integration\n**Status**: Ready - Complete API documentation with examples\n\nThe package provides comprehensive documentation including:\n- API reference with all exported functions\n- Usage examples for common scenarios\n- Configuration options with detailed descriptions\n- Rule documentation with severity levels\n\n### NeverHub Integration\n**Status**: Not applicable - Primitive validator\n\nAs a primitive validator in the MECE architecture, this package operates at the lowest level and doesn't require NeverHub integration. Higher-level domain validators and validation services that use this package will handle NeverHub integration for:\n- Validation result aggregation\n- Compliance monitoring\n- License policy enforcement across services\n\n## Dependencies\n\n- `@bernierllc/validators-core` - Core validation framework\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\n## See Also\n\n- [@bernierllc/validators-core](../validators-core) - Core validation framework\n- [@bernierllc/validators-utils](../validators-utils) - Validation utilities\n- [@bernierllc/validators-secret-patterns](../validators-secret-patterns) - Secret detection validator\n","readmeFilename":"README.md"}