{"_id":"fast-brake","_rev":"8-72826fc328234deb587cc06c64c4eccb","name":"fast-brake","dist-tags":{"latest":"0.1.6"},"versions":{"0.0.1":{"name":"fast-brake","version":"0.0.1","keywords":["build","performance","caching","optimization","dependencies","build-tools","typescript","cli","es","ecmascript","feature-detection","compatibility","lint","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.0.1","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"4af207f6d998887378dd79437bd3d7e8a6d1664d","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.0.1.tgz","fileCount":7,"integrity":"sha512-oVUwU2pYrLTybOt27eJze7vR/pK/ZQ22Xx8cljno/mzmTJnerXkb+xWUEVtyiTaE3rngDVTrfXkYGJFiSuuP4Q==","signatures":[{"sig":"MEYCIQDisc8DCB1sMWJStleKTlFjnhWIwsLP1bhwiWjCiMpLHgIhAOnXSLXWl998JcVYtG1c1QtzOMBmzEmAurBBwStrbf9x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29395},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"36e485a3a8ea199d3147278f4c158adff7c88f07","scripts":{"dev":"bun run --cwd site dev","lint":"oxlint src test","test":"bun test src/*.test.ts test/index.test.ts --timeout 5000","build":"turbo run build-dist","commit":"git-cz","update":"codependence --update && bun run update-site-deps","prepare":"is-ci || husky install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun generator/generate-schema.ts","lint-fix":"oxlint src test --fix","lint-src":"oxlint src","test-e2e":"bun test test/e2e.test.ts --timeout 5000","test:e2e":"bun test test/e2e.test.ts --timeout 5000","benchmark":"bun test/benchmark.ts","typecheck":"turbo run typecheck-src","build-dist":"bun run clean-dist && tsup src/index.ts --format esm,cjs --dts --minify","clean-dist":"rimraf dist","commit-msg":"commitlint --edit $1","pre-commit":"lint-staged --quiet && bun run test","typecheck-src":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","update-site-deps":"cd site && bun update"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":["site"],"_npmVersion":"10.9.3","description":"Fast ES feature detection with zero runtime dependencies","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix"]},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsx":"^4.19.2","tsup":"8.5.0","vite":"7.0.6","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","eslint":"9.14.0","oxlint":"^1.11.2","rimraf":"6.0.1","prettier":"3.6.2","@eslint/js":"^9.13.0","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^0.3.1","stdouttojson":"1.0.0","@commitlint/cli":"19.8.1","path-exists-cli":"^2.0.0","typescript-eslint":"^8.12.2","@commitlint/format":"^19.5.0","@types/gradient-string":"^1.1.6","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.2.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.0.1_1755306460194_0.13048212874127874","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"fast-brake","version":"0.1.0","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.1.0","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"1e648b25b3160daa923860af85daed84d62a7c7f","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.0.tgz","fileCount":7,"integrity":"sha512-VgLB1zlPWot9nKWvMXBCjrlHBir7glUijvRFY3m9Qf8ecnpbJpZw+apX0mtEG6luy2wZclrp9q+4YmFcHYDmqQ==","signatures":[{"sig":"MEQCIGm/a1eX0O7bH8QrqK/o8DHD/E6ngoWaj5vFeRyBbKxJAiAXZ7n+st9hIYv7MIFWJ9M9or888Z5bAptmfmxwtI0Q0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95537},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"aa7c29bee58bb0fbb4ab210dad996254d5d64461","scripts":{"dev":"cd site && bun run dev","lint":"turbo run lint:run","test":"turbo run test:run","build":"turbo run build:pkg","clean":"rimraf dist","commit":"git-cz","update":"codependence --update && bun run update-site-deps","prepare":"is-ci || husky install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun utils/generator/src/generate-schema.ts","lint:fix":"oxlint src tests --fix","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","benchmark":"turbo run benchmark","build:pkg":"bun run clean && bun run build:run","build:run":"tsup src/index.ts --format esm,cjs --dts --minify","test:unit":"turbo run test:unit","typecheck":"turbo run typecheck","commit-msg":"commitlint --edit $1","pre-commit":"lint-staged --quiet && bun run test","test:watch":"bun test --watch tests/**/*.test.ts","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","typecheck:run":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"cd utils/benchmarker && bun run benchmark:all","test:integration":"turbo run test:integration","update-site-deps":"cd site && bun update","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":[".","site","utils/*"],"_npmVersion":"10.9.3","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix"],"tests/**/*.ts":["oxlint --fix"]},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsup":"8.5.0","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","oxlint":"^1.11.2","rimraf":"6.0.1","prettier":"3.6.2","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^0.3.1","@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.1.0_1755942944870_0.7031140186822062","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"fast-brake","version":"0.1.1","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.1.1","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"4270ac790b10d0594655808651fd3cdefb5a5b15","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.1.tgz","fileCount":7,"integrity":"sha512-alUdFuQR7XlFq6NnV/6SXAspmFTuo+al12hrcivjPzomdck2MUFJ5bRc+F3BL4UHtVKEHKpp6LD0AD+e0v0QvA==","signatures":[{"sig":"MEUCIQCLzqMu6z/p2kYIDJB71qrI024u2lQzTRVVN+FNXZ4+kwIgc/XQMAwdUf6fiNRI+KSYsKq8OYtnU8iWCOYafcY6e2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103638},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"33eb6c6ff38a41915513b132c916d95c7fa4cf75","scripts":{"dev":"cd site && bun run dev","lint":"turbo run lint:run","test":"turbo run test:run","build":"turbo run build:pkg","clean":"rimraf dist","commit":"git-cz","update":"codependence --update && bun install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun utils/generator/src/generate-schema.ts","lint:fix":"oxlint src tests --fix","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","benchmark":"turbo run benchmark","build:pkg":"bun run clean && bun run build:run","build:run":"tsup src/index.ts --format esm,cjs --dts --minify","test:unit":"turbo run test:unit","typecheck":"turbo run typecheck","commit-msg":"commitlint --edit $1","pre-commit":"lint-staged --quiet && bun run test","test:watch":"bun test --watch tests/**/*.test.ts","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","typecheck:run":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"cd utils/benchmarker && bun run benchmark:all","test:integration":"turbo run test:integration","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":[".","site","utils/*"],"_npmVersion":"11.5.1","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix","prettier --write"],"tests/**/*.ts":["oxlint --fix","prettier --write"]},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsup":"8.5.0","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","oxlint":"^1.12.0","rimraf":"6.0.1","prettier":"3.6.2","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^1.0.0-1","@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.1.1_1756076092315_0.825969663266382","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"fast-brake","version":"0.1.2","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.1.2","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"be1c6507c22a93733c8c2b864cf85991eb225a87","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.2.tgz","fileCount":61,"integrity":"sha512-tCEw9340TLIQ/xI3RzhFbKnikl0DVA5Eb2AJq5+osOpHI2QRX2riGWI5b4H/bykvWsrpj/Of/T/n+dvONB1rOg==","signatures":[{"sig":"MEUCIAnQWgHEL+4YxLRtInGKBlHyzSTrJC75B8CoHz+jOqWbAiEA9t3fKmcCAowmwVWMvVdPSkqzUs/7FFyK5jWkp1JUYRs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126480},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./plugins/all":{"types":"./dist/plugins/all/index.d.ts","import":"./dist/plugins/all/index.js","require":"./dist/plugins/all/index.cjs"},"./extensions/loc":{"types":"./dist/extensions/loc.d.ts","import":"./dist/extensions/loc.js","require":"./dist/extensions/loc.cjs"},"./plugins/detect":{"types":"./dist/plugins/detect/index.d.ts","import":"./dist/plugins/detect/index.js","require":"./dist/plugins/detect/index.cjs"},"./plugins/es2015":{"types":"./dist/plugins/es2015/index.d.ts","import":"./dist/plugins/es2015/index.js","require":"./dist/plugins/es2015/index.cjs"},"./plugins/es2016":{"types":"./dist/plugins/es2016/index.d.ts","import":"./dist/plugins/es2016/index.js","require":"./dist/plugins/es2016/index.cjs"},"./plugins/es2017":{"types":"./dist/plugins/es2017/index.d.ts","import":"./dist/plugins/es2017/index.js","require":"./dist/plugins/es2017/index.cjs"},"./plugins/es2018":{"types":"./dist/plugins/es2018/index.d.ts","import":"./dist/plugins/es2018/index.js","require":"./dist/plugins/es2018/index.cjs"},"./plugins/es2019":{"types":"./dist/plugins/es2019/index.d.ts","import":"./dist/plugins/es2019/index.js","require":"./dist/plugins/es2019/index.cjs"},"./plugins/es2020":{"types":"./dist/plugins/es2020/index.d.ts","import":"./dist/plugins/es2020/index.js","require":"./dist/plugins/es2020/index.cjs"},"./plugins/es2021":{"types":"./dist/plugins/es2021/index.d.ts","import":"./dist/plugins/es2021/index.js","require":"./dist/plugins/es2021/index.cjs"},"./plugins/es2022":{"types":"./dist/plugins/es2022/index.d.ts","import":"./dist/plugins/es2022/index.js","require":"./dist/plugins/es2022/index.cjs"},"./plugins/es2023":{"types":"./dist/plugins/es2023/index.d.ts","import":"./dist/plugins/es2023/index.js","require":"./dist/plugins/es2023/index.cjs"},"./plugins/es2024":{"types":"./dist/plugins/es2024/index.d.ts","import":"./dist/plugins/es2024/index.js","require":"./dist/plugins/es2024/index.cjs"},"./plugins/es2025":{"types":"./dist/plugins/es2025/index.d.ts","import":"./dist/plugins/es2025/index.js","require":"./dist/plugins/es2025/index.cjs"},"./plugins/esversion":{"types":"./dist/plugins/esversion/index.d.ts","import":"./dist/plugins/esversion/index.js","require":"./dist/plugins/esversion/index.cjs"},"./plugins/telemetry":{"types":"./dist/plugins/telemetry/index.d.ts","import":"./dist/plugins/telemetry/index.js","require":"./dist/plugins/telemetry/index.cjs"},"./plugins/browserlist":{"types":"./dist/plugins/browserlist/index.d.ts","import":"./dist/plugins/browserlist/index.js","require":"./dist/plugins/browserlist/index.cjs"}},"gitHead":"9e2df1bbaabe4802bda879eef9308700602c5b28","scripts":{"dev":"cd site && bun run dev","lint":"turbo run lint:run","test":"turbo run test:run","build":"turbo run build:pkg","clean":"rimraf dist","commit":"git-cz","format":"turbo run format:run","update":"codependence --update && bun install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun utils/generator/src/generate-schema.ts","lint:fix":"oxlint src tests --fix","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","benchmark":"bun run --cwd utils/benchmarker src/benchmark.ts","build:pkg":"bun run clean && bun run build:run","build:run":"tsup","test:unit":"turbo run test:unit","typecheck":"turbo run typecheck:run","commit-msg":"commitlint --edit $1","format:run":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"","pre-commit":"lint-staged --quiet && bun run test","test:watch":"bun test --watch tests/**/*.test.ts","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","typecheck:run":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"bun run --cwd utils/benchmarker update-docs","test:integration":"turbo run test:integration","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":[".","site","utils/*"],"_npmVersion":"10.9.3","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix","prettier --write"],"tests/**/*.ts":["oxlint --fix","prettier --write"]},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsup":"8.5.0","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","oxlint":"^1.12.0","rimraf":"6.0.1","prettier":"3.6.2","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^1.0.0-1","@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.1.2_1758500896375_0.1542093627762866","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"fast-brake","version":"0.1.3","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.1.3","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"d420f762bd24fd3466fd85ec9a7be965a860b1c7","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.3.tgz","fileCount":125,"integrity":"sha512-sclOOF9eX7tGFtJ0SeTTDoKGaF5cSN9zwl1HITH6GRFGyRKbOekqVARumV/DL2aNNY4RwEiJyibtRj/9jOYTwA==","signatures":[{"sig":"MEQCIEixklLaLwuZJpOp/QX69Qf2Mh8JsEmqLP29VDLD4nS0AiBpsWVfOlyleSg2tg0p8tptiq9pQPeT4/i86IMUOovqpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189802},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./plugins/all":{"types":"./dist/plugins/all/index.d.ts","import":"./dist/plugins/all/index.js","require":"./dist/plugins/all/index.cjs"},"./extensions/loc":{"types":"./dist/extensions/loc.d.ts","import":"./dist/extensions/loc.js","require":"./dist/extensions/loc.cjs"},"./plugins/detect":{"types":"./dist/plugins/detect/index.d.ts","import":"./dist/plugins/detect/index.js","require":"./dist/plugins/detect/index.cjs"},"./plugins/es2015":{"types":"./dist/plugins/es2015/index.d.ts","import":"./dist/plugins/es2015/index.js","require":"./dist/plugins/es2015/index.cjs"},"./plugins/es2016":{"types":"./dist/plugins/es2016/index.d.ts","import":"./dist/plugins/es2016/index.js","require":"./dist/plugins/es2016/index.cjs"},"./plugins/es2017":{"types":"./dist/plugins/es2017/index.d.ts","import":"./dist/plugins/es2017/index.js","require":"./dist/plugins/es2017/index.cjs"},"./plugins/es2018":{"types":"./dist/plugins/es2018/index.d.ts","import":"./dist/plugins/es2018/index.js","require":"./dist/plugins/es2018/index.cjs"},"./plugins/es2019":{"types":"./dist/plugins/es2019/index.d.ts","import":"./dist/plugins/es2019/index.js","require":"./dist/plugins/es2019/index.cjs"},"./plugins/es2020":{"types":"./dist/plugins/es2020/index.d.ts","import":"./dist/plugins/es2020/index.js","require":"./dist/plugins/es2020/index.cjs"},"./plugins/es2021":{"types":"./dist/plugins/es2021/index.d.ts","import":"./dist/plugins/es2021/index.js","require":"./dist/plugins/es2021/index.cjs"},"./plugins/es2022":{"types":"./dist/plugins/es2022/index.d.ts","import":"./dist/plugins/es2022/index.js","require":"./dist/plugins/es2022/index.cjs"},"./plugins/es2023":{"types":"./dist/plugins/es2023/index.d.ts","import":"./dist/plugins/es2023/index.js","require":"./dist/plugins/es2023/index.cjs"},"./plugins/es2024":{"types":"./dist/plugins/es2024/index.d.ts","import":"./dist/plugins/es2024/index.js","require":"./dist/plugins/es2024/index.cjs"},"./plugins/es2025":{"types":"./dist/plugins/es2025/index.d.ts","import":"./dist/plugins/es2025/index.js","require":"./dist/plugins/es2025/index.cjs"},"./plugins/esversion":{"types":"./dist/plugins/esversion/index.d.ts","import":"./dist/plugins/esversion/index.js","require":"./dist/plugins/esversion/index.cjs"},"./plugins/telemetry":{"types":"./dist/plugins/telemetry/index.d.ts","import":"./dist/plugins/telemetry/index.js","require":"./dist/plugins/telemetry/index.cjs"},"./plugins/browserlist":{"types":"./dist/plugins/browserlist/index.d.ts","import":"./dist/plugins/browserlist/index.js","require":"./dist/plugins/browserlist/index.cjs"}},"gitHead":"68c3774ac3209e826e18fb400eeeac5b1c7c55e1","scripts":{"dev":"cd site && bun run dev","lint":"turbo run lint:run","test":"turbo run test:run","build":"turbo run build:pkg","clean":"rimraf dist","commit":"git-cz","format":"turbo run format:run","update":"codependence --update && bun install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun utils/generator/src/generate-schema.ts","lint:fix":"oxlint src tests --fix","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","benchmark":"bun run --cwd utils/benchmarker src/benchmark.ts","build:pkg":"bun run clean && bun run build:run","build:run":"tsup","test:unit":"turbo run test:unit","typecheck":"turbo run typecheck:run","commit-msg":"commitlint --edit $1","format:run":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"","pre-commit":"lint-staged --quiet && bun run test","test:watch":"bun test --watch tests/**/*.test.ts","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","typecheck:run":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"bun run --cwd utils/benchmarker update-docs","test:integration":"turbo run test:integration","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":[".","site","utils/*"],"_npmVersion":"10.9.3","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix","prettier --write"],"tests/**/*.ts":["oxlint --fix","prettier --write"]},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsup":"8.5.0","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","oxlint":"^1.12.0","rimraf":"6.0.1","prettier":"3.6.2","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^1.0.0-1","@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.1.3_1759220679329_0.0866738386797834","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"fast-brake","version":"0.1.4","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.1.4","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"a31c2cd79dc506cd51429ffe6e3958e46a562c8e","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.4.tgz","fileCount":125,"integrity":"sha512-zSYvVnZRCSPZ1QKDFmAqC8PkCQ55bmLkk4cI8bk7BJ4WkvclsvcS+etuVPuQpNX88yMR2L0cFWC4mlW//doO9Q==","signatures":[{"sig":"MEUCIAKMIOdBowQz/Nr5Dy7O3vXDEsBFWzf6a+lGPXzLWjGiAiEAxHS7z04daYFe5lWWWNlrwM4DY0EzbCHEs503ivprzok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190290},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./plugins/all":{"types":"./dist/plugins/all/index.d.ts","import":"./dist/plugins/all/index.js","require":"./dist/plugins/all/index.cjs"},"./extensions/loc":{"types":"./dist/extensions/loc.d.ts","import":"./dist/extensions/loc.js","require":"./dist/extensions/loc.cjs"},"./plugins/detect":{"types":"./dist/plugins/detect/index.d.ts","import":"./dist/plugins/detect/index.js","require":"./dist/plugins/detect/index.cjs"},"./plugins/es2015":{"types":"./dist/plugins/es2015/index.d.ts","import":"./dist/plugins/es2015/index.js","require":"./dist/plugins/es2015/index.cjs"},"./plugins/es2016":{"types":"./dist/plugins/es2016/index.d.ts","import":"./dist/plugins/es2016/index.js","require":"./dist/plugins/es2016/index.cjs"},"./plugins/es2017":{"types":"./dist/plugins/es2017/index.d.ts","import":"./dist/plugins/es2017/index.js","require":"./dist/plugins/es2017/index.cjs"},"./plugins/es2018":{"types":"./dist/plugins/es2018/index.d.ts","import":"./dist/plugins/es2018/index.js","require":"./dist/plugins/es2018/index.cjs"},"./plugins/es2019":{"types":"./dist/plugins/es2019/index.d.ts","import":"./dist/plugins/es2019/index.js","require":"./dist/plugins/es2019/index.cjs"},"./plugins/es2020":{"types":"./dist/plugins/es2020/index.d.ts","import":"./dist/plugins/es2020/index.js","require":"./dist/plugins/es2020/index.cjs"},"./plugins/es2021":{"types":"./dist/plugins/es2021/index.d.ts","import":"./dist/plugins/es2021/index.js","require":"./dist/plugins/es2021/index.cjs"},"./plugins/es2022":{"types":"./dist/plugins/es2022/index.d.ts","import":"./dist/plugins/es2022/index.js","require":"./dist/plugins/es2022/index.cjs"},"./plugins/es2023":{"types":"./dist/plugins/es2023/index.d.ts","import":"./dist/plugins/es2023/index.js","require":"./dist/plugins/es2023/index.cjs"},"./plugins/es2024":{"types":"./dist/plugins/es2024/index.d.ts","import":"./dist/plugins/es2024/index.js","require":"./dist/plugins/es2024/index.cjs"},"./plugins/es2025":{"types":"./dist/plugins/es2025/index.d.ts","import":"./dist/plugins/es2025/index.js","require":"./dist/plugins/es2025/index.cjs"},"./plugins/esversion":{"types":"./dist/plugins/esversion/index.d.ts","import":"./dist/plugins/esversion/index.js","require":"./dist/plugins/esversion/index.cjs"},"./plugins/telemetry":{"types":"./dist/plugins/telemetry/index.d.ts","import":"./dist/plugins/telemetry/index.js","require":"./dist/plugins/telemetry/index.cjs"},"./plugins/browserlist":{"types":"./dist/plugins/browserlist/index.d.ts","import":"./dist/plugins/browserlist/index.js","require":"./dist/plugins/browserlist/index.cjs"}},"gitHead":"3658c9f9e5a3f484894f3d962ceb723f641bf48d","scripts":{"dev":"cd site && bun run dev","lint":"turbo run lint:run","test":"turbo run test:run","build":"turbo run build:pkg","clean":"rimraf dist","commit":"git-cz","format":"turbo run format:run","update":"codependence --update && bun install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun utils/generator/src/generate-schema.ts","lint:fix":"oxlint src tests --fix","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","benchmark":"bun run --cwd utils/benchmarker src/benchmark.ts","build:pkg":"bun run clean && bun run build:run","build:run":"tsup","test:unit":"turbo run test:unit","typecheck":"turbo run typecheck:run","commit-msg":"commitlint --edit $1","format:run":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"","pre-commit":"lint-staged --quiet && bun run test","test:watch":"bun test --watch tests/**/*.test.ts","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","typecheck:run":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"bun run --cwd utils/benchmarker update-docs","test:integration":"turbo run test:integration","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":[".","site","utils/*"],"_npmVersion":"10.9.3","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix","prettier --write"],"tests/**/*.ts":["oxlint --fix","prettier --write"]},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsup":"8.5.0","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","oxlint":"^1.12.0","rimraf":"6.0.1","prettier":"3.6.2","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^1.0.0-1","@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.1.4_1759222983384_0.5129750199179002","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"fast-brake","version":"0.1.5","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"url":"yowainwright@gmail.com","name":"Jeff Wainwright","email":"https:jeffry.in"},"license":"MIT","_id":"fast-brake@0.1.5","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"homepage":"https://jeffry.in/fast-brake/","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"dist":{"shasum":"3e62aab4bad1251f0d932bcc962b7e4f5d456f14","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.5.tgz","fileCount":125,"integrity":"sha512-Ej9eUiTlfv6S8hS6XKT4sYi4P46FkwM8wttGTbL4iFrIczlEQDJb/BxIIpigMBh/z18fVu9SSkZLDjtUcwhCMA==","signatures":[{"sig":"MEYCIQDRzMXPUhPz/efGME4X/nUZ28L0MKO2kLgcsR5TB8QOowIhANHterNHeGFJ+Qn1Vq8zT1wcyTFxgG7wuU/otXIVcKT2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191496},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./plugins/all":{"types":"./dist/plugins/all/index.d.ts","import":"./dist/plugins/all/index.js","require":"./dist/plugins/all/index.cjs"},"./extensions/loc":{"types":"./dist/extensions/loc.d.ts","import":"./dist/extensions/loc.js","require":"./dist/extensions/loc.cjs"},"./plugins/detect":{"types":"./dist/plugins/detect/index.d.ts","import":"./dist/plugins/detect/index.js","require":"./dist/plugins/detect/index.cjs"},"./plugins/es2015":{"types":"./dist/plugins/es2015/index.d.ts","import":"./dist/plugins/es2015/index.js","require":"./dist/plugins/es2015/index.cjs"},"./plugins/es2016":{"types":"./dist/plugins/es2016/index.d.ts","import":"./dist/plugins/es2016/index.js","require":"./dist/plugins/es2016/index.cjs"},"./plugins/es2017":{"types":"./dist/plugins/es2017/index.d.ts","import":"./dist/plugins/es2017/index.js","require":"./dist/plugins/es2017/index.cjs"},"./plugins/es2018":{"types":"./dist/plugins/es2018/index.d.ts","import":"./dist/plugins/es2018/index.js","require":"./dist/plugins/es2018/index.cjs"},"./plugins/es2019":{"types":"./dist/plugins/es2019/index.d.ts","import":"./dist/plugins/es2019/index.js","require":"./dist/plugins/es2019/index.cjs"},"./plugins/es2020":{"types":"./dist/plugins/es2020/index.d.ts","import":"./dist/plugins/es2020/index.js","require":"./dist/plugins/es2020/index.cjs"},"./plugins/es2021":{"types":"./dist/plugins/es2021/index.d.ts","import":"./dist/plugins/es2021/index.js","require":"./dist/plugins/es2021/index.cjs"},"./plugins/es2022":{"types":"./dist/plugins/es2022/index.d.ts","import":"./dist/plugins/es2022/index.js","require":"./dist/plugins/es2022/index.cjs"},"./plugins/es2023":{"types":"./dist/plugins/es2023/index.d.ts","import":"./dist/plugins/es2023/index.js","require":"./dist/plugins/es2023/index.cjs"},"./plugins/es2024":{"types":"./dist/plugins/es2024/index.d.ts","import":"./dist/plugins/es2024/index.js","require":"./dist/plugins/es2024/index.cjs"},"./plugins/es2025":{"types":"./dist/plugins/es2025/index.d.ts","import":"./dist/plugins/es2025/index.js","require":"./dist/plugins/es2025/index.cjs"},"./plugins/esversion":{"types":"./dist/plugins/esversion/index.d.ts","import":"./dist/plugins/esversion/index.js","require":"./dist/plugins/esversion/index.cjs"},"./plugins/telemetry":{"types":"./dist/plugins/telemetry/index.d.ts","import":"./dist/plugins/telemetry/index.js","require":"./dist/plugins/telemetry/index.cjs"},"./plugins/browserlist":{"types":"./dist/plugins/browserlist/index.d.ts","import":"./dist/plugins/browserlist/index.js","require":"./dist/plugins/browserlist/index.cjs"}},"gitHead":"11f22e159eb215e80b22f8c4db092f3446488adc","scripts":{"dev":"cd site && bun run dev","lint":"turbo run lint:run","test":"turbo run test:run","build":"turbo run build:pkg","clean":"rimraf dist","commit":"git-cz","format":"turbo run format:run","update":"codependence --update && bun install","preview":"bun run --cwd site preview","release":"release-it","generate":"bun utils/generator/src/generate-schema.ts","lint:fix":"oxlint src tests --fix","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","benchmark":"bun run --cwd utils/benchmarker src/benchmark.ts","build:pkg":"bun run clean && bun run build:run","build:run":"tsup","test:unit":"turbo run test:unit","typecheck":"turbo run typecheck:run","commit-msg":"commitlint --edit $1","format:run":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"","pre-commit":"lint-staged --quiet && bun run test","test:watch":"bun test --watch tests/**/*.test.ts","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","typecheck:run":"tsc --noEmit","prepublishOnly":"bun run test && bun run build","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"bun run --cwd utils/benchmarker update-docs","test:integration":"turbo run test:integration","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000"},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release"}},"repository":{"url":"git+https://github.com/yowainwright/fast-brake.git","type":"git"},"workspaces":[".","site","utils/*"],"_npmVersion":"10.9.3","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","directories":{},"lint-staged":{"src/**/*.ts":["oxlint --fix","prettier --write"],"tests/**/*.ts":["oxlint --fix","prettier --write"]},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"packageManager":"bun@1.1.38","devDependencies":{"tsup":"8.5.0","husky":"9.1.7","is-ci":"^4.1.0","tslib":"2.8.1","turbo":"2.5.5","oxlint":"^1.12.0","rimraf":"6.0.1","prettier":"3.6.2","release-it":"19.0.4","typescript":"5.8.3","@types/node":"24.1.0","lint-staged":"16.1.2","codependence":"^1.0.0-1","@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1"},"_npmOperationalInternal":{"tmp":"tmp/fast-brake_0.1.5_1759249852330_0.2061151741423748","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"fast-brake","version":"0.1.6","description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","main":"dist/index.cjs","module":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./sync":{"types":"./dist/sync.d.ts","import":"./dist/sync.js","require":"./dist/sync.cjs"},"./plugins/es2015":{"types":"./dist/plugins/es2015/index.d.ts","import":"./dist/plugins/es2015/index.js","require":"./dist/plugins/es2015/index.cjs"},"./plugins/es2016":{"types":"./dist/plugins/es2016/index.d.ts","import":"./dist/plugins/es2016/index.js","require":"./dist/plugins/es2016/index.cjs"},"./plugins/es2017":{"types":"./dist/plugins/es2017/index.d.ts","import":"./dist/plugins/es2017/index.js","require":"./dist/plugins/es2017/index.cjs"},"./plugins/es2018":{"types":"./dist/plugins/es2018/index.d.ts","import":"./dist/plugins/es2018/index.js","require":"./dist/plugins/es2018/index.cjs"},"./plugins/es2019":{"types":"./dist/plugins/es2019/index.d.ts","import":"./dist/plugins/es2019/index.js","require":"./dist/plugins/es2019/index.cjs"},"./plugins/es2020":{"types":"./dist/plugins/es2020/index.d.ts","import":"./dist/plugins/es2020/index.js","require":"./dist/plugins/es2020/index.cjs"},"./plugins/es2021":{"types":"./dist/plugins/es2021/index.d.ts","import":"./dist/plugins/es2021/index.js","require":"./dist/plugins/es2021/index.cjs"},"./plugins/es2022":{"types":"./dist/plugins/es2022/index.d.ts","import":"./dist/plugins/es2022/index.js","require":"./dist/plugins/es2022/index.cjs"},"./plugins/es2023":{"types":"./dist/plugins/es2023/index.d.ts","import":"./dist/plugins/es2023/index.js","require":"./dist/plugins/es2023/index.cjs"},"./plugins/es2024":{"types":"./dist/plugins/es2024/index.d.ts","import":"./dist/plugins/es2024/index.js","require":"./dist/plugins/es2024/index.cjs"},"./plugins/es2025":{"types":"./dist/plugins/es2025/index.d.ts","import":"./dist/plugins/es2025/index.js","require":"./dist/plugins/es2025/index.cjs"},"./plugins/detect":{"types":"./dist/plugins/detect/index.d.ts","import":"./dist/plugins/detect/index.js","require":"./dist/plugins/detect/index.cjs"},"./plugins/all":{"types":"./dist/plugins/all/index.d.ts","import":"./dist/plugins/all/index.js","require":"./dist/plugins/all/index.cjs"},"./plugins/telemetry":{"types":"./dist/plugins/telemetry/index.d.ts","import":"./dist/plugins/telemetry/index.js","require":"./dist/plugins/telemetry/index.cjs"},"./plugins/browserlist":{"types":"./dist/plugins/browserlist/index.d.ts","import":"./dist/plugins/browserlist/index.js","require":"./dist/plugins/browserlist/index.cjs"},"./plugins/esversion":{"types":"./dist/plugins/esversion/index.d.ts","import":"./dist/plugins/esversion/index.js","require":"./dist/plugins/esversion/index.cjs"},"./extensions/loc":{"types":"./dist/extensions/loc.d.ts","import":"./dist/extensions/loc.js","require":"./dist/extensions/loc.cjs"}},"scripts":{"generate":"bun utils/generator/src/generate-schema.ts","build":"turbo run build:pkg","build:pkg":"bun run clean && bun run build:run","build:run":"tsup","clean":"rimraf dist","commit":"git-cz","commit-msg":"commitlint --edit $1","dev":"cd site && bun run dev","lint":"turbo run lint:run","lint:run":"oxlint src tests --ignore-pattern='tests/fixtures/*'","lint:fix":"oxlint src tests --fix","format":"turbo run format:run","format:run":"prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"","format:check":"prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"","pre-commit":"lint-staged --quiet && bun run test","prepublishOnly":"bun run test && bun run build","preview":"bun run --cwd site preview","release":"release-it","test":"turbo run test:run","test:run":"bun test tests/unit tests/integration/integration.test.ts --timeout 5000","test:all":"bun test tests/**/*.test.ts --timeout 5000","test:unit":"turbo run test:unit","test:unit:run":"bun test tests/unit/*.test.ts --timeout 5000","test:integration":"turbo run test:integration","test:integration:run":"bun test tests/integration/integration.test.ts --timeout 5000","test:watch":"bun test --watch tests/**/*.test.ts","benchmark":"bun run --cwd utils/benchmarker src/benchmark.ts","benchmark:run":"bun utils/benchmarker/src/benchmark.ts","benchmark:quick":"bun tests/integration/benchmarks.ts --quick","benchmark:update":"bun run --cwd utils/benchmarker update-docs","typecheck":"turbo run typecheck:run","typecheck:run":"tsc --noEmit","update":"codependence --update && bun install"},"repository":{"type":"git","url":"git+https://github.com/yowainwright/fast-brake.git"},"keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"author":{"name":"Jeff Wainwright","email":"https:jeffry.in","url":"yowainwright@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"homepage":"https://jeffry.in/fast-brake/","workspaces":[".","site","utils/*"],"devDependencies":{"@commitlint/cli":"19.8.1","@commitlint/config-conventional":"19.8.1","@types/node":"24.1.0","codependence":"^1.0.0-1","husky":"9.1.7","is-ci":"^4.1.0","lint-staged":"16.1.2","oxlint":"^1.12.0","prettier":"3.6.2","release-it":"19.0.4","rimraf":"6.0.1","tslib":"2.8.1","tsup":"8.5.0","turbo":"2.5.5","typescript":"5.8.3"},"commitlint":{"extends":["@commitlint/config-conventional"]},"lint-staged":{"src/**/*.ts":["oxlint --fix","prettier --write"],"tests/**/*.ts":["oxlint --fix","prettier --write"]},"release-it":{"git":{"commitMessage":"chore: release"}},"packageManager":"bun@1.1.38","_id":"fast-brake@0.1.6","gitHead":"caa392d5bd59f7f969345e5acc0cf2988eba2966","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-V3j0HTIs70OOxRpbqT0bWVdrmP86s6N8TBPw/WyKJqdJ2Fwh3CuMmlO83uIIDpqik6m1Io9fT6qwNn69EqvXYA==","shasum":"9776e16ccd528a8bcf445b48b4b38f8fc522ae20","tarball":"https://registry.npmjs.org/fast-brake/-/fast-brake-0.1.6.tgz","fileCount":125,"unpackedSize":191973,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCZ3fej/F/lpUJjRdY3h+0s3gnXjfIjCWv3IYDx5Il3lAIhAKSA7mViSgA998zwUHmrY0xTn3szYB/n7zS+B03KOlCL"}]},"_npmUser":{"name":"yowainwright","email":"yowainwright@gmail.com"},"directories":{},"maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fast-brake_0.1.6_1759254729491_0.9892389598589482"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-16T01:07:40.192Z","modified":"2025-09-30T17:52:09.890Z","0.0.1":"2025-08-16T01:07:40.373Z","0.1.0":"2025-08-23T09:55:45.041Z","0.1.1":"2025-08-24T22:54:52.511Z","0.1.2":"2025-09-22T00:28:16.563Z","0.1.3":"2025-09-30T08:24:39.526Z","0.1.4":"2025-09-30T09:03:03.602Z","0.1.5":"2025-09-30T16:30:52.510Z","0.1.6":"2025-09-30T17:52:09.667Z"},"bugs":{"url":"https://github.com/yowainwright/fast-brake/issues"},"author":{"name":"Jeff Wainwright","email":"https:jeffry.in","url":"yowainwright@gmail.com"},"license":"MIT","homepage":"https://jeffry.in/fast-brake/","keywords":["es","ecmascript","feature-detection","compatibility","javascript","typescript","ast","parser","tokenizer","babel","transpiler","build-tools","webpack","rollup","vite","eslint","performance","fast","zero-dependencies","es5","es6","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","arrow-functions","template-literals","async-await","optional-chaining","nullish-coalescing","private-fields","static-blocks","bigint","classes","destructuring","spread-operator","for-of","generators","promises","modules","import","export"],"repository":{"type":"git","url":"git+https://github.com/yowainwright/fast-brake.git"},"description":"fast js feature detection with zero runtime dependencies; analyzes js to verify compatibility","maintainers":[{"name":"yowainwright","email":"yowainwright@gmail.com"}],"readme":"# Fast Brake\n\n**Fast braking match detection!** Fast brake enables a plugins and extension based schema to detect matches using JavaScript very fast. This is useful for detecting ECMAscript api features, Telemetry or other spec pattern matches you'd like to spec with a focus on speed.\n\n## Installation\n\n```bash\nbun install fast-brake\n```\n\n## Quick Start\n\n```javascript\nimport { fastBrakeSync, fastBrake, check } from \"fast-brake\";\n\n// Fastest: sync check compatibility (no async overhead)\nconst fbSync = fastBrakeSync();\nconst isES5Compatible = fbSync.check(\"const x = () => {}\", { target: \"es5\" });\nconsole.log(isES5Compatible); // false - arrow functions are ES6+\n\n// Async check (when you need async workflow)\nconst isCompatible = await check(\"const x = () => {}\", { target: \"es5\" });\n\n// Detect features (returns array of detected features)\nconst features = await fastBrake(\"const x = () => {}\");\nconsole.log(features);\n// [{ name: 'arrow_functions', version: 'es2015' }]\n\n// Factory pattern with plugins and extensions\nimport { es2015Plugin } from \"fast-brake/plugins/es2015\";\nimport { locExtension } from \"fast-brake/extensions/loc\";\n\n// Sync version (fastest for repeated operations)\nconst fbSync = fastBrakeSync({\n  plugins: [es2015Plugin],\n  extensions: [locExtension]\n});\nconst syncIsCompatible = fbSync.check(\"const x = () => {}\", { target: \"es5\" });\nconst syncFeatures = fbSync.detect(\"const x = () => {}\");\n\n// Async version (when async is needed)\nconst fb = await fastBrake({\n  plugins: [es2015Plugin],\n  extensions: [locExtension]\n});\nconst asyncIsCompatible = await fb.check(\"const x = () => {}\", { target: \"es5\" });\nconst asyncFeatures = await fb.detect(\"const x = () => {}\");\n```\n\n## Why Fast Brake?\n\nOther tools, like the parsers that inspired this utility provide a full AST to process files. They're incredibe! **Fast Brake** is optimized to a different pattern. To detect or find patterns based on matches very fast. Fast Brake is built with auto ES version detection, automatically determining the minimum required ES version for your code.\n\nThis is nice for:\n\n- **Build tools** - Validate code compatibility before bundling\n- **Linters** - Check ES version or Telemetry compliance in CI/CD\n- **Transpilers** - Determine which features need polyfilling\n- **Code analysis** - Understand your codebase's ES requirements\n\n## Features\n\n- **Fast** - Process files faster for match a spec faster than full AST parsing (in JavaScript at lest)\n- **Zero Runtime Dependencies** - Lightweight and secure\n- **Pattern Matching** - Optimized string, regex-based detection\n- **ES5 to ES2025** - Comprehensive feature coverage (40+ features)\n- **Programmatic API** - Simple, intuitive interface\n- **Performance First** - Optimized for speed\n- **Plugin enabled** - Mix and match plugins with a basic api\n- **Simple interface** - Clean and straightforward API\n\n## Why this was made?\n\nPre-2025, detecting issues that can cause es issues fast in bundles, dependencies is a necessity for CI/CD. In 2025, with Telemetry, Privacy Policies, and AI, it's important to know what you have going on in your files. This is why fast-brake was built!\n\nInitially, I was inspired by [acorn.js](), then [meriyah]() (amazing tools). I submitted a pull request so I could implement plugins using meriyah. [name]() provided inside into another direction which led me to making fast-brake—which is built on a very simple api to enable an architecture based on failing fast.\n\n## Pattern-Based Detection\n\nfast-brake uses **optimized pattern matching** for maximum speed:\n\n- **String matching where possible** - match strings before pattern matching\n- **High-performance regex patterns** - patterns for each item, such as an ES feature; with string detection before to detect if the pattern matching is even required\n- **Single-pass scanning** - Processes code once for all features\n- **Early exit optimization** - Stops on first incompatible feature when configured\n- **Minimal overhead** - No AST or tokenization\n\n```javascript\n// Detect all ES features in code\nconst features = detect(code);\n\n// Stop on first incompatible feature (fastest)\nfastBrake(code, { target: \"es5\", throwOnFirst: true });\n```\n\n## API Reference\n\n### `fastBrake(code)` or `fastBrake(options)`\n\nCan be used in two ways:\n1. **Direct detection:** Pass code string to detect features using default settings\n2. **Factory pattern:** Pass options to create an instance with custom plugins/extensions\n\n```javascript\nimport { fastBrake } from \"fast-brake\";\n\n// Direct detection (async)\nconst features = await fastBrake(\"const x = () => {}\");\n// [{ name: 'arrow_functions', version: 'es2015' }]\n\n// Factory pattern (async)\nconst fb = await fastBrake({\n  plugins: [es2015Plugin],\n  extensions: [locExtension]\n});\nconst features = await fb.detect(\"const x = () => {}\");\nconst isCompatible = await fb.check(\"const x = () => {}\", { target: \"es5\" });\n```\n\n**Parameters:**\n\n- When called with `code` (string): Code to analyze\n- When called with `options` (FastBrakeOptions):\n  - `plugins` (Plugin[]): Array of plugins to use\n  - `extensions` (Extension[]): Array of extensions to use\n\n**Returns:** \n- With code: `Promise<DetectedFeature[]>`\n- With options: `Promise<FastBrakeAPI>` with `detect()` and `check()` methods\n\n### `detect(code, options?)`\n\nReturns an array of detected features. This is an async function.\n\n```javascript\nimport { detect } from \"fast-brake\";\n\nconst features = await detect(`\n  const arrow = () => {};\n  const template = \\`Hello \\${name}\\`;\n`);\n\nconsole.log(features);\n// [{ name: 'arrow_functions', version: 'es2015' }]\n\n// With plugins\nconst features = await detect(code, {\n  plugins: [esAll, telemetryPlugin],\n});\n```\n\n**Parameters:**\n\n- `code` (string): Code to analyze\n- `options` (optional):\n  - `plugins` (Plugin[]): Array of plugins to use for detection\n\n**Returns:** `Promise<DetectedFeature[]>`\n\n```typescript\ninterface DetectedFeature {\n  name: string; // Feature name (e.g., 'arrow_functions')\n  version: string; // Required ES version (e.g., 'es2015')\n  line?: number; // Line number where feature was found\n  column?: number; // Column number where feature was found\n  snippet?: string; // Code snippet containing the feature\n}\n```\n\n### `check(code, options)`\n\nReturns a boolean indicating if code is compatible with the target version. This is an async function.\n\n```javascript\nimport { check } from \"fast-brake\";\n\nconst isES5Compatible = await check(\"var x = 10;\", { target: \"es5\" });\nconsole.log(isES5Compatible); // true\n\nconst hasES6Features = await check(\"const x = () => {};\", { target: \"es5\" });\nconsole.log(hasES6Features); // false\n\n// With custom plugins\nconst isCompatible = await check(code, {\n  target: \"es5\",\n  plugins: [myPlugin],\n});\n```\n\n**Parameters:**\n\n- `code` (string): Code to analyze\n- `options` (DetectionOptions):\n  - `target` (string): Target ES version\n  - `plugins?` (Plugin[]): Array of plugins to use\n  - `throwOnFirst?` (boolean): Stop on first incompatible feature\n  - `ignorePatterns?` (string[]): Patterns to ignore\n  - `preprocessors?` (Array<(code: string) => string>): Code preprocessors\n\n**Returns:** `Promise<boolean>`\n\n### `fastBrakeSync(options)`\n\nSynchronous factory function for creating a fast-brake instance without async/await.\n\n```javascript\nimport { fastBrakeSync } from \"fast-brake\";\nimport { es2015Plugin } from \"fast-brake/plugins/es2015\";\nimport { locExtension } from \"fast-brake/extensions/loc\";\n\n// Create sync instance with plugins and extensions\nconst fbSync = fastBrakeSync({\n  plugins: [es2015Plugin],\n  extensions: [locExtension]\n});\n\n// Use synchronously (no await needed)\nconst features = fbSync.detect(\"const x = () => {}\");\nconst isCompatible = fbSync.check(\"const x = () => {}\", { target: \"es5\" });\n```\n\n**Parameters:**\n\n- `options` (FastBrakeOptions):\n  - `plugins` (Plugin[]): Array of plugins to use\n  - `extensions` (Extension[]): Array of extensions to use\n\n**Returns:** `FastBrakeSyncAPI` with synchronous `detect()` and `check()` methods\n\n### Additional Exports\n\nFast Brake also exports these classes and utilities:\n\n```javascript\nimport { Detector, Scanner, FastBrakeCache } from \"fast-brake\";\n\n// Create a detector instance with custom plugins\nconst detector = new Detector();\nawait detector.initialize([myPlugin1, myPlugin2]);\n\n// Scanner for file system operations\nconst scanner = new Scanner();\n\n// Cache for performance optimization\nconst cache = new FastBrakeCache();\n```\n\n## Plugin System\n\nFast Brake uses a plugin-based architecture for feature detection. Plugins define patterns and rules for detecting specific JavaScript features or telemetry.\n\n### Plugin Schema\n\nEach plugin follows the types defined in the [Plugin Schema](https://github.com/yowainwright/fast-brake/blob/main/src/types/plugin.ts):\n\n```typescript\ninterface Plugin {\n  name: string; // Unique plugin identifier\n  description: string; // Plugin description\n  spec: PluginSpec; // Plugin specification\n}\n\ninterface PluginSpec {\n  orderedRules: string[]; // Ordered list of rules (e.g., ES versions)\n  matches: Record<string, PluginMatch>; // Detection patterns mapped by feature name\n}\n\ninterface PluginMatch {\n  rule: string; // Rule this match belongs to (e.g., \"es2015\")\n  strings?: string[]; // Fast string patterns to check first\n  patterns?: PluginPattern[]; // Regex patterns for detailed matching\n}\n\ninterface PluginPattern {\n  pattern: string; // Regex pattern string\n  identifier?: string; // Optional identifier for the pattern\n}\n```\n\n### Using Plugins\n\nPlugins can be passed to any of the main functions:\n\n```javascript\nimport { fastBrake, detect, check } from \"fast-brake\";\nimport { es2020 } from \"fast-brake/src/plugins/esversion\";\nimport { telemetryPlugin } from \"fast-brake/src/plugins/telemetry\";\n\n// Pass single plugin\nconst features = await fastBrake(code, { plugins: [es2020] });\n\n// Pass multiple plugins\nconst results = await detect(code, {\n  plugins: [es2020, telemetryPlugin],\n});\n\n// Use with check function\nconst isCompatible = await check(code, {\n  target: \"es2020\",\n  plugins: [es2020, telemetryPlugin],\n});\n```\n\n### Creating Custom Plugins\n\n```javascript\nconst myPlugin = {\n  name: \"my-custom-plugin\",\n  description: \"Detects custom patterns\",\n  spec: {\n    orderedRules: [\"rule1\", \"rule2\"],\n    matches: {\n      feature_name: {\n        rule: \"rule1\",\n        strings: [\"console.log\"],\n        patterns: [\n          {\n            pattern: \"console\\\\.(log|warn|error)\",\n            identifier: \"console_methods\",\n          },\n        ],\n      },\n    },\n  },\n};\n```\n\n## Built-in Plugins\n\nFast Brake includes several built-in plugins for different detection needs:\n\n### 1. ES Version Plugin\n\nDetects ECMAScript features from ES5 through ES2025.\n\n```javascript\nimport { es5, es2015, es2020, esAll } from \"fast-brake/src/plugins/esversion\";\n\n// Use specific version checks\nconst plugin = es2015; // Checks for features newer than ES2015\n\n// Or use the complete plugin\nconst allFeatures = esAll; // Detects all ES features\n```\n\n### 2. Telemetry Plugin\n\nIdentifies analytics and tracking code patterns.\n\n```javascript\nimport {\n  telemetryPlugin,\n  strictTelemetryPlugin,\n} from \"fast-brake/src/plugins/telemetry\";\n\n// Standard telemetry detection\nconst plugin = telemetryPlugin;\n\n// Strict mode treats all telemetry as errors\nconst strict = strictTelemetryPlugin;\n```\n\n### 3. Browserlist Plugin\n\nChecks compatibility with specific browser versions.\n\n```javascript\nimport browserlistPlugin from \"fast-brake/src/plugins/browserlist\";\n\n// Use the browserlist plugin\nconst plugin = browserlistPlugin;\n```\n\n### 4. Detect Plugin\n\nAuto-detects the minimum required ES version.\n\n```javascript\nimport detectPlugin from \"fast-brake/src/plugins/detect\";\n\n// Automatically determine minimum ES version\nconst plugin = detectPlugin;\n```\n\n## Extensions\n\nFast Brake supports extensions that provide metadata and examples for enhanced detection capabilities.\n\n### Extension Schema\n\nEach extension follows the types defined in the [Extension Schema](https://github.com/yowainwright/fast-brake/blob/main/src/types/extension.ts):\n\n```typescript\ninterface Extension {\n  name: string; // Extension name\n  description: string; // Extension description\n  spec: {\n    // Extension specification\n    code: string; // Example code\n    result: {\n      // Example result\n      name: string;\n      match: string;\n      spec: object; // Additional metadata\n      rule: string;\n      index?: number;\n    };\n  };\n}\n```\n\n### Using Extensions\n\nExtensions can be passed to enhance detection with additional metadata:\n\n```javascript\nimport { Detector } from \"fast-brake\";\nimport { locExtension } from \"fast-brake/src/extensions/loc\";\nimport { throwExtension } from \"fast-brake/src/extensions/throw\";\n\n// Use single extension\nconst detector = new Detector({ extensions: [locExtension] });\nawait detector.initialize();\nconst results = await detector.detect(code);\n\n// Use multiple extensions\nconst enhancedDetector = new Detector({\n  extensions: [locExtension, throwExtension],\n});\nawait enhancedDetector.initialize();\nconst detailedResults = await enhancedDetector.detect(code);\n```\n\n### Built-in Extensions\n\n#### 1. throw Extension\n\nProvides metadata for error throwing patterns:\n\n```javascript\nimport { throwExtension } from \"fast-brake/src/extensions/throw\";\n\nconsole.log(throwExtension);\n// {\n//   name: \"throw\",\n//   description: \"Throws an error when specific patterns...\",\n//   spec: {\n//     code: \"throw new Error('Invalid operation');\",\n//     result: {\n//       name: \"throw-statement\",\n//       match: \"throw new Error\",\n//       spec: { type: \"error-throw\", errorType: \"Error\", message: \"Invalid operation\" },\n//       rule: \"throw-statement-pattern\",\n//       index: 0\n//     }\n//   }\n// }\n```\n\n#### 2. loc Extension\n\nProvides metadata for location enrichment:\n\n```javascript\nimport { locExtension } from \"fast-brake/src/extensions/loc\";\n\nconsole.log(locExtension);\n// {\n//   name: \"loc\",\n//   description: \"Enriches detected features with location information...\",\n//   spec: {\n//     code: \"const arrow = () => { return 42; }\",\n//     result: {\n//       name: \"arrow-function\",\n//       match: \"() =>\",\n//       spec: {\n//         loc: {\n//           start: { line: 1, column: 14 },\n//           end: { line: 1, column: 19 },\n//           offset: 14,\n//           length: 5\n//         }\n//       },\n//       rule: \"arrow-function-pattern\",\n//       index: 14\n//     }\n//   }\n// }\n```\n\n### ES Version Features\n\n#### EsVersion (default plugin)\n\n#### ES2015 (ES6) Features\n\n| Feature            | Pattern         | Example                     |\n| ------------------ | --------------- | --------------------------- |\n| Arrow Functions    | `=>`            | `const fn = () => {}`       |\n| Template Literals  | `` ` ``         | `` `Hello ${name}` ``       |\n| Classes            | `class`         | `class MyClass {}`          |\n| Let/Const          | `let`/`const`   | `const x = 10`              |\n| Destructuring      | `[...]`/`{...}` | `const [a, b] = arr`        |\n| Spread/Rest        | `...`           | `[...arr]`                  |\n| For-of Loops       | `for...of`      | `for (const item of items)` |\n| Default Parameters | `param = value` | `function fn(x = 10)`       |\n\n#### ES2016 Features\n\n| Feature        | Pattern | Example  |\n| -------------- | ------- | -------- |\n| Exponentiation | `**`    | `2 ** 3` |\n\n#### ES2017 Features\n\n| Feature     | Pattern         | Example                                 |\n| ----------- | --------------- | --------------------------------------- |\n| Async/Await | `async`/`await` | `async function fn() { await promise }` |\n\n#### ES2018 Features\n\n| Feature                | Pattern     | Example                                   |\n| ---------------------- | ----------- | ----------------------------------------- |\n| Async Iteration        | `for await` | `for await (const item of asyncIterable)` |\n| Rest/Spread Properties | `{...obj}`  | `const newObj = {...obj}`                 |\n\n#### ES2019 Features\n\n| Feature         | Pattern      | Example           |\n| --------------- | ------------ | ----------------- |\n| Array.flat()    | `.flat()`    | `arr.flat()`      |\n| Array.flatMap() | `.flatMap()` | `arr.flatMap(fn)` |\n\n#### ES2020 Features\n\n| Feature            | Pattern              | Example                        |\n| ------------------ | -------------------- | ------------------------------ |\n| Optional Chaining  | `?.`                 | `obj?.prop?.method?.()`        |\n| Nullish Coalescing | `??`                 | `value ?? 'default'`           |\n| BigInt             | `123n`               | `const big = 123n`             |\n| Promise.allSettled | `Promise.allSettled` | `Promise.allSettled(promises)` |\n| globalThis         | `globalThis`         | `globalThis.myVar`             |\n\n#### ES2021 Features\n\n| Feature            | Pattern               | Example                        |\n| ------------------ | --------------------- | ------------------------------ |\n| Logical Assignment | `\\|\\|=`, `&&=`, `??=` | `x ??= 'default'`              |\n| Numeric Separators | `1_000_000`           | `const million = 1_000_000`    |\n| String.replaceAll  | `.replaceAll()`       | `str.replaceAll('old', 'new')` |\n| Promise.any        | `Promise.any`         | `Promise.any(promises)`        |\n\n#### ES2022 Features\n\n| Feature         | Pattern          | Example                             |\n| --------------- | ---------------- | ----------------------------------- |\n| Private Fields  | `#field`         | `class C { #private = 1 }`          |\n| Static Blocks   | `static {}`      | `class C { static { /* init */ } }` |\n| Array.at()      | `.at()`          | `arr.at(-1)`                        |\n| Object.hasOwn   | `Object.hasOwn`  | `Object.hasOwn(obj, 'prop')`        |\n| Top-level Await | `await` (module) | `const data = await fetch(url)`     |\n\n#### ES2023 Features\n\n| Feature               | Pattern            | Example                          |\n| --------------------- | ------------------ | -------------------------------- |\n| Array.findLast()      | `.findLast()`      | `arr.findLast(x => x > 10)`      |\n| Array.findLastIndex() | `.findLastIndex()` | `arr.findLastIndex(x => x > 10)` |\n| Array.toReversed()    | `.toReversed()`    | `arr.toReversed()`               |\n| Array.toSorted()      | `.toSorted()`      | `arr.toSorted()`                 |\n| Array.toSpliced()     | `.toSpliced()`     | `arr.toSpliced(1, 2, 'new')`     |\n| Array.with()          | `.with()`          | `arr.with(0, 'new')`             |\n| Hashbang              | `#!`               | `#!/usr/bin/env node`            |\n\n#### ES2024 Features\n\n| Feature               | Pattern                 | Example                                                        |\n| --------------------- | ----------------------- | -------------------------------------------------------------- |\n| RegExp v flag         | `/pattern/v`            | `/[\\p{Letter}]/v`                                              |\n| Array.fromAsync()     | `Array.fromAsync`       | `Array.fromAsync(asyncIterable)`                               |\n| Promise.withResolvers | `Promise.withResolvers` | `const { promise, resolve, reject } = Promise.withResolvers()` |\n| Object.groupBy()      | `Object.groupBy`        | `Object.groupBy(items, item => item.category)`                 |\n| Map.groupBy()         | `Map.groupBy`           | `Map.groupBy(items, item => item.category)`                    |\n\n#### ES2025 Features\n\n| Feature                       | Pattern                  | Example                           |\n| ----------------------------- | ------------------------ | --------------------------------- |\n| Temporal API                  | `Temporal.`              | `Temporal.Now.plainDateISO()`     |\n| RegExp duplicate named groups | `(?<name>)`              | `/(?<year>\\d{4})-(?<year>\\d{2})/` |\n| Set methods                   | `.intersection()`        | `setA.intersection(setB)`         |\n|                               | `.union()`               | `setA.union(setB)`                |\n|                               | `.difference()`          | `setA.difference(setB)`           |\n|                               | `.symmetricDifference()` | `setA.symmetricDifference(setB)`  |\n|                               | `.isSubsetOf()`          | `setA.isSubsetOf(setB)`           |\n|                               | `.isSupersetOf()`        | `setA.isSupersetOf(setB)`         |\n|                               | `.isDisjointFrom()`      | `setA.isDisjointFrom(setB)`       |\n\n## Performance Benchmarks\n\n<!-- BENCHMARK_START -->\n\n### ES5 (Legacy)\n\nFile size: 0.4 KB\n\n| Parser                   | Time (ms) | Ops/sec | Relative | Accuracy      |\n| ------------------------ | --------- | ------- | -------- | ------------- |\n| fast-brake (detect)      | 0.009     | 110,509 | 1.0x     | none          |\n| fast-brake (browserlist) | 0.009     | 107,418 | 1.0x     | browser check |\n| fast-brake (es2015 only) | 0.010     | 103,786 | 0.9x     | es2015 check  |\n| fast-brake               | 0.010     | 102,154 | 0.9x     | none          |\n| fast-brake (es5 only)    | 0.016     | 60,722  | 0.5x     | es5 check     |\n| meriyah                  | 0.020     | 50,081  | 0.5x     | parsed        |\n| cherow                   | 0.022     | 45,132  | 0.4x     | parsed        |\n| esprima                  | 0.029     | 34,307  | 0.3x     | parsed        |\n| acorn                    | 0.034     | 29,149  | 0.3x     | parsed        |\n| espree                   | 0.040     | 25,202  | 0.2x     | parsed        |\n| @babel/parser            | 0.060     | 16,778  | 0.2x     | parsed        |\n\n### ES2015 (Modern)\n\nFile size: 0.7 KB\n\n| Parser                   | Time (ms) | Ops/sec | Relative | Accuracy      |\n| ------------------------ | --------- | ------- | -------- | ------------- |\n| fast-brake               | 0.004     | 225,519 | 1.0x     | none          |\n| fast-brake (detect)      | 0.005     | 191,799 | 0.9x     | none          |\n| fast-brake (es5 only)    | 0.014     | 71,126  | 0.3x     | es5 check     |\n| fast-brake (browserlist) | 0.016     | 61,496  | 0.3x     | browser check |\n| fast-brake (es2015 only) | 0.018     | 55,386  | 0.2x     | es2015 check  |\n| cherow                   | 0.019     | 53,240  | 0.2x     | parsed        |\n| meriyah                  | 0.020     | 51,039  | 0.2x     | parsed        |\n| acorn                    | 0.047     | 21,317  | 0.1x     | parsed        |\n| @babel/parser            | 0.056     | 17,905  | 0.1x     | parsed        |\n| espree                   | 0.056     | 17,848  | 0.1x     | parsed        |\n| esprima                  | -         | -       | -        | parse error   |\n\n### ES2022 (Latest)\n\nFile size: 1.2 KB\n\n| Parser                   | Time (ms) | Ops/sec | Relative | Accuracy      |\n| ------------------------ | --------- | ------- | -------- | ------------- |\n| fast-brake               | 0.002     | 589,507 | 1.0x     | none          |\n| fast-brake (detect)      | 0.004     | 242,608 | 0.4x     | none          |\n| fast-brake (es2015 only) | 0.007     | 143,859 | 0.2x     | es2015 check  |\n| fast-brake (es5 only)    | 0.009     | 108,805 | 0.2x     | es5 check     |\n| fast-brake (browserlist) | 0.009     | 105,517 | 0.2x     | browser check |\n| meriyah                  | 0.020     | 50,117  | 0.1x     | parsed        |\n| acorn                    | 0.037     | 27,354  | 0.0x     | parsed        |\n| espree                   | 0.042     | 23,809  | 0.0x     | parsed        |\n| @babel/parser            | 0.045     | 22,266  | 0.0x     | parsed        |\n| esprima                  | -         | -       | -        | parse error   |\n| cherow                   | -         | -       | -        | parse error   |\n\n### Large File (100x)\n\nFile size: 69.4 KB\n\n| Parser                   | Time (ms) | Ops/sec | Relative | Accuracy      |\n| ------------------------ | --------- | ------- | -------- | ------------- |\n| fast-brake               | 0.001     | 696,419 | 1.0x     | none          |\n| fast-brake (detect)      | 0.005     | 209,121 | 0.3x     | none          |\n| fast-brake (es5 only)    | 0.010     | 98,251  | 0.1x     | es5 check     |\n| fast-brake (browserlist) | 0.682     | 1,467   | 0.0x     | browser check |\n| fast-brake (es2015 only) | 0.989     | 1,011   | 0.0x     | es2015 check  |\n| cherow                   | 1.019     | 981     | 0.0x     | parsed        |\n| meriyah                  | 1.083     | 923     | 0.0x     | parsed        |\n| @babel/parser            | -         | -       | -        | parse error   |\n| acorn                    | -         | -       | -        | parse error   |\n| esprima                  | -         | -       | -        | parse error   |\n| espree                   | -         | -       | -        | parse error   |\n\n<!-- BENCHMARK_END -->\n\n### Performance Highlights\n\nBased on the latest benchmarks:\n\n- **~600,000 operations per second** for standard ES2015/ES2022 code\n- **33x faster** than @babel/parser for ES feature detection\n- **12x faster** than meriyah (the fastest full parser)\n- **Optimized for real-world use** - even faster on large files (665k ops/sec)\n- **Native performance** - leverages V8/JSC optimized string operations\n- **Zero overhead** - no AST generation or unnecessary allocations\n\n### When to use Quick vs Full mode\n\n**Quick Mode** (`{ quick: true }`):\n\n- **Up to 7x faster** than full mode\n- Perfect for **build tools** and **hot reloading**\n- **Pattern-based detection** without tokenizer validation\n- Use when **speed is critical**\n\n**Full Mode** (default):\n\n- **High accuracy** with tokenizer validation\n- **Still faster** than AST parsers\n- **Recommended** for most use cases\n- Use for **linting**, **CI/CD**, and **production builds**\n\n## Browser Support\n\nFast-brake supports detection of all ES versions from ES5 through ES2025+:\n\n| ES Version | Chrome | Firefox | Safari | Node.js | Key Features                                |\n| ---------- | ------ | ------- | ------ | ------- | ------------------------------------------- |\n| ES5 (2009) | 5+     | 4+      | 5+     | 0.10+   | Strict mode, JSON, Array methods            |\n| ES2015/ES6 | 51+    | 54+     | 10+    | 6+      | Arrow functions, Classes, Template literals |\n| ES2016     | 52+    | 55+     | 10.1+  | 7+      | Exponentiation, Array.includes              |\n| ES2017     | 58+    | 53+     | 11+    | 8+      | Async/await, Object.entries                 |\n| ES2018     | 64+    | 58+     | 12+    | 10+     | Rest/spread, Async iteration                |\n| ES2019     | 73+    | 62+     | 12.1+  | 12+     | Array.flat, Object.fromEntries              |\n| ES2020     | 80+    | 74+     | 13.1+  | 14+     | Optional chaining, Nullish coalescing       |\n| ES2021     | 85+    | 79+     | 14.1+  | 15+     | Logical assignment, String.replaceAll       |\n| ES2022     | 94+    | 93+     | 15.4+  | 16+     | Top-level await, Class fields               |\n| ES2023     | 110+   | 104+    | 16.4+  | 19+     | Array methods (toReversed, toSorted, with)  |\n| ES2024     | 120+   | 119+    | 17.2+  | 21+     | Promise.withResolvers, Object.groupBy       |\n| ES2025     | 125+   | 125+    | 18+    | 22+     | Set methods, Temporal API                   |\n\n## Use Cases\n\n### Build Tool Integration\n\n```javascript\nimport { check } from \"fast-brake\";\n\n// Validate code before bundling\nif (!check(sourceCode, { target: \"es2015\" })) {\n  console.warn(\"Code requires transpilation for ES2015 compatibility\");\n}\n```\n\n### Linting Integration\n\n```javascript\nimport { detect } from \"fast-brake\";\n\n// Check for features not allowed in your project\nconst features = detect(code);\nconst modernFeatures = features.filter((f) =>\n  [\"es2020\", \"es2021\", \"es2022\"].includes(f.version),\n);\n\nif (modernFeatures.length > 0) {\n  console.error(\"Modern ES features detected:\", modernFeatures);\n}\n```\n\n### CI/CD Pipeline\n\n```javascript\nimport { fastBrake } from \"fast-brake\";\nimport { readFileSync } from \"fs\";\n\n// Validate all source files\nconst files = [\"src/index.js\", \"src/utils.js\"];\nfor (const file of files) {\n  const code = readFileSync(file, \"utf-8\");\n  try {\n    fastBrake(code, { target: \"es2018\" });\n    console.log(`${file} is ES2018 compatible`);\n  } catch (error) {\n    console.error(`${file}: ${error.message}`);\n    process.exit(1);\n  }\n}\n```\n\n### Dynamic Feature Detection\n\n```javascript\nimport { getMinimumESVersion } from \"fast-brake\";\n\n// Determine polyfill requirements\nconst userCode = getUserSubmittedCode();\nconst requiredVersion = getMinimumESVersion(userCode);\n\nif (requiredVersion === \"es5\") {\n  // No polyfills needed\n} else if (requiredVersion === \"es2015\") {\n  loadES2015Polyfills();\n} else {\n  loadModernPolyfills();\n}\n```\n\n## TypeScript Support\n\nfast-brake includes full TypeScript definitions:\n\n```typescript\nimport {\n  fastBrake,\n  detect,\n  check,\n  getMinimumESVersion,\n  DetectedFeature,\n  DetectionOptions,\n} from \"fast-brake\";\n\nconst options: DetectionOptions = {\n  target: \"es2015\",\n  quick: false,\n  throwOnFirst: true,\n};\n\nconst features: DetectedFeature[] = detect(code, options);\n```\n\n## Development\n\n### Remote Caching (Vercel)\n\nSpeed up builds with Vercel remote caching:\n\n```bash\n# Create .env.local with your Vercel token\necho \"TURBO_TOKEN=your-vercel-token\" > .env.local\necho \"TURBO_TEAM=your-team-id\" >> .env.local\n\n# Get token from: https://vercel.com/account/tokens\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## License\n\nMIT © [@yowainwright](https://github.com/yowainwright), [Jeff Wainwright](https://jeffry.in)\n","readmeFilename":"README.md"}