From bc2e53e2952100315aa183f881d265cb52aecfb9 Mon Sep 17 00:00:00 2001 From: Marco Comi Date: Thu, 30 Apr 2026 12:18:51 +0200 Subject: [PATCH 1/3] Create oxlint package --- .changeset/nine-worlds-teach.md | 2 +- .changeset/tidy-worms-judge.md | 5 + .oxfmtrc.json | 10 -- CONSUMING.md | 32 +++- README.md | 5 +- oxfmt.config.ts | 3 + oxlint.config.ts | 3 + package.json | 8 +- packages/oxc-config/README.md | 25 ++++ packages/oxc-config/oxfmt.js | 14 ++ packages/oxc-config/oxlint.js | 38 +++++ packages/oxc-config/package.json | 29 ++++ packages/prettier-config/README.md | 2 + pnpm-lock.yaml | 226 +++++++++++++++++++++++++++++ 14 files changed, 384 insertions(+), 18 deletions(-) create mode 100644 .changeset/tidy-worms-judge.md delete mode 100644 .oxfmtrc.json create mode 100644 oxfmt.config.ts create mode 100644 oxlint.config.ts create mode 100644 packages/oxc-config/README.md create mode 100644 packages/oxc-config/oxfmt.js create mode 100644 packages/oxc-config/oxlint.js create mode 100644 packages/oxc-config/package.json diff --git a/.changeset/nine-worlds-teach.md b/.changeset/nine-worlds-teach.md index 8510a94..00b4cbf 100644 --- a/.changeset/nine-worlds-teach.md +++ b/.changeset/nine-worlds-teach.md @@ -1,5 +1,5 @@ --- -"dev-toolkit-infra": patch +'dev-toolkit-infra': patch --- Upgrade the GitHub package of Pulumi diff --git a/.changeset/tidy-worms-judge.md b/.changeset/tidy-worms-judge.md new file mode 100644 index 0000000..19b9b5b --- /dev/null +++ b/.changeset/tidy-worms-judge.md @@ -0,0 +1,5 @@ +--- +'@kin0992/oxc-config': minor +--- + +Add a shared OXC config package, wire the monorepo to shared `oxfmt` and `oxlint` configs, and document the new consumer setup while keeping the legacy `@kin0992/prettier-config` package available. diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index c0f06cd..0000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "./node_modules/oxfmt/configuration_schema.json", - "semi": true, - "singleQuote": true, - "trailingComma": "all", - "printWidth": 100, - "tabWidth": 2, - "endOfLine": "lf", - "ignorePatterns": ["dist/**", "build/**", "coverage/**", ".turbo/**"] -} diff --git a/CONSUMING.md b/CONSUMING.md index b7fa2b1..eb12ce2 100644 --- a/CONSUMING.md +++ b/CONSUMING.md @@ -122,9 +122,11 @@ Locally, generate a Personal Access Token with `read:packages` and put it in `~/ ```sh pnpm add -D \ @kin0992/tsconfig \ + @kin0992/oxc-config \ @kin0992/eslint-config \ - @kin0992/prettier-config \ - @kin0992/vitest-config + @kin0992/vitest-config \ + oxfmt \ + oxlint ``` ### Wire them up @@ -142,10 +144,30 @@ import config from '@kin0992/eslint-config'; export default config; ``` +`oxfmt.config.ts`: + +```ts +import config from '@kin0992/oxc-config/oxfmt'; +export default config; +``` + +`oxlint.config.ts`: + +```ts +import config from '@kin0992/oxc-config/oxlint'; +export default config; +``` + `package.json`: ```json -{ "prettier": "@kin0992/prettier-config" } +{ + "scripts": { + "format": "oxfmt", + "format:check": "oxfmt --check", + "lint:oxlint": "oxlint ." + } +} ``` `vitest.config.ts`: @@ -162,6 +184,10 @@ pnpm add -D @kin0992/skills Skills live as `SKILL.md` files under `node_modules/@kin0992/skills/src//SKILL.md` and can be loaded by your AI tooling of choice. +### Legacy formatter package + +`@kin0992/prettier-config` is still available for existing consumers, but new projects should prefer `@kin0992/oxc-config`. + --- ## 3. Recommended consumer workflow setup diff --git a/README.md b/README.md index 3aaeced..986afea 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,15 @@ Platform Engineering toolkit: reusable GitHub Actions, AI Skills, and shared Typ | `.github/workflows/iac-drift.yml` | Reusable workflow: Pulumi drift detection | | `.github/actions/setup` | Composite action: Node + pnpm + cache | | `packages/tsconfig` | `@kin0992/tsconfig` — base / node / library presets | +| `packages/oxc-config` | `@kin0992/oxc-config` — shared OXC format + lint config | | `packages/eslint-config` | `@kin0992/eslint-config` — flat ESLint config for TS | -| `packages/prettier-config` | `@kin0992/prettier-config` — shared Prettier config | +| `packages/prettier-config` | `@kin0992/prettier-config` — legacy Prettier config | | `packages/vitest-config` | `@kin0992/vitest-config` — shared Vitest preset | | `packages/skills` | `@kin0992/skills` — AI Skills (commit, PR, review, changelog) | ## Stack -Node.js LTS · TypeScript · pnpm workspaces · Turbo · Vitest · Pulumi (TS) · Changesets · GitHub Actions · GitHub Packages registry +Node.js LTS · TypeScript · pnpm workspaces · Turbo · OXC (`oxfmt`, `oxlint`) · Vitest · Pulumi (TS) · Changesets · GitHub Actions · GitHub Packages registry ## How to consume from another project diff --git a/oxfmt.config.ts b/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/oxlint.config.ts b/oxlint.config.ts new file mode 100644 index 0000000..c0a12b3 --- /dev/null +++ b/oxlint.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default config; diff --git a/package.json b/package.json index 6d6ad5f..f1c10ab 100644 --- a/package.json +++ b/package.json @@ -9,21 +9,25 @@ "type": "git", "url": "https://github.com/kin0992/dev-toolkit.git" }, + "type": "module", "scripts": { "build": "turbo run build", - "lint": "turbo run lint", + "lint": "pnpm lint:oxlint && turbo run lint", + "lint:oxlint": "oxlint .", "format": "oxfmt", "format:check": "oxfmt --check", "test": "turbo run test", "typecheck": "turbo run typecheck", - "code-review": "pnpm turbo run format:check typecheck lint test", + "code-review": "pnpm format:check && pnpm typecheck && pnpm lint && pnpm test", "changeset": "changeset", "version-packages": "changeset version", "release": "turbo run build && changeset publish" }, "devDependencies": { "@changesets/cli": "^2.31.0", + "@kin0992/oxc-config": "workspace:*", "oxfmt": "^0.47.0", + "oxlint": "^1.62.0", "turbo": "^2.9.6", "typescript": "^5.9.3" }, diff --git a/packages/oxc-config/README.md b/packages/oxc-config/README.md new file mode 100644 index 0000000..4742cd4 --- /dev/null +++ b/packages/oxc-config/README.md @@ -0,0 +1,25 @@ +# @kin0992/oxc-config + +Shared OXC formatter and lint configuration. + +## Install + +```sh +pnpm add -D @kin0992/oxc-config oxfmt oxlint +``` + +## Use + +```ts +// oxfmt.config.ts +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; +``` + +```ts +// oxlint.config.ts +import config from '@kin0992/oxc-config/oxlint'; + +export default config; +``` diff --git a/packages/oxc-config/oxfmt.js b/packages/oxc-config/oxfmt.js new file mode 100644 index 0000000..93e0bcd --- /dev/null +++ b/packages/oxc-config/oxfmt.js @@ -0,0 +1,14 @@ +export default { + printWidth: 100, + tabWidth: 2, + semi: true, + singleQuote: true, + trailingComma: 'all', + endOfLine: 'lf', + insertFinalNewline: true, + quoteProps: 'as-needed', + objectWrap: 'preserve', + proseWrap: 'preserve', + sortPackageJson: true, + ignorePatterns: ['dist/**', 'build/**', 'coverage/**', '.turbo/**', 'node_modules/**'], +}; diff --git a/packages/oxc-config/oxlint.js b/packages/oxc-config/oxlint.js new file mode 100644 index 0000000..fad4520 --- /dev/null +++ b/packages/oxc-config/oxlint.js @@ -0,0 +1,38 @@ +export default { + categories: { + correctness: 'error', + suspicious: 'error', + }, + plugins: ['typescript', 'oxc', 'unicorn', 'import', 'promise', 'node'], + env: { + node: true, + es2024: true, + }, + ignorePatterns: ['dist/**', 'build/**', 'coverage/**', '.turbo/**', 'node_modules/**'], + options: { + reportUnusedDisableDirectives: 'error', + }, + rules: { + 'eslint/prefer-const': 'error', + 'import/no-cycle': 'error', + 'no-console': 'off', + 'node/no-process-env': 'off', + 'promise/no-return-wrap': 'error', + 'typescript/no-explicit-any': 'error', + 'unicorn/prefer-node-protocol': 'error', + }, + overrides: [ + { + files: ['**/*.test.*', '**/*.spec.*', '**/test/**'], + rules: { + 'typescript/no-explicit-any': 'off', + }, + }, + { + files: ['infra/**/*.ts'], + rules: { + 'no-new': 'off', + }, + }, + ], +}; diff --git a/packages/oxc-config/package.json b/packages/oxc-config/package.json new file mode 100644 index 0000000..2922042 --- /dev/null +++ b/packages/oxc-config/package.json @@ -0,0 +1,29 @@ +{ + "name": "@kin0992/oxc-config", + "version": "0.0.0", + "description": "Shared OXC formatter and lint configuration.", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/kin0992/dev-toolkit.git", + "directory": "packages/oxc-config" + }, + "files": [ + "oxfmt.js", + "oxlint.js", + "README.md" + ], + "type": "module", + "exports": { + "./oxfmt": "./oxfmt.js", + "./oxlint": "./oxlint.js" + }, + "publishConfig": { + "access": "restricted", + "registry": "https://npm.pkg.github.com" + }, + "peerDependencies": { + "oxfmt": "^0.47.0", + "oxlint": "^1.62.0" + } +} diff --git a/packages/prettier-config/README.md b/packages/prettier-config/README.md index 919af59..187733b 100644 --- a/packages/prettier-config/README.md +++ b/packages/prettier-config/README.md @@ -1,5 +1,7 @@ # @kin0992/prettier-config +Legacy shared Prettier config. New projects should prefer `@kin0992/oxc-config`. + ## Install ```sh diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 568cad6..fa4d53f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,9 +11,15 @@ importers: '@changesets/cli': specifier: ^2.31.0 version: 2.31.0(@types/node@22.19.17) + '@kin0992/oxc-config': + specifier: workspace:* + version: link:packages/oxc-config oxfmt: specifier: ^0.47.0 version: 0.47.0 + oxlint: + specifier: ^1.62.0 + version: 1.62.0 turbo: specifier: ^2.9.6 version: 2.9.6 @@ -52,6 +58,15 @@ importers: specifier: ^8.18.2 version: 8.59.1(eslint@9.39.4)(typescript@5.9.3) + packages/oxc-config: + dependencies: + oxfmt: + specifier: ^0.47.0 + version: 0.47.0 + oxlint: + specifier: ^1.62.0 + version: 1.62.0 + packages/prettier-config: {} packages/skills: {} @@ -684,6 +699,128 @@ packages: cpu: [x64] os: [win32] + '@oxlint/binding-android-arm-eabi@1.62.0': + resolution: {integrity: sha512-pKsthNECyvJh8lPTICz6VcwVy2jOqdhhsp1rlxCkhgZR47aKvXPmaRWQDv+zlXpRae4qm1MaaTnutkaOk5aofg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.62.0': + resolution: {integrity: sha512-b1AUNViByvgmR2xJDubvLIr+dSuu3uraG7bsAoKo+xrpspPvu6RIn6Fhr2JUhobfep3jwUTy18Huco6GkwdvGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.62.0': + resolution: {integrity: sha512-iG+Tvf70UJ6otfwFYIHk36Sjq9cpPP5YLxkoggANNRtzgi3Tj3g8q6Ybqi6AtkU3+yg9QwF7bDCkCS6bbL4PCg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.62.0': + resolution: {integrity: sha512-oOWI6YPPr5AJUx+yIDlxmuUbQjS5gZX3OH3QisawYvsZgLiQVvZtR0rPBcJTxLWqt2ClrWg0DlSrlUiG5SQNHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.62.0': + resolution: {integrity: sha512-dLP33T7VLCmLVv4cvjkVX+rmkcwNk2UfxmsZPNur/7BQHoQR60zJ7XLiRvNUawlzn0u8ngCa3itjEG73MAMa/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': + resolution: {integrity: sha512-fl//LWNks6qo9chNY60UDYyIwtp7a5cEx4Y/rHPjaarhuwqx6jtbzEpD5V5AqmdL4a6Y5D8zeXg5HF2Cr0QmSQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.62.0': + resolution: {integrity: sha512-i5vkAuxvueTODV3J2dL61/TXewDHhMFKvtD156cIsk7GsdfiAu7zW7kY0NJXhKeFHeiMZIh7eFNjkPYH6J47HQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.62.0': + resolution: {integrity: sha512-QwN19LLuIGuOjEflSeJkZmOTfBdBMlTmW8xbMf8TZhjd//cxVNYQPq75q7oKZBJc6hRx3gY7sX0Egc8cEIFZYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.62.0': + resolution: {integrity: sha512-8eCy3FCDuWUM5hWujAv6heMvfZPbcCOU3SdQUAkixZLu5bSzOkNfirJiLGoQFO943xceOKkiQRMQNzH++jM3WA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.62.0': + resolution: {integrity: sha512-NjQ7K7tpTPDe9J+yq8p/s/J0E7lRCkK2uDBDqvT4XIT6f4Z0tlnr59OBg/WcrmVHER1AbrcfyxhGTXgcG8ytWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.62.0': + resolution: {integrity: sha512-oKZed9gmSwze29dEt3/Wnsv6l/Ygw/FUst+8Kfpv2SGeS/glEoTGZAMQw37SVyzFV76UTHJN2snGgxK2t2+8ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.62.0': + resolution: {integrity: sha512-gBjBxQ+9lGpAYq+ELqw0w8QXsBnkZclFc7GRX2r0LnEVn3ZTEqeIKpKcGjucmp76Q53bvJD0i4qBWBhcfhSfGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.62.0': + resolution: {integrity: sha512-Ew2Kxs9EQ9/mbAIJ2hvocMC0wsOu6YKzStI2eFBDt+Td5O8seVC/oxgRIHqCcl5sf5ratA1nozQBAuv7tphkHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.62.0': + resolution: {integrity: sha512-5z25jcAA0gfKyVwz71A0VXgaPlocPoTAxhlv/hgoK6tlCrfoNuw7haWbDHvGMfjXhdic4EqVXGRv5XsTqFnbRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.62.0': + resolution: {integrity: sha512-IWpHmMB6ZDllPvqWDkG6AmXrN7JF5e/c4g/0PuURsmlK+vHoYZPB70rr4u1bn3I4LsKCSpqqfveyx6UCOC8wdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.62.0': + resolution: {integrity: sha512-fjlSxxrD5pA594vkyikCS9MnPRjQawW6/BLgyTYkO+73wwPlYjkcZ7LSd974l0Q2zkHQmu4DPvJFLYA7o8xrxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.62.0': + resolution: {integrity: sha512-EiFXr8loNS0Ul3Gu80+9nr1T8jRmnKocqmHHg16tj5ZqTgUXyb97l2rrspVHdDluyFn9JfR4PoJFdNzw4paHww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.62.0': + resolution: {integrity: sha512-IgOFvL73li1bFgab+hThXYA0N2Xms2kV2MvZN95cebV+fmrZ9AVui1JSxfeeqRLo3CpPxKZlzhyq4G0cnaAvIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.62.0': + resolution: {integrity: sha512-6hMpyDWQ2zGA1OXFKBrdYMUveUCO8UJhkO6JdwZPd78xIdHZNhjx+pib+4fC2Cljuhjyl0QwA2F3df/bs4Bp6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -1762,6 +1899,16 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + oxlint@1.62.0: + resolution: {integrity: sha512-1uFkg6HakjsGIpW9wNdeW4/2LOHW9MEkoWjZUTUfQtIHyLIZPYt00w3Sg+H3lH+206FgBPHBbW5dVE5l2ExECQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.18.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -2944,6 +3091,63 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.47.0': optional: true + '@oxlint/binding-android-arm-eabi@1.62.0': + optional: true + + '@oxlint/binding-android-arm64@1.62.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.62.0': + optional: true + + '@oxlint/binding-darwin-x64@1.62.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.62.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.62.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.62.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.62.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.62.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.62.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.62.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.62.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.62.0': + optional: true + '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} @@ -4040,6 +4244,28 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc': 0.47.0 '@oxfmt/binding-win32-x64-msvc': 0.47.0 + oxlint@1.62.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.62.0 + '@oxlint/binding-android-arm64': 1.62.0 + '@oxlint/binding-darwin-arm64': 1.62.0 + '@oxlint/binding-darwin-x64': 1.62.0 + '@oxlint/binding-freebsd-x64': 1.62.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.62.0 + '@oxlint/binding-linux-arm-musleabihf': 1.62.0 + '@oxlint/binding-linux-arm64-gnu': 1.62.0 + '@oxlint/binding-linux-arm64-musl': 1.62.0 + '@oxlint/binding-linux-ppc64-gnu': 1.62.0 + '@oxlint/binding-linux-riscv64-gnu': 1.62.0 + '@oxlint/binding-linux-riscv64-musl': 1.62.0 + '@oxlint/binding-linux-s390x-gnu': 1.62.0 + '@oxlint/binding-linux-x64-gnu': 1.62.0 + '@oxlint/binding-linux-x64-musl': 1.62.0 + '@oxlint/binding-openharmony-arm64': 1.62.0 + '@oxlint/binding-win32-arm64-msvc': 1.62.0 + '@oxlint/binding-win32-ia32-msvc': 1.62.0 + '@oxlint/binding-win32-x64-msvc': 1.62.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 From cedcb1af6815c47014f6b01a1df4c5d8fbe551d0 Mon Sep 17 00:00:00 2001 From: Marco Comi Date: Thu, 30 Apr 2026 12:48:02 +0200 Subject: [PATCH 2/3] Create oxlint package --- infra/oxfmt.config.mjs | 3 + infra/oxlint.config.mjs | 13 ++++ infra/package.json | 9 ++- package.json | 12 +-- packages/eslint-config/oxfmt.config.ts | 3 + packages/eslint-config/oxlint.config.ts | 8 ++ packages/eslint-config/package.json | 11 +++ packages/oxc-config/oxfmt.config.ts | 3 + packages/oxc-config/oxlint.config.ts | 8 ++ packages/oxc-config/oxlint.js | 9 --- packages/oxc-config/package.json | 10 +++ packages/prettier-config/oxfmt.config.ts | 3 + packages/prettier-config/oxlint.config.ts | 8 ++ packages/prettier-config/package.json | 12 +++ packages/skills/oxfmt.config.ts | 3 + packages/skills/oxlint.config.ts | 8 ++ packages/skills/package.json | 10 ++- packages/tsconfig/oxfmt.config.ts | 3 + packages/tsconfig/oxlint.config.ts | 8 ++ packages/tsconfig/package.json | 12 +++ packages/vitest-config/oxfmt.config.ts | 3 + packages/vitest-config/oxlint.config.ts | 8 ++ packages/vitest-config/package.json | 11 +++ pnpm-lock.yaml | 89 ++++++++++++++++++++--- pnpm-workspace.yaml | 6 ++ turbo.json | 11 ++- 26 files changed, 255 insertions(+), 29 deletions(-) create mode 100644 infra/oxfmt.config.mjs create mode 100644 infra/oxlint.config.mjs create mode 100644 packages/eslint-config/oxfmt.config.ts create mode 100644 packages/eslint-config/oxlint.config.ts create mode 100644 packages/oxc-config/oxfmt.config.ts create mode 100644 packages/oxc-config/oxlint.config.ts create mode 100644 packages/prettier-config/oxfmt.config.ts create mode 100644 packages/prettier-config/oxlint.config.ts create mode 100644 packages/skills/oxfmt.config.ts create mode 100644 packages/skills/oxlint.config.ts create mode 100644 packages/tsconfig/oxfmt.config.ts create mode 100644 packages/tsconfig/oxlint.config.ts create mode 100644 packages/vitest-config/oxfmt.config.ts create mode 100644 packages/vitest-config/oxlint.config.ts diff --git a/infra/oxfmt.config.mjs b/infra/oxfmt.config.mjs new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/infra/oxfmt.config.mjs @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/infra/oxlint.config.mjs b/infra/oxlint.config.mjs new file mode 100644 index 0000000..c32ed03 --- /dev/null +++ b/infra/oxlint.config.mjs @@ -0,0 +1,13 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, + rules: { + ...config.rules, + 'no-new': 'off', + }, + overrides: [...(config.overrides || [])], +}; diff --git a/infra/package.json b/infra/package.json index d2c558b..19ec68e 100644 --- a/infra/package.json +++ b/infra/package.json @@ -7,8 +7,10 @@ "scripts": { "build": "tsc --noEmit", "typecheck": "tsc --noEmit", - "lint": "echo 'no lint configured for infra'", - "format:check": "oxfmt --check", + "format": "oxfmt --config oxfmt.config.mjs", + "format:check": "oxfmt --check --config oxfmt.config.mjs", + "lint": "oxlint -c oxlint.config.mjs --fix", + "lint:check": "oxlint -c oxlint.config.mjs", "test": "echo 'no infra tests'", "preview": "pulumi preview", "up": "pulumi up", @@ -19,7 +21,10 @@ "@pulumi/pulumi": "^3.140.0" }, "devDependencies": { + "@kin0992/oxc-config": "workspace:*", "@types/node": "^22.10.2", + "oxfmt": "catalog:core", + "oxlint": "catalog:core", "typescript": "^5.7.2" } } diff --git a/package.json b/package.json index f1c10ab..15802be 100644 --- a/package.json +++ b/package.json @@ -12,13 +12,13 @@ "type": "module", "scripts": { "build": "turbo run build", - "lint": "pnpm lint:oxlint && turbo run lint", - "lint:oxlint": "oxlint .", + "lint": "turbo run lint", + "lint:check": "turbo run lint:check", "format": "oxfmt", "format:check": "oxfmt --check", "test": "turbo run test", "typecheck": "turbo run typecheck", - "code-review": "pnpm format:check && pnpm typecheck && pnpm lint && pnpm test", + "code-review": "pnpm format:check && pnpm typecheck && pnpm lint:check && pnpm test", "changeset": "changeset", "version-packages": "changeset version", "release": "turbo run build && changeset publish" @@ -26,10 +26,10 @@ "devDependencies": { "@changesets/cli": "^2.31.0", "@kin0992/oxc-config": "workspace:*", - "oxfmt": "^0.47.0", - "oxlint": "^1.62.0", + "oxfmt": "catalog:core", + "oxlint": "catalog:core", "turbo": "^2.9.6", - "typescript": "^5.9.3" + "typescript": "catalog:core" }, "engines": { "node": ">=22.0.0", diff --git a/packages/eslint-config/oxfmt.config.ts b/packages/eslint-config/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/packages/eslint-config/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/packages/eslint-config/oxlint.config.ts b/packages/eslint-config/oxlint.config.ts new file mode 100644 index 0000000..1b55f66 --- /dev/null +++ b/packages/eslint-config/oxlint.config.ts @@ -0,0 +1,8 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, +}; diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index f542bca..e66ffac 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -21,11 +21,22 @@ "access": "restricted", "registry": "https://npm.pkg.github.com" }, + "scripts": { + "format": "oxfmt", + "format:check": "oxfmt --check", + "lint": "oxlint", + "lint:check": "oxlint" + }, "dependencies": { "@eslint/js": "^9.17.0", "eslint-config-prettier": "^9.1.0", "typescript-eslint": "^8.18.2" }, + "devDependencies": { + "@kin0992/oxc-config": "workspace:*", + "oxfmt": "catalog:core", + "oxlint": "catalog:core" + }, "peerDependencies": { "eslint": "^9.0.0" } diff --git a/packages/oxc-config/oxfmt.config.ts b/packages/oxc-config/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/packages/oxc-config/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/packages/oxc-config/oxlint.config.ts b/packages/oxc-config/oxlint.config.ts new file mode 100644 index 0000000..1b55f66 --- /dev/null +++ b/packages/oxc-config/oxlint.config.ts @@ -0,0 +1,8 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, +}; diff --git a/packages/oxc-config/oxlint.js b/packages/oxc-config/oxlint.js index fad4520..956e28e 100644 --- a/packages/oxc-config/oxlint.js +++ b/packages/oxc-config/oxlint.js @@ -9,9 +9,6 @@ export default { es2024: true, }, ignorePatterns: ['dist/**', 'build/**', 'coverage/**', '.turbo/**', 'node_modules/**'], - options: { - reportUnusedDisableDirectives: 'error', - }, rules: { 'eslint/prefer-const': 'error', 'import/no-cycle': 'error', @@ -28,11 +25,5 @@ export default { 'typescript/no-explicit-any': 'off', }, }, - { - files: ['infra/**/*.ts'], - rules: { - 'no-new': 'off', - }, - }, ], }; diff --git a/packages/oxc-config/package.json b/packages/oxc-config/package.json index 2922042..89be3eb 100644 --- a/packages/oxc-config/package.json +++ b/packages/oxc-config/package.json @@ -22,6 +22,16 @@ "access": "restricted", "registry": "https://npm.pkg.github.com" }, + "scripts": { + "format": "oxfmt", + "format:check": "oxfmt --check", + "lint": "oxlint --fix", + "lint:check": "oxlint" + }, + "devDependencies": { + "oxfmt": "catalog:core", + "oxlint": "catalog:core" + }, "peerDependencies": { "oxfmt": "^0.47.0", "oxlint": "^1.62.0" diff --git a/packages/prettier-config/oxfmt.config.ts b/packages/prettier-config/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/packages/prettier-config/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/packages/prettier-config/oxlint.config.ts b/packages/prettier-config/oxlint.config.ts new file mode 100644 index 0000000..1b55f66 --- /dev/null +++ b/packages/prettier-config/oxlint.config.ts @@ -0,0 +1,8 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, +}; diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json index d5d8e66..188f88c 100644 --- a/packages/prettier-config/package.json +++ b/packages/prettier-config/package.json @@ -12,9 +12,21 @@ "index.json", "README.md" ], + "type": "module", "main": "index.json", "publishConfig": { "access": "restricted", "registry": "https://npm.pkg.github.com" + }, + "scripts": { + "format": "oxfmt", + "format:check": "oxfmt --check", + "lint": "oxlint", + "lint:check": "oxlint" + }, + "devDependencies": { + "@kin0992/oxc-config": "workspace:*", + "oxfmt": "catalog:core", + "oxlint": "catalog:core" } } diff --git a/packages/skills/oxfmt.config.ts b/packages/skills/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/packages/skills/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/packages/skills/oxlint.config.ts b/packages/skills/oxlint.config.ts new file mode 100644 index 0000000..1b55f66 --- /dev/null +++ b/packages/skills/oxlint.config.ts @@ -0,0 +1,8 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, +}; diff --git a/packages/skills/package.json b/packages/skills/package.json index 5189c80..1705609 100644 --- a/packages/skills/package.json +++ b/packages/skills/package.json @@ -12,6 +12,7 @@ "src/**", "README.md" ], + "type": "module", "exports": { "./commit-message": "./src/commit-message/SKILL.md", "./pr-title-description": "./src/pr-title-description/SKILL.md", @@ -23,7 +24,14 @@ "registry": "https://npm.pkg.github.com" }, "scripts": { + "format": "oxfmt", "format:check": "oxfmt --check", - "format": "oxfmt --write" + "lint": "oxlint", + "lint:check": "oxlint" + }, + "devDependencies": { + "@kin0992/oxc-config": "workspace:*", + "oxfmt": "catalog:core", + "oxlint": "catalog:core" } } diff --git a/packages/tsconfig/oxfmt.config.ts b/packages/tsconfig/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/packages/tsconfig/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/packages/tsconfig/oxlint.config.ts b/packages/tsconfig/oxlint.config.ts new file mode 100644 index 0000000..1b55f66 --- /dev/null +++ b/packages/tsconfig/oxlint.config.ts @@ -0,0 +1,8 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, +}; diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json index 350f09f..f40dd2d 100644 --- a/packages/tsconfig/package.json +++ b/packages/tsconfig/package.json @@ -14,6 +14,7 @@ "library.json", "README.md" ], + "type": "module", "exports": { "./base": "./base.json", "./node": "./node.json", @@ -22,5 +23,16 @@ "publishConfig": { "access": "restricted", "registry": "https://npm.pkg.github.com" + }, + "scripts": { + "format": "oxfmt", + "format:check": "oxfmt --check", + "lint": "oxlint", + "lint:check": "oxlint" + }, + "devDependencies": { + "@kin0992/oxc-config": "workspace:*", + "oxfmt": "catalog:core", + "oxlint": "catalog:core" } } diff --git a/packages/vitest-config/oxfmt.config.ts b/packages/vitest-config/oxfmt.config.ts new file mode 100644 index 0000000..22667ad --- /dev/null +++ b/packages/vitest-config/oxfmt.config.ts @@ -0,0 +1,3 @@ +import config from '@kin0992/oxc-config/oxfmt'; + +export default config; diff --git a/packages/vitest-config/oxlint.config.ts b/packages/vitest-config/oxlint.config.ts new file mode 100644 index 0000000..1b55f66 --- /dev/null +++ b/packages/vitest-config/oxlint.config.ts @@ -0,0 +1,8 @@ +import config from '@kin0992/oxc-config/oxlint'; + +export default { + ...config, + options: { + reportUnusedDisableDirectives: 'error', + }, +}; diff --git a/packages/vitest-config/package.json b/packages/vitest-config/package.json index dc03733..ef5c9ca 100644 --- a/packages/vitest-config/package.json +++ b/packages/vitest-config/package.json @@ -20,6 +20,17 @@ "access": "restricted", "registry": "https://npm.pkg.github.com" }, + "scripts": { + "format": "oxfmt", + "format:check": "oxfmt --check", + "lint": "oxlint", + "lint:check": "oxlint" + }, + "devDependencies": { + "@kin0992/oxc-config": "workspace:*", + "oxfmt": "catalog:core", + "oxlint": "catalog:core" + }, "peerDependencies": { "vitest": "^2.0.0 || ^3.0.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa4d53f..fc956a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,18 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + core: + oxfmt: + specifier: ^0.47.0 + version: 0.47.0 + oxlint: + specifier: ^1.62.0 + version: 1.62.0 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + importers: .: @@ -15,16 +27,16 @@ importers: specifier: workspace:* version: link:packages/oxc-config oxfmt: - specifier: ^0.47.0 + specifier: catalog:core version: 0.47.0 oxlint: - specifier: ^1.62.0 + specifier: catalog:core version: 1.62.0 turbo: specifier: ^2.9.6 version: 2.9.6 typescript: - specifier: ^5.9.3 + specifier: catalog:core version: 5.9.3 infra: @@ -36,9 +48,18 @@ importers: specifier: ^3.140.0 version: 3.232.0(typescript@5.9.3) devDependencies: + '@kin0992/oxc-config': + specifier: workspace:* + version: link:../packages/oxc-config '@types/node': specifier: ^22.10.2 version: 22.19.17 + oxfmt: + specifier: catalog:core + version: 0.47.0 + oxlint: + specifier: catalog:core + version: 1.62.0 typescript: specifier: ^5.7.2 version: 5.9.3 @@ -57,27 +78,77 @@ importers: typescript-eslint: specifier: ^8.18.2 version: 8.59.1(eslint@9.39.4)(typescript@5.9.3) + devDependencies: + '@kin0992/oxc-config': + specifier: workspace:* + version: link:../oxc-config + oxfmt: + specifier: catalog:core + version: 0.47.0 + oxlint: + specifier: catalog:core + version: 1.62.0 packages/oxc-config: - dependencies: + devDependencies: oxfmt: - specifier: ^0.47.0 + specifier: catalog:core version: 0.47.0 oxlint: - specifier: ^1.62.0 + specifier: catalog:core version: 1.62.0 - packages/prettier-config: {} + packages/prettier-config: + devDependencies: + '@kin0992/oxc-config': + specifier: workspace:* + version: link:../oxc-config + oxfmt: + specifier: catalog:core + version: 0.47.0 + oxlint: + specifier: catalog:core + version: 1.62.0 - packages/skills: {} + packages/skills: + devDependencies: + '@kin0992/oxc-config': + specifier: workspace:* + version: link:../oxc-config + oxfmt: + specifier: catalog:core + version: 0.47.0 + oxlint: + specifier: catalog:core + version: 1.62.0 - packages/tsconfig: {} + packages/tsconfig: + devDependencies: + '@kin0992/oxc-config': + specifier: workspace:* + version: link:../oxc-config + oxfmt: + specifier: catalog:core + version: 0.47.0 + oxlint: + specifier: catalog:core + version: 1.62.0 packages/vitest-config: dependencies: vitest: specifier: ^2.0.0 || ^3.0.0 version: 3.2.4(@types/node@22.19.17) + devDependencies: + '@kin0992/oxc-config': + specifier: workspace:* + version: link:../oxc-config + oxfmt: + specifier: catalog:core + version: 0.47.0 + oxlint: + specifier: catalog:core + version: 1.62.0 packages: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a8eea85..86ef860 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,9 @@ packages: - 'packages/*' - 'infra' + +catalogs: + core: + typescript: ^5.9.3 + oxfmt: ^0.47.0 + oxlint: ^1.62.0 diff --git a/turbo.json b/turbo.json index 6e83d5b..0625c10 100644 --- a/turbo.json +++ b/turbo.json @@ -9,6 +9,9 @@ "lint": { "dependsOn": ["^build"] }, + "lint:check": { + "dependsOn": ["^build"] + }, "typecheck": { "dependsOn": ["^build"] }, @@ -16,7 +19,11 @@ "dependsOn": ["^build"], "outputs": ["coverage/**"] }, - "format:check": {}, - "format": {} + "format:check": { + "dependsOn": ["^build"] + }, + "format": { + "dependsOn": ["^build"] + } } } From 8c3bb798de6d0662f16f65841822d0ecc2e6fc01 Mon Sep 17 00:00:00 2001 From: Marco Comi Date: Thu, 30 Apr 2026 12:52:00 +0200 Subject: [PATCH 3/3] Add changelog --- .changeset/beige-icons-study.md | 10 ++++++++++ .changeset/sweet-ghosts-own.md | 5 +++++ 2 files changed, 15 insertions(+) create mode 100644 .changeset/beige-icons-study.md create mode 100644 .changeset/sweet-ghosts-own.md diff --git a/.changeset/beige-icons-study.md b/.changeset/beige-icons-study.md new file mode 100644 index 0000000..e76ee27 --- /dev/null +++ b/.changeset/beige-icons-study.md @@ -0,0 +1,10 @@ +--- +'@kin0992/prettier-config': patch +'@kin0992/eslint-config': patch +'@kin0992/vitest-config': patch +'@kin0992/tsconfig': patch +'@kin0992/skills': patch +'dev-toolkit-infra': patch +--- + +Format code using new code style rules diff --git a/.changeset/sweet-ghosts-own.md b/.changeset/sweet-ghosts-own.md new file mode 100644 index 0000000..0b7f751 --- /dev/null +++ b/.changeset/sweet-ghosts-own.md @@ -0,0 +1,5 @@ +--- +'@kin0992/oxc-config': minor +--- + +Create new oxlint and oxformat configuration to share across projects