{"_id":"@agntn/ox","name":"@agntn/ox","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@agntn/ox","version":"0.1.0","description":"Shared oxlint and oxfmt configuration for agntn repositories","homepage":"https://github.com/agntn/ox#readme","bugs":"https://github.com/agntn/ox/issues","license":"MIT","author":"oritwoen (https://github.com/oritwoen)","repository":{"type":"git","url":"git+https://github.com/agntn/ox.git"},"type":"module","sideEffects":false,"exports":{"./oxlint":{"types":"./dist/oxlint.d.mts","import":"./dist/oxlint.mjs"},"./oxfmt":{"types":"./dist/oxfmt.d.mts","import":"./dist/oxfmt.mjs"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"devDependencies":{"@types/node":"26.2.0","changelogen":"0.6.2","obuild":"0.4.38","oxfmt":"0.63.0","oxlint":"1.78.0","oxlint-tsgolint":"^7.0.2001","typescript":"7.0.2","vitest":"4.1.10"},"peerDependencies":{"oxfmt":">=0.63.0","oxlint":">=1.78.0","oxlint-tsgolint":">=7.0.2001"},"engines":{"node":">=24"},"scripts":{"build":"obuild","dev":"obuild --stub","lint":"oxlint . && oxfmt --check .","lint:fix":"oxlint . --fix && oxfmt .","typecheck":"tsc --noEmit","test":"vitest --run","test:package":"node verify-package.ts","test:watch":"vitest","verify":"pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run test:package","release":"pnpm run verify && changelogen --release --push --clean"},"_nodeVersion":"26.8.1","_id":"@agntn/ox@0.1.0","dist":{"integrity":"sha512-bYyCMczypvi/bxDgK1gOFhOnGFAqTNnTTWl+yIocaP68wsfGtwZwxN9Rld1bMcLXRVlO9PJCl7EASqToz8dOVw==","shasum":"c960c5d6a112854846e4c7ebf79868ae9c378af8","tarball":"https://registry.npmjs.org/@agntn/ox/-/ox-0.1.0.tgz","fileCount":7,"unpackedSize":9958,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDcQF+EiX4+MNeUAhFuUiHqHvdvJIs8NN0RX2EnJl+BoAIhAP3UIt5IwDtZtwoO2/Y7Uz46ZMf75IpE9qRXYaDZxoZA"}]},"_npmUser":{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"},"directories":{},"maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ox_0.1.0_1788003233264_0.8551937799138394"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-29T11:33:53.102Z","0.1.0":"2026-08-29T11:33:53.423Z","modified":"2026-08-29T11:33:53.619Z"},"maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"description":"Shared oxlint and oxfmt configuration for agntn repositories","homepage":"https://github.com/agntn/ox#readme","repository":{"type":"git","url":"git+https://github.com/agntn/ox.git"},"author":"oritwoen (https://github.com/oritwoen)","bugs":"https://github.com/agntn/ox/issues","license":"MIT","readme":"# @agntn/ox\n\nShared oxlint and oxfmt configuration for agntn repositories.\n\n## Install\n\n```sh\npnpm add -D @agntn/ox oxlint oxfmt oxlint-tsgolint\n```\n\nKeep all three tools as direct dependencies. Editor integration resolves\n`oxlint` and `oxfmt` from the consuming repository's `node_modules/.bin`, while\n`oxlint-tsgolint` is what makes `options.typeAware` work. It is also a peer of\nthis package, but listing it directly keeps installs with automatic peer\nresolution disabled working the same way.\n\n## Use\n\n```ts\n// oxlint.config.ts\nimport { defineConfig } from \"oxlint\";\nimport oxlint from \"@agntn/ox/oxlint\";\n\nexport default defineConfig({\n  ...oxlint,\n  rules: { ...oxlint.rules },\n  ignorePatterns: [\"dist\", \"coverage\"],\n});\n```\n\n```ts\n// oxfmt.config.ts\nimport { defineConfig } from \"oxfmt\";\nimport oxfmt from \"@agntn/ox/oxfmt\";\n\nexport default defineConfig({\n  ...oxfmt,\n  ignorePatterns: [\"dist\", \"coverage\"],\n});\n```\n\nDelete `.oxlintrc.json` and `.oxfmtrc.json` when migrating. Both tools refuse to\nstart when a JSON and a TypeScript configuration sit in the same directory.\n\n## What belongs where\n\n`ignorePatterns` is the only setting that is genuinely repository-local; every\nother decision belongs in this package, so that changing it once changes it\neverywhere.\n\nCompose by spreading, never through `extends`. As of oxlint 1.78.0 `extends`\ninherits rule severity but drops rule options. `complexity: [\"error\", { max: 9 }]`\narrives as a bare `\"deny\"` and falls back to the default threshold, and\n`prefer-readonly-parameter-types` loses its allow list. It happens in the JSON\npath and the TypeScript path alike. Spreading composes the object in JavaScript,\nbefore oxlint parses anything, so nothing is lost.\n\nA repository-local key wins over the shared one, which is why local rules go in\nas `rules: { ...oxlint.rules, \"some-rule\": \"off\" }`. Spreading a bare `rules`\nkey would drop the shared set entirely.\n\n## Why one package\n\noxc releases oxlint and oxfmt together, and every agntn repository bumps them in\nlockstep. Two configuration packages would mean two update pull requests per\nrepository for versions that never move independently.\n\n## Release\n\nThe first publish must be manual because npm only allows a trusted publisher to\nbe configured after the package exists. Run `pnpm publish --no-git-checks` for\n`0.1.0`, configure `publish.yml` as the npm trusted publisher, then use\n`pnpm release` for later versions. The release script runs the full verification,\nupdates the changelog, commits, tags and pushes; the tag triggers the OIDC\npublish workflow.\n","readmeFilename":"","_rev":"1-a6597321afeaf372363ba7865fb43178"}