+1
.idea/dictionaries/project.xml
+1
.idea/dictionaries/project.xml
+6
.idea/prettier.xml
+6
.idea/prettier.xml
+2
-1
backend/.gitignore
+2
-1
backend/.gitignore
+1
backend/.prettierignore
+1
backend/.prettierignore
···
1
+
pnpm-lock.yaml
+29
backend/.prettierrc
+29
backend/.prettierrc
···
1
+
{
2
+
"trailingComma": "all",
3
+
"useTabs": true,
4
+
"tabWidth": 2,
5
+
"printWidth": 80,
6
+
"semi": true,
7
+
"singleQuote": false,
8
+
"bracketSpacing": true,
9
+
"overrides": [
10
+
{
11
+
"files": [
12
+
"tsconfig.json",
13
+
"jsconfig.json"
14
+
],
15
+
"options": {
16
+
"parser": "jsonc"
17
+
}
18
+
},
19
+
{
20
+
"files": [
21
+
"*.md"
22
+
],
23
+
"options": {
24
+
"printWidth": 100,
25
+
"proseWrap": "always"
26
+
}
27
+
}
28
+
]
29
+
}
+4
backend/.vscode/settings.json
+4
backend/.vscode/settings.json
+13
-8
backend/README.md
+13
-8
backend/README.md
···
1
1
# clippr-be
2
+
2
3
typescript implementation of clippr appview using ~~bun~~ deno and hono
3
4
4
5
## run and develop
6
+
5
7
```sh
6
8
pnpm install
7
9
pnpm run dev
···
10
12
open http://localhost:9090 and enjoy
11
13
12
14
## current status
15
+
13
16
right now we're not running on bun because there are
14
-
[some issues with the jetstream library](https://github.com/oven-sh/bun/issues/18807), which haven't been fixed yet.
17
+
[some issues with the jetstream library](https://github.com/oven-sh/bun/issues/18807), which haven't
18
+
been fixed yet.
15
19
16
20
### checklist before it's usable
17
-
* [ ] Ingesting content from the firehose (using Jetstream)
18
-
* [ ] Creating the lexicon documents and validating content that comes in from the firehose
19
-
* [ ] Indexing valid content from the firehose into a database
20
-
* [ ] Handling OAuth authentication (public OAuth for the moment)
21
-
* [ ] Creating responses to API calls
22
-
* [ ] Create records through the API
23
-
* [ ] Interact with the frontend
21
+
22
+
- [x] Ingesting content from the firehose (using Jetstream)
23
+
- [ ] Creating the lexicon documents and validating content that comes in from the firehose
24
+
- [ ] Indexing valid content from the firehose into a database
25
+
- [ ] Handling OAuth authentication (public OAuth for the moment)
26
+
- [ ] Creating responses to API calls
27
+
- [ ] Create records through the API
28
+
- [ ] Interact with the frontend
+15
-10
backend/drizzle.config.ts
+15
-10
backend/drizzle.config.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {defineConfig} from 'drizzle-kit';
8
-
import {Config} from "./src/config.ts";
7
+
import { defineConfig } from "drizzle-kit";
8
+
import { Config } from "./src/config.ts";
9
9
10
10
const config = Config.getInstance();
11
-
const dbname = config.get("database.name");
11
+
let dbname;
12
+
13
+
dbname = config.get("database.name");
14
+
if (typeof dbname !== "string") {
15
+
dbname = "file:clippr.db"; // Only way to disable linter error
16
+
}
12
17
13
18
export default defineConfig({
14
-
out: './drizzle',
15
-
schema: './src/db/schema.ts',
16
-
dialect: 'sqlite',
17
-
dbCredentials: {
18
-
url: dbname,
19
-
},
20
-
});
19
+
out: "./drizzle",
20
+
schema: "./src/db/schema.ts",
21
+
dialect: "sqlite",
22
+
dbCredentials: {
23
+
url: dbname,
24
+
},
25
+
});
-12
backend/eslint.config.mjs
-12
backend/eslint.config.mjs
···
1
-
import js from "@eslint/js";
2
-
import globals from "globals";
3
-
import tseslint from "typescript-eslint";
4
-
import {defineConfig} from "eslint/config";
5
-
6
-
7
-
export default defineConfig([
8
-
{files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], plugins: {js}, extends: ["js/recommended"]},
9
-
{files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], languageOptions: {globals: globals.browser}},
10
-
tseslint.configs.recommended,
11
-
tseslint.configs.stylistic
12
-
]);
+21
backend/eslint.config.ts
+21
backend/eslint.config.ts
···
1
+
/*
2
+
* clippr: a social bookmarking service for the AT Protocol
3
+
* Copyright (c) 2025 clippr contributors.
4
+
* SPDX-License-Identifier: AGPL-3.0-only
5
+
*/
6
+
7
+
// @ts-check
8
+
9
+
import eslint from "@eslint/js";
10
+
import tseslint from "typescript-eslint";
11
+
import { FlatCompat } from "@eslint/eslintrc";
12
+
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
13
+
14
+
const compat = new FlatCompat({ baseDirectory: import.meta.dirname });
15
+
16
+
export default tseslint.config(
17
+
eslint.configs.recommended,
18
+
tseslint.configs.recommended,
19
+
eslintPluginPrettierRecommended,
20
+
compat.extends("plugin:drizzle/recommended"),
21
+
);
+22
-8
backend/package.json
+22
-8
backend/package.json
···
2
2
"name": "clippr-be",
3
3
"version": "0.1.0",
4
4
"private": "true",
5
-
"homepage": "https://tangled.sh/@hexmani.ac/clippr",
5
+
"repository": "https://tangled.sh/@hexmani.ac/clippr",
6
6
"license": "AGPL-3.0-only",
7
7
"scripts": {
8
8
"dev": "tsx watch src/main.ts",
9
9
"build": "tsc",
10
-
"start": "node dist/index.js"
10
+
"start": "node dist/index.js",
11
+
"lint": "npx eslint .",
12
+
"lint-write": "npx eslint . --fix",
13
+
"fmt": "npx prettier --write .",
14
+
"drizzle-push": "npx drizzle-kit push"
11
15
},
12
16
"type": "module",
17
+
"main": "src/main.ts",
13
18
"dependencies": {
19
+
"@eslint/eslintrc": "^3.3.1",
14
20
"@hono/node-server": "^1.15.0",
15
-
"hono": "^4.8.3",
16
-
"drizzle-orm": "^0.44.2",
17
21
"@libsql/client": "^0.15.9",
18
22
"@skyware/jetstream": "^0.2.2",
23
+
"drizzle-orm": "^0.44.2",
24
+
"hono": "^4.8.3",
19
25
"toml": "^3.0.0"
20
26
},
21
27
"devDependencies": {
22
-
"eslint": "^9.30.1",
23
28
"@eslint/js": "^9.30.1",
24
-
"typescript-eslint": "^8.35.1",
29
+
"@typescript-eslint/eslint-plugin": "^8.35.1",
30
+
"@typescript-eslint/parser": "^8.35.1",
25
31
"drizzle-kit": "^0.31.4",
32
+
"eslint": "^9.30.1",
33
+
"eslint-config-prettier": "^10.1.5",
34
+
"eslint-plugin-drizzle": "^0.2.3",
35
+
"eslint-plugin-import": "^2.32.0",
36
+
"eslint-plugin-prettier": "^5.5.1",
26
37
"globals": "^16.3.0",
38
+
"jiti": "^2.4.2",
39
+
"prettier": "^3.6.2",
27
40
"tsx": "^4.20.3",
28
-
"typescript": "^5.8.3"
41
+
"typescript": "^5.8.3",
42
+
"typescript-eslint": "^8.35.1"
29
43
}
30
-
}
44
+
}
+1294
-24
backend/pnpm-lock.yaml
+1294
-24
backend/pnpm-lock.yaml
···
8
8
9
9
.:
10
10
dependencies:
11
+
'@eslint/eslintrc':
12
+
specifier: ^3.3.1
13
+
version: 3.3.1
11
14
'@hono/node-server':
12
15
specifier: ^1.15.0
13
16
version: 1.15.0(hono@4.8.3)
···
30
33
'@eslint/js':
31
34
specifier: ^9.30.1
32
35
version: 9.30.1
36
+
'@typescript-eslint/eslint-plugin':
37
+
specifier: ^8.35.1
38
+
version: 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
39
+
'@typescript-eslint/parser':
40
+
specifier: ^8.35.1
41
+
version: 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
33
42
drizzle-kit:
34
43
specifier: ^0.31.4
35
44
version: 0.31.4
36
45
eslint:
37
46
specifier: ^9.30.1
38
-
version: 9.30.1
47
+
version: 9.30.1(jiti@2.4.2)
48
+
eslint-config-prettier:
49
+
specifier: ^10.1.5
50
+
version: 10.1.5(eslint@9.30.1(jiti@2.4.2))
51
+
eslint-plugin-drizzle:
52
+
specifier: ^0.2.3
53
+
version: 0.2.3(eslint@9.30.1(jiti@2.4.2))
54
+
eslint-plugin-import:
55
+
specifier: ^2.32.0
56
+
version: 2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))
57
+
eslint-plugin-prettier:
58
+
specifier: ^5.5.1
59
+
version: 5.5.1(eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)))(eslint@9.30.1(jiti@2.4.2))(prettier@3.6.2)
39
60
globals:
40
61
specifier: ^16.3.0
41
62
version: 16.3.0
63
+
jiti:
64
+
specifier: ^2.4.2
65
+
version: 2.4.2
66
+
prettier:
67
+
specifier: ^3.6.2
68
+
version: 3.6.2
42
69
tsx:
43
70
specifier: ^4.20.3
44
71
version: 4.20.3
···
47
74
version: 5.8.3
48
75
typescript-eslint:
49
76
specifier: ^8.35.1
50
-
version: 8.35.1(eslint@9.30.1)(typescript@5.8.3)
77
+
version: 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
51
78
52
79
packages:
53
80
···
496
523
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
497
524
engines: {node: '>= 8'}
498
525
526
+
'@pkgr/core@0.2.7':
527
+
resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
528
+
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
529
+
530
+
'@rtsao/scc@1.1.0':
531
+
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
532
+
499
533
'@skyware/jetstream@0.2.2':
500
534
resolution: {integrity: sha512-d1MtWPTIFEciSzV8OClXZCJoz0DJ7aupt4EZSwpGAASYG0ZIPmZTt7RVJkoFzQyqRPHAMD7CvEwu0ut3MHX1og==}
501
535
···
504
538
505
539
'@types/json-schema@7.0.15':
506
540
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
541
+
542
+
'@types/json5@0.0.29':
543
+
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
507
544
508
545
'@types/node@24.0.10':
509
546
resolution: {integrity: sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==}
···
590
627
argparse@2.0.1:
591
628
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
592
629
630
+
array-buffer-byte-length@1.0.2:
631
+
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
632
+
engines: {node: '>= 0.4'}
633
+
634
+
array-includes@3.1.9:
635
+
resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
636
+
engines: {node: '>= 0.4'}
637
+
638
+
array.prototype.findlastindex@1.2.6:
639
+
resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
640
+
engines: {node: '>= 0.4'}
641
+
642
+
array.prototype.flat@1.3.3:
643
+
resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
644
+
engines: {node: '>= 0.4'}
645
+
646
+
array.prototype.flatmap@1.3.3:
647
+
resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
648
+
engines: {node: '>= 0.4'}
649
+
650
+
arraybuffer.prototype.slice@1.0.4:
651
+
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
652
+
engines: {node: '>= 0.4'}
653
+
654
+
async-function@1.0.0:
655
+
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
656
+
engines: {node: '>= 0.4'}
657
+
658
+
available-typed-arrays@1.0.7:
659
+
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
660
+
engines: {node: '>= 0.4'}
661
+
593
662
balanced-match@1.0.2:
594
663
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
595
664
···
609
678
bun-types@1.2.17:
610
679
resolution: {integrity: sha512-ElC7ItwT3SCQwYZDYoAH+q6KT4Fxjl8DtZ6qDulUFBmXA8YB4xo+l54J9ZJN+k2pphfn9vk7kfubeSd5QfTVJQ==}
611
680
681
+
call-bind-apply-helpers@1.0.2:
682
+
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
683
+
engines: {node: '>= 0.4'}
684
+
685
+
call-bind@1.0.8:
686
+
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
687
+
engines: {node: '>= 0.4'}
688
+
689
+
call-bound@1.0.4:
690
+
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
691
+
engines: {node: '>= 0.4'}
692
+
612
693
callsites@3.1.0:
613
694
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
614
695
engines: {node: '>=6'}
···
635
716
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
636
717
engines: {node: '>= 12'}
637
718
719
+
data-view-buffer@1.0.2:
720
+
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
721
+
engines: {node: '>= 0.4'}
722
+
723
+
data-view-byte-length@1.0.2:
724
+
resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
725
+
engines: {node: '>= 0.4'}
726
+
727
+
data-view-byte-offset@1.0.1:
728
+
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
729
+
engines: {node: '>= 0.4'}
730
+
731
+
debug@3.2.7:
732
+
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
733
+
peerDependencies:
734
+
supports-color: '*'
735
+
peerDependenciesMeta:
736
+
supports-color:
737
+
optional: true
738
+
638
739
debug@4.4.1:
639
740
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
640
741
engines: {node: '>=6.0'}
···
647
748
deep-is@0.1.4:
648
749
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
649
750
751
+
define-data-property@1.1.4:
752
+
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
753
+
engines: {node: '>= 0.4'}
754
+
755
+
define-properties@1.2.1:
756
+
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
757
+
engines: {node: '>= 0.4'}
758
+
650
759
detect-libc@2.0.2:
651
760
resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
652
761
engines: {node: '>=8'}
762
+
763
+
doctrine@2.1.0:
764
+
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
765
+
engines: {node: '>=0.10.0'}
653
766
654
767
drizzle-kit@0.31.4:
655
768
resolution: {integrity: sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==}
···
747
860
sqlite3:
748
861
optional: true
749
862
863
+
dunder-proto@1.0.1:
864
+
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
865
+
engines: {node: '>= 0.4'}
866
+
867
+
es-abstract@1.24.0:
868
+
resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
869
+
engines: {node: '>= 0.4'}
870
+
871
+
es-define-property@1.0.1:
872
+
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
873
+
engines: {node: '>= 0.4'}
874
+
875
+
es-errors@1.3.0:
876
+
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
877
+
engines: {node: '>= 0.4'}
878
+
879
+
es-object-atoms@1.1.1:
880
+
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
881
+
engines: {node: '>= 0.4'}
882
+
883
+
es-set-tostringtag@2.1.0:
884
+
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
885
+
engines: {node: '>= 0.4'}
886
+
887
+
es-shim-unscopables@1.1.0:
888
+
resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
889
+
engines: {node: '>= 0.4'}
890
+
891
+
es-to-primitive@1.3.0:
892
+
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
893
+
engines: {node: '>= 0.4'}
894
+
750
895
esbuild-register@3.6.0:
751
896
resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
752
897
peerDependencies:
···
766
911
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
767
912
engines: {node: '>=10'}
768
913
914
+
eslint-config-prettier@10.1.5:
915
+
resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==}
916
+
hasBin: true
917
+
peerDependencies:
918
+
eslint: '>=7.0.0'
919
+
920
+
eslint-import-resolver-node@0.3.9:
921
+
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
922
+
923
+
eslint-module-utils@2.12.1:
924
+
resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
925
+
engines: {node: '>=4'}
926
+
peerDependencies:
927
+
'@typescript-eslint/parser': '*'
928
+
eslint: '*'
929
+
eslint-import-resolver-node: '*'
930
+
eslint-import-resolver-typescript: '*'
931
+
eslint-import-resolver-webpack: '*'
932
+
peerDependenciesMeta:
933
+
'@typescript-eslint/parser':
934
+
optional: true
935
+
eslint:
936
+
optional: true
937
+
eslint-import-resolver-node:
938
+
optional: true
939
+
eslint-import-resolver-typescript:
940
+
optional: true
941
+
eslint-import-resolver-webpack:
942
+
optional: true
943
+
944
+
eslint-plugin-drizzle@0.2.3:
945
+
resolution: {integrity: sha512-BO+ymHo33IUNoJlC0rbd7HP9EwwpW4VIp49R/tWQF/d2E1K2kgTf0tCXT0v9MSiBr6gGR1LtPwMLapTKEWSg9A==}
946
+
peerDependencies:
947
+
eslint: '>=8.0.0'
948
+
949
+
eslint-plugin-import@2.32.0:
950
+
resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==}
951
+
engines: {node: '>=4'}
952
+
peerDependencies:
953
+
'@typescript-eslint/parser': '*'
954
+
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
955
+
peerDependenciesMeta:
956
+
'@typescript-eslint/parser':
957
+
optional: true
958
+
959
+
eslint-plugin-prettier@5.5.1:
960
+
resolution: {integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==}
961
+
engines: {node: ^14.18.0 || >=16.0.0}
962
+
peerDependencies:
963
+
'@types/eslint': '>=8.0.0'
964
+
eslint: '>=8.0.0'
965
+
eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
966
+
prettier: '>=3.0.0'
967
+
peerDependenciesMeta:
968
+
'@types/eslint':
969
+
optional: true
970
+
eslint-config-prettier:
971
+
optional: true
972
+
769
973
eslint-scope@8.4.0:
770
974
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
771
975
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
···
814
1018
fast-deep-equal@3.1.3:
815
1019
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
816
1020
1021
+
fast-diff@1.3.0:
1022
+
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
1023
+
817
1024
fast-glob@3.3.3:
818
1025
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
819
1026
engines: {node: '>=8.6.0'}
···
850
1057
flatted@3.3.3:
851
1058
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
852
1059
1060
+
for-each@0.3.5:
1061
+
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
1062
+
engines: {node: '>= 0.4'}
1063
+
853
1064
formdata-polyfill@4.0.10:
854
1065
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
855
1066
engines: {node: '>=12.20.0'}
···
859
1070
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
860
1071
os: [darwin]
861
1072
1073
+
function-bind@1.1.2:
1074
+
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1075
+
1076
+
function.prototype.name@1.1.8:
1077
+
resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
1078
+
engines: {node: '>= 0.4'}
1079
+
1080
+
functions-have-names@1.2.3:
1081
+
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1082
+
1083
+
get-intrinsic@1.3.0:
1084
+
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
1085
+
engines: {node: '>= 0.4'}
1086
+
1087
+
get-proto@1.0.1:
1088
+
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
1089
+
engines: {node: '>= 0.4'}
1090
+
1091
+
get-symbol-description@1.1.0:
1092
+
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
1093
+
engines: {node: '>= 0.4'}
1094
+
862
1095
get-tsconfig@4.10.1:
863
1096
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
864
1097
···
878
1111
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
879
1112
engines: {node: '>=18'}
880
1113
1114
+
globalthis@1.0.4:
1115
+
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
1116
+
engines: {node: '>= 0.4'}
1117
+
1118
+
gopd@1.2.0:
1119
+
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
1120
+
engines: {node: '>= 0.4'}
1121
+
881
1122
graphemer@1.4.0:
882
1123
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
883
1124
1125
+
has-bigints@1.1.0:
1126
+
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
1127
+
engines: {node: '>= 0.4'}
1128
+
884
1129
has-flag@4.0.0:
885
1130
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
886
1131
engines: {node: '>=8'}
887
1132
1133
+
has-property-descriptors@1.0.2:
1134
+
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1135
+
1136
+
has-proto@1.2.0:
1137
+
resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
1138
+
engines: {node: '>= 0.4'}
1139
+
1140
+
has-symbols@1.1.0:
1141
+
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1142
+
engines: {node: '>= 0.4'}
1143
+
1144
+
has-tostringtag@1.0.2:
1145
+
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1146
+
engines: {node: '>= 0.4'}
1147
+
1148
+
hasown@2.0.2:
1149
+
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1150
+
engines: {node: '>= 0.4'}
1151
+
888
1152
hono@4.8.3:
889
1153
resolution: {integrity: sha512-jYZ6ZtfWjzBdh8H/0CIFfCBHaFL75k+KMzaM177hrWWm2TWL39YMYaJgB74uK/niRc866NMlH9B8uCvIo284WQ==}
890
1154
engines: {node: '>=16.9.0'}
···
905
1169
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
906
1170
engines: {node: '>=0.8.19'}
907
1171
1172
+
internal-slot@1.1.0:
1173
+
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
1174
+
engines: {node: '>= 0.4'}
1175
+
1176
+
is-array-buffer@3.0.5:
1177
+
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
1178
+
engines: {node: '>= 0.4'}
1179
+
1180
+
is-async-function@2.1.1:
1181
+
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
1182
+
engines: {node: '>= 0.4'}
1183
+
1184
+
is-bigint@1.1.0:
1185
+
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
1186
+
engines: {node: '>= 0.4'}
1187
+
1188
+
is-boolean-object@1.2.2:
1189
+
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
1190
+
engines: {node: '>= 0.4'}
1191
+
1192
+
is-callable@1.2.7:
1193
+
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1194
+
engines: {node: '>= 0.4'}
1195
+
1196
+
is-core-module@2.16.1:
1197
+
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1198
+
engines: {node: '>= 0.4'}
1199
+
1200
+
is-data-view@1.0.2:
1201
+
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
1202
+
engines: {node: '>= 0.4'}
1203
+
1204
+
is-date-object@1.1.0:
1205
+
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
1206
+
engines: {node: '>= 0.4'}
1207
+
908
1208
is-extglob@2.1.1:
909
1209
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
910
1210
engines: {node: '>=0.10.0'}
911
1211
1212
+
is-finalizationregistry@1.1.1:
1213
+
resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
1214
+
engines: {node: '>= 0.4'}
1215
+
1216
+
is-generator-function@1.1.0:
1217
+
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
1218
+
engines: {node: '>= 0.4'}
1219
+
912
1220
is-glob@4.0.3:
913
1221
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
914
1222
engines: {node: '>=0.10.0'}
915
1223
1224
+
is-map@2.0.3:
1225
+
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
1226
+
engines: {node: '>= 0.4'}
1227
+
1228
+
is-negative-zero@2.0.3:
1229
+
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
1230
+
engines: {node: '>= 0.4'}
1231
+
1232
+
is-number-object@1.1.1:
1233
+
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
1234
+
engines: {node: '>= 0.4'}
1235
+
916
1236
is-number@7.0.0:
917
1237
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
918
1238
engines: {node: '>=0.12.0'}
919
1239
1240
+
is-regex@1.2.1:
1241
+
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
1242
+
engines: {node: '>= 0.4'}
1243
+
1244
+
is-set@2.0.3:
1245
+
resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
1246
+
engines: {node: '>= 0.4'}
1247
+
1248
+
is-shared-array-buffer@1.0.4:
1249
+
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
1250
+
engines: {node: '>= 0.4'}
1251
+
1252
+
is-string@1.1.1:
1253
+
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
1254
+
engines: {node: '>= 0.4'}
1255
+
1256
+
is-symbol@1.1.1:
1257
+
resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
1258
+
engines: {node: '>= 0.4'}
1259
+
1260
+
is-typed-array@1.1.15:
1261
+
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
1262
+
engines: {node: '>= 0.4'}
1263
+
1264
+
is-weakmap@2.0.2:
1265
+
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
1266
+
engines: {node: '>= 0.4'}
1267
+
1268
+
is-weakref@1.1.1:
1269
+
resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
1270
+
engines: {node: '>= 0.4'}
1271
+
1272
+
is-weakset@2.0.4:
1273
+
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
1274
+
engines: {node: '>= 0.4'}
1275
+
1276
+
isarray@2.0.5:
1277
+
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1278
+
920
1279
isexe@2.0.0:
921
1280
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1281
+
1282
+
jiti@2.4.2:
1283
+
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1284
+
hasBin: true
922
1285
923
1286
js-base64@3.7.7:
924
1287
resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
···
936
1299
json-stable-stringify-without-jsonify@1.0.1:
937
1300
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
938
1301
1302
+
json5@1.0.2:
1303
+
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
1304
+
hasBin: true
1305
+
939
1306
keyv@4.5.4:
940
1307
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
941
1308
···
955
1322
lodash.merge@4.6.2:
956
1323
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
957
1324
1325
+
math-intrinsics@1.1.0:
1326
+
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1327
+
engines: {node: '>= 0.4'}
1328
+
958
1329
merge2@1.4.1:
959
1330
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
960
1331
engines: {node: '>= 8'}
···
969
1340
minimatch@9.0.5:
970
1341
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
971
1342
engines: {node: '>=16 || 14 >=14.17'}
1343
+
1344
+
minimist@1.2.8:
1345
+
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
972
1346
973
1347
ms@2.1.3:
974
1348
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
···
985
1359
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
986
1360
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
987
1361
1362
+
object-inspect@1.13.4:
1363
+
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
1364
+
engines: {node: '>= 0.4'}
1365
+
1366
+
object-keys@1.1.1:
1367
+
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1368
+
engines: {node: '>= 0.4'}
1369
+
1370
+
object.assign@4.1.7:
1371
+
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
1372
+
engines: {node: '>= 0.4'}
1373
+
1374
+
object.fromentries@2.0.8:
1375
+
resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
1376
+
engines: {node: '>= 0.4'}
1377
+
1378
+
object.groupby@1.0.3:
1379
+
resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
1380
+
engines: {node: '>= 0.4'}
1381
+
1382
+
object.values@1.2.1:
1383
+
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
1384
+
engines: {node: '>= 0.4'}
1385
+
988
1386
optionator@0.9.4:
989
1387
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
990
1388
engines: {node: '>= 0.8.0'}
991
1389
1390
+
own-keys@1.0.1:
1391
+
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
1392
+
engines: {node: '>= 0.4'}
1393
+
992
1394
p-limit@3.1.0:
993
1395
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
994
1396
engines: {node: '>=10'}
···
1012
1414
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1013
1415
engines: {node: '>=8'}
1014
1416
1417
+
path-parse@1.0.7:
1418
+
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1419
+
1015
1420
picomatch@2.3.1:
1016
1421
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1017
1422
engines: {node: '>=8.6'}
1423
+
1424
+
possible-typed-array-names@1.1.0:
1425
+
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
1426
+
engines: {node: '>= 0.4'}
1018
1427
1019
1428
prelude-ls@1.2.1:
1020
1429
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1021
1430
engines: {node: '>= 0.8.0'}
1022
1431
1432
+
prettier-linter-helpers@1.0.0:
1433
+
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
1434
+
engines: {node: '>=6.0.0'}
1435
+
1436
+
prettier@3.6.2:
1437
+
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
1438
+
engines: {node: '>=14'}
1439
+
hasBin: true
1440
+
1023
1441
promise-limit@2.7.0:
1024
1442
resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==}
1025
1443
···
1030
1448
queue-microtask@1.2.3:
1031
1449
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1032
1450
1451
+
reflect.getprototypeof@1.0.10:
1452
+
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
1453
+
engines: {node: '>= 0.4'}
1454
+
1455
+
regexp.prototype.flags@1.5.4:
1456
+
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
1457
+
engines: {node: '>= 0.4'}
1458
+
1033
1459
resolve-from@4.0.0:
1034
1460
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1035
1461
engines: {node: '>=4'}
···
1037
1463
resolve-pkg-maps@1.0.0:
1038
1464
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
1039
1465
1466
+
resolve@1.22.10:
1467
+
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1468
+
engines: {node: '>= 0.4'}
1469
+
hasBin: true
1470
+
1040
1471
reusify@1.1.0:
1041
1472
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1042
1473
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
···
1044
1475
run-parallel@1.2.0:
1045
1476
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1046
1477
1478
+
safe-array-concat@1.1.3:
1479
+
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1480
+
engines: {node: '>=0.4'}
1481
+
1482
+
safe-push-apply@1.0.0:
1483
+
resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1484
+
engines: {node: '>= 0.4'}
1485
+
1486
+
safe-regex-test@1.1.0:
1487
+
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1488
+
engines: {node: '>= 0.4'}
1489
+
1490
+
semver@6.3.1:
1491
+
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1492
+
hasBin: true
1493
+
1047
1494
semver@7.7.2:
1048
1495
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
1049
1496
engines: {node: '>=10'}
1050
1497
hasBin: true
1051
1498
1499
+
set-function-length@1.2.2:
1500
+
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1501
+
engines: {node: '>= 0.4'}
1502
+
1503
+
set-function-name@2.0.2:
1504
+
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1505
+
engines: {node: '>= 0.4'}
1506
+
1507
+
set-proto@1.0.0:
1508
+
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
1509
+
engines: {node: '>= 0.4'}
1510
+
1052
1511
shebang-command@2.0.0:
1053
1512
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1054
1513
engines: {node: '>=8'}
···
1057
1516
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1058
1517
engines: {node: '>=8'}
1059
1518
1519
+
side-channel-list@1.0.0:
1520
+
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1521
+
engines: {node: '>= 0.4'}
1522
+
1523
+
side-channel-map@1.0.1:
1524
+
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1525
+
engines: {node: '>= 0.4'}
1526
+
1527
+
side-channel-weakmap@1.0.2:
1528
+
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1529
+
engines: {node: '>= 0.4'}
1530
+
1531
+
side-channel@1.1.0:
1532
+
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1533
+
engines: {node: '>= 0.4'}
1534
+
1060
1535
source-map-support@0.5.21:
1061
1536
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1062
1537
···
1064
1539
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1065
1540
engines: {node: '>=0.10.0'}
1066
1541
1542
+
stop-iteration-iterator@1.1.0:
1543
+
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
1544
+
engines: {node: '>= 0.4'}
1545
+
1546
+
string.prototype.trim@1.2.10:
1547
+
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1548
+
engines: {node: '>= 0.4'}
1549
+
1550
+
string.prototype.trimend@1.0.9:
1551
+
resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1552
+
engines: {node: '>= 0.4'}
1553
+
1554
+
string.prototype.trimstart@1.0.8:
1555
+
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1556
+
engines: {node: '>= 0.4'}
1557
+
1558
+
strip-bom@3.0.0:
1559
+
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1560
+
engines: {node: '>=4'}
1561
+
1067
1562
strip-json-comments@3.1.1:
1068
1563
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1069
1564
engines: {node: '>=8'}
···
1072
1567
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1073
1568
engines: {node: '>=8'}
1074
1569
1570
+
supports-preserve-symlinks-flag@1.0.0:
1571
+
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1572
+
engines: {node: '>= 0.4'}
1573
+
1574
+
synckit@0.11.8:
1575
+
resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
1576
+
engines: {node: ^14.18.0 || >=16.0.0}
1577
+
1075
1578
to-regex-range@5.0.1:
1076
1579
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1077
1580
engines: {node: '>=8.0'}
···
1085
1588
peerDependencies:
1086
1589
typescript: '>=4.8.4'
1087
1590
1591
+
tsconfig-paths@3.15.0:
1592
+
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
1593
+
1088
1594
tsx@4.20.3:
1089
1595
resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==}
1090
1596
engines: {node: '>=18.0.0'}
···
1094
1600
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1095
1601
engines: {node: '>= 0.8.0'}
1096
1602
1603
+
typed-array-buffer@1.0.3:
1604
+
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1605
+
engines: {node: '>= 0.4'}
1606
+
1607
+
typed-array-byte-length@1.0.3:
1608
+
resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1609
+
engines: {node: '>= 0.4'}
1610
+
1611
+
typed-array-byte-offset@1.0.4:
1612
+
resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1613
+
engines: {node: '>= 0.4'}
1614
+
1615
+
typed-array-length@1.0.7:
1616
+
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1617
+
engines: {node: '>= 0.4'}
1618
+
1097
1619
typescript-eslint@8.35.1:
1098
1620
resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==}
1099
1621
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
···
1106
1628
engines: {node: '>=14.17'}
1107
1629
hasBin: true
1108
1630
1631
+
unbox-primitive@1.1.0:
1632
+
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1633
+
engines: {node: '>= 0.4'}
1634
+
1109
1635
undici-types@7.8.0:
1110
1636
resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
1111
1637
···
1116
1642
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
1117
1643
engines: {node: '>= 8'}
1118
1644
1645
+
which-boxed-primitive@1.1.1:
1646
+
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
1647
+
engines: {node: '>= 0.4'}
1648
+
1649
+
which-builtin-type@1.2.1:
1650
+
resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
1651
+
engines: {node: '>= 0.4'}
1652
+
1653
+
which-collection@1.0.2:
1654
+
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
1655
+
engines: {node: '>= 0.4'}
1656
+
1657
+
which-typed-array@1.1.19:
1658
+
resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
1659
+
engines: {node: '>= 0.4'}
1660
+
1119
1661
which@2.0.2:
1120
1662
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1121
1663
engines: {node: '>= 8'}
···
1302
1844
'@esbuild/win32-x64@0.25.5':
1303
1845
optional: true
1304
1846
1305
-
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.1)':
1847
+
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))':
1306
1848
dependencies:
1307
-
eslint: 9.30.1
1849
+
eslint: 9.30.1(jiti@2.4.2)
1308
1850
eslint-visitor-keys: 3.4.3
1309
1851
1310
1852
'@eslint-community/regexpp@4.12.1': {}
···
1443
1985
'@nodelib/fs.scandir': 2.1.5
1444
1986
fastq: 1.19.1
1445
1987
1988
+
'@pkgr/core@0.2.7': {}
1989
+
1990
+
'@rtsao/scc@1.1.0': {}
1991
+
1446
1992
'@skyware/jetstream@0.2.2(@atcute/client@2.0.9)':
1447
1993
dependencies:
1448
1994
'@atcute/bluesky': 1.0.15(@atcute/client@2.0.9)
···
1454
2000
1455
2001
'@types/json-schema@7.0.15': {}
1456
2002
2003
+
'@types/json5@0.0.29': {}
2004
+
1457
2005
'@types/node@24.0.10':
1458
2006
dependencies:
1459
2007
undici-types: 7.8.0
···
1462
2010
dependencies:
1463
2011
'@types/node': 24.0.10
1464
2012
1465
-
'@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3)':
2013
+
'@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
1466
2014
dependencies:
1467
2015
'@eslint-community/regexpp': 4.12.1
1468
-
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1)(typescript@5.8.3)
2016
+
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
1469
2017
'@typescript-eslint/scope-manager': 8.35.1
1470
-
'@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3)
1471
-
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3)
2018
+
'@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
2019
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
1472
2020
'@typescript-eslint/visitor-keys': 8.35.1
1473
-
eslint: 9.30.1
2021
+
eslint: 9.30.1(jiti@2.4.2)
1474
2022
graphemer: 1.4.0
1475
2023
ignore: 7.0.5
1476
2024
natural-compare: 1.4.0
···
1479
2027
transitivePeerDependencies:
1480
2028
- supports-color
1481
2029
1482
-
'@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3)':
2030
+
'@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
1483
2031
dependencies:
1484
2032
'@typescript-eslint/scope-manager': 8.35.1
1485
2033
'@typescript-eslint/types': 8.35.1
1486
2034
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
1487
2035
'@typescript-eslint/visitor-keys': 8.35.1
1488
2036
debug: 4.4.1
1489
-
eslint: 9.30.1
2037
+
eslint: 9.30.1(jiti@2.4.2)
1490
2038
typescript: 5.8.3
1491
2039
transitivePeerDependencies:
1492
2040
- supports-color
···
1509
2057
dependencies:
1510
2058
typescript: 5.8.3
1511
2059
1512
-
'@typescript-eslint/type-utils@8.35.1(eslint@9.30.1)(typescript@5.8.3)':
2060
+
'@typescript-eslint/type-utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
1513
2061
dependencies:
1514
2062
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
1515
-
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3)
2063
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
1516
2064
debug: 4.4.1
1517
-
eslint: 9.30.1
2065
+
eslint: 9.30.1(jiti@2.4.2)
1518
2066
ts-api-utils: 2.1.0(typescript@5.8.3)
1519
2067
typescript: 5.8.3
1520
2068
transitivePeerDependencies:
···
1538
2086
transitivePeerDependencies:
1539
2087
- supports-color
1540
2088
1541
-
'@typescript-eslint/utils@8.35.1(eslint@9.30.1)(typescript@5.8.3)':
2089
+
'@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
1542
2090
dependencies:
1543
-
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1)
2091
+
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
1544
2092
'@typescript-eslint/scope-manager': 8.35.1
1545
2093
'@typescript-eslint/types': 8.35.1
1546
2094
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
1547
-
eslint: 9.30.1
2095
+
eslint: 9.30.1(jiti@2.4.2)
1548
2096
typescript: 5.8.3
1549
2097
transitivePeerDependencies:
1550
2098
- supports-color
···
1573
2121
1574
2122
argparse@2.0.1: {}
1575
2123
2124
+
array-buffer-byte-length@1.0.2:
2125
+
dependencies:
2126
+
call-bound: 1.0.4
2127
+
is-array-buffer: 3.0.5
2128
+
2129
+
array-includes@3.1.9:
2130
+
dependencies:
2131
+
call-bind: 1.0.8
2132
+
call-bound: 1.0.4
2133
+
define-properties: 1.2.1
2134
+
es-abstract: 1.24.0
2135
+
es-object-atoms: 1.1.1
2136
+
get-intrinsic: 1.3.0
2137
+
is-string: 1.1.1
2138
+
math-intrinsics: 1.1.0
2139
+
2140
+
array.prototype.findlastindex@1.2.6:
2141
+
dependencies:
2142
+
call-bind: 1.0.8
2143
+
call-bound: 1.0.4
2144
+
define-properties: 1.2.1
2145
+
es-abstract: 1.24.0
2146
+
es-errors: 1.3.0
2147
+
es-object-atoms: 1.1.1
2148
+
es-shim-unscopables: 1.1.0
2149
+
2150
+
array.prototype.flat@1.3.3:
2151
+
dependencies:
2152
+
call-bind: 1.0.8
2153
+
define-properties: 1.2.1
2154
+
es-abstract: 1.24.0
2155
+
es-shim-unscopables: 1.1.0
2156
+
2157
+
array.prototype.flatmap@1.3.3:
2158
+
dependencies:
2159
+
call-bind: 1.0.8
2160
+
define-properties: 1.2.1
2161
+
es-abstract: 1.24.0
2162
+
es-shim-unscopables: 1.1.0
2163
+
2164
+
arraybuffer.prototype.slice@1.0.4:
2165
+
dependencies:
2166
+
array-buffer-byte-length: 1.0.2
2167
+
call-bind: 1.0.8
2168
+
define-properties: 1.2.1
2169
+
es-abstract: 1.24.0
2170
+
es-errors: 1.3.0
2171
+
get-intrinsic: 1.3.0
2172
+
is-array-buffer: 3.0.5
2173
+
2174
+
async-function@1.0.0: {}
2175
+
2176
+
available-typed-arrays@1.0.7:
2177
+
dependencies:
2178
+
possible-typed-array-names: 1.1.0
2179
+
1576
2180
balanced-match@1.0.2: {}
1577
2181
1578
2182
brace-expansion@1.1.12:
···
1595
2199
'@types/node': 24.0.10
1596
2200
optional: true
1597
2201
2202
+
call-bind-apply-helpers@1.0.2:
2203
+
dependencies:
2204
+
es-errors: 1.3.0
2205
+
function-bind: 1.1.2
2206
+
2207
+
call-bind@1.0.8:
2208
+
dependencies:
2209
+
call-bind-apply-helpers: 1.0.2
2210
+
es-define-property: 1.0.1
2211
+
get-intrinsic: 1.3.0
2212
+
set-function-length: 1.2.2
2213
+
2214
+
call-bound@1.0.4:
2215
+
dependencies:
2216
+
call-bind-apply-helpers: 1.0.2
2217
+
get-intrinsic: 1.3.0
2218
+
1598
2219
callsites@3.1.0: {}
1599
2220
1600
2221
chalk@4.1.2:
···
1618
2239
1619
2240
data-uri-to-buffer@4.0.1: {}
1620
2241
2242
+
data-view-buffer@1.0.2:
2243
+
dependencies:
2244
+
call-bound: 1.0.4
2245
+
es-errors: 1.3.0
2246
+
is-data-view: 1.0.2
2247
+
2248
+
data-view-byte-length@1.0.2:
2249
+
dependencies:
2250
+
call-bound: 1.0.4
2251
+
es-errors: 1.3.0
2252
+
is-data-view: 1.0.2
2253
+
2254
+
data-view-byte-offset@1.0.1:
2255
+
dependencies:
2256
+
call-bound: 1.0.4
2257
+
es-errors: 1.3.0
2258
+
is-data-view: 1.0.2
2259
+
2260
+
debug@3.2.7:
2261
+
dependencies:
2262
+
ms: 2.1.3
2263
+
1621
2264
debug@4.4.1:
1622
2265
dependencies:
1623
2266
ms: 2.1.3
1624
2267
1625
2268
deep-is@0.1.4: {}
1626
2269
2270
+
define-data-property@1.1.4:
2271
+
dependencies:
2272
+
es-define-property: 1.0.1
2273
+
es-errors: 1.3.0
2274
+
gopd: 1.2.0
2275
+
2276
+
define-properties@1.2.1:
2277
+
dependencies:
2278
+
define-data-property: 1.1.4
2279
+
has-property-descriptors: 1.0.2
2280
+
object-keys: 1.1.1
2281
+
1627
2282
detect-libc@2.0.2: {}
1628
2283
2284
+
doctrine@2.1.0:
2285
+
dependencies:
2286
+
esutils: 2.0.3
2287
+
1629
2288
drizzle-kit@0.31.4:
1630
2289
dependencies:
1631
2290
'@drizzle-team/brocli': 0.10.2
···
1640
2299
'@libsql/client': 0.15.9
1641
2300
bun-types: 1.2.17
1642
2301
2302
+
dunder-proto@1.0.1:
2303
+
dependencies:
2304
+
call-bind-apply-helpers: 1.0.2
2305
+
es-errors: 1.3.0
2306
+
gopd: 1.2.0
2307
+
2308
+
es-abstract@1.24.0:
2309
+
dependencies:
2310
+
array-buffer-byte-length: 1.0.2
2311
+
arraybuffer.prototype.slice: 1.0.4
2312
+
available-typed-arrays: 1.0.7
2313
+
call-bind: 1.0.8
2314
+
call-bound: 1.0.4
2315
+
data-view-buffer: 1.0.2
2316
+
data-view-byte-length: 1.0.2
2317
+
data-view-byte-offset: 1.0.1
2318
+
es-define-property: 1.0.1
2319
+
es-errors: 1.3.0
2320
+
es-object-atoms: 1.1.1
2321
+
es-set-tostringtag: 2.1.0
2322
+
es-to-primitive: 1.3.0
2323
+
function.prototype.name: 1.1.8
2324
+
get-intrinsic: 1.3.0
2325
+
get-proto: 1.0.1
2326
+
get-symbol-description: 1.1.0
2327
+
globalthis: 1.0.4
2328
+
gopd: 1.2.0
2329
+
has-property-descriptors: 1.0.2
2330
+
has-proto: 1.2.0
2331
+
has-symbols: 1.1.0
2332
+
hasown: 2.0.2
2333
+
internal-slot: 1.1.0
2334
+
is-array-buffer: 3.0.5
2335
+
is-callable: 1.2.7
2336
+
is-data-view: 1.0.2
2337
+
is-negative-zero: 2.0.3
2338
+
is-regex: 1.2.1
2339
+
is-set: 2.0.3
2340
+
is-shared-array-buffer: 1.0.4
2341
+
is-string: 1.1.1
2342
+
is-typed-array: 1.1.15
2343
+
is-weakref: 1.1.1
2344
+
math-intrinsics: 1.1.0
2345
+
object-inspect: 1.13.4
2346
+
object-keys: 1.1.1
2347
+
object.assign: 4.1.7
2348
+
own-keys: 1.0.1
2349
+
regexp.prototype.flags: 1.5.4
2350
+
safe-array-concat: 1.1.3
2351
+
safe-push-apply: 1.0.0
2352
+
safe-regex-test: 1.1.0
2353
+
set-proto: 1.0.0
2354
+
stop-iteration-iterator: 1.1.0
2355
+
string.prototype.trim: 1.2.10
2356
+
string.prototype.trimend: 1.0.9
2357
+
string.prototype.trimstart: 1.0.8
2358
+
typed-array-buffer: 1.0.3
2359
+
typed-array-byte-length: 1.0.3
2360
+
typed-array-byte-offset: 1.0.4
2361
+
typed-array-length: 1.0.7
2362
+
unbox-primitive: 1.1.0
2363
+
which-typed-array: 1.1.19
2364
+
2365
+
es-define-property@1.0.1: {}
2366
+
2367
+
es-errors@1.3.0: {}
2368
+
2369
+
es-object-atoms@1.1.1:
2370
+
dependencies:
2371
+
es-errors: 1.3.0
2372
+
2373
+
es-set-tostringtag@2.1.0:
2374
+
dependencies:
2375
+
es-errors: 1.3.0
2376
+
get-intrinsic: 1.3.0
2377
+
has-tostringtag: 1.0.2
2378
+
hasown: 2.0.2
2379
+
2380
+
es-shim-unscopables@1.1.0:
2381
+
dependencies:
2382
+
hasown: 2.0.2
2383
+
2384
+
es-to-primitive@1.3.0:
2385
+
dependencies:
2386
+
is-callable: 1.2.7
2387
+
is-date-object: 1.1.0
2388
+
is-symbol: 1.1.1
2389
+
1643
2390
esbuild-register@3.6.0(esbuild@0.25.5):
1644
2391
dependencies:
1645
2392
debug: 4.4.1
···
1702
2449
1703
2450
escape-string-regexp@4.0.0: {}
1704
2451
2452
+
eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)):
2453
+
dependencies:
2454
+
eslint: 9.30.1(jiti@2.4.2)
2455
+
2456
+
eslint-import-resolver-node@0.3.9:
2457
+
dependencies:
2458
+
debug: 3.2.7
2459
+
is-core-module: 2.16.1
2460
+
resolve: 1.22.10
2461
+
transitivePeerDependencies:
2462
+
- supports-color
2463
+
2464
+
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@2.4.2)):
2465
+
dependencies:
2466
+
debug: 3.2.7
2467
+
optionalDependencies:
2468
+
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
2469
+
eslint: 9.30.1(jiti@2.4.2)
2470
+
eslint-import-resolver-node: 0.3.9
2471
+
transitivePeerDependencies:
2472
+
- supports-color
2473
+
2474
+
eslint-plugin-drizzle@0.2.3(eslint@9.30.1(jiti@2.4.2)):
2475
+
dependencies:
2476
+
eslint: 9.30.1(jiti@2.4.2)
2477
+
2478
+
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)):
2479
+
dependencies:
2480
+
'@rtsao/scc': 1.1.0
2481
+
array-includes: 3.1.9
2482
+
array.prototype.findlastindex: 1.2.6
2483
+
array.prototype.flat: 1.3.3
2484
+
array.prototype.flatmap: 1.3.3
2485
+
debug: 3.2.7
2486
+
doctrine: 2.1.0
2487
+
eslint: 9.30.1(jiti@2.4.2)
2488
+
eslint-import-resolver-node: 0.3.9
2489
+
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@2.4.2))
2490
+
hasown: 2.0.2
2491
+
is-core-module: 2.16.1
2492
+
is-glob: 4.0.3
2493
+
minimatch: 3.1.2
2494
+
object.fromentries: 2.0.8
2495
+
object.groupby: 1.0.3
2496
+
object.values: 1.2.1
2497
+
semver: 6.3.1
2498
+
string.prototype.trimend: 1.0.9
2499
+
tsconfig-paths: 3.15.0
2500
+
optionalDependencies:
2501
+
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
2502
+
transitivePeerDependencies:
2503
+
- eslint-import-resolver-typescript
2504
+
- eslint-import-resolver-webpack
2505
+
- supports-color
2506
+
2507
+
eslint-plugin-prettier@5.5.1(eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)))(eslint@9.30.1(jiti@2.4.2))(prettier@3.6.2):
2508
+
dependencies:
2509
+
eslint: 9.30.1(jiti@2.4.2)
2510
+
prettier: 3.6.2
2511
+
prettier-linter-helpers: 1.0.0
2512
+
synckit: 0.11.8
2513
+
optionalDependencies:
2514
+
eslint-config-prettier: 10.1.5(eslint@9.30.1(jiti@2.4.2))
2515
+
1705
2516
eslint-scope@8.4.0:
1706
2517
dependencies:
1707
2518
esrecurse: 4.3.0
···
1711
2522
1712
2523
eslint-visitor-keys@4.2.1: {}
1713
2524
1714
-
eslint@9.30.1:
2525
+
eslint@9.30.1(jiti@2.4.2):
1715
2526
dependencies:
1716
-
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1)
2527
+
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
1717
2528
'@eslint-community/regexpp': 4.12.1
1718
2529
'@eslint/config-array': 0.21.0
1719
2530
'@eslint/config-helpers': 0.3.0
···
1748
2559
minimatch: 3.1.2
1749
2560
natural-compare: 1.4.0
1750
2561
optionator: 0.9.4
2562
+
optionalDependencies:
2563
+
jiti: 2.4.2
1751
2564
transitivePeerDependencies:
1752
2565
- supports-color
1753
2566
···
1773
2586
1774
2587
fast-deep-equal@3.1.3: {}
1775
2588
2589
+
fast-diff@1.3.0: {}
2590
+
1776
2591
fast-glob@3.3.3:
1777
2592
dependencies:
1778
2593
'@nodelib/fs.stat': 2.0.5
···
1814
2629
1815
2630
flatted@3.3.3: {}
1816
2631
2632
+
for-each@0.3.5:
2633
+
dependencies:
2634
+
is-callable: 1.2.7
2635
+
1817
2636
formdata-polyfill@4.0.10:
1818
2637
dependencies:
1819
2638
fetch-blob: 3.2.0
···
1821
2640
fsevents@2.3.3:
1822
2641
optional: true
1823
2642
2643
+
function-bind@1.1.2: {}
2644
+
2645
+
function.prototype.name@1.1.8:
2646
+
dependencies:
2647
+
call-bind: 1.0.8
2648
+
call-bound: 1.0.4
2649
+
define-properties: 1.2.1
2650
+
functions-have-names: 1.2.3
2651
+
hasown: 2.0.2
2652
+
is-callable: 1.2.7
2653
+
2654
+
functions-have-names@1.2.3: {}
2655
+
2656
+
get-intrinsic@1.3.0:
2657
+
dependencies:
2658
+
call-bind-apply-helpers: 1.0.2
2659
+
es-define-property: 1.0.1
2660
+
es-errors: 1.3.0
2661
+
es-object-atoms: 1.1.1
2662
+
function-bind: 1.1.2
2663
+
get-proto: 1.0.1
2664
+
gopd: 1.2.0
2665
+
has-symbols: 1.1.0
2666
+
hasown: 2.0.2
2667
+
math-intrinsics: 1.1.0
2668
+
2669
+
get-proto@1.0.1:
2670
+
dependencies:
2671
+
dunder-proto: 1.0.1
2672
+
es-object-atoms: 1.1.1
2673
+
2674
+
get-symbol-description@1.1.0:
2675
+
dependencies:
2676
+
call-bound: 1.0.4
2677
+
es-errors: 1.3.0
2678
+
get-intrinsic: 1.3.0
2679
+
1824
2680
get-tsconfig@4.10.1:
1825
2681
dependencies:
1826
2682
resolve-pkg-maps: 1.0.0
···
1837
2693
1838
2694
globals@16.3.0: {}
1839
2695
2696
+
globalthis@1.0.4:
2697
+
dependencies:
2698
+
define-properties: 1.2.1
2699
+
gopd: 1.2.0
2700
+
2701
+
gopd@1.2.0: {}
2702
+
1840
2703
graphemer@1.4.0: {}
1841
2704
2705
+
has-bigints@1.1.0: {}
2706
+
1842
2707
has-flag@4.0.0: {}
1843
2708
2709
+
has-property-descriptors@1.0.2:
2710
+
dependencies:
2711
+
es-define-property: 1.0.1
2712
+
2713
+
has-proto@1.2.0:
2714
+
dependencies:
2715
+
dunder-proto: 1.0.1
2716
+
2717
+
has-symbols@1.1.0: {}
2718
+
2719
+
has-tostringtag@1.0.2:
2720
+
dependencies:
2721
+
has-symbols: 1.1.0
2722
+
2723
+
hasown@2.0.2:
2724
+
dependencies:
2725
+
function-bind: 1.1.2
2726
+
1844
2727
hono@4.8.3: {}
1845
2728
1846
2729
ignore@5.3.2: {}
···
1854
2737
1855
2738
imurmurhash@0.1.4: {}
1856
2739
2740
+
internal-slot@1.1.0:
2741
+
dependencies:
2742
+
es-errors: 1.3.0
2743
+
hasown: 2.0.2
2744
+
side-channel: 1.1.0
2745
+
2746
+
is-array-buffer@3.0.5:
2747
+
dependencies:
2748
+
call-bind: 1.0.8
2749
+
call-bound: 1.0.4
2750
+
get-intrinsic: 1.3.0
2751
+
2752
+
is-async-function@2.1.1:
2753
+
dependencies:
2754
+
async-function: 1.0.0
2755
+
call-bound: 1.0.4
2756
+
get-proto: 1.0.1
2757
+
has-tostringtag: 1.0.2
2758
+
safe-regex-test: 1.1.0
2759
+
2760
+
is-bigint@1.1.0:
2761
+
dependencies:
2762
+
has-bigints: 1.1.0
2763
+
2764
+
is-boolean-object@1.2.2:
2765
+
dependencies:
2766
+
call-bound: 1.0.4
2767
+
has-tostringtag: 1.0.2
2768
+
2769
+
is-callable@1.2.7: {}
2770
+
2771
+
is-core-module@2.16.1:
2772
+
dependencies:
2773
+
hasown: 2.0.2
2774
+
2775
+
is-data-view@1.0.2:
2776
+
dependencies:
2777
+
call-bound: 1.0.4
2778
+
get-intrinsic: 1.3.0
2779
+
is-typed-array: 1.1.15
2780
+
2781
+
is-date-object@1.1.0:
2782
+
dependencies:
2783
+
call-bound: 1.0.4
2784
+
has-tostringtag: 1.0.2
2785
+
1857
2786
is-extglob@2.1.1: {}
1858
2787
2788
+
is-finalizationregistry@1.1.1:
2789
+
dependencies:
2790
+
call-bound: 1.0.4
2791
+
2792
+
is-generator-function@1.1.0:
2793
+
dependencies:
2794
+
call-bound: 1.0.4
2795
+
get-proto: 1.0.1
2796
+
has-tostringtag: 1.0.2
2797
+
safe-regex-test: 1.1.0
2798
+
1859
2799
is-glob@4.0.3:
1860
2800
dependencies:
1861
2801
is-extglob: 2.1.1
1862
2802
2803
+
is-map@2.0.3: {}
2804
+
2805
+
is-negative-zero@2.0.3: {}
2806
+
2807
+
is-number-object@1.1.1:
2808
+
dependencies:
2809
+
call-bound: 1.0.4
2810
+
has-tostringtag: 1.0.2
2811
+
1863
2812
is-number@7.0.0: {}
1864
2813
2814
+
is-regex@1.2.1:
2815
+
dependencies:
2816
+
call-bound: 1.0.4
2817
+
gopd: 1.2.0
2818
+
has-tostringtag: 1.0.2
2819
+
hasown: 2.0.2
2820
+
2821
+
is-set@2.0.3: {}
2822
+
2823
+
is-shared-array-buffer@1.0.4:
2824
+
dependencies:
2825
+
call-bound: 1.0.4
2826
+
2827
+
is-string@1.1.1:
2828
+
dependencies:
2829
+
call-bound: 1.0.4
2830
+
has-tostringtag: 1.0.2
2831
+
2832
+
is-symbol@1.1.1:
2833
+
dependencies:
2834
+
call-bound: 1.0.4
2835
+
has-symbols: 1.1.0
2836
+
safe-regex-test: 1.1.0
2837
+
2838
+
is-typed-array@1.1.15:
2839
+
dependencies:
2840
+
which-typed-array: 1.1.19
2841
+
2842
+
is-weakmap@2.0.2: {}
2843
+
2844
+
is-weakref@1.1.1:
2845
+
dependencies:
2846
+
call-bound: 1.0.4
2847
+
2848
+
is-weakset@2.0.4:
2849
+
dependencies:
2850
+
call-bound: 1.0.4
2851
+
get-intrinsic: 1.3.0
2852
+
2853
+
isarray@2.0.5: {}
2854
+
1865
2855
isexe@2.0.0: {}
2856
+
2857
+
jiti@2.4.2: {}
1866
2858
1867
2859
js-base64@3.7.7: {}
1868
2860
···
1876
2868
1877
2869
json-stable-stringify-without-jsonify@1.0.1: {}
1878
2870
2871
+
json5@1.0.2:
2872
+
dependencies:
2873
+
minimist: 1.2.8
2874
+
1879
2875
keyv@4.5.4:
1880
2876
dependencies:
1881
2877
json-buffer: 3.0.1
···
1906
2902
1907
2903
lodash.merge@4.6.2: {}
1908
2904
2905
+
math-intrinsics@1.1.0: {}
2906
+
1909
2907
merge2@1.4.1: {}
1910
2908
1911
2909
micromatch@4.0.8:
···
1921
2919
dependencies:
1922
2920
brace-expansion: 2.0.2
1923
2921
2922
+
minimist@1.2.8: {}
2923
+
1924
2924
ms@2.1.3: {}
1925
2925
1926
2926
natural-compare@1.4.0: {}
···
1933
2933
fetch-blob: 3.2.0
1934
2934
formdata-polyfill: 4.0.10
1935
2935
2936
+
object-inspect@1.13.4: {}
2937
+
2938
+
object-keys@1.1.1: {}
2939
+
2940
+
object.assign@4.1.7:
2941
+
dependencies:
2942
+
call-bind: 1.0.8
2943
+
call-bound: 1.0.4
2944
+
define-properties: 1.2.1
2945
+
es-object-atoms: 1.1.1
2946
+
has-symbols: 1.1.0
2947
+
object-keys: 1.1.1
2948
+
2949
+
object.fromentries@2.0.8:
2950
+
dependencies:
2951
+
call-bind: 1.0.8
2952
+
define-properties: 1.2.1
2953
+
es-abstract: 1.24.0
2954
+
es-object-atoms: 1.1.1
2955
+
2956
+
object.groupby@1.0.3:
2957
+
dependencies:
2958
+
call-bind: 1.0.8
2959
+
define-properties: 1.2.1
2960
+
es-abstract: 1.24.0
2961
+
2962
+
object.values@1.2.1:
2963
+
dependencies:
2964
+
call-bind: 1.0.8
2965
+
call-bound: 1.0.4
2966
+
define-properties: 1.2.1
2967
+
es-object-atoms: 1.1.1
2968
+
1936
2969
optionator@0.9.4:
1937
2970
dependencies:
1938
2971
deep-is: 0.1.4
···
1942
2975
type-check: 0.4.0
1943
2976
word-wrap: 1.2.5
1944
2977
2978
+
own-keys@1.0.1:
2979
+
dependencies:
2980
+
get-intrinsic: 1.3.0
2981
+
object-keys: 1.1.1
2982
+
safe-push-apply: 1.0.0
2983
+
1945
2984
p-limit@3.1.0:
1946
2985
dependencies:
1947
2986
yocto-queue: 0.1.0
···
1962
3001
1963
3002
path-key@3.1.1: {}
1964
3003
3004
+
path-parse@1.0.7: {}
3005
+
1965
3006
picomatch@2.3.1: {}
1966
3007
3008
+
possible-typed-array-names@1.1.0: {}
3009
+
1967
3010
prelude-ls@1.2.1: {}
1968
3011
3012
+
prettier-linter-helpers@1.0.0:
3013
+
dependencies:
3014
+
fast-diff: 1.3.0
3015
+
3016
+
prettier@3.6.2: {}
3017
+
1969
3018
promise-limit@2.7.0: {}
1970
3019
1971
3020
punycode@2.3.1: {}
1972
3021
1973
3022
queue-microtask@1.2.3: {}
1974
3023
3024
+
reflect.getprototypeof@1.0.10:
3025
+
dependencies:
3026
+
call-bind: 1.0.8
3027
+
define-properties: 1.2.1
3028
+
es-abstract: 1.24.0
3029
+
es-errors: 1.3.0
3030
+
es-object-atoms: 1.1.1
3031
+
get-intrinsic: 1.3.0
3032
+
get-proto: 1.0.1
3033
+
which-builtin-type: 1.2.1
3034
+
3035
+
regexp.prototype.flags@1.5.4:
3036
+
dependencies:
3037
+
call-bind: 1.0.8
3038
+
define-properties: 1.2.1
3039
+
es-errors: 1.3.0
3040
+
get-proto: 1.0.1
3041
+
gopd: 1.2.0
3042
+
set-function-name: 2.0.2
3043
+
1975
3044
resolve-from@4.0.0: {}
1976
3045
1977
3046
resolve-pkg-maps@1.0.0: {}
3047
+
3048
+
resolve@1.22.10:
3049
+
dependencies:
3050
+
is-core-module: 2.16.1
3051
+
path-parse: 1.0.7
3052
+
supports-preserve-symlinks-flag: 1.0.0
1978
3053
1979
3054
reusify@1.1.0: {}
1980
3055
···
1982
3057
dependencies:
1983
3058
queue-microtask: 1.2.3
1984
3059
3060
+
safe-array-concat@1.1.3:
3061
+
dependencies:
3062
+
call-bind: 1.0.8
3063
+
call-bound: 1.0.4
3064
+
get-intrinsic: 1.3.0
3065
+
has-symbols: 1.1.0
3066
+
isarray: 2.0.5
3067
+
3068
+
safe-push-apply@1.0.0:
3069
+
dependencies:
3070
+
es-errors: 1.3.0
3071
+
isarray: 2.0.5
3072
+
3073
+
safe-regex-test@1.1.0:
3074
+
dependencies:
3075
+
call-bound: 1.0.4
3076
+
es-errors: 1.3.0
3077
+
is-regex: 1.2.1
3078
+
3079
+
semver@6.3.1: {}
3080
+
1985
3081
semver@7.7.2: {}
1986
3082
3083
+
set-function-length@1.2.2:
3084
+
dependencies:
3085
+
define-data-property: 1.1.4
3086
+
es-errors: 1.3.0
3087
+
function-bind: 1.1.2
3088
+
get-intrinsic: 1.3.0
3089
+
gopd: 1.2.0
3090
+
has-property-descriptors: 1.0.2
3091
+
3092
+
set-function-name@2.0.2:
3093
+
dependencies:
3094
+
define-data-property: 1.1.4
3095
+
es-errors: 1.3.0
3096
+
functions-have-names: 1.2.3
3097
+
has-property-descriptors: 1.0.2
3098
+
3099
+
set-proto@1.0.0:
3100
+
dependencies:
3101
+
dunder-proto: 1.0.1
3102
+
es-errors: 1.3.0
3103
+
es-object-atoms: 1.1.1
3104
+
1987
3105
shebang-command@2.0.0:
1988
3106
dependencies:
1989
3107
shebang-regex: 3.0.0
1990
3108
1991
3109
shebang-regex@3.0.0: {}
1992
3110
3111
+
side-channel-list@1.0.0:
3112
+
dependencies:
3113
+
es-errors: 1.3.0
3114
+
object-inspect: 1.13.4
3115
+
3116
+
side-channel-map@1.0.1:
3117
+
dependencies:
3118
+
call-bound: 1.0.4
3119
+
es-errors: 1.3.0
3120
+
get-intrinsic: 1.3.0
3121
+
object-inspect: 1.13.4
3122
+
3123
+
side-channel-weakmap@1.0.2:
3124
+
dependencies:
3125
+
call-bound: 1.0.4
3126
+
es-errors: 1.3.0
3127
+
get-intrinsic: 1.3.0
3128
+
object-inspect: 1.13.4
3129
+
side-channel-map: 1.0.1
3130
+
3131
+
side-channel@1.1.0:
3132
+
dependencies:
3133
+
es-errors: 1.3.0
3134
+
object-inspect: 1.13.4
3135
+
side-channel-list: 1.0.0
3136
+
side-channel-map: 1.0.1
3137
+
side-channel-weakmap: 1.0.2
3138
+
1993
3139
source-map-support@0.5.21:
1994
3140
dependencies:
1995
3141
buffer-from: 1.1.2
···
1997
3143
1998
3144
source-map@0.6.1: {}
1999
3145
3146
+
stop-iteration-iterator@1.1.0:
3147
+
dependencies:
3148
+
es-errors: 1.3.0
3149
+
internal-slot: 1.1.0
3150
+
3151
+
string.prototype.trim@1.2.10:
3152
+
dependencies:
3153
+
call-bind: 1.0.8
3154
+
call-bound: 1.0.4
3155
+
define-data-property: 1.1.4
3156
+
define-properties: 1.2.1
3157
+
es-abstract: 1.24.0
3158
+
es-object-atoms: 1.1.1
3159
+
has-property-descriptors: 1.0.2
3160
+
3161
+
string.prototype.trimend@1.0.9:
3162
+
dependencies:
3163
+
call-bind: 1.0.8
3164
+
call-bound: 1.0.4
3165
+
define-properties: 1.2.1
3166
+
es-object-atoms: 1.1.1
3167
+
3168
+
string.prototype.trimstart@1.0.8:
3169
+
dependencies:
3170
+
call-bind: 1.0.8
3171
+
define-properties: 1.2.1
3172
+
es-object-atoms: 1.1.1
3173
+
3174
+
strip-bom@3.0.0: {}
3175
+
2000
3176
strip-json-comments@3.1.1: {}
2001
3177
2002
3178
supports-color@7.2.0:
2003
3179
dependencies:
2004
3180
has-flag: 4.0.0
2005
3181
3182
+
supports-preserve-symlinks-flag@1.0.0: {}
3183
+
3184
+
synckit@0.11.8:
3185
+
dependencies:
3186
+
'@pkgr/core': 0.2.7
3187
+
2006
3188
to-regex-range@5.0.1:
2007
3189
dependencies:
2008
3190
is-number: 7.0.0
···
2013
3195
dependencies:
2014
3196
typescript: 5.8.3
2015
3197
3198
+
tsconfig-paths@3.15.0:
3199
+
dependencies:
3200
+
'@types/json5': 0.0.29
3201
+
json5: 1.0.2
3202
+
minimist: 1.2.8
3203
+
strip-bom: 3.0.0
3204
+
2016
3205
tsx@4.20.3:
2017
3206
dependencies:
2018
3207
esbuild: 0.25.5
···
2024
3213
dependencies:
2025
3214
prelude-ls: 1.2.1
2026
3215
2027
-
typescript-eslint@8.35.1(eslint@9.30.1)(typescript@5.8.3):
3216
+
typed-array-buffer@1.0.3:
2028
3217
dependencies:
2029
-
'@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3)
2030
-
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1)(typescript@5.8.3)
2031
-
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3)
2032
-
eslint: 9.30.1
3218
+
call-bound: 1.0.4
3219
+
es-errors: 1.3.0
3220
+
is-typed-array: 1.1.15
3221
+
3222
+
typed-array-byte-length@1.0.3:
3223
+
dependencies:
3224
+
call-bind: 1.0.8
3225
+
for-each: 0.3.5
3226
+
gopd: 1.2.0
3227
+
has-proto: 1.2.0
3228
+
is-typed-array: 1.1.15
3229
+
3230
+
typed-array-byte-offset@1.0.4:
3231
+
dependencies:
3232
+
available-typed-arrays: 1.0.7
3233
+
call-bind: 1.0.8
3234
+
for-each: 0.3.5
3235
+
gopd: 1.2.0
3236
+
has-proto: 1.2.0
3237
+
is-typed-array: 1.1.15
3238
+
reflect.getprototypeof: 1.0.10
3239
+
3240
+
typed-array-length@1.0.7:
3241
+
dependencies:
3242
+
call-bind: 1.0.8
3243
+
for-each: 0.3.5
3244
+
gopd: 1.2.0
3245
+
is-typed-array: 1.1.15
3246
+
possible-typed-array-names: 1.1.0
3247
+
reflect.getprototypeof: 1.0.10
3248
+
3249
+
typescript-eslint@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
3250
+
dependencies:
3251
+
'@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
3252
+
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
3253
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
3254
+
eslint: 9.30.1(jiti@2.4.2)
2033
3255
typescript: 5.8.3
2034
3256
transitivePeerDependencies:
2035
3257
- supports-color
2036
3258
2037
3259
typescript@5.8.3: {}
3260
+
3261
+
unbox-primitive@1.1.0:
3262
+
dependencies:
3263
+
call-bound: 1.0.4
3264
+
has-bigints: 1.1.0
3265
+
has-symbols: 1.1.0
3266
+
which-boxed-primitive: 1.1.1
2038
3267
2039
3268
undici-types@7.8.0: {}
2040
3269
···
2043
3272
punycode: 2.3.1
2044
3273
2045
3274
web-streams-polyfill@3.3.3: {}
3275
+
3276
+
which-boxed-primitive@1.1.1:
3277
+
dependencies:
3278
+
is-bigint: 1.1.0
3279
+
is-boolean-object: 1.2.2
3280
+
is-number-object: 1.1.1
3281
+
is-string: 1.1.1
3282
+
is-symbol: 1.1.1
3283
+
3284
+
which-builtin-type@1.2.1:
3285
+
dependencies:
3286
+
call-bound: 1.0.4
3287
+
function.prototype.name: 1.1.8
3288
+
has-tostringtag: 1.0.2
3289
+
is-async-function: 2.1.1
3290
+
is-date-object: 1.1.0
3291
+
is-finalizationregistry: 1.1.1
3292
+
is-generator-function: 1.1.0
3293
+
is-regex: 1.2.1
3294
+
is-weakref: 1.1.1
3295
+
isarray: 2.0.5
3296
+
which-boxed-primitive: 1.1.1
3297
+
which-collection: 1.0.2
3298
+
which-typed-array: 1.1.19
3299
+
3300
+
which-collection@1.0.2:
3301
+
dependencies:
3302
+
is-map: 2.0.3
3303
+
is-set: 2.0.3
3304
+
is-weakmap: 2.0.2
3305
+
is-weakset: 2.0.4
3306
+
3307
+
which-typed-array@1.1.19:
3308
+
dependencies:
3309
+
available-typed-arrays: 1.0.7
3310
+
call-bind: 1.0.8
3311
+
call-bound: 1.0.4
3312
+
for-each: 0.3.5
3313
+
get-proto: 1.0.1
3314
+
gopd: 1.2.0
3315
+
has-tostringtag: 1.0.2
2046
3316
2047
3317
which@2.0.2:
2048
3318
dependencies:
+41
-35
backend/src/config.ts
+41
-35
backend/src/config.ts
···
1
-
import {readFileSync} from "fs";
1
+
/*
2
+
* clippr: a social bookmarking service for the AT Protocol
3
+
* Copyright (c) 2025 clippr contributors.
4
+
* SPDX-License-Identifier: AGPL-3.0-only
5
+
*/
6
+
7
+
import { readFileSync } from "fs";
2
8
import * as toml from "toml";
3
9
4
10
export class Config {
5
-
private static instance: Config;
6
-
private readonly configData: any;
11
+
private static instance: Config;
12
+
private readonly configData;
7
13
8
-
private constructor() {
9
-
let tomlString;
10
-
try {
11
-
tomlString = readFileSync("config.toml", "utf-8");
12
-
} catch {
13
-
throw new Error("Config file not found");
14
-
}
15
-
this.configData = toml.parse(tomlString);
16
-
}
14
+
private constructor() {
15
+
let tomlString;
16
+
try {
17
+
tomlString = readFileSync("config.toml", "utf-8");
18
+
} catch {
19
+
throw new Error("Config file not found");
20
+
}
21
+
this.configData = toml.parse(tomlString);
22
+
}
17
23
18
-
static getInstance(): Config {
19
-
if (!Config.instance) {
20
-
try {
21
-
Config.instance = new Config();
22
-
} catch (e) {
23
-
console.error(e);
24
-
process.exit(1);
25
-
}
26
-
}
27
-
return Config.instance;
28
-
}
24
+
static getInstance(): Config {
25
+
if (!Config.instance) {
26
+
try {
27
+
Config.instance = new Config();
28
+
} catch (e) {
29
+
console.error(e);
30
+
process.exit(1);
31
+
}
32
+
}
33
+
return Config.instance;
34
+
}
29
35
30
-
get<T = any>(path: string): T | undefined {
31
-
const keys = path.split(".");
32
-
let value = this.configData;
33
-
for (const key of keys) {
34
-
if (value == null) return undefined;
35
-
value = value[key];
36
-
}
37
-
return value;
38
-
}
36
+
get<T>(path: string): T | undefined {
37
+
const keys = path.split(".");
38
+
let value = this.configData;
39
+
for (const key of keys) {
40
+
if (value == null) return undefined;
41
+
value = value[key];
42
+
}
43
+
return value;
44
+
}
39
45
40
-
getAll(): any {
41
-
return this.configData;
42
-
}
46
+
getAll() {
47
+
return this.configData;
48
+
}
43
49
}
+21
-21
backend/src/db/database.ts
+21
-21
backend/src/db/database.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {drizzle} from 'drizzle-orm/libsql';
8
-
import {Config} from "../config.ts";
7
+
import { drizzle } from "drizzle-orm/libsql";
8
+
import { Config } from "../config.ts";
9
9
10
10
const config = Config.getInstance();
11
11
const dbname = config.get("database.name");
12
12
13
13
export class Database {
14
-
private static instance: Database;
15
-
private readonly db: any;
14
+
private static instance: Database;
15
+
private readonly db;
16
16
17
-
private constructor() {
18
-
this.db = drizzle({connection: {url: `${dbname}`}});
19
-
}
17
+
private constructor() {
18
+
this.db = drizzle({ connection: { url: `${dbname}` } });
19
+
}
20
20
21
-
static getInstance(): Database {
22
-
if (!Database.instance) {
23
-
try {
24
-
Database.instance = new Database();
25
-
} catch (e) {
26
-
console.error(e);
27
-
process.exit(1);
28
-
}
29
-
}
30
-
return Database.instance;
31
-
}
21
+
static getInstance(): Database {
22
+
if (!Database.instance) {
23
+
try {
24
+
Database.instance = new Database();
25
+
} catch (e) {
26
+
console.error(e);
27
+
process.exit(1);
28
+
}
29
+
}
30
+
return Database.instance;
31
+
}
32
32
33
-
getDb() {
34
-
return this.db;
35
-
}
33
+
getDb() {
34
+
return this.db;
35
+
}
36
36
}
+37
-23
backend/src/db/schema.ts
+37
-23
backend/src/db/schema.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {int, sqliteTable, text} from "drizzle-orm/sqlite-core";
8
-
import {sql} from "drizzle-orm";
7
+
import { int, sqliteTable, text } from "drizzle-orm/sqlite-core";
8
+
import { sql } from "drizzle-orm";
9
9
10
+
// WebStorm keeps throwing errors with the default statements as it wants
11
+
// an actual SQLite query, despite being valid. Oh well.
10
12
export const clipsTable = sqliteTable("clips", {
11
-
id: int('id').primaryKey({autoIncrement: true}),
12
-
timestamp: int('time_us', {mode: 'timestamp_ms'}).notNull().default(sql`(unixepoch() * 1000)`),
13
-
did: text('did').notNull(),
14
-
recordKey: text('rkey').notNull(),
15
-
url: text('url').notNull(),
16
-
title: text('title').notNull(),
17
-
description: text('description').notNull(),
18
-
unlisted: int('unlisted', {mode: 'boolean'}).notNull(),
19
-
notes: text('notes'),
20
-
tags: text('tags', {mode: "json"}).$type<string[]>().default(sql`'[]'`),
21
-
unread: int('unread', {mode: 'boolean'}),
22
-
languages: text('languages', {mode: 'json'}).$type<string[]>().default(sql`'[]'`),
23
-
createdAt: int('createdAt', {mode: 'timestamp_ms'}).notNull().default(sql`(unixepoch() * 1000)`),
13
+
id: int("id").primaryKey({ autoIncrement: true }),
14
+
timestamp: int("time_us", { mode: "timestamp_ms" })
15
+
.notNull()
16
+
.default(sql`(unixepoch() * 1000)`),
17
+
did: text("did").notNull(),
18
+
recordKey: text("rkey").notNull(),
19
+
url: text("url").notNull(),
20
+
title: text("title").notNull(),
21
+
description: text("description").notNull(),
22
+
unlisted: int("unlisted", { mode: "boolean" }).notNull(),
23
+
notes: text("notes"),
24
+
tags: text("tags", { mode: "json" })
25
+
.$type<string[]>()
26
+
.default(sql`'[]'`),
27
+
unread: int("unread", { mode: "boolean" }),
28
+
languages: text("languages", { mode: "json" })
29
+
.$type<string[]>()
30
+
.default(sql`'[]'`),
31
+
createdAt: int("createdAt", { mode: "timestamp_ms" })
32
+
.notNull()
33
+
.default(sql`(unixepoch() * 1000)`),
24
34
});
25
35
26
36
export const tagsTable = sqliteTable("tags", {
27
-
id: int('id').primaryKey({autoIncrement: true}),
28
-
timestamp: int('time_us', {mode: 'timestamp_ms'}).notNull().default(sql`(unixepoch() * 1000)`),
29
-
did: text('did').notNull(),
30
-
recordKey: text('rkey').notNull(),
31
-
name: text('name').notNull(),
32
-
color: text('color'),
33
-
createdAt: int('createdAt', {mode: 'timestamp_ms'}).notNull().default(sql`(unixepoch() * 1000)`),
34
-
});
37
+
id: int("id").primaryKey({ autoIncrement: true }),
38
+
timestamp: int("time_us", { mode: "timestamp_ms" })
39
+
.notNull()
40
+
.default(sql`(unixepoch() * 1000)`),
41
+
did: text("did").notNull(),
42
+
recordKey: text("rkey").notNull(),
43
+
name: text("name").notNull(),
44
+
color: text("color"),
45
+
createdAt: int("createdAt", { mode: "timestamp_ms" })
46
+
.notNull()
47
+
.default(sql`(unixepoch() * 1000)`),
48
+
});
-34
backend/src/jetstream.ts
-34
backend/src/jetstream.ts
···
1
-
/*
2
-
* clippr: a social bookmarking service for the AT Protocol
3
-
* Copyright (c) 2025 clippr contributors.
4
-
* SPDX-License-Identifier: AGPL-3.0-only
5
-
*/
6
-
7
-
import {Jetstream} from "@skyware/jetstream";
8
-
import {Config} from "./config.ts";
9
-
10
-
const config = Config.getInstance();
11
-
const hostname = config.get("network.firehose");
12
-
13
-
const jetstream = new Jetstream({
14
-
endpoint: `wss://${hostname}/subscribe`,
15
-
wantedCollections: ["social.clippr.*"],
16
-
});
17
-
18
-
export function startFirehose() {
19
-
jetstream.start();
20
-
}
21
-
22
-
export function stopFirehose() {
23
-
jetstream.close();
24
-
}
25
-
26
-
export function readFromFirehose() {
27
-
jetstream.on("account", (e) => {
28
-
console.log("account update", e.account.did);
29
-
});
30
-
31
-
jetstream.on("identity", (e) => {
32
-
console.log("identity update", e.identity.did);
33
-
});
34
-
}
+32
-30
backend/src/main.ts
+32
-30
backend/src/main.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {serve, type ServerType} from '@hono/node-server'
8
-
import {Config} from "./config.ts";
9
-
import {readFromFirehose, startFirehose, stopFirehose} from "./jetstream.ts";
7
+
import { serve, type ServerType } from "@hono/node-server";
8
+
import { Config } from "./config.ts";
9
+
import { readFromFirehose, startFirehose, stopFirehose } from "./network/jetstream.ts";
10
10
import app from "./server.ts";
11
-
import {Database} from "./db/database.js";
11
+
import { Database } from "./db/database.js";
12
12
13
13
function main() {
14
-
console.log("clippr-BE starting...")
14
+
console.log("clippr-BE starting...");
15
15
16
-
console.log('initializing config')
17
-
const config: Config = Config.getInstance(); // Get config from config.toml
16
+
console.log("initializing config");
17
+
const config: Config = Config.getInstance(); // Get config from config.toml
18
18
19
-
console.log('initializing database')
20
-
Database.getInstance();
19
+
console.log("initializing database");
20
+
Database.getInstance();
21
21
22
-
console.log('initializing firehose connection');
23
-
startFirehose();
24
-
readFromFirehose();
22
+
console.log("initializing firehose connection");
23
+
startFirehose();
24
+
readFromFirehose();
25
25
26
-
const server: ServerType = serve({
27
-
port: config.get("port"),
28
-
hostname: config.get("hostname"),
29
-
fetch: app.fetch,
30
-
});
26
+
const server: ServerType = serve({
27
+
port: config.get("port"),
28
+
hostname: config.get("hostname"),
29
+
fetch: app.fetch,
30
+
});
31
31
32
-
console.log(`server started at http://${config.get("hostname")}:${config.get("port")}`);
32
+
console.log(
33
+
`server started at http://${config.get("hostname")}:${config.get("port")}`,
34
+
);
33
35
34
-
process.removeAllListeners('SIGINT');
35
-
process.removeAllListeners('SIGTERM');
36
+
process.removeAllListeners("SIGINT");
37
+
process.removeAllListeners("SIGTERM");
36
38
37
-
process.once('SIGINT', () => gracefulShutdown('SIGINT'));
38
-
process.once('SIGTERM', () => gracefulShutdown('SIGTERM'));
39
+
process.once("SIGINT", () => gracefulShutdown("SIGINT"));
40
+
process.once("SIGTERM", () => gracefulShutdown("SIGTERM"));
39
41
40
-
function gracefulShutdown(signal: string) {
41
-
console.log(`\nreceived ${signal}, shutting down...`);
42
-
stopFirehose();
43
-
server.close();
44
-
console.log('server shut down, bye!');
45
-
process.exit(0);
46
-
}
42
+
function gracefulShutdown(signal: string) {
43
+
console.log(`\nreceived ${signal}, shutting down...`);
44
+
stopFirehose();
45
+
server.close();
46
+
console.log("server shut down, bye!");
47
+
process.exit(0);
48
+
}
47
49
}
48
50
49
-
main();
51
+
main();
+48
backend/src/network/jetstream.ts
+48
backend/src/network/jetstream.ts
···
1
+
/*
2
+
* clippr: a social bookmarking service for the AT Protocol
3
+
* Copyright (c) 2025 clippr contributors.
4
+
* SPDX-License-Identifier: AGPL-3.0-only
5
+
*/
6
+
7
+
import { Jetstream } from "@skyware/jetstream";
8
+
import { Config } from "../config.ts";
9
+
10
+
const config = Config.getInstance();
11
+
const hostname = config.get("network.firehose");
12
+
13
+
const jetstream = new Jetstream({
14
+
endpoint: `wss://${hostname}/subscribe`,
15
+
wantedCollections: ["social.clippr.*"],
16
+
});
17
+
18
+
export function startFirehose() {
19
+
jetstream.start();
20
+
}
21
+
22
+
export function stopFirehose() {
23
+
jetstream.close();
24
+
}
25
+
26
+
export function readFromFirehose() {
27
+
jetstream.on("commit", (e) => {
28
+
switch (e.commit.collection) {
29
+
case "social.clippr.clips.item":
30
+
break;
31
+
case "social.clippr.clips.tag":
32
+
break;
33
+
default:
34
+
console.log(
35
+
`commit for ${e.commit.collection} is not relevant, dropping`,
36
+
);
37
+
break;
38
+
}
39
+
});
40
+
41
+
jetstream.on("account", (e) => {
42
+
console.log("account update", e.account.did);
43
+
});
44
+
45
+
jetstream.on("identity", (e) => {
46
+
console.log("identity update", e.identity.did);
47
+
});
48
+
}
+7
-7
backend/src/routes/misc.ts
+7
-7
backend/src/routes/misc.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {Hono} from 'hono'
8
-
import {serveStatic} from "@hono/node-server/serve-static";
7
+
import { Hono } from "hono";
8
+
import { serveStatic } from "@hono/node-server/serve-static";
9
9
10
10
const app = new Hono();
11
11
12
-
app.get('/', serveStatic({path: './static/index.html'}));
13
-
app.get('/main.css', serveStatic({path: './static/main.css'}));
12
+
app.get("/", serveStatic({ path: "./static/index.html" }));
13
+
app.get("/main.css", serveStatic({ path: "./static/main.css" }));
14
14
app.notFound((c) => {
15
-
return c.text('404 Not Found', 404);
16
-
})
15
+
return c.text("404 Not Found", 404);
16
+
});
17
17
18
-
export default app;
18
+
export default app;
+3
-3
backend/src/server.ts
+3
-3
backend/src/server.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {Hono} from "hono";
7
+
import { Hono } from "hono";
8
8
import misc from "./routes/misc.ts";
9
9
10
10
const app = new Hono();
11
11
12
12
// Link all routes up
13
-
app.route('/', misc);
13
+
app.route("/", misc);
14
14
15
-
export default app;
15
+
export default app;
+14
-9
backend/static/index.html
+14
-9
backend/static/index.html
···
4
4
~ SPDX-License-Identifier: AGPL-3.0-only
5
5
-->
6
6
7
-
<!DOCTYPE html>
7
+
<!doctype html>
8
8
<html lang="en">
9
9
<head>
10
-
<meta charset="UTF-8">
11
-
<meta http-equiv="X-UA-Compatible" content="IE=edge">
12
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
13
-
<link href="main.css" rel="stylesheet">
10
+
<meta charset="UTF-8"/>
11
+
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
12
+
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
13
+
<link href="main.css" rel="stylesheet"/>
14
14
<title>clippr-BE</title>
15
15
</head>
16
16
<body>
···
24
24
<a href="http://tangled.sh/@hexmani.ac/clippr-ts">source code</a>
25
25
</main>
26
26
<footer>
27
-
<br>
28
-
<small>copyright © clippr contributors 2025 | this software is released under the <a
29
-
href="https://www.gnu.org/licenses/agpl-3.0.en.html#license-text">AGPL</a></small>
27
+
<br/>
28
+
<small>
29
+
copyright © clippr contributors 2025 | this software is released
30
+
under the
31
+
<a href="https://www.gnu.org/licenses/agpl-3.0.en.html#license-text"
32
+
>AGPL</a
33
+
>
34
+
</small>
30
35
</footer>
31
36
</div>
32
37
</body>
33
-
</html>
38
+
</html>
+2
-2
backend/static/main.css
+2
-2
backend/static/main.css
+30
-30
backend/tsconfig.json
+30
-30
backend/tsconfig.json
···
1
1
{
2
-
"compilerOptions": {
3
-
"allowImportingTsExtensions": true,
4
-
"esModuleInterop": true,
5
-
"skipLibCheck": true,
6
-
"target": "ESNext",
7
-
"module": "NodeNext",
8
-
"moduleResolution": "NodeNext",
9
-
"allowJs": true,
10
-
"resolveJsonModule": true,
11
-
"moduleDetection": "force",
12
-
"isolatedModules": true,
13
-
"verbatimModuleSyntax": true,
14
-
"types": [
15
-
"node"
16
-
],
17
-
"strict": true,
18
-
"noUncheckedIndexedAccess": true,
19
-
"noImplicitOverride": true,
20
-
"noEmit": true,
21
-
"jsx": "react-jsx",
22
-
"jsxImportSource": "hono/jsx",
23
-
"outDir": "./dist",
24
-
"lib": [
25
-
"ESNext"
26
-
]
27
-
},
28
-
"exclude": [
29
-
"node_modules"
30
-
]
31
-
}
2
+
"compilerOptions": {
3
+
"allowImportingTsExtensions": true,
4
+
"esModuleInterop": true,
5
+
"skipLibCheck": true,
6
+
"target": "ESNext",
7
+
"module": "NodeNext",
8
+
"moduleResolution": "NodeNext",
9
+
"allowJs": true,
10
+
"resolveJsonModule": true,
11
+
"moduleDetection": "force",
12
+
"isolatedModules": true,
13
+
"verbatimModuleSyntax": true,
14
+
"types": [
15
+
"node"
16
+
],
17
+
"strict": true,
18
+
"noUncheckedIndexedAccess": true,
19
+
"noImplicitOverride": true,
20
+
"noEmit": true,
21
+
"jsx": "react-jsx",
22
+
"jsxImportSource": "hono/jsx",
23
+
"outDir": "./dist",
24
+
"lib": [
25
+
"ESNext"
26
+
]
27
+
},
28
+
"exclude": [
29
+
"node_modules"
30
+
]
31
+
}