{"_id":"@doikayt/typescript-build-config","_rev":"26-6eb372d44d015ee9360a89ebfc077ce3","name":"@doikayt/typescript-build-config","dist-tags":{"latest":"0.1.33"},"versions":{"0.1.9":{"name":"@doikayt/typescript-build-config","version":"0.1.9","keywords":["eslint","typescript","config","build","tooling"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.9","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"dist":{"shasum":"485a70d1c56e4bd1386f90622585532eca965816","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.9.tgz","fileCount":17,"integrity":"sha512-lZ8ga9N8OnPJKc++evNdr6RcSq0IRcc7nwV7MQuxY2pmr/BVBSiDx/dLYbLTCFFmEMib5fqSZI4DGCZcx+tk6w==","signatures":[{"sig":"MEUCID82ZBoU59h6UPAyZJV3W0vOoYGm+rOURz2gYOdl7anqAiEA0AsG91AjPNu9QdJdhL0yWRtrfNY3szIEF4FJyoX1Fc0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26998},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json"},"gitHead":"3440a01db53ac75467301a62d2dcaebd67792fdd","scripts":{"ci":"npm run check-format && node --test","test":"node --test","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, and future tsconfig/Prettier presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@datalackey/update-markdown-toc":"^1.4.14"},"peerDependencies":{"@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.9_1783990548892_0.42325446691348456","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@doikayt/typescript-build-config","version":"0.1.10","keywords":["eslint","typescript","config","build","tooling"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.10","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"dist":{"shasum":"a3051c963512b4acc237972c1009984aa395fa4c","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.10.tgz","fileCount":17,"integrity":"sha512-S7rjj6MRgDrztr23GNsKkWgULWg5jhdFHuEeq6N3d9d94QC1DaC38Q10jj/beQjCJvalPBqY+sFT0mt2lNU4Rw==","signatures":[{"sig":"MEUCIQDXrQ2OYD+Z3KWOZxJVBjNHwGJyTXmhllCutC6v9uCyQAIgHVeKLfMUav2aa4G04OiuVObc1o+4L/IhR38HEzikDno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26996},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json"},"gitHead":"796fcbb1be84c847aca220f9e170f9195c2a4e87","scripts":{"ci":"npm run check-format && node --test","test":"node --test","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, and future tsconfig/Prettier presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.10_1783994883827_0.3489179988149673","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@doikayt/typescript-build-config","version":"0.1.11","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.11","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"dist":{"shasum":"aade69d119d4e192e4a1c5e8b3eb1b7ec93b8f8e","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.11.tgz","fileCount":20,"integrity":"sha512-HnYmV8GP59TW6m+DgJ+XauiHW/Fpj0UMYRNdYiOClCIq1M2X3RgORzJdMtYzSNZJgZTMMdAfi6JYxEnh2zdbQg==","signatures":[{"sig":"MEUCIQCQ7+X0Ka57eV60r8c/s4hCkyKWND3kbBRjrPwyFzh6dwIgYewCSEQ1jbeJr66p5XfwRm7MaFFcTbPX8ekRVSVoUF4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":506741},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"fa87da226610a655eca40e9ebdc6238f04e702bb","scripts":{"ci":"npm run check-format && node --test","test":"node --test","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.11_1784668823188_0.8533943949729632","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@doikayt/typescript-build-config","version":"0.1.12","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.12","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"dist":{"shasum":"983da82f10a043edf6e6360fac55352169431444","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.12.tgz","fileCount":21,"integrity":"sha512-uMZujvDEv22mdwO7DHDy/KH3bEqjENEZM6kseL4Ftj8VpzWMGuxatiuWnzTZSiMJzLuR71D0C/LH3DsBAvb6rA==","signatures":[{"sig":"MEUCIQC0vPvMc8T6itHwPbXptxDGOc/zafoAZ05YwsIlrOMh6wIgFy/5JIVy4g+tLIJ3SSxvnB/hl+mAdOVUi0bTZPIzmHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512905},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"9690a21ac54beb99bd84e879fa53fa28007bf2eb","scripts":{"ci":"npm run check-format && node --test","test":"node --test","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.12_1785120801646_0.6978801876724126","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@doikayt/typescript-build-config","version":"0.1.13","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.13","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"dist":{"shasum":"e5e81f7b25513cf09324ee24e7390e85a84cc9ef","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.13.tgz","fileCount":23,"integrity":"sha512-CywBBQ/RJ553frfUC/3YhMIi9CbNG+flzFLs4K7t3t89JMgHpShfPGX7LSTDQzEVTK5ht36JJ4S84VLCpgtXKA==","signatures":[{"sig":"MEUCIBtZ0LredChndFjOKGrc0HBaiZlBUAR8tN4+aCfbefD2AiEA4hLEoFiBrDvxmJhIqVC3FlN77CR3kzhGw4ARYqYRYak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5207799},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"60b8b985a8fccd918fe7b73815551e82047622ba","scripts":{"ci":"npm run check-format && node --test","test":"node --test","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.13_1786241544153_0.0033349745684245757","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@doikayt/typescript-build-config","version":"0.1.14","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.14","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"87e63d34d0739f1fb04201fcd39c6b816b1d0c35","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.14.tgz","fileCount":31,"integrity":"sha512-E8N+cyFkFtJCT5NRwzy0VNk3M0oFy8S+CVdl37uFDrYJ+aqlN9b1bvf6sJ+xo6yRlPV9GH2hIksCr6FS+zBtRA==","signatures":[{"sig":"MEUCIDtfTb2S83mplE1LKUfa7WZ3slvq5yS/LRre8eg9/j+KAiEA80Dv8zYI/sRmevK1xdikyjKaMige9QCFvLh9h1zXkjE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5228245},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"ad1acfee2700de3e00edd4c13265432d20c897f7","scripts":{"ci":"npm run check-format && node --test","test":"node --test","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.14_1786255264944_0.7217291492733089","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@doikayt/typescript-build-config","version":"0.1.15","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.15","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"f9fd944a97b4e2f63620a74229278aeb73c84b04","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.15.tgz","fileCount":40,"integrity":"sha512-6HO34xlK/G8oU2qhzmj7TQ1P/TFAVHCMi8Ur5ZWhb+AlgaDyPZs2YBa1wPtoM0pKm5Wj8FfwNAkwhgbKxTz5NQ==","signatures":[{"sig":"MEYCIQD3uX/GjCxjZZV+oQNPjnNovD/BecSJ+P5WJtxtAI+aOgIhAM5lo8GqhBP10vT9FfyXnW66aNum3qg2ctLcjCNQUau3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5236980},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"7cd571e2d923e3d9d4233fc14f5d209ecc99f9b1","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.15_1786259641768_0.47209227900924344","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@doikayt/typescript-build-config","version":"0.1.16","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.16","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"d0986a284aaf6bc0268383ed8547b484192a1ef5","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.16.tgz","fileCount":40,"integrity":"sha512-qoVW1UWiVACRqJE/9YPKTvv3TCobA2kh/jTLoL1kE1Vd1h8Ls6gIW4bDdBks1iU0Ug+yTgExgjcBqTlE4al+hA==","signatures":[{"sig":"MEUCIF4el9C4rpYiRHRIFd/duWlPhjDUnjeCc2j7PEvE+vbGAiEAvyp8SHxlwdOayKomxiIGe83qMYYHST0f2Yxe3mIRyM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5238209},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"f2dfcf9a11cc4308d1436cb2ed990c5b5098c84f","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.16_1786260974179_0.9681014483820563","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@doikayt/typescript-build-config","version":"0.1.17","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.17","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"f2c3df3e47a9f401fbf14c9a3e1b68c3a561e5e2","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.17.tgz","fileCount":40,"integrity":"sha512-p1GlVI+AIOB4b5eoj49SclTfdmyBsynUyrceLm+ni7vpCBQIVQgOeSccvTEcnQS3L9tC/cK4XeDpV12VhMiVAA==","signatures":[{"sig":"MEUCIQDBa2dZoYs++Km2c+UhcqNU4CJIAusW82+L64WO5RqU2wIgWSIoMR3OFHuxlKFeJfl1bOkOSGEZpYqjC3N3sDZiQjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5239379},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"dbf789c2dd173b069a9bc505eba6feb0e7abf474","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.17_1786262093218_0.3226815284631366","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@doikayt/typescript-build-config","version":"0.1.18","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.18","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"bd87e643408090dd5d73f27821b421c4f339defe","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.18.tgz","fileCount":40,"integrity":"sha512-8mp7ETDyADQD+7ItCNkbFL4wXYLrj/pSiNuKn8v4BzeguGxtTy9uBlXOOvUIFYJVLBYgxtdO3xx7BxuWoN/p5Q==","signatures":[{"sig":"MEUCIBBIT39ZMasrMRgL3xtkzpO8He8ZH4j0KtyMXo2FZF/8AiEAr8YeU+5G8WhcXRQReFPjNSvAkRXdZdbj0lP01JqgvWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5240715},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"1a183adbd9bef0417a11e415df284bb17663293d","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.18_1786263204561_0.29765261954754774","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@doikayt/typescript-build-config","version":"0.1.19","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.19","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"5acb67db5c39c54d1d50b900d3bf7b3e54728283","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.19.tgz","fileCount":40,"integrity":"sha512-57MZw0MmgiuFTQqPMXWUKVbJvpwvF6jdJFLMOIN2/V3sLMFzueIi0s5YbN0Cdu+NrtTqnoa3cXfzFsYgHwOZGg==","signatures":[{"sig":"MEUCIF69tZBL4OTO4DLVokFZ8Y/5vgIcBPVopVkCsf4KtNTbAiEAoRw25g/uh1Sb76KZaQP8v6TKd7xo6XMuS+Mn//tWFuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5241108},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"68653c7cbc3b3d1fdba7e8b50f231d4bbf5fba29","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.19_1786266864819_0.3871928939384721","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@doikayt/typescript-build-config","version":"0.1.20","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.20","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"a5a47580bafcddd9061b65cb1b2f0d8c2cedda60","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.20.tgz","fileCount":40,"integrity":"sha512-PfMyQEbx7ZIOGeZ6+bA1K/gt70sfE6ONCAMjRyDzmfLCL1nVnz+TTj6d+gazytNyxH9KWtscdHff1jDaort6aw==","signatures":[{"sig":"MEUCIE7rk/ZTbhfsoDdH1+psZuT6y/U+YYTL9Eof2MJIJQCRAiEAlh1f/Tc3+jarv4QxkcwVOEltTzLEPnw3VHTtAn21N4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5242509},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"21e2ea3fddbe5887a1ddd97764b83c2a150e8dc3","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.20_1786306416643_0.444877879959106","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@doikayt/typescript-build-config","version":"0.1.21","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.21","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"fb8b104227452740dc94ad1945e41b3e4d0b137d","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.21.tgz","fileCount":42,"integrity":"sha512-dupkCoxK4lh96B++I3Qzp4+i7zMr0BfABEHZfNlj6uWU+P76B3YU8ttgXp6q2f+LwY3apcOlfJasI/3Q5Ejt9g==","signatures":[{"sig":"MEUCIBoykNzBLK1xGCHoO9pxdYDXwE6+6HWJxKrsKWmz/3GHAiEAumhD2v3l7A0wDPyvSi7cmURxNbIIrVVMltMzgOsVzj0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5246518},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"bcc40fb64cf7d91034d51b3930d1e93f23f164fd","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.21_1786315541980_0.2999989258949687","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@doikayt/typescript-build-config","version":"0.1.22","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.22","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"12b614426feaee196936b28d57ef9bb838228af2","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.22.tgz","fileCount":42,"integrity":"sha512-UpGHk5zqcHyHS2rJGqRYhW7W/kAPx14bVNuq121pGenp5GE7BPZob3e2GlcHyApJpc+xeItEvhX7FmIryORRhg==","signatures":[{"sig":"MEUCIQCsljmlMQKF60xqGoAF9iM43W50LyfFcYPpdcfK1vt4fQIga8bQYxtJaUAWXG/xhpzauKMAE0e/BSqouj2mivjr8ZQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5248772},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"4886daaccdcfc054fa4e05cb7a7a3b06d0573e31","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.22_1786330651329_0.6705533532308185","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@doikayt/typescript-build-config","version":"0.1.23","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.23","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"36c763f5acd231142711fbfc8ea2cb97cfb4d667","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.23.tgz","fileCount":42,"integrity":"sha512-xhCeLArXZw/F0x5Vl0YWkLJOdfmxARpjxrXxTLNskfNxPJdCD3DqG1WAEe8vZY/v6z5Oh24S4hFty2/XjszicA==","signatures":[{"sig":"MEQCICLO6QYrM2OiXfqHyB5ie0iD8SxoMI+8MN8/eM4oYxhmAiApIAoJOo8GAbnis6XZKX91ttccuDaLmQy+BwC/vYNHbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5248773},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"59c8c0889f0e1178fd19a6394c8e8a7054ba5ebd","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.23_1786331741228_0.17296979677289537","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@doikayt/typescript-build-config","version":"0.1.24","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.24","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"343a5239f6bcbea01911012d8c569cfe26c221fa","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.24.tgz","fileCount":42,"integrity":"sha512-NElUl5L/XYNiJz6wB9+P1rq4RK8U0+EVhoNlw8BF0lUTjMRoX2RzMHJlvfvrFIgUD+lev3Rbryuc3/DUOb/Jag==","signatures":[{"sig":"MEYCIQDcN83VJPMtrprAjF7fOwJXAcDP1/RwqBdK6pFKDeeU9QIhAOZ98wcPzz8HX/KIbP4c0jQrSI6XA+c3Uy/oJtJ5DGLM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5248773},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"564c403f0a10f570525b31d3e0dd931a3f16eb3f","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.24_1786332035740_0.2271627929605784","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@doikayt/typescript-build-config","version":"0.1.25","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.25","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"d2278d137ef6a8189d763be2433ccd487b127ead","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.25.tgz","fileCount":42,"integrity":"sha512-56JRhXvV2DCcYjlxmdsTo03tZslEfLF1+JittsiZsAwYk9vZCYs+Hkka+Bn0IeOl641Xih5JFKyJ6zUmWwhaMw==","signatures":[{"sig":"MEQCIB25NHzNCd0qw0UWyPyV+N8OxIM534/HDEuJKL+VYZE5AiBz3AD0hCo7mf3rp7VMKnn1Vms0eAs4RV/+MlWHeGv2gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5248873},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"68aabb0aadb3d81cc7002bafcd9cedecfbcc8354","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.25_1786333720927_0.09674128427591211","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@doikayt/typescript-build-config","version":"0.1.26","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.26","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"e9829cc7684cf74b3fd983ca9f3c2ae1d8d0a412","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.26.tgz","fileCount":42,"integrity":"sha512-oJjp22vRacrNGt65T/e+zjNaxQWTlPez2RqfDUb+wqI8BEDWYwItYCnwdXpAxy/KyoR0cCNPjhruMMzqBM/OJg==","signatures":[{"sig":"MEUCIQDtXxPZyXnxFMYinNtRqt69mksNFpyT8nR1ojoN2CAEkQIgMIE5f7d9UEZf194JGG6sQ/U1H/VQhOf85/+ldIGPiPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5248873},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"cde506e0d49f03b4201c8e41618ff596cfc50cf7","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.26_1786335140431_0.6133395291842747","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"name":"@doikayt/typescript-build-config","version":"0.1.27","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.27","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"0c74c68ceb042936bc3408625ba92959a2cf83f3","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.27.tgz","fileCount":42,"integrity":"sha512-8aqBr8jl/1zd5KEIUWSNqN+4o8D2Ex2sXGeNSjB5rZhfqORNWFEl9K3M96thsLjhBT03ULG91JhxhyGTe5TYRg==","signatures":[{"sig":"MEUCIQCoV75ZSkg9paNtmTn9ovGH32X2vZ0BpHWX+u33YIKQnAIgOJl+T+leu9duh1ErmSpOdziDnQ3auQEnJbp5FPHMadc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5250476},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"b149e691d281536a76e7ff6fd209f454c60ccc5b","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.27_1786400306803_0.1244676304484642","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"name":"@doikayt/typescript-build-config","version":"0.1.28","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.28","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"0585c9e6f50a424cbd5cf2a45ce5538b0ccbcf6f","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.28.tgz","fileCount":42,"integrity":"sha512-n/ymDAZ6Dn1UmJDXJ1LpDr2ClYv81/g7y1719EI9oDuFcigDmNwaBl5BjydwERYZ6gHTkURxvPwDJDz0kAVU1A==","signatures":[{"sig":"MEUCIQDUnCK9IuobYROQP7CtbHddxOzAKpkqE2LT6ABsNr+KswIgKcZ1mOGPQAK8IC4sNiy4bqPncdLnkf2eJXj6vQXPENg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5251593},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"499532e389d55bca32de34b60bdc64e7c459218d","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.28_1786406028215_0.8702374394247308","host":"s3://npm-registry-packages-npm-production"}},"0.1.29":{"name":"@doikayt/typescript-build-config","version":"0.1.29","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.29","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"afd183de588ed8e5fe5a3b3ad8b3a958c5a85f72","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.29.tgz","fileCount":42,"integrity":"sha512-OAf7BKa75BePiQ/GiDApR8hbIOUTue1uVY2c91Yu2OL3+8wB0BWDjWvWYndH38ORTkptNuFmn9+qp8EPlRLqeA==","signatures":[{"sig":"MEYCIQCgjZfuufrAjWneOoFw/wARlGTreRjfOHmrlxbP6uGRZAIhAMfQTHGVr0UCYCwYFxwP+uZf49AzcA9MmANzIp1auJob","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5251321},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"6a46b6cad741925f8fed0261f31c588301c20766","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.29_1786417763661_0.05782985499121218","host":"s3://npm-registry-packages-npm-production"}},"0.1.30":{"name":"@doikayt/typescript-build-config","version":"0.1.30","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.30","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"884e6a6fb068502522cd4bf7fa5b8840b22170e0","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.30.tgz","fileCount":42,"integrity":"sha512-r1nhysEOqjYKQ4EzMqvOdVggCSSxjlSyugxJY0oCC9SekRERcGRlHK7DcJKf+bK0fW7wCtL2NSD03vujPh03qg==","signatures":[{"sig":"MEUCIQDBQPOF9Do7VVu/PW7NDEkd1QBqFpZg8fMTxPr/4alQ+QIgRXLRE2tcSWzvXsRTj/UGNbAHFf+9vNMTR+JuBX2nPmU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5251797},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"84baaa4d27c0b01726a6b2ec36a8809cc2358e99","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.30_1786423642075_0.9779920940634526","host":"s3://npm-registry-packages-npm-production"}},"0.1.31":{"name":"@doikayt/typescript-build-config","version":"0.1.31","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.31","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"dbe3cc69797de560feef2532ad14598b4f2530de","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.31.tgz","fileCount":42,"integrity":"sha512-yWxGzNHl9zNFB4Fn8LleMQBuvT/E80ZNKkRMPrVreAClY4OAn3Vpkq8ffm7MnjqF42ml3yxxNSqKnIJDE42/LA==","signatures":[{"sig":"MEYCIQCm/nfk1ULBuFAXY2uhwqNpiVXwssioZKsGH9dHYHLZ+gIhAN++T/6EBDzVEQkzwbyWZHDlzntWOjHRSMR3m5n6rdlm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5252064},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"296f919cccd4196c4c38dde22310072004ce8a40","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.1","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.31_1786425759196_0.47425831556594855","host":"s3://npm-registry-packages-npm-production"}},"0.1.32":{"name":"@doikayt/typescript-build-config","version":"0.1.32","keywords":["eslint","typescript","config","build","tooling","playwright"],"license":"MIT","_id":"@doikayt/typescript-build-config@0.1.32","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"}],"homepage":"https://github.com/doikayt/typescript-build-config#readme","bugs":{"url":"https://github.com/doikayt/typescript-build-config/issues"},"bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"f7de011c723747d044f3558fa445a47e3f483df8","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.32.tgz","fileCount":42,"integrity":"sha512-Kdm/ulJN75cWYmEJ1zkDRUhzH0OGzB4WgGMvXMyQKxJ8E2yu2D6uqfv1HwJnGY/EwcqTMiaoRmVks6l9BsoYIQ==","signatures":[{"sig":"MEQCIFi7zfLGiLdONHB7YJmaE4n+kZdNYNIKkWCTQEF8RMzoAiAkRoKB7BLMHZQCI2mR0aCF2IjYZT1T6L8LmluCKfAefQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5252231},"main":"src/eslint.js","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"7840256cc25bf4265f7d7f927e798bf79a85014a","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"repository":{"url":"git+ssh://git@github.com/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"_nodeVersion":"22.23.2","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/typescript-build-config_0.1.32_1786923436086_0.9597967636666844","host":"s3://npm-registry-packages-npm-production"}},"0.1.33":{"_id":"@doikayt/typescript-build-config@0.1.33","bin":{"typescript-build-config":"src/cli.js","doikayt-playwright-install":"src/playwright-install.js"},"dist":{"shasum":"df37e52e468e2dcfea5d7971d9b47638f9cd1b73","tarball":"https://registry.npmjs.org/@doikayt/typescript-build-config/-/typescript-build-config-0.1.33.tgz","fileCount":42,"integrity":"sha512-nh66I5VMqoukR5K3K18IDIknlPCcpnK3xZav3fJ8ZSnVCQ/2esd8WQ/NdiEjRTUGF+4U1h8FQLLcb9C8SHSRiQ==","signatures":[{"sig":"MEQCIAb8uDP+HY1zQolT4dzNrwrMKSYX5J9e3zDQj0g1GnUgAiAz+fNzeQrPYulzKpk+EYN0YVDUmWl4NOY63dbJVjP1wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD6WRtsM3WwOFJKO2gl0Uy3jEn87yJEOGDAWFXO0RZMcQIhAP5ihcl12rXEt2xuRBvfEw9lYEoUnd423zYjmAsXc3RM"}],"unpackedSize":5257014},"main":"src/eslint.js","name":"@doikayt/typescript-build-config","type":"module","engines":{"node":">=22"},"exports":{"./eslint":"./src/eslint.js","./prettier":"./src/prettier.js","./tsconfig":"./src/tsconfig.base.json","./playwright":"./src/playwright.js"},"gitHead":"dd9a40eac4aba09131d1cdfe060373dadbd7209d","license":"MIT","scripts":{"ci":"npm run check-format && node --test tests/*.test.js","test":"node --test tests/*.test.js","prepack":"echo no build step required","postinstall":"node src/postinstall.js","check-format":"prettier --check src/ && update-markdown-toc --check README.md && update-markdown-toc --check docs/verification-runbook.md","update-all-format":"prettier --write src/ && update-markdown-toc README.md && update-markdown-toc docs/verification-runbook.md"},"version":"0.1.33","_npmUser":{"name":"datalackey","email":"chris@buildlackey.com"},"keywords":["eslint","typescript","config","build","tooling","playwright"],"repository":{"url":"git+ssh://git@codeberg.org/doikayt/typescript-build-config.git","type":"git"},"_npmVersion":"10.9.9","description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","directories":{},"maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"},{"name":"lastliet","email":"pranjalk.dev@outlook.com"}],"_nodeVersion":"22.23.3","dependencies":{"eslint":"^9.0.0","prettier":"^3.0.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@changesets/cli":"^2.29.8","@playwright/test":"^1.40.0","@doikayt/update-markdown-toc":"^1.4.17","@doikayt/typescript-build-config":"^0.1.33"},"peerDependencies":{"@playwright/test":">=1.40.0","@typescript-eslint/parser":"^8.57.1","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependenciesMeta":{"@playwright/test":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/typescript-build-config_0.1.33_1790803731801_0.9139574259137178"}}},"time":{"created":"2026-07-14T00:55:48.701Z","modified":"2026-09-30T21:28:52.169Z","0.1.9":"2026-07-14T00:55:49.066Z","0.1.10":"2026-07-14T02:08:03.966Z","0.1.11":"2026-07-21T21:20:23.355Z","0.1.12":"2026-07-27T02:53:21.854Z","0.1.13":"2026-08-09T02:12:24.441Z","0.1.14":"2026-08-09T06:01:05.266Z","0.1.15":"2026-08-09T07:14:02.026Z","0.1.16":"2026-08-09T07:36:14.415Z","0.1.17":"2026-08-09T07:54:53.505Z","0.1.18":"2026-08-09T08:13:24.827Z","0.1.19":"2026-08-09T09:14:25.061Z","0.1.20":"2026-08-09T20:13:36.892Z","0.1.21":"2026-08-09T22:45:42.228Z","0.1.22":"2026-08-10T02:57:31.577Z","0.1.23":"2026-08-10T03:15:41.441Z","0.1.24":"2026-08-10T03:20:36.020Z","0.1.25":"2026-08-10T03:48:41.169Z","0.1.26":"2026-08-10T04:12:20.684Z","0.1.27":"2026-08-10T22:18:27.065Z","0.1.28":"2026-08-10T23:53:48.509Z","0.1.29":"2026-08-11T03:09:23.960Z","0.1.30":"2026-08-11T04:47:22.358Z","0.1.31":"2026-08-11T05:22:39.439Z","0.1.32":"2026-08-16T23:37:16.342Z","0.1.33":"2026-09-30T21:28:51.990Z"},"license":"MIT","keywords":["eslint","typescript","config","build","tooling","playwright"],"repository":{"url":"git+ssh://git@codeberg.org/doikayt/typescript-build-config.git","type":"git"},"description":"Shared build configuration for TypeScript projects — ESLint, Prettier, tsconfig, and Playwright presets","maintainers":[{"name":"datalackey","email":"chris@buildlackey.com"},{"name":"lastliet","email":"pranjalk.dev@outlook.com"}],"readme":"# @doikayt/typescript-build-config\n\nShared build configuration presets for TypeScript-based projects.\n\n<!-- TOC:START -->\n- [@doikayt/typescript-build-config](#doikayttypescript-build-config)\n  - [Purpose](#purpose)\n  - [Quick start](#quick-start)\n    - [1. One-time machine setup (once per machine)](#1-one-time-machine-setup-once-per-machine)\n    - [2. Create a new project (repeatable)](#2-create-a-new-project-repeatable)\n      - [dk-scaffold](#dk-scaffold)\n      - [Run dk-scaffold's steps individually](#run-dk-scaffolds-steps-individually)\n    - [Trying it out](#trying-it-out)\n  - [Design Goals](#design-goals)\n    - [What each component is for](#what-each-component-is-for)\n  - [Installation](#installation)\n  - [Usage](#usage)\n    - [The canonical script set](#the-canonical-script-set)\n    - [Optional Playwright config for Web / UI testing](#optional-playwright-config-for-web--ui-testing)\n    - [Existing project](#existing-project)\n  - [Dependency Strategy](#dependency-strategy)\n  - [Current Contents](#current-contents)\n  - [Delivery Model](#delivery-model)\n  - [Enforcement Model](#enforcement-model)\n  - [Release Pipeline](#release-pipeline)\n  - [Conventions Every Project Must Adhere To](#conventions-every-project-must-adhere-to)\n    - [The `ci` script](#the-ci-script)\n      - [NX projects](#nx-projects)\n    - [The `update-all-format` target](#the-update-all-format-target)\n  - [Publishing](#publishing)\n  - [Team shell aliases](#team-shell-aliases)\n  - [For Maintainers](#for-maintainers)\n    - [Clone and install](#clone-and-install)\n    - [Run the full CI suite](#run-the-full-ci-suite)\n  - [License](#license)\n<!-- TOC:END -->\n\n## Purpose\n\nThis package centralises common build tooling configuration, release policy, and content assets\nacross all TypeScript projects maintained under the `@doikayt` scope. The goal is a\nsingle source of truth for such settings that should be held constant across\nprojects, avoiding drift between repos over time.\nThe plugin encapsulates common build **policy** and release **workflow logic**\nvia the pipeline files it installs into each consumer repo and the canonical release process in\n[docs/RELEASE-PROCESS.md](docs/RELEASE-PROCESS.md).\n\n## Quick start\n\nThese steps set up — in a fresh \"new-developer\" environment — a local git repo\nwith a skeleton demo app plus all the standard Doikayt build configuration:\ntooling that auto-documents the code in the repo and lets it be pushed to\nCodeberg, built by Woodpecker CI, and (for a library) published to npm. Steps\nare minimal here — each links to the section that explains _what_ and _why_.\n\n### 1. One-time machine setup (once per machine)\n\nClone this base repo and install the shared team\n[shell aliases](#team-shell-aliases). This only sets up the aliases\n(`dk-scaffold`, `mkrepo`); it does **not** configure any project:\n\n🛑 **STOP here if you are a contributor/maintainer of `typescript-build-config` itself** If you intend to\npush commits back to *this* repo, you're in the wrong place — the clone below is\nHTTPS, read-only for this repo. Start here instead: [For Maintainers](#for-maintainers).\n\n```bash\ngit clone https://codeberg.org/doikayt/typescript-build-config.git   # HTTPS: no SSH key needed\n#\n## Alternative using ssh key:    git clone ssh://git@codeberg.org/doikayt/typescript-build-config.git\n#\n#\n#\ncd typescript-build-config\n./assets/shell/install.sh   # adds `source assets/shell/aliases.sh` to your rc (idempotent)\nexec $SHELL                 # replaces this shell with a fresh one that reloads your rc\n```\n\nThe aliases are now active in this shell. Run `tools-help` to confirm — it prints every\ncommand you now have available (`dk-scaffold`, `mkrepo`, and more) with a one-line\nsummary of what each does. From here, go to\n[2. Create a new project](#2-create-a-new-project-repeatable) below.\n\n**Re-running this after `aliases.sh` changed?** Always use `exec $SHELL` (a fresh\nshell), not `source assets/shell/aliases.sh` in your existing terminal. If a function\nit defines shares a name with something your shell already has loaded (an old alias\nfrom a previous version, for instance), sourcing directly can fail with a confusing\n`syntax error near unexpected token`. A fresh shell never had the stale definition to\nbegin with.\n\n### 2. Create a new project (repeatable)\n\nThe two paths below are **alternatives that reach the same result** — a project\nwired to this base package.\n\n#### dk-scaffold\n\n`dk-scaffold` is the one-command wrapper that also (optionally) creates the\nCodeberg repo and pushes it. Just run it with a first argument naming your project\nand a second indicating `lib` (a published library) or `app` (a standalone\napp/utility, the default) — see [library vs app](#usage) and\n[Packaging concepts](docs/packaging-concepts.md):\n\n```bash\ndk-scaffold my-project lib\n```\n\n**Where the project lands.** `dk-scaffold <name>` creates a `<name>/` subdirectory in the\ndirectory you ran it from (for example `~/projects/my-project/`) and leaves your shell\ninside it. Two variants scaffold in place instead of creating a subdirectory:\n\n- run it from inside an empty directory that is already named `<name>`\n- pass `.` as the name, which uses the current directory's name as the project name\n\n`dk-scaffold` will look like it is prompting you, but just wait a moment: the script\nfills in the appropriate answers itself. It prints a note saying so; pass `-q` to hide it.\n\n#### Run dk-scaffold's steps individually\n\nThe steps below mirror the work `dk-scaffold` does under the hood — either for a\nbrand-new project or to adopt Doikayt standard build config into an existing one.\n([Installation](#installation) and [Usage](#usage) explain each in detail.)\n\n```bash\nnpx @doikayt/typescript-build-config new                  # npm init -y + @doikayt scope\nnpm install --save-dev @doikayt/typescript-build-config   # postinstall seeds configs + pipeline\nnpx @doikayt/typescript-build-config init                 # scripts, deps, publish config, demo\nnpm install                                               # fetch declared devDependencies\n```\n\n### Trying it out\n\n`dk-scaffold` does a lot under the hood, so the best way to get familiar with it\nis to run it at the two levels it supports — each requiring a little more setup\nthan the last, and revealing a little more of the process. Each level scaffolds a\nthrowaway **app** (nothing publishes) unless noted. Do the one-time\n[machine setup](#1-one-time-machine-setup-once-per-machine) first so `dk-scaffold`\nis on your PATH.\n\n**Level 0 — local (no external Codeberg/npm accounts needed).** Scaffold and run\nthe same gate CI runs — no Codeberg repo, no push:\n\n```bash\ndk-scaffold my-demo --local\n```\n\nThat single command runs `init` (demo=yes, app, no Playwright) then `npm run ci`.\nYou'll see the vitest demo tests pass, `npm run build` emit `dist/` + type\ndeclarations, and `update-all-format` fill the README's TOC + UML markers\n(mermaid **source** — rendered at Level 1). `npm publish --dry-run` **refuses** —\nproof the app archetype never publishes.\n\nThe project is created in `./my-demo/` (a subdirectory of wherever you ran the command),\nand your shell's CWD (current working directory) gets set to the root of this new project.\nThis means you can run `npm test` or `npm run build` right away.\n\n**Level 1 — push to your own Codeberg.** Bring a Codeberg account and an API token.\nExport the token, point the wrapper at your account, and drop `--local`:\n\n```bash\nexport CODEBERG_TOKEN=<your-codeberg-token>   # repository-creation token\nexport REPO_OWNER=<your-codeberg-org>        # target owner for the repo\ndk-scaffold my-demo                          # app (public repo) — no npm creds\n```\n\nNow it creates the repo and pushes — and you see what Level 0 couldn't: the\n**mermaid diagrams rendered** (example\n[here](https://github.com/doikayt/build-tools/blob/main/javascript/tooling-core/README.md#package-structure))\nand the **CI job goes green** in Woodpecker CI (example:\n[this project's runs](https://ci.codeberg.org/repos/doikayt/typescript-build-config)).\nPush a follow-up **`feat:`** commit and the **release job** version-bumps + tags —\nnothing published (app). (The initial `chore: scaffold` push releases nothing;\n`feat:` / `fix:` triggers it.)\n\n\nThe screen cast below shows the process for Level 1. Note:\n\n- When we log in to our test account (associated with a dummy Codeberg account,\n  not doikayt) we see:\n  - no repos initially\n  - no doikayt aliases registered in `.bashrc`\n- After we run `dk-scaffold demo`, the install proceeds automatically, then we see:\n  - lots of output showing the project being configured and built\n  - a push to Codeberg\n  - a build and release triggered by Woodpecker CI\n  - since we did not select `lib`, we got an app build profile, for which\n    there is no publish to npm\n\n\n<p align=\"center\">\n  <img\n    src=\"docs/demo.gif\"\n    width=\"720\"\n    alt=\"update-markdown-toc demo\">\n</p>\n\nAfter we ran the screen cast steps we were able to screenshot how our push triggered a build on\nWoodpecker CI.\n\n<p align=\"center\">\n  <img\n    src=\"docs/github-actions.png\"\n    width=\"720\"\n    alt=\"woodpecker-ci-view\">\n</p>\n\n\n\n## Design Goals\n\nThe  package housed in this repo is designed to be 'upstream-most' -- i.e., all other\npackages depend on it (possibly transitively) and this package has no other \ndependencies on `doikait` packages (except ONE pinned version specific dependency on build_tools\nwhich we rely on for documentation generation. -- Cycles are generally bad, but this one works!)\n\nTwo goals drive every design decision made for this package, and they pull in different\ndirections:\n\n1. **Consistency enforcement** — every `@doikayt` TypeScript repo should expose\n   the same command surface (`ci` and `update-all-format`) and share the same\n   lint / format / release policy, so tooling, CI, and contributors can assume\n   an identical shape in any repo.\n2. **Minimal per-project setup** — standing up a new repo, or absorbing a policy\n   change into an old one, should cost as close to zero manual wiring as\n   possible.\n\nThis package reconciles these two via one architectural choice: **it both\n_defines_ the conventions and _distributes_ them.** A plain template repo would\ncopy conventions once and let them drift; a linter would enforce them but set\nnothing up. The npm package defined in this repo does both — it is the single\nartifact that decides \"every repo has a `ci` gate\" and also installs and\nre-checks it. That single source of truth is what keeps the ecosystem coherent\nas it grows.\n\n### What each component is for\n\nEach artifact this package ships exists to serve one or both goals. (See\n[Delivery Model](#delivery-model) for _how_ each is delivered; the table below\nis _why_.)\n\n| Component | Value it delivers | Serves |\n| --- | --- | --- |\n| **Presets** — `src/eslint.js`, Prettier, base tsconfig, living in `node_modules` | One lint / format / TS ruleset; change it once here and every repo picks it up on `npm update` | Consistency |\n| **Stubs** — `src/top-level/*` seeded into the project root | Zero-config entry points that only `extends` the presets | Minimal setup |\n| **Pipeline** — `src/pipeline/*` copied on install | A working release + changeset workflow with no hand-wiring; drift is diff-warned | Both |\n| **Convention checks** — postinstall warns on missing `ci` / `update-all-format` | An install-time nudge toward the shared command surface | Consistency |\n| **`ci` gate** — `.woodpecker.yml` runs `npm run ci` | Fail-closed enforcement: a repo that ignores the convention cannot release | Consistency (hard teeth) |\n| **Policy doc** — `docs/RELEASE-PROCESS.md`, linked never copied | One canonical release policy, impossible to drift | Consistency |\n| **Assets** — `assets/image/*` seeded into `docs/assets/` | Shared brand logos with no per-repo copies to maintain | Minimal setup |\n| **Shell aliases** — `assets/shell/aliases.sh`, cloned + sourced (never shipped to npm) | One standard way for the team to create and scaffold repos (`mkrepo`, `dk-*`) | Consistency |\n\nThe two goals map onto two lifecycle phases — **[delivery](#delivery-model)**\n(getting canonical artifacts into a consuming repo) and\n**[enforcement](#enforcement-model)** (keeping that repo conformant over time).\nEach has its own top-level section below.\n\n## Installation\n\n```bash\nnpm install --save-dev @doikayt/typescript-build-config\n```\n\nThe postinstall script copies starter config files into your project root and\nsets up the release pipeline (see below).\n\n## Usage\n\nAfter installing, run the `init` scaffolder to write the\n[canonical npm-script set](#the-canonical-script-set), declare the dev\ndependencies those scripts need — `vitest`, `@doikayt/autogen-markdown-doc`,\n`typescript`, and `@changesets/cli` (the release pipeline needs it) — and seed a\ncommented `vitest.config.ts`. `init` is interactive and **idempotent** — it only\nadds what is missing and never overwrites a script or config you already have, so\nit is safe to re-run.\n\n### The canonical script set\n\nEvery project gets the same named scripts, so any repo responds identically to\n`npm run ci`, `npm run update-all-format`, and so on. The aggregates chain to\nsmall single-purpose scripts, and the check side mirrors the write side:\n\n| Script | What it does |\n| --- | --- |\n| `ci` | The release gate: `check-all-format` then `test` (plus `test:e2e` for UI). |\n| `build` | Compile TypeScript to `dist/` (`tsc`). |\n| `test` | Unit / integration tests (`vitest run`). |\n| `test:e2e` | End-to-end tests (`playwright test`) — UI projects only. |\n| `prepack` | Runs `build` before packing, so `changeset publish` ships compiled `dist/` — **libraries only**. |\n| `update-all-format` | Reformat everything: code + markdown docs (write). |\n| `check-all-format` | Verify formatting: code + markdown docs (used by `ci`). |\n| `update-code-formatting` / `check-code-formatting` | Prettier write / check. |\n| `update-markdown-docs` / `check-markdown-docs` | Regenerate / verify generated markdown (TOC, UML, …). |\n\n`init` also asks whether the project is a **publishable library**. That answer\nsets the `package.json` fields that control publishing — `main`, `types`,\n`exports`, `files`, `prepack`, `private` — non-destructively (it merges, it\ndoesn't overwrite your other keys):\n\n- **Library** — `main` / `types` / `exports` → `dist/index.js`, `files: [\"dist\"]`,\n  and `prepack`, so it publishes a compiled, typed ESM package on push. `init`\n  also prompts for the package name (default `@doikayt/<name>`; a bare name is\n  scoped to `@doikayt`, an already-scoped name is kept).\n- **App / CLI** (the default) — marked `private: true`, so a release versions and\n  tags it but never publishes to npm.\n\n`type: \"module\"` and `build` are set either way. New to these terms (compiled\n`dist/`, publish fields, library vs app)? See\n[Packaging concepts](docs/packaging-concepts.md) for the background.\n\n### Optional Playwright config for Web / UI testing\n\nThe above section covers _what_ `init` decides; the two recipes below are _how_\nyou run it. They differ only in the **Playwright?** answer — `n` for a\nconsole/CLI or plain library, `y` for a UI / web project that needs end-to-end\ntests. Library-vs-app is an orthogonal choice, so either shape can still be\npublished or kept private.\n\n**Console / CLI or plain library — answer `n`:**\n\n```bash\nnpx @doikayt/typescript-build-config new              # npm init -y + @doikayt scope\nnpm install --save-dev @doikayt/typescript-build-config\nnpx @doikayt/typescript-build-config init             # answer \"n\" to Playwright; \"n\" (app) or \"y\" (library)\nnpm install                                            # fetch the declared devDependencies\n```\n\n**UI / web — answer `y`:** injects the end-to-end setup — adds a `test:e2e`\nscript and folds it into `ci` (so the release gate runs e2e), declares\n`@playwright/test`, and seeds a `playwright.config.ts` template.\n\n```bash\nnpx @doikayt/typescript-build-config new              # npm init -y + @doikayt scope\nnpm install --save-dev @doikayt/typescript-build-config\nnpx @doikayt/typescript-build-config init             # answer \"y\" to the Playwright prompt\nnpm install\n# then fill in the TODOs in the generated playwright.config.ts (webServer, baseURL)\n```\n\nBrowsers are installed on demand by the bundled `doikayt-playwright-install`\nwrapper the `test:e2e` script calls — no manual `playwright install` step,\nlocally or in CI.\n\n### Existing project\n\nSkip `init` if you prefer. On install, `postinstall` warns about any missing\nrequired targets (`ci`, `update-all-format`) until you add them — either by\nrunning `init` to adopt the full canonical set, or by defining the two scripts\nby hand (see [Conventions](#conventions-every-project-must-adhere-to)).\n\n## Dependency Strategy\n\n`eslint` and `prettier` are listed as `dependencies` and are pulled in\nautomatically. The `@typescript-eslint/*` plugins are listed in both\n`dependencies` and `peerDependencies` — the peer declaration pins the minimum\nversion to `^8.57.1` to avoid a `ts-api-utils` incompatibility with TS 5.4+.\n\nThis package targets new projects. Use in existing projects that pin older\nversions of these tools may produce peer dependency conflicts.\n\n## Current Contents\n\n- `new` command (`npx @doikayt/typescript-build-config new`) — runs `npm init -y`\n  then scopes the package name to `@doikayt` (an existing scope is kept)\n- `init` scaffolder CLI (`npx @doikayt/typescript-build-config init`) — writes\n  the canonical npm-script set, declares dev dependencies, and seeds config\n  templates (see [Usage](#usage))\n- `doikayt-playwright-install` bin — env-gated Playwright browser installer used\n  by a UI project's `test:e2e` script (adds `--with-deps` only on CI+Linux)\n- ESLint config\n- Prettier config\n- TypeScript config (`tsconfig.json`, `tsconfig.test.json`, `tsconfig.eslint.json`)\n- Postinstall script that copies starter top-level config files into your\n  project root, extending the configs installed under `node_modules`\n- Woodpecker CI release workflow (`.woodpecker.yml`)\n- Changeset config (`.changeset/config.json`)\n- Auto-changeset script (`scripts/auto-changeset.sh`)\n- NPM token diagnostic instructions — see\n  [Troubleshooting Publish Auth](docs/RELEASE-PROCESS.md#troubleshooting-publish-auth)\n- Playwright config helper (`@doikayt/typescript-build-config/playwright`) — `nixChromiumLaunchOptions()`\n  discovers the system Chromium on quirky NixOS; `definePlaywrightConfig()` wraps `defineConfig` and\n  merges the result in. Transparent no-op on platforms where Playwright's bundled browser works.\n  `@playwright/test` is an **optional peer dependency** — it is not installed automatically.\n  Any project that imports from `@doikayt/typescript-build-config/playwright` must declare it\n  explicitly in its own `devDependencies`:\n\n  ```bash\n  npm install --save-dev @playwright/test\n  ```\n\n  ```ts\n  import { definePlaywrightConfig } from \"@doikayt/typescript-build-config/playwright\";\n  export default definePlaywrightConfig({\n      testDir: \"code/tests/e2e\",\n      testMatch: \"**/*.spec.ts\",\n      use: { baseURL: \"http://localhost:8080\" },\n  });\n  ```\n\n- Brand assets (`assets/image/doikayt-logo.png`, `assets/image/doikayt-logo.svg`) — shared logos for use\n  across all `@doikayt` project READMEs and documentation\n\n## Delivery Model\n\n_Phase 1 of 2: getting canonical artifacts **into** a repo. Keeping a repo\nconformant over time is the [Enforcement Model](#enforcement-model)._\n\nThis package standardizes downstream repos by delivering **five components through three\nchannels** — so as you read the diagram, note that the component count and the channel\ncount deliberately differ; several components share a channel. The components are the\npresets, stubs, pipeline, and assets that _implement_ the common policy, plus a canonical\ndocument that _states_ it. Each reaches the consumer via one of three channels:\n\n1. **Referenced in place** — presets (stay in `node_modules`)\n2. **Copied on install** — stubs, pipeline, assets\n3. **Linked, never copied** — policy\n\nThe diagram below numbers those three channels; the terms after it define the five\ncomponents.\n\n```\n        ┌─────────────────────────────────────────────────┐\n        │        @doikayt/typescript-build-config        │\n        │                                                 │\n        │  presets  eslint  prettier  tsconfig  playwright│\n        │  stubs       src/top-level/*                    │\n        │  pipeline    src/pipeline/*                     │\n        │  assets      assets/image/*                     │\n        │  policy      docs/RELEASE-PROCESS.md            │\n        └─────────┬───────────────┬───────────────┬───────┘\n                  │               │               │\n   1 REFERENCED   │  2 COPIED     │  3 LINKED,    │\n     IN PLACE     │    ON INSTALL │  NEVER COPIED │\n                  │               │               │\n presets stay in  │ postinstall   │ cited by URL  │\n node_modules —   │ seeds stubs,  │ only; one     │\n updates flow     │ pipeline, and │ canonical     │\n with npm update  │ assets once;  │ copy — drift  │\n                  │ consumer owns │ is impossible │\n                  │ them; drift ⇒ │               │\n                  │ diff warning  │               │\n                  ▼               ▼               ▼\n        ┌─────────────────────────────────────────────────┐\n        │                  consumer repo                  │\n        │                                                 │\n        │  seeded stubs:  eslint.config.js  tsconfig.json │\n        │       │         prettier.config.js  …           │\n        │       └────extends────► presets living in       │\n        │                         node_modules  (chan. 1) │\n        │  owned pipeline:  .woodpecker.yml                │\n        │                   scripts/auto-changeset.sh     │\n        │  owned assets:    docs/assets/doikayt-logo.*    │\n        │  CONTRIBUTING.md ─cites URL─► RELEASE-PROCESS.md│\n        └─────────────────────────────────────────────────┘\n```\n\n**Terms:**\n\n- **Presets** — the real configuration content: the ESLint rules (`src/eslint.js`),\n  Prettier options, and base tsconfig this package exports. They stay inside\n  `node_modules` and are never copied — which is what makes them ecosystem-wide levers:\n  change a lint rule once here, publish, and every downstream repo receives the new rule\n  on its next `npm update`, with no per-repo edits.\n- **Stubs** — thin files seeded once into the consumer's project root by the postinstall\n  script (`eslint.config.js`, `tsconfig.json`, …). Their only job is to `extends`/import\n  the presets: channel 2 seeds these static, copied-once files, and they point back at\n  the evolving content that channel 1 keeps current in `node_modules`.\n- **Owned pipeline** — the release workflow and scripts, copied on install. \"Owned\" by\n  the **consumer repo**: it may edit its copies, upstream never overwrites them, and\n  postinstall prints a diff warning when a copy drifts from the canonical template.\n- **Assets** — brand logos seeded once into `docs/assets/` by the postinstall script.\n  Same channel-2 treatment as the pipeline: copied if absent, skipped if identical,\n  warning (without a text diff) if diverged. Consumer owns the copy; it will not be\n  silently overwritten.\n- **Policy** — the release process itself, stated once in\n  [docs/RELEASE-PROCESS.md](docs/RELEASE-PROCESS.md). Consumers reference it by URL from\n  their own contributor docs (as the consumer box shows) — never copied, so it cannot\n  drift.\n\n**Beyond consumer repos — the shell aliases.** The five components above all reach\na _consuming repo_ through npm (channels 1–3). The team\n[shell aliases](#team-shell-aliases) are the exception: they target the\n_developer's machine_, not a repo, through a fourth channel — **cloned and\nsourced** (`git clone` this repo + `source assets/shell/aliases.sh`, via\n`assets/shell/install.sh`). npm never touches them and they never land in a consumer's\n`package.json` or tree. Same goal (a standard way to create repos), different\ndestination — which is why they sit outside the five-components / three-channels\nmodel rather than as a sixth row in it.\n\n## Enforcement Model\n\n_Phase 2 of 2: keeping a repo **conformant** over time, once delivery has seeded\nit. Getting artifacts in is the [Delivery Model](#delivery-model) above._\n\nDelivery gets canonical artifacts into a consuming repo; enforcement keeps that repo aligned\nas both it and the upstream evolve. The two phases share machinery:\n**`postinstall` is the workhorse of both** — it _delivers_ on first install\n(copying absent files) and _enforces_ on every subsequent run that rebuilds this\npackage into `node_modules` — a fresh `npm install`, an `npm ci` (which always\nrebuilds the whole tree), or an `npm update` that bumps this package — warning on\ndrift and on missing conventions. A no-op `npm install` with an unchanged tree\ndoes not re-trigger it.\n\nEnforcement runs on a spectrum from soft to hard:\n\n- **Soft — install-time warnings (name-level).** On every `npm install` /\n  `npm update`, postinstall warns (non-fatal) when a required target\n  (`ci`, `update-all-format`) is missing, and prints a diff when a copied\n  pipeline or asset file has drifted from its canonical template. See\n  [Release Pipeline](#release-pipeline) for the per-file drift behavior and\n  [Conventions Every Project Must Adhere To](#conventions-every-project-must-adhere-to)\n  for the required targets.\n- **Hard — the fail-closed `ci` gate.** The release workflow runs `npm run ci`;\n  a repo without a working `ci` gate fails the build and cannot publish. This is\n  the only enforcement with real teeth — see\n  [The `ci` script](#the-ci-script).\n\nOne deliberate limitation: the soft checks are **name-level only**. They verify\na `ci` script _exists_, not that it runs anything meaningful — `\"ci\": \"echo ok\"`\nsatisfies the warning. Guaranteeing that `ci` actually does its job is left to\nthe fail-closed pipeline, where a broken gate surfaces as a red build. Put\ndifferently: delivery is \"deep\" (full config seeded) while continuous\nenforcement is \"shallow\" (presence, not behavior) — a gap worth knowing when you\nrely on it.\n\n## Release Pipeline\n\nOn install, the postinstall script copies the release pipeline files into your\nproject automatically. `auto-changeset.sh` reads the package name from your\n`package.json` at runtime, so renaming the package needs no pipeline edits.\n\nOn `npm update`, the behavior per file is:\n\n- **File absent** — copied into place\n- **File identical to canonical** — skipped silently\n- **File differs from canonical** — warning printed with a diff; local copy is\n  left untouched for manual review\n\nThis means local customisations are never silently overwritten, but you are\nnotified when your copy has drifted from the upstream version.\n\nThe release pipeline requires `NPM` and `CODEBERG_TOKEN` secrets in Woodpecker.\n\n## Conventions Every Project Must Adhere To\n\nEvery project that installs this package must implement two named entry points.\n`postinstall` warns whenever it re-runs (a fresh `npm install`, an `npm ci`, or\nan `npm update` that bumps this package) until each is in place.\n\n### The `ci` script\n\nEvery project must expose a `ci` script in `package.json`. The release workflow\ncalls `npm run ci` as its CI gate. A project without a `ci` script will fail\nthe CI job — the correct signal that the convention has not been met.\n\n`ci` is the single entry point for \"everything that must pass before a release\":\nformatting checks, tests, linting — whatever the project requires. What it\ncalls internally is up to the project:\n\n```json\n{\n  \"scripts\": { \"ci\": \"prettier --check src/ && vitest run && playwright test\" }\n}\n```\n\n`npm run ci` doubles as your local \"simulate CI\" command.\n\n**Invariant:** if `npm run ci` passes locally, and you commit and push, the\nremote CI job will pass.\n\n#### NX projects\n\n`package.json` is the source of truth — it is always present, and the release\nworkflow calls `npm run ci` directly. So an NX project keeps the **real** `ci`\ncommand in `package.json`, exactly like any other project — it does *not*\ndelegate package.json to NX. If you want NX orchestration, add NX targets that\ndelegate **to** npm, never the reverse:\n\n```json\n// package.json — the real command lives here\n{ \"scripts\": { \"ci\": \"npm run check-all-format && npm run test\" } }\n```\n\n```json\n// project.json (optional) — an NX target delegates to the npm script\n{\n  \"targets\": {\n    \"ci\": {\n      \"executor\": \"nx:run-commands\",\n      \"options\": { \"command\": \"npm run ci\" }\n    }\n  }\n}\n```\n\nThe release workflow is NX-agnostic — it calls `npm run ci`, never NX directly.\n\n### The `update-all-format` target\n\nEvery project must expose an `update-all-format` entry point — either a\n`package.json` script or an NX `project.json` target. This is the single\ncommand for \"reformat everything before reviewing a diff\": run it before\ncommitting to keep diffs clean and reviewable.\n\nThe plugin enforces the name only, not the content:\n\n```json\n{\n  \"scripts\": {\n    \"update-all-format\": \"prettier --write src/ && npm run update-markdown-docs\"\n  }\n}\n```\n\nOr as an NX target:\n\n```json\n{\n  \"targets\": {\n    \"update-all-format\": {\n      \"executor\": \"nx:run-commands\",\n      \"options\": { \"command\": \"prettier --write src/\" }\n    }\n  }\n}\n```\n\nIf neither is found, `postinstall` prints a warning (non-fatal) each time it\nre-runs (a fresh `npm install`, an `npm ci`, or an `npm update` that bumps this\npackage) until the target is added.\n\nNX projects may define the target in `project.json` instead of `package.json`\nscripts — the postinstall check recognises both. There is no shim requirement\nfor `update-all-format` (unlike `ci`), because no external tooling calls it\ndirectly.\n\n## Publishing\n\nReleases are automated via Changesets and Woodpecker CI. The full policy —\ncommit-prefix → bump mapping, forcing or suppressing a release, resolving\n`changeset status` errors, verifying a release, troubleshooting publish auth —\nis documented in [docs/RELEASE-PROCESS.md](docs/RELEASE-PROCESS.md). That\ndocument is the canonical release policy for every repo that installs this\npackage.\n\nQuick reference:\n\n**For a patch release** — push a `fix:` commit to `main`. The workflow handles\nthe rest.\n\n**For a minor or major release** — run `npx changeset` locally, choose the\nbump level at the prompt, commit the generated `.changeset/*.md` file, then\npush. The auto-generation step is skipped when a handwritten changeset is\npresent. For majors this is mandatory: a breaking-change commit (`feat!:` or\n`BREAKING CHANGE` in the body) with no handwritten changeset fails the\nrelease job until one is committed.\n\n**Manual publish (emergency):** trigger a Woodpecker pipeline on the `main` branch.\n\n## Team shell aliases\n\nInstalled by [Quick start](#quick-start) step 1 (or manually: add\n`source <clone-path>/assets/shell/aliases.sh` to your shell rc). They require\n`curl`, `CODEBERG_TOKEN`, and `node`/`npm`.\n\n| Alias | What it does |\n| --- | --- |\n| `mkrepo <name>` | Create a public repo in the `doikayt` org (guards against duplicates). |\n| `addpush [name]` | Wire up the current directory to an existing Codeberg repo (create it first with `mkrepo`) and push. Defaults `name` to the current directory. |\n| `dk-new` | `npm init -y` + `@doikayt` scope. |\n| `dk-init` | Scaffold the build config into the current project. |\n| `dk-scaffold <name>\\|. [lib\\|app] [--local] [-q]` | Create the repo, scaffold, and push — one command (defaults to app). Pass `.` to scaffold in the current directory, using its leaf name as `@doikayt/<package-name>`. `--local` skips the repo and push; `-q` hides the auto-answered-prompts note. |\n| `gp` | Pull with rebase, then push the current branch. The everyday git sync command — requires the branch to already track a remote. |\n| `gpu` | First push of a new local branch: sets it up to track `origin` and pushes (or just wires up tracking if `origin` already has a same-named branch). |\n| `trackify` | Set the upstream tracking branch for the current branch to the same-named branch on `origin`, without pushing. Fails if that remote branch doesn't exist yet. |\n| `tools-help` | Print every alias/function in `aliases.sh`, grouped, with a one-line summary parsed from each one's own doc comment — the full, always-current list (diff helpers, cleanup helpers, etc.) lives there instead of being duplicated in this table. |\n\n## For Maintainers\n\n### Clone and install\n\n```bash\ngit clone git@codeberg.org:doikayt/typescript-build-config.git\ncd typescript-build-config\nnpm install\n```\n\nThe postinstall script detects that it is running inside the plugin repo itself\nand exits immediately — no config stubs or pipeline files are copied.\n\n### Run the full CI suite\n\n```bash\nnpm run ci\n```\n\nThis is the same entry point mandated for every consumer repo. In this project\nit runs a Prettier format check followed by the full test suite:\n\n```\nnpm run ci  →  prettier --check src/  →  node --test\n```\n\nA passing `npm run ci` locally means the remote CI job will pass.\n\nTo auto-fix formatting before verifying:\n\n```bash\nnpm run update-all-format && npm run ci\n```\n\nTo verify end-to-end that `init` scaffolds and ships both a library and an app —\nby hand, with what to look for at each step — follow\n[docs/verification-runbook.md](docs/verification-runbook.md).\n\n## License\n\nMIT\n\n\n\n[![Remember the USS Liberty!](https://badge.techforpalestine.org/ceasefire-now)](https://techforpalestine.org/learn-more)\n","readmeFilename":"README.md"}