{"_id":"@dfine-io-gmbh/dlint","_rev":"24-e81c0c351cbf6ff8a179487df1d70544","name":"@dfine-io-gmbh/dlint","dist-tags":{"latest":"1.5.4"},"versions":{"0.1.0":{"name":"@dfine-io-gmbh/dlint","version":"0.1.0","_id":"@dfine-io-gmbh/dlint@0.1.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"68741bb9219d57aed5c2e05ff6b73fa43e37e4cf","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-0.1.0.tgz","fileCount":114,"integrity":"sha512-xwFXRZrIqQkcHVfcmSbAkBpsg0wfq7gXAStvgJjVo7hh88ezbEQo3woBUUlDqylXusTXnQqrA0aGF+WTUTLzPA==","signatures":[{"sig":"MEUCIQCuxxkFQREGi/5YkQGguliSRtqHA8UGGlR3c8/IIP61LQIgMJTYAT+bzDIWd5VKwThQm1AM5CTeiRHEneaOC+WKTPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126111},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"tsc"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"_npmVersion":"11.3.0","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.3.0"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_0.1.0_1773797569545_0.24789391200044464","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@dfine-io-gmbh/dlint","version":"1.0.0","_id":"@dfine-io-gmbh/dlint@1.0.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"ce983540c6690bcae49d509d1b2a8e6f7912def1","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.0.tgz","fileCount":146,"integrity":"sha512-j3m5BpztvQPrwoYeud1g6/fLzImTYvT/yuEnvK1waEY6viKAK2YDIl31HAczAcHIj1V+fCDhEmoOWZRZ07K6bg==","signatures":[{"sig":"MEUCIGRq42Ca0WEXEHx+pdsHXDkQ1rVuJ8H8vNtTxmc9KLWlAiEAm/PeWV/i9ejpg8h76qM4WU7Uwqn41miZCFN9+WzPIp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376220},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"31e0928c1a95fed04968efea900a27ac0a8df3c7","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"tsc"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"_npmVersion":"11.3.0","description":"```      ██████╗ ██╗     ██╗███╗   ██╗████████╗      ██╔══██╗██║     ██║████╗  ██║╚══██╔══╝      ██║  ██║██║     ██║██╔██╗ ██║   ██║      ██║  ██║██║     ██║██║╚██╗██║   ██║      ██████╔╝███████╗██║██║ ╚████║   ██║      ╚═════╝ ╚══════╝╚═╝╚═╝  ╚═══╝   ╚═╝","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.3.0"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.0_1775333135496_0.20509658571746825","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dfine-io-gmbh/dlint","version":"1.0.1","_id":"@dfine-io-gmbh/dlint@1.0.1","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"17958a6b79573f5a06bc7078e89b9d103608a1cd","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.1.tgz","fileCount":118,"integrity":"sha512-ON7210v9WPWMmxZnH91Iuoqa8Ob/HsuvOGhqWDiF225M+/EhsXmaMHF9JSWNpNCgy5vPz8DwK/w+5wNqXx5JBQ==","signatures":[{"sig":"MEYCIQDMNgXHUwh7ZK0uSQxE/aPeaAGKCPEinMQm30vgE9G3QgIhAOJXoHgu4MYkMbJHq61wrVQmWWkFNueDvMM2ieUyX8kA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265557},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"32a6bcda2975fff309ca0ddf82cb6ae4d94406b5","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"_npmVersion":"11.3.0","description":"```      ██████╗ ██╗     ██╗███╗   ██╗████████╗      ██╔══██╗██║     ██║████╗  ██║╚══██╔══╝      ██║  ██║██║     ██║██╔██╗ ██║   ██║      ██║  ██║██║     ██║██║╚██╗██║   ██║      ██████╔╝███████╗██║██║ ╚████║   ██║      ╚═════╝ ╚══════╝╚═╝╚═╝  ╚═══╝   ╚═╝","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.3.0"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.1_1775334120963_0.21982164114613134","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dfine-io-gmbh/dlint","version":"1.0.2","_id":"@dfine-io-gmbh/dlint@1.0.2","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"22e0d960cb9333da34b0c006367ad240a01cb6ae","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.2.tgz","fileCount":177,"integrity":"sha512-hmgHA9lNPVF8eB9Gp/g7pgzfoHEl6wUFV45d59TZsqpfaJegLoXeAZzcHsucovTuI/p+O63E0JnoWQcHtAbJ/g==","signatures":[{"sig":"MEUCIQDkNEn1WXj+DhWPw84R4evon+jwDFKaSaiKSBc79RbO4AIgd0I0IZRT1JLHQDIGCjWX3u9CSPB99DHyzA0B2EDGfOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487485},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"00d951df4547d9729fe766819dcfaa8f23d3234a","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"_npmVersion":"11.3.0","description":"```      ██████╗ ██╗     ██╗███╗   ██╗████████╗      ██╔══██╗██║     ██║████╗  ██║╚══██╔══╝      ██║  ██║██║     ██║██╔██╗ ██║   ██║      ██║  ██║██║     ██║██║╚██╗██║   ██║      ██████╔╝███████╗██║██║ ╚████║   ██║      ╚═════╝ ╚══════╝╚═╝╚═╝  ╚═══╝   ╚═╝","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.3.0"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.2_1775334840472_0.6482932539793236","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@dfine-io-gmbh/dlint","version":"1.0.3","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.0.3","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"5aadcfd3bfb92be9c4fe2edce95288b7d8a9ed73","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.3.tgz","fileCount":123,"integrity":"sha512-rzO5hVPoIHh+gh7W1Oy2TupYYaW666vL1Au+At6LkOOfinpdhfxVccGc9WnXMlkp2AAIxsUP1kMjgzjHRdVcRg==","signatures":[{"sig":"MEUCIQDiuinRVVHgMk2fAGvblvbCw4NGTuIzsIIQIhPlSKIqWgIgE/iE6nLO/wck1F01ra1PR9ndYUefqanRLpruIBoe3Yw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1072613},"main":"./build/index.js","type":"module","_from":"file:dfine-io-gmbh-dlint-1.0.3.tgz","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"_resolved":"/private/var/folders/tj/781h0fzd7_z5t58_2sbtvfv40000gn/T/97b77d0c521b7b30e924e99a41376b22/dfine-io-gmbh-dlint-1.0.3.tgz","_integrity":"sha512-rzO5hVPoIHh+gh7W1Oy2TupYYaW666vL1Au+At6LkOOfinpdhfxVccGc9WnXMlkp2AAIxsUP1kMjgzjHRdVcRg==","repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 75 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.3.0"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.3_1778165519473_0.6221965470876334","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@dfine-io-gmbh/dlint","version":"1.0.4","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.0.4","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"38409ff51bb737359d33cf5f4503986439479c8f","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.4.tgz","fileCount":152,"integrity":"sha512-K7XtQZeuv3EG+OCVZB41I0U6X0sRUxWaSkxNouILIjgDxuZ9L8aHLhdSX/9UbHP4Drgq6+YTKJ9R66MVkgu8pQ==","signatures":[{"sig":"MEUCIH0AWP7HYuxol52+LSyBgor9fPxqVZ5NJAJO1GVwNnlJAiEA3xnbOz4UTaqYDXEsIipkrp1UVkGiHG1IJLaR1EC9rR8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1197054},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"70ca6a2349bc55ad570131c6a525e921cedf3d6b","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc && chmod +x build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 75 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","react-dom":"^19.2.6","typescript":"^5.9.3","@types/node":"^25.3.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.4_1780093112112_0.804836531124236","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dfine-io-gmbh/dlint","version":"1.0.5","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.0.5","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"078a6d1243a66f178734886167ccc9eab270b6be","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.5.tgz","fileCount":153,"integrity":"sha512-bjQBoC1/mPidBNi88MEpSK0ogNKh214LQfjDskhFzEkUmRTJ5ofDebH7BP5DgZmqbEoFBomfIs3/4HPELdHozA==","signatures":[{"sig":"MEYCIQDol92kVfgo8bkD+BuQRAY+PLa3iiNu+2BbO7nf+38AMAIhAJCXFaR3nh6Attcyj93Q8dfkdVDNVRvt1BLuvSJKf+WT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1200724},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"7d77a97c9a075905253b1d7e5b6caf811eb271ca","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc && chmod +x build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 79 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","react-dom":"^19.2.6","typescript":"^5.9.3","@types/node":"^25.3.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.5_1780100318254_0.37211314274032325","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@dfine-io-gmbh/dlint","version":"1.0.7","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.0.7","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"3b26f6e92ee07e2991af19dbda3a8cf9fb26acb1","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.7.tgz","fileCount":153,"integrity":"sha512-A6bnDcd6kZT+g5Hd5+sVLh8REnXhNKs7VhOkOqVLRd8g8KFE2zHSlVl7kMBXEEngY2sEv1ZI1ytSRbibIy+igQ==","signatures":[{"sig":"MEQCIBQmsJoavUQ4xvapQfklTc6G/LamphGLX3D0csL0xbCLAiBRBf03vYpCEcsFaPvURCCIo8YaWFRPxrSFfOL/qCftnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1201551},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"af60bd1e8d1ee936cfebf25ebcfe441e6846aa70","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc && chmod +x build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 79 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","react-dom":"^19.2.6","typescript":"^5.9.3","@types/node":"^25.3.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.7_1780175029922_0.9885260782911771","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@dfine-io-gmbh/dlint","version":"1.0.8","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.0.8","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"af5aa317a5614a892c95f0c46961113003cafa40","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.8.tgz","fileCount":144,"integrity":"sha512-tsad4o2oFMQiL0bgF3tykIu/xLtuqb0fcEhEzv1TXFwBIZ8x3CdGzLvkZs0QfGck4RSuh/VFrN+efx7NhoNYwg==","signatures":[{"sig":"MEQCIBVjv+HrfbJf7XIkY6GWTWN40ePvtdAJuaclt58VFV3/AiAaywPjGCXD+j4/Ekdwkv+bJL1oh1n8ljjYvifgoN0trA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1197924},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"8256702484142a5a47cdb5021dc79bb2c40a2165","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc && chmod +x build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 79 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","react-dom":"^19.2.6","typescript":"^5.9.3","@types/node":"^25.3.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.8_1780223361225_0.0012992779888192363","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@dfine-io-gmbh/dlint","version":"1.0.9","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.0.9","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"0720624a1046d39b21058319f6771682e07ae4e1","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.0.9.tgz","fileCount":144,"integrity":"sha512-ecvQez2Df76ez6zycrSRTti+YAsEhn28sUqFOZ1yrQaG3entqibmOi7ojs2LSnCJszJOX7Y+1DiWT+8GKvx3qg==","signatures":[{"sig":"MEUCIBF+G0fJjmshQMaVj2LPOxtwJlYOrxWXnO5XW2nKlb5dAiEA03B8WLQVUyTHi9QLV7y74SyTtxQQ4zbb5E8D6OhcFMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1200952},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"1dad1368afa08c47a892511d0158ee41e96da326","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc && chmod +x build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 79 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","react-dom":"^19.2.6","typescript":"^5.9.3","@types/node":"^25.3.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.0.9_1780851171197_0.5878945460619553","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dfine-io-gmbh/dlint","version":"1.1.0","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"Stefan King","email":"sk@difference.berlin"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.1.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"9f373658c3424c6d806e1e86758453ac1e9b8a0d","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.1.0.tgz","fileCount":144,"integrity":"sha512-ASAws6+QVvtPigieija7/sFP6ekCrWwebUCN+TXlg0vPjpxegDyNf7h2f8fNYkZKYua6Nq2Onz+rwllgCYZGcg==","signatures":[{"sig":"MEQCIBwQRnJOC8T/MRfbZjGGC/nGpusfyZE9q+bYru3c3N1FAiBHFRQVILnlMb2h420YBtC2GgNaG2X7ePsLw55PPW5wTg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1201494},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"84b7b57a98fa09cbbb2393d8a38de2cba46040da","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","prepublishOnly":"rm -rf build && tsc && chmod +x build/cli.js"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 79 rules covering quality, security, performance, and architecture, with HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","react-dom":"^19.2.6","typescript":"^5.9.3","@types/node":"^25.3.0","drizzle-orm":"^0.45.2","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.1.0_1781510309634_0.7415226440214027","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@dfine-io-gmbh/dlint","version":"1.2.0","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.2.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"8ef125510312ecb6832e3ec07287d689795c6114","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.2.0.tgz","fileCount":164,"integrity":"sha512-kxOui/MCeK0dbk8moOVcppcFHn7tKjSb8+PJk9RHqoQgOZp6AlmMNUHLYII5Cce4DrHFQGXSzGho/zG7tdFR9g==","signatures":[{"sig":"MEYCIQDVUlmisqDiXanmBrBlkPsG1l5670Z823hnufvB1kxKUwIhAKolHUNRcq9kDP2Q4GeDOOp+QrT5qaIhUcnCO7MnLvW4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1338881},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"442e771217457110079b6a846e2ba7c57707df62","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 89 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","typescript":"^5.9.3","@types/node":"^25.3.0","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.2.0_1781801223605_0.556230306410435","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@dfine-io-gmbh/dlint","version":"1.3.0","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.3.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"ecda0e6ba32007d959b3c4da0d5599d72da9aff2","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.3.0.tgz","fileCount":161,"integrity":"sha512-DYrGMuad83F50OnaMpYuLNi7k2xVGunMwpHsNLincwFzOhBvulK0Zpt/BT+oN6al7NWjXRAzAdE5w57+PiPGFg==","signatures":[{"sig":"MEQCIDuuwMJuPgzSz4TsQI8QbzsLNv4dUw4Gddcr275FhY68AiBBZ+oGY5t6PCVV0sGtODLkkudjrYXc7cFQM3gbPTewnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1332838},"main":"./build/index.js","type":"module","_from":"file:dfine-io-gmbh-dlint-1.3.0.tgz","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"_resolved":"/private/var/folders/tj/781h0fzd7_z5t58_2sbtvfv40000gn/T/534058c2934035aed0aeff1df1233b85/dfine-io-gmbh-dlint-1.3.0.tgz","_integrity":"sha512-DYrGMuad83F50OnaMpYuLNi7k2xVGunMwpHsNLincwFzOhBvulK0Zpt/BT+oN6al7NWjXRAzAdE5w57+PiPGFg==","repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","typescript":"^5.9.3","@types/node":"^25.3.0","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.3.0_1782392170261_0.25546764821774826","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@dfine-io-gmbh/dlint","version":"1.4.0","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.4.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"4a722c8283e78baf8bf666ee41e6a67972974a29","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.4.0.tgz","fileCount":161,"integrity":"sha512-nc4NUkY6loC9umFdcuTSF7isnNiokstFgHpzj3B8aau5hm2xUf+7SyAeCxAZTzUjDDTZJ49p54k7H93sslKw3w==","signatures":[{"sig":"MEUCIHTA7IjQO2cfiaCsIkv3U27hlnXPPObZ8DvFt1c8JLGfAiEA81tLw9oDPyJ3x6L/gS+vTe7CDCZoNfz597souu1vOHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1334585},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"47b5eafd2cf7a7dc80c50799784e4b48d5131e3c","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.6.1","ignore":"^7.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.6","zustand":"^5.0.14","typescript":"^5.9.3","@types/node":"^25.3.0","@types/react":"^19.2.15"},"peerDependencies":{"typescript":">=5.0"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.4.0_1782468724130_0.14962627556552022","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@dfine-io-gmbh/dlint","version":"1.5.0","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.5.0","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"2ebcfe25d2c5b990dd4cece384b212f92f9c95c3","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.5.0.tgz","fileCount":161,"integrity":"sha512-jHjqvrC65nVPsrh9QHHW3sSy2ZPfvgP3JR0dry1exEKWdlfKkdyLIIoPrgjOZeyEDLWCOw3iwpKrLwmzSvrAhA==","signatures":[{"sig":"MEYCIQCjapYmXRud7q02hoUfUHKmzsd/KSkdMB2hF1nVlVkzOgIhAPobVhWfMI+eGQrQO0Vs6mF+9VcCmytT6xv0Au+C5qgP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1335555},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"47b5eafd2cf7a7dc80c50799784e4b48d5131e3c","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.7.0","ignore":"^7.0.6","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.7","zustand":"^5.0.14","@types/node":"^26.1.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.5.0_1783794192518_0.4470978784380797","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@dfine-io-gmbh/dlint","version":"1.5.1","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.5.1","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"469f108895bd28fee9ece28100580c92fe742e0b","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.5.1.tgz","fileCount":161,"integrity":"sha512-A/9dixMaSnFgmIrpVPJ6pr7r83IJU0kS/QuydYkWzDtnL58peRs80uOxA74Z8o7cerjtk15jctweegY1jXsvzQ==","signatures":[{"sig":"MEQCIG5tjjWQWVhbjy0nkMAdtKltvmxjbe396HWh6Zg3tvhxAiBWfTJ9IgP1M5VAYFYbpN4BXyerWfYS+EtQ6Nv+yAXXVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1339335},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"babc9a4a9a27691c402b8751a2a941c335d7a782","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"11.12.1","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.7.0","ignore":"^7.0.6","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.7","zustand":"^5.0.14","@types/node":"^22.20.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.5.1_1783889911871_0.20137023345002425","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@dfine-io-gmbh/dlint","version":"1.5.2","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.5.2","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"79d4f47a252713f96df433405ae91e11450a365a","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.5.2.tgz","fileCount":161,"integrity":"sha512-m5/PV7JOQA5gEH9BRXx5DFbOgQ3ldO56Gu1u8CkpiuGdtGtDfPkc0GIl1VBR4kIPxxEqo84fhyNa0OdT5wNDtQ==","signatures":[{"sig":"MEYCIQCf/WrF/Rd0ioaNh2/ruqncip9/6R6LRHbrzbubIPEEIwIhAKrffZFPZi3OThtQtwtxQCeYw1V1zEIC24HOoJpQoOfK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1344557},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"}},"gitHead":"618081dc3826bf63be6f892a4e026af5c228d281","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"12.0.2","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.7.0","ignore":"^7.0.6","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.7","zustand":"^5.0.14","@types/node":"^22.20.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.5.2_1788440893409_0.08385198504141966","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@dfine-io-gmbh/dlint","version":"1.5.3","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","_id":"@dfine-io-gmbh/dlint@1.5.3","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"homepage":"https://github.com/dfine-io/dfine-lint#readme","bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"bin":{"dlint":"build/cli.js"},"dist":{"shasum":"30b6bb53f8a0a8cdde1354fafc0fdb57e2472389","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.5.3.tgz","fileCount":162,"integrity":"sha512-r0ScBgNkLOk6Ez7p9HBkIf9dzQUBKKx+3SO8+M9kCr7MKqVe7KOyTlLP76qqxsMsXa//Jq4lCw59T+asiw8TeQ==","signatures":[{"sig":"MEYCIQD50vKJDn3tfgtnbTFSZ4Fhaua+xPLTlUfsmY3tJkcdsQIhALk/MCEin3t+jMW/wiBAhVOzALCu0e2oRe5PPA8BQxnk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD1P708kgtfezreTqXtmI5hryZVBKjhFjpxByVkRT+sqAIgDLIrJsgcXyjUSSS34azjt+kXd1n/xq1D5dII7VPxYvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1348091},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"},"./package.json":"./package.json","./tsconfig.rules.json":"./tsconfig.rules.json"},"gitHead":"a27a1eddfe3ddd9018a879047cd81cffdef07887","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"12.0.2","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.7.0","ignore":"^7.0.6","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.7","zustand":"^5.0.14","@types/node":"^22.20.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/dlint_1.5.3_1788910596044_0.5842147293233566","host":"s3://npm-registry-packages-npm-production"}},"1.5.4":{"_id":"@dfine-io-gmbh/dlint@1.5.4","bin":{"dlint":"build/cli.js"},"bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"dist":{"shasum":"dc2f28ca465f67857f6bd0292d8b8b7839910d43","tarball":"https://registry.npmjs.org/@dfine-io-gmbh/dlint/-/dlint-1.5.4.tgz","fileCount":162,"integrity":"sha512-EsgTsR27+kni+katHkPxTWm8aVBrhfkPJYQu+0By3Dmt+Ei3G/KOb6g9yd+aIW+N/lduHTLcE11Mk8vVTorqzQ==","signatures":[{"sig":"MEUCIBkaToo14AJiPj3LmDrPFRlekKo2bQd4oiaUJzdF4M31AiEA5vCTsyM9lbjjXpSedNJxOvpQlDwyz8lKTyNX4NLla9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC/gA+3TSOTBk3xVTaRmr+Oj+H2qrzncZDwlNxARGeN9gIhAL96ABJuttC3GvftiPZVZAIzIhVGIGJlg1Tz9MFHWD1+"}],"unpackedSize":1369555},"main":"./build/index.js","name":"@dfine-io-gmbh/dlint","type":"module","types":"./build/index.d.ts","author":{"name":"dfine.io","email":"support@dfine.io"},"engines":{"node":">=20.0.0"},"exports":{".":{"types":"./build/index.d.ts","import":"./build/index.js"},"./package.json":"./package.json","./tsconfig.rules.json":"./tsconfig.rules.json"},"gitHead":"07a8c7a969967085bb3ae0f95eefc1769681f077","license":"MIT","scripts":{"dev":"tsc --watch","build":"tsc","dlint":"node build/cli.js","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint:dlint":"node build/cli.js --format compact","prepublishOnly":"rm -rf build tsconfig.tsbuildinfo && tsc && chmod +x build/cli.js","refresh-secret-patterns":"curl -sSL -o /tmp/gl.toml https://raw.githubusercontent.com/gitleaks/gitleaks/master/config/gitleaks.toml && node scripts/build-secret-patterns.mjs /tmp/gl.toml"},"version":"1.5.4","_npmUser":{"name":"stefan-king","email":"stefan.king@dfine.io"},"homepage":"https://github.com/dfine-io/dfine-lint#readme","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"_npmVersion":"12.0.2","description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","directories":{},"maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"_nodeVersion":"24.15.0","dependencies":{"jiti":"^2.7.0","ignore":"^7.0.6","typescript":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^19.2.7","zustand":"^5.0.14","@types/node":"^22.20.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dlint_1.5.4_1791112769999_0.49901670211212346"}}},"time":{"created":"2026-03-18T01:32:49.163Z","modified":"2026-10-04T11:19:30.343Z","0.1.0":"2026-03-18T01:32:49.702Z","0.1.1":"2026-03-19T06:28:14.582Z","1.0.0":"2026-04-04T20:05:35.691Z","1.0.1":"2026-04-04T20:22:01.141Z","1.0.2":"2026-04-04T20:34:00.642Z","1.0.3":"2026-05-07T14:51:59.799Z","1.0.4":"2026-05-29T22:18:32.257Z","1.0.5":"2026-05-30T00:18:38.473Z","1.0.7":"2026-05-30T21:03:50.135Z","1.0.8":"2026-05-31T10:29:21.417Z","1.0.9":"2026-06-07T16:52:51.434Z","1.1.0":"2026-06-15T07:58:29.819Z","1.2.0":"2026-06-18T16:47:03.832Z","1.3.0":"2026-06-25T12:56:10.432Z","1.4.0":"2026-06-26T10:12:04.280Z","1.5.0":"2026-07-11T18:23:12.710Z","1.5.1":"2026-07-12T20:58:32.034Z","1.5.2":"2026-09-03T13:08:13.544Z","1.5.3":"2026-09-08T23:36:36.164Z","1.5.4":"2026-10-04T11:19:30.184Z"},"bugs":{"url":"https://github.com/dfine-io/dfine-lint/issues"},"author":{"name":"dfine.io","email":"support@dfine.io"},"license":"MIT","homepage":"https://github.com/dfine-io/dfine-lint#readme","keywords":["linter","typescript","compiler-api","static-analysis","code-quality","security","performance","architecture","dlint"],"repository":{"url":"git+https://github.com/dfine-io/dfine-lint.git","type":"git"},"description":"Semantic TypeScript linter built on the TS Compiler API — 86 rules covering quality, security, performance, and architecture, plus secret scanning and an HTML report dashboard.","maintainers":[{"name":"stefan-king","email":"stefan.king@dfine.io"}],"readme":"```\n     ██████╗ ██╗     ██╗███╗   ██╗████████╗\n     ██╔══██╗██║     ██║████╗  ██║╚══██╔══╝\n     ██║  ██║██║     ██║██╔██╗ ██║   ██║\n     ██║  ██║██║     ██║██║╚██╗██║   ██║\n     ██████╔╝███████╗██║██║ ╚████║   ██║\n     ╚═════╝ ╚══════╝╚═╝╚═╝  ╚═══╝   ╚═╝\n```\n\n<h3 align=\"center\">\n  Lint with the type system, not around it\n</h3>\n\n<p align=\"center\">\n  A TypeScript linter that runs on the compiler itself, without an AST conversion layer or a language server.<br/>\n  86 built-in rules, security checks and secret scanning included, all with full TypeChecker access on one shared compiler program.\n</p>\n\n<p align=\"center\">\n  <a href=\"#why\">Why</a> · <a href=\"#built-in-rules\">Built-in rules</a> · <a href=\"#getting-started\">Getting started</a> · <a href=\"#writing-rules\">Writing rules</a> · <a href=\"#configuration\">Configuration</a> · <a href=\"#cli\">CLI</a>\n</p>\n\n---\n\n## Why\n\nLinters that parse your code into their own AST and analyze it again repeat work TypeScript has already done. The compiler has built the AST, resolved every type, symbol and import, and knows which values can be `null`, which are a `Promise`, and which code is dead.\n\ndlint does not parse your code again. It runs on the TypeScript Compiler API, on the same `ts.Program` and `ts.TypeChecker` that `tsc` uses, so your rules see exactly the type information the compiler sees.\n\n### What that means in practice\n\nResults are deterministic: the same code and types always give the same findings. Rules read types from the TypeChecker instead of guessing from text patterns, so if it says a return type is `Promise<User | null>`, that is what the rule sees.\n\ndlint creates the TypeScript program once and shares it across every file and rule. No language server starts, and no adapter converts between AST formats. Every rule reuses the same compiled program.\n\nRules get the whole `ts.TypeChecker` API: they can resolve symbols across files, check assignability, unwrap generics and walk the type hierarchy. Any question TypeScript can answer, a rule can ask.\n\ndlint runs entirely on your machine. It makes no network calls, sends no telemetry and uses no AI or cloud service, so your source code and any secret it finds stay local. A finding depends only on your code, the types of its dependencies, your config and the dlint version, so a clean run stays clean until one of them changes.\n\n### What you can enforce\n\nThese constraints need types and cross-file information, so a text-based linter cannot express them:\n\n- \"Every exported async function in a `use server` file must validate its input before any side effect\"\n- \"No file in `app/feature-a/` may import from `app/feature-b/` (route isolation)\"\n- \"Every `switch` on a discriminated union must handle all variants with a `never` default\"\n- \"No `Promise` returned from an expression statement may go unhandled\"\n- \"No function may exceed a cyclomatic complexity of 15\"\n\n## Built-in rules\n\n86 rules ship with the package. 61 of them run by default in any TypeScript project and work as a zero-config CI gate for bugs, security issues and framework checks. The other 25 are opinionated style and architecture rules (plus a few opinionated sub-checks). They sit in the `opinionated` group, which stays off until you enable it (see [Configuration](#configuration)).\n\n| Category         | Rules                                                                                                                                                                                                                                                                                                                                                           | What they catch                                                                               |\n| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |\n| **Quality**      | `no-floating-promises`, `no-misused-promises`, `exhaustive-switch`, `no-empty-function`, `no-useless-code`, `no-debug-code`, `no-redundant-zod-parse`, `banned-syntax`, `syntax`                                                                                                                                                                                | Unhandled promises, missing switch cases, dead code                                           |\n| **Type Safety**  | `type-precision`, `typescript`, `narrow-param-type`, `unnecessary-type-assertion`, `any-propagation`, `await-non-thenable`, `no-base-to-string`, `unbranded-type-consistency`, `prefer-literal-union`, `prefer-satisfies-over-as`, `restrict-plus-operands`, `restrict-template-expr`                                                                           | Imprecise types, unsafe casts, `any` leaks, unbranded ids                                     |\n| **Performance**  | `performance`, `promise-all-opportunity`, `cache-primitive-args`, `cache-caller-count`, `missing-returning`, `no-db-antipatterns`                                                                                                                                                                                                                               | Sequential awaits, unbounded queries, missing RETURNING                                       |\n| **Security**     | `security`, `safety`, `input-validation`, `no-dynamic-sql`, `no-ssrf`, `no-page-params-unsafe-parse`, `no-implied-eval`, `unnecessary-use-server`, `no-child-process`, `no-non-literal-fs-path`, `no-non-literal-require`, `no-non-literal-regexp`, `no-weak-crypto`, `no-secrets`                                                                              | Auth gaps, injection, SSRF, command injection, path traversal, weak crypto, hardcoded secrets |\n| **Correctness**  | `correctness`, `logic`, `error-handling`, `no-identical-binary-operands`, `no-unthrown-error`, `no-all-duplicated-branches`, `no-collection-size-mischeck`                                                                                                                                                                                                      | Logic errors, uncaught exceptions                                                             |\n| **React**        | `react`, `rules-of-hooks`, `exhaustive-deps`, `effect-cleanup`, `state-hooks-cluster`, `no-async-client-component`, `no-client-data-fetch`, `no-unescaped-entities`, `jsx-no-useless-fragment`                                                                                                                                                                  | Hook violations, client/server boundary, render bugs                                          |\n| **Style**        | `readability`, `simplification`, `naming-convention`, `duplicate-import`, `prefer-optional-chain`, `prefer-nullish-coalescing`, `prefer-modern-api`, `no-deprecated-api`, `deprecated-usage`, `no-underscore-prefix`, `no-implicit-coercion`, `no-magic-numbers`, `no-multiline-comments` | Code clarity, modern patterns                                                    |\n| **Architecture** | `unused-export`, `no-re-export`, `self-import`, `no-import-cycle`, `no-duplicated-constants`, `no-local-constants`, `max-file-lines`, `route-boundary`, `prop-drilling`, `zustand-patterns`, `no-client-server-only-import`, `no-db-origin-client-boundary`, `no-duplicate-schema-export`                                                                       | Dead exports, barrel files, boundary violations                                               |\n| **Duplication**  | `semantic-clone`, `syntactic-clone`, `complexity`                                                                                                                                                                                                                                                                                                               | Copy-pasted logic, high complexity                                                            |\n\nThe 61 default rules need no configuration. The React, Next, Drizzle, Zod and Zustand checks first look for their framework through imports, symbols, directives or a type's shape, so they stay silent in a project that doesn't use it. Enabling the 25 opinionated rules takes one line (see below).\n\n### Every rule, explained\n\n<details>\n<summary><strong>Quality</strong>: promises, dead code, footgun syntax</summary>\n\n- `no-floating-promises`: An async call whose result you ignore can swallow errors; await it or add `.catch()`.\n- `no-misused-promises`: Stops passing an async function where a plain one is expected (event handlers, effects).\n- `exhaustive-switch`: A `switch` over a fixed set of values must handle every case (or have a default).\n- `no-empty-function`: Flags empty function bodies so a stub doesn't ship by accident.\n- `no-useless-code`: Removes no-ops: pointless string joins, `.call()`/`.apply()`, redundant object keys.\n- `no-debug-code`: Catches leftover `debugger` statements before they ship.\n- `no-redundant-zod-parse`: Skips re-validating data that is already typed to the schema.\n- `banned-syntax`: Blocks footguns: `void`, labels, octal, `delete` on variables, global assignment.\n- `syntax`: Nudges to modern JS: `const` over `var`, template strings, object shorthand.\n\n</details>\n\n<details>\n<summary><strong>Type safety</strong>: keep types tight and honest</summary>\n\n- `type-precision`: Nine checks that keep types specific and meaningful instead of vague.\n- `typescript`: Compiler-powered catches: missing null checks, hidden `any`, unsafe index access, shadowed names.\n- `narrow-param-type`: Suggests narrower parameter types when a function uses only part of what it accepts.\n- `unnecessary-type-assertion`: Flags `as T` casts that change nothing because the type already matches.\n- `any-propagation`: Tracks `any` leaking through assignments and returns, eroding safety.\n- `await-non-thenable`: Flags `await` on something that isn't a Promise (a no-op that hints at a bug).\n- `no-base-to-string`: Stops objects becoming `\"[object Object]\"` because they lack a real `toString()`.\n- `unbranded-type-consistency`: Wants IDs to use branded types so a `userId` and a `postId` can't be mixed up.\n- `prefer-literal-union`: Replace loose string comparisons with a precise set of allowed values.\n- `prefer-satisfies-over-as`: Use `satisfies T` instead of `as T` on literals so types aren't silently widened.\n- `restrict-plus-operands`: Allows `+` only on operands that are safe to add, so strings and numbers don't mix by accident.\n- `restrict-template-expr`: Flags unsafe values stuffed into template strings.\n\n</details>\n\n<details>\n<summary><strong>Performance</strong>: avoid slow patterns</summary>\n\n- `performance`: Common slow spots: regex built in a loop, sync I/O, long chains, mutating arrays in callbacks.\n- `promise-all-opportunity`: Spots awaits done one-by-one that could run together with `Promise.all`.\n- `cache-primitive-args`: `React.cache` only works reliably with primitive arguments; flags the rest.\n- `cache-caller-count`: `React.cache` only pays off with 2+ callers; flags single-use ones.\n- `missing-returning`: Reminds you to add `.returning()` on a DB insert/update when you need the result.\n- `no-db-antipatterns`: Blocks DB transactions the serverless driver doesn't support, and per-row queries in a loop (N+1).\n\n</details>\n\n<details>\n<summary><strong>Security</strong>: injection, secrets, unsafe code</summary>\n\n- `security`: Classic web holes: prototype pollution, `dangerouslySetInnerHTML`, `javascript:` URLs, `document.write`.\n- `safety`: Runtime footguns: bad constructor returns, promise-executor mistakes, non-atomic updates, `parseInt` without a radix.\n- `input-validation`: Server actions must validate their input (Zod `safeParse`) before doing anything with it.\n- `no-dynamic-sql`: Blocks raw SQL built from dynamic strings, the classic SQL-injection path.\n- `no-ssrf`: Stops `fetch()` to a user-controlled URL in server code (server-side request forgery).\n- `no-page-params-unsafe-parse`: Page params should fail gracefully instead of crashing: use a safe-parse helper.\n- `no-implied-eval`: Flags running strings as code (`eval`, string `setTimeout`, `new Function`).\n- `unnecessary-use-server`: Removes `\"use server\"` on code no client ever calls, shrinking the attack surface.\n- `no-child-process`: Flags shell commands built from input (`exec`/`execSync`), a command-injection risk.\n- `no-non-literal-fs-path`: Flags file access with a path that comes from input, a path-traversal risk.\n- `no-non-literal-require`: Flags `require()`/`import()` of a module name that comes from input.\n- `no-non-literal-regexp`: Flags regexes built from input, which can hang on crafted strings (ReDoS).\n- `no-weak-crypto`: Flags broken hash algorithms like MD5/SHA-1.\n- `no-secrets`: Flags hardcoded API keys, tokens, and private keys in your code.\n\n</details>\n\n<details>\n<summary><strong>Correctness</strong>: real bugs the compiler can prove</summary>\n\n- `correctness`: Bug-prevention: self-assignment, unsafe `finally`, loops that run once, reassigned params.\n- `logic`: Compiler-checked logic bugs: identical conditions, leaked renders, writes that are never read.\n- `error-handling`: Catches empty `catch` blocks and errors thrown without a cause.\n- `no-identical-binary-operands`: Both sides of an operator are identical (`a && a`, `x - x`), which is redundant or always constant.\n- `no-unthrown-error`: A `new Error()` built but never thrown, usually a forgotten `throw`.\n- `no-all-duplicated-branches`: Every branch of an if/else or switch runs the same code, so the condition decides nothing.\n- `no-collection-size-mischeck`: A length/size check that is always true or false (`arr.length >= 0`).\n\n</details>\n\n<details>\n<summary><strong>React</strong>: hooks, effects, client/server boundary</summary>\n\n- `react`: React pitfalls: components nested in components, `setState` in effects, race conditions, missing button `type`.\n- `rules-of-hooks`: Hooks must run at the top level, never in conditions, loops, or after a return.\n- `exhaustive-deps`: Effect/callback/memo dependency arrays must list every value they use.\n- `effect-cleanup`: Effects that add listeners or timers must clean them up.\n- `state-hooks-cluster`: Flags tangled `useState` that should be one well-modeled state object.\n- `no-async-client-component`: Client components can't be `async`; it crashes at runtime.\n- `no-client-data-fetch`: Don't call `fetch`/axios in a client component; use a server action.\n- `no-unescaped-entities`: Flags raw HTML characters in JSX text that should be escaped.\n- `jsx-no-useless-fragment`: Removes `<>…</>` fragments that wrap a single child for nothing.\n\n</details>\n\n<details>\n<summary><strong>Style</strong>: clarity and modern patterns</summary>\n\n- `readability`: Flags hard-to-read shapes: nested ternaries/switches, `this` aliasing.\n- `simplification`: Simpler equivalents: drop useless `else`, collapse nested `if`, return immediately.\n- `naming-convention`: Blocks shadowing built-in names and label-as-variable confusion.\n- `duplicate-import`: Merges multiple imports from the same module into one.\n- `prefer-optional-chain`: Use `a?.b` instead of `a && a.b`.\n- `prefer-nullish-coalescing`: Use `??` instead of `||` for values that can be null/undefined.\n- `prefer-modern-api`: Nudge to modern methods: `includes`, `flatMap`, `at`, `startsWith`, `Object.hasOwn`.\n- `no-deprecated-api`: Blocks legacy footguns like `__proto__` and extending native prototypes.\n- `deprecated-usage`: Flags use of anything marked `@deprecated`.\n- `no-underscore-prefix`: Use real names instead of `_name`, or `_` for a deliberate discard.\n- `no-implicit-coercion`: Flags sneaky conversions: `==`, `+x`, `'' + x`, `!!x`.\n- `no-magic-numbers`: Pull unexplained numbers into named constants.\n- `no-multiline-comments`: Use line comments, not `/** */` JSDoc blocks.\n\n</details>\n\n<details>\n<summary><strong>Architecture</strong>: boundaries, dead code, structure</summary>\n\n- `unused-export`: Flags exports that nothing imports (dead public API).\n- `no-re-export`: Import from the real source, not a pass-through barrel file.\n- `self-import`: Flags a file importing itself.\n- `no-import-cycle`: Detects circular imports between files.\n- `no-duplicated-constants`: Flags local constants that just duplicate a central one.\n- `no-local-constants`: `UPPER_SNAKE` constants belong in a central constants file.\n- `max-file-lines`: Flags files that have grown too long.\n- `route-boundary`: Keeps routes/features isolated so they don't reach into each other.\n- `prop-drilling`: Flags components passing props straight through without using them.\n- `zustand-patterns`: Enforces correct Zustand store usage (selectors, no store-in-effect).\n- `no-client-server-only-import`: Client code must not pull in server-only modules.\n- `no-db-origin-client-boundary`: Database row types must not leak to the client side.\n- `no-duplicate-schema-export`: Flags two same-named schemas, which create incompatible types.\n\n</details>\n\n<details>\n<summary><strong>Duplication</strong>: copy-paste and complexity</summary>\n\n- `semantic-clone`: Finds functions that do the same thing with a different look (type-equivalent + similar body).\n- `syntactic-clone`: Finds near-identical copy-pasted blocks across files.\n- `complexity`: Flags functions that are too deep, too long, or too branchy.\n\n</details>\n\n## Secret scanning\n\n`no-secrets` flags hardcoded credentials in string literals, such as keys for AWS, GitHub, Stripe, Google, Slack, 1Password and Anthropic, private keys, and dozens more formats. It matches a curated public pattern set ([`assets/secret-patterns.json`](assets/secret-patterns.json)) of distinctive vendor formats, with no entropy guessing. Every pattern uses bounded quantifiers, so matching stays linear and cannot hang on crafted input (ReDoS), even on a 60 KB minified or base64 literal. Each pattern is checked against its own examples when it loads, and all matching happens locally. `pnpm refresh-secret-patterns` refreshes the set.\n\nThe patterns are forked from [gitleaks](https://github.com/gitleaks/gitleaks) (MIT, © 2019 Zachary Rice). dlint keeps only the formats that are unambiguous by prefix, checks that each compiles to a bounded, ReDoS-safe JavaScript regex, and drops formats that are not secrets (ARNs, public or publishable keys, URLs). See [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md).\n\n**Scope:** the secret scan favors precision over recall. It catches credentials with a known vendor format, but not arbitrary high-entropy strings or secrets split across concatenations. The taint-based rules (`no-child-process`, `no-non-literal-*`) are best-effort checks within one function: they catch direct cases, but not input passed through a helper or a reassignment. Treat both as one layer of defense, not as proof that the code is clean.\n\n## HTML report\n\n`--format html` writes an interactive report of the project's health:\n\n<p align=\"center\">\n  <img src=\"assets/report-dashboard.jpg\" alt=\"dlint report: dashboard with quality, security, performance and architecture scores\" width=\"100%\">\n</p>\n\nThe dashboard shows per-category scores (quality, security, performance, architecture), file-level compliance rates, findings by rule with distribution bars, and a gap summary by severity.\n\n<p align=\"center\">\n  <img src=\"assets/report-findings.jpg\" alt=\"dlint report: findings view with category filters and rule grouping\" width=\"100%\">\n</p>\n\nThe findings view has searchable, filterable rule groups with category badges, severity indicators and expandable file-level details. Further tabs cover code duplication, architectural gaps, and fix prompts to hand to a coding agent.\n\n```bash\nnpx dlint --format html    # writes .dlint/report/<ddmmyy>_<hh>h<mm>_<project>_dlint-report.html (+ a .json sibling)\n```\n\n## Getting started\n\n```bash\npnpm add -D @dfine-io-gmbh/dlint\n```\n\n```bash\nnpx dlint                  # all files\nnpx dlint --changed        # only uncommitted changes\nnpx dlint --branch         # everything on the current branch\nnpx dlint --format compact # one line per finding\n```\n\nNo config is needed: the 61 default rules work as a CI gate right away. Opt into the 25 opinionated rules through a group (see [Configuration](#configuration)).\n\n> **TypeScript 7 / tsgo:** dlint carries its own JavaScript-based TypeScript engine (6.x, the last\n> JavaScript-based line) and analyzes your code with it, independent of the compiler your project\n> builds with. A project can move to the Go-native TypeScript 7 (`tsgo`) and dlint keeps linting\n> it. A port to the native TS 7.1 API is on the roadmap.\n\n### Use as a CI gate\n\n`dlint` exits with a non-zero code when a run finds an error, so any pipeline can use it as a gate:\n\n```bash\nnpx dlint --branch    # lint only what changed vs the base branch; fails the job on errors\n```\n\nUse `--no-error` to report findings without failing the build. `--branch` needs the base branch in the clone (for example `fetch-depth: 0` in `actions/checkout`); without it dlint exits 2.\n\n### Adding project-specific rules\n\nWhen your project has architectural rules that go beyond the universal set, add them as `.ts` files:\n\n```typescript\n// dlint.config.ts\nimport type { DlintConfig } from \"@dfine-io-gmbh/dlint\";\n\nexport default {\n  rulesDir: \".dlint/rules\",\n  severity: \"error\",\n  include: [\"**/*.ts\", \"**/*.tsx\"],\n  exclude: [\"node_modules\", \".next\", \"build\"],\n  tsconfig: \"./tsconfig.json\",\n} satisfies DlintConfig;\n```\n\nEvery `.ts` file in `.dlint/rules/`, subdirectories included, becomes a rule. The built-in rules load from the package and run alongside your own. They update with `pnpm update`, without a sync step or copied rule files. A project rule with the same id overrides a built-in one.\n\nA rule file that cannot be loaded, for example one that throws on import or whose `meta` has no `description`, is skipped and named in the output instead of failing the whole run. The lint still runs with the remaining rules, and `--format json` lists the skipped files under `skippedRules`.\n\n### Type-checking your rules\n\nRules are loaded through jiti, which strips types at runtime. An unchecked type error therefore never crashes; it turns into a silent wrong value. `dlint init` writes a `.dlint/tsconfig.json` for this. In an existing project, add it yourself:\n\n```json\n{\n  \"extends\": \"@dfine-io-gmbh/dlint/tsconfig.rules.json\",\n  \"include\": [\"rules/**/*.ts\"]\n}\n```\n\n```bash\nnpx tsc -p .dlint/tsconfig.json\n```\n\nThe shipped config points `typescript` at the compiler dlint bundles, so your rules are checked against the same engine that runs them. That matters when your project builds with a different TypeScript, for example the Go-native 7.x, whose package exposes no types to check against.\n\n## Agent skill (recommended)\n\nThis repo ships a portable agent skill: a `SKILL.md` knowledge pack that any skill-aware coding\nagent can load. It teaches how to write, test, configure and ship dlint rules, draws on this\nREADME and the SDK, and applies dlint's principles: compiler and TypeChecker only, no string\nheuristics, and a duplication check that asks whether an existing rule plus `ruleOptions` already\ncovers your case before you write a new one.\n\nThe skill lives at [`skills/dfine-lint/`](skills/dfine-lint) and ships in the npm package. Load it\nby copying it into your agent's skills directory; it then triggers whenever you write or tune a\nrule, a fixture, or `dlint.config.ts`:\n\n```bash\n# in your project, from the installed package\ncp -r node_modules/@dfine-io-gmbh/dlint/skills/dfine-lint .claude/skills/\n# or when working inside this repo\ncp -r skills/dfine-lint .claude/skills/\n```\n\n## Writing rules\n\nA rule receives the full TypeScript compiler context for each file. You walk the AST, query the TypeChecker, and report problems:\n\n```typescript\nimport ts from \"typescript\";\nimport { defineRule } from \"@dfine-io-gmbh/dlint\";\n\n// The rule id is the filename — save this as .dlint/rules/no-floating-promises.ts\nexport default defineRule({\n  meta: {\n    severity: \"error\",\n    category: \"quality\",\n    description: \"Promise not awaited or caught\",\n  },\n  check(ctx) {\n    ctx.walk((node) => {\n      if (\n        ts.isExpressionStatement(node) &&\n        ts.isCallExpression(node.expression)\n      ) {\n        const type = ctx.checker.getTypeAtLocation(node.expression);\n        if (type.symbol?.name === \"Promise\") {\n          ctx.reportAt(node, \"Floating Promise — await or add .catch()\", {\n            action: \"add-await\",\n            pattern: \"await expression\",\n          });\n        }\n      }\n    });\n  },\n});\n```\n\n### What you have access to\n\n```typescript\ncheck(ctx) {\n  ctx.program       // ts.Program — the full compiled project\n  ctx.checker       // ts.TypeChecker — resolve types, symbols, assignability\n  ctx.sourceFile    // ts.SourceFile — the current file's AST\n  ctx.referenceIndex // which exports are used where (cross-file)\n  ctx.walk()        // visit every node in the current file\n  ctx.reportAt()    // flag a problem at a specific location\n}\n```\n\nIt is the same API `tsc` uses internally, with no wrapper or adapter in between and nothing left out.\n\n### Helpers\n\n<details>\n<summary>Typed helpers over the native TypeScript API, no conversion layer</summary>\n\n| Helper                      | What it does                                                 |\n| --------------------------- | ------------------------------------------------------------ |\n| `defineRule`                | Create a rule with typed context and metadata                |\n| `defineExtractor`           | Create an extractor for cross-rule data collection           |\n| `hasDirective`              | Check file-level directives (`\"use server\"`, `\"use client\"`) |\n| `getExportedFunctions`      | Functions exported from this file, export lists included     |\n| `isInsideLoop`              | Does it run per loop iteration? Stops at function boundary   |\n| `isNullableType`            | Does the type (or constraint) include `null` or `undefined`? |\n| `hasOwnToString`            | Does the type have its own `toString()`?                     |\n| `isStringType`              | Is the type a string: literal, template, mapping or union?   |\n| `isLibDeclaration`          | Is this from TypeScript's own `lib.*.d.ts`?                  |\n| `isNodeModulesDeclaration`  | Is this from `node_modules`?                                 |\n| `isInConditionalBranch`     | Inside an `if`/`else` or ternary branch, not the condition?  |\n| `isInBooleanContext`        | Is the node in a boolean position?                           |\n| `resolveSymbol`             | Cross-file symbol resolution via TypeChecker                 |\n| `isAssignableTo`            | Structural type compatibility check                          |\n| `unwrapPromiseType`         | Extract `T` from `Promise<T>`                                |\n| `isBuiltinCollection`       | Is it `Map`, `Set`, or `Array`, readonly forms included?     |\n| `hasJsDocTag`               | Check JSDoc annotations on declarations                      |\n| `isDbCall`                  | Detect ORM/database call expressions                         |\n| `dbRootMethod`              | Method called on the DB handle of a call chain               |\n| `returnTypeHasProperties`   | Check if return type has specific fields                     |\n| `isFromPackage`             | Is the import from a specific npm package?                   |\n| `resolveCallBody`           | Resolve function body across file boundaries                 |\n| `bodyContainsCall`          | Does a function body call a specific function?               |\n| `resolveImportedModule`     | Resolve an import specifier the way the program does         |\n| `collectValueImports`       | Specifiers a file loads at runtime, `import()` included      |\n| `isTypeOnlyImport`          | Does an import or re-export pull no runtime value?           |\n| `isWriteTarget`             | Is the expression assigned, incremented or deleted?          |\n| `valueSymbolOf`             | The variable an identifier names, `{ a }` shorthand included |\n| `isSameReference`           | Do two expressions name the same variable or property?       |\n| `isThenable`                | Does the type have a callable `then`?                        |\n| `tokenizeFile`              | Extract normalized token blocks for clone detection          |\n| `tokenSimilarity`           | Bigram Jaccard coefficient between token sequences           |\n| `collectTypeDeclarations`   | Discover all interfaces and type aliases                     |\n| `collectFunctionSignatures` | Extract function signature fingerprints                      |\n| `memberJaccard`             | Type member similarity score                                 |\n| `signatureKey`              | Deterministic function signature hash                        |\n| `buildReferenceIndex`       | Cross-file export usage tracking                             |\n\n</details>\n\n## Configuration\n\n```typescript\nimport type { DlintConfig } from \"@dfine-io-gmbh/dlint\";\n\nexport default {\n  bundledRules: true, // load the package's universal rules (default; false to opt out)\n  rulesDir: \".dlint/rules\", // project-specific rules (optional; override bundled by id)\n  severity: \"error\", // default severity\n  include: [\"**/*.ts\", \"**/*.tsx\"], // what to scan\n  exclude: [\"node_modules\", \".next\"], // what to skip\n  tsconfig: \"./tsconfig.json\", // your project's tsconfig\n  maxFileSize: 500_000, // skip files larger than 500KB\n  referencesDir: \".dlint/references\", // advisory docs for rules\n  groups: [\n    // opt into the opinionated rule set (ships off by default)\n    { id: \"opinionated\", severity: \"error\" },\n  ],\n  overrides: [\n    // per-rule severity tuning (wins over groups and the default)\n    { ruleId: \"no-magic-numbers\", severity: \"warning\" },\n    { ruleId: \"max-file-lines\", severity: \"off\" },\n  ],\n} satisfies DlintConfig;\n```\n\n### Rule groups\n\nRules are bundled into groups that you toggle with one severity. The package ships one built-in group, `opinionated`, set to `off`. It holds the 25 style and architecture rules (plus a few opinionated sub-checks) that a generic project may not share. Enable the whole set in one line:\n\n```typescript\nexport default {\n  groups: [{ id: \"opinionated\", severity: \"error\" }],\n} satisfies DlintConfig;\n```\n\nThe most specific setting wins, in this order: a per-rule `override`, the rule's own declared severity, its group, then the global default. So you can enable the group and still silence one rule via `overrides`, or turn off a single sub-check with `{ ruleId: \"typescript:no-explicit-any\", severity: \"off\" }`.\n\nYou can also build your own groups to switch rules by concern. A group with a new `id` brings its own `rules`. A group that reuses a built-in `id` sets that group's severity, and if it also lists `rules`, they replace the built-in members:\n\n```typescript\nexport default {\n  groups: [\n    { id: \"opinionated\", severity: \"error\" }, // enable the built-in set\n    // your own group: toggle a concern together (here: report, don't fail CI)\n    {\n      id: \"soft\",\n      severity: \"warning\",\n      rules: [\"no-base-to-string\", \"exhaustive-switch\", \"no-floating-promises\"],\n    },\n  ],\n} satisfies DlintConfig;\n```\n\n### Rule options\n\nEach rule's tunable values (the `CONFIG` block at the top of the rule file) are defaults. Override them per project in `ruleOptions`, keyed by rule id. You don't copy the rule, so its logic stays in one place and keeps improving with `pnpm update`:\n\n```typescript\nexport default {\n  ruleOptions: {\n    \"max-file-lines\": { maxLines: 500 },\n    \"no-magic-numbers\": { ignoredNumbers: [0, 1, -1, 2, 100] },\n    complexity: { maxComplexity: 20, maxDepth: 5 },\n    \"route-boundary\": {\n      appDir: \"src/app\",\n      allowedPairs: [[\"checkout\", \"cart\"]],\n    },\n    \"unbranded-type-consistency\": {\n      externalIdNames: [\"deviceId\", \"videoDeviceId\"],\n    },\n    // exclude a deliberately-mirrored, separately-bundled module from the duplicate scan\n    \"no-duplicate-schema-export\": { ignorePaths: [\"worker/\"] },\n  },\n} satisfies DlintConfig;\n```\n\nEach `CONFIG` const maps to a camelCase option key (`MAX_LINES` → `maxLines`, `EXTERNAL_ID_NAMES` → `externalIdNames`). Options apply across all files and combine freely with `overrides` (severity, file scope) and `groups`.\n\n**The `opinionated` group:** `any-propagation`, `cache-caller-count`, `complexity`, `duplicate-import`, `error-handling`, `max-file-lines`, `narrow-param-type`, `no-duplicated-constants`, `no-empty-function`, `no-local-constants`, `no-magic-numbers`, `no-multiline-comments`, `no-re-export`, `no-underscore-prefix`, `prefer-literal-union`, `prefer-satisfies-over-as`, `promise-all-opportunity`, `readability`, `route-boundary`, `semantic-clone`, `simplification`, `syntactic-clone`, `type-precision`, `unbranded-type-consistency`, `unused-export`, plus the opinionated sub-checks of `performance`, `typescript`, and `no-implicit-coercion` (their universal sub-checks stay on).\n\n## CLI\n\n```\nnpx dlint [options]            Lint (default: full project scan)\nnpx dlint init                 Scaffold .dlint/rules + dlint.config.ts\nnpx dlint --help, -h           Show all flags\n\nScan modes (default: full project):\n  --files <path...>     Specific files or directories\n  --changed             Uncommitted + untracked files\n  --commit              Last commit + uncommitted changes\n  --branch              All changes vs base branch\n\nConfig & target:\n  --config <file>       Load this config; rulesDir + tsconfig resolve from its directory\n  --path <dir>          Project root (default: cwd)\n  --rules <id...>       Only run specific rules\n\nOutput:\n  --format <fmt>        json (default) | table | compact | html\n  --benchmark           Total, phase and per-rule timing (stderr; json: \"timings\" field)\n  --file-threshold <n>  Write the report to a temp file when findings >= n (default 300)\n  --no-error            Exit 0 even when errors are found\n\nAutofix:\n  --fix                 Apply available autofixes\n  --dry-run             With --fix: count the fixes per file, write nothing\n\nAnalysis:\n  --extract             Output extractor data as JSON\n  --list-rules          Output loaded rules as JSON: id + description\n```\n\n`--fix` applies only fixes that keep what the code does, then lints the same files again and reports what is left. A finding whose repair would change behavior names a `pattern` instead.\n\n### Run from anywhere\n\n`--config <file>` decouples _where the config lives_ from the cwd: its `rulesDir`, `tsconfig`, and scan base all resolve **relative to the config file's directory**, and an explicit `--path` replaces that directory as the base. So one rule set can lint several programs in a monorepo (app + workers + packages), each pointing at its own `tsconfig`. Run one config per program, for example in a CI loop:\n\n```bash\ndlint --config app.dlint.config.ts\ndlint --config worker.dlint.config.ts   # same rulesDir, the worker's own tsconfig\n```\n\ndlint exits 2 when it cannot know the file set: a missing, unreadable or broken `tsconfig`, one that includes no files, or a failing git call. Every mode except `--files` lists files through git, so outside a repository pass `--files`. An error inside `compilerOptions`, such as an option only TypeScript 7 knows, only warns. Disable rules that don't fit a target's runtime via `overrides`.\n\n## Performance\n\ndlint builds one `ts.Program` and one `ts.TypeChecker` and shares them across every file and rule. On a 1,778-file Next.js project the 61 default rules take 16.5 s; type checking is the largest share, all rules together about 5.6 s. `--benchmark` prints that split and the time of every rule for your project.\n\nLint only what you touched with `--changed` (uncommitted) or `--branch` (vs base) instead of the whole project.\n\n## How it works\n\n```\ninstall package\n  → 86 built-in rules loaded (61 active by default; the opinionated group ships off)\n  → project-specific rules loaded from .dlint/rules/ (optional)\n  → create ts.Program (once, shared)\n  → for each file x each rule: check(ctx)\n  → collect diagnostics → format → output\n```\n\nRules are `.ts` files that [jiti](https://github.com/unjs/jiti) compiles at runtime, so there is no build step: a file dropped into `.dlint/rules/` runs on the next invocation.\n\n## License\n\nMIT, built by [dfine.io](https://dfine.io).\n\nThe bundled secret patterns are forked from [gitleaks](https://github.com/gitleaks/gitleaks) (MIT, © 2019 Zachary Rice); see [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md).\n","readmeFilename":"README.md"}