Skip to content

Commit e7ac541

Browse files
update deps & migrate to oxlint/oxfmt (#805)
* update pnpm/deps * feat: add oxlint configuration for TypeScript and JavaScript * feat: add GitHub icon component and update imports * chore: remove unused ESLint plugins from package.json * chore: oxlint and oxlint-tsgolint to dev in package.json and pnpm-lock.yaml; rm prettier files * fix some issues
1 parent d46c374 commit e7ac541

34 files changed

+1533
-1860
lines changed

.oxfmtrc.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "./node_modules/oxfmt/configuration_schema.json",
3+
"semi": false,
4+
"singleQuote": true,
5+
"trailingComma": "all",
6+
"printWidth": 80,
7+
"sortPackageJson": false,
8+
"ignorePatterns": [
9+
"**/api",
10+
"**/build",
11+
"**/public",
12+
"pnpm-lock.yaml",
13+
"routeTree.gen.ts",
14+
"src/blog/tanstack-db-0.1-the-embedded-client-database-for-tanstack-query.md",
15+
".content-collections",
16+
".claude",
17+
"dist/**",
18+
".output/**"
19+
]
20+
}

.oxlintrc.json

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
{
2+
"$schema": "./node_modules/oxlint/configuration_schema.json",
3+
"plugins": ["typescript"],
4+
"categories": {
5+
"correctness": "off"
6+
},
7+
"options": {
8+
"typeAware": true,
9+
"typeCheck": true
10+
},
11+
"env": {
12+
"builtin": true
13+
},
14+
"ignorePatterns": [
15+
"node_modules",
16+
"dist",
17+
"build",
18+
".content-collections",
19+
".tanstack-start",
20+
".netlify",
21+
"public",
22+
"convex/.temp"
23+
],
24+
"rules": {
25+
"no-array-constructor": "error",
26+
"no-unused-expressions": "error",
27+
"no-unused-vars": "error",
28+
"typescript/ban-ts-comment": "error",
29+
"typescript/no-duplicate-enum-values": "error",
30+
"typescript/no-empty-object-type": "error",
31+
"typescript/no-explicit-any": "error",
32+
"typescript/no-extra-non-null-assertion": "error",
33+
"typescript/no-misused-new": "error",
34+
"typescript/no-namespace": "error",
35+
"typescript/no-non-null-asserted-optional-chain": "error",
36+
"typescript/no-require-imports": "error",
37+
"typescript/no-this-alias": "error",
38+
"typescript/no-unnecessary-type-constraint": "error",
39+
"typescript/no-unsafe-declaration-merging": "error",
40+
"typescript/no-unsafe-function-type": "error",
41+
"typescript/no-wrapper-object-types": "error",
42+
"typescript/prefer-as-const": "error",
43+
"typescript/prefer-namespace-keyword": "error",
44+
"typescript/triple-slash-reference": "error"
45+
},
46+
"overrides": [
47+
{
48+
"files": ["**/*.{js,jsx}"],
49+
"rules": {
50+
"constructor-super": "error",
51+
"for-direction": "error",
52+
"no-async-promise-executor": "error",
53+
"no-case-declarations": "error",
54+
"no-class-assign": "error",
55+
"no-compare-neg-zero": "error",
56+
"no-cond-assign": "error",
57+
"no-const-assign": "error",
58+
"no-constant-binary-expression": "error",
59+
"no-constant-condition": "error",
60+
"no-control-regex": "error",
61+
"no-debugger": "error",
62+
"no-delete-var": "error",
63+
"no-dupe-class-members": "error",
64+
"no-dupe-else-if": "error",
65+
"no-dupe-keys": "error",
66+
"no-duplicate-case": "error",
67+
"no-empty": "error",
68+
"no-empty-character-class": "error",
69+
"no-empty-pattern": "error",
70+
"no-empty-static-block": "error",
71+
"no-ex-assign": "error",
72+
"no-extra-boolean-cast": "error",
73+
"no-fallthrough": "error",
74+
"no-func-assign": "error",
75+
"no-global-assign": "error",
76+
"no-import-assign": "error",
77+
"no-invalid-regexp": "error",
78+
"no-irregular-whitespace": "error",
79+
"no-loss-of-precision": "error",
80+
"no-misleading-character-class": "error",
81+
"no-new-native-nonconstructor": "error",
82+
"no-nonoctal-decimal-escape": "error",
83+
"no-obj-calls": "error",
84+
"no-prototype-builtins": "error",
85+
"no-redeclare": "error",
86+
"no-regex-spaces": "error",
87+
"no-self-assign": "error",
88+
"no-setter-return": "error",
89+
"no-shadow-restricted-names": "error",
90+
"no-sparse-arrays": "error",
91+
"no-this-before-super": "error",
92+
"no-unexpected-multiline": "error",
93+
"no-unsafe-finally": "error",
94+
"no-unsafe-negation": "error",
95+
"no-unsafe-optional-chaining": "error",
96+
"no-unused-labels": "error",
97+
"no-unused-private-class-members": "error",
98+
"no-useless-backreference": "error",
99+
"no-useless-catch": "error",
100+
"no-useless-escape": "error",
101+
"no-with": "error",
102+
"require-yield": "error",
103+
"use-isnan": "error",
104+
"valid-typeof": "error"
105+
}
106+
},
107+
{
108+
"files": ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
109+
"rules": {
110+
"constructor-super": "off",
111+
"no-class-assign": "off",
112+
"no-const-assign": "off",
113+
"no-dupe-class-members": "off",
114+
"no-dupe-keys": "off",
115+
"no-func-assign": "off",
116+
"no-import-assign": "off",
117+
"no-new-native-nonconstructor": "off",
118+
"no-obj-calls": "off",
119+
"no-redeclare": "off",
120+
"no-setter-return": "off",
121+
"no-this-before-super": "off",
122+
"no-unsafe-negation": "off",
123+
"no-var": "error",
124+
"no-with": "off",
125+
"prefer-const": "error",
126+
"prefer-rest-params": "error",
127+
"prefer-spread": "error"
128+
}
129+
},
130+
{
131+
"files": ["**/*.{ts,tsx}"],
132+
"rules": {
133+
"no-redeclare": "error",
134+
"no-shadow": "off",
135+
"no-unused-vars": [
136+
"warn",
137+
{
138+
"argsIgnorePattern": "(^_)|(^__+$)|(^e$)|(^error$)",
139+
"varsIgnorePattern": "(^_)|(^__+$)|(^e$)|(^error$)",
140+
"caughtErrorsIgnorePattern": "(^_)|(^__+$)|(^e$)|(^error$)"
141+
}
142+
],
143+
"typescript/no-explicit-any": "off"
144+
}
145+
},
146+
{
147+
"files": ["**/*.{ts,tsx,js,jsx}"],
148+
"rules": {
149+
"jsx-a11y/alt-text": "error",
150+
"jsx-a11y/anchor-ambiguous-text": "off",
151+
"jsx-a11y/anchor-has-content": "error",
152+
"jsx-a11y/anchor-is-valid": "error",
153+
"jsx-a11y/aria-activedescendant-has-tabindex": "error",
154+
"jsx-a11y/aria-props": "error",
155+
"jsx-a11y/aria-proptypes": "error",
156+
"jsx-a11y/aria-role": "error",
157+
"jsx-a11y/aria-unsupported-elements": "error",
158+
"jsx-a11y/autocomplete-valid": "error",
159+
"jsx-a11y/click-events-have-key-events": "error",
160+
"jsx-a11y/heading-has-content": "error",
161+
"jsx-a11y/html-has-lang": "error",
162+
"jsx-a11y/iframe-has-title": "error",
163+
"jsx-a11y/img-redundant-alt": "error",
164+
"jsx-a11y/label-has-associated-control": "error",
165+
"jsx-a11y/media-has-caption": "error",
166+
"jsx-a11y/mouse-events-have-key-events": "error",
167+
"jsx-a11y/no-access-key": "error",
168+
"jsx-a11y/no-autofocus": "error",
169+
"jsx-a11y/no-distracting-elements": "error",
170+
"jsx-a11y/no-noninteractive-tabindex": [
171+
"error",
172+
{
173+
"tags": [],
174+
"roles": ["tabpanel"],
175+
"allowExpressionValues": true
176+
}
177+
],
178+
"jsx-a11y/no-redundant-roles": "error",
179+
"jsx-a11y/no-static-element-interactions": [
180+
"error",
181+
{
182+
"allowExpressionValues": true,
183+
"handlers": [
184+
"onClick",
185+
"onMouseDown",
186+
"onMouseUp",
187+
"onKeyPress",
188+
"onKeyDown",
189+
"onKeyUp"
190+
]
191+
}
192+
],
193+
"jsx-a11y/role-has-required-aria-props": "error",
194+
"jsx-a11y/role-supports-aria-props": "error",
195+
"jsx-a11y/scope": "error",
196+
"jsx-a11y/tabindex-no-positive": "error",
197+
"react/rules-of-hooks": "error",
198+
"react/exhaustive-deps": "warn"
199+
},
200+
"plugins": ["react", "jsx-a11y"]
201+
}
202+
]
203+
}

.prettierignore

Lines changed: 0 additions & 10 deletions
This file was deleted.

.prettierrc

Lines changed: 0 additions & 5 deletions
This file was deleted.

content-collections.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { defineCollection, defineConfig } from '@content-collections/core'
2-
import { extractFrontMatter } from '~/utils/documents.server'
2+
import { z } from 'zod'
33

44
const posts = defineCollection({
55
name: 'posts',
66
directory: './src/blog',
77
include: '*.md',
8-
schema: (z) => ({
8+
schema: z.object({
99
title: z.string(),
10-
published: z.string().date(),
10+
published: z.iso.date(),
1111
draft: z.boolean().optional(),
1212
excerpt: z.string(),
1313
authors: z.string().array(),

eslint.config.mjs

Lines changed: 0 additions & 68 deletions
This file was deleted.

netlify.toml

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
[build.environment]
2-
NODE_OPTIONS = "--max-old-space-size=4096"
2+
NODE_OPTIONS = "--max-old-space-size=4096"
33

44
[build]
5-
command = "vite build && cp src/instrument.server.mjs dist/server"
6-
publish = "dist/client"
5+
command = "vite build && cp src/instrument.server.mjs dist/server"
6+
publish = "dist/client"
77

88
[functions]
9-
directory = "netlify/functions"
9+
directory = "netlify/functions"
1010

1111
[[headers]]
12-
for = "/*"
13-
[headers.values]
14-
X-Frame-Options = "DENY"
15-
X-Content-Type-Options = "nosniff"
16-
X-XSS-Protection = "1; mode=block"
17-
Referrer-Policy = "strict-origin-when-cross-origin"
18-
Permissions-Policy = "camera=(), microphone=(), geolocation=()"
12+
for = "/*"
13+
[headers.values]
14+
X-Frame-Options = "DENY"
15+
X-Content-Type-Options = "nosniff"
16+
X-XSS-Protection = "1; mode=block"
17+
Referrer-Policy = "strict-origin-when-cross-origin"
18+
Permissions-Policy = "camera=(), microphone=(), geolocation=()"
1919

2020
[[headers]]
21-
for = "/*"
22-
[headers.values]
23-
Strict-Transport-Security = "max-age=31536000; includeSubDomains"
21+
for = "/*"
22+
[headers.values]
23+
Strict-Transport-Security = "max-age=31536000; includeSubDomains"
2424

2525
# WebContainer requires SharedArrayBuffer which needs COOP/COEP headers
2626
# Only apply to /builder to avoid breaking external resources on other pages
2727
[[headers]]
28-
for = "/builder"
29-
[headers.values]
30-
Cross-Origin-Opener-Policy = "same-origin"
31-
Cross-Origin-Embedder-Policy = "require-corp"
28+
for = "/builder"
29+
[headers.values]
30+
Cross-Origin-Opener-Policy = "same-origin"
31+
Cross-Origin-Embedder-Policy = "require-corp"
3232

3333
[[headers]]
34-
for = "/builder/*"
35-
[headers.values]
36-
Cross-Origin-Opener-Policy = "same-origin"
37-
Cross-Origin-Embedder-Policy = "require-corp"
34+
for = "/builder/*"
35+
[headers.values]
36+
Cross-Origin-Opener-Policy = "same-origin"
37+
Cross-Origin-Embedder-Policy = "require-corp"

0 commit comments

Comments
 (0)