Skip to content

Commit 5d94415

Browse files
committed
Move to biome
1 parent 8aa44d5 commit 5d94415

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+986
-2872
lines changed

.changeset/config.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
3-
"changelog": "@changesets/cli/changelog",
4-
"commit": false,
5-
"fixed": [],
6-
"linked": [],
7-
"access": "public",
8-
"baseBranch": "main",
9-
"updateInternalDependencies": "patch",
10-
"ignore": []
2+
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
3+
"changelog": "@changesets/cli/changelog",
4+
"commit": false,
5+
"fixed": [],
6+
"linked": [],
7+
"access": "public",
8+
"baseBranch": "main",
9+
"updateInternalDependencies": "patch",
10+
"ignore": []
1111
}

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
steps:
2323
- uses: actions/checkout@v4
2424
- uses: ./.github/actions/setup-deps
25-
- run: pnpm lint
25+
- run: pnpm lint:check
2626

2727
build:
2828
runs-on: ubuntu-latest

.prettierignore

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

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{
2-
"typescript.tsdk": "node_modules/typescript/lib"
2+
"typescript.tsdk": "node_modules/typescript/lib",
3+
"editor.defaultFormatter": "biomejs.biome"
34
}

apps/demo/package.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
{
2-
"private": true,
3-
"name": "demo",
4-
"version": "0.0.0",
5-
"scripts": {
6-
"dev": "vite",
7-
"release": "echo \"Releasing demo app..\""
8-
},
9-
"devDependencies": {
10-
"@cloudwalker/dom-utils": "workspace:*",
11-
"@faker-js/faker": "^8.4.1",
12-
"@types/react": "^18.3.24",
13-
"@types/react-dom": "^18.3.7",
14-
"@vitejs/plugin-react": "^4.7.0",
15-
"nanoid": "^5.1.5",
16-
"react": "^18.3.1",
17-
"react-dom": "^18.3.1",
18-
"vite": "^5.4.19"
19-
}
2+
"private": true,
3+
"name": "demo",
4+
"version": "0.0.0",
5+
"scripts": {
6+
"dev": "vite",
7+
"release": "echo \"Releasing demo app..\""
8+
},
9+
"devDependencies": {
10+
"@cloudwalker/dom-utils": "workspace:*",
11+
"@faker-js/faker": "^8.4.1",
12+
"@types/react": "^18.3.24",
13+
"@types/react-dom": "^18.3.7",
14+
"@vitejs/plugin-react": "^4.7.0",
15+
"nanoid": "^5.1.5",
16+
"react": "^18.3.1",
17+
"react-dom": "^18.3.1",
18+
"vite": "^5.4.19"
19+
}
2020
}

apps/demo/src/App.tsx

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,88 @@
11
import {useState} from 'react'
22
import {TaskPreview} from './TaskPreview'
3-
import {Task, TaskFilter, makeTask} from './task'
3+
import {makeTask, type Task, type TaskFilter} from './task'
44

55
const initialTasks = Array.from({length: 50}, makeTask)
66
const initialState: {tasks: Task[]; filters: readonly TaskFilter[]} = {
7-
tasks: initialTasks,
8-
filters: [{field: 'content', operator: 'like', value: 'male'}],
7+
tasks: initialTasks,
8+
filters: [{field: 'content', operator: 'like', value: 'male'}],
99
}
1010

1111
const makeTaskPredicate = (filters: readonly TaskFilter[]) => {
12-
const taskPredicate = (task: Task) => {
13-
const matches = filters.map((filter) => {
14-
if (filter.operator == 'any_of') {
15-
return filter.value.some((match) => task[filter.field].includes(match))
16-
}
12+
const taskPredicate = (task: Task) => {
13+
const matches = filters.map((filter) => {
14+
if (filter.operator === 'any_of') {
15+
return filter.value.some((match) => task[filter.field].includes(match))
16+
}
1717

18-
if (filter.operator == 'none_of') {
19-
return !filter.value.some((match) => task[filter.field].includes(match))
20-
}
18+
if (filter.operator === 'none_of') {
19+
return !filter.value.some((match) => task[filter.field].includes(match))
20+
}
2121

22-
if (filter.operator == 'like') {
23-
return task[filter.field].includes(filter.value)
24-
}
22+
if (filter.operator === 'like') {
23+
return task[filter.field].includes(filter.value)
24+
}
2525

26-
if (filter.operator == 'unlike') {
27-
return !task[filter.field].includes(filter.value)
28-
}
26+
if (filter.operator === 'unlike') {
27+
return !task[filter.field].includes(filter.value)
28+
}
2929

30-
return true
31-
})
30+
return true
31+
})
3232

33-
return matches.every(Boolean)
34-
}
35-
return taskPredicate
33+
return matches.every(Boolean)
34+
}
35+
return taskPredicate
3636
}
3737

3838
export const App = () => {
39-
const [state, setState] = useState(initialState)
40-
const tasks = state.tasks.filter(makeTaskPredicate(state.filters))
41-
return (
42-
<div
43-
style={{
44-
maxWidth: '1024px',
45-
marginInline: 'auto',
46-
display: 'flex',
47-
flexDirection: 'column',
48-
gap: '0.5em',
49-
}}
50-
>
51-
<h1>Tasks</h1>
52-
<div>
53-
<button>add filter</button>
39+
const [state, setState] = useState(initialState)
40+
const tasks = state.tasks.filter(makeTaskPredicate(state.filters))
41+
return (
42+
<div
43+
style={{
44+
maxWidth: '1024px',
45+
marginInline: 'auto',
46+
display: 'flex',
47+
flexDirection: 'column',
48+
gap: '0.5em',
49+
}}
50+
>
51+
<h1>Tasks</h1>
52+
<div>
53+
<button type="button">add filter</button>
5454

55-
<ul>
56-
{state.filters.map((filter, i) => {
57-
return (
58-
<li key={`${filter.field}_${i}`}>
59-
<pre>{JSON.stringify(filter, null, 2)}</pre>
60-
</li>
61-
)
62-
})}
63-
</ul>
64-
</div>
65-
<ul style={{display: 'flex', flexDirection: 'column', gap: '0.25em'}}>
66-
{tasks.map((task) => (
67-
<li key={task.id}>
68-
<TaskPreview
69-
task={task}
70-
onChange={(task) => {
71-
setState({
72-
...state,
73-
tasks: state.tasks.map((t) => (t.id == task.id ? task : t)),
74-
})
75-
}}
76-
onRemove={() => {
77-
setState({
78-
...state,
79-
tasks: state.tasks.filter((t) => t.id != task.id),
80-
})
81-
}}
82-
/>
83-
</li>
84-
))}
85-
</ul>
86-
</div>
87-
)
55+
<ul>
56+
{state.filters.map((filter, i) => {
57+
return (
58+
<li key={`${filter.field}_${i}`}>
59+
<pre>{JSON.stringify(filter, null, 2)}</pre>
60+
</li>
61+
)
62+
})}
63+
</ul>
64+
</div>
65+
<ul style={{display: 'flex', flexDirection: 'column', gap: '0.25em'}}>
66+
{tasks.map((task) => (
67+
<li key={task.id}>
68+
<TaskPreview
69+
task={task}
70+
onChange={(task) => {
71+
setState({
72+
...state,
73+
tasks: state.tasks.map((t) => (t.id === task.id ? task : t)),
74+
})
75+
}}
76+
onRemove={() => {
77+
setState({
78+
...state,
79+
tasks: state.tasks.filter((t) => t.id !== task.id),
80+
})
81+
}}
82+
/>
83+
</li>
84+
))}
85+
</ul>
86+
</div>
87+
)
8888
}

apps/demo/src/TaskPreview.tsx

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
import {useId} from 'react'
2-
import {Task} from './task'
2+
import type {Task} from './task'
33

44
export const TaskPreview = ({
5-
task,
6-
onChange,
7-
onRemove,
5+
task,
6+
onChange,
7+
onRemove,
88
}: {
9-
task: Task
10-
onChange: (task: Task) => void
11-
onRemove: () => void
9+
task: Task
10+
onChange: (task: Task) => void
11+
onRemove: () => void
1212
}) => {
13-
const checkboxId = useId()
14-
return (
15-
<div style={{display: 'flex', gap: '0.5em'}}>
16-
<input
17-
type="checkbox"
18-
id={checkboxId}
19-
checked={task.isCompleted}
20-
onChange={(e) => {
21-
onChange({...task, isCompleted: e.currentTarget.checked})
22-
}}
23-
/>
24-
<label htmlFor={checkboxId} style={{flexGrow: 1}}>
25-
{task.content}
26-
</label>
27-
<div>{task.categories.toString()}</div>
28-
<button onClick={onRemove}>Remove</button>
29-
</div>
30-
)
13+
const checkboxId = useId()
14+
return (
15+
<div style={{display: 'flex', gap: '0.5em'}}>
16+
<input
17+
type="checkbox"
18+
id={checkboxId}
19+
checked={task.isCompleted}
20+
onChange={(e) => {
21+
onChange({...task, isCompleted: e.currentTarget.checked})
22+
}}
23+
/>
24+
<label htmlFor={checkboxId} style={{flexGrow: 1}}>
25+
{task.content}
26+
</label>
27+
<div>{task.categories.toString()}</div>
28+
<button type="button" onClick={onRemove}>
29+
Remove
30+
</button>
31+
</div>
32+
)
3133
}

apps/demo/src/global.css

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
* {
2-
box-sizing: border-box;
2+
box-sizing: border-box;
33
}
44

55
h1 {
6-
margin: unset;
6+
margin: unset;
77
}
88

99
ul {
10-
margin: unset;
11-
padding: unset;
12-
list-style-type: none;
10+
margin: unset;
11+
padding: unset;
12+
list-style-type: none;
1313
}

apps/demo/src/task.ts

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,43 @@ import {nanoid} from 'nanoid'
44
faker.seed(123)
55

66
export type Task = {
7-
id: string
8-
content: string
9-
categories: string[]
10-
isCompleted: boolean
11-
estimate: number
12-
createdAt: Date
13-
updatedAt: Date
7+
id: string
8+
content: string
9+
categories: string[]
10+
isCompleted: boolean
11+
estimate: number
12+
createdAt: Date
13+
updatedAt: Date
1414
}
1515

1616
export const task2FiltersOperators = {
17-
// id: [],
18-
categories: ['any_of', 'none_of'],
19-
content: ['like', 'unlike'],
20-
// createdAt: [],
21-
// estimate: [],
22-
// isCompleted: [],
23-
// updatedAt: [],
17+
// id: [],
18+
categories: ['any_of', 'none_of'],
19+
content: ['like', 'unlike'],
20+
// createdAt: [],
21+
// estimate: [],
22+
// isCompleted: [],
23+
// updatedAt: [],
2424
} as const satisfies Partial<Record<keyof Task, readonly string[]>>
2525

2626
export type TaskFilter = {
27-
[k in keyof typeof task2FiltersOperators]: {
28-
field: k
29-
operator: (typeof task2FiltersOperators)[k][number]
30-
value: Task[k]
31-
}
27+
[k in keyof typeof task2FiltersOperators]: {
28+
field: k
29+
operator: (typeof task2FiltersOperators)[k][number]
30+
value: Task[k]
31+
}
3232
}[keyof typeof task2FiltersOperators]
3333

3434
export const makeTask = (): Task => {
35-
const updatedAt = faker.date.recent()
36-
const createdAt = faker.date.recent({days: 5, refDate: updatedAt})
37-
return {
38-
id: nanoid(),
39-
categories: faker.helpers.uniqueArray(faker.animal.type, 5),
40-
content: faker.lorem.words(),
41-
createdAt,
42-
updatedAt,
43-
estimate: faker.number.int({min: 1}),
44-
isCompleted: faker.datatype.boolean(),
45-
}
35+
const updatedAt = faker.date.recent()
36+
const createdAt = faker.date.recent({days: 5, refDate: updatedAt})
37+
return {
38+
id: nanoid(),
39+
categories: faker.helpers.uniqueArray(faker.animal.type, 5),
40+
content: faker.lorem.words(),
41+
createdAt,
42+
updatedAt,
43+
estimate: faker.number.int({min: 1}),
44+
isCompleted: faker.datatype.boolean(),
45+
}
4646
}

0 commit comments

Comments
 (0)