-84
.eslintrc.cjs
-84
.eslintrc.cjs
···
1
-
/**
2
-
* This is intended to be a basic starting point for linting in your app.
3
-
* It relies on recommended configs out of the box for simplicity, but you can
4
-
* and should modify this configuration to best suit your team's needs.
5
-
*/
6
-
7
-
/** @type {import('eslint').Linter.Config} */
8
-
module.exports = {
9
-
root: true,
10
-
parserOptions: {
11
-
ecmaVersion: "latest",
12
-
sourceType: "module",
13
-
ecmaFeatures: {
14
-
jsx: true,
15
-
},
16
-
},
17
-
env: {
18
-
browser: true,
19
-
commonjs: true,
20
-
es6: true,
21
-
},
22
-
ignorePatterns: ["!**/.server", "!**/.client"],
23
-
24
-
// Base config
25
-
extends: ["eslint:recommended"],
26
-
27
-
overrides: [
28
-
// React
29
-
{
30
-
files: ["**/*.{js,jsx,ts,tsx}"],
31
-
plugins: ["react", "jsx-a11y"],
32
-
extends: [
33
-
"plugin:react/recommended",
34
-
"plugin:react/jsx-runtime",
35
-
"plugin:react-hooks/recommended",
36
-
"plugin:jsx-a11y/recommended",
37
-
],
38
-
settings: {
39
-
react: {
40
-
version: "detect",
41
-
},
42
-
formComponents: ["Form"],
43
-
linkComponents: [
44
-
{ name: "Link", linkAttribute: "to" },
45
-
{ name: "NavLink", linkAttribute: "to" },
46
-
],
47
-
"import/resolver": {
48
-
typescript: {},
49
-
},
50
-
},
51
-
},
52
-
53
-
// Typescript
54
-
{
55
-
files: ["**/*.{ts,tsx}"],
56
-
plugins: ["@typescript-eslint", "import"],
57
-
parser: "@typescript-eslint/parser",
58
-
settings: {
59
-
"import/internal-regex": "^~/",
60
-
"import/resolver": {
61
-
node: {
62
-
extensions: [".ts", ".tsx"],
63
-
},
64
-
typescript: {
65
-
alwaysTryTypes: true,
66
-
},
67
-
},
68
-
},
69
-
extends: [
70
-
"plugin:@typescript-eslint/recommended",
71
-
"plugin:import/recommended",
72
-
"plugin:import/typescript",
73
-
],
74
-
},
75
-
76
-
// Node
77
-
{
78
-
files: [".eslintrc.cjs"],
79
-
env: {
80
-
node: true,
81
-
},
82
-
},
83
-
],
84
-
};
+1
.husky/pre-commit
+1
.husky/pre-commit
···
1
+
pnpm lint-staged
+1
-1
app/entry.client.tsx
+1
-1
app/entry.client.tsx
+13
-10
app/entry.server.tsx
+13
-10
app/entry.server.tsx
···
1
+
/* eslint-disable no-console */
1
2
/**
2
3
* By default, Remix will handle generating the HTTP Response for you.
3
4
* You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
···
21
22
remixContext: EntryContext,
22
23
// This is ignored so we can keep it in the template for visibility. Feel
23
24
// free to delete this parameter in your app if you're not using it!
24
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
25
-
loadContext: AppLoadContext
25
+
26
+
loadContext: AppLoadContext,
26
27
) {
27
28
return isbot(request.headers.get("user-agent") || "")
28
29
? handleBotRequest(
29
30
request,
30
31
responseStatusCode,
31
32
responseHeaders,
32
-
remixContext
33
+
remixContext,
33
34
)
34
35
: handleBrowserRequest(
35
36
request,
36
37
responseStatusCode,
37
38
responseHeaders,
38
-
remixContext
39
+
remixContext,
39
40
);
40
41
}
41
42
···
43
44
request: Request,
44
45
responseStatusCode: number,
45
46
responseHeaders: Headers,
46
-
remixContext: EntryContext
47
+
remixContext: EntryContext,
47
48
) {
48
49
return new Promise((resolve, reject) => {
49
50
let shellRendered = false;
···
65
66
new Response(stream, {
66
67
headers: responseHeaders,
67
68
status: responseStatusCode,
68
-
})
69
+
}),
69
70
);
70
71
71
72
pipe(body);
72
73
},
73
74
onShellError(error: unknown) {
75
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
74
76
reject(error);
75
77
},
76
78
onError(error: unknown) {
···
82
84
console.error(error);
83
85
}
84
86
},
85
-
}
87
+
},
86
88
);
87
89
88
90
setTimeout(abort, ABORT_DELAY);
···
93
95
request: Request,
94
96
responseStatusCode: number,
95
97
responseHeaders: Headers,
96
-
remixContext: EntryContext
98
+
remixContext: EntryContext,
97
99
) {
98
100
return new Promise((resolve, reject) => {
99
101
let shellRendered = false;
···
115
117
new Response(stream, {
116
118
headers: responseHeaders,
117
119
status: responseStatusCode,
118
-
})
120
+
}),
119
121
);
120
122
121
123
pipe(body);
122
124
},
123
125
onShellError(error: unknown) {
126
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
124
127
reject(error);
125
128
},
126
129
onError(error: unknown) {
···
132
135
console.error(error);
133
136
}
134
137
},
135
-
}
138
+
},
136
139
);
137
140
138
141
setTimeout(abort, ABORT_DELAY);
+2
-1
app/root.tsx
+2
-1
app/root.tsx
+2
-2
app/routes/_index.tsx
+2
-2
app/routes/_index.tsx
···
9
9
10
10
export default function Index() {
11
11
return (
12
-
<div className="font-sans p-4">
12
+
<div className="p-4 font-sans">
13
13
<h1 className="text-3xl">Welcome to Remix</h1>
14
-
<ul className="list-disc mt-4 pl-6 space-y-2">
14
+
<ul className="mt-4 list-disc space-y-2 pl-6">
15
15
<li>
16
16
<a
17
17
className="text-blue-700 underline visited:text-purple-900"
+15
eslint.config.mjs
+15
eslint.config.mjs
···
1
+
import { configs } from "@mkizka/eslint-config";
2
+
import gitignore from "eslint-config-flat-gitignore";
3
+
4
+
export default [
5
+
gitignore(),
6
+
...configs.typescript(),
7
+
...configs.react(),
8
+
...configs.tailwind(),
9
+
{
10
+
files: ["**/*.spec.ts"],
11
+
rules: {
12
+
"@typescript-eslint/no-unsafe-assignment": "off",
13
+
},
14
+
},
15
+
];
+27
-9
package.json
+27
-9
package.json
···
1
1
{
2
2
"name": "linkat",
3
+
"type": "module",
3
4
"private": true,
4
-
"sideEffects": false,
5
-
"type": "module",
5
+
"packageManager": "pnpm@8.15.7+sha256.50783dd0fa303852de2dd1557cd4b9f07cb5b018154a6e76d0f40635d6cee019",
6
+
"engines": {
7
+
"node": ">=20.0.0"
8
+
},
6
9
"scripts": {
10
+
"_eslint": "eslint --cache --cache-location ./node_modules/.cache/eslint .",
7
11
"build": "remix vite:build",
8
-
"test": "vitest run",
9
12
"dev": "remix vite:dev",
10
-
"lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .",
13
+
"format": "pnpm _eslint --fix && prettier . --write",
14
+
"lint": "pnpm _eslint && prettier . --check",
15
+
"postinstall": "./scripts/postinstall.sh",
16
+
"prepare": "husky",
11
17
"start": "remix-serve ./build/server/index.js",
12
-
"typecheck": "tsc",
13
-
"postinstall": "./scripts/postinstall.sh"
18
+
"test": "vitest run",
19
+
"typecheck": "tsc"
14
20
},
15
21
"dependencies": {
16
22
"@prisma/client": "^5.17.0",
···
23
29
},
24
30
"devDependencies": {
25
31
"@atproto/lex-cli": "0.3.2",
32
+
"@mkizka/eslint-config": "^5.2.1",
26
33
"@quramy/prisma-fabbrica": "^2.2.1",
27
34
"@remix-run/dev": "^2.11.0",
28
35
"@types/react": "^18.2.20",
···
31
38
"@typescript-eslint/parser": "^6.7.4",
32
39
"autoprefixer": "^10.4.19",
33
40
"eslint": "^8.38.0",
41
+
"eslint-config-flat-gitignore": "^0.1.8",
34
42
"eslint-import-resolver-typescript": "^3.6.1",
35
43
"eslint-plugin-import": "^2.28.1",
36
44
"eslint-plugin-jsx-a11y": "^6.7.1",
37
45
"eslint-plugin-react": "^7.33.2",
38
46
"eslint-plugin-react-hooks": "^4.6.0",
39
47
"giget": "^1.2.3",
48
+
"husky": "^9.1.4",
49
+
"lint-staged": "^15.2.8",
40
50
"msw": "^2.3.5",
41
51
"postcss": "^8.4.38",
52
+
"prettier": "^3.3.3",
53
+
"prettier-plugin-pkg": "^0.18.1",
42
54
"prisma": "^5.17.0",
43
55
"tailwindcss": "^3.4.4",
44
56
"typescript": "^5.1.6",
···
47
59
"vitest": "^2.0.5",
48
60
"vitest-environment-vprisma": "^1.3.0"
49
61
},
50
-
"engines": {
51
-
"node": ">=20.0.0"
62
+
"sideEffects": false,
63
+
"lint-staged": {
64
+
"*.{js,mjs,ts,tsx}": "eslint --fix",
65
+
"*": "prettier --ignore-unknown --write"
52
66
},
53
-
"packageManager": "pnpm@8.15.7+sha256.50783dd0fa303852de2dd1557cd4b9f07cb5b018154a6e76d0f40635d6cee019"
67
+
"prettier": {
68
+
"plugins": [
69
+
"prettier-plugin-pkg"
70
+
]
71
+
}
54
72
}
+585
pnpm-lock.yaml
+585
pnpm-lock.yaml
···
31
31
'@atproto/lex-cli':
32
32
specifier: 0.3.2
33
33
version: 0.3.2
34
+
'@mkizka/eslint-config':
35
+
specifier: ^5.2.1
36
+
version: 5.2.1(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(tailwindcss@3.4.7)(typescript@5.5.4)
34
37
'@quramy/prisma-fabbrica':
35
38
specifier: ^2.2.1
36
39
version: 2.2.1(@prisma/client@5.17.0)(typescript@5.5.4)
···
55
58
eslint:
56
59
specifier: ^8.38.0
57
60
version: 8.57.0
61
+
eslint-config-flat-gitignore:
62
+
specifier: ^0.1.8
63
+
version: 0.1.8
58
64
eslint-import-resolver-typescript:
59
65
specifier: ^3.6.1
60
66
version: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
···
73
79
giget:
74
80
specifier: ^1.2.3
75
81
version: 1.2.3
82
+
husky:
83
+
specifier: ^9.1.4
84
+
version: 9.1.4
85
+
lint-staged:
86
+
specifier: ^15.2.8
87
+
version: 15.2.8
76
88
msw:
77
89
specifier: ^2.3.5
78
90
version: 2.3.5(typescript@5.5.4)
79
91
postcss:
80
92
specifier: ^8.4.38
81
93
version: 8.4.40
94
+
prettier:
95
+
specifier: ^3.3.3
96
+
version: 3.3.3
97
+
prettier-plugin-pkg:
98
+
specifier: ^0.18.1
99
+
version: 0.18.1(prettier@3.3.3)
82
100
prisma:
83
101
specifier: ^5.17.0
84
102
version: 5.17.0
···
606
624
tough-cookie: 4.1.4
607
625
dev: true
608
626
627
+
/@dword-design/dedent@0.7.0:
628
+
resolution: {integrity: sha512-OFmAmzKiDUh9m7WRMYcoEOPI7b5tS5hdqQmtKDwF+ZssVJv8a+GHo9VOtFsmlw3h8Roh/9QzFWIsjSFZyQUMdg==}
629
+
dependencies:
630
+
babel-plugin-add-module-exports: 1.0.4
631
+
dev: true
632
+
633
+
/@dword-design/endent@1.4.1:
634
+
resolution: {integrity: sha512-e2sCTzth5kyRdM0o+yEb5wBVzUdJL8Y6HblRGRV0Bif0knf1ZjRLhUjdCrqM+Muirb68X/xJzgdRDJVmLqgXGA==}
635
+
dependencies:
636
+
'@dword-design/dedent': 0.7.0
637
+
fast-json-parse: 1.0.3
638
+
objectorarray: 1.0.5
639
+
dev: true
640
+
641
+
/@dword-design/eslint-plugin-import-alias@5.0.0:
642
+
resolution: {integrity: sha512-QbY2hA+YvhKiPJnAd9fOwT7gNV8OvaGLHdUsC6uVtyoUVjzx55WbUlzlEZzurlwDamXDlIB81IxbHgHT32Lx0w==}
643
+
engines: {node: '>=18'}
644
+
dependencies:
645
+
'@babel/core': 7.25.2
646
+
'@dword-design/functions': 6.0.0
647
+
babel-plugin-module-resolver: 5.0.2
648
+
deepmerge: 4.3.1
649
+
jiti: 1.21.6
650
+
transitivePeerDependencies:
651
+
- supports-color
652
+
dev: true
653
+
654
+
/@dword-design/functions@6.0.0:
655
+
resolution: {integrity: sha512-22X9eviXAbaz8xdYrp5Tj6KjDPiT+m3fppAP+wEqA3gecAlCyExABesA1bEZ57aXrXrbhNk88M8PvdAO/PLg3A==}
656
+
engines: {node: '>=18'}
657
+
dependencies:
658
+
'@dword-design/endent': 1.4.1
659
+
delay: 6.0.0
660
+
lodash: 4.17.21
661
+
tinycolor2: 1.6.0
662
+
dev: true
663
+
609
664
/@emotion/hash@0.9.2:
610
665
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
611
666
dev: true
···
1030
1085
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
1031
1086
dev: true
1032
1087
1088
+
/@eslint/compat@1.1.1:
1089
+
resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==}
1090
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1091
+
dev: true
1092
+
1033
1093
/@eslint/eslintrc@2.1.4:
1034
1094
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
1035
1095
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
···
1050
1110
/@eslint/js@8.57.0:
1051
1111
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
1052
1112
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1113
+
dev: true
1114
+
1115
+
/@eslint/js@9.8.0:
1116
+
resolution: {integrity: sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==}
1117
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1053
1118
dev: true
1054
1119
1055
1120
/@humanwhocodes/config-array@0.11.14:
···
1413
1478
- supports-color
1414
1479
dev: true
1415
1480
1481
+
/@mkizka/eslint-config@5.2.1(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(tailwindcss@3.4.7)(typescript@5.5.4):
1482
+
resolution: {integrity: sha512-1uSMs9wV45VQnPl0AgTXIGjDClPIJ2+QcwE35Bo2Q4dm9DpVQxvVgO0d1YXn+t5+SXeAC4jfwzVXrjKL8YTshw==}
1483
+
peerDependencies:
1484
+
eslint: '>= 9'
1485
+
dependencies:
1486
+
'@dword-design/eslint-plugin-import-alias': 5.0.0
1487
+
'@eslint/compat': 1.1.1
1488
+
'@eslint/js': 9.8.0
1489
+
eslint: 8.57.0
1490
+
eslint-plugin-eqeqeq-fix: 1.0.3
1491
+
eslint-plugin-react: 7.35.0(eslint@8.57.0)
1492
+
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
1493
+
eslint-plugin-simple-import-sort: 12.1.1(eslint@8.57.0)
1494
+
eslint-plugin-tailwindcss: 3.17.4(tailwindcss@3.4.7)
1495
+
eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)
1496
+
globals: 15.9.0
1497
+
typescript-eslint: 7.18.0(eslint@8.57.0)(typescript@5.5.4)
1498
+
transitivePeerDependencies:
1499
+
- '@typescript-eslint/eslint-plugin'
1500
+
- supports-color
1501
+
- tailwindcss
1502
+
- typescript
1503
+
dev: true
1504
+
1416
1505
/@mswjs/interceptors@0.29.1:
1417
1506
resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==}
1418
1507
engines: {node: '>=18'}
···
2175
2264
- supports-color
2176
2265
dev: true
2177
2266
2267
+
/@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4):
2268
+
resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==}
2269
+
engines: {node: ^18.18.0 || >=20.0.0}
2270
+
peerDependencies:
2271
+
'@typescript-eslint/parser': ^7.0.0
2272
+
eslint: ^8.56.0
2273
+
typescript: '*'
2274
+
peerDependenciesMeta:
2275
+
typescript:
2276
+
optional: true
2277
+
dependencies:
2278
+
'@eslint-community/regexpp': 4.11.0
2279
+
'@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
2280
+
'@typescript-eslint/scope-manager': 7.18.0
2281
+
'@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
2282
+
'@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
2283
+
'@typescript-eslint/visitor-keys': 7.18.0
2284
+
eslint: 8.57.0
2285
+
graphemer: 1.4.0
2286
+
ignore: 5.3.1
2287
+
natural-compare: 1.4.0
2288
+
ts-api-utils: 1.3.0(typescript@5.5.4)
2289
+
typescript: 5.5.4
2290
+
transitivePeerDependencies:
2291
+
- supports-color
2292
+
dev: true
2293
+
2178
2294
/@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4):
2179
2295
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
2180
2296
engines: {node: ^16.0.0 || >=18.0.0}
···
2196
2312
- supports-color
2197
2313
dev: true
2198
2314
2315
+
/@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4):
2316
+
resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==}
2317
+
engines: {node: ^18.18.0 || >=20.0.0}
2318
+
peerDependencies:
2319
+
eslint: ^8.56.0
2320
+
typescript: '*'
2321
+
peerDependenciesMeta:
2322
+
typescript:
2323
+
optional: true
2324
+
dependencies:
2325
+
'@typescript-eslint/scope-manager': 7.18.0
2326
+
'@typescript-eslint/types': 7.18.0
2327
+
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
2328
+
'@typescript-eslint/visitor-keys': 7.18.0
2329
+
debug: 4.3.6
2330
+
eslint: 8.57.0
2331
+
typescript: 5.5.4
2332
+
transitivePeerDependencies:
2333
+
- supports-color
2334
+
dev: true
2335
+
2199
2336
/@typescript-eslint/scope-manager@6.21.0:
2200
2337
resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
2201
2338
engines: {node: ^16.0.0 || >=18.0.0}
2202
2339
dependencies:
2203
2340
'@typescript-eslint/types': 6.21.0
2204
2341
'@typescript-eslint/visitor-keys': 6.21.0
2342
+
dev: true
2343
+
2344
+
/@typescript-eslint/scope-manager@7.18.0:
2345
+
resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
2346
+
engines: {node: ^18.18.0 || >=20.0.0}
2347
+
dependencies:
2348
+
'@typescript-eslint/types': 7.18.0
2349
+
'@typescript-eslint/visitor-keys': 7.18.0
2205
2350
dev: true
2206
2351
2207
2352
/@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4):
···
2224
2369
- supports-color
2225
2370
dev: true
2226
2371
2372
+
/@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4):
2373
+
resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==}
2374
+
engines: {node: ^18.18.0 || >=20.0.0}
2375
+
peerDependencies:
2376
+
eslint: ^8.56.0
2377
+
typescript: '*'
2378
+
peerDependenciesMeta:
2379
+
typescript:
2380
+
optional: true
2381
+
dependencies:
2382
+
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
2383
+
'@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
2384
+
debug: 4.3.6
2385
+
eslint: 8.57.0
2386
+
ts-api-utils: 1.3.0(typescript@5.5.4)
2387
+
typescript: 5.5.4
2388
+
transitivePeerDependencies:
2389
+
- supports-color
2390
+
dev: true
2391
+
2227
2392
/@typescript-eslint/types@6.21.0:
2228
2393
resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
2229
2394
engines: {node: ^16.0.0 || >=18.0.0}
2230
2395
dev: true
2231
2396
2397
+
/@typescript-eslint/types@7.18.0:
2398
+
resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
2399
+
engines: {node: ^18.18.0 || >=20.0.0}
2400
+
dev: true
2401
+
2232
2402
/@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4):
2233
2403
resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
2234
2404
engines: {node: ^16.0.0 || >=18.0.0}
···
2251
2421
- supports-color
2252
2422
dev: true
2253
2423
2424
+
/@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4):
2425
+
resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
2426
+
engines: {node: ^18.18.0 || >=20.0.0}
2427
+
peerDependencies:
2428
+
typescript: '*'
2429
+
peerDependenciesMeta:
2430
+
typescript:
2431
+
optional: true
2432
+
dependencies:
2433
+
'@typescript-eslint/types': 7.18.0
2434
+
'@typescript-eslint/visitor-keys': 7.18.0
2435
+
debug: 4.3.6
2436
+
globby: 11.1.0
2437
+
is-glob: 4.0.3
2438
+
minimatch: 9.0.5
2439
+
semver: 7.6.3
2440
+
ts-api-utils: 1.3.0(typescript@5.5.4)
2441
+
typescript: 5.5.4
2442
+
transitivePeerDependencies:
2443
+
- supports-color
2444
+
dev: true
2445
+
2254
2446
/@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4):
2255
2447
resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
2256
2448
engines: {node: ^16.0.0 || >=18.0.0}
···
2270
2462
- typescript
2271
2463
dev: true
2272
2464
2465
+
/@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4):
2466
+
resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
2467
+
engines: {node: ^18.18.0 || >=20.0.0}
2468
+
peerDependencies:
2469
+
eslint: ^8.56.0
2470
+
dependencies:
2471
+
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
2472
+
'@typescript-eslint/scope-manager': 7.18.0
2473
+
'@typescript-eslint/types': 7.18.0
2474
+
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
2475
+
eslint: 8.57.0
2476
+
transitivePeerDependencies:
2477
+
- supports-color
2478
+
- typescript
2479
+
dev: true
2480
+
2273
2481
/@typescript-eslint/visitor-keys@6.21.0:
2274
2482
resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
2275
2483
engines: {node: ^16.0.0 || >=18.0.0}
2276
2484
dependencies:
2277
2485
'@typescript-eslint/types': 6.21.0
2486
+
eslint-visitor-keys: 3.4.3
2487
+
dev: true
2488
+
2489
+
/@typescript-eslint/visitor-keys@7.18.0:
2490
+
resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
2491
+
engines: {node: ^18.18.0 || >=20.0.0}
2492
+
dependencies:
2493
+
'@typescript-eslint/types': 7.18.0
2278
2494
eslint-visitor-keys: 3.4.3
2279
2495
dev: true
2280
2496
···
2444
2660
type-fest: 0.21.3
2445
2661
dev: true
2446
2662
2663
+
/ansi-escapes@7.0.0:
2664
+
resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
2665
+
engines: {node: '>=18'}
2666
+
dependencies:
2667
+
environment: 1.1.0
2668
+
dev: true
2669
+
2447
2670
/ansi-regex@5.0.1:
2448
2671
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
2449
2672
engines: {node: '>=8'}
···
2675
2898
- supports-color
2676
2899
dev: true
2677
2900
2901
+
/babel-plugin-add-module-exports@1.0.4:
2902
+
resolution: {integrity: sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==}
2903
+
dev: true
2904
+
2678
2905
/babel-plugin-istanbul@6.1.1:
2679
2906
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
2680
2907
engines: {node: '>=8'}
···
2696
2923
'@babel/types': 7.25.2
2697
2924
'@types/babel__core': 7.20.5
2698
2925
'@types/babel__traverse': 7.20.6
2926
+
dev: true
2927
+
2928
+
/babel-plugin-module-resolver@5.0.2:
2929
+
resolution: {integrity: sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==}
2930
+
dependencies:
2931
+
find-babel-config: 2.1.1
2932
+
glob: 9.3.5
2933
+
pkg-up: 3.1.0
2934
+
reselect: 4.1.8
2935
+
resolve: 1.22.8
2699
2936
dev: true
2700
2937
2701
2938
/babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2):
···
3008
3245
restore-cursor: 3.1.0
3009
3246
dev: true
3010
3247
3248
+
/cli-cursor@5.0.0:
3249
+
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
3250
+
engines: {node: '>=18'}
3251
+
dependencies:
3252
+
restore-cursor: 5.1.0
3253
+
dev: true
3254
+
3011
3255
/cli-spinners@2.9.2:
3012
3256
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
3013
3257
engines: {node: '>=6'}
3258
+
dev: true
3259
+
3260
+
/cli-truncate@4.0.0:
3261
+
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
3262
+
engines: {node: '>=18'}
3263
+
dependencies:
3264
+
slice-ansi: 5.0.0
3265
+
string-width: 7.2.0
3014
3266
dev: true
3015
3267
3016
3268
/cli-width@4.1.0:
···
3066
3318
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
3067
3319
dev: true
3068
3320
3321
+
/colorette@2.0.20:
3322
+
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
3323
+
dev: true
3324
+
3069
3325
/comma-separated-tokens@2.0.3:
3070
3326
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
3071
3327
dev: true
3072
3328
3329
+
/commander@12.1.0:
3330
+
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
3331
+
engines: {node: '>=18'}
3332
+
dev: true
3333
+
3073
3334
/commander@4.1.1:
3074
3335
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
3075
3336
engines: {node: '>= 6'}
···
3342
3603
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
3343
3604
dev: true
3344
3605
3606
+
/delay@6.0.0:
3607
+
resolution: {integrity: sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==}
3608
+
engines: {node: '>=16'}
3609
+
dev: true
3610
+
3345
3611
/depd@2.0.0:
3346
3612
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
3347
3613
engines: {node: '>= 0.8'}
···
3429
3695
engines: {node: '>=12'}
3430
3696
dev: true
3431
3697
3698
+
/emoji-regex@10.3.0:
3699
+
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
3700
+
dev: true
3701
+
3432
3702
/emoji-regex@8.0.0:
3433
3703
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
3434
3704
dev: true
···
3453
3723
dependencies:
3454
3724
graceful-fs: 4.2.11
3455
3725
tapable: 2.2.1
3726
+
dev: true
3727
+
3728
+
/environment@1.1.0:
3729
+
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
3730
+
engines: {node: '>=18'}
3456
3731
dev: true
3457
3732
3458
3733
/err-code@2.0.3:
···
3692
3967
engines: {node: '>=10'}
3693
3968
dev: true
3694
3969
3970
+
/eslint-config-flat-gitignore@0.1.8:
3971
+
resolution: {integrity: sha512-OEUbS2wzzYtUfshjOqzFo4Bl4lHykXUdM08TCnYNl7ki+niW4Q1R0j0FDFDr0vjVsI5ZFOz5LvluxOP+Ew+dYw==}
3972
+
dependencies:
3973
+
find-up-simple: 1.0.0
3974
+
parse-gitignore: 2.0.0
3975
+
dev: true
3976
+
3695
3977
/eslint-import-resolver-node@0.3.9:
3696
3978
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
3697
3979
dependencies:
···
3753
4035
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
3754
4036
transitivePeerDependencies:
3755
4037
- supports-color
4038
+
dev: true
4039
+
4040
+
/eslint-plugin-eqeqeq-fix@1.0.3:
4041
+
resolution: {integrity: sha512-P1rvtn3iyMJGmF8zU6Q5+boNhYr+c+L4V3lLNGjNornLdZgXScekItxpxZdwKRXpZI30JmszVBH8U4hRj3Ly/Q==}
3756
4042
dev: true
3757
4043
3758
4044
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
···
3851
4137
string.prototype.repeat: 1.0.0
3852
4138
dev: true
3853
4139
4140
+
/eslint-plugin-simple-import-sort@12.1.1(eslint@8.57.0):
4141
+
resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==}
4142
+
peerDependencies:
4143
+
eslint: '>=5.0.0'
4144
+
dependencies:
4145
+
eslint: 8.57.0
4146
+
dev: true
4147
+
4148
+
/eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.7):
4149
+
resolution: {integrity: sha512-gJAEHmCq2XFfUP/+vwEfEJ9igrPeZFg+skeMtsxquSQdxba9XRk5bn0Bp9jxG1VV9/wwPKi1g3ZjItu6MIjhNg==}
4150
+
engines: {node: '>=18.12.0'}
4151
+
peerDependencies:
4152
+
tailwindcss: ^3.4.0
4153
+
dependencies:
4154
+
fast-glob: 3.3.2
4155
+
postcss: 8.4.40
4156
+
tailwindcss: 3.4.7
4157
+
dev: true
4158
+
4159
+
/eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0):
4160
+
resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==}
4161
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
4162
+
peerDependencies:
4163
+
'@typescript-eslint/eslint-plugin': 6 - 7
4164
+
eslint: '8'
4165
+
peerDependenciesMeta:
4166
+
'@typescript-eslint/eslint-plugin':
4167
+
optional: true
4168
+
dependencies:
4169
+
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4)
4170
+
eslint: 8.57.0
4171
+
eslint-rule-composer: 0.3.0
4172
+
dev: true
4173
+
4174
+
/eslint-rule-composer@0.3.0:
4175
+
resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==}
4176
+
engines: {node: '>=4.0.0'}
4177
+
dev: true
4178
+
3854
4179
/eslint-scope@7.2.2:
3855
4180
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
3856
4181
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
···
4016
4341
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
4017
4342
engines: {node: '>=6'}
4018
4343
4344
+
/eventemitter3@5.0.1:
4345
+
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
4346
+
dev: true
4347
+
4019
4348
/execa@5.1.1:
4020
4349
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
4021
4350
engines: {node: '>=10'}
···
4124
4453
micromatch: 4.0.7
4125
4454
dev: true
4126
4455
4456
+
/fast-json-parse@1.0.3:
4457
+
resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==}
4458
+
dev: true
4459
+
4127
4460
/fast-json-stable-stringify@2.1.0:
4128
4461
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
4129
4462
dev: true
···
4177
4510
transitivePeerDependencies:
4178
4511
- supports-color
4179
4512
4513
+
/find-babel-config@2.1.1:
4514
+
resolution: {integrity: sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA==}
4515
+
dependencies:
4516
+
json5: 2.2.3
4517
+
path-exists: 4.0.0
4518
+
dev: true
4519
+
4520
+
/find-up-simple@1.0.0:
4521
+
resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==}
4522
+
engines: {node: '>=18'}
4523
+
dev: true
4524
+
4525
+
/find-up@3.0.0:
4526
+
resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
4527
+
engines: {node: '>=6'}
4528
+
dependencies:
4529
+
locate-path: 3.0.0
4530
+
dev: true
4531
+
4180
4532
/find-up@4.1.0:
4181
4533
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
4182
4534
engines: {node: '>=8'}
···
4316
4668
engines: {node: 6.* || 8.* || >= 10.*}
4317
4669
dev: true
4318
4670
4671
+
/get-east-asian-width@1.2.0:
4672
+
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
4673
+
engines: {node: '>=18'}
4674
+
dev: true
4675
+
4319
4676
/get-func-name@2.0.2:
4320
4677
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
4321
4678
dev: true
···
4415
4772
path-is-absolute: 1.0.1
4416
4773
dev: true
4417
4774
4775
+
/glob@9.3.5:
4776
+
resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
4777
+
engines: {node: '>=16 || 14 >=14.17'}
4778
+
dependencies:
4779
+
fs.realpath: 1.0.0
4780
+
minimatch: 8.0.4
4781
+
minipass: 4.2.8
4782
+
path-scurry: 1.11.1
4783
+
dev: true
4784
+
4418
4785
/globals@11.12.0:
4419
4786
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
4420
4787
engines: {node: '>=4'}
···
4425
4792
engines: {node: '>=8'}
4426
4793
dependencies:
4427
4794
type-fest: 0.20.2
4795
+
dev: true
4796
+
4797
+
/globals@15.9.0:
4798
+
resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==}
4799
+
engines: {node: '>=18'}
4428
4800
dev: true
4429
4801
4430
4802
/globalthis@1.0.4:
···
4579
4951
/human-signals@5.0.0:
4580
4952
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
4581
4953
engines: {node: '>=16.17.0'}
4954
+
dev: true
4955
+
4956
+
/husky@9.1.4:
4957
+
resolution: {integrity: sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==}
4958
+
engines: {node: '>=18'}
4959
+
hasBin: true
4582
4960
dev: true
4583
4961
4584
4962
/iconv-lite@0.4.24:
···
4768
5146
/is-fullwidth-code-point@3.0.0:
4769
5147
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
4770
5148
engines: {node: '>=8'}
5149
+
dev: true
5150
+
5151
+
/is-fullwidth-code-point@4.0.0:
5152
+
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
5153
+
engines: {node: '>=12'}
5154
+
dev: true
5155
+
5156
+
/is-fullwidth-code-point@5.0.0:
5157
+
resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
5158
+
engines: {node: '>=18'}
5159
+
dependencies:
5160
+
get-east-asian-width: 1.2.0
4771
5161
dev: true
4772
5162
4773
5163
/is-generator-fn@2.1.0:
···
5574
5964
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
5575
5965
dev: true
5576
5966
5967
+
/lint-staged@15.2.8:
5968
+
resolution: {integrity: sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==}
5969
+
engines: {node: '>=18.12.0'}
5970
+
hasBin: true
5971
+
dependencies:
5972
+
chalk: 5.3.0
5973
+
commander: 12.1.0
5974
+
debug: 4.3.6
5975
+
execa: 8.0.1
5976
+
lilconfig: 3.1.2
5977
+
listr2: 8.2.4
5978
+
micromatch: 4.0.7
5979
+
pidtree: 0.6.0
5980
+
string-argv: 0.3.2
5981
+
yaml: 2.5.0
5982
+
transitivePeerDependencies:
5983
+
- supports-color
5984
+
dev: true
5985
+
5986
+
/listr2@8.2.4:
5987
+
resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==}
5988
+
engines: {node: '>=18.0.0'}
5989
+
dependencies:
5990
+
cli-truncate: 4.0.0
5991
+
colorette: 2.0.20
5992
+
eventemitter3: 5.0.1
5993
+
log-update: 6.1.0
5994
+
rfdc: 1.4.1
5995
+
wrap-ansi: 9.0.0
5996
+
dev: true
5997
+
5577
5998
/loader-utils@3.3.1:
5578
5999
resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
5579
6000
engines: {node: '>= 12.13.0'}
···
5585
6006
dependencies:
5586
6007
mlly: 1.7.1
5587
6008
pkg-types: 1.1.3
6009
+
dev: true
6010
+
6011
+
/locate-path@3.0.0:
6012
+
resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
6013
+
engines: {node: '>=6'}
6014
+
dependencies:
6015
+
p-locate: 3.0.0
6016
+
path-exists: 3.0.0
5588
6017
dev: true
5589
6018
5590
6019
/locate-path@5.0.0:
···
5625
6054
is-unicode-supported: 0.1.0
5626
6055
dev: true
5627
6056
6057
+
/log-update@6.1.0:
6058
+
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
6059
+
engines: {node: '>=18'}
6060
+
dependencies:
6061
+
ansi-escapes: 7.0.0
6062
+
cli-cursor: 5.0.0
6063
+
slice-ansi: 7.1.0
6064
+
strip-ansi: 7.1.0
6065
+
wrap-ansi: 9.0.0
6066
+
dev: true
6067
+
5628
6068
/longest-streak@3.1.0:
5629
6069
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
5630
6070
dev: true
···
6143
6583
engines: {node: '>=12'}
6144
6584
dev: true
6145
6585
6586
+
/mimic-function@5.0.1:
6587
+
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
6588
+
engines: {node: '>=18'}
6589
+
dev: true
6590
+
6146
6591
/minimatch@3.1.2:
6147
6592
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
6148
6593
dependencies:
···
6152
6597
/minimatch@5.1.6:
6153
6598
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
6154
6599
engines: {node: '>=10'}
6600
+
dependencies:
6601
+
brace-expansion: 2.0.1
6602
+
dev: true
6603
+
6604
+
/minimatch@8.0.4:
6605
+
resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
6606
+
engines: {node: '>=16 || 14 >=14.17'}
6155
6607
dependencies:
6156
6608
brace-expansion: 2.0.1
6157
6609
dev: true
···
6200
6652
engines: {node: '>=8'}
6201
6653
dependencies:
6202
6654
yallist: 4.0.0
6655
+
dev: true
6656
+
6657
+
/minipass@4.2.8:
6658
+
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
6659
+
engines: {node: '>=8'}
6203
6660
dev: true
6204
6661
6205
6662
/minipass@5.0.0:
···
6500
6957
es-object-atoms: 1.0.0
6501
6958
dev: true
6502
6959
6960
+
/objectorarray@1.0.5:
6961
+
resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==}
6962
+
dev: true
6963
+
6503
6964
/ohash@1.1.3:
6504
6965
resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==}
6505
6966
dev: true
···
6540
7001
mimic-fn: 4.0.0
6541
7002
dev: true
6542
7003
7004
+
/onetime@7.0.0:
7005
+
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
7006
+
engines: {node: '>=18'}
7007
+
dependencies:
7008
+
mimic-function: 5.0.1
7009
+
dev: true
7010
+
6543
7011
/optionator@0.9.4:
6544
7012
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
6545
7013
engines: {node: '>= 0.8.0'}
···
6587
7055
engines: {node: '>=10'}
6588
7056
dependencies:
6589
7057
yocto-queue: 0.1.0
7058
+
dev: true
7059
+
7060
+
/p-locate@3.0.0:
7061
+
resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
7062
+
engines: {node: '>=6'}
7063
+
dependencies:
7064
+
p-limit: 2.3.0
6590
7065
dev: true
6591
7066
6592
7067
/p-locate@4.1.0:
···
6643
7118
is-hexadecimal: 2.0.1
6644
7119
dev: true
6645
7120
7121
+
/parse-gitignore@2.0.0:
7122
+
resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
7123
+
engines: {node: '>=14'}
7124
+
dev: true
7125
+
6646
7126
/parse-json@5.2.0:
6647
7127
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
6648
7128
engines: {node: '>=8'}
···
6664
7144
6665
7145
/path-browserify@1.0.1:
6666
7146
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
7147
+
dev: true
7148
+
7149
+
/path-exists@3.0.0:
7150
+
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
7151
+
engines: {node: '>=4'}
6667
7152
dev: true
6668
7153
6669
7154
/path-exists@4.0.0:
···
6772
7257
confbox: 0.1.7
6773
7258
mlly: 1.7.1
6774
7259
pathe: 1.1.2
7260
+
dev: true
7261
+
7262
+
/pkg-up@3.1.0:
7263
+
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
7264
+
engines: {node: '>=8'}
7265
+
dependencies:
7266
+
find-up: 3.0.0
6775
7267
dev: true
6776
7268
6777
7269
/possible-typed-array-names@1.0.0:
···
6919
7411
engines: {node: '>= 0.8.0'}
6920
7412
dev: true
6921
7413
7414
+
/prettier-plugin-pkg@0.18.1(prettier@3.3.3):
7415
+
resolution: {integrity: sha512-FuUxvsYZR/8rsLH8s/jbPQmgYvv0yxW8LoIHCy6+Q7p4FBjjdP3DNKx8fMTOsc0SlEB1skB4o1LcahRceIh87A==}
7416
+
engines: {node: ^14.18.0 || >=16.0.0}
7417
+
peerDependencies:
7418
+
prettier: ^3.0.3
7419
+
dependencies:
7420
+
prettier: 3.3.3
7421
+
dev: true
7422
+
6922
7423
/prettier@2.8.8:
6923
7424
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
6924
7425
engines: {node: '>=10.13.0'}
7426
+
hasBin: true
7427
+
dev: true
7428
+
7429
+
/prettier@3.3.3:
7430
+
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
7431
+
engines: {node: '>=14'}
6925
7432
hasBin: true
6926
7433
dev: true
6927
7434
···
7233
7740
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
7234
7741
dev: true
7235
7742
7743
+
/reselect@4.1.8:
7744
+
resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==}
7745
+
dev: true
7746
+
7236
7747
/resolve-cwd@3.0.0:
7237
7748
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
7238
7749
engines: {node: '>=8'}
···
7285
7796
signal-exit: 3.0.7
7286
7797
dev: true
7287
7798
7799
+
/restore-cursor@5.1.0:
7800
+
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
7801
+
engines: {node: '>=18'}
7802
+
dependencies:
7803
+
onetime: 7.0.0
7804
+
signal-exit: 4.1.0
7805
+
dev: true
7806
+
7288
7807
/retry@0.12.0:
7289
7808
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
7290
7809
engines: {node: '>= 4'}
···
7293
7812
/reusify@1.0.4:
7294
7813
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
7295
7814
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
7815
+
dev: true
7816
+
7817
+
/rfdc@1.4.1:
7818
+
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
7296
7819
dev: true
7297
7820
7298
7821
/rimraf@3.0.2:
···
7495
8018
engines: {node: '>=8'}
7496
8019
dev: true
7497
8020
8021
+
/slice-ansi@5.0.0:
8022
+
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
8023
+
engines: {node: '>=12'}
8024
+
dependencies:
8025
+
ansi-styles: 6.2.1
8026
+
is-fullwidth-code-point: 4.0.0
8027
+
dev: true
8028
+
8029
+
/slice-ansi@7.1.0:
8030
+
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
8031
+
engines: {node: '>=18'}
8032
+
dependencies:
8033
+
ansi-styles: 6.2.1
8034
+
is-fullwidth-code-point: 5.0.0
8035
+
dev: true
8036
+
7498
8037
/source-map-js@1.2.0:
7499
8038
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
7500
8039
engines: {node: '>=0.10.0'}
···
7595
8134
resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
7596
8135
dev: true
7597
8136
8137
+
/string-argv@0.3.2:
8138
+
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
8139
+
engines: {node: '>=0.6.19'}
8140
+
dev: true
8141
+
7598
8142
/string-hash@1.1.3:
7599
8143
resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==}
7600
8144
dev: true
···
7625
8169
strip-ansi: 7.1.0
7626
8170
dev: true
7627
8171
8172
+
/string-width@7.2.0:
8173
+
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
8174
+
engines: {node: '>=18'}
8175
+
dependencies:
8176
+
emoji-regex: 10.3.0
8177
+
get-east-asian-width: 1.2.0
8178
+
strip-ansi: 7.1.0
8179
+
dev: true
8180
+
7628
8181
/string.prototype.includes@2.0.0:
7629
8182
resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==}
7630
8183
dependencies:
···
7901
8454
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
7902
8455
dev: true
7903
8456
8457
+
/tinycolor2@1.6.0:
8458
+
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
8459
+
dev: true
8460
+
7904
8461
/tinypool@1.0.0:
7905
8462
resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==}
7906
8463
engines: {node: ^18.0.0 || >=20.0.0}
···
8087
8644
has-proto: 1.0.3
8088
8645
is-typed-array: 1.1.13
8089
8646
possible-typed-array-names: 1.0.0
8647
+
dev: true
8648
+
8649
+
/typescript-eslint@7.18.0(eslint@8.57.0)(typescript@5.5.4):
8650
+
resolution: {integrity: sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==}
8651
+
engines: {node: ^18.18.0 || >=20.0.0}
8652
+
peerDependencies:
8653
+
eslint: ^8.56.0
8654
+
typescript: '*'
8655
+
peerDependenciesMeta:
8656
+
typescript:
8657
+
optional: true
8658
+
dependencies:
8659
+
'@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4)
8660
+
'@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
8661
+
'@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
8662
+
eslint: 8.57.0
8663
+
typescript: 5.5.4
8664
+
transitivePeerDependencies:
8665
+
- supports-color
8090
8666
dev: true
8091
8667
8092
8668
/typescript@5.5.4:
···
8595
9171
dependencies:
8596
9172
ansi-styles: 6.2.1
8597
9173
string-width: 5.1.2
9174
+
strip-ansi: 7.1.0
9175
+
dev: true
9176
+
9177
+
/wrap-ansi@9.0.0:
9178
+
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
9179
+
engines: {node: '>=18'}
9180
+
dependencies:
9181
+
ansi-styles: 6.2.1
9182
+
string-width: 7.2.0
8598
9183
strip-ansi: 7.1.0
8599
9184
dev: true
8600
9185
+6
-1
tsconfig.json
+6
-1
tsconfig.json
···
9
9
],
10
10
"compilerOptions": {
11
11
"lib": ["DOM", "DOM.Iterable", "ES2022"],
12
-
"types": ["@remix-run/node", "vite/client"],
12
+
"types": [
13
+
"@remix-run/node",
14
+
"vite/client",
15
+
"vitest/globals",
16
+
"vitest-environment-vprisma"
17
+
],
13
18
"isolatedModules": true,
14
19
"esModuleInterop": true,
15
20
"jsx": "react-jsx",