diff --git a/.changeset/oxfmt-config.md b/.changeset/oxfmt-config.md new file mode 100644 index 00000000..0bccf559 --- /dev/null +++ b/.changeset/oxfmt-config.md @@ -0,0 +1,5 @@ +--- +'@tanstack/oxfmt-config': minor +--- + +Add `@tanstack/oxfmt-config`, a shared Oxfmt config used by TanStack projects diff --git a/.github/comment-on-release/comment-on-release.ts b/.github/comment-on-release/comment-on-release.ts index 60dfe0b2..c29f2142 100644 --- a/.github/comment-on-release/comment-on-release.ts +++ b/.github/comment-on-release/comment-on-release.ts @@ -1,8 +1,8 @@ #!/usr/bin/env node +import { execSync } from 'node:child_process' import { readFileSync } from 'node:fs' import { resolve } from 'node:path' -import { execSync } from 'node:child_process' interface PublishedPackage { name: string diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index dadc4de4..00000000 --- a/.prettierignore +++ /dev/null @@ -1,7 +0,0 @@ -**/.next -**/.nx/cache -**/.svelte-kit -**/coverage -**/dist -**/snap -pnpm-lock.yaml diff --git a/docs/config.json b/docs/config.json index 4fbcdf83..742cb26c 100644 --- a/docs/config.json +++ b/docs/config.json @@ -22,6 +22,10 @@ "label": "Oxlint", "to": "oxlint" }, + { + "label": "Oxfmt", + "to": "oxfmt" + }, { "label": "ESLint", "to": "eslint" diff --git a/docs/overview.md b/docs/overview.md index bd4af340..85000c3b 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -19,6 +19,7 @@ The following tools are required to use these packages: ## Utilities - [Oxlint](./oxlint.md) +- [Oxfmt](./oxfmt.md) - [ESLint](./eslint.md) - [Publish](./publish.md) - [Vite](./vite.md) diff --git a/docs/oxfmt.md b/docs/oxfmt.md new file mode 100644 index 00000000..38e24db8 --- /dev/null +++ b/docs/oxfmt.md @@ -0,0 +1,37 @@ +--- +id: oxfmt +title: Oxfmt +--- + +## Purpose + +This package unifies the shared [Oxfmt](https://oxc.rs/docs/guide/usage/formatter) config used across all TanStack projects. + +## Installation + +To install the package, run the following command: + +```bash +pnpm add -D @tanstack/oxfmt-config +``` + +## Setup + +### package.json + +- Make sure you have Oxfmt v0.72.0+ installed + +### oxfmt.config.ts + +```ts +import { tanstackConfig } from '@tanstack/oxfmt-config' +import { defineConfig } from 'oxfmt' + +export default defineConfig({ + ...tanstackConfig, + ignorePatterns: [ + ...tanstackConfig.ignorePatterns, + // Custom ignore patterns go here + ], +}) +``` diff --git a/docs/vite.md b/docs/vite.md index 942086f0..4fa4e836 100644 --- a/docs/vite.md +++ b/docs/vite.md @@ -74,8 +74,8 @@ The build config is opinionated, and was designed to work with our internal libr - See an example below: ```ts -import { defineConfig, mergeConfig } from 'vite' import { tanstackViteConfig } from '@tanstack/vite-config' +import { defineConfig, mergeConfig } from 'vite' const config = defineConfig({ // Framework plugins, vitest config, etc. diff --git a/integrations/react/tests/build.test.ts b/integrations/react/tests/build.test.ts index 4a1aa998..d4fdc5cb 100644 --- a/integrations/react/tests/build.test.ts +++ b/integrations/react/tests/build.test.ts @@ -1,6 +1,6 @@ import { existsSync, readFileSync, readdirSync } from 'node:fs' -import { fileURLToPath } from 'node:url' import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' const __dirname = dirname(fileURLToPath(import.meta.url)) diff --git a/integrations/react/vite.config.ts b/integrations/react/vite.config.ts index 2155f9e3..633d1c8a 100644 --- a/integrations/react/vite.config.ts +++ b/integrations/react/vite.config.ts @@ -1,6 +1,6 @@ -import { defineConfig, mergeConfig } from 'vitest/config' -import react from '@vitejs/plugin-react' import { tanstackViteConfig } from '@tanstack/vite-config' +import react from '@vitejs/plugin-react' +import { defineConfig, mergeConfig } from 'vitest/config' const config = defineConfig({ plugins: [react()], diff --git a/integrations/vanilla/tests/build.test.ts b/integrations/vanilla/tests/build.test.ts index c01e177c..3a560ab5 100644 --- a/integrations/vanilla/tests/build.test.ts +++ b/integrations/vanilla/tests/build.test.ts @@ -1,6 +1,6 @@ import { existsSync, readFileSync, readdirSync } from 'node:fs' -import { fileURLToPath } from 'node:url' import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' const __dirname = dirname(fileURLToPath(import.meta.url)) diff --git a/integrations/vanilla/vite.config.ts b/integrations/vanilla/vite.config.ts index fa867a34..52c66949 100644 --- a/integrations/vanilla/vite.config.ts +++ b/integrations/vanilla/vite.config.ts @@ -1,5 +1,5 @@ -import { defineConfig, mergeConfig } from 'vitest/config' import { tanstackViteConfig } from '@tanstack/vite-config' +import { defineConfig, mergeConfig } from 'vitest/config' const config = defineConfig({ test: { diff --git a/integrations/vue/tests/build.test.ts b/integrations/vue/tests/build.test.ts index 49114614..0caccf00 100644 --- a/integrations/vue/tests/build.test.ts +++ b/integrations/vue/tests/build.test.ts @@ -1,6 +1,6 @@ import { existsSync, readFileSync, readdirSync } from 'node:fs' -import { fileURLToPath } from 'node:url' import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' const __dirname = dirname(fileURLToPath(import.meta.url)) diff --git a/integrations/vue/vite.config.ts b/integrations/vue/vite.config.ts index 6b745932..7a4778bd 100644 --- a/integrations/vue/vite.config.ts +++ b/integrations/vue/vite.config.ts @@ -1,6 +1,6 @@ -import { defineConfig, mergeConfig } from 'vitest/config' -import vue from '@vitejs/plugin-vue' import { tanstackViteConfig } from '@tanstack/vite-config' +import vue from '@vitejs/plugin-vue' +import { defineConfig, mergeConfig } from 'vitest/config' const config = defineConfig({ plugins: [vue()], diff --git a/oxfmt.config.ts b/oxfmt.config.ts new file mode 100644 index 00000000..6c5cabed --- /dev/null +++ b/oxfmt.config.ts @@ -0,0 +1,7 @@ +import { tanstackConfig } from '@tanstack/oxfmt-config' +import { defineConfig } from 'oxfmt' + +export default defineConfig({ + ...tanstackConfig, + ignorePatterns: [...tanstackConfig.ignorePatterns, '**/snap'], +}) diff --git a/package.json b/package.json index 959f4104..00f6943d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "build:all": "nx run-many --target=build", "watch": "pnpm run build:all && nx watch --all -- pnpm run build:all", "dev": "pnpm run watch", - "format": "prettier --experimental-cli --ignore-unknown '**/*' --write", + "format": "oxfmt", "changeset": "changeset", "changeset:version": "changeset version && pnpm install --no-frozen-lockfile && pnpm format", "changeset:publish": "changeset publish" @@ -39,12 +39,13 @@ "@arethetypeswrong/core": "catalog:", "@changesets/changelog-github": "catalog:", "@changesets/cli": "catalog:", + "@tanstack/oxfmt-config": "workspace:*", "@types/node": "catalog:", "jsdom": "catalog:", "markdown-link-extractor": "catalog:", "nx": "catalog:", + "oxfmt": "catalog:", "premove": "catalog:", - "prettier": "catalog:", "publint": "catalog:", "sherif": "catalog:", "tinyglobby": "catalog:", diff --git a/packages/eslint-config/oxlint.config.ts b/packages/eslint-config/oxlint.config.ts index ec224f08..6f1e9ab9 100644 --- a/packages/eslint-config/oxlint.config.ts +++ b/packages/eslint-config/oxlint.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from 'oxlint' import { tanstackConfig } from '@tanstack/oxlint-config' +import { defineConfig } from 'oxlint' export default defineConfig({ extends: [tanstackConfig], diff --git a/packages/eslint-config/src/index.ts b/packages/eslint-config/src/index.ts index 9d303c56..820b4708 100644 --- a/packages/eslint-config/src/index.ts +++ b/packages/eslint-config/src/index.ts @@ -1,14 +1,14 @@ -import tseslint from 'typescript-eslint' -import vueParser from 'vue-eslint-parser' import stylisticPlugin from '@stylistic/eslint-plugin' import importPlugin from 'eslint-plugin-import-x' import nodePlugin from 'eslint-plugin-n' import globals from 'globals' -import { javascriptRules } from './javascript.js' +import tseslint from 'typescript-eslint' +import vueParser from 'vue-eslint-parser' import { importRules } from './import.js' -import { typescriptRules } from './typescript.js' +import { javascriptRules } from './javascript.js' import { nodeRules } from './node.js' import { stylisticRules } from './stylistic.js' +import { typescriptRules } from './typescript.js' import type { Linter } from 'eslint' const GLOB_EXCLUDE = [ diff --git a/packages/oxfmt-config/oxlint.config.ts b/packages/oxfmt-config/oxlint.config.ts new file mode 100644 index 00000000..6f1e9ab9 --- /dev/null +++ b/packages/oxfmt-config/oxlint.config.ts @@ -0,0 +1,8 @@ +import { tanstackConfig } from '@tanstack/oxlint-config' +import { defineConfig } from 'oxlint' + +export default defineConfig({ + extends: [tanstackConfig], + env: tanstackConfig.env, + ignorePatterns: tanstackConfig.ignorePatterns, +}) diff --git a/packages/oxfmt-config/package.json b/packages/oxfmt-config/package.json new file mode 100644 index 00000000..d9e293e3 --- /dev/null +++ b/packages/oxfmt-config/package.json @@ -0,0 +1,52 @@ +{ + "name": "@tanstack/oxfmt-config", + "version": "0.0.0", + "description": "Shared Oxfmt config used by TanStack projects.", + "author": "tannerlinsley", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/TanStack/config.git", + "directory": "packages/oxfmt-config" + }, + "homepage": "https://tanstack.com/config", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "scripts": { + "test:types": "tsc", + "test:oxlint": "oxlint ./src", + "build": "tsdown" + }, + "type": "module", + "types": "./dist/index.d.ts", + "exports": { + ".": "./src/index.ts", + "./package.json": "./package.json" + }, + "publishConfig": { + "exports": { + ".": "./dist/index.js", + "./package.json": "./package.json" + } + }, + "preferGlobal": false, + "sideEffects": false, + "files": [ + "dist", + "src" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "devDependencies": { + "@tanstack/oxlint-config": "workspace:*", + "oxfmt": "catalog:", + "oxlint": "catalog:", + "oxlint-tsgolint": "catalog:" + }, + "peerDependencies": { + "oxfmt": ">=0.72.0 <1.0.0" + } +} diff --git a/packages/oxfmt-config/src/index.ts b/packages/oxfmt-config/src/index.ts new file mode 100644 index 00000000..9110dadd --- /dev/null +++ b/packages/oxfmt-config/src/index.ts @@ -0,0 +1,47 @@ +import type { OxfmtConfig } from 'oxfmt' + +const GLOB_EXCLUDE = [ + '**/.next', + '**/.nx/cache', + '**/.svelte-kit', + '**/build', + '**/coverage', + '**/dist', + '.changeset/*.md', + 'pnpm-lock.yaml', +] + +/** + * @see https://oxc.rs/docs/guide/usage/formatter/config-file-reference + */ +export const tanstackConfig: OxfmtConfig & { ignorePatterns: Array } = { + semi: false, + singleQuote: true, + trailingComma: 'all', + printWidth: 80, + sortPackageJson: false, + /** Matches `import/order` from `@tanstack/eslint-config` */ + sortImports: { + /** Same group order as `import/order`, with type imports split by origin */ + groups: [ + 'builtin', + 'external', + ['internal', 'subpath'], + 'parent', + 'sibling', + 'index', + 'type-builtin', + 'type-external', + ['type-internal', 'type-subpath'], + 'type-parent', + 'type-sibling', + 'type-index', + 'unknown', + ], + /** `import/order` does not enforce newlines between groups */ + newlinesBetween: false, + /** Case-sensitive, like `sort-imports` */ + ignoreCase: false, + }, + ignorePatterns: GLOB_EXCLUDE, +} diff --git a/packages/oxfmt-config/tsconfig.json b/packages/oxfmt-config/tsconfig.json new file mode 100644 index 00000000..f6f3147e --- /dev/null +++ b/packages/oxfmt-config/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "allowImportingTsExtensions": true, + "isolatedDeclarations": true + }, + "include": ["src"] +} diff --git a/packages/oxfmt-config/tsdown.config.ts b/packages/oxfmt-config/tsdown.config.ts new file mode 100644 index 00000000..65975f6d --- /dev/null +++ b/packages/oxfmt-config/tsdown.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + entry: ['./src/index.ts'], + format: ['esm'], + platform: 'node', + unbundle: true, + dts: true, + sourcemap: true, + clean: true, + minify: false, + fixedExtension: false, + exports: { + devExports: true, + }, + publint: { + strict: true, + }, + attw: { + profile: 'esm-only', + level: 'error', + }, +}) diff --git a/packages/oxlint-config/oxlint.config.ts b/packages/oxlint-config/oxlint.config.ts index ec224f08..6f1e9ab9 100644 --- a/packages/oxlint-config/oxlint.config.ts +++ b/packages/oxlint-config/oxlint.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from 'oxlint' import { tanstackConfig } from '@tanstack/oxlint-config' +import { defineConfig } from 'oxlint' export default defineConfig({ extends: [tanstackConfig], diff --git a/packages/oxlint-config/src/index.ts b/packages/oxlint-config/src/index.ts index c3deb061..7c652d56 100644 --- a/packages/oxlint-config/src/index.ts +++ b/packages/oxlint-config/src/index.ts @@ -1,9 +1,9 @@ import { fileURLToPath } from 'node:url' import { defineConfig } from 'oxlint' -import { javascriptRules } from './javascript.ts' import { importRules } from './import.ts' -import { typescriptRules } from './typescript.ts' +import { javascriptRules } from './javascript.ts' import { nodeRules } from './node.ts' +import { typescriptRules } from './typescript.ts' import type { OxlintConfig } from 'oxlint' /** diff --git a/packages/publish-config/oxlint.config.ts b/packages/publish-config/oxlint.config.ts index ec224f08..6f1e9ab9 100644 --- a/packages/publish-config/oxlint.config.ts +++ b/packages/publish-config/oxlint.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from 'oxlint' import { tanstackConfig } from '@tanstack/oxlint-config' +import { defineConfig } from 'oxlint' export default defineConfig({ extends: [tanstackConfig], diff --git a/packages/publish-config/src/index.js b/packages/publish-config/src/index.js index ca5244b5..767da9c7 100644 --- a/packages/publish-config/src/index.js +++ b/packages/publish-config/src/index.js @@ -1,12 +1,12 @@ // @ts-check // Originally ported to TS from https://github.com/remix-run/react-router/tree/main/scripts/{version,publish}.js -import path from 'node:path' import { execSync } from 'node:child_process' import { existsSync, readdirSync } from 'node:fs' import { platform } from 'node:os' -import * as semver from 'semver' +import path from 'node:path' import { parse as parseCommit } from '@commitlint/parse' +import * as semver from 'semver' import { simpleGit } from 'simple-git' import { capitalize, diff --git a/packages/typedoc-config/oxlint.config.ts b/packages/typedoc-config/oxlint.config.ts index ec224f08..6f1e9ab9 100644 --- a/packages/typedoc-config/oxlint.config.ts +++ b/packages/typedoc-config/oxlint.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from 'oxlint' import { tanstackConfig } from '@tanstack/oxlint-config' +import { defineConfig } from 'oxlint' export default defineConfig({ extends: [tanstackConfig], diff --git a/packages/typedoc-config/src/index.ts b/packages/typedoc-config/src/index.ts index f4a41a26..400346c6 100644 --- a/packages/typedoc-config/src/index.ts +++ b/packages/typedoc-config/src/index.ts @@ -1,6 +1,6 @@ +import { mkdir, rm } from 'node:fs/promises' import { resolve } from 'node:path' import { fileURLToPath } from 'node:url' -import { mkdir, rm } from 'node:fs/promises' import * as TypeDoc from 'typedoc' import type { PluginOptions } from 'typedoc-plugin-markdown' import type { Options } from './types.ts' diff --git a/packages/vite-config/oxlint.config.ts b/packages/vite-config/oxlint.config.ts index ec224f08..6f1e9ab9 100644 --- a/packages/vite-config/oxlint.config.ts +++ b/packages/vite-config/oxlint.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from 'oxlint' import { tanstackConfig } from '@tanstack/oxlint-config' +import { defineConfig } from 'oxlint' export default defineConfig({ extends: [tanstackConfig], diff --git a/packages/vite-config/src/index.ts b/packages/vite-config/src/index.ts index 3db96617..dc197fef 100644 --- a/packages/vite-config/src/index.ts +++ b/packages/vite-config/src/index.ts @@ -1,9 +1,9 @@ // @ts-check import { defineConfig } from 'vite' +import dts from 'vite-plugin-dts' import { externalizeDeps } from 'vite-plugin-externalize-deps' import tsconfigPaths from 'vite-tsconfig-paths' -import dts from 'vite-plugin-dts' import type { UserConfig } from 'vite' import type { Options } from './types.js' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0bcf0210..e006a9c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -239,6 +239,9 @@ catalogs: nx: specifier: 24.0.2 version: 24.0.2 + oxfmt: + specifier: ^0.72.0 + version: 0.72.0 oxlint: specifier: ^1.87.0 version: 1.92.0 @@ -248,9 +251,6 @@ catalogs: premove: specifier: ^4.0.0 version: 4.0.0 - prettier: - specifier: ^3.9.10 - version: 3.9.10 publint: specifier: ^0.3.25 version: 0.3.25 @@ -328,6 +328,9 @@ importers: '@changesets/cli': specifier: 'catalog:' version: 3.0.3 + '@tanstack/oxfmt-config': + specifier: workspace:* + version: link:packages/oxfmt-config '@types/node': specifier: 'catalog:' version: 24.19.2 @@ -340,12 +343,12 @@ importers: nx: specifier: 'catalog:' version: 24.0.2 + oxfmt: + specifier: 'catalog:' + version: 0.72.0 premove: specifier: 'catalog:' version: 4.0.0 - prettier: - specifier: 'catalog:' - version: 3.9.10 publint: specifier: 'catalog:' version: 0.3.25 @@ -467,6 +470,21 @@ importers: specifier: 'catalog:' version: 7.0.2006 + packages/oxfmt-config: + devDependencies: + '@tanstack/oxlint-config': + specifier: workspace:* + version: link:../oxlint-config + oxfmt: + specifier: 'catalog:' + version: 0.72.0 + oxlint: + specifier: 'catalog:' + version: 1.92.0(oxlint-tsgolint@7.0.2006) + oxlint-tsgolint: + specifier: 'catalog:' + version: 7.0.2006 + packages/oxlint-config: dependencies: '@oxlint/plugins': @@ -950,6 +968,128 @@ packages: '@oxc-project/types@0.154.0': resolution: {integrity: sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==} + '@oxfmt/binding-android-arm-eabi@0.72.0': + resolution: {integrity: sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.72.0': + resolution: {integrity: sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.72.0': + resolution: {integrity: sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.72.0': + resolution: {integrity: sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.72.0': + resolution: {integrity: sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.72.0': + resolution: {integrity: sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.72.0': + resolution: {integrity: sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.72.0': + resolution: {integrity: sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.72.0': + resolution: {integrity: sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.72.0': + resolution: {integrity: sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.72.0': + resolution: {integrity: sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.72.0': + resolution: {integrity: sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.72.0': + resolution: {integrity: sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.72.0': + resolution: {integrity: sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.72.0': + resolution: {integrity: sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.72.0': + resolution: {integrity: sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.72.0': + resolution: {integrity: sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.72.0': + resolution: {integrity: sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.72.0': + resolution: {integrity: sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxlint-tsgolint/darwin-arm64@7.0.2006': resolution: {integrity: sha512-uc0MEHXZUDW23Zmo5X28eSNeSnP17jKnh9GiehpVZqhfy99ks8spyXT5Llar3tjDN7ppnQN0Qd9FK6WNkdD+fQ==} cpu: [arm64] @@ -2446,6 +2586,19 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + oxfmt@0.72.0: + resolution: {integrity: sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true + oxlint-tsgolint@7.0.2006: resolution: {integrity: sha512-5B3UtH71kycPHUC1kFEIffivEAs49SUmkJuHZOZnTY0NPj4legp0bcsCQucuLVNCoJzDucS68P2C4WIhP+LypQ==} hasBin: true @@ -2526,11 +2679,6 @@ packages: engines: {node: '>=6'} hasBin: true - prettier@3.9.10: - resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} - engines: {node: '>=14'} - hasBin: true - publint@0.3.25: resolution: {integrity: sha512-WMMbn/d7JqRlfXQL/JUI4n5skC8cJ5WVr8/wT5mmiYWkUdENkZr1I5rgs2+dQPVRgoJd+JRYtB46MTsuDylw9g==} engines: {node: '>=18'} @@ -2765,6 +2913,10 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + tinypool@2.2.0: + resolution: {integrity: sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==} + engines: {node: ^20.0.0 || >=22.0.0} + tldts-core@7.4.19: resolution: {integrity: sha512-goNXV6Ho9TIOfpJZanTd6CKG5DyYgYAL+k+22T0SLh8l6+KHIfBUPFuePuSZv05UttIaaLmI9tb7TmGIdK5AkQ==} @@ -3630,6 +3782,63 @@ snapshots: '@oxc-project/types@0.154.0': {} + '@oxfmt/binding-android-arm-eabi@0.72.0': + optional: true + + '@oxfmt/binding-android-arm64@0.72.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.72.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.72.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.72.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.72.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.72.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.72.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.72.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.72.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.72.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.72.0': + optional: true + '@oxlint-tsgolint/darwin-arm64@7.0.2006': optional: true @@ -5033,6 +5242,30 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + oxfmt@0.72.0: + dependencies: + tinypool: 2.2.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.72.0 + '@oxfmt/binding-android-arm64': 0.72.0 + '@oxfmt/binding-darwin-arm64': 0.72.0 + '@oxfmt/binding-darwin-x64': 0.72.0 + '@oxfmt/binding-freebsd-x64': 0.72.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.72.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.72.0 + '@oxfmt/binding-linux-arm64-gnu': 0.72.0 + '@oxfmt/binding-linux-arm64-musl': 0.72.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.72.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.72.0 + '@oxfmt/binding-linux-riscv64-musl': 0.72.0 + '@oxfmt/binding-linux-s390x-gnu': 0.72.0 + '@oxfmt/binding-linux-x64-gnu': 0.72.0 + '@oxfmt/binding-linux-x64-musl': 0.72.0 + '@oxfmt/binding-openharmony-arm64': 0.72.0 + '@oxfmt/binding-win32-arm64-msvc': 0.72.0 + '@oxfmt/binding-win32-ia32-msvc': 0.72.0 + '@oxfmt/binding-win32-x64-msvc': 0.72.0 + oxlint-tsgolint@7.0.2006: optionalDependencies: '@oxlint-tsgolint/darwin-arm64': 7.0.2006 @@ -5126,8 +5359,6 @@ snapshots: premove@4.0.0: {} - prettier@3.9.10: {} - publint@0.3.25: dependencies: '@publint/pack': 0.1.7 @@ -5334,6 +5565,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 + tinypool@2.2.0: {} + tldts-core@7.4.19: {} tldts@7.4.19: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ba9de916..3a344f78 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,10 +32,10 @@ catalog: jsonfile: ^6.2.1 markdown-link-extractor: ^4.0.4 nx: 24.0.2 + oxfmt: ^0.72.0 oxlint: ^1.87.0 oxlint-tsgolint: ^7.0.2003 premove: ^4.0.0 - prettier: ^3.9.10 publint: ^0.3.25 react: ^19.3.1 react-dom: ^19.3.1 diff --git a/prettier.config.js b/prettier.config.js deleted file mode 100644 index 2c53b10e..00000000 --- a/prettier.config.js +++ /dev/null @@ -1,10 +0,0 @@ -// @ts-check - -/** @type {import('prettier').Config} */ -const config = { - semi: false, - singleQuote: true, - trailingComma: 'all', -} - -export default config diff --git a/scripts/verify-links.ts b/scripts/verify-links.ts index ebfa412c..e6dc424c 100644 --- a/scripts/verify-links.ts +++ b/scripts/verify-links.ts @@ -1,8 +1,8 @@ import { existsSync, readFileSync, statSync } from 'node:fs' import { extname, resolve } from 'node:path' -import { glob } from 'tinyglobby' // @ts-ignore Could not find a declaration file for module 'markdown-link-extractor'. import markdownLinkExtractor from 'markdown-link-extractor' +import { glob } from 'tinyglobby' const errors: Array<{ file: string