{"_id":"@charcuterie/biome-config","_rev":"5-ccf22be5ca52186d01768f70c5daf0de","name":"@charcuterie/biome-config","dist-tags":{"latest":"1.3.0"},"versions":{"0.1.0":{"name":"@charcuterie/biome-config","version":"0.1.0","license":"MIT","_id":"@charcuterie/biome-config@0.1.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"3c2129e1e0699898787a1327d2a04d37ad0148c2","tarball":"https://registry.npmjs.org/@charcuterie/biome-config/-/biome-config-0.1.0.tgz","fileCount":4,"integrity":"sha512-OuznvWJ5+FaXQbS4mzd7Ln8Qq6N38Jq7xKWz63MFUgJyrzBYLgWOAhprcq85Fx4PXfI1KTuN5SXLft+FjUqRlQ==","signatures":[{"sig":"MEUCIEBJvl3YIPMFlKrkbAuURoEWJdkqDu2ikCBH2HqZfn6kAiEAh6RVW8HCt0e5l9TxjtsVdCrEwBA4bmISmyO6Uom1Z+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2710},"main":"./config.json","type":"module","_from":"file:/tmp/biome-config.tgz","exports":{".":"./config.json","./config.json":"./config.json"},"scripts":{"typecheck":"echo \"no TypeScript in @charcuterie/biome-config\""},"_npmUser":{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"},"_resolved":"/tmp/biome-config.tgz","_integrity":"sha512-OuznvWJ5+FaXQbS4mzd7Ln8Qq6N38Jq7xKWz63MFUgJyrzBYLgWOAhprcq85Fx4PXfI1KTuN5SXLft+FjUqRlQ==","repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/biome-config"},"_npmVersion":"11.16.0","description":"The shared Biome formatter and linter settings for the Charcuterie fleet.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/biome-config_0.1.0_1785472268103_0.007174891381299675","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@charcuterie/biome-config","version":"1.0.0","license":"MIT","_id":"@charcuterie/biome-config@1.0.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"3bcc633ee0302d1c0f0305517deb07861301e2a0","tarball":"https://registry.npmjs.org/@charcuterie/biome-config/-/biome-config-1.0.0.tgz","fileCount":3,"integrity":"sha512-PCo9L7NIOHDLyhIfSqhxh28wdujb/qmQ37suL2/sQ1t+HvVkaqVEn9PjOBDY5z3g/70dg1KqDXcmlhgWv5wEsA==","signatures":[{"sig":"MEQCICasQSvIRoGS7pmdQa9pgmY//ukcdMmQIVyzvcnz++mDAiAGkWmSym3epCnPILTB8ouwAeEdvGcjplbE7EkbIpbqNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2fbiome-config@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2417},"main":"./config.json","type":"module","exports":{".":"./config.json","./config.json":"./config.json"},"scripts":{"typecheck":"echo \"no TypeScript in @charcuterie/biome-config\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bc249ba-1377-4bb8-ad33-eebf4aa628bf"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/biome-config"},"_npmVersion":"11.16.0","description":"The shared Biome formatter and linter settings for the Charcuterie fleet.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/biome-config_1.0.0_1785684135742_0.7278378050012182","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@charcuterie/biome-config","version":"1.1.0","license":"MIT","_id":"@charcuterie/biome-config@1.1.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"9271c46faf7e05f937bc617e6afb55209e3528d7","tarball":"https://registry.npmjs.org/@charcuterie/biome-config/-/biome-config-1.1.0.tgz","fileCount":3,"integrity":"sha512-UvUB3SfasH8bp8b6mACjC2HFmVYPZNEtsd3dNfpEycZyT0LatP/75PBAyQXLtAnrzQzU+7H3XIB9yI1DuSCGaw==","signatures":[{"sig":"MEUCIQCNxC0LzECDGnNRrfyYcB5t3PgHZ2JV/lXDtZVtJhj3+gIgeasrytPH4Ti3CGrVPDqOsvFmyTD9C3aG/W+aOUZZ+Mg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2fbiome-config@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2673},"main":"./config.json","type":"module","exports":{".":"./config.json","./config.json":"./config.json"},"scripts":{"typecheck":"echo \"no TypeScript in @charcuterie/biome-config\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bc249ba-1377-4bb8-ad33-eebf4aa628bf"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/biome-config"},"_npmVersion":"11.19.0","description":"The shared Biome formatter and linter settings for the Charcuterie fleet.","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/biome-config_1.1.0_1786442575090_0.2432483016262592","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@charcuterie/biome-config","version":"1.2.0","license":"MIT","_id":"@charcuterie/biome-config@1.2.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"e9b5abdbbf43650f7a96a028f541ea979ee683c9","tarball":"https://registry.npmjs.org/@charcuterie/biome-config/-/biome-config-1.2.0.tgz","fileCount":4,"integrity":"sha512-Qz4T0vihHvN5c6AqBJEqAhxt8E6vXXbpwBEAOVFUX6wlAW7bxD8QQRnH3U4g2pWoO8aQORHPm4tV/ZpUayQfjg==","signatures":[{"sig":"MEYCIQCmyxMQ5bA0efTVY4GmAMhCs5/Zbf4PwKA/S2ET9bgR+wIhALzwGmEX6WnB9BfvEpbZb1hW6DJiwNzJ77BzIa9SDb9Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2fbiome-config@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5761},"main":"./config.json","type":"module","exports":{".":"./config.json","./app":"./app.json","./app.json":"./app.json","./config.json":"./config.json"},"scripts":{"typecheck":"echo \"no TypeScript in @charcuterie/biome-config\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bc249ba-1377-4bb8-ad33-eebf4aa628bf"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/biome-config"},"_npmVersion":"11.19.0","description":"The shared Biome formatter and linter settings for the Charcuterie fleet.","directories":{},"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/biome-config_1.2.0_1787292489894_0.3838400711859167","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@charcuterie/biome-config","version":"1.3.0","description":"The shared Biome formatter and linter settings for the Charcuterie fleet.","license":"MIT","type":"module","main":"./config.json","exports":{".":"./config.json","./config.json":"./config.json","./app":"./app.json","./app.json":"./app.json"},"publishConfig":{"access":"public","provenance":true},"scripts":{"test":"vitest","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/Sawtaytoes/charcuterie.git","directory":"packages/biome-config"},"devDependencies":{"@biomejs/biome":"^2.4.15","@types/node":"^25.6.2","typescript":"^6.0.3","vitest":"^4.1.8"},"_id":"@charcuterie/biome-config@1.3.0","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-aMus/8v7VJrtvtNYeud3qW7zUTPP1dYtYAi5zUZHr0XONm4DDCJsPVx/Aio/dTh1k1m+KPv9ZBLWcMhLky1EFQ==","shasum":"ae0a5633d2c4d49471a3515897e997ab025351d2","tarball":"https://registry.npmjs.org/@charcuterie/biome-config/-/biome-config-1.3.0.tgz","fileCount":4,"unpackedSize":6853,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2fbiome-config@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDaCnAtenbGcPQog3MpxKBUv1QDQ5gTtcNw59Ee+RDecQIgPPzjhIQNnJcEFXX/RD2wYltDFLmIBd137IGaNcU4yPI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3bc249ba-1377-4bb8-ad33-eebf4aa628bf"}},"directories":{},"maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/biome-config_1.3.0_1787298348778_0.3738018346756691"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-31T04:31:07.930Z","modified":"2026-08-21T07:45:49.295Z","0.1.0":"2026-07-31T04:31:08.313Z","1.0.0":"2026-08-02T15:22:15.903Z","1.1.0":"2026-08-11T10:02:55.246Z","1.2.0":"2026-08-21T06:08:10.022Z","1.3.0":"2026-08-21T07:45:48.912Z"},"bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"license":"MIT","homepage":"https://github.com/Sawtaytoes/charcuterie#readme","repository":{"type":"git","url":"git+https://github.com/Sawtaytoes/charcuterie.git","directory":"packages/biome-config"},"description":"The shared Biome formatter and linter settings for the Charcuterie fleet.","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"readme":"# `@charcuterie/biome-config`\n\nThe shared Biome settings, extracted verbatim from `mux-magic/biome.json` — the\nreference app for every convention in this repo.\n\n```jsonc\n// biome.json, in any consumer\n{\n  \"extends\": [\"@charcuterie/biome-config\"],\n  \"files\": { \"includes\": [\"./**\", \"!**/dist\"] }\n}\n```\n\nThe consumer owns `files.includes`, because which paths exist is a property of the\napp, not of the house style. Everything else — 60-column lines, two-space indent, LF,\ndouble quotes, semicolons as-needed, trailing commas everywhere, always-parenthesized\narrow params — comes from here.\n\n**Why 60 columns.** It is narrow enough that a function call with three arguments\nbreaks one-per-line, which is the shape every diff in the fleet already has. Widening\nit later reflows every file in every repo at once, so it is set here and left alone.\n\n## `@charcuterie/biome-config/app` — the house rules an app also gets\n\nThe base config above is deliberately house *style* only: it is what\n`@charcuterie/ui` itself extends, and the library renders a raw `<select>` because\nrendering one correctly **is** the library.\n\nAn app is not the library, so an app extends **both** — the base, then the app delta:\n\n```jsonc\n// biome.json, in any app repo\n{\n  \"extends\": [\n    \"@charcuterie/biome-config\",\n    \"@charcuterie/biome-config/app\"\n  ],\n  \"files\": { \"includes\": [\"./**\", \"!**/dist\"] }\n}\n```\n\n**Both entries, and the order matters.** `app.json` is a *delta*: it holds the picker\nrules and nothing else, and it deliberately carries no `extends` of its own.\n\nThat is not a style choice, it is Biome's behaviour. **Biome does not resolve a nested\n`extends` inside an extended config.** `app.json` shipped in 1.2.0 with\n`\"extends\": [\"./config.json\"]`, on the reasonable assumption that a package's config can\nextend its sibling; a consumer on `/app` alone got the picker rules and silently lost the\nentire house style — 60 columns, no semicolons, the Tailwind CSS parser, the VCS ignore\nfile. Nothing errored. The first `biome check --write` would have reformatted the repo.\n`src/appConfig.test.ts` runs the real CLI over real fixtures and asserts each of those\nbase settings survives the second entry, because a config that looks adopted and enforces\nBiome's defaults is indistinguishable from a config that works.\n\nTogether they give everything in the base plus the fleet's picker rule, expressed\nnatively:\n\n| Rule | Fires on | Reach for instead |\n| --- | --- | --- |\n| `correctness/noRestrictedElements` | `<select>` | `Picker`, `Listbox`, or `Combobox` |\n| `correctness/noRestrictedElements` | `<Select>` | `Picker` — the drop-in, same props |\n| `style/noRestrictedImports` | `import { Select } from \"@charcuterie/ui\"` | `Picker` |\n\n**Why this is here and not only in ESLint.** `charcuterie/no-raw-select` and\n`charcuterie/prefer-listbox-over-select` are ESLint rules, and a repo that lints with\nBiome alone had no way to get them — queuepilot's option was \"adopt a second linter\nfor two rules\", which is not an option anybody takes. `noRestrictedElements` matches\nJSX components as well as HTML elements, so the same two mistakes are catchable\nwithout one. A repo running both linters gets the rule twice and the same message\ntwice, which is noise rather than a problem; a repo running either gets it once.\n\n**Where the two differ**, and it is worth knowing which you have: the ESLint rules\ncarry `charcuterie/require-suppression-reason`, so an `eslint-disable` that names\nthem owes a `-- why` on the same line. Biome's `// biome-ignore` syntax already\nrequires an explanation, so the Biome path gets that for free from the tool.\n\nBiome covers formatting and most linting. The rules it *cannot* express — the ones\nneeding TypeScript type information or a custom AST query — live in\n[`@charcuterie/eslint-config`](../eslint-config/README.md), whose\n`createAppConfig()` is the ESLint half of the same one-line adoption.\n","readmeFilename":"README.md"}