-13
.editorconfig
-13
.editorconfig
+2
.npmrc
+2
.npmrc
+10
mise.lock
+10
mise.lock
+6
-2
mise.toml
+6
-2
mise.toml
+27
-31
package.json
+27
-31
package.json
···
5
5
"dev": "vite",
6
6
"build": "vite build",
7
7
"preview": "vite preview",
8
-
"fmt": "PRETTIER_EXPERIMENTAL_CLI=1 prettier --cache --write ."
8
+
"fmt": "prettier --cache --write ."
9
9
},
10
10
"dependencies": {
11
-
"@atcute/atproto": "^3.1.0",
12
-
"@atcute/bluemoji": "^3.1.0",
13
-
"@atcute/bluesky": "^3.1.3",
11
+
"@atcute/bluemoji": "^1.0.4",
12
+
"@atcute/bluesky": "^1.0.15",
14
13
"@atcute/bluesky-richtext-parser": "^1.0.7",
15
-
"@atcute/bluesky-richtext-segmenter": "^2.0.3",
14
+
"@atcute/bluesky-richtext-segmenter": "^1.0.5",
16
15
"@atcute/bluesky-search-parser": "^0.1.0",
17
-
"@atcute/cbor": "^2.2.4",
18
-
"@atcute/cid": "^2.2.3",
19
-
"@atcute/client": "^4.0.3",
20
-
"@atcute/lexicons": "^1.1.0",
21
-
"@atcute/oauth-browser-client": "^1.0.26",
16
+
"@atcute/cbor": "^2.2.0",
17
+
"@atcute/cid": "^2.2.0",
18
+
"@atcute/client": "^2.0.9",
19
+
"@atcute/oauth-browser-client": "^1.0.16",
22
20
"@atcute/tid": "^1.0.2",
23
-
"@atlaskit/pragmatic-drag-and-drop": "1.6.0",
24
-
"@atlaskit/pragmatic-drag-and-drop-hitbox": "1.0.3",
25
-
"@floating-ui/dom": "^1.7.1",
21
+
"@atlaskit/pragmatic-drag-and-drop": "^1.5.2",
22
+
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
23
+
"@floating-ui/dom": "^1.6.13",
26
24
"@floating-ui/utils": "^0.2.9",
27
-
"@kelinci/basa-lexicons": "^1.0.0",
28
-
"@mary/array-fns": "jsr:^0.1.4",
29
-
"@mary/async-iterator-fns": "jsr:^0.1.1",
30
-
"@mary/batch-fetch": "jsr:^0.1.0",
31
-
"@mary/date-fns": "jsr:^0.1.3",
32
-
"@mary/events": "jsr:^0.2.0",
33
-
"@mary/exif-rm": "jsr:^0.2.2",
25
+
"@mary/array-fns": "npm:@jsr/mary__array-fns@^0.1.4",
26
+
"@mary/async-iterator-fns": "npm:@jsr/mary__async-iterator-fns@^0.1.1",
27
+
"@mary/date-fns": "npm:@jsr/mary__date-fns@^0.1.3",
28
+
"@mary/events": "npm:@jsr/mary__events@^0.2.0",
29
+
"@mary/exif-rm": "npm:@jsr/mary__exif-rm@^0.2.2",
34
30
"@mary/solid-freeze": "npm:@externdefs/solid-freeze@^0.1.1",
35
31
"@mary/solid-query": "npm:@externdefs/solid-query@^0.1.5",
36
32
"comlink": "^4.4.2",
37
-
"hls.js": "^1.6.5",
38
-
"idb": "^8.0.3",
33
+
"hls.js": "^1.6.0",
34
+
"idb": "^8.0.2",
39
35
"nanoid": "^5.1.5",
40
36
"solid-floating-ui": "~0.2.1",
41
-
"solid-js": "^1.9.7",
42
-
"webm-muxer": "^5.1.3"
37
+
"solid-js": "^1.9.5",
38
+
"webm-muxer": "^5.1.1"
43
39
},
44
40
"devDependencies": {
45
41
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
46
42
"@types/dom-close-watcher": "^1.0.0",
47
-
"@types/dom-webcodecs": "^0.1.15",
43
+
"@types/dom-webcodecs": "^0.1.14",
48
44
"autoprefixer": "^10.4.21",
49
45
"babel-plugin-transform-typescript-const-enums": "^0.1.0",
50
-
"prettier": "^3.6.0",
51
-
"prettier-plugin-tailwindcss": "^0.6.13",
46
+
"prettier": "^3.5.3",
47
+
"prettier-plugin-tailwindcss": "^0.6.11",
52
48
"tailwindcss": "^3.4.17",
53
-
"terser": "^5.43.1",
54
-
"typescript": "~5.8.3",
55
-
"vite": "^6.3.5",
49
+
"terser": "^5.39.0",
50
+
"typescript": "5.7.2",
51
+
"vite": "6.0.5",
56
52
"vite-plugin-pwa": "0.21.0",
57
53
"vite-plugin-solid": "^2.11.6",
58
-
"wrangler": "^4.20.5"
54
+
"wrangler": "^4.6.0"
59
55
},
60
56
"pnpm": {
61
57
"patchedDependencies": {
+17
-17
patches/solid-js.patch
+17
-17
patches/solid-js.patch
···
1
1
diff --git a/dist/solid.js b/dist/solid.js
2
-
index a36e31312a461cdf9999e22aa893ef29162750c8..6de1f7f7d608e07baa9edbc6f0ee394f7f9b4411 100644
2
+
index 2571609363d5758d32e2aa88489acca146a6d308..4a1e0bf4e523fb075340e0c2ccef0a4a9ab12f7f 100644
3
3
--- a/dist/solid.js
4
4
+++ b/dist/solid.js
5
-
@@ -1468,7 +1468,6 @@ function Show(props) {
6
-
const child = props.children;
7
-
const fn = typeof child === "function" && child.length > 0;
8
-
return fn ? untrack(() => child(keyed ? c : () => {
9
-
- if (!untrack(condition)) throw narrowedError("Show");
10
-
return conditionValue();
11
-
})) : child;
12
-
}
13
-
@@ -1500,7 +1499,6 @@ function Switch(props) {
14
-
const child = mp.children;
15
-
const fn = typeof child === "function" && child.length > 0;
16
-
return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {
17
-
- if (untrack(switchFunc)()?.[0] !== index) throw narrowedError("Match");
18
-
return conditionValue();
19
-
})) : child;
20
-
}, undefined, undefined);
5
+
@@ -1581,7 +1581,6 @@ function Show(props) {
6
+
keyed
7
+
? c
8
+
: () => {
9
+
- if (!untrack(condition)) throw narrowedError("Show");
10
+
return props.when;
11
+
}
12
+
)
13
+
@@ -1628,7 +1627,6 @@ function Switch(props) {
14
+
keyed
15
+
? when
16
+
: () => {
17
+
- if (untrack(evalConditions)[0] !== index) throw narrowedError("Match");
18
+
return cond.when;
19
+
}
20
+
)
+1274
-1318
pnpm-lock.yaml
+1274
-1318
pnpm-lock.yaml
···
17
17
hash: 0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd
18
18
path: patches/@tanstack__query-core@5.17.19.patch
19
19
solid-js:
20
-
hash: 9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7
20
+
hash: 9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c
21
21
path: patches/solid-js.patch
22
22
vite-plugin-pwa:
23
23
hash: 003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325
···
30
30
31
31
.:
32
32
dependencies:
33
-
'@atcute/atproto':
34
-
specifier: ^3.1.0
35
-
version: 3.1.0
36
33
'@atcute/bluemoji':
37
-
specifier: ^3.1.0
38
-
version: 3.1.0
34
+
specifier: ^1.0.4
35
+
version: 1.0.4(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)
39
36
'@atcute/bluesky':
40
-
specifier: ^3.1.3
41
-
version: 3.1.3
37
+
specifier: ^1.0.15
38
+
version: 1.0.15(@atcute/client@2.0.9)
42
39
'@atcute/bluesky-richtext-parser':
43
40
specifier: ^1.0.7
44
41
version: 1.0.7
45
42
'@atcute/bluesky-richtext-segmenter':
46
-
specifier: ^2.0.3
47
-
version: 2.0.3
43
+
specifier: ^1.0.5
44
+
version: 1.0.5(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)
48
45
'@atcute/bluesky-search-parser':
49
46
specifier: ^0.1.0
50
47
version: 0.1.0
51
48
'@atcute/cbor':
52
-
specifier: ^2.2.4
53
-
version: 2.2.4
49
+
specifier: ^2.2.0
50
+
version: 2.2.0
54
51
'@atcute/cid':
55
-
specifier: ^2.2.3
56
-
version: 2.2.3
52
+
specifier: ^2.2.0
53
+
version: 2.2.0
57
54
'@atcute/client':
58
-
specifier: ^4.0.3
59
-
version: 4.0.3
60
-
'@atcute/lexicons':
61
-
specifier: ^1.1.0
62
-
version: 1.1.0
55
+
specifier: ^2.0.9
56
+
version: 2.0.9
63
57
'@atcute/oauth-browser-client':
64
-
specifier: ^1.0.26
65
-
version: 1.0.26
58
+
specifier: ^1.0.16
59
+
version: 1.0.16
66
60
'@atcute/tid':
67
61
specifier: ^1.0.2
68
62
version: 1.0.2
69
63
'@atlaskit/pragmatic-drag-and-drop':
70
-
specifier: 1.6.0
71
-
version: 1.6.0
64
+
specifier: ^1.5.2
65
+
version: 1.5.2
72
66
'@atlaskit/pragmatic-drag-and-drop-hitbox':
73
-
specifier: 1.0.3
67
+
specifier: ^1.0.3
74
68
version: 1.0.3
75
69
'@floating-ui/dom':
76
-
specifier: ^1.7.1
77
-
version: 1.7.1
70
+
specifier: ^1.6.13
71
+
version: 1.6.13
78
72
'@floating-ui/utils':
79
73
specifier: ^0.2.9
80
74
version: 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea)
81
-
'@kelinci/basa-lexicons':
82
-
specifier: ^1.0.0
83
-
version: 1.0.0
84
75
'@mary/array-fns':
85
-
specifier: jsr:^0.1.4
76
+
specifier: npm:@jsr/mary__array-fns@^0.1.4
86
77
version: '@jsr/mary__array-fns@0.1.4'
87
78
'@mary/async-iterator-fns':
88
-
specifier: jsr:^0.1.1
79
+
specifier: npm:@jsr/mary__async-iterator-fns@^0.1.1
89
80
version: '@jsr/mary__async-iterator-fns@0.1.1'
90
-
'@mary/batch-fetch':
91
-
specifier: jsr:^0.1.0
92
-
version: '@jsr/mary__batch-fetch@0.1.0'
93
81
'@mary/date-fns':
94
-
specifier: jsr:^0.1.3
82
+
specifier: npm:@jsr/mary__date-fns@^0.1.3
95
83
version: '@jsr/mary__date-fns@0.1.3'
96
84
'@mary/events':
97
-
specifier: jsr:^0.2.0
85
+
specifier: npm:@jsr/mary__events@^0.2.0
98
86
version: '@jsr/mary__events@0.2.0'
99
87
'@mary/exif-rm':
100
-
specifier: jsr:^0.2.2
88
+
specifier: npm:@jsr/mary__exif-rm@^0.2.2
101
89
version: '@jsr/mary__exif-rm@0.2.2'
102
90
'@mary/solid-freeze':
103
91
specifier: npm:@externdefs/solid-freeze@^0.1.1
104
-
version: '@externdefs/solid-freeze@0.1.1(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))'
92
+
version: '@externdefs/solid-freeze@0.1.1(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))'
105
93
'@mary/solid-query':
106
94
specifier: npm:@externdefs/solid-query@^0.1.5
107
-
version: '@externdefs/solid-query@0.1.5(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))'
95
+
version: '@externdefs/solid-query@0.1.5(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))'
108
96
comlink:
109
97
specifier: ^4.4.2
110
98
version: 4.4.2
111
99
hls.js:
112
-
specifier: ^1.6.5
113
-
version: 1.6.5
100
+
specifier: ^1.6.0
101
+
version: 1.6.0
114
102
idb:
115
-
specifier: ^8.0.3
116
-
version: 8.0.3
103
+
specifier: ^8.0.2
104
+
version: 8.0.2
117
105
nanoid:
118
106
specifier: ^5.1.5
119
107
version: 5.1.5
120
108
solid-floating-ui:
121
109
specifier: ~0.2.1
122
-
version: 0.2.1(@floating-ui/dom@1.7.1)(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))
110
+
version: 0.2.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))
123
111
solid-js:
124
-
specifier: ^1.9.7
125
-
version: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)
112
+
specifier: ^1.9.5
113
+
version: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)
126
114
webm-muxer:
127
-
specifier: ^5.1.3
128
-
version: 5.1.3
115
+
specifier: ^5.1.1
116
+
version: 5.1.1
129
117
devDependencies:
130
118
'@trivago/prettier-plugin-sort-imports':
131
119
specifier: ^5.2.2
132
-
version: 5.2.2(prettier@3.6.0)
120
+
version: 5.2.2(prettier@3.5.3)
133
121
'@types/dom-close-watcher':
134
122
specifier: ^1.0.0
135
123
version: 1.0.0
136
124
'@types/dom-webcodecs':
137
-
specifier: ^0.1.15
138
-
version: 0.1.15
125
+
specifier: ^0.1.14
126
+
version: 0.1.14
139
127
autoprefixer:
140
128
specifier: ^10.4.21
141
-
version: 10.4.21(postcss@8.5.6)
129
+
version: 10.4.21(postcss@8.5.3)
142
130
babel-plugin-transform-typescript-const-enums:
143
131
specifier: ^0.1.0
144
-
version: 0.1.0(@babel/core@7.27.4)
132
+
version: 0.1.0(@babel/core@7.26.10)
145
133
prettier:
146
-
specifier: ^3.6.0
147
-
version: 3.6.0
134
+
specifier: ^3.5.3
135
+
version: 3.5.3
148
136
prettier-plugin-tailwindcss:
149
-
specifier: ^0.6.13
150
-
version: 0.6.13(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.0))(prettier@3.6.0)
137
+
specifier: ^0.6.11
138
+
version: 0.6.11(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3))(prettier@3.5.3)
151
139
tailwindcss:
152
140
specifier: ^3.4.17
153
141
version: 3.4.17
154
142
terser:
155
-
specifier: ^5.43.1
156
-
version: 5.43.1
143
+
specifier: ^5.39.0
144
+
version: 5.39.0
157
145
typescript:
158
-
specifier: ~5.8.3
159
-
version: 5.8.3
146
+
specifier: 5.7.2
147
+
version: 5.7.2
160
148
vite:
161
-
specifier: ^6.3.5
162
-
version: 6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)
149
+
specifier: 6.0.5
150
+
version: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)
163
151
vite-plugin-pwa:
164
152
specifier: 0.21.0
165
-
version: 0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0))
153
+
version: 0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0))
166
154
vite-plugin-solid:
167
155
specifier: ^2.11.6
168
-
version: 2.11.6(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))(vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0))
156
+
version: 2.11.6(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0))
169
157
wrangler:
170
-
specifier: ^4.20.5
171
-
version: 4.20.5
158
+
specifier: ^4.6.0
159
+
version: 4.6.0
172
160
173
161
packages:
174
162
···
186
174
peerDependencies:
187
175
ajv: '>=8'
188
176
189
-
'@atcute/atproto@3.1.0':
190
-
resolution: {integrity: sha512-aJbDsY7FcIh8APWKAimBtshPwqoRE056tc0UV6vw4TW4e3nYaHedoJmKhlh/k8KQWxyw64MQThNGMaC89HNoTg==}
191
-
192
-
'@atcute/bluemoji@3.1.0':
193
-
resolution: {integrity: sha512-8EfcEDrXlStvu57WVcGSeDWfbEDKTjfI43rk+oohe2sdYU113ObTe8Pv1vW0DRfOYcQqR4+eF2SbpvXE6//24g==}
177
+
'@atcute/bluemoji@1.0.4':
178
+
resolution: {integrity: sha512-Rzujybon6EFuycWPID5bzjYIVdPPWWjVfPqELhByJTLe2vq3SlEubUCmz3VfhDu/Bb8wlBP2tIT5w4oq3vJLrg==}
179
+
peerDependencies:
180
+
'@atcute/bluesky': ^1.0.0
181
+
'@atcute/client': ^1.0.0 || ^2.0.0
194
182
195
183
'@atcute/bluesky-richtext-parser@1.0.7':
196
184
resolution: {integrity: sha512-nOvU699OXiGMbyswao7JJnY0C9WkwE7PVC/m5WWt0UN9fsXSOor9IZWw+v9SATp+94BTJoG38XyUomUaJnoQRA==}
197
185
198
-
'@atcute/bluesky-richtext-segmenter@2.0.3':
199
-
resolution: {integrity: sha512-8Jy2EHdqx0mKI0k8l4h2cnaBN1pGgSzSazO0Gp85ttIQmgynZsQX6l4OWgaQx0aNZFmqZRXJ7N0rj/b2dlO1eQ==}
186
+
'@atcute/bluesky-richtext-segmenter@1.0.5':
187
+
resolution: {integrity: sha512-D0FfmJVwppky9naL1OGKcQjtgO0lDLhkG4iCQHpShuHhEZ9FUdf3eUb/eQpVRNJGaJ4ShjEOHA6FlAizcjMkGQ==}
188
+
peerDependencies:
189
+
'@atcute/bluesky': ^1.0.0
190
+
'@atcute/client': ^1.0.0 || ^2.0.0
200
191
201
192
'@atcute/bluesky-search-parser@0.1.0':
202
193
resolution: {integrity: sha512-bTClwD9VGwaECOyWe1mf8V6t+7/77e3tiUHTE6CSrHXOJ/yM8N2xbn+dIi2ki2JLHvgvBN9wsWpFLykgfWhBaw==}
203
194
204
-
'@atcute/bluesky@3.1.3':
205
-
resolution: {integrity: sha512-avb9HLUqmCfIU/ZF6WeSjxLwUbzqST2JTF6efW7n1+3kw+oKRe6hhgsZoTka+3VrBZEpqveGt5O5TYdhzW0+lQ==}
206
-
207
-
'@atcute/cbor@2.2.4':
208
-
resolution: {integrity: sha512-8Y/OTM8zs5VInOCjfx4f9Idiiz7ygM/FkfWv/HW3/ZUsXczn1xk7GzTBbm4P5crn4C5luwDGpO7FwClMOERrow==}
209
-
210
-
'@atcute/cid@2.2.3':
211
-
resolution: {integrity: sha512-WEzNSL1EuCVtCQDFYEBIm4dEP6PcMEwi8IYUVIWvT77eO5EjY58F63z5T4qMABxSBM0+L4kqMxypdL1Fzf6LZw==}
195
+
'@atcute/bluesky@1.0.15':
196
+
resolution: {integrity: sha512-+EFiybmKQ97aBAgtaD+cKRJER5AMn3cZMkEwEg/pDdWyzxYJ9m1UgemmLdTgI8VrxPufKqdXS2nl7uO7TY6BPA==}
197
+
peerDependencies:
198
+
'@atcute/client': ^1.0.0 || ^2.0.0
212
199
213
-
'@atcute/client@4.0.3':
214
-
resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==}
200
+
'@atcute/cbor@2.2.0':
201
+
resolution: {integrity: sha512-W3ttcDJHiB5N6MbfEpJbTINZSjg0KB8gpBds8UWOGmybqUnuz43HZkFSpF/Vom0KilYg6QWU/ZM4X8SXZE+kow==}
215
202
216
-
'@atcute/identity@1.0.3':
217
-
resolution: {integrity: sha512-mNMxbKHFGys03A8JXKk0KfMBzdd0vrYMzZZWjpw1nYTs0+ea6bo5S1hwqVUZxHdo1gFHSe/t63jxQIF4yL9aKw==}
203
+
'@atcute/cid@2.2.0':
204
+
resolution: {integrity: sha512-ty+WjGcTfi1JJtcRNz6bsJMqT69lEIl4Ts7vl4U8SBHbxjbb6Tk/pcnQZVClKRYduRoZ1XhS9n5qOSIbIMctDA==}
218
205
219
-
'@atcute/lexicons@1.1.0':
220
-
resolution: {integrity: sha512-LFqwnria78xLYb62Ri/+WwQpUTgZp2DuyolNGIIOV1dpiKhFFFh//nscHMA6IExFLQRqWDs3tTjy7zv0h3sf1Q==}
206
+
'@atcute/client@2.0.9':
207
+
resolution: {integrity: sha512-QNDm9gMP6x9LY77ArwY+urQOBtQW74/onEAz42c40JxRm6Rl9K9cU4ROvNKJ+5cpVmEm1sthEWVRmDr5CSZENA==}
221
208
222
-
'@atcute/multibase@1.1.4':
223
-
resolution: {integrity: sha512-NUf5AeeSOmuZHGU+4GAaMtISJoG+ZHtW/vUVA4lK/YDt/7LODAW0Fd0NNIIUPVUoW0xJS6zSEIWvwLLuxmEHhA==}
209
+
'@atcute/multibase@1.1.2':
210
+
resolution: {integrity: sha512-KFX+c7a/u2jSNcRw0rLaUHG/XEKf1A1c8XF5soHnsb1JMCShihf/anfZ1kJ4no/IlIp9HEHV3PQRQO2sWL6ASQ==}
224
211
225
-
'@atcute/oauth-browser-client@1.0.26':
226
-
resolution: {integrity: sha512-z8VUmwRO1sFu5Dq1qYQOQLenkTSNaOyzlUZhVwFR41ru+AP84MS5UHHW/NsdC1xJAq1v6mlLySJ+pjxdDW8IYA==}
212
+
'@atcute/oauth-browser-client@1.0.16':
213
+
resolution: {integrity: sha512-BKkA4TPyaLIO+hVxcxZoDfLFUgsd3A47UyzWAbe3BpSoN8Kywy/CqWuAVlqdiUhO1iG+vVqGQhjKy4UxutaU4g==}
227
214
228
215
'@atcute/tid@1.0.2':
229
216
resolution: {integrity: sha512-ahmjroNyeDPJhtuf3+HTJropaH04HmJ8fhntDu73Gpz/RkAF7+nkz6kcP2QTgfvMCgMPAJUdskAAP82GPDTY9w==}
230
217
231
-
'@atcute/uint8array@1.0.3':
232
-
resolution: {integrity: sha512-M/K+ihiVW8Pl2PFLzaC4E3l4JaZ1IH05Q0AbPWUC4cVHnd/gZ/1kAF5ngdtGvJeDMirHZ2VAy7OmAsPwR/2nlA==}
218
+
'@atcute/uint8array@1.0.1':
219
+
resolution: {integrity: sha512-AAnlFKyfDRgb9GNZJbhQ6OuMhbmNPirQyapb8KnmcEhxQZ3+tt+4NcwqekEegY4MpNqSTYeeTdyxq0wGZv1JHg==}
233
220
234
221
'@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3':
235
222
resolution: {integrity: sha512-/Sbu/HqN2VGLYBhnsG7SbRNg98XKkbF6L7XDdBi+izRybfaK1FeMfodPpm/xnBHPJzwYMdkE0qtLyv6afhgMUA==}
236
223
237
-
'@atlaskit/pragmatic-drag-and-drop@1.6.0':
238
-
resolution: {integrity: sha512-J5ZnU6h0wjda1M1BKimzt4oRKeyVsTQzlRUqlbIUjfNioWFdSnIkPogWIn9tV2B68jphL1QNuZdEkKxcJygU2w==}
224
+
'@atlaskit/pragmatic-drag-and-drop@1.5.2':
225
+
resolution: {integrity: sha512-fDuTwlDD11r3ev5tLJ6JnzQUiG9v77c8zGcNdO7RRNtZZbOHam8CFhmyFGY4E/mLjvgYng0UkcyCrSBc4FXYZw==}
239
226
240
-
'@babel/code-frame@7.27.1':
241
-
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
227
+
'@babel/code-frame@7.26.2':
228
+
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
242
229
engines: {node: '>=6.9.0'}
243
230
244
-
'@babel/compat-data@7.27.5':
245
-
resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==}
231
+
'@babel/compat-data@7.26.8':
232
+
resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
246
233
engines: {node: '>=6.9.0'}
247
234
248
-
'@babel/core@7.27.4':
249
-
resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==}
235
+
'@babel/core@7.26.10':
236
+
resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
250
237
engines: {node: '>=6.9.0'}
251
238
252
-
'@babel/generator@7.27.5':
253
-
resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
239
+
'@babel/generator@7.27.0':
240
+
resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
254
241
engines: {node: '>=6.9.0'}
255
242
256
-
'@babel/helper-annotate-as-pure@7.27.3':
257
-
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
243
+
'@babel/helper-annotate-as-pure@7.25.9':
244
+
resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
258
245
engines: {node: '>=6.9.0'}
259
246
260
-
'@babel/helper-compilation-targets@7.27.2':
261
-
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
247
+
'@babel/helper-compilation-targets@7.27.0':
248
+
resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==}
262
249
engines: {node: '>=6.9.0'}
263
250
264
-
'@babel/helper-create-class-features-plugin@7.27.1':
265
-
resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
251
+
'@babel/helper-create-class-features-plugin@7.27.0':
252
+
resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==}
266
253
engines: {node: '>=6.9.0'}
267
254
peerDependencies:
268
255
'@babel/core': ^7.0.0
269
256
270
-
'@babel/helper-create-regexp-features-plugin@7.27.1':
271
-
resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==}
257
+
'@babel/helper-create-regexp-features-plugin@7.27.0':
258
+
resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==}
272
259
engines: {node: '>=6.9.0'}
273
260
peerDependencies:
274
261
'@babel/core': ^7.0.0
···
278
265
peerDependencies:
279
266
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
280
267
281
-
'@babel/helper-member-expression-to-functions@7.27.1':
282
-
resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
268
+
'@babel/helper-member-expression-to-functions@7.25.9':
269
+
resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
283
270
engines: {node: '>=6.9.0'}
284
271
285
272
'@babel/helper-module-imports@7.18.6':
286
273
resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
287
274
engines: {node: '>=6.9.0'}
288
275
289
-
'@babel/helper-module-imports@7.27.1':
290
-
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
276
+
'@babel/helper-module-imports@7.25.9':
277
+
resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
291
278
engines: {node: '>=6.9.0'}
292
279
293
-
'@babel/helper-module-transforms@7.27.3':
294
-
resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
280
+
'@babel/helper-module-transforms@7.26.0':
281
+
resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
295
282
engines: {node: '>=6.9.0'}
296
283
peerDependencies:
297
284
'@babel/core': ^7.0.0
298
285
299
-
'@babel/helper-optimise-call-expression@7.27.1':
300
-
resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
286
+
'@babel/helper-optimise-call-expression@7.25.9':
287
+
resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
301
288
engines: {node: '>=6.9.0'}
302
289
303
-
'@babel/helper-plugin-utils@7.27.1':
304
-
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
290
+
'@babel/helper-plugin-utils@7.26.5':
291
+
resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
305
292
engines: {node: '>=6.9.0'}
306
293
307
-
'@babel/helper-remap-async-to-generator@7.27.1':
308
-
resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
294
+
'@babel/helper-remap-async-to-generator@7.25.9':
295
+
resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==}
309
296
engines: {node: '>=6.9.0'}
310
297
peerDependencies:
311
298
'@babel/core': ^7.0.0
312
299
313
-
'@babel/helper-replace-supers@7.27.1':
314
-
resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
300
+
'@babel/helper-replace-supers@7.26.5':
301
+
resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
315
302
engines: {node: '>=6.9.0'}
316
303
peerDependencies:
317
304
'@babel/core': ^7.0.0
318
305
319
-
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
320
-
resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
306
+
'@babel/helper-skip-transparent-expression-wrappers@7.25.9':
307
+
resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
321
308
engines: {node: '>=6.9.0'}
322
309
323
-
'@babel/helper-string-parser@7.27.1':
324
-
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
310
+
'@babel/helper-string-parser@7.25.9':
311
+
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
325
312
engines: {node: '>=6.9.0'}
326
313
327
-
'@babel/helper-validator-identifier@7.27.1':
328
-
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
314
+
'@babel/helper-validator-identifier@7.25.9':
315
+
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
329
316
engines: {node: '>=6.9.0'}
330
317
331
-
'@babel/helper-validator-option@7.27.1':
332
-
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
318
+
'@babel/helper-validator-option@7.25.9':
319
+
resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
333
320
engines: {node: '>=6.9.0'}
334
321
335
-
'@babel/helper-wrap-function@7.27.1':
336
-
resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==}
322
+
'@babel/helper-wrap-function@7.25.9':
323
+
resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==}
337
324
engines: {node: '>=6.9.0'}
338
325
339
-
'@babel/helpers@7.27.6':
340
-
resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
326
+
'@babel/helpers@7.27.0':
327
+
resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==}
341
328
engines: {node: '>=6.9.0'}
342
329
343
-
'@babel/parser@7.27.5':
344
-
resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
330
+
'@babel/parser@7.27.0':
331
+
resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
345
332
engines: {node: '>=6.0.0'}
346
333
hasBin: true
347
334
348
-
'@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1':
349
-
resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==}
335
+
'@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9':
336
+
resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==}
350
337
engines: {node: '>=6.9.0'}
351
338
peerDependencies:
352
339
'@babel/core': ^7.0.0
353
340
354
-
'@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
355
-
resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
341
+
'@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9':
342
+
resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==}
356
343
engines: {node: '>=6.9.0'}
357
344
peerDependencies:
358
345
'@babel/core': ^7.0.0
359
346
360
-
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
361
-
resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
347
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9':
348
+
resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==}
362
349
engines: {node: '>=6.9.0'}
363
350
peerDependencies:
364
351
'@babel/core': ^7.0.0
365
352
366
-
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
367
-
resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
353
+
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9':
354
+
resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==}
368
355
engines: {node: '>=6.9.0'}
369
356
peerDependencies:
370
357
'@babel/core': ^7.13.0
371
358
372
-
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1':
373
-
resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==}
359
+
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9':
360
+
resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==}
374
361
engines: {node: '>=6.9.0'}
375
362
peerDependencies:
376
363
'@babel/core': ^7.0.0
···
381
368
peerDependencies:
382
369
'@babel/core': ^7.0.0-0
383
370
384
-
'@babel/plugin-syntax-import-assertions@7.27.1':
385
-
resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
371
+
'@babel/plugin-syntax-import-assertions@7.26.0':
372
+
resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==}
386
373
engines: {node: '>=6.9.0'}
387
374
peerDependencies:
388
375
'@babel/core': ^7.0.0-0
389
376
390
-
'@babel/plugin-syntax-import-attributes@7.27.1':
391
-
resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
377
+
'@babel/plugin-syntax-import-attributes@7.26.0':
378
+
resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
392
379
engines: {node: '>=6.9.0'}
393
380
peerDependencies:
394
381
'@babel/core': ^7.0.0-0
395
382
396
-
'@babel/plugin-syntax-jsx@7.27.1':
397
-
resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
383
+
'@babel/plugin-syntax-jsx@7.25.9':
384
+
resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
398
385
engines: {node: '>=6.9.0'}
399
386
peerDependencies:
400
387
'@babel/core': ^7.0.0-0
···
405
392
peerDependencies:
406
393
'@babel/core': ^7.0.0
407
394
408
-
'@babel/plugin-transform-arrow-functions@7.27.1':
409
-
resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
395
+
'@babel/plugin-transform-arrow-functions@7.25.9':
396
+
resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==}
410
397
engines: {node: '>=6.9.0'}
411
398
peerDependencies:
412
399
'@babel/core': ^7.0.0-0
413
400
414
-
'@babel/plugin-transform-async-generator-functions@7.27.1':
415
-
resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==}
401
+
'@babel/plugin-transform-async-generator-functions@7.26.8':
402
+
resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==}
416
403
engines: {node: '>=6.9.0'}
417
404
peerDependencies:
418
405
'@babel/core': ^7.0.0-0
419
406
420
-
'@babel/plugin-transform-async-to-generator@7.27.1':
421
-
resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==}
407
+
'@babel/plugin-transform-async-to-generator@7.25.9':
408
+
resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
422
409
engines: {node: '>=6.9.0'}
423
410
peerDependencies:
424
411
'@babel/core': ^7.0.0-0
425
412
426
-
'@babel/plugin-transform-block-scoped-functions@7.27.1':
427
-
resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
413
+
'@babel/plugin-transform-block-scoped-functions@7.26.5':
414
+
resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==}
428
415
engines: {node: '>=6.9.0'}
429
416
peerDependencies:
430
417
'@babel/core': ^7.0.0-0
431
418
432
-
'@babel/plugin-transform-block-scoping@7.27.5':
433
-
resolution: {integrity: sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==}
419
+
'@babel/plugin-transform-block-scoping@7.27.0':
420
+
resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==}
434
421
engines: {node: '>=6.9.0'}
435
422
peerDependencies:
436
423
'@babel/core': ^7.0.0-0
437
424
438
-
'@babel/plugin-transform-class-properties@7.27.1':
439
-
resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==}
425
+
'@babel/plugin-transform-class-properties@7.25.9':
426
+
resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==}
440
427
engines: {node: '>=6.9.0'}
441
428
peerDependencies:
442
429
'@babel/core': ^7.0.0-0
443
430
444
-
'@babel/plugin-transform-class-static-block@7.27.1':
445
-
resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==}
431
+
'@babel/plugin-transform-class-static-block@7.26.0':
432
+
resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==}
446
433
engines: {node: '>=6.9.0'}
447
434
peerDependencies:
448
435
'@babel/core': ^7.12.0
449
436
450
-
'@babel/plugin-transform-classes@7.27.1':
451
-
resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==}
437
+
'@babel/plugin-transform-classes@7.25.9':
438
+
resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==}
452
439
engines: {node: '>=6.9.0'}
453
440
peerDependencies:
454
441
'@babel/core': ^7.0.0-0
455
442
456
-
'@babel/plugin-transform-computed-properties@7.27.1':
457
-
resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==}
443
+
'@babel/plugin-transform-computed-properties@7.25.9':
444
+
resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==}
458
445
engines: {node: '>=6.9.0'}
459
446
peerDependencies:
460
447
'@babel/core': ^7.0.0-0
461
448
462
-
'@babel/plugin-transform-destructuring@7.27.3':
463
-
resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==}
449
+
'@babel/plugin-transform-destructuring@7.25.9':
450
+
resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==}
464
451
engines: {node: '>=6.9.0'}
465
452
peerDependencies:
466
453
'@babel/core': ^7.0.0-0
467
454
468
-
'@babel/plugin-transform-dotall-regex@7.27.1':
469
-
resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==}
455
+
'@babel/plugin-transform-dotall-regex@7.25.9':
456
+
resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==}
470
457
engines: {node: '>=6.9.0'}
471
458
peerDependencies:
472
459
'@babel/core': ^7.0.0-0
473
460
474
-
'@babel/plugin-transform-duplicate-keys@7.27.1':
475
-
resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
461
+
'@babel/plugin-transform-duplicate-keys@7.25.9':
462
+
resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==}
476
463
engines: {node: '>=6.9.0'}
477
464
peerDependencies:
478
465
'@babel/core': ^7.0.0-0
479
466
480
-
'@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1':
481
-
resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==}
467
+
'@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9':
468
+
resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==}
482
469
engines: {node: '>=6.9.0'}
483
470
peerDependencies:
484
471
'@babel/core': ^7.0.0
485
472
486
-
'@babel/plugin-transform-dynamic-import@7.27.1':
487
-
resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
473
+
'@babel/plugin-transform-dynamic-import@7.25.9':
474
+
resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==}
488
475
engines: {node: '>=6.9.0'}
489
476
peerDependencies:
490
477
'@babel/core': ^7.0.0-0
491
478
492
-
'@babel/plugin-transform-exponentiation-operator@7.27.1':
493
-
resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==}
479
+
'@babel/plugin-transform-exponentiation-operator@7.26.3':
480
+
resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==}
494
481
engines: {node: '>=6.9.0'}
495
482
peerDependencies:
496
483
'@babel/core': ^7.0.0-0
497
484
498
-
'@babel/plugin-transform-export-namespace-from@7.27.1':
499
-
resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
485
+
'@babel/plugin-transform-export-namespace-from@7.25.9':
486
+
resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==}
500
487
engines: {node: '>=6.9.0'}
501
488
peerDependencies:
502
489
'@babel/core': ^7.0.0-0
503
490
504
-
'@babel/plugin-transform-for-of@7.27.1':
505
-
resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
491
+
'@babel/plugin-transform-for-of@7.26.9':
492
+
resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==}
506
493
engines: {node: '>=6.9.0'}
507
494
peerDependencies:
508
495
'@babel/core': ^7.0.0-0
509
496
510
-
'@babel/plugin-transform-function-name@7.27.1':
511
-
resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
497
+
'@babel/plugin-transform-function-name@7.25.9':
498
+
resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==}
512
499
engines: {node: '>=6.9.0'}
513
500
peerDependencies:
514
501
'@babel/core': ^7.0.0-0
515
502
516
-
'@babel/plugin-transform-json-strings@7.27.1':
517
-
resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==}
503
+
'@babel/plugin-transform-json-strings@7.25.9':
504
+
resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==}
518
505
engines: {node: '>=6.9.0'}
519
506
peerDependencies:
520
507
'@babel/core': ^7.0.0-0
521
508
522
-
'@babel/plugin-transform-literals@7.27.1':
523
-
resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
509
+
'@babel/plugin-transform-literals@7.25.9':
510
+
resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==}
524
511
engines: {node: '>=6.9.0'}
525
512
peerDependencies:
526
513
'@babel/core': ^7.0.0-0
527
514
528
-
'@babel/plugin-transform-logical-assignment-operators@7.27.1':
529
-
resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==}
515
+
'@babel/plugin-transform-logical-assignment-operators@7.25.9':
516
+
resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==}
530
517
engines: {node: '>=6.9.0'}
531
518
peerDependencies:
532
519
'@babel/core': ^7.0.0-0
533
520
534
-
'@babel/plugin-transform-member-expression-literals@7.27.1':
535
-
resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
521
+
'@babel/plugin-transform-member-expression-literals@7.25.9':
522
+
resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==}
536
523
engines: {node: '>=6.9.0'}
537
524
peerDependencies:
538
525
'@babel/core': ^7.0.0-0
539
526
540
-
'@babel/plugin-transform-modules-amd@7.27.1':
541
-
resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
527
+
'@babel/plugin-transform-modules-amd@7.25.9':
528
+
resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==}
542
529
engines: {node: '>=6.9.0'}
543
530
peerDependencies:
544
531
'@babel/core': ^7.0.0-0
545
532
546
-
'@babel/plugin-transform-modules-commonjs@7.27.1':
547
-
resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
533
+
'@babel/plugin-transform-modules-commonjs@7.26.3':
534
+
resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==}
548
535
engines: {node: '>=6.9.0'}
549
536
peerDependencies:
550
537
'@babel/core': ^7.0.0-0
551
538
552
-
'@babel/plugin-transform-modules-systemjs@7.27.1':
553
-
resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==}
539
+
'@babel/plugin-transform-modules-systemjs@7.25.9':
540
+
resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==}
554
541
engines: {node: '>=6.9.0'}
555
542
peerDependencies:
556
543
'@babel/core': ^7.0.0-0
557
544
558
-
'@babel/plugin-transform-modules-umd@7.27.1':
559
-
resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
545
+
'@babel/plugin-transform-modules-umd@7.25.9':
546
+
resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==}
560
547
engines: {node: '>=6.9.0'}
561
548
peerDependencies:
562
549
'@babel/core': ^7.0.0-0
563
550
564
-
'@babel/plugin-transform-named-capturing-groups-regex@7.27.1':
565
-
resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
551
+
'@babel/plugin-transform-named-capturing-groups-regex@7.25.9':
552
+
resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==}
566
553
engines: {node: '>=6.9.0'}
567
554
peerDependencies:
568
555
'@babel/core': ^7.0.0
569
556
570
-
'@babel/plugin-transform-new-target@7.27.1':
571
-
resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
557
+
'@babel/plugin-transform-new-target@7.25.9':
558
+
resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==}
572
559
engines: {node: '>=6.9.0'}
573
560
peerDependencies:
574
561
'@babel/core': ^7.0.0-0
575
562
576
-
'@babel/plugin-transform-nullish-coalescing-operator@7.27.1':
577
-
resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==}
563
+
'@babel/plugin-transform-nullish-coalescing-operator@7.26.6':
564
+
resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==}
578
565
engines: {node: '>=6.9.0'}
579
566
peerDependencies:
580
567
'@babel/core': ^7.0.0-0
581
568
582
-
'@babel/plugin-transform-numeric-separator@7.27.1':
583
-
resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==}
569
+
'@babel/plugin-transform-numeric-separator@7.25.9':
570
+
resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==}
584
571
engines: {node: '>=6.9.0'}
585
572
peerDependencies:
586
573
'@babel/core': ^7.0.0-0
587
574
588
-
'@babel/plugin-transform-object-rest-spread@7.27.3':
589
-
resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==}
575
+
'@babel/plugin-transform-object-rest-spread@7.25.9':
576
+
resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==}
590
577
engines: {node: '>=6.9.0'}
591
578
peerDependencies:
592
579
'@babel/core': ^7.0.0-0
593
580
594
-
'@babel/plugin-transform-object-super@7.27.1':
595
-
resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
581
+
'@babel/plugin-transform-object-super@7.25.9':
582
+
resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==}
596
583
engines: {node: '>=6.9.0'}
597
584
peerDependencies:
598
585
'@babel/core': ^7.0.0-0
599
586
600
-
'@babel/plugin-transform-optional-catch-binding@7.27.1':
601
-
resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==}
587
+
'@babel/plugin-transform-optional-catch-binding@7.25.9':
588
+
resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==}
602
589
engines: {node: '>=6.9.0'}
603
590
peerDependencies:
604
591
'@babel/core': ^7.0.0-0
605
592
606
-
'@babel/plugin-transform-optional-chaining@7.27.1':
607
-
resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==}
593
+
'@babel/plugin-transform-optional-chaining@7.25.9':
594
+
resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==}
608
595
engines: {node: '>=6.9.0'}
609
596
peerDependencies:
610
597
'@babel/core': ^7.0.0-0
611
598
612
-
'@babel/plugin-transform-parameters@7.27.1':
613
-
resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==}
599
+
'@babel/plugin-transform-parameters@7.25.9':
600
+
resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==}
614
601
engines: {node: '>=6.9.0'}
615
602
peerDependencies:
616
603
'@babel/core': ^7.0.0-0
617
604
618
-
'@babel/plugin-transform-private-methods@7.27.1':
619
-
resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==}
605
+
'@babel/plugin-transform-private-methods@7.25.9':
606
+
resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==}
620
607
engines: {node: '>=6.9.0'}
621
608
peerDependencies:
622
609
'@babel/core': ^7.0.0-0
623
610
624
-
'@babel/plugin-transform-private-property-in-object@7.27.1':
625
-
resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==}
611
+
'@babel/plugin-transform-private-property-in-object@7.25.9':
612
+
resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==}
626
613
engines: {node: '>=6.9.0'}
627
614
peerDependencies:
628
615
'@babel/core': ^7.0.0-0
629
616
630
-
'@babel/plugin-transform-property-literals@7.27.1':
631
-
resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
617
+
'@babel/plugin-transform-property-literals@7.25.9':
618
+
resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==}
632
619
engines: {node: '>=6.9.0'}
633
620
peerDependencies:
634
621
'@babel/core': ^7.0.0-0
635
622
636
-
'@babel/plugin-transform-regenerator@7.27.5':
637
-
resolution: {integrity: sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==}
623
+
'@babel/plugin-transform-regenerator@7.27.0':
624
+
resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==}
638
625
engines: {node: '>=6.9.0'}
639
626
peerDependencies:
640
627
'@babel/core': ^7.0.0-0
641
628
642
-
'@babel/plugin-transform-regexp-modifiers@7.27.1':
643
-
resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==}
629
+
'@babel/plugin-transform-regexp-modifiers@7.26.0':
630
+
resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==}
644
631
engines: {node: '>=6.9.0'}
645
632
peerDependencies:
646
633
'@babel/core': ^7.0.0
647
634
648
-
'@babel/plugin-transform-reserved-words@7.27.1':
649
-
resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
635
+
'@babel/plugin-transform-reserved-words@7.25.9':
636
+
resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==}
650
637
engines: {node: '>=6.9.0'}
651
638
peerDependencies:
652
639
'@babel/core': ^7.0.0-0
653
640
654
-
'@babel/plugin-transform-shorthand-properties@7.27.1':
655
-
resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
641
+
'@babel/plugin-transform-shorthand-properties@7.25.9':
642
+
resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==}
656
643
engines: {node: '>=6.9.0'}
657
644
peerDependencies:
658
645
'@babel/core': ^7.0.0-0
659
646
660
-
'@babel/plugin-transform-spread@7.27.1':
661
-
resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==}
647
+
'@babel/plugin-transform-spread@7.25.9':
648
+
resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==}
662
649
engines: {node: '>=6.9.0'}
663
650
peerDependencies:
664
651
'@babel/core': ^7.0.0-0
665
652
666
-
'@babel/plugin-transform-sticky-regex@7.27.1':
667
-
resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
653
+
'@babel/plugin-transform-sticky-regex@7.25.9':
654
+
resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==}
668
655
engines: {node: '>=6.9.0'}
669
656
peerDependencies:
670
657
'@babel/core': ^7.0.0-0
671
658
672
-
'@babel/plugin-transform-template-literals@7.27.1':
673
-
resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
659
+
'@babel/plugin-transform-template-literals@7.26.8':
660
+
resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==}
674
661
engines: {node: '>=6.9.0'}
675
662
peerDependencies:
676
663
'@babel/core': ^7.0.0-0
677
664
678
-
'@babel/plugin-transform-typeof-symbol@7.27.1':
679
-
resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
665
+
'@babel/plugin-transform-typeof-symbol@7.27.0':
666
+
resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==}
680
667
engines: {node: '>=6.9.0'}
681
668
peerDependencies:
682
669
'@babel/core': ^7.0.0-0
683
670
684
-
'@babel/plugin-transform-unicode-escapes@7.27.1':
685
-
resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
671
+
'@babel/plugin-transform-unicode-escapes@7.25.9':
672
+
resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==}
686
673
engines: {node: '>=6.9.0'}
687
674
peerDependencies:
688
675
'@babel/core': ^7.0.0-0
689
676
690
-
'@babel/plugin-transform-unicode-property-regex@7.27.1':
691
-
resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==}
677
+
'@babel/plugin-transform-unicode-property-regex@7.25.9':
678
+
resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==}
692
679
engines: {node: '>=6.9.0'}
693
680
peerDependencies:
694
681
'@babel/core': ^7.0.0-0
695
682
696
-
'@babel/plugin-transform-unicode-regex@7.27.1':
697
-
resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
683
+
'@babel/plugin-transform-unicode-regex@7.25.9':
684
+
resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==}
698
685
engines: {node: '>=6.9.0'}
699
686
peerDependencies:
700
687
'@babel/core': ^7.0.0-0
701
688
702
-
'@babel/plugin-transform-unicode-sets-regex@7.27.1':
703
-
resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==}
689
+
'@babel/plugin-transform-unicode-sets-regex@7.25.9':
690
+
resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==}
704
691
engines: {node: '>=6.9.0'}
705
692
peerDependencies:
706
693
'@babel/core': ^7.0.0
707
694
708
-
'@babel/preset-env@7.27.2':
709
-
resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==}
695
+
'@babel/preset-env@7.26.9':
696
+
resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==}
710
697
engines: {node: '>=6.9.0'}
711
698
peerDependencies:
712
699
'@babel/core': ^7.0.0-0
···
716
703
peerDependencies:
717
704
'@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
718
705
719
-
'@babel/runtime@7.27.6':
720
-
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
706
+
'@babel/runtime@7.27.0':
707
+
resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
721
708
engines: {node: '>=6.9.0'}
722
709
723
-
'@babel/template@7.27.2':
724
-
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
710
+
'@babel/template@7.27.0':
711
+
resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
725
712
engines: {node: '>=6.9.0'}
726
713
727
-
'@babel/traverse@7.27.4':
728
-
resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==}
714
+
'@babel/traverse@7.27.0':
715
+
resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
729
716
engines: {node: '>=6.9.0'}
730
717
731
-
'@babel/types@7.27.6':
732
-
resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
718
+
'@babel/types@7.27.0':
719
+
resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
733
720
engines: {node: '>=6.9.0'}
734
721
735
-
'@badrap/valita@0.4.5':
736
-
resolution: {integrity: sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==}
737
-
engines: {node: '>= 18'}
738
-
739
722
'@cloudflare/kv-asset-handler@0.4.0':
740
723
resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==}
741
724
engines: {node: '>=18.0.0'}
742
725
743
-
'@cloudflare/unenv-preset@2.3.3':
744
-
resolution: {integrity: sha512-/M3MEcj3V2WHIRSW1eAQBPRJ6JnGQHc6JKMAPLkDb7pLs3m6X9ES/+K3ceGqxI6TKeF32AWAi7ls0AYzVxCP0A==}
726
+
'@cloudflare/unenv-preset@2.3.1':
727
+
resolution: {integrity: sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==}
745
728
peerDependencies:
746
-
unenv: 2.0.0-rc.17
747
-
workerd: ^1.20250508.0
729
+
unenv: 2.0.0-rc.15
730
+
workerd: ^1.20250320.0
748
731
peerDependenciesMeta:
749
732
workerd:
750
733
optional: true
751
734
752
-
'@cloudflare/workerd-darwin-64@1.20250617.0':
753
-
resolution: {integrity: sha512-toG8JUKVLIks4oOJLe9FeuixE84pDpMZ32ip7mCpE7JaFc5BqGFvevk0YC/db3T71AQlialjRwioH3jS/dzItA==}
735
+
'@cloudflare/workerd-darwin-64@1.20250321.0':
736
+
resolution: {integrity: sha512-y273GfLaNCxkL8hTfo0c8FZKkOPdq+CPZAKJXPWB+YpS1JCOULu6lNTptpD7ZtF14dTYPkn5Weug31TTlviJmw==}
754
737
engines: {node: '>=16'}
755
738
cpu: [x64]
756
739
os: [darwin]
757
740
758
-
'@cloudflare/workerd-darwin-arm64@1.20250617.0':
759
-
resolution: {integrity: sha512-JTX0exbC9/ZtMmQQA8tDZEZFMXZrxOpTUj2hHnsUkErWYkr5SSZH04RBhPg6dU4VL8bXuB5/eJAh7+P9cZAp7g==}
741
+
'@cloudflare/workerd-darwin-arm64@1.20250321.0':
742
+
resolution: {integrity: sha512-qvf7/gkkQq7fAsoMlntJSimN/WfwQqxi2oL0aWZMGodTvs/yRHO2I4oE0eOihVdK1BXyBHJXNxEvNDBjF0+Yuw==}
760
743
engines: {node: '>=16'}
761
744
cpu: [arm64]
762
745
os: [darwin]
763
746
764
-
'@cloudflare/workerd-linux-64@1.20250617.0':
765
-
resolution: {integrity: sha512-8jkSoVRJ+1bOx3tuWlZCGaGCV2ew7/jFMl6V3CPXOoEtERUHsZBQLVkQIGKcmC/LKSj7f/mpyBUeu2EPTo2HEg==}
747
+
'@cloudflare/workerd-linux-64@1.20250321.0':
748
+
resolution: {integrity: sha512-AEp3xjWFrNPO/h0StCOgOb0bWCcNThnkESpy91Wf4mfUF2p7tOCdp37Nk/1QIRqSxnfv4Hgxyi7gcWud9cJuMw==}
766
749
engines: {node: '>=16'}
767
750
cpu: [x64]
768
751
os: [linux]
769
752
770
-
'@cloudflare/workerd-linux-arm64@1.20250617.0':
771
-
resolution: {integrity: sha512-YAzcOyu897z5dQKFzme1oujGWMGEJCR7/Wrrm1nSP6dqutxFPTubRADM8BHn2CV3ij//vaPnAeLmZE3jVwOwig==}
753
+
'@cloudflare/workerd-linux-arm64@1.20250321.0':
754
+
resolution: {integrity: sha512-wRWyMIoPIS1UBXCisW0FYTgGsfZD4AVS0hXA5nuLc0c21CvzZpmmTjqEWMcwPFenwy/MNL61NautVOC4qJqQ3Q==}
772
755
engines: {node: '>=16'}
773
756
cpu: [arm64]
774
757
os: [linux]
775
758
776
-
'@cloudflare/workerd-windows-64@1.20250617.0':
777
-
resolution: {integrity: sha512-XWM/6sagDrO0CYDKhXhPjM23qusvIN1ju9ZEml6gOQs8tNOFnq6Cn6X9FAmnyapRFCGUSEC3HZYJAm7zwVKaMA==}
759
+
'@cloudflare/workerd-windows-64@1.20250321.0':
760
+
resolution: {integrity: sha512-8vYP3QYO0zo2faUDfWl88jjfUvz7Si9GS3mUYaTh/TR9LcAUtsO7muLxPamqEyoxNFtbQgy08R4rTid94KRi3w==}
778
761
engines: {node: '>=16'}
779
762
cpu: [x64]
780
763
os: [win32]
···
783
766
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
784
767
engines: {node: '>=12'}
785
768
786
-
'@emnapi/runtime@1.4.3':
787
-
resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
769
+
'@emnapi/runtime@1.4.0':
770
+
resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==}
788
771
789
-
'@esbuild/aix-ppc64@0.25.4':
790
-
resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
772
+
'@esbuild/aix-ppc64@0.24.0':
773
+
resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
791
774
engines: {node: '>=18'}
792
775
cpu: [ppc64]
793
776
os: [aix]
794
777
795
-
'@esbuild/aix-ppc64@0.25.5':
796
-
resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
778
+
'@esbuild/aix-ppc64@0.24.2':
779
+
resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
797
780
engines: {node: '>=18'}
798
781
cpu: [ppc64]
799
782
os: [aix]
800
783
801
-
'@esbuild/android-arm64@0.25.4':
802
-
resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
784
+
'@esbuild/android-arm64@0.24.0':
785
+
resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
803
786
engines: {node: '>=18'}
804
787
cpu: [arm64]
805
788
os: [android]
806
789
807
-
'@esbuild/android-arm64@0.25.5':
808
-
resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
790
+
'@esbuild/android-arm64@0.24.2':
791
+
resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
809
792
engines: {node: '>=18'}
810
793
cpu: [arm64]
811
794
os: [android]
812
795
813
-
'@esbuild/android-arm@0.25.4':
814
-
resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
796
+
'@esbuild/android-arm@0.24.0':
797
+
resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
815
798
engines: {node: '>=18'}
816
799
cpu: [arm]
817
800
os: [android]
818
801
819
-
'@esbuild/android-arm@0.25.5':
820
-
resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
802
+
'@esbuild/android-arm@0.24.2':
803
+
resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
821
804
engines: {node: '>=18'}
822
805
cpu: [arm]
823
806
os: [android]
824
807
825
-
'@esbuild/android-x64@0.25.4':
826
-
resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
808
+
'@esbuild/android-x64@0.24.0':
809
+
resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
827
810
engines: {node: '>=18'}
828
811
cpu: [x64]
829
812
os: [android]
830
813
831
-
'@esbuild/android-x64@0.25.5':
832
-
resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
814
+
'@esbuild/android-x64@0.24.2':
815
+
resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
833
816
engines: {node: '>=18'}
834
817
cpu: [x64]
835
818
os: [android]
836
819
837
-
'@esbuild/darwin-arm64@0.25.4':
838
-
resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
820
+
'@esbuild/darwin-arm64@0.24.0':
821
+
resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
839
822
engines: {node: '>=18'}
840
823
cpu: [arm64]
841
824
os: [darwin]
842
825
843
-
'@esbuild/darwin-arm64@0.25.5':
844
-
resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
826
+
'@esbuild/darwin-arm64@0.24.2':
827
+
resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
845
828
engines: {node: '>=18'}
846
829
cpu: [arm64]
847
830
os: [darwin]
848
831
849
-
'@esbuild/darwin-x64@0.25.4':
850
-
resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
832
+
'@esbuild/darwin-x64@0.24.0':
833
+
resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
851
834
engines: {node: '>=18'}
852
835
cpu: [x64]
853
836
os: [darwin]
854
837
855
-
'@esbuild/darwin-x64@0.25.5':
856
-
resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
838
+
'@esbuild/darwin-x64@0.24.2':
839
+
resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
857
840
engines: {node: '>=18'}
858
841
cpu: [x64]
859
842
os: [darwin]
860
843
861
-
'@esbuild/freebsd-arm64@0.25.4':
862
-
resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
844
+
'@esbuild/freebsd-arm64@0.24.0':
845
+
resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
863
846
engines: {node: '>=18'}
864
847
cpu: [arm64]
865
848
os: [freebsd]
866
849
867
-
'@esbuild/freebsd-arm64@0.25.5':
868
-
resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
850
+
'@esbuild/freebsd-arm64@0.24.2':
851
+
resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
869
852
engines: {node: '>=18'}
870
853
cpu: [arm64]
871
854
os: [freebsd]
872
855
873
-
'@esbuild/freebsd-x64@0.25.4':
874
-
resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
856
+
'@esbuild/freebsd-x64@0.24.0':
857
+
resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
875
858
engines: {node: '>=18'}
876
859
cpu: [x64]
877
860
os: [freebsd]
878
861
879
-
'@esbuild/freebsd-x64@0.25.5':
880
-
resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
862
+
'@esbuild/freebsd-x64@0.24.2':
863
+
resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
881
864
engines: {node: '>=18'}
882
865
cpu: [x64]
883
866
os: [freebsd]
884
867
885
-
'@esbuild/linux-arm64@0.25.4':
886
-
resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
868
+
'@esbuild/linux-arm64@0.24.0':
869
+
resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
887
870
engines: {node: '>=18'}
888
871
cpu: [arm64]
889
872
os: [linux]
890
873
891
-
'@esbuild/linux-arm64@0.25.5':
892
-
resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
874
+
'@esbuild/linux-arm64@0.24.2':
875
+
resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
893
876
engines: {node: '>=18'}
894
877
cpu: [arm64]
895
878
os: [linux]
896
879
897
-
'@esbuild/linux-arm@0.25.4':
898
-
resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
880
+
'@esbuild/linux-arm@0.24.0':
881
+
resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
899
882
engines: {node: '>=18'}
900
883
cpu: [arm]
901
884
os: [linux]
902
885
903
-
'@esbuild/linux-arm@0.25.5':
904
-
resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
886
+
'@esbuild/linux-arm@0.24.2':
887
+
resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
905
888
engines: {node: '>=18'}
906
889
cpu: [arm]
907
890
os: [linux]
908
891
909
-
'@esbuild/linux-ia32@0.25.4':
910
-
resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
892
+
'@esbuild/linux-ia32@0.24.0':
893
+
resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
911
894
engines: {node: '>=18'}
912
895
cpu: [ia32]
913
896
os: [linux]
914
897
915
-
'@esbuild/linux-ia32@0.25.5':
916
-
resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
898
+
'@esbuild/linux-ia32@0.24.2':
899
+
resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
917
900
engines: {node: '>=18'}
918
901
cpu: [ia32]
919
902
os: [linux]
920
903
921
-
'@esbuild/linux-loong64@0.25.4':
922
-
resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
904
+
'@esbuild/linux-loong64@0.24.0':
905
+
resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
923
906
engines: {node: '>=18'}
924
907
cpu: [loong64]
925
908
os: [linux]
926
909
927
-
'@esbuild/linux-loong64@0.25.5':
928
-
resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
910
+
'@esbuild/linux-loong64@0.24.2':
911
+
resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
929
912
engines: {node: '>=18'}
930
913
cpu: [loong64]
931
914
os: [linux]
932
915
933
-
'@esbuild/linux-mips64el@0.25.4':
934
-
resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
916
+
'@esbuild/linux-mips64el@0.24.0':
917
+
resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
935
918
engines: {node: '>=18'}
936
919
cpu: [mips64el]
937
920
os: [linux]
938
921
939
-
'@esbuild/linux-mips64el@0.25.5':
940
-
resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
922
+
'@esbuild/linux-mips64el@0.24.2':
923
+
resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
941
924
engines: {node: '>=18'}
942
925
cpu: [mips64el]
943
926
os: [linux]
944
927
945
-
'@esbuild/linux-ppc64@0.25.4':
946
-
resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
928
+
'@esbuild/linux-ppc64@0.24.0':
929
+
resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
947
930
engines: {node: '>=18'}
948
931
cpu: [ppc64]
949
932
os: [linux]
950
933
951
-
'@esbuild/linux-ppc64@0.25.5':
952
-
resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
934
+
'@esbuild/linux-ppc64@0.24.2':
935
+
resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
953
936
engines: {node: '>=18'}
954
937
cpu: [ppc64]
955
938
os: [linux]
956
939
957
-
'@esbuild/linux-riscv64@0.25.4':
958
-
resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
940
+
'@esbuild/linux-riscv64@0.24.0':
941
+
resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
959
942
engines: {node: '>=18'}
960
943
cpu: [riscv64]
961
944
os: [linux]
962
945
963
-
'@esbuild/linux-riscv64@0.25.5':
964
-
resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
946
+
'@esbuild/linux-riscv64@0.24.2':
947
+
resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
965
948
engines: {node: '>=18'}
966
949
cpu: [riscv64]
967
950
os: [linux]
968
951
969
-
'@esbuild/linux-s390x@0.25.4':
970
-
resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
952
+
'@esbuild/linux-s390x@0.24.0':
953
+
resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
971
954
engines: {node: '>=18'}
972
955
cpu: [s390x]
973
956
os: [linux]
974
957
975
-
'@esbuild/linux-s390x@0.25.5':
976
-
resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
958
+
'@esbuild/linux-s390x@0.24.2':
959
+
resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
977
960
engines: {node: '>=18'}
978
961
cpu: [s390x]
979
962
os: [linux]
980
963
981
-
'@esbuild/linux-x64@0.25.4':
982
-
resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
964
+
'@esbuild/linux-x64@0.24.0':
965
+
resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
983
966
engines: {node: '>=18'}
984
967
cpu: [x64]
985
968
os: [linux]
986
969
987
-
'@esbuild/linux-x64@0.25.5':
988
-
resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
970
+
'@esbuild/linux-x64@0.24.2':
971
+
resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
989
972
engines: {node: '>=18'}
990
973
cpu: [x64]
991
974
os: [linux]
992
975
993
-
'@esbuild/netbsd-arm64@0.25.4':
994
-
resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
995
-
engines: {node: '>=18'}
996
-
cpu: [arm64]
997
-
os: [netbsd]
998
-
999
-
'@esbuild/netbsd-arm64@0.25.5':
1000
-
resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
976
+
'@esbuild/netbsd-arm64@0.24.2':
977
+
resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
1001
978
engines: {node: '>=18'}
1002
979
cpu: [arm64]
1003
980
os: [netbsd]
1004
981
1005
-
'@esbuild/netbsd-x64@0.25.4':
1006
-
resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
982
+
'@esbuild/netbsd-x64@0.24.0':
983
+
resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
1007
984
engines: {node: '>=18'}
1008
985
cpu: [x64]
1009
986
os: [netbsd]
1010
987
1011
-
'@esbuild/netbsd-x64@0.25.5':
1012
-
resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
988
+
'@esbuild/netbsd-x64@0.24.2':
989
+
resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
1013
990
engines: {node: '>=18'}
1014
991
cpu: [x64]
1015
992
os: [netbsd]
1016
993
1017
-
'@esbuild/openbsd-arm64@0.25.4':
1018
-
resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
994
+
'@esbuild/openbsd-arm64@0.24.0':
995
+
resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
1019
996
engines: {node: '>=18'}
1020
997
cpu: [arm64]
1021
998
os: [openbsd]
1022
999
1023
-
'@esbuild/openbsd-arm64@0.25.5':
1024
-
resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
1000
+
'@esbuild/openbsd-arm64@0.24.2':
1001
+
resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
1025
1002
engines: {node: '>=18'}
1026
1003
cpu: [arm64]
1027
1004
os: [openbsd]
1028
1005
1029
-
'@esbuild/openbsd-x64@0.25.4':
1030
-
resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
1006
+
'@esbuild/openbsd-x64@0.24.0':
1007
+
resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
1031
1008
engines: {node: '>=18'}
1032
1009
cpu: [x64]
1033
1010
os: [openbsd]
1034
1011
1035
-
'@esbuild/openbsd-x64@0.25.5':
1036
-
resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
1012
+
'@esbuild/openbsd-x64@0.24.2':
1013
+
resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
1037
1014
engines: {node: '>=18'}
1038
1015
cpu: [x64]
1039
1016
os: [openbsd]
1040
1017
1041
-
'@esbuild/sunos-x64@0.25.4':
1042
-
resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
1018
+
'@esbuild/sunos-x64@0.24.0':
1019
+
resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
1043
1020
engines: {node: '>=18'}
1044
1021
cpu: [x64]
1045
1022
os: [sunos]
1046
1023
1047
-
'@esbuild/sunos-x64@0.25.5':
1048
-
resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
1024
+
'@esbuild/sunos-x64@0.24.2':
1025
+
resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
1049
1026
engines: {node: '>=18'}
1050
1027
cpu: [x64]
1051
1028
os: [sunos]
1052
1029
1053
-
'@esbuild/win32-arm64@0.25.4':
1054
-
resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
1030
+
'@esbuild/win32-arm64@0.24.0':
1031
+
resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
1055
1032
engines: {node: '>=18'}
1056
1033
cpu: [arm64]
1057
1034
os: [win32]
1058
1035
1059
-
'@esbuild/win32-arm64@0.25.5':
1060
-
resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
1036
+
'@esbuild/win32-arm64@0.24.2':
1037
+
resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
1061
1038
engines: {node: '>=18'}
1062
1039
cpu: [arm64]
1063
1040
os: [win32]
1064
1041
1065
-
'@esbuild/win32-ia32@0.25.4':
1066
-
resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
1042
+
'@esbuild/win32-ia32@0.24.0':
1043
+
resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
1067
1044
engines: {node: '>=18'}
1068
1045
cpu: [ia32]
1069
1046
os: [win32]
1070
1047
1071
-
'@esbuild/win32-ia32@0.25.5':
1072
-
resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
1048
+
'@esbuild/win32-ia32@0.24.2':
1049
+
resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
1073
1050
engines: {node: '>=18'}
1074
1051
cpu: [ia32]
1075
1052
os: [win32]
1076
1053
1077
-
'@esbuild/win32-x64@0.25.4':
1078
-
resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
1054
+
'@esbuild/win32-x64@0.24.0':
1055
+
resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
1079
1056
engines: {node: '>=18'}
1080
1057
cpu: [x64]
1081
1058
os: [win32]
1082
1059
1083
-
'@esbuild/win32-x64@0.25.5':
1084
-
resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
1060
+
'@esbuild/win32-x64@0.24.2':
1061
+
resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
1085
1062
engines: {node: '>=18'}
1086
1063
cpu: [x64]
1087
1064
os: [win32]
···
1100
1077
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
1101
1078
engines: {node: '>=14'}
1102
1079
1103
-
'@floating-ui/core@1.7.1':
1104
-
resolution: {integrity: sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==}
1080
+
'@floating-ui/core@1.6.9':
1081
+
resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
1105
1082
1106
-
'@floating-ui/dom@1.7.1':
1107
-
resolution: {integrity: sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==}
1083
+
'@floating-ui/dom@1.6.13':
1084
+
resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==}
1108
1085
1109
1086
'@floating-ui/utils@0.2.9':
1110
1087
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
···
1248
1225
'@jsr/mary__async-iterator-fns@0.1.1':
1249
1226
resolution: {integrity: sha512-ef/TDpu6yGTAb4fbGEjSFPO7u49WrxJeXa9T6fvmjlpEfR84qxrjTR6MEUQ1hMySD0+O9yQKvBl/KL5x7K9+iA==, tarball: https://npm.jsr.io/~/11/@jsr/mary__async-iterator-fns/0.1.1.tgz}
1250
1227
1251
-
'@jsr/mary__batch-fetch@0.1.0':
1252
-
resolution: {integrity: sha512-A5SmTfDUMjr+AaJA+wFg4eKKVQm6/51CYTg5ssO+vcnaCJoP1Y0RURG6VkMno9QUholf3AAldfzRgQOXDZbFgg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__batch-fetch/0.1.0.tgz}
1253
-
1254
1228
'@jsr/mary__date-fns@0.1.3':
1255
1229
resolution: {integrity: sha512-kjS04BESEHO9ZTqjOxk4ip8DsAdVDmt/jC5V4zVIYq3VD/04+WJK9kjdQda23eVZMuF9ZZY0zMswU7UXG+PSrg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__date-fns/0.1.3.tgz}
1256
1230
···
1260
1234
'@jsr/mary__exif-rm@0.2.2':
1261
1235
resolution: {integrity: sha512-+ZpLaC+1CyqWhH608Sqd6/yTG0pOlokn2tCXha7s1SMQ+GLKo4Nn/PskTeeP9Pt+6gNYSu6ednoSlRvXb2ZGxg==, tarball: https://npm.jsr.io/~/11/@jsr/mary__exif-rm/0.2.2.tgz}
1262
1236
1263
-
'@kelinci/basa-lexicons@1.0.0':
1264
-
resolution: {integrity: sha512-QND0ktwpGySoHhqRUrLZ3YybyHnOkV6mGCLn75yJWl9PpKIMh/gmAyvXIo1ZuzSHu4v6xcSyi3A78QoH4MhTGw==}
1265
-
1266
1237
'@nodelib/fs.scandir@2.1.5':
1267
1238
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
1268
1239
engines: {node: '>= 8'}
···
1334
1305
peerDependencies:
1335
1306
rollup: ^1.20.0||^2.0.0
1336
1307
1337
-
'@rollup/pluginutils@5.2.0':
1338
-
resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
1308
+
'@rollup/pluginutils@5.1.4':
1309
+
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
1339
1310
engines: {node: '>=14.0.0'}
1340
1311
peerDependencies:
1341
1312
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
···
1343
1314
rollup:
1344
1315
optional: true
1345
1316
1346
-
'@rollup/rollup-android-arm-eabi@4.44.0':
1347
-
resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==}
1317
+
'@rollup/rollup-android-arm-eabi@4.37.0':
1318
+
resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==}
1348
1319
cpu: [arm]
1349
1320
os: [android]
1350
1321
1351
-
'@rollup/rollup-android-arm64@4.44.0':
1352
-
resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==}
1322
+
'@rollup/rollup-android-arm64@4.37.0':
1323
+
resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==}
1353
1324
cpu: [arm64]
1354
1325
os: [android]
1355
1326
1356
-
'@rollup/rollup-darwin-arm64@4.44.0':
1357
-
resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==}
1327
+
'@rollup/rollup-darwin-arm64@4.37.0':
1328
+
resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==}
1358
1329
cpu: [arm64]
1359
1330
os: [darwin]
1360
1331
1361
-
'@rollup/rollup-darwin-x64@4.44.0':
1362
-
resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==}
1332
+
'@rollup/rollup-darwin-x64@4.37.0':
1333
+
resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==}
1363
1334
cpu: [x64]
1364
1335
os: [darwin]
1365
1336
1366
-
'@rollup/rollup-freebsd-arm64@4.44.0':
1367
-
resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==}
1337
+
'@rollup/rollup-freebsd-arm64@4.37.0':
1338
+
resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==}
1368
1339
cpu: [arm64]
1369
1340
os: [freebsd]
1370
1341
1371
-
'@rollup/rollup-freebsd-x64@4.44.0':
1372
-
resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==}
1342
+
'@rollup/rollup-freebsd-x64@4.37.0':
1343
+
resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==}
1373
1344
cpu: [x64]
1374
1345
os: [freebsd]
1375
1346
1376
-
'@rollup/rollup-linux-arm-gnueabihf@4.44.0':
1377
-
resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==}
1347
+
'@rollup/rollup-linux-arm-gnueabihf@4.37.0':
1348
+
resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==}
1378
1349
cpu: [arm]
1379
1350
os: [linux]
1380
1351
1381
-
'@rollup/rollup-linux-arm-musleabihf@4.44.0':
1382
-
resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==}
1352
+
'@rollup/rollup-linux-arm-musleabihf@4.37.0':
1353
+
resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==}
1383
1354
cpu: [arm]
1384
1355
os: [linux]
1385
1356
1386
-
'@rollup/rollup-linux-arm64-gnu@4.44.0':
1387
-
resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==}
1357
+
'@rollup/rollup-linux-arm64-gnu@4.37.0':
1358
+
resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==}
1388
1359
cpu: [arm64]
1389
1360
os: [linux]
1390
1361
1391
-
'@rollup/rollup-linux-arm64-musl@4.44.0':
1392
-
resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==}
1362
+
'@rollup/rollup-linux-arm64-musl@4.37.0':
1363
+
resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==}
1393
1364
cpu: [arm64]
1394
1365
os: [linux]
1395
1366
1396
-
'@rollup/rollup-linux-loongarch64-gnu@4.44.0':
1397
-
resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==}
1367
+
'@rollup/rollup-linux-loongarch64-gnu@4.37.0':
1368
+
resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==}
1398
1369
cpu: [loong64]
1399
1370
os: [linux]
1400
1371
1401
-
'@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
1402
-
resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==}
1372
+
'@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
1373
+
resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==}
1403
1374
cpu: [ppc64]
1404
1375
os: [linux]
1405
1376
1406
-
'@rollup/rollup-linux-riscv64-gnu@4.44.0':
1407
-
resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==}
1377
+
'@rollup/rollup-linux-riscv64-gnu@4.37.0':
1378
+
resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==}
1408
1379
cpu: [riscv64]
1409
1380
os: [linux]
1410
1381
1411
-
'@rollup/rollup-linux-riscv64-musl@4.44.0':
1412
-
resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==}
1382
+
'@rollup/rollup-linux-riscv64-musl@4.37.0':
1383
+
resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==}
1413
1384
cpu: [riscv64]
1414
1385
os: [linux]
1415
1386
1416
-
'@rollup/rollup-linux-s390x-gnu@4.44.0':
1417
-
resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==}
1387
+
'@rollup/rollup-linux-s390x-gnu@4.37.0':
1388
+
resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==}
1418
1389
cpu: [s390x]
1419
1390
os: [linux]
1420
1391
1421
-
'@rollup/rollup-linux-x64-gnu@4.44.0':
1422
-
resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==}
1392
+
'@rollup/rollup-linux-x64-gnu@4.37.0':
1393
+
resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==}
1423
1394
cpu: [x64]
1424
1395
os: [linux]
1425
1396
1426
-
'@rollup/rollup-linux-x64-musl@4.44.0':
1427
-
resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==}
1397
+
'@rollup/rollup-linux-x64-musl@4.37.0':
1398
+
resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==}
1428
1399
cpu: [x64]
1429
1400
os: [linux]
1430
1401
1431
-
'@rollup/rollup-win32-arm64-msvc@4.44.0':
1432
-
resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==}
1402
+
'@rollup/rollup-win32-arm64-msvc@4.37.0':
1403
+
resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==}
1433
1404
cpu: [arm64]
1434
1405
os: [win32]
1435
1406
1436
-
'@rollup/rollup-win32-ia32-msvc@4.44.0':
1437
-
resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==}
1407
+
'@rollup/rollup-win32-ia32-msvc@4.37.0':
1408
+
resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==}
1438
1409
cpu: [ia32]
1439
1410
os: [win32]
1440
1411
1441
-
'@rollup/rollup-win32-x64-msvc@4.44.0':
1442
-
resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==}
1412
+
'@rollup/rollup-win32-x64-msvc@4.37.0':
1413
+
resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==}
1443
1414
cpu: [x64]
1444
1415
os: [win32]
1445
1416
···
1468
1439
'@types/babel__core@7.20.5':
1469
1440
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
1470
1441
1471
-
'@types/babel__generator@7.27.0':
1472
-
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
1442
+
'@types/babel__generator@7.6.8':
1443
+
resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
1473
1444
1474
1445
'@types/babel__template@7.4.4':
1475
1446
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
···
1480
1451
'@types/dom-close-watcher@1.0.0':
1481
1452
resolution: {integrity: sha512-7pL0By56sVVGMSJ3HdSY+u08Id0ljStCaf1VnGFxwfpuNdA0HMz0sl2J24eSi9M6ptl9ySkVK35jF75Fn8trUg==}
1482
1453
1483
-
'@types/dom-webcodecs@0.1.15':
1484
-
resolution: {integrity: sha512-omOlCPvTWyPm4ZE5bZUhlSvnHM2ZWM2U+1cPiYFL/e8aV5O9MouELp+L4dMKNTON0nTeHqEg+KWDfFQMY5Wkaw==}
1454
+
'@types/dom-webcodecs@0.1.14':
1455
+
resolution: {integrity: sha512-ba9aF0qARLLQpLihONIRbj8VvAdUxO+5jIxlscVcDAQTcJmq5qVr781+ino5qbQUJUmO21cLP2eLeXYWzao5Vg==}
1485
1456
1486
1457
'@types/estree@0.0.39':
1487
1458
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
1488
1459
1489
-
'@types/estree@1.0.8':
1490
-
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
1460
+
'@types/estree@1.0.6':
1461
+
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
1462
+
1463
+
'@types/estree@1.0.7':
1464
+
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
1491
1465
1492
1466
'@types/resolve@1.20.2':
1493
1467
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
···
1507
1481
engines: {node: '>=0.4.0'}
1508
1482
hasBin: true
1509
1483
1510
-
acorn@8.15.0:
1511
-
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
1484
+
acorn@8.14.1:
1485
+
resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
1512
1486
engines: {node: '>=0.4.0'}
1513
1487
hasBin: true
1514
1488
···
1558
1532
peerDependencies:
1559
1533
postcss: ^8.1.0
1560
1534
1561
-
babel-plugin-jsx-dom-expressions@0.39.8:
1562
-
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==}
1535
+
babel-plugin-jsx-dom-expressions@0.39.7:
1536
+
resolution: {integrity: sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA==}
1563
1537
peerDependencies:
1564
1538
'@babel/core': ^7.20.12
1565
1539
···
1583
1557
peerDependencies:
1584
1558
'@babel/core': ^7.24.4
1585
1559
1586
-
babel-preset-solid@1.9.6:
1587
-
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==}
1560
+
babel-preset-solid@1.9.5:
1561
+
resolution: {integrity: sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w==}
1588
1562
peerDependencies:
1589
1563
'@babel/core': ^7.0.0
1590
1564
···
1601
1575
blake3-wasm@2.1.5:
1602
1576
resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
1603
1577
1604
-
brace-expansion@1.1.12:
1605
-
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
1578
+
brace-expansion@1.1.11:
1579
+
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1606
1580
1607
-
brace-expansion@2.0.2:
1608
-
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
1581
+
brace-expansion@2.0.1:
1582
+
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1609
1583
1610
1584
braces@3.0.3:
1611
1585
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1612
1586
engines: {node: '>=8'}
1613
1587
1614
-
browserslist@4.25.0:
1615
-
resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
1588
+
browserslist@4.24.4:
1589
+
resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
1616
1590
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1617
1591
hasBin: true
1618
1592
···
1623
1597
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
1624
1598
engines: {node: '>= 6'}
1625
1599
1626
-
caniuse-lite@1.0.30001724:
1627
-
resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==}
1600
+
caniuse-lite@1.0.30001707:
1601
+
resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==}
1628
1602
1629
1603
chalk@4.1.2:
1630
1604
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
···
1668
1642
convert-source-map@2.0.0:
1669
1643
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1670
1644
1671
-
cookie@0.7.2:
1672
-
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
1645
+
cookie@0.5.0:
1646
+
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
1673
1647
engines: {node: '>= 0.6'}
1674
1648
1675
-
core-js-compat@3.43.0:
1676
-
resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
1649
+
core-js-compat@3.41.0:
1650
+
resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==}
1677
1651
1678
1652
cross-spawn@7.0.6:
1679
1653
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
···
1694
1668
data-uri-to-buffer@2.0.2:
1695
1669
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
1696
1670
1697
-
debug@4.4.1:
1698
-
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
1671
+
debug@4.4.0:
1672
+
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
1699
1673
engines: {node: '>=6.0'}
1700
1674
peerDependencies:
1701
1675
supports-color: '*'
···
1710
1684
defu@6.1.4:
1711
1685
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
1712
1686
1713
-
detect-libc@2.0.4:
1714
-
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
1687
+
detect-libc@2.0.3:
1688
+
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
1715
1689
engines: {node: '>=8'}
1716
1690
1717
1691
didyoumean@1.2.2:
···
1728
1702
engines: {node: '>=0.10.0'}
1729
1703
hasBin: true
1730
1704
1731
-
electron-to-chromium@1.5.171:
1732
-
resolution: {integrity: sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==}
1705
+
electron-to-chromium@1.5.128:
1706
+
resolution: {integrity: sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==}
1733
1707
1734
1708
emoji-regex@8.0.0:
1735
1709
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
···
1737
1711
emoji-regex@9.2.2:
1738
1712
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1739
1713
1740
-
entities@6.0.1:
1741
-
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
1714
+
entities@4.5.0:
1715
+
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
1742
1716
engines: {node: '>=0.12'}
1743
1717
1744
-
esbuild@0.25.4:
1745
-
resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
1718
+
esbuild@0.24.0:
1719
+
resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
1746
1720
engines: {node: '>=18'}
1747
1721
hasBin: true
1748
1722
1749
-
esbuild@0.25.5:
1750
-
resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
1723
+
esbuild@0.24.2:
1724
+
resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
1751
1725
engines: {node: '>=18'}
1752
1726
hasBin: true
1753
1727
···
1755
1729
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1756
1730
engines: {node: '>=6'}
1757
1731
1758
-
esm-env@1.2.2:
1759
-
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
1760
-
1761
1732
estree-walker@1.0.1:
1762
1733
resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
1763
1734
···
1772
1743
resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
1773
1744
engines: {node: '>=6'}
1774
1745
1775
-
exsolve@1.0.7:
1776
-
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
1746
+
exsolve@1.0.4:
1747
+
resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
1777
1748
1778
1749
fast-deep-equal@3.1.3:
1779
1750
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
···
1791
1762
fastq@1.19.1:
1792
1763
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
1793
1764
1794
-
fdir@6.4.6:
1795
-
resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
1765
+
fdir@6.4.3:
1766
+
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
1796
1767
peerDependencies:
1797
1768
picomatch: ^3 || ^4
1798
1769
peerDependenciesMeta:
···
1865
1836
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1866
1837
engines: {node: '>=8'}
1867
1838
1868
-
hls.js@1.6.5:
1869
-
resolution: {integrity: sha512-KMn5n7JBK+olC342740hDPHnGWfE8FiHtGMOdJPfUjRdARTWj9OB+8c13fnsf9sk1VtpuU2fKSgUjHvg4rNbzQ==}
1839
+
hls.js@1.6.0:
1840
+
resolution: {integrity: sha512-AlW8ymcDKZuKtzXCUmEy4nOcHRkebnShH6t6hC2+QJQP0WXlTUSSO9Kp22uSEYdCgpwkXEJsfOhqxrgO2tDctQ==}
1870
1841
1871
1842
html-entities@2.3.3:
1872
1843
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
···
1874
1845
idb@7.1.1:
1875
1846
resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
1876
1847
1877
-
idb@8.0.3:
1878
-
resolution: {integrity: sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==}
1848
+
idb@8.0.2:
1849
+
resolution: {integrity: sha512-CX70rYhx7GDDQzwwQMDwF6kDRQi5vVs6khHUumDrMecBylKkwvZ8HWvKV08AGb7VbpoGCWUQ4aHzNDgoUiOIUg==}
1879
1850
1880
1851
inflight@1.0.6:
1881
1852
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
···
2021
1992
engines: {node: '>=10.0.0'}
2022
1993
hasBin: true
2023
1994
2024
-
miniflare@4.20250617.3:
2025
-
resolution: {integrity: sha512-j+LZycT11UdlVeNdaqD0XdNnYnqAL+wXmboz+tNPFgTq6zhD489Ujj3BfSDyEHDCA9UFBLbkc5ByGWBh+pYZ5Q==}
1995
+
miniflare@4.20250321.1:
1996
+
resolution: {integrity: sha512-pQuVtF6vQ1zMvPCo3Z19mzSFjgnlEnybzNzAJZipsqIk6kMXpYBZq+d8cWmeQFkBYlgeZKeKJ4EBKT6KapfTNg==}
2026
1997
engines: {node: '>=18.0.0'}
2027
1998
hasBin: true
2028
1999
···
2089
2060
package-json-from-dist@1.0.1:
2090
2061
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
2091
2062
2092
-
parse5@7.3.0:
2093
-
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
2063
+
parse5@7.2.1:
2064
+
resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
2094
2065
2095
2066
path-is-absolute@1.0.1:
2096
2067
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
···
2169
2140
postcss-value-parser@4.2.0:
2170
2141
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
2171
2142
2172
-
postcss@8.5.6:
2173
-
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
2143
+
postcss@8.5.3:
2144
+
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
2174
2145
engines: {node: ^10 || ^12 || >=14}
2175
2146
2176
-
prettier-plugin-tailwindcss@0.6.13:
2177
-
resolution: {integrity: sha512-uQ0asli1+ic8xrrSmIOaElDu0FacR4x69GynTh2oZjFY10JUt6EEumTQl5tB4fMeD6I1naKd+4rXQQ7esT2i1g==}
2147
+
prettier-plugin-tailwindcss@0.6.11:
2148
+
resolution: {integrity: sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==}
2178
2149
engines: {node: '>=14.21.3'}
2179
2150
peerDependencies:
2180
2151
'@ianvs/prettier-plugin-sort-imports': '*'
···
2228
2199
prettier-plugin-svelte:
2229
2200
optional: true
2230
2201
2231
-
prettier@3.6.0:
2232
-
resolution: {integrity: sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==}
2202
+
prettier@3.5.3:
2203
+
resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
2233
2204
engines: {node: '>=14'}
2234
2205
hasBin: true
2235
2206
···
2271
2242
regenerate@1.4.2:
2272
2243
resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
2273
2244
2245
+
regenerator-runtime@0.14.1:
2246
+
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
2247
+
2248
+
regenerator-transform@0.15.2:
2249
+
resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
2250
+
2274
2251
regexpu-core@6.2.0:
2275
2252
resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==}
2276
2253
engines: {node: '>=4'}
···
2300
2277
engines: {node: '>=10.0.0'}
2301
2278
hasBin: true
2302
2279
2303
-
rollup@4.44.0:
2304
-
resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==}
2280
+
rollup@4.37.0:
2281
+
resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==}
2305
2282
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
2306
2283
hasBin: true
2307
2284
···
2312
2289
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
2313
2290
hasBin: true
2314
2291
2315
-
semver@7.7.2:
2316
-
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
2292
+
semver@7.7.1:
2293
+
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
2317
2294
engines: {node: '>=10'}
2318
2295
hasBin: true
2319
2296
2320
2297
serialize-javascript@6.0.2:
2321
2298
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
2322
2299
2323
-
seroval-plugins@1.3.2:
2324
-
resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==}
2300
+
seroval-plugins@1.2.1:
2301
+
resolution: {integrity: sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==}
2325
2302
engines: {node: '>=10'}
2326
2303
peerDependencies:
2327
2304
seroval: ^1.0
2328
2305
2329
-
seroval@1.3.2:
2330
-
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
2306
+
seroval@1.2.1:
2307
+
resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==}
2331
2308
engines: {node: '>=10'}
2332
2309
2333
2310
sharp@0.33.5:
···
2359
2336
'@floating-ui/dom': ^1.0
2360
2337
solid-js: ^1.3
2361
2338
2362
-
solid-js@1.9.7:
2363
-
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==}
2339
+
solid-js@1.9.5:
2340
+
resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==}
2364
2341
2365
2342
solid-refresh@0.6.3:
2366
2343
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
2443
2420
resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
2444
2421
engines: {node: '>=10'}
2445
2422
2446
-
terser@5.43.1:
2447
-
resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==}
2423
+
terser@5.39.0:
2424
+
resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
2448
2425
engines: {node: '>=10'}
2449
2426
hasBin: true
2450
2427
···
2455
2432
thenify@3.3.1:
2456
2433
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
2457
2434
2458
-
tinyglobby@0.2.14:
2459
-
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
2435
+
tinyglobby@0.2.12:
2436
+
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
2460
2437
engines: {node: '>=12.0.0'}
2461
2438
2462
2439
to-regex-range@5.0.1:
···
2476
2453
resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
2477
2454
engines: {node: '>=10'}
2478
2455
2479
-
typescript@5.8.3:
2480
-
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
2456
+
typescript@5.7.2:
2457
+
resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
2481
2458
engines: {node: '>=14.17'}
2482
2459
hasBin: true
2483
2460
2484
-
ufo@1.6.1:
2485
-
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
2461
+
ufo@1.5.4:
2462
+
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
2486
2463
2487
2464
undici@5.29.0:
2488
2465
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
2489
2466
engines: {node: '>=14.0'}
2490
2467
2491
-
unenv@2.0.0-rc.17:
2492
-
resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==}
2468
+
unenv@2.0.0-rc.15:
2469
+
resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==}
2493
2470
2494
2471
unicode-canonical-property-names-ecmascript@2.0.1:
2495
2472
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
···
2528
2505
util-deprecate@1.0.2:
2529
2506
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2530
2507
2531
-
validate-html-nesting@1.2.3:
2532
-
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
2508
+
validate-html-nesting@1.2.2:
2509
+
resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
2533
2510
2534
2511
vite-plugin-pwa@0.21.0:
2535
2512
resolution: {integrity: sha512-gnDE5sN2hdxA4vTl0pe6PCTPXqChk175jH8dZVVTBjFhWarZZoXaAdoTIKCIa8Zbx94sC0CnCOyERBWpxvry+g==}
···
2551
2528
'@testing-library/jest-dom':
2552
2529
optional: true
2553
2530
2554
-
vite@6.3.5:
2555
-
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
2531
+
vite@6.0.5:
2532
+
resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==}
2556
2533
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
2557
2534
hasBin: true
2558
2535
peerDependencies:
···
2591
2568
yaml:
2592
2569
optional: true
2593
2570
2594
-
vitefu@1.0.7:
2595
-
resolution: {integrity: sha512-eRWXLBbJjW3X5z5P5IHcSm2yYbYRPb2kQuc+oqsbAl99WB5kVsPbiiox+cymo8twTzifA6itvhr2CmjnaZZp0Q==}
2571
+
vitefu@1.0.6:
2572
+
resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==}
2596
2573
peerDependencies:
2597
-
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
2574
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
2598
2575
peerDependenciesMeta:
2599
2576
vite:
2600
2577
optional: true
···
2602
2579
webidl-conversions@4.0.2:
2603
2580
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
2604
2581
2605
-
webm-muxer@5.1.3:
2606
-
resolution: {integrity: sha512-zHLsTCXJ1m+sSVt2xefsmGuGz/mHcGtKzjL7Tekx2HaodpjT4xYyZnm+DrECv5D7EPt8p+XV74MUy41Ley1mdg==}
2582
+
webm-muxer@5.1.1:
2583
+
resolution: {integrity: sha512-oqGiFrwVr0LoVEIgSIISV+CURkPje1K2WiTzH+FUT4A70PcZHSPkwihBxwr+jumr76sQmhMHo9mvP82AuNiCiA==}
2607
2584
2608
2585
whatwg-url@7.1.0:
2609
2586
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
···
2662
2639
workbox-window@7.3.0:
2663
2640
resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==}
2664
2641
2665
-
workerd@1.20250617.0:
2666
-
resolution: {integrity: sha512-Uv6p0PYUHp/W/aWfUPLkZVAoAjapisM27JJlwcX9wCPTfCfnuegGOxFMvvlYpmNaX4YCwEdLCwuNn3xkpSkuZw==}
2642
+
workerd@1.20250321.0:
2643
+
resolution: {integrity: sha512-vyuz9pdJ+7o1lC79vQ2UVRLXPARa2Lq94PbTfqEcYQeSxeR9X+YqhNq2yysv8Zs5vpokmexLCtMniPp9u+2LVQ==}
2667
2644
engines: {node: '>=16'}
2668
2645
hasBin: true
2669
2646
2670
-
wrangler@4.20.5:
2671
-
resolution: {integrity: sha512-tmiyt2vBHszhdzJEDbCpFLU2RiV7/QzvGMV07Zaz4ptqiU2h/lTojyNJAugPpSFNiOuY+k0g3ENNTDQqoUkMFA==}
2647
+
wrangler@4.6.0:
2648
+
resolution: {integrity: sha512-2a2ZD0adlvxQ1H+nRKkuuD0dkgaYTOPlC7gBolItk5TfqOSliEV4m6DtZtKtJp33ioM+Uy6TlEWPpA2TrDveEQ==}
2672
2649
engines: {node: '>=18.0.0'}
2673
2650
hasBin: true
2674
2651
peerDependencies:
2675
-
'@cloudflare/workers-types': ^4.20250617.0
2652
+
'@cloudflare/workers-types': ^4.20250321.0
2676
2653
peerDependenciesMeta:
2677
2654
'@cloudflare/workers-types':
2678
2655
optional: true
···
2703
2680
yallist@3.1.1:
2704
2681
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2705
2682
2706
-
yaml@2.8.0:
2707
-
resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
2708
-
engines: {node: '>= 14.6'}
2683
+
yaml@2.7.0:
2684
+
resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
2685
+
engines: {node: '>= 14'}
2709
2686
hasBin: true
2710
2687
2711
-
youch@3.3.4:
2712
-
resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==}
2688
+
youch@3.2.3:
2689
+
resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==}
2713
2690
2714
2691
zod@3.22.3:
2715
2692
resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==}
···
2730
2707
jsonpointer: 5.0.1
2731
2708
leven: 3.1.0
2732
2709
2733
-
'@atcute/atproto@3.1.0':
2710
+
'@atcute/bluemoji@1.0.4(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)':
2734
2711
dependencies:
2735
-
'@atcute/lexicons': 1.1.0
2736
-
2737
-
'@atcute/bluemoji@3.1.0':
2738
-
dependencies:
2739
-
'@atcute/atproto': 3.1.0
2740
-
'@atcute/bluesky': 3.1.3
2741
-
'@atcute/lexicons': 1.1.0
2712
+
'@atcute/bluesky': 1.0.15(@atcute/client@2.0.9)
2713
+
'@atcute/client': 2.0.9
2742
2714
2743
2715
'@atcute/bluesky-richtext-parser@1.0.7': {}
2744
2716
2745
-
'@atcute/bluesky-richtext-segmenter@2.0.3':
2717
+
'@atcute/bluesky-richtext-segmenter@1.0.5(@atcute/bluesky@1.0.15(@atcute/client@2.0.9))(@atcute/client@2.0.9)':
2746
2718
dependencies:
2747
-
'@atcute/bluesky': 3.1.3
2748
-
'@atcute/lexicons': 1.1.0
2719
+
'@atcute/bluesky': 1.0.15(@atcute/client@2.0.9)
2720
+
'@atcute/client': 2.0.9
2749
2721
2750
2722
'@atcute/bluesky-search-parser@0.1.0': {}
2751
2723
2752
-
'@atcute/bluesky@3.1.3':
2724
+
'@atcute/bluesky@1.0.15(@atcute/client@2.0.9)':
2753
2725
dependencies:
2754
-
'@atcute/atproto': 3.1.0
2755
-
'@atcute/lexicons': 1.1.0
2726
+
'@atcute/client': 2.0.9
2756
2727
2757
-
'@atcute/cbor@2.2.4':
2728
+
'@atcute/cbor@2.2.0':
2758
2729
dependencies:
2759
-
'@atcute/cid': 2.2.3
2760
-
'@atcute/multibase': 1.1.4
2761
-
'@atcute/uint8array': 1.0.3
2730
+
'@atcute/cid': 2.2.0
2731
+
'@atcute/multibase': 1.1.2
2732
+
'@atcute/uint8array': 1.0.1
2762
2733
2763
-
'@atcute/cid@2.2.3':
2734
+
'@atcute/cid@2.2.0':
2764
2735
dependencies:
2765
-
'@atcute/multibase': 1.1.4
2766
-
'@atcute/uint8array': 1.0.3
2736
+
'@atcute/multibase': 1.1.2
2737
+
'@atcute/uint8array': 1.0.1
2767
2738
2768
-
'@atcute/client@4.0.3':
2769
-
dependencies:
2770
-
'@atcute/identity': 1.0.3
2771
-
'@atcute/lexicons': 1.1.0
2739
+
'@atcute/client@2.0.9': {}
2772
2740
2773
-
'@atcute/identity@1.0.3':
2774
-
dependencies:
2775
-
'@atcute/lexicons': 1.1.0
2776
-
'@badrap/valita': 0.4.5
2777
-
2778
-
'@atcute/lexicons@1.1.0':
2779
-
dependencies:
2780
-
esm-env: 1.2.2
2781
-
2782
-
'@atcute/multibase@1.1.4':
2741
+
'@atcute/multibase@1.1.2':
2783
2742
dependencies:
2784
-
'@atcute/uint8array': 1.0.3
2743
+
'@atcute/uint8array': 1.0.1
2785
2744
2786
-
'@atcute/oauth-browser-client@1.0.26':
2745
+
'@atcute/oauth-browser-client@1.0.16':
2787
2746
dependencies:
2788
-
'@atcute/client': 4.0.3
2789
-
'@atcute/identity': 1.0.3
2790
-
'@atcute/lexicons': 1.1.0
2791
-
'@atcute/multibase': 1.1.4
2792
-
'@atcute/uint8array': 1.0.3
2793
-
nanoid: 5.1.5
2747
+
'@atcute/client': 2.0.9
2748
+
'@atcute/multibase': 1.1.2
2749
+
'@atcute/uint8array': 1.0.1
2794
2750
2795
2751
'@atcute/tid@1.0.2': {}
2796
2752
2797
-
'@atcute/uint8array@1.0.3': {}
2753
+
'@atcute/uint8array@1.0.1': {}
2798
2754
2799
2755
'@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3':
2800
2756
dependencies:
2801
-
'@atlaskit/pragmatic-drag-and-drop': 1.6.0
2802
-
'@babel/runtime': 7.27.6
2757
+
'@atlaskit/pragmatic-drag-and-drop': 1.5.2
2758
+
'@babel/runtime': 7.27.0
2803
2759
2804
-
'@atlaskit/pragmatic-drag-and-drop@1.6.0':
2760
+
'@atlaskit/pragmatic-drag-and-drop@1.5.2':
2805
2761
dependencies:
2806
-
'@babel/runtime': 7.27.6
2762
+
'@babel/runtime': 7.27.0
2807
2763
bind-event-listener: 3.0.0
2808
2764
raf-schd: 4.0.3
2809
2765
2810
-
'@babel/code-frame@7.27.1':
2766
+
'@babel/code-frame@7.26.2':
2811
2767
dependencies:
2812
-
'@babel/helper-validator-identifier': 7.27.1
2768
+
'@babel/helper-validator-identifier': 7.25.9
2813
2769
js-tokens: 4.0.0
2814
2770
picocolors: 1.1.1
2815
2771
2816
-
'@babel/compat-data@7.27.5': {}
2772
+
'@babel/compat-data@7.26.8': {}
2817
2773
2818
-
'@babel/core@7.27.4':
2774
+
'@babel/core@7.26.10':
2819
2775
dependencies:
2820
2776
'@ampproject/remapping': 2.3.0
2821
-
'@babel/code-frame': 7.27.1
2822
-
'@babel/generator': 7.27.5
2823
-
'@babel/helper-compilation-targets': 7.27.2
2824
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
2825
-
'@babel/helpers': 7.27.6
2826
-
'@babel/parser': 7.27.5
2827
-
'@babel/template': 7.27.2
2828
-
'@babel/traverse': 7.27.4
2829
-
'@babel/types': 7.27.6
2777
+
'@babel/code-frame': 7.26.2
2778
+
'@babel/generator': 7.27.0
2779
+
'@babel/helper-compilation-targets': 7.27.0
2780
+
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
2781
+
'@babel/helpers': 7.27.0
2782
+
'@babel/parser': 7.27.0
2783
+
'@babel/template': 7.27.0
2784
+
'@babel/traverse': 7.27.0
2785
+
'@babel/types': 7.27.0
2830
2786
convert-source-map: 2.0.0
2831
-
debug: 4.4.1
2787
+
debug: 4.4.0
2832
2788
gensync: 1.0.0-beta.2
2833
2789
json5: 2.2.3
2834
2790
semver: 6.3.1
2835
2791
transitivePeerDependencies:
2836
2792
- supports-color
2837
2793
2838
-
'@babel/generator@7.27.5':
2794
+
'@babel/generator@7.27.0':
2839
2795
dependencies:
2840
-
'@babel/parser': 7.27.5
2841
-
'@babel/types': 7.27.6
2796
+
'@babel/parser': 7.27.0
2797
+
'@babel/types': 7.27.0
2842
2798
'@jridgewell/gen-mapping': 0.3.8
2843
2799
'@jridgewell/trace-mapping': 0.3.25
2844
2800
jsesc: 3.1.0
2845
2801
2846
-
'@babel/helper-annotate-as-pure@7.27.3':
2802
+
'@babel/helper-annotate-as-pure@7.25.9':
2847
2803
dependencies:
2848
-
'@babel/types': 7.27.6
2804
+
'@babel/types': 7.27.0
2849
2805
2850
-
'@babel/helper-compilation-targets@7.27.2':
2806
+
'@babel/helper-compilation-targets@7.27.0':
2851
2807
dependencies:
2852
-
'@babel/compat-data': 7.27.5
2853
-
'@babel/helper-validator-option': 7.27.1
2854
-
browserslist: 4.25.0
2808
+
'@babel/compat-data': 7.26.8
2809
+
'@babel/helper-validator-option': 7.25.9
2810
+
browserslist: 4.24.4
2855
2811
lru-cache: 5.1.1
2856
2812
semver: 6.3.1
2857
2813
2858
-
'@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)':
2814
+
'@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)':
2859
2815
dependencies:
2860
-
'@babel/core': 7.27.4
2861
-
'@babel/helper-annotate-as-pure': 7.27.3
2862
-
'@babel/helper-member-expression-to-functions': 7.27.1
2863
-
'@babel/helper-optimise-call-expression': 7.27.1
2864
-
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)
2865
-
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
2866
-
'@babel/traverse': 7.27.4
2816
+
'@babel/core': 7.26.10
2817
+
'@babel/helper-annotate-as-pure': 7.25.9
2818
+
'@babel/helper-member-expression-to-functions': 7.25.9
2819
+
'@babel/helper-optimise-call-expression': 7.25.9
2820
+
'@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
2821
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2822
+
'@babel/traverse': 7.27.0
2867
2823
semver: 6.3.1
2868
2824
transitivePeerDependencies:
2869
2825
- supports-color
2870
2826
2871
-
'@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)':
2827
+
'@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)':
2872
2828
dependencies:
2873
-
'@babel/core': 7.27.4
2874
-
'@babel/helper-annotate-as-pure': 7.27.3
2829
+
'@babel/core': 7.26.10
2830
+
'@babel/helper-annotate-as-pure': 7.25.9
2875
2831
regexpu-core: 6.2.0
2876
2832
semver: 6.3.1
2877
2833
2878
-
'@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.4)':
2834
+
'@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)':
2879
2835
dependencies:
2880
-
'@babel/core': 7.27.4
2881
-
'@babel/helper-compilation-targets': 7.27.2
2882
-
'@babel/helper-plugin-utils': 7.27.1
2883
-
debug: 4.4.1
2836
+
'@babel/core': 7.26.10
2837
+
'@babel/helper-compilation-targets': 7.27.0
2838
+
'@babel/helper-plugin-utils': 7.26.5
2839
+
debug: 4.4.0
2884
2840
lodash.debounce: 4.0.8
2885
2841
resolve: 1.22.10
2886
2842
transitivePeerDependencies:
2887
2843
- supports-color
2888
2844
2889
-
'@babel/helper-member-expression-to-functions@7.27.1':
2845
+
'@babel/helper-member-expression-to-functions@7.25.9':
2890
2846
dependencies:
2891
-
'@babel/traverse': 7.27.4
2892
-
'@babel/types': 7.27.6
2847
+
'@babel/traverse': 7.27.0
2848
+
'@babel/types': 7.27.0
2893
2849
transitivePeerDependencies:
2894
2850
- supports-color
2895
2851
2896
2852
'@babel/helper-module-imports@7.18.6':
2897
2853
dependencies:
2898
-
'@babel/types': 7.27.6
2854
+
'@babel/types': 7.27.0
2899
2855
2900
-
'@babel/helper-module-imports@7.27.1':
2856
+
'@babel/helper-module-imports@7.25.9':
2901
2857
dependencies:
2902
-
'@babel/traverse': 7.27.4
2903
-
'@babel/types': 7.27.6
2858
+
'@babel/traverse': 7.27.0
2859
+
'@babel/types': 7.27.0
2904
2860
transitivePeerDependencies:
2905
2861
- supports-color
2906
2862
2907
-
'@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)':
2863
+
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
2908
2864
dependencies:
2909
-
'@babel/core': 7.27.4
2910
-
'@babel/helper-module-imports': 7.27.1
2911
-
'@babel/helper-validator-identifier': 7.27.1
2912
-
'@babel/traverse': 7.27.4
2865
+
'@babel/core': 7.26.10
2866
+
'@babel/helper-module-imports': 7.25.9
2867
+
'@babel/helper-validator-identifier': 7.25.9
2868
+
'@babel/traverse': 7.27.0
2913
2869
transitivePeerDependencies:
2914
2870
- supports-color
2915
2871
2916
-
'@babel/helper-optimise-call-expression@7.27.1':
2872
+
'@babel/helper-optimise-call-expression@7.25.9':
2917
2873
dependencies:
2918
-
'@babel/types': 7.27.6
2874
+
'@babel/types': 7.27.0
2919
2875
2920
-
'@babel/helper-plugin-utils@7.27.1': {}
2876
+
'@babel/helper-plugin-utils@7.26.5': {}
2921
2877
2922
-
'@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)':
2878
+
'@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)':
2923
2879
dependencies:
2924
-
'@babel/core': 7.27.4
2925
-
'@babel/helper-annotate-as-pure': 7.27.3
2926
-
'@babel/helper-wrap-function': 7.27.1
2927
-
'@babel/traverse': 7.27.4
2880
+
'@babel/core': 7.26.10
2881
+
'@babel/helper-annotate-as-pure': 7.25.9
2882
+
'@babel/helper-wrap-function': 7.25.9
2883
+
'@babel/traverse': 7.27.0
2928
2884
transitivePeerDependencies:
2929
2885
- supports-color
2930
2886
2931
-
'@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)':
2887
+
'@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)':
2932
2888
dependencies:
2933
-
'@babel/core': 7.27.4
2934
-
'@babel/helper-member-expression-to-functions': 7.27.1
2935
-
'@babel/helper-optimise-call-expression': 7.27.1
2936
-
'@babel/traverse': 7.27.4
2889
+
'@babel/core': 7.26.10
2890
+
'@babel/helper-member-expression-to-functions': 7.25.9
2891
+
'@babel/helper-optimise-call-expression': 7.25.9
2892
+
'@babel/traverse': 7.27.0
2937
2893
transitivePeerDependencies:
2938
2894
- supports-color
2939
2895
2940
-
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
2896
+
'@babel/helper-skip-transparent-expression-wrappers@7.25.9':
2941
2897
dependencies:
2942
-
'@babel/traverse': 7.27.4
2943
-
'@babel/types': 7.27.6
2898
+
'@babel/traverse': 7.27.0
2899
+
'@babel/types': 7.27.0
2944
2900
transitivePeerDependencies:
2945
2901
- supports-color
2946
2902
2947
-
'@babel/helper-string-parser@7.27.1': {}
2903
+
'@babel/helper-string-parser@7.25.9': {}
2948
2904
2949
-
'@babel/helper-validator-identifier@7.27.1': {}
2905
+
'@babel/helper-validator-identifier@7.25.9': {}
2950
2906
2951
-
'@babel/helper-validator-option@7.27.1': {}
2907
+
'@babel/helper-validator-option@7.25.9': {}
2952
2908
2953
-
'@babel/helper-wrap-function@7.27.1':
2909
+
'@babel/helper-wrap-function@7.25.9':
2954
2910
dependencies:
2955
-
'@babel/template': 7.27.2
2956
-
'@babel/traverse': 7.27.4
2957
-
'@babel/types': 7.27.6
2911
+
'@babel/template': 7.27.0
2912
+
'@babel/traverse': 7.27.0
2913
+
'@babel/types': 7.27.0
2958
2914
transitivePeerDependencies:
2959
2915
- supports-color
2960
2916
2961
-
'@babel/helpers@7.27.6':
2917
+
'@babel/helpers@7.27.0':
2962
2918
dependencies:
2963
-
'@babel/template': 7.27.2
2964
-
'@babel/types': 7.27.6
2919
+
'@babel/template': 7.27.0
2920
+
'@babel/types': 7.27.0
2965
2921
2966
-
'@babel/parser@7.27.5':
2922
+
'@babel/parser@7.27.0':
2967
2923
dependencies:
2968
-
'@babel/types': 7.27.6
2924
+
'@babel/types': 7.27.0
2969
2925
2970
-
'@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)':
2926
+
'@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)':
2971
2927
dependencies:
2972
-
'@babel/core': 7.27.4
2973
-
'@babel/helper-plugin-utils': 7.27.1
2974
-
'@babel/traverse': 7.27.4
2928
+
'@babel/core': 7.26.10
2929
+
'@babel/helper-plugin-utils': 7.26.5
2930
+
'@babel/traverse': 7.27.0
2975
2931
transitivePeerDependencies:
2976
2932
- supports-color
2977
2933
2978
-
'@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)':
2934
+
'@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)':
2979
2935
dependencies:
2980
-
'@babel/core': 7.27.4
2981
-
'@babel/helper-plugin-utils': 7.27.1
2936
+
'@babel/core': 7.26.10
2937
+
'@babel/helper-plugin-utils': 7.26.5
2982
2938
2983
-
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)':
2939
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)':
2984
2940
dependencies:
2985
-
'@babel/core': 7.27.4
2986
-
'@babel/helper-plugin-utils': 7.27.1
2941
+
'@babel/core': 7.26.10
2942
+
'@babel/helper-plugin-utils': 7.26.5
2987
2943
2988
-
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)':
2944
+
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)':
2989
2945
dependencies:
2990
-
'@babel/core': 7.27.4
2991
-
'@babel/helper-plugin-utils': 7.27.1
2992
-
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
2993
-
'@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4)
2946
+
'@babel/core': 7.26.10
2947
+
'@babel/helper-plugin-utils': 7.26.5
2948
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2949
+
'@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10)
2994
2950
transitivePeerDependencies:
2995
2951
- supports-color
2996
2952
2997
-
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)':
2953
+
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)':
2998
2954
dependencies:
2999
-
'@babel/core': 7.27.4
3000
-
'@babel/helper-plugin-utils': 7.27.1
3001
-
'@babel/traverse': 7.27.4
2955
+
'@babel/core': 7.26.10
2956
+
'@babel/helper-plugin-utils': 7.26.5
2957
+
'@babel/traverse': 7.27.0
3002
2958
transitivePeerDependencies:
3003
2959
- supports-color
3004
2960
3005
-
'@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)':
2961
+
'@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)':
3006
2962
dependencies:
3007
-
'@babel/core': 7.27.4
2963
+
'@babel/core': 7.26.10
3008
2964
3009
-
'@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)':
2965
+
'@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)':
3010
2966
dependencies:
3011
-
'@babel/core': 7.27.4
3012
-
'@babel/helper-plugin-utils': 7.27.1
2967
+
'@babel/core': 7.26.10
2968
+
'@babel/helper-plugin-utils': 7.26.5
3013
2969
3014
-
'@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)':
2970
+
'@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)':
3015
2971
dependencies:
3016
-
'@babel/core': 7.27.4
3017
-
'@babel/helper-plugin-utils': 7.27.1
2972
+
'@babel/core': 7.26.10
2973
+
'@babel/helper-plugin-utils': 7.26.5
3018
2974
3019
-
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)':
2975
+
'@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)':
3020
2976
dependencies:
3021
-
'@babel/core': 7.27.4
3022
-
'@babel/helper-plugin-utils': 7.27.1
2977
+
'@babel/core': 7.26.10
2978
+
'@babel/helper-plugin-utils': 7.26.5
3023
2979
3024
-
'@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)':
2980
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)':
3025
2981
dependencies:
3026
-
'@babel/core': 7.27.4
3027
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3028
-
'@babel/helper-plugin-utils': 7.27.1
2982
+
'@babel/core': 7.26.10
2983
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
2984
+
'@babel/helper-plugin-utils': 7.26.5
3029
2985
3030
-
'@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)':
2986
+
'@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)':
3031
2987
dependencies:
3032
-
'@babel/core': 7.27.4
3033
-
'@babel/helper-plugin-utils': 7.27.1
2988
+
'@babel/core': 7.26.10
2989
+
'@babel/helper-plugin-utils': 7.26.5
3034
2990
3035
-
'@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)':
2991
+
'@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)':
3036
2992
dependencies:
3037
-
'@babel/core': 7.27.4
3038
-
'@babel/helper-plugin-utils': 7.27.1
3039
-
'@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4)
3040
-
'@babel/traverse': 7.27.4
2993
+
'@babel/core': 7.26.10
2994
+
'@babel/helper-plugin-utils': 7.26.5
2995
+
'@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10)
2996
+
'@babel/traverse': 7.27.0
3041
2997
transitivePeerDependencies:
3042
2998
- supports-color
3043
2999
3044
-
'@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)':
3000
+
'@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)':
3045
3001
dependencies:
3046
-
'@babel/core': 7.27.4
3047
-
'@babel/helper-module-imports': 7.27.1
3048
-
'@babel/helper-plugin-utils': 7.27.1
3049
-
'@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4)
3002
+
'@babel/core': 7.26.10
3003
+
'@babel/helper-module-imports': 7.25.9
3004
+
'@babel/helper-plugin-utils': 7.26.5
3005
+
'@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10)
3050
3006
transitivePeerDependencies:
3051
3007
- supports-color
3052
3008
3053
-
'@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)':
3009
+
'@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)':
3054
3010
dependencies:
3055
-
'@babel/core': 7.27.4
3056
-
'@babel/helper-plugin-utils': 7.27.1
3011
+
'@babel/core': 7.26.10
3012
+
'@babel/helper-plugin-utils': 7.26.5
3057
3013
3058
-
'@babel/plugin-transform-block-scoping@7.27.5(@babel/core@7.27.4)':
3014
+
'@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)':
3059
3015
dependencies:
3060
-
'@babel/core': 7.27.4
3061
-
'@babel/helper-plugin-utils': 7.27.1
3016
+
'@babel/core': 7.26.10
3017
+
'@babel/helper-plugin-utils': 7.26.5
3062
3018
3063
-
'@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)':
3019
+
'@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)':
3064
3020
dependencies:
3065
-
'@babel/core': 7.27.4
3066
-
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
3067
-
'@babel/helper-plugin-utils': 7.27.1
3021
+
'@babel/core': 7.26.10
3022
+
'@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
3023
+
'@babel/helper-plugin-utils': 7.26.5
3068
3024
transitivePeerDependencies:
3069
3025
- supports-color
3070
3026
3071
-
'@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)':
3027
+
'@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)':
3072
3028
dependencies:
3073
-
'@babel/core': 7.27.4
3074
-
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
3075
-
'@babel/helper-plugin-utils': 7.27.1
3029
+
'@babel/core': 7.26.10
3030
+
'@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
3031
+
'@babel/helper-plugin-utils': 7.26.5
3076
3032
transitivePeerDependencies:
3077
3033
- supports-color
3078
3034
3079
-
'@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)':
3035
+
'@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)':
3080
3036
dependencies:
3081
-
'@babel/core': 7.27.4
3082
-
'@babel/helper-annotate-as-pure': 7.27.3
3083
-
'@babel/helper-compilation-targets': 7.27.2
3084
-
'@babel/helper-plugin-utils': 7.27.1
3085
-
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)
3086
-
'@babel/traverse': 7.27.4
3037
+
'@babel/core': 7.26.10
3038
+
'@babel/helper-annotate-as-pure': 7.25.9
3039
+
'@babel/helper-compilation-targets': 7.27.0
3040
+
'@babel/helper-plugin-utils': 7.26.5
3041
+
'@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
3042
+
'@babel/traverse': 7.27.0
3087
3043
globals: 11.12.0
3088
3044
transitivePeerDependencies:
3089
3045
- supports-color
3090
3046
3091
-
'@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)':
3047
+
'@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)':
3092
3048
dependencies:
3093
-
'@babel/core': 7.27.4
3094
-
'@babel/helper-plugin-utils': 7.27.1
3095
-
'@babel/template': 7.27.2
3049
+
'@babel/core': 7.26.10
3050
+
'@babel/helper-plugin-utils': 7.26.5
3051
+
'@babel/template': 7.27.0
3096
3052
3097
-
'@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.4)':
3053
+
'@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)':
3098
3054
dependencies:
3099
-
'@babel/core': 7.27.4
3100
-
'@babel/helper-plugin-utils': 7.27.1
3055
+
'@babel/core': 7.26.10
3056
+
'@babel/helper-plugin-utils': 7.26.5
3101
3057
3102
-
'@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)':
3058
+
'@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)':
3103
3059
dependencies:
3104
-
'@babel/core': 7.27.4
3105
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3106
-
'@babel/helper-plugin-utils': 7.27.1
3060
+
'@babel/core': 7.26.10
3061
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3062
+
'@babel/helper-plugin-utils': 7.26.5
3107
3063
3108
-
'@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)':
3064
+
'@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)':
3109
3065
dependencies:
3110
-
'@babel/core': 7.27.4
3111
-
'@babel/helper-plugin-utils': 7.27.1
3066
+
'@babel/core': 7.26.10
3067
+
'@babel/helper-plugin-utils': 7.26.5
3112
3068
3113
-
'@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)':
3069
+
'@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)':
3114
3070
dependencies:
3115
-
'@babel/core': 7.27.4
3116
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3117
-
'@babel/helper-plugin-utils': 7.27.1
3071
+
'@babel/core': 7.26.10
3072
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3073
+
'@babel/helper-plugin-utils': 7.26.5
3118
3074
3119
-
'@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)':
3075
+
'@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)':
3120
3076
dependencies:
3121
-
'@babel/core': 7.27.4
3122
-
'@babel/helper-plugin-utils': 7.27.1
3077
+
'@babel/core': 7.26.10
3078
+
'@babel/helper-plugin-utils': 7.26.5
3123
3079
3124
-
'@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)':
3080
+
'@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)':
3125
3081
dependencies:
3126
-
'@babel/core': 7.27.4
3127
-
'@babel/helper-plugin-utils': 7.27.1
3082
+
'@babel/core': 7.26.10
3083
+
'@babel/helper-plugin-utils': 7.26.5
3128
3084
3129
-
'@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)':
3085
+
'@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)':
3130
3086
dependencies:
3131
-
'@babel/core': 7.27.4
3132
-
'@babel/helper-plugin-utils': 7.27.1
3087
+
'@babel/core': 7.26.10
3088
+
'@babel/helper-plugin-utils': 7.26.5
3133
3089
3134
-
'@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)':
3090
+
'@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)':
3135
3091
dependencies:
3136
-
'@babel/core': 7.27.4
3137
-
'@babel/helper-plugin-utils': 7.27.1
3138
-
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
3092
+
'@babel/core': 7.26.10
3093
+
'@babel/helper-plugin-utils': 7.26.5
3094
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
3139
3095
transitivePeerDependencies:
3140
3096
- supports-color
3141
3097
3142
-
'@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)':
3098
+
'@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)':
3143
3099
dependencies:
3144
-
'@babel/core': 7.27.4
3145
-
'@babel/helper-compilation-targets': 7.27.2
3146
-
'@babel/helper-plugin-utils': 7.27.1
3147
-
'@babel/traverse': 7.27.4
3100
+
'@babel/core': 7.26.10
3101
+
'@babel/helper-compilation-targets': 7.27.0
3102
+
'@babel/helper-plugin-utils': 7.26.5
3103
+
'@babel/traverse': 7.27.0
3148
3104
transitivePeerDependencies:
3149
3105
- supports-color
3150
3106
3151
-
'@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)':
3107
+
'@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)':
3152
3108
dependencies:
3153
-
'@babel/core': 7.27.4
3154
-
'@babel/helper-plugin-utils': 7.27.1
3109
+
'@babel/core': 7.26.10
3110
+
'@babel/helper-plugin-utils': 7.26.5
3155
3111
3156
-
'@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)':
3112
+
'@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)':
3157
3113
dependencies:
3158
-
'@babel/core': 7.27.4
3159
-
'@babel/helper-plugin-utils': 7.27.1
3114
+
'@babel/core': 7.26.10
3115
+
'@babel/helper-plugin-utils': 7.26.5
3160
3116
3161
-
'@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)':
3117
+
'@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)':
3162
3118
dependencies:
3163
-
'@babel/core': 7.27.4
3164
-
'@babel/helper-plugin-utils': 7.27.1
3119
+
'@babel/core': 7.26.10
3120
+
'@babel/helper-plugin-utils': 7.26.5
3165
3121
3166
-
'@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)':
3122
+
'@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)':
3167
3123
dependencies:
3168
-
'@babel/core': 7.27.4
3169
-
'@babel/helper-plugin-utils': 7.27.1
3124
+
'@babel/core': 7.26.10
3125
+
'@babel/helper-plugin-utils': 7.26.5
3170
3126
3171
-
'@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)':
3127
+
'@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)':
3172
3128
dependencies:
3173
-
'@babel/core': 7.27.4
3174
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
3175
-
'@babel/helper-plugin-utils': 7.27.1
3129
+
'@babel/core': 7.26.10
3130
+
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
3131
+
'@babel/helper-plugin-utils': 7.26.5
3176
3132
transitivePeerDependencies:
3177
3133
- supports-color
3178
3134
3179
-
'@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)':
3135
+
'@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)':
3180
3136
dependencies:
3181
-
'@babel/core': 7.27.4
3182
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
3183
-
'@babel/helper-plugin-utils': 7.27.1
3137
+
'@babel/core': 7.26.10
3138
+
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
3139
+
'@babel/helper-plugin-utils': 7.26.5
3184
3140
transitivePeerDependencies:
3185
3141
- supports-color
3186
3142
3187
-
'@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)':
3143
+
'@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)':
3188
3144
dependencies:
3189
-
'@babel/core': 7.27.4
3190
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
3191
-
'@babel/helper-plugin-utils': 7.27.1
3192
-
'@babel/helper-validator-identifier': 7.27.1
3193
-
'@babel/traverse': 7.27.4
3145
+
'@babel/core': 7.26.10
3146
+
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
3147
+
'@babel/helper-plugin-utils': 7.26.5
3148
+
'@babel/helper-validator-identifier': 7.25.9
3149
+
'@babel/traverse': 7.27.0
3194
3150
transitivePeerDependencies:
3195
3151
- supports-color
3196
3152
3197
-
'@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)':
3153
+
'@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)':
3198
3154
dependencies:
3199
-
'@babel/core': 7.27.4
3200
-
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
3201
-
'@babel/helper-plugin-utils': 7.27.1
3155
+
'@babel/core': 7.26.10
3156
+
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
3157
+
'@babel/helper-plugin-utils': 7.26.5
3202
3158
transitivePeerDependencies:
3203
3159
- supports-color
3204
3160
3205
-
'@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)':
3161
+
'@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)':
3206
3162
dependencies:
3207
-
'@babel/core': 7.27.4
3208
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3209
-
'@babel/helper-plugin-utils': 7.27.1
3163
+
'@babel/core': 7.26.10
3164
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3165
+
'@babel/helper-plugin-utils': 7.26.5
3210
3166
3211
-
'@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)':
3167
+
'@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)':
3212
3168
dependencies:
3213
-
'@babel/core': 7.27.4
3214
-
'@babel/helper-plugin-utils': 7.27.1
3169
+
'@babel/core': 7.26.10
3170
+
'@babel/helper-plugin-utils': 7.26.5
3215
3171
3216
-
'@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)':
3172
+
'@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)':
3217
3173
dependencies:
3218
-
'@babel/core': 7.27.4
3219
-
'@babel/helper-plugin-utils': 7.27.1
3174
+
'@babel/core': 7.26.10
3175
+
'@babel/helper-plugin-utils': 7.26.5
3220
3176
3221
-
'@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)':
3177
+
'@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)':
3222
3178
dependencies:
3223
-
'@babel/core': 7.27.4
3224
-
'@babel/helper-plugin-utils': 7.27.1
3179
+
'@babel/core': 7.26.10
3180
+
'@babel/helper-plugin-utils': 7.26.5
3225
3181
3226
-
'@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.4)':
3182
+
'@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)':
3227
3183
dependencies:
3228
-
'@babel/core': 7.27.4
3229
-
'@babel/helper-compilation-targets': 7.27.2
3230
-
'@babel/helper-plugin-utils': 7.27.1
3231
-
'@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4)
3232
-
'@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4)
3184
+
'@babel/core': 7.26.10
3185
+
'@babel/helper-compilation-targets': 7.27.0
3186
+
'@babel/helper-plugin-utils': 7.26.5
3187
+
'@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10)
3233
3188
3234
-
'@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)':
3189
+
'@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)':
3235
3190
dependencies:
3236
-
'@babel/core': 7.27.4
3237
-
'@babel/helper-plugin-utils': 7.27.1
3238
-
'@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)
3191
+
'@babel/core': 7.26.10
3192
+
'@babel/helper-plugin-utils': 7.26.5
3193
+
'@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
3239
3194
transitivePeerDependencies:
3240
3195
- supports-color
3241
3196
3242
-
'@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)':
3197
+
'@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)':
3243
3198
dependencies:
3244
-
'@babel/core': 7.27.4
3245
-
'@babel/helper-plugin-utils': 7.27.1
3199
+
'@babel/core': 7.26.10
3200
+
'@babel/helper-plugin-utils': 7.26.5
3246
3201
3247
-
'@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)':
3202
+
'@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)':
3248
3203
dependencies:
3249
-
'@babel/core': 7.27.4
3250
-
'@babel/helper-plugin-utils': 7.27.1
3251
-
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
3204
+
'@babel/core': 7.26.10
3205
+
'@babel/helper-plugin-utils': 7.26.5
3206
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
3252
3207
transitivePeerDependencies:
3253
3208
- supports-color
3254
3209
3255
-
'@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)':
3210
+
'@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)':
3256
3211
dependencies:
3257
-
'@babel/core': 7.27.4
3258
-
'@babel/helper-plugin-utils': 7.27.1
3212
+
'@babel/core': 7.26.10
3213
+
'@babel/helper-plugin-utils': 7.26.5
3259
3214
3260
-
'@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)':
3215
+
'@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)':
3261
3216
dependencies:
3262
-
'@babel/core': 7.27.4
3263
-
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
3264
-
'@babel/helper-plugin-utils': 7.27.1
3217
+
'@babel/core': 7.26.10
3218
+
'@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
3219
+
'@babel/helper-plugin-utils': 7.26.5
3265
3220
transitivePeerDependencies:
3266
3221
- supports-color
3267
3222
3268
-
'@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)':
3223
+
'@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)':
3269
3224
dependencies:
3270
-
'@babel/core': 7.27.4
3271
-
'@babel/helper-annotate-as-pure': 7.27.3
3272
-
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
3273
-
'@babel/helper-plugin-utils': 7.27.1
3225
+
'@babel/core': 7.26.10
3226
+
'@babel/helper-annotate-as-pure': 7.25.9
3227
+
'@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
3228
+
'@babel/helper-plugin-utils': 7.26.5
3274
3229
transitivePeerDependencies:
3275
3230
- supports-color
3276
3231
3277
-
'@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)':
3232
+
'@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)':
3278
3233
dependencies:
3279
-
'@babel/core': 7.27.4
3280
-
'@babel/helper-plugin-utils': 7.27.1
3234
+
'@babel/core': 7.26.10
3235
+
'@babel/helper-plugin-utils': 7.26.5
3281
3236
3282
-
'@babel/plugin-transform-regenerator@7.27.5(@babel/core@7.27.4)':
3237
+
'@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)':
3283
3238
dependencies:
3284
-
'@babel/core': 7.27.4
3285
-
'@babel/helper-plugin-utils': 7.27.1
3239
+
'@babel/core': 7.26.10
3240
+
'@babel/helper-plugin-utils': 7.26.5
3241
+
regenerator-transform: 0.15.2
3286
3242
3287
-
'@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)':
3243
+
'@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)':
3288
3244
dependencies:
3289
-
'@babel/core': 7.27.4
3290
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3291
-
'@babel/helper-plugin-utils': 7.27.1
3245
+
'@babel/core': 7.26.10
3246
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3247
+
'@babel/helper-plugin-utils': 7.26.5
3292
3248
3293
-
'@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)':
3249
+
'@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)':
3294
3250
dependencies:
3295
-
'@babel/core': 7.27.4
3296
-
'@babel/helper-plugin-utils': 7.27.1
3251
+
'@babel/core': 7.26.10
3252
+
'@babel/helper-plugin-utils': 7.26.5
3297
3253
3298
-
'@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.4)':
3254
+
'@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)':
3299
3255
dependencies:
3300
-
'@babel/core': 7.27.4
3301
-
'@babel/helper-plugin-utils': 7.27.1
3256
+
'@babel/core': 7.26.10
3257
+
'@babel/helper-plugin-utils': 7.26.5
3302
3258
3303
-
'@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)':
3259
+
'@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)':
3304
3260
dependencies:
3305
-
'@babel/core': 7.27.4
3306
-
'@babel/helper-plugin-utils': 7.27.1
3307
-
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
3261
+
'@babel/core': 7.26.10
3262
+
'@babel/helper-plugin-utils': 7.26.5
3263
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
3308
3264
transitivePeerDependencies:
3309
3265
- supports-color
3310
3266
3311
-
'@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)':
3267
+
'@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)':
3312
3268
dependencies:
3313
-
'@babel/core': 7.27.4
3314
-
'@babel/helper-plugin-utils': 7.27.1
3269
+
'@babel/core': 7.26.10
3270
+
'@babel/helper-plugin-utils': 7.26.5
3315
3271
3316
-
'@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)':
3272
+
'@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)':
3317
3273
dependencies:
3318
-
'@babel/core': 7.27.4
3319
-
'@babel/helper-plugin-utils': 7.27.1
3274
+
'@babel/core': 7.26.10
3275
+
'@babel/helper-plugin-utils': 7.26.5
3320
3276
3321
-
'@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)':
3277
+
'@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)':
3322
3278
dependencies:
3323
-
'@babel/core': 7.27.4
3324
-
'@babel/helper-plugin-utils': 7.27.1
3279
+
'@babel/core': 7.26.10
3280
+
'@babel/helper-plugin-utils': 7.26.5
3325
3281
3326
-
'@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)':
3282
+
'@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)':
3327
3283
dependencies:
3328
-
'@babel/core': 7.27.4
3329
-
'@babel/helper-plugin-utils': 7.27.1
3284
+
'@babel/core': 7.26.10
3285
+
'@babel/helper-plugin-utils': 7.26.5
3330
3286
3331
-
'@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)':
3287
+
'@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)':
3332
3288
dependencies:
3333
-
'@babel/core': 7.27.4
3334
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3335
-
'@babel/helper-plugin-utils': 7.27.1
3289
+
'@babel/core': 7.26.10
3290
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3291
+
'@babel/helper-plugin-utils': 7.26.5
3336
3292
3337
-
'@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)':
3293
+
'@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)':
3338
3294
dependencies:
3339
-
'@babel/core': 7.27.4
3340
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3341
-
'@babel/helper-plugin-utils': 7.27.1
3295
+
'@babel/core': 7.26.10
3296
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3297
+
'@babel/helper-plugin-utils': 7.26.5
3342
3298
3343
-
'@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)':
3299
+
'@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)':
3344
3300
dependencies:
3345
-
'@babel/core': 7.27.4
3346
-
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
3347
-
'@babel/helper-plugin-utils': 7.27.1
3301
+
'@babel/core': 7.26.10
3302
+
'@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
3303
+
'@babel/helper-plugin-utils': 7.26.5
3348
3304
3349
-
'@babel/preset-env@7.27.2(@babel/core@7.27.4)':
3305
+
'@babel/preset-env@7.26.9(@babel/core@7.26.10)':
3350
3306
dependencies:
3351
-
'@babel/compat-data': 7.27.5
3352
-
'@babel/core': 7.27.4
3353
-
'@babel/helper-compilation-targets': 7.27.2
3354
-
'@babel/helper-plugin-utils': 7.27.1
3355
-
'@babel/helper-validator-option': 7.27.1
3356
-
'@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.4)
3357
-
'@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.4)
3358
-
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.4)
3359
-
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.4)
3360
-
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.4)
3361
-
'@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)
3362
-
'@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4)
3363
-
'@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4)
3364
-
'@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4)
3365
-
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.4)
3366
-
'@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.4)
3367
-
'@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.4)
3368
-
'@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.4)
3369
-
'@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.27.4)
3370
-
'@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4)
3371
-
'@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.4)
3372
-
'@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.4)
3373
-
'@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.4)
3374
-
'@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4)
3375
-
'@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.4)
3376
-
'@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.4)
3377
-
'@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4)
3378
-
'@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.4)
3379
-
'@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.4)
3380
-
'@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4)
3381
-
'@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.4)
3382
-
'@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.4)
3383
-
'@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.4)
3384
-
'@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.4)
3385
-
'@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.4)
3386
-
'@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.4)
3387
-
'@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.4)
3388
-
'@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4)
3389
-
'@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.4)
3390
-
'@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.4)
3391
-
'@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4)
3392
-
'@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.4)
3393
-
'@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.4)
3394
-
'@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4)
3395
-
'@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.4)
3396
-
'@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.4)
3397
-
'@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.4)
3398
-
'@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4)
3399
-
'@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4)
3400
-
'@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.4)
3401
-
'@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.4)
3402
-
'@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.4)
3403
-
'@babel/plugin-transform-regenerator': 7.27.5(@babel/core@7.27.4)
3404
-
'@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.4)
3405
-
'@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.4)
3406
-
'@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.4)
3407
-
'@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.4)
3408
-
'@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.4)
3409
-
'@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.4)
3410
-
'@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.4)
3411
-
'@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.4)
3412
-
'@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.4)
3413
-
'@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.4)
3414
-
'@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.4)
3415
-
'@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.4)
3416
-
babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.4)
3417
-
babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4)
3418
-
babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.4)
3419
-
core-js-compat: 3.43.0
3307
+
'@babel/compat-data': 7.26.8
3308
+
'@babel/core': 7.26.10
3309
+
'@babel/helper-compilation-targets': 7.27.0
3310
+
'@babel/helper-plugin-utils': 7.26.5
3311
+
'@babel/helper-validator-option': 7.25.9
3312
+
'@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10)
3313
+
'@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10)
3314
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10)
3315
+
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10)
3316
+
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10)
3317
+
'@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)
3318
+
'@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10)
3319
+
'@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
3320
+
'@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10)
3321
+
'@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10)
3322
+
'@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
3323
+
'@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
3324
+
'@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10)
3325
+
'@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10)
3326
+
'@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10)
3327
+
'@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10)
3328
+
'@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10)
3329
+
'@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10)
3330
+
'@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10)
3331
+
'@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10)
3332
+
'@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10)
3333
+
'@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10)
3334
+
'@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10)
3335
+
'@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10)
3336
+
'@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10)
3337
+
'@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10)
3338
+
'@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10)
3339
+
'@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10)
3340
+
'@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10)
3341
+
'@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10)
3342
+
'@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10)
3343
+
'@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10)
3344
+
'@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10)
3345
+
'@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10)
3346
+
'@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10)
3347
+
'@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10)
3348
+
'@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10)
3349
+
'@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10)
3350
+
'@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10)
3351
+
'@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10)
3352
+
'@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10)
3353
+
'@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10)
3354
+
'@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10)
3355
+
'@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10)
3356
+
'@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10)
3357
+
'@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10)
3358
+
'@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10)
3359
+
'@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10)
3360
+
'@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10)
3361
+
'@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10)
3362
+
'@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10)
3363
+
'@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10)
3364
+
'@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10)
3365
+
'@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10)
3366
+
'@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10)
3367
+
'@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10)
3368
+
'@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10)
3369
+
'@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10)
3370
+
'@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10)
3371
+
'@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10)
3372
+
babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10)
3373
+
babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
3374
+
babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10)
3375
+
core-js-compat: 3.41.0
3420
3376
semver: 6.3.1
3421
3377
transitivePeerDependencies:
3422
3378
- supports-color
3423
3379
3424
-
'@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)':
3380
+
'@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)':
3425
3381
dependencies:
3426
-
'@babel/core': 7.27.4
3427
-
'@babel/helper-plugin-utils': 7.27.1
3428
-
'@babel/types': 7.27.6
3382
+
'@babel/core': 7.26.10
3383
+
'@babel/helper-plugin-utils': 7.26.5
3384
+
'@babel/types': 7.27.0
3429
3385
esutils: 2.0.3
3430
3386
3431
-
'@babel/runtime@7.27.6': {}
3387
+
'@babel/runtime@7.27.0':
3388
+
dependencies:
3389
+
regenerator-runtime: 0.14.1
3432
3390
3433
-
'@babel/template@7.27.2':
3391
+
'@babel/template@7.27.0':
3434
3392
dependencies:
3435
-
'@babel/code-frame': 7.27.1
3436
-
'@babel/parser': 7.27.5
3437
-
'@babel/types': 7.27.6
3393
+
'@babel/code-frame': 7.26.2
3394
+
'@babel/parser': 7.27.0
3395
+
'@babel/types': 7.27.0
3438
3396
3439
-
'@babel/traverse@7.27.4':
3397
+
'@babel/traverse@7.27.0':
3440
3398
dependencies:
3441
-
'@babel/code-frame': 7.27.1
3442
-
'@babel/generator': 7.27.5
3443
-
'@babel/parser': 7.27.5
3444
-
'@babel/template': 7.27.2
3445
-
'@babel/types': 7.27.6
3446
-
debug: 4.4.1
3399
+
'@babel/code-frame': 7.26.2
3400
+
'@babel/generator': 7.27.0
3401
+
'@babel/parser': 7.27.0
3402
+
'@babel/template': 7.27.0
3403
+
'@babel/types': 7.27.0
3404
+
debug: 4.4.0
3447
3405
globals: 11.12.0
3448
3406
transitivePeerDependencies:
3449
3407
- supports-color
3450
3408
3451
-
'@babel/types@7.27.6':
3409
+
'@babel/types@7.27.0':
3452
3410
dependencies:
3453
-
'@babel/helper-string-parser': 7.27.1
3454
-
'@babel/helper-validator-identifier': 7.27.1
3455
-
3456
-
'@badrap/valita@0.4.5': {}
3411
+
'@babel/helper-string-parser': 7.25.9
3412
+
'@babel/helper-validator-identifier': 7.25.9
3457
3413
3458
3414
'@cloudflare/kv-asset-handler@0.4.0':
3459
3415
dependencies:
3460
3416
mime: 3.0.0
3461
3417
3462
-
'@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0)':
3418
+
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0)':
3463
3419
dependencies:
3464
-
unenv: 2.0.0-rc.17
3420
+
unenv: 2.0.0-rc.15
3465
3421
optionalDependencies:
3466
-
workerd: 1.20250617.0
3422
+
workerd: 1.20250321.0
3467
3423
3468
-
'@cloudflare/workerd-darwin-64@1.20250617.0':
3424
+
'@cloudflare/workerd-darwin-64@1.20250321.0':
3469
3425
optional: true
3470
3426
3471
-
'@cloudflare/workerd-darwin-arm64@1.20250617.0':
3427
+
'@cloudflare/workerd-darwin-arm64@1.20250321.0':
3472
3428
optional: true
3473
3429
3474
-
'@cloudflare/workerd-linux-64@1.20250617.0':
3430
+
'@cloudflare/workerd-linux-64@1.20250321.0':
3475
3431
optional: true
3476
3432
3477
-
'@cloudflare/workerd-linux-arm64@1.20250617.0':
3433
+
'@cloudflare/workerd-linux-arm64@1.20250321.0':
3478
3434
optional: true
3479
3435
3480
-
'@cloudflare/workerd-windows-64@1.20250617.0':
3436
+
'@cloudflare/workerd-windows-64@1.20250321.0':
3481
3437
optional: true
3482
3438
3483
3439
'@cspotcode/source-map-support@0.8.1':
3484
3440
dependencies:
3485
3441
'@jridgewell/trace-mapping': 0.3.9
3486
3442
3487
-
'@emnapi/runtime@1.4.3':
3443
+
'@emnapi/runtime@1.4.0':
3488
3444
dependencies:
3489
3445
tslib: 2.8.1
3490
3446
optional: true
3491
3447
3492
-
'@esbuild/aix-ppc64@0.25.4':
3493
-
optional: true
3494
-
3495
-
'@esbuild/aix-ppc64@0.25.5':
3448
+
'@esbuild/aix-ppc64@0.24.0':
3496
3449
optional: true
3497
3450
3498
-
'@esbuild/android-arm64@0.25.4':
3451
+
'@esbuild/aix-ppc64@0.24.2':
3499
3452
optional: true
3500
3453
3501
-
'@esbuild/android-arm64@0.25.5':
3454
+
'@esbuild/android-arm64@0.24.0':
3502
3455
optional: true
3503
3456
3504
-
'@esbuild/android-arm@0.25.4':
3457
+
'@esbuild/android-arm64@0.24.2':
3505
3458
optional: true
3506
3459
3507
-
'@esbuild/android-arm@0.25.5':
3460
+
'@esbuild/android-arm@0.24.0':
3508
3461
optional: true
3509
3462
3510
-
'@esbuild/android-x64@0.25.4':
3463
+
'@esbuild/android-arm@0.24.2':
3511
3464
optional: true
3512
3465
3513
-
'@esbuild/android-x64@0.25.5':
3466
+
'@esbuild/android-x64@0.24.0':
3514
3467
optional: true
3515
3468
3516
-
'@esbuild/darwin-arm64@0.25.4':
3469
+
'@esbuild/android-x64@0.24.2':
3517
3470
optional: true
3518
3471
3519
-
'@esbuild/darwin-arm64@0.25.5':
3472
+
'@esbuild/darwin-arm64@0.24.0':
3520
3473
optional: true
3521
3474
3522
-
'@esbuild/darwin-x64@0.25.4':
3475
+
'@esbuild/darwin-arm64@0.24.2':
3523
3476
optional: true
3524
3477
3525
-
'@esbuild/darwin-x64@0.25.5':
3478
+
'@esbuild/darwin-x64@0.24.0':
3526
3479
optional: true
3527
3480
3528
-
'@esbuild/freebsd-arm64@0.25.4':
3481
+
'@esbuild/darwin-x64@0.24.2':
3529
3482
optional: true
3530
3483
3531
-
'@esbuild/freebsd-arm64@0.25.5':
3484
+
'@esbuild/freebsd-arm64@0.24.0':
3532
3485
optional: true
3533
3486
3534
-
'@esbuild/freebsd-x64@0.25.4':
3487
+
'@esbuild/freebsd-arm64@0.24.2':
3535
3488
optional: true
3536
3489
3537
-
'@esbuild/freebsd-x64@0.25.5':
3490
+
'@esbuild/freebsd-x64@0.24.0':
3538
3491
optional: true
3539
3492
3540
-
'@esbuild/linux-arm64@0.25.4':
3493
+
'@esbuild/freebsd-x64@0.24.2':
3541
3494
optional: true
3542
3495
3543
-
'@esbuild/linux-arm64@0.25.5':
3496
+
'@esbuild/linux-arm64@0.24.0':
3544
3497
optional: true
3545
3498
3546
-
'@esbuild/linux-arm@0.25.4':
3499
+
'@esbuild/linux-arm64@0.24.2':
3547
3500
optional: true
3548
3501
3549
-
'@esbuild/linux-arm@0.25.5':
3502
+
'@esbuild/linux-arm@0.24.0':
3550
3503
optional: true
3551
3504
3552
-
'@esbuild/linux-ia32@0.25.4':
3505
+
'@esbuild/linux-arm@0.24.2':
3553
3506
optional: true
3554
3507
3555
-
'@esbuild/linux-ia32@0.25.5':
3508
+
'@esbuild/linux-ia32@0.24.0':
3556
3509
optional: true
3557
3510
3558
-
'@esbuild/linux-loong64@0.25.4':
3511
+
'@esbuild/linux-ia32@0.24.2':
3559
3512
optional: true
3560
3513
3561
-
'@esbuild/linux-loong64@0.25.5':
3514
+
'@esbuild/linux-loong64@0.24.0':
3562
3515
optional: true
3563
3516
3564
-
'@esbuild/linux-mips64el@0.25.4':
3517
+
'@esbuild/linux-loong64@0.24.2':
3565
3518
optional: true
3566
3519
3567
-
'@esbuild/linux-mips64el@0.25.5':
3520
+
'@esbuild/linux-mips64el@0.24.0':
3568
3521
optional: true
3569
3522
3570
-
'@esbuild/linux-ppc64@0.25.4':
3523
+
'@esbuild/linux-mips64el@0.24.2':
3571
3524
optional: true
3572
3525
3573
-
'@esbuild/linux-ppc64@0.25.5':
3526
+
'@esbuild/linux-ppc64@0.24.0':
3574
3527
optional: true
3575
3528
3576
-
'@esbuild/linux-riscv64@0.25.4':
3529
+
'@esbuild/linux-ppc64@0.24.2':
3577
3530
optional: true
3578
3531
3579
-
'@esbuild/linux-riscv64@0.25.5':
3532
+
'@esbuild/linux-riscv64@0.24.0':
3580
3533
optional: true
3581
3534
3582
-
'@esbuild/linux-s390x@0.25.4':
3535
+
'@esbuild/linux-riscv64@0.24.2':
3583
3536
optional: true
3584
3537
3585
-
'@esbuild/linux-s390x@0.25.5':
3538
+
'@esbuild/linux-s390x@0.24.0':
3586
3539
optional: true
3587
3540
3588
-
'@esbuild/linux-x64@0.25.4':
3541
+
'@esbuild/linux-s390x@0.24.2':
3589
3542
optional: true
3590
3543
3591
-
'@esbuild/linux-x64@0.25.5':
3544
+
'@esbuild/linux-x64@0.24.0':
3592
3545
optional: true
3593
3546
3594
-
'@esbuild/netbsd-arm64@0.25.4':
3547
+
'@esbuild/linux-x64@0.24.2':
3595
3548
optional: true
3596
3549
3597
-
'@esbuild/netbsd-arm64@0.25.5':
3550
+
'@esbuild/netbsd-arm64@0.24.2':
3598
3551
optional: true
3599
3552
3600
-
'@esbuild/netbsd-x64@0.25.4':
3553
+
'@esbuild/netbsd-x64@0.24.0':
3601
3554
optional: true
3602
3555
3603
-
'@esbuild/netbsd-x64@0.25.5':
3556
+
'@esbuild/netbsd-x64@0.24.2':
3604
3557
optional: true
3605
3558
3606
-
'@esbuild/openbsd-arm64@0.25.4':
3559
+
'@esbuild/openbsd-arm64@0.24.0':
3607
3560
optional: true
3608
3561
3609
-
'@esbuild/openbsd-arm64@0.25.5':
3562
+
'@esbuild/openbsd-arm64@0.24.2':
3610
3563
optional: true
3611
3564
3612
-
'@esbuild/openbsd-x64@0.25.4':
3565
+
'@esbuild/openbsd-x64@0.24.0':
3613
3566
optional: true
3614
3567
3615
-
'@esbuild/openbsd-x64@0.25.5':
3568
+
'@esbuild/openbsd-x64@0.24.2':
3616
3569
optional: true
3617
3570
3618
-
'@esbuild/sunos-x64@0.25.4':
3571
+
'@esbuild/sunos-x64@0.24.0':
3619
3572
optional: true
3620
3573
3621
-
'@esbuild/sunos-x64@0.25.5':
3574
+
'@esbuild/sunos-x64@0.24.2':
3622
3575
optional: true
3623
3576
3624
-
'@esbuild/win32-arm64@0.25.4':
3577
+
'@esbuild/win32-arm64@0.24.0':
3625
3578
optional: true
3626
3579
3627
-
'@esbuild/win32-arm64@0.25.5':
3580
+
'@esbuild/win32-arm64@0.24.2':
3628
3581
optional: true
3629
3582
3630
-
'@esbuild/win32-ia32@0.25.4':
3583
+
'@esbuild/win32-ia32@0.24.0':
3631
3584
optional: true
3632
3585
3633
-
'@esbuild/win32-ia32@0.25.5':
3586
+
'@esbuild/win32-ia32@0.24.2':
3634
3587
optional: true
3635
3588
3636
-
'@esbuild/win32-x64@0.25.4':
3589
+
'@esbuild/win32-x64@0.24.0':
3637
3590
optional: true
3638
3591
3639
-
'@esbuild/win32-x64@0.25.5':
3592
+
'@esbuild/win32-x64@0.24.2':
3640
3593
optional: true
3641
3594
3642
-
'@externdefs/solid-freeze@0.1.1(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))':
3595
+
'@externdefs/solid-freeze@0.1.1(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))':
3643
3596
dependencies:
3644
-
solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)
3597
+
solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)
3645
3598
3646
-
'@externdefs/solid-query@0.1.5(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))':
3599
+
'@externdefs/solid-query@0.1.5(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))':
3647
3600
dependencies:
3648
3601
'@tanstack/query-core': 5.17.19(patch_hash=0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd)
3649
-
solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)
3602
+
solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)
3650
3603
3651
3604
'@fastify/busboy@2.1.1': {}
3652
3605
3653
-
'@floating-ui/core@1.7.1':
3606
+
'@floating-ui/core@1.6.9':
3654
3607
dependencies:
3655
3608
'@floating-ui/utils': 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea)
3656
3609
3657
-
'@floating-ui/dom@1.7.1':
3610
+
'@floating-ui/dom@1.6.13':
3658
3611
dependencies:
3659
-
'@floating-ui/core': 1.7.1
3612
+
'@floating-ui/core': 1.6.9
3660
3613
'@floating-ui/utils': 0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea)
3661
3614
3662
3615
'@floating-ui/utils@0.2.9(patch_hash=1cf283fbaa686f96f7b3029bbc0955bff698af6f4a75ba6c276ad1a7a7c40aea)': {}
···
3727
3680
3728
3681
'@img/sharp-wasm32@0.33.5':
3729
3682
dependencies:
3730
-
'@emnapi/runtime': 1.4.3
3683
+
'@emnapi/runtime': 1.4.0
3731
3684
optional: true
3732
3685
3733
3686
'@img/sharp-win32-ia32@0.33.5':
···
3776
3729
3777
3730
'@jsr/mary__async-iterator-fns@0.1.1': {}
3778
3731
3779
-
'@jsr/mary__batch-fetch@0.1.0': {}
3780
-
3781
3732
'@jsr/mary__date-fns@0.1.3': {}
3782
3733
3783
3734
'@jsr/mary__events@0.2.0': {}
3784
3735
3785
3736
'@jsr/mary__exif-rm@0.2.2': {}
3786
3737
3787
-
'@kelinci/basa-lexicons@1.0.0':
3788
-
dependencies:
3789
-
'@atcute/lexicons': 1.1.0
3790
-
3791
3738
'@nodelib/fs.scandir@2.1.5':
3792
3739
dependencies:
3793
3740
'@nodelib/fs.stat': 2.0.5
···
3813
3760
'@pkgjs/parseargs@0.11.0':
3814
3761
optional: true
3815
3762
3816
-
'@rollup/plugin-babel@5.3.1(@babel/core@7.27.4)(@types/babel__core@7.20.5)(rollup@2.79.2)':
3763
+
'@rollup/plugin-babel@5.3.1(@babel/core@7.26.10)(@types/babel__core@7.20.5)(rollup@2.79.2)':
3817
3764
dependencies:
3818
-
'@babel/core': 7.27.4
3819
-
'@babel/helper-module-imports': 7.27.1
3765
+
'@babel/core': 7.26.10
3766
+
'@babel/helper-module-imports': 7.25.9
3820
3767
'@rollup/pluginutils': 3.1.0(rollup@2.79.2)
3821
3768
rollup: 2.79.2
3822
3769
optionalDependencies:
···
3826
3773
3827
3774
'@rollup/plugin-node-resolve@15.3.1(rollup@2.79.2)':
3828
3775
dependencies:
3829
-
'@rollup/pluginutils': 5.2.0(rollup@2.79.2)
3776
+
'@rollup/pluginutils': 5.1.4(rollup@2.79.2)
3830
3777
'@types/resolve': 1.20.2
3831
3778
deepmerge: 4.3.1
3832
3779
is-module: 1.0.0
···
3844
3791
dependencies:
3845
3792
serialize-javascript: 6.0.2
3846
3793
smob: 1.5.0
3847
-
terser: 5.43.1
3794
+
terser: 5.39.0
3848
3795
optionalDependencies:
3849
3796
rollup: 2.79.2
3850
3797
···
3855
3802
picomatch: 2.3.1
3856
3803
rollup: 2.79.2
3857
3804
3858
-
'@rollup/pluginutils@5.2.0(rollup@2.79.2)':
3805
+
'@rollup/pluginutils@5.1.4(rollup@2.79.2)':
3859
3806
dependencies:
3860
-
'@types/estree': 1.0.8
3807
+
'@types/estree': 1.0.7
3861
3808
estree-walker: 2.0.2
3862
3809
picomatch: 4.0.2
3863
3810
optionalDependencies:
3864
3811
rollup: 2.79.2
3865
3812
3866
-
'@rollup/rollup-android-arm-eabi@4.44.0':
3813
+
'@rollup/rollup-android-arm-eabi@4.37.0':
3867
3814
optional: true
3868
3815
3869
-
'@rollup/rollup-android-arm64@4.44.0':
3816
+
'@rollup/rollup-android-arm64@4.37.0':
3870
3817
optional: true
3871
3818
3872
-
'@rollup/rollup-darwin-arm64@4.44.0':
3819
+
'@rollup/rollup-darwin-arm64@4.37.0':
3873
3820
optional: true
3874
3821
3875
-
'@rollup/rollup-darwin-x64@4.44.0':
3822
+
'@rollup/rollup-darwin-x64@4.37.0':
3876
3823
optional: true
3877
3824
3878
-
'@rollup/rollup-freebsd-arm64@4.44.0':
3825
+
'@rollup/rollup-freebsd-arm64@4.37.0':
3879
3826
optional: true
3880
3827
3881
-
'@rollup/rollup-freebsd-x64@4.44.0':
3828
+
'@rollup/rollup-freebsd-x64@4.37.0':
3882
3829
optional: true
3883
3830
3884
-
'@rollup/rollup-linux-arm-gnueabihf@4.44.0':
3831
+
'@rollup/rollup-linux-arm-gnueabihf@4.37.0':
3885
3832
optional: true
3886
3833
3887
-
'@rollup/rollup-linux-arm-musleabihf@4.44.0':
3834
+
'@rollup/rollup-linux-arm-musleabihf@4.37.0':
3888
3835
optional: true
3889
3836
3890
-
'@rollup/rollup-linux-arm64-gnu@4.44.0':
3837
+
'@rollup/rollup-linux-arm64-gnu@4.37.0':
3891
3838
optional: true
3892
3839
3893
-
'@rollup/rollup-linux-arm64-musl@4.44.0':
3840
+
'@rollup/rollup-linux-arm64-musl@4.37.0':
3894
3841
optional: true
3895
3842
3896
-
'@rollup/rollup-linux-loongarch64-gnu@4.44.0':
3843
+
'@rollup/rollup-linux-loongarch64-gnu@4.37.0':
3897
3844
optional: true
3898
3845
3899
-
'@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
3846
+
'@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
3900
3847
optional: true
3901
3848
3902
-
'@rollup/rollup-linux-riscv64-gnu@4.44.0':
3849
+
'@rollup/rollup-linux-riscv64-gnu@4.37.0':
3903
3850
optional: true
3904
3851
3905
-
'@rollup/rollup-linux-riscv64-musl@4.44.0':
3852
+
'@rollup/rollup-linux-riscv64-musl@4.37.0':
3906
3853
optional: true
3907
3854
3908
-
'@rollup/rollup-linux-s390x-gnu@4.44.0':
3855
+
'@rollup/rollup-linux-s390x-gnu@4.37.0':
3909
3856
optional: true
3910
3857
3911
-
'@rollup/rollup-linux-x64-gnu@4.44.0':
3858
+
'@rollup/rollup-linux-x64-gnu@4.37.0':
3912
3859
optional: true
3913
3860
3914
-
'@rollup/rollup-linux-x64-musl@4.44.0':
3861
+
'@rollup/rollup-linux-x64-musl@4.37.0':
3915
3862
optional: true
3916
3863
3917
-
'@rollup/rollup-win32-arm64-msvc@4.44.0':
3864
+
'@rollup/rollup-win32-arm64-msvc@4.37.0':
3918
3865
optional: true
3919
3866
3920
-
'@rollup/rollup-win32-ia32-msvc@4.44.0':
3867
+
'@rollup/rollup-win32-ia32-msvc@4.37.0':
3921
3868
optional: true
3922
3869
3923
-
'@rollup/rollup-win32-x64-msvc@4.44.0':
3870
+
'@rollup/rollup-win32-x64-msvc@4.37.0':
3924
3871
optional: true
3925
3872
3926
3873
'@surma/rollup-plugin-off-main-thread@2.2.3':
···
3932
3879
3933
3880
'@tanstack/query-core@5.17.19(patch_hash=0b06407b66b7af88765fb6e01e112677a8c09ce518cb4f547cee8a0044471acd)': {}
3934
3881
3935
-
'@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.0)':
3882
+
'@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)':
3936
3883
dependencies:
3937
-
'@babel/generator': 7.27.5
3938
-
'@babel/parser': 7.27.5
3939
-
'@babel/traverse': 7.27.4
3940
-
'@babel/types': 7.27.6
3884
+
'@babel/generator': 7.27.0
3885
+
'@babel/parser': 7.27.0
3886
+
'@babel/traverse': 7.27.0
3887
+
'@babel/types': 7.27.0
3941
3888
javascript-natural-sort: 0.7.1
3942
3889
lodash: 4.17.21
3943
-
prettier: 3.6.0
3890
+
prettier: 3.5.3
3944
3891
transitivePeerDependencies:
3945
3892
- supports-color
3946
3893
3947
3894
'@types/babel__core@7.20.5':
3948
3895
dependencies:
3949
-
'@babel/parser': 7.27.5
3950
-
'@babel/types': 7.27.6
3951
-
'@types/babel__generator': 7.27.0
3896
+
'@babel/parser': 7.27.0
3897
+
'@babel/types': 7.27.0
3898
+
'@types/babel__generator': 7.6.8
3952
3899
'@types/babel__template': 7.4.4
3953
3900
'@types/babel__traverse': 7.20.7
3954
3901
3955
-
'@types/babel__generator@7.27.0':
3902
+
'@types/babel__generator@7.6.8':
3956
3903
dependencies:
3957
-
'@babel/types': 7.27.6
3904
+
'@babel/types': 7.27.0
3958
3905
3959
3906
'@types/babel__template@7.4.4':
3960
3907
dependencies:
3961
-
'@babel/parser': 7.27.5
3962
-
'@babel/types': 7.27.6
3908
+
'@babel/parser': 7.27.0
3909
+
'@babel/types': 7.27.0
3963
3910
3964
3911
'@types/babel__traverse@7.20.7':
3965
3912
dependencies:
3966
-
'@babel/types': 7.27.6
3913
+
'@babel/types': 7.27.0
3967
3914
3968
3915
'@types/dom-close-watcher@1.0.0': {}
3969
3916
3970
-
'@types/dom-webcodecs@0.1.15': {}
3917
+
'@types/dom-webcodecs@0.1.14': {}
3971
3918
3972
3919
'@types/estree@0.0.39': {}
3973
3920
3974
-
'@types/estree@1.0.8': {}
3921
+
'@types/estree@1.0.6': {}
3922
+
3923
+
'@types/estree@1.0.7': {}
3975
3924
3976
3925
'@types/resolve@1.20.2': {}
3977
3926
···
3983
3932
3984
3933
acorn@8.14.0: {}
3985
3934
3986
-
acorn@8.15.0: {}
3935
+
acorn@8.14.1: {}
3987
3936
3988
3937
ajv@8.17.1:
3989
3938
dependencies:
···
4019
3968
4020
3969
at-least-node@1.0.0: {}
4021
3970
4022
-
autoprefixer@10.4.21(postcss@8.5.6):
3971
+
autoprefixer@10.4.21(postcss@8.5.3):
4023
3972
dependencies:
4024
-
browserslist: 4.25.0
4025
-
caniuse-lite: 1.0.30001724
3973
+
browserslist: 4.24.4
3974
+
caniuse-lite: 1.0.30001707
4026
3975
fraction.js: 4.3.7
4027
3976
normalize-range: 0.1.2
4028
3977
picocolors: 1.1.1
4029
-
postcss: 8.5.6
3978
+
postcss: 8.5.3
4030
3979
postcss-value-parser: 4.2.0
4031
3980
4032
-
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.27.4):
3981
+
babel-plugin-jsx-dom-expressions@0.39.7(@babel/core@7.26.10):
4033
3982
dependencies:
4034
-
'@babel/core': 7.27.4
3983
+
'@babel/core': 7.26.10
4035
3984
'@babel/helper-module-imports': 7.18.6
4036
-
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4)
4037
-
'@babel/types': 7.27.6
3985
+
'@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
3986
+
'@babel/types': 7.27.0
4038
3987
html-entities: 2.3.3
4039
-
parse5: 7.3.0
4040
-
validate-html-nesting: 1.2.3
3988
+
parse5: 7.2.1
3989
+
validate-html-nesting: 1.2.2
4041
3990
4042
-
babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.4):
3991
+
babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10):
4043
3992
dependencies:
4044
-
'@babel/compat-data': 7.27.5
4045
-
'@babel/core': 7.27.4
4046
-
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4)
3993
+
'@babel/compat-data': 7.26.8
3994
+
'@babel/core': 7.26.10
3995
+
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
4047
3996
semver: 6.3.1
4048
3997
transitivePeerDependencies:
4049
3998
- supports-color
4050
3999
4051
-
babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.4):
4000
+
babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10):
4052
4001
dependencies:
4053
-
'@babel/core': 7.27.4
4054
-
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4)
4055
-
core-js-compat: 3.43.0
4002
+
'@babel/core': 7.26.10
4003
+
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
4004
+
core-js-compat: 3.41.0
4056
4005
transitivePeerDependencies:
4057
4006
- supports-color
4058
4007
4059
-
babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.4):
4008
+
babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10):
4060
4009
dependencies:
4061
-
'@babel/core': 7.27.4
4062
-
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4)
4010
+
'@babel/core': 7.26.10
4011
+
'@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
4063
4012
transitivePeerDependencies:
4064
4013
- supports-color
4065
4014
4066
-
babel-plugin-transform-typescript-const-enums@0.1.0(@babel/core@7.27.4):
4015
+
babel-plugin-transform-typescript-const-enums@0.1.0(@babel/core@7.26.10):
4067
4016
dependencies:
4068
-
'@babel/core': 7.27.4
4069
-
'@babel/helper-plugin-utils': 7.27.1
4070
-
'@babel/types': 7.27.6
4017
+
'@babel/core': 7.26.10
4018
+
'@babel/helper-plugin-utils': 7.26.5
4019
+
'@babel/types': 7.27.0
4071
4020
4072
-
babel-preset-solid@1.9.6(@babel/core@7.27.4):
4021
+
babel-preset-solid@1.9.5(@babel/core@7.26.10):
4073
4022
dependencies:
4074
-
'@babel/core': 7.27.4
4075
-
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.27.4)
4023
+
'@babel/core': 7.26.10
4024
+
babel-plugin-jsx-dom-expressions: 0.39.7(@babel/core@7.26.10)
4076
4025
4077
4026
balanced-match@1.0.2: {}
4078
4027
···
4082
4031
4083
4032
blake3-wasm@2.1.5: {}
4084
4033
4085
-
brace-expansion@1.1.12:
4034
+
brace-expansion@1.1.11:
4086
4035
dependencies:
4087
4036
balanced-match: 1.0.2
4088
4037
concat-map: 0.0.1
4089
4038
4090
-
brace-expansion@2.0.2:
4039
+
brace-expansion@2.0.1:
4091
4040
dependencies:
4092
4041
balanced-match: 1.0.2
4093
4042
···
4095
4044
dependencies:
4096
4045
fill-range: 7.1.1
4097
4046
4098
-
browserslist@4.25.0:
4047
+
browserslist@4.24.4:
4099
4048
dependencies:
4100
-
caniuse-lite: 1.0.30001724
4101
-
electron-to-chromium: 1.5.171
4049
+
caniuse-lite: 1.0.30001707
4050
+
electron-to-chromium: 1.5.128
4102
4051
node-releases: 2.0.19
4103
-
update-browserslist-db: 1.1.3(browserslist@4.25.0)
4052
+
update-browserslist-db: 1.1.3(browserslist@4.24.4)
4104
4053
4105
4054
buffer-from@1.1.2: {}
4106
4055
4107
4056
camelcase-css@2.0.1: {}
4108
4057
4109
-
caniuse-lite@1.0.30001724: {}
4058
+
caniuse-lite@1.0.30001707: {}
4110
4059
4111
4060
chalk@4.1.2:
4112
4061
dependencies:
···
4135
4084
dependencies:
4136
4085
color-name: 1.1.4
4137
4086
simple-swizzle: 0.2.2
4087
+
optional: true
4138
4088
4139
4089
color@4.2.3:
4140
4090
dependencies:
4141
4091
color-convert: 2.0.1
4142
4092
color-string: 1.9.1
4093
+
optional: true
4143
4094
4144
4095
comlink@4.4.2: {}
4145
4096
···
4153
4104
4154
4105
convert-source-map@2.0.0: {}
4155
4106
4156
-
cookie@0.7.2: {}
4107
+
cookie@0.5.0: {}
4157
4108
4158
-
core-js-compat@3.43.0:
4109
+
core-js-compat@3.41.0:
4159
4110
dependencies:
4160
-
browserslist: 4.25.0
4111
+
browserslist: 4.24.4
4161
4112
4162
4113
cross-spawn@7.0.6:
4163
4114
dependencies:
···
4173
4124
4174
4125
data-uri-to-buffer@2.0.2: {}
4175
4126
4176
-
debug@4.4.1:
4127
+
debug@4.4.0:
4177
4128
dependencies:
4178
4129
ms: 2.1.3
4179
4130
···
4181
4132
4182
4133
defu@6.1.4: {}
4183
4134
4184
-
detect-libc@2.0.4: {}
4135
+
detect-libc@2.0.3:
4136
+
optional: true
4185
4137
4186
4138
didyoumean@1.2.2: {}
4187
4139
···
4193
4145
dependencies:
4194
4146
jake: 10.9.2
4195
4147
4196
-
electron-to-chromium@1.5.171: {}
4148
+
electron-to-chromium@1.5.128: {}
4197
4149
4198
4150
emoji-regex@8.0.0: {}
4199
4151
4200
4152
emoji-regex@9.2.2: {}
4201
4153
4202
-
entities@6.0.1: {}
4154
+
entities@4.5.0: {}
4203
4155
4204
-
esbuild@0.25.4:
4156
+
esbuild@0.24.0:
4205
4157
optionalDependencies:
4206
-
'@esbuild/aix-ppc64': 0.25.4
4207
-
'@esbuild/android-arm': 0.25.4
4208
-
'@esbuild/android-arm64': 0.25.4
4209
-
'@esbuild/android-x64': 0.25.4
4210
-
'@esbuild/darwin-arm64': 0.25.4
4211
-
'@esbuild/darwin-x64': 0.25.4
4212
-
'@esbuild/freebsd-arm64': 0.25.4
4213
-
'@esbuild/freebsd-x64': 0.25.4
4214
-
'@esbuild/linux-arm': 0.25.4
4215
-
'@esbuild/linux-arm64': 0.25.4
4216
-
'@esbuild/linux-ia32': 0.25.4
4217
-
'@esbuild/linux-loong64': 0.25.4
4218
-
'@esbuild/linux-mips64el': 0.25.4
4219
-
'@esbuild/linux-ppc64': 0.25.4
4220
-
'@esbuild/linux-riscv64': 0.25.4
4221
-
'@esbuild/linux-s390x': 0.25.4
4222
-
'@esbuild/linux-x64': 0.25.4
4223
-
'@esbuild/netbsd-arm64': 0.25.4
4224
-
'@esbuild/netbsd-x64': 0.25.4
4225
-
'@esbuild/openbsd-arm64': 0.25.4
4226
-
'@esbuild/openbsd-x64': 0.25.4
4227
-
'@esbuild/sunos-x64': 0.25.4
4228
-
'@esbuild/win32-arm64': 0.25.4
4229
-
'@esbuild/win32-ia32': 0.25.4
4230
-
'@esbuild/win32-x64': 0.25.4
4158
+
'@esbuild/aix-ppc64': 0.24.0
4159
+
'@esbuild/android-arm': 0.24.0
4160
+
'@esbuild/android-arm64': 0.24.0
4161
+
'@esbuild/android-x64': 0.24.0
4162
+
'@esbuild/darwin-arm64': 0.24.0
4163
+
'@esbuild/darwin-x64': 0.24.0
4164
+
'@esbuild/freebsd-arm64': 0.24.0
4165
+
'@esbuild/freebsd-x64': 0.24.0
4166
+
'@esbuild/linux-arm': 0.24.0
4167
+
'@esbuild/linux-arm64': 0.24.0
4168
+
'@esbuild/linux-ia32': 0.24.0
4169
+
'@esbuild/linux-loong64': 0.24.0
4170
+
'@esbuild/linux-mips64el': 0.24.0
4171
+
'@esbuild/linux-ppc64': 0.24.0
4172
+
'@esbuild/linux-riscv64': 0.24.0
4173
+
'@esbuild/linux-s390x': 0.24.0
4174
+
'@esbuild/linux-x64': 0.24.0
4175
+
'@esbuild/netbsd-x64': 0.24.0
4176
+
'@esbuild/openbsd-arm64': 0.24.0
4177
+
'@esbuild/openbsd-x64': 0.24.0
4178
+
'@esbuild/sunos-x64': 0.24.0
4179
+
'@esbuild/win32-arm64': 0.24.0
4180
+
'@esbuild/win32-ia32': 0.24.0
4181
+
'@esbuild/win32-x64': 0.24.0
4231
4182
4232
-
esbuild@0.25.5:
4183
+
esbuild@0.24.2:
4233
4184
optionalDependencies:
4234
-
'@esbuild/aix-ppc64': 0.25.5
4235
-
'@esbuild/android-arm': 0.25.5
4236
-
'@esbuild/android-arm64': 0.25.5
4237
-
'@esbuild/android-x64': 0.25.5
4238
-
'@esbuild/darwin-arm64': 0.25.5
4239
-
'@esbuild/darwin-x64': 0.25.5
4240
-
'@esbuild/freebsd-arm64': 0.25.5
4241
-
'@esbuild/freebsd-x64': 0.25.5
4242
-
'@esbuild/linux-arm': 0.25.5
4243
-
'@esbuild/linux-arm64': 0.25.5
4244
-
'@esbuild/linux-ia32': 0.25.5
4245
-
'@esbuild/linux-loong64': 0.25.5
4246
-
'@esbuild/linux-mips64el': 0.25.5
4247
-
'@esbuild/linux-ppc64': 0.25.5
4248
-
'@esbuild/linux-riscv64': 0.25.5
4249
-
'@esbuild/linux-s390x': 0.25.5
4250
-
'@esbuild/linux-x64': 0.25.5
4251
-
'@esbuild/netbsd-arm64': 0.25.5
4252
-
'@esbuild/netbsd-x64': 0.25.5
4253
-
'@esbuild/openbsd-arm64': 0.25.5
4254
-
'@esbuild/openbsd-x64': 0.25.5
4255
-
'@esbuild/sunos-x64': 0.25.5
4256
-
'@esbuild/win32-arm64': 0.25.5
4257
-
'@esbuild/win32-ia32': 0.25.5
4258
-
'@esbuild/win32-x64': 0.25.5
4185
+
'@esbuild/aix-ppc64': 0.24.2
4186
+
'@esbuild/android-arm': 0.24.2
4187
+
'@esbuild/android-arm64': 0.24.2
4188
+
'@esbuild/android-x64': 0.24.2
4189
+
'@esbuild/darwin-arm64': 0.24.2
4190
+
'@esbuild/darwin-x64': 0.24.2
4191
+
'@esbuild/freebsd-arm64': 0.24.2
4192
+
'@esbuild/freebsd-x64': 0.24.2
4193
+
'@esbuild/linux-arm': 0.24.2
4194
+
'@esbuild/linux-arm64': 0.24.2
4195
+
'@esbuild/linux-ia32': 0.24.2
4196
+
'@esbuild/linux-loong64': 0.24.2
4197
+
'@esbuild/linux-mips64el': 0.24.2
4198
+
'@esbuild/linux-ppc64': 0.24.2
4199
+
'@esbuild/linux-riscv64': 0.24.2
4200
+
'@esbuild/linux-s390x': 0.24.2
4201
+
'@esbuild/linux-x64': 0.24.2
4202
+
'@esbuild/netbsd-arm64': 0.24.2
4203
+
'@esbuild/netbsd-x64': 0.24.2
4204
+
'@esbuild/openbsd-arm64': 0.24.2
4205
+
'@esbuild/openbsd-x64': 0.24.2
4206
+
'@esbuild/sunos-x64': 0.24.2
4207
+
'@esbuild/win32-arm64': 0.24.2
4208
+
'@esbuild/win32-ia32': 0.24.2
4209
+
'@esbuild/win32-x64': 0.24.2
4259
4210
4260
4211
escalade@3.2.0: {}
4261
4212
4262
-
esm-env@1.2.2: {}
4263
-
4264
4213
estree-walker@1.0.1: {}
4265
4214
4266
4215
estree-walker@2.0.2: {}
···
4269
4218
4270
4219
exit-hook@2.2.1: {}
4271
4220
4272
-
exsolve@1.0.7: {}
4221
+
exsolve@1.0.4: {}
4273
4222
4274
4223
fast-deep-equal@3.1.3: {}
4275
4224
···
4289
4238
dependencies:
4290
4239
reusify: 1.1.0
4291
4240
4292
-
fdir@6.4.6(picomatch@4.0.2):
4241
+
fdir@6.4.3(picomatch@4.0.2):
4293
4242
optionalDependencies:
4294
4243
picomatch: 4.0.2
4295
4244
···
4363
4312
4364
4313
has-flag@4.0.0: {}
4365
4314
4366
-
hls.js@1.6.5: {}
4315
+
hls.js@1.6.0: {}
4367
4316
4368
4317
html-entities@2.3.3: {}
4369
4318
4370
4319
idb@7.1.1: {}
4371
4320
4372
-
idb@8.0.3: {}
4321
+
idb@8.0.2: {}
4373
4322
4374
4323
inflight@1.0.6:
4375
4324
dependencies:
···
4378
4327
4379
4328
inherits@2.0.4: {}
4380
4329
4381
-
is-arrayish@0.3.2: {}
4330
+
is-arrayish@0.3.2:
4331
+
optional: true
4382
4332
4383
4333
is-binary-path@2.1.0:
4384
4334
dependencies:
···
4478
4428
4479
4429
mime@3.0.0: {}
4480
4430
4481
-
miniflare@4.20250617.3:
4431
+
miniflare@4.20250321.1:
4482
4432
dependencies:
4483
4433
'@cspotcode/source-map-support': 0.8.1
4484
4434
acorn: 8.14.0
4485
4435
acorn-walk: 8.3.2
4486
4436
exit-hook: 2.2.1
4487
4437
glob-to-regexp: 0.4.1
4488
-
sharp: 0.33.5
4489
4438
stoppable: 1.1.0
4490
4439
undici: 5.29.0
4491
-
workerd: 1.20250617.0
4440
+
workerd: 1.20250321.0
4492
4441
ws: 8.18.0
4493
-
youch: 3.3.4
4442
+
youch: 3.2.3
4494
4443
zod: 3.22.3
4495
4444
transitivePeerDependencies:
4496
4445
- bufferutil
···
4498
4447
4499
4448
minimatch@3.1.2:
4500
4449
dependencies:
4501
-
brace-expansion: 1.1.12
4450
+
brace-expansion: 1.1.11
4502
4451
4503
4452
minimatch@5.1.6:
4504
4453
dependencies:
4505
-
brace-expansion: 2.0.2
4454
+
brace-expansion: 2.0.1
4506
4455
4507
4456
minimatch@9.0.5:
4508
4457
dependencies:
4509
-
brace-expansion: 2.0.2
4458
+
brace-expansion: 2.0.1
4510
4459
4511
4460
minipass@7.1.2: {}
4512
4461
···
4542
4491
4543
4492
package-json-from-dist@1.0.1: {}
4544
4493
4545
-
parse5@7.3.0:
4494
+
parse5@7.2.1:
4546
4495
dependencies:
4547
-
entities: 6.0.1
4496
+
entities: 4.5.0
4548
4497
4549
4498
path-is-absolute@1.0.1: {}
4550
4499
···
4571
4520
4572
4521
pirates@4.0.7: {}
4573
4522
4574
-
postcss-import@15.1.0(postcss@8.5.6):
4523
+
postcss-import@15.1.0(postcss@8.5.3):
4575
4524
dependencies:
4576
-
postcss: 8.5.6
4525
+
postcss: 8.5.3
4577
4526
postcss-value-parser: 4.2.0
4578
4527
read-cache: 1.0.0
4579
4528
resolve: 1.22.10
4580
4529
4581
-
postcss-js@4.0.1(postcss@8.5.6):
4530
+
postcss-js@4.0.1(postcss@8.5.3):
4582
4531
dependencies:
4583
4532
camelcase-css: 2.0.1
4584
-
postcss: 8.5.6
4533
+
postcss: 8.5.3
4585
4534
4586
-
postcss-load-config@4.0.2(postcss@8.5.6):
4535
+
postcss-load-config@4.0.2(postcss@8.5.3):
4587
4536
dependencies:
4588
4537
lilconfig: 3.1.3
4589
-
yaml: 2.8.0
4538
+
yaml: 2.7.0
4590
4539
optionalDependencies:
4591
-
postcss: 8.5.6
4540
+
postcss: 8.5.3
4592
4541
4593
-
postcss-nested@6.2.0(postcss@8.5.6):
4542
+
postcss-nested@6.2.0(postcss@8.5.3):
4594
4543
dependencies:
4595
-
postcss: 8.5.6
4544
+
postcss: 8.5.3
4596
4545
postcss-selector-parser: 6.1.2
4597
4546
4598
4547
postcss-selector-parser@6.1.2:
···
4602
4551
4603
4552
postcss-value-parser@4.2.0: {}
4604
4553
4605
-
postcss@8.5.6:
4554
+
postcss@8.5.3:
4606
4555
dependencies:
4607
4556
nanoid: 3.3.11
4608
4557
picocolors: 1.1.1
4609
4558
source-map-js: 1.2.1
4610
4559
4611
-
prettier-plugin-tailwindcss@0.6.13(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.0))(prettier@3.6.0):
4560
+
prettier-plugin-tailwindcss@0.6.11(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3))(prettier@3.5.3):
4612
4561
dependencies:
4613
-
prettier: 3.6.0
4562
+
prettier: 3.5.3
4614
4563
optionalDependencies:
4615
-
'@trivago/prettier-plugin-sort-imports': 5.2.2(prettier@3.6.0)
4564
+
'@trivago/prettier-plugin-sort-imports': 5.2.2(prettier@3.5.3)
4616
4565
4617
-
prettier@3.6.0: {}
4566
+
prettier@3.5.3: {}
4618
4567
4619
4568
pretty-bytes@5.6.0: {}
4620
4569
···
4646
4595
4647
4596
regenerate@1.4.2: {}
4648
4597
4598
+
regenerator-runtime@0.14.1: {}
4599
+
4600
+
regenerator-transform@0.15.2:
4601
+
dependencies:
4602
+
'@babel/runtime': 7.27.0
4603
+
4649
4604
regexpu-core@6.2.0:
4650
4605
dependencies:
4651
4606
regenerate: 1.4.2
···
4675
4630
optionalDependencies:
4676
4631
fsevents: 2.3.3
4677
4632
4678
-
rollup@4.44.0:
4633
+
rollup@4.37.0:
4679
4634
dependencies:
4680
-
'@types/estree': 1.0.8
4635
+
'@types/estree': 1.0.6
4681
4636
optionalDependencies:
4682
-
'@rollup/rollup-android-arm-eabi': 4.44.0
4683
-
'@rollup/rollup-android-arm64': 4.44.0
4684
-
'@rollup/rollup-darwin-arm64': 4.44.0
4685
-
'@rollup/rollup-darwin-x64': 4.44.0
4686
-
'@rollup/rollup-freebsd-arm64': 4.44.0
4687
-
'@rollup/rollup-freebsd-x64': 4.44.0
4688
-
'@rollup/rollup-linux-arm-gnueabihf': 4.44.0
4689
-
'@rollup/rollup-linux-arm-musleabihf': 4.44.0
4690
-
'@rollup/rollup-linux-arm64-gnu': 4.44.0
4691
-
'@rollup/rollup-linux-arm64-musl': 4.44.0
4692
-
'@rollup/rollup-linux-loongarch64-gnu': 4.44.0
4693
-
'@rollup/rollup-linux-powerpc64le-gnu': 4.44.0
4694
-
'@rollup/rollup-linux-riscv64-gnu': 4.44.0
4695
-
'@rollup/rollup-linux-riscv64-musl': 4.44.0
4696
-
'@rollup/rollup-linux-s390x-gnu': 4.44.0
4697
-
'@rollup/rollup-linux-x64-gnu': 4.44.0
4698
-
'@rollup/rollup-linux-x64-musl': 4.44.0
4699
-
'@rollup/rollup-win32-arm64-msvc': 4.44.0
4700
-
'@rollup/rollup-win32-ia32-msvc': 4.44.0
4701
-
'@rollup/rollup-win32-x64-msvc': 4.44.0
4637
+
'@rollup/rollup-android-arm-eabi': 4.37.0
4638
+
'@rollup/rollup-android-arm64': 4.37.0
4639
+
'@rollup/rollup-darwin-arm64': 4.37.0
4640
+
'@rollup/rollup-darwin-x64': 4.37.0
4641
+
'@rollup/rollup-freebsd-arm64': 4.37.0
4642
+
'@rollup/rollup-freebsd-x64': 4.37.0
4643
+
'@rollup/rollup-linux-arm-gnueabihf': 4.37.0
4644
+
'@rollup/rollup-linux-arm-musleabihf': 4.37.0
4645
+
'@rollup/rollup-linux-arm64-gnu': 4.37.0
4646
+
'@rollup/rollup-linux-arm64-musl': 4.37.0
4647
+
'@rollup/rollup-linux-loongarch64-gnu': 4.37.0
4648
+
'@rollup/rollup-linux-powerpc64le-gnu': 4.37.0
4649
+
'@rollup/rollup-linux-riscv64-gnu': 4.37.0
4650
+
'@rollup/rollup-linux-riscv64-musl': 4.37.0
4651
+
'@rollup/rollup-linux-s390x-gnu': 4.37.0
4652
+
'@rollup/rollup-linux-x64-gnu': 4.37.0
4653
+
'@rollup/rollup-linux-x64-musl': 4.37.0
4654
+
'@rollup/rollup-win32-arm64-msvc': 4.37.0
4655
+
'@rollup/rollup-win32-ia32-msvc': 4.37.0
4656
+
'@rollup/rollup-win32-x64-msvc': 4.37.0
4702
4657
fsevents: 2.3.3
4703
4658
4704
4659
run-parallel@1.2.0:
···
4707
4662
4708
4663
semver@6.3.1: {}
4709
4664
4710
-
semver@7.7.2: {}
4665
+
semver@7.7.1:
4666
+
optional: true
4711
4667
4712
4668
serialize-javascript@6.0.2:
4713
4669
dependencies:
4714
4670
randombytes: 2.1.0
4715
4671
4716
-
seroval-plugins@1.3.2(seroval@1.3.2):
4672
+
seroval-plugins@1.2.1(seroval@1.2.1):
4717
4673
dependencies:
4718
-
seroval: 1.3.2
4674
+
seroval: 1.2.1
4719
4675
4720
-
seroval@1.3.2: {}
4676
+
seroval@1.2.1: {}
4721
4677
4722
4678
sharp@0.33.5:
4723
4679
dependencies:
4724
4680
color: 4.2.3
4725
-
detect-libc: 2.0.4
4726
-
semver: 7.7.2
4681
+
detect-libc: 2.0.3
4682
+
semver: 7.7.1
4727
4683
optionalDependencies:
4728
4684
'@img/sharp-darwin-arm64': 0.33.5
4729
4685
'@img/sharp-darwin-x64': 0.33.5
···
4744
4700
'@img/sharp-wasm32': 0.33.5
4745
4701
'@img/sharp-win32-ia32': 0.33.5
4746
4702
'@img/sharp-win32-x64': 0.33.5
4703
+
optional: true
4747
4704
4748
4705
shebang-command@2.0.0:
4749
4706
dependencies:
···
4756
4713
simple-swizzle@0.2.2:
4757
4714
dependencies:
4758
4715
is-arrayish: 0.3.2
4716
+
optional: true
4759
4717
4760
4718
smob@1.5.0: {}
4761
4719
4762
-
solid-floating-ui@0.2.1(@floating-ui/dom@1.7.1)(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)):
4720
+
solid-floating-ui@0.2.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)):
4763
4721
dependencies:
4764
-
'@floating-ui/dom': 1.7.1
4765
-
solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)
4722
+
'@floating-ui/dom': 1.6.13
4723
+
solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)
4766
4724
4767
-
solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7):
4725
+
solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c):
4768
4726
dependencies:
4769
4727
csstype: 3.1.3
4770
-
seroval: 1.3.2
4771
-
seroval-plugins: 1.3.2(seroval@1.3.2)
4728
+
seroval: 1.2.1
4729
+
seroval-plugins: 1.2.1(seroval@1.2.1)
4772
4730
4773
-
solid-refresh@0.6.3(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)):
4731
+
solid-refresh@0.6.3(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)):
4774
4732
dependencies:
4775
-
'@babel/generator': 7.27.5
4776
-
'@babel/helper-module-imports': 7.27.1
4777
-
'@babel/types': 7.27.6
4778
-
solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)
4733
+
'@babel/generator': 7.27.0
4734
+
'@babel/helper-module-imports': 7.25.9
4735
+
'@babel/types': 7.27.0
4736
+
solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)
4779
4737
transitivePeerDependencies:
4780
4738
- supports-color
4781
4739
···
4861
4819
normalize-path: 3.0.0
4862
4820
object-hash: 3.0.0
4863
4821
picocolors: 1.1.1
4864
-
postcss: 8.5.6
4865
-
postcss-import: 15.1.0(postcss@8.5.6)
4866
-
postcss-js: 4.0.1(postcss@8.5.6)
4867
-
postcss-load-config: 4.0.2(postcss@8.5.6)
4868
-
postcss-nested: 6.2.0(postcss@8.5.6)
4822
+
postcss: 8.5.3
4823
+
postcss-import: 15.1.0(postcss@8.5.3)
4824
+
postcss-js: 4.0.1(postcss@8.5.3)
4825
+
postcss-load-config: 4.0.2(postcss@8.5.3)
4826
+
postcss-nested: 6.2.0(postcss@8.5.3)
4869
4827
postcss-selector-parser: 6.1.2
4870
4828
resolve: 1.22.10
4871
4829
sucrase: 3.35.0
···
4881
4839
type-fest: 0.16.0
4882
4840
unique-string: 2.0.0
4883
4841
4884
-
terser@5.43.1:
4842
+
terser@5.39.0:
4885
4843
dependencies:
4886
4844
'@jridgewell/source-map': 0.3.6
4887
-
acorn: 8.15.0
4845
+
acorn: 8.14.1
4888
4846
commander: 2.20.3
4889
4847
source-map-support: 0.5.21
4890
4848
···
4896
4854
dependencies:
4897
4855
any-promise: 1.3.0
4898
4856
4899
-
tinyglobby@0.2.14:
4857
+
tinyglobby@0.2.12:
4900
4858
dependencies:
4901
-
fdir: 6.4.6(picomatch@4.0.2)
4859
+
fdir: 6.4.3(picomatch@4.0.2)
4902
4860
picomatch: 4.0.2
4903
4861
4904
4862
to-regex-range@5.0.1:
···
4916
4874
4917
4875
type-fest@0.16.0: {}
4918
4876
4919
-
typescript@5.8.3: {}
4877
+
typescript@5.7.2: {}
4920
4878
4921
-
ufo@1.6.1: {}
4879
+
ufo@1.5.4: {}
4922
4880
4923
4881
undici@5.29.0:
4924
4882
dependencies:
4925
4883
'@fastify/busboy': 2.1.1
4926
4884
4927
-
unenv@2.0.0-rc.17:
4885
+
unenv@2.0.0-rc.15:
4928
4886
dependencies:
4929
4887
defu: 6.1.4
4930
-
exsolve: 1.0.7
4888
+
exsolve: 1.0.4
4931
4889
ohash: 2.0.11
4932
4890
pathe: 2.0.3
4933
-
ufo: 1.6.1
4891
+
ufo: 1.5.4
4934
4892
4935
4893
unicode-canonical-property-names-ecmascript@2.0.1: {}
4936
4894
···
4951
4909
4952
4910
upath@1.2.0: {}
4953
4911
4954
-
update-browserslist-db@1.1.3(browserslist@4.25.0):
4912
+
update-browserslist-db@1.1.3(browserslist@4.24.4):
4955
4913
dependencies:
4956
-
browserslist: 4.25.0
4914
+
browserslist: 4.24.4
4957
4915
escalade: 3.2.0
4958
4916
picocolors: 1.1.1
4959
4917
4960
4918
util-deprecate@1.0.2: {}
4961
4919
4962
-
validate-html-nesting@1.2.3: {}
4920
+
validate-html-nesting@1.2.2: {}
4963
4921
4964
-
vite-plugin-pwa@0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)):
4922
+
vite-plugin-pwa@0.21.0(patch_hash=003379ded749ad87080f87b428b17f04c4c88b6b64544df4d928aab76fbf6325)(@types/babel__core@7.20.5)(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)):
4965
4923
dependencies:
4966
-
debug: 4.4.1
4924
+
debug: 4.4.0
4967
4925
pretty-bytes: 6.1.1
4968
-
tinyglobby: 0.2.14
4969
-
vite: 6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)
4926
+
tinyglobby: 0.2.12
4927
+
vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)
4970
4928
workbox-build: 7.3.0(@types/babel__core@7.20.5)
4971
4929
workbox-window: 7.3.0
4972
4930
transitivePeerDependencies:
4973
4931
- '@types/babel__core'
4974
4932
- supports-color
4975
4933
4976
-
vite-plugin-solid@2.11.6(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))(vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)):
4934
+
vite-plugin-solid@2.11.6(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)):
4977
4935
dependencies:
4978
-
'@babel/core': 7.27.4
4936
+
'@babel/core': 7.26.10
4979
4937
'@types/babel__core': 7.20.5
4980
-
babel-preset-solid: 1.9.6(@babel/core@7.27.4)
4938
+
babel-preset-solid: 1.9.5(@babel/core@7.26.10)
4981
4939
merge-anything: 5.1.7
4982
-
solid-js: 1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7)
4983
-
solid-refresh: 0.6.3(solid-js@1.9.7(patch_hash=9cf3f9930aa2f8d4e60502a75153adf9468eb53b42f69e86cac05dfaea3f82e7))
4984
-
vite: 6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)
4985
-
vitefu: 1.0.7(vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0))
4940
+
solid-js: 1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c)
4941
+
solid-refresh: 0.6.3(solid-js@1.9.5(patch_hash=9a1f52b880286fb75dd8b75f1dbd1f4c0ed3fc3e607aeacc391a7e5ea64bbf9c))
4942
+
vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)
4943
+
vitefu: 1.0.6(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0))
4986
4944
transitivePeerDependencies:
4987
4945
- supports-color
4988
4946
4989
-
vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0):
4947
+
vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0):
4990
4948
dependencies:
4991
-
esbuild: 0.25.5
4992
-
fdir: 6.4.6(picomatch@4.0.2)
4993
-
picomatch: 4.0.2
4994
-
postcss: 8.5.6
4995
-
rollup: 4.44.0
4996
-
tinyglobby: 0.2.14
4949
+
esbuild: 0.24.0
4950
+
postcss: 8.5.3
4951
+
rollup: 4.37.0
4997
4952
optionalDependencies:
4998
4953
fsevents: 2.3.3
4999
4954
jiti: 1.21.7
5000
-
terser: 5.43.1
5001
-
yaml: 2.8.0
4955
+
terser: 5.39.0
4956
+
yaml: 2.7.0
5002
4957
5003
-
vitefu@1.0.7(vite@6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)):
4958
+
vitefu@1.0.6(vite@6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)):
5004
4959
optionalDependencies:
5005
-
vite: 6.3.5(jiti@1.21.7)(terser@5.43.1)(yaml@2.8.0)
4960
+
vite: 6.0.5(jiti@1.21.7)(terser@5.39.0)(yaml@2.7.0)
5006
4961
5007
4962
webidl-conversions@4.0.2: {}
5008
4963
5009
-
webm-muxer@5.1.3:
4964
+
webm-muxer@5.1.1:
5010
4965
dependencies:
5011
-
'@types/dom-webcodecs': 0.1.15
4966
+
'@types/dom-webcodecs': 0.1.14
5012
4967
'@types/wicg-file-system-access': 2020.9.8
5013
4968
5014
4969
whatwg-url@7.1.0:
···
5033
4988
workbox-build@7.3.0(@types/babel__core@7.20.5):
5034
4989
dependencies:
5035
4990
'@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1)
5036
-
'@babel/core': 7.27.4
5037
-
'@babel/preset-env': 7.27.2(@babel/core@7.27.4)
5038
-
'@babel/runtime': 7.27.6
5039
-
'@rollup/plugin-babel': 5.3.1(@babel/core@7.27.4)(@types/babel__core@7.20.5)(rollup@2.79.2)
4991
+
'@babel/core': 7.26.10
4992
+
'@babel/preset-env': 7.26.9(@babel/core@7.26.10)
4993
+
'@babel/runtime': 7.27.0
4994
+
'@rollup/plugin-babel': 5.3.1(@babel/core@7.26.10)(@types/babel__core@7.20.5)(rollup@2.79.2)
5040
4995
'@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2)
5041
4996
'@rollup/plugin-replace': 2.4.2(rollup@2.79.2)
5042
4997
'@rollup/plugin-terser': 0.4.4(rollup@2.79.2)
···
5134
5089
'@types/trusted-types': 2.0.7
5135
5090
workbox-core: 7.3.0
5136
5091
5137
-
workerd@1.20250617.0:
5092
+
workerd@1.20250321.0:
5138
5093
optionalDependencies:
5139
-
'@cloudflare/workerd-darwin-64': 1.20250617.0
5140
-
'@cloudflare/workerd-darwin-arm64': 1.20250617.0
5141
-
'@cloudflare/workerd-linux-64': 1.20250617.0
5142
-
'@cloudflare/workerd-linux-arm64': 1.20250617.0
5143
-
'@cloudflare/workerd-windows-64': 1.20250617.0
5094
+
'@cloudflare/workerd-darwin-64': 1.20250321.0
5095
+
'@cloudflare/workerd-darwin-arm64': 1.20250321.0
5096
+
'@cloudflare/workerd-linux-64': 1.20250321.0
5097
+
'@cloudflare/workerd-linux-arm64': 1.20250321.0
5098
+
'@cloudflare/workerd-windows-64': 1.20250321.0
5144
5099
5145
-
wrangler@4.20.5:
5100
+
wrangler@4.6.0:
5146
5101
dependencies:
5147
5102
'@cloudflare/kv-asset-handler': 0.4.0
5148
-
'@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0)
5103
+
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0)
5149
5104
blake3-wasm: 2.1.5
5150
-
esbuild: 0.25.4
5151
-
miniflare: 4.20250617.3
5105
+
esbuild: 0.24.2
5106
+
miniflare: 4.20250321.1
5152
5107
path-to-regexp: 6.3.0
5153
-
unenv: 2.0.0-rc.17
5154
-
workerd: 1.20250617.0
5108
+
unenv: 2.0.0-rc.15
5109
+
workerd: 1.20250321.0
5155
5110
optionalDependencies:
5156
5111
fsevents: 2.3.3
5112
+
sharp: 0.33.5
5157
5113
transitivePeerDependencies:
5158
5114
- bufferutil
5159
5115
- utf-8-validate
···
5176
5132
5177
5133
yallist@3.1.1: {}
5178
5134
5179
-
yaml@2.8.0: {}
5135
+
yaml@2.7.0: {}
5180
5136
5181
-
youch@3.3.4:
5137
+
youch@3.2.3:
5182
5138
dependencies:
5183
-
cookie: 0.7.2
5139
+
cookie: 0.5.0
5184
5140
mustache: 4.2.0
5185
5141
stacktracey: 2.1.8
5186
5142
+12
public/oauth/client-metadata.json
+12
public/oauth/client-metadata.json
···
1
+
{
2
+
"client_id": "https://aglais.pages.dev/oauth/client-metadata.json",
3
+
"client_uri": "https://aglais.pages.dev",
4
+
"client_name": "Aglais",
5
+
"application_type": "web",
6
+
"scope": "atproto transition:generic transition:chat.bsky",
7
+
"grant_types": ["authorization_code", "refresh_token"],
8
+
"redirect_uris": ["https://aglais.pages.dev/oauth/callback"],
9
+
"response_types": ["code"],
10
+
"token_endpoint_auth_method": "none",
11
+
"dpop_bound_access_tokens": true
12
+
}
-12
public/oauth-client-metadata.json
-12
public/oauth-client-metadata.json
···
1
-
{
2
-
"client_id": "https://aglais.pages.dev/oauth-client-metadata.json",
3
-
"client_uri": "https://aglais.pages.dev",
4
-
"client_name": "Aglais",
5
-
"application_type": "web",
6
-
"scope": "atproto transition:generic transition:chat.bsky",
7
-
"grant_types": ["authorization_code", "refresh_token"],
8
-
"redirect_uris": ["https://aglais.pages.dev/oauth/callback"],
9
-
"response_types": ["code"],
10
-
"token_endpoint_auth_method": "none",
11
-
"dpop_bound_access_tokens": true
12
-
}
+1
-1
src/api/cache/post-shadow.ts
+1
-1
src/api/cache/post-shadow.ts
···
1
1
import { type Accessor, batch, createRenderEffect, createSignal, onCleanup } from 'solid-js';
2
2
3
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
3
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
4
4
import { EventEmitter } from '@mary/events';
5
5
import type { QueryClient } from '@mary/solid-query';
6
6
+4
-5
src/api/cache/profile-shadow.ts
+4
-5
src/api/cache/profile-shadow.ts
···
1
1
import { type Accessor, batch, createRenderEffect, createSignal, onCleanup } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import type { Did } from '@atcute/lexicons';
3
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
5
4
import { EventEmitter } from '@mary/events';
6
5
import type { QueryClient } from '@mary/solid-query';
7
6
···
34
33
| AppBskyActorDefs.ProfileViewBasic
35
34
| AppBskyActorDefs.ProfileViewDetailed;
36
35
37
-
const emitter = new EventEmitter<{ [uri: Did]: [] }>();
36
+
const emitter = new EventEmitter<{ [uri: At.DID]: [] }>();
38
37
const shadows = new WeakMap<AllProfileView, ProfileShadow>();
39
38
40
39
export const useProfileShadow = (profile: AccessorMaybe<AllProfileView>): Accessor<ProfileShadowView> => {
···
67
66
};
68
67
};
69
68
70
-
export const updateProfileShadow = (queryClient: QueryClient, did: Did, value: Partial<ProfileShadow>) => {
69
+
export const updateProfileShadow = (queryClient: QueryClient, did: At.DID, value: Partial<ProfileShadow>) => {
71
70
for (const profile of findProfilesInCache(queryClient, did)) {
72
71
shadows.set(profile, { ...shadows.get(profile), ...value });
73
72
}
···
75
74
batch(() => emitter.emit(did));
76
75
};
77
76
78
-
export function findProfilesInCache(queryClient: QueryClient, did: Did): Generator<AllProfileView> {
77
+
export function findProfilesInCache(queryClient: QueryClient, did: At.DID): Generator<AllProfileView> {
79
78
return iterateQueryCache<AllProfileView>(queryClient, [
80
79
findAllProfilesInBookmarkFeed(did),
81
80
findAllProfilesInNotificationFeed(did),
+14
-7
src/api/models/post-thread.tsx
+14
-7
src/api/models/post-thread.tsx
···
1
-
import type { AppBskyFeedDefs, AppBskyFeedGetPostThread, AppBskyFeedPost } from '@atcute/bluesky';
2
-
import type { $type, Did } from '@atcute/lexicons';
1
+
import type {
2
+
AppBskyFeedDefs,
3
+
AppBskyFeedGetPostThread,
4
+
AppBskyFeedPost,
5
+
At,
6
+
Brand,
7
+
} from '@atcute/client/lexicons';
3
8
4
9
import type { ThreadViewPreferences } from '~/lib/preferences/account';
5
10
···
64
69
export interface PostDescendantItem extends BaseDescendant {
65
70
type: 'post';
66
71
post: AppBskyFeedDefs.PostView;
72
+
context: AppBskyFeedDefs.ThreadContext | undefined;
67
73
prev: boolean;
68
74
next: boolean;
69
75
}
···
82
88
83
89
export const fillModerationCache = (
84
90
cache: ThreadModerationCache,
85
-
thread: AppBskyFeedGetPostThread.$output['thread'],
91
+
thread: AppBskyFeedGetPostThread.Output['thread'],
86
92
options: ModerationOptions,
87
93
) => {
88
94
if (thread.$type === 'app.bsky.feed.defs#threadViewPost') {
···
111
117
moderationOptions,
112
118
selfDid,
113
119
}: {
114
-
thread: $type.enforce<AppBskyFeedDefs.ThreadViewPost>;
120
+
thread: Brand.Union<AppBskyFeedDefs.ThreadViewPost>;
115
121
preferences: ThreadViewPreferences;
116
122
moderationOptions: ModerationOptions;
117
-
selfDid?: Did;
123
+
selfDid?: At.DID;
118
124
}): ThreadData => {
119
125
const { followsFirst, sort, treeView } = preferences;
120
126
···
161
167
162
168
if (last && last.type === 'post') {
163
169
const post = last.post;
164
-
const reply = (post.record as AppBskyFeedPost.Main).reply;
170
+
const reply = (post.record as AppBskyFeedPost.Record).reply;
165
171
166
172
if (reply) {
167
173
const uri = reply.parent.uri;
···
200
206
201
207
// Filter the replies to only what we want
202
208
const items = replies.filter(
203
-
(x): x is $type.enforce<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost> => {
209
+
(x): x is Brand.Union<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost> => {
204
210
return (
205
211
x.$type === 'app.bsky.feed.defs#threadViewPost' ||
206
212
(x.$type === 'app.bsky.feed.defs#blockedPost' && !x.author.viewer?.blockedBy)
···
324
330
id: post.uri,
325
331
type: 'post',
326
332
post: post,
333
+
context: reply.threadContext,
327
334
prev: depth !== 0,
328
335
next: children.length !== 0,
329
336
lines: nlines,
+1
-1
src/api/models/timeline.ts
+1
-1
src/api/models/timeline.ts
+2
-3
src/api/moderation/entities/generic.ts
+2
-3
src/api/moderation/entities/generic.ts
···
1
-
import type { ComAtprotoLabelDefs } from '@atcute/atproto';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { At, ComAtprotoLabelDefs } from '@atcute/client/lexicons';
3
2
4
3
import { type ModerationCause, type ModerationOptions, decideLabelModeration } from '..';
5
4
import { TargetContent } from '../constants';
6
5
7
6
export const moderateGeneric = (
8
7
item: { labels?: ComAtprotoLabelDefs.Label[] },
9
-
userDid: Did,
8
+
userDid: At.DID,
10
9
opts: ModerationOptions,
11
10
) => {
12
11
const accu: ModerationCause[] = [];
+2
-2
src/api/moderation/entities/post.ts
+2
-2
src/api/moderation/entities/post.ts
···
1
-
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons';
2
2
3
3
import { unwrapPostEmbedText } from '~/api/utils/post';
4
4
···
14
14
15
15
export const moderatePost = (post: AppBskyFeedDefs.PostView, opts: ModerationOptions) => {
16
16
const author = post.author;
17
-
const record = post.record as AppBskyFeedPost.Main;
17
+
const record = post.record as AppBskyFeedPost.Record;
18
18
const text = record.text + unwrapPostEmbedText(record.embed);
19
19
20
20
const accu: ModerationCause[] = moderateProfile(author, opts);
+1
-1
src/api/moderation/entities/profile.ts
+1
-1
src/api/moderation/entities/profile.ts
+2
-2
src/api/moderation/entities/quote.ts
+2
-2
src/api/moderation/entities/quote.ts
···
1
-
import type { AppBskyEmbedRecord, AppBskyFeedPost } from '@atcute/bluesky';
1
+
import type { AppBskyEmbedRecord, AppBskyFeedPost } from '@atcute/client/lexicons';
2
2
3
3
import { unwrapPostEmbedText } from '~/api/utils/post';
4
4
···
14
14
15
15
export const moderateQuote = (quote: AppBskyEmbedRecord.ViewRecord, opts: ModerationOptions) => {
16
16
const author = quote.author;
17
-
const record = quote.value as AppBskyFeedPost.Main;
17
+
const record = quote.value as AppBskyFeedPost.Record;
18
18
const text = record.text + unwrapPostEmbedText(record.embed);
19
19
20
20
const accu: ModerationCause[] = moderateProfile(author, opts);
+6
-7
src/api/moderation/index.ts
+6
-7
src/api/moderation/index.ts
···
1
-
import type { ComAtprotoLabelDefs } from '@atcute/atproto';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { At, ComAtprotoLabelDefs } from '@atcute/client/lexicons';
3
2
4
3
import {
5
4
BlurContent,
···
281
280
282
281
export interface ModerationLabeler {
283
282
/** DID of the labeler */
284
-
did: Did;
283
+
did: At.DID;
285
284
/** Profile details of the labeler */
286
285
profile: {
287
286
avatar?: string;
···
310
309
/** Preferences for global-defined labels */
311
310
labels: LabelPreferenceMapping;
312
311
/** Preferences for labels from subscribed labelers */
313
-
labelers: Record<Did, ModerationLabelerPreferences>;
312
+
labelers: Record<At.DID, ModerationLabelerPreferences>;
314
313
/** Keyword filters */
315
314
keywords: KeywordFilter[];
316
315
317
316
/** List of users to hide reposts from */
318
-
hideReposts: Did[];
317
+
hideReposts: At.DID[];
319
318
}
320
319
321
320
export interface ModerationOptions {
322
321
_filtersCache?: [raw: string, match: RegExp][];
323
322
324
323
preferences: ModerationPreferences;
325
-
labelerDefinitions: Record<Did, ModerationLabeler>;
324
+
labelerDefinitions: Record<At.DID, ModerationLabeler>;
326
325
}
327
326
328
327
export const decideLabelModeration = (
329
328
accu: ModerationCause[],
330
329
target: LabelTarget,
331
330
labels: Label[] | undefined,
332
-
userDid: Did,
331
+
userDid: At.DID,
333
332
opts: ModerationOptions,
334
333
) => {
335
334
if (labels /* && labels.length > 0 */) {
+1
-1
src/api/moderation/labeler.ts
+1
-1
src/api/moderation/labeler.ts
+10
-10
src/api/mutations/post.ts
+10
-10
src/api/mutations/post.ts
···
1
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
2
2
import { useQueryClient } from '@mary/solid-query';
3
3
4
4
import { useAgent } from '~/lib/states/agent';
5
5
import { useSession } from '~/lib/states/session';
6
6
7
7
import { type PostShadowView, updatePostShadow } from '../cache/post-shadow';
8
-
import { assertCanonicalResourceUri } from '../types/at-uri';
8
+
import { parseAtUri } from '../types/at-uri';
9
9
import { getCurrentDate } from '../utils/misc';
10
10
import { createRecord, deleteRecord } from '../utils/records';
11
11
import { createToggleMutationQueue } from '../utils/toggle-mutation';
···
15
15
shadow: () => PostShadowView,
16
16
) => {
17
17
const queryClient = useQueryClient();
18
-
const { client } = useAgent();
18
+
const { rpc } = useAgent();
19
19
const { currentAccount } = useSession();
20
20
21
21
const postUri = post().uri;
···
30
30
return prevLikeUri;
31
31
}
32
32
33
-
const result = await createRecord(client, {
33
+
const result = await createRecord(rpc, {
34
34
repo: currentAccount!.did,
35
35
collection: 'app.bsky.feed.like',
36
36
record: {
···
45
45
46
46
return result.uri;
47
47
} else if (prevLikeUri) {
48
-
const uri = assertCanonicalResourceUri(prevLikeUri);
48
+
const uri = parseAtUri(prevLikeUri);
49
49
50
-
await deleteRecord(client, {
50
+
await deleteRecord(rpc, {
51
51
repo: currentAccount!.did,
52
52
collection: 'app.bsky.feed.like',
53
53
rkey: uri.rkey,
···
74
74
shadow: () => PostShadowView,
75
75
) => {
76
76
const queryClient = useQueryClient();
77
-
const { client } = useAgent();
77
+
const { rpc } = useAgent();
78
78
const { currentAccount } = useSession();
79
79
80
80
const postUri = post().uri;
···
89
89
return prevRepostUri;
90
90
}
91
91
92
-
const result = await createRecord(client, {
92
+
const result = await createRecord(rpc, {
93
93
repo: currentAccount!.did,
94
94
collection: 'app.bsky.feed.repost',
95
95
record: {
···
104
104
105
105
return result.uri;
106
106
} else if (prevRepostUri) {
107
-
const uri = assertCanonicalResourceUri(prevRepostUri);
107
+
const uri = parseAtUri(prevRepostUri);
108
108
109
-
await deleteRecord(client, {
109
+
await deleteRecord(rpc, {
110
110
repo: currentAccount!.did,
111
111
collection: 'app.bsky.feed.repost',
112
112
rkey: uri.rkey,
+6
-6
src/api/mutations/profile.ts
+6
-6
src/api/mutations/profile.ts
···
1
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
1
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
2
2
import { useQueryClient } from '@mary/solid-query';
3
3
4
4
import { useAgent } from '~/lib/states/agent';
5
5
import { useSession } from '~/lib/states/session';
6
6
7
7
import { type ProfileShadowView, updateProfileShadow } from '../cache/profile-shadow';
8
-
import { assertCanonicalResourceUri } from '../types/at-uri';
8
+
import { parseAtUri } from '../types/at-uri';
9
9
import { getCurrentDate } from '../utils/misc';
10
10
import { createRecord, deleteRecord } from '../utils/records';
11
11
import { createToggleMutationQueue } from '../utils/toggle-mutation';
···
15
15
shadow: () => ProfileShadowView,
16
16
) => {
17
17
const queryClient = useQueryClient();
18
-
const { client } = useAgent();
18
+
const { rpc } = useAgent();
19
19
const { currentAccount } = useSession();
20
20
21
21
const did = profile().did;
···
30
30
return prevFollowUri;
31
31
}
32
32
33
-
const result = await createRecord(client, {
33
+
const result = await createRecord(rpc, {
34
34
repo: currentAccount!.did,
35
35
collection: 'app.bsky.graph.follow',
36
36
record: {
···
42
42
43
43
return result.uri;
44
44
} else if (prevFollowUri) {
45
-
const uri = assertCanonicalResourceUri(prevFollowUri);
45
+
const uri = parseAtUri(prevFollowUri);
46
46
47
-
await deleteRecord(client, {
47
+
await deleteRecord(rpc, {
48
48
repo: currentAccount!.did,
49
49
collection: 'app.bsky.graph.follow',
50
50
rkey: uri.rkey,
+4
-9
src/api/queries/blob.ts
+4
-9
src/api/queries/blob.ts
···
1
-
import { type Client, ok } from '@atcute/client';
2
-
import type { Blob as AtpBlob } from '@atcute/lexicons';
1
+
import type { XRPC } from '@atcute/client';
2
+
import type { At } from '@atcute/client/lexicons';
3
3
4
-
export const uploadBlob = async (client: Client, blob: Blob): Promise<AtpBlob<any>> => {
5
-
const data = await ok(
6
-
client.post('com.atproto.repo.uploadBlob', {
7
-
input: blob,
8
-
}),
9
-
);
10
-
4
+
export const uploadBlob = async (rpc: XRPC, blob: Blob): Promise<At.Blob<any>> => {
5
+
const { data } = await rpc.call('com.atproto.repo.uploadBlob', { data: blob });
11
6
return data.blob;
12
7
};
+8
-11
src/api/queries/bookmark-feed.ts
+8
-11
src/api/queries/bookmark-feed.ts
···
1
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
2
1
import { tokenize } from '@atcute/bluesky-search-parser';
3
-
import { ok } from '@atcute/client';
2
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
4
3
import { mapDefined } from '@mary/array-fns';
5
4
import { filter, map, take, toArray } from '@mary/async-iterator-fns';
6
5
import { createInfiniteQuery, createQuery } from '@mary/solid-query';
···
42
41
43
42
export const createBookmarkFeedQuery = (tagId: () => string, search: () => string) => {
44
43
const bookmarks = inject(BookmarksService);
45
-
const { client } = useAgent();
44
+
const { rpc } = useAgent();
46
45
47
46
const listing = createInfiniteQuery(() => {
48
47
const $tagId = tagId();
···
96
95
let map: Map<string, AppBskyFeedDefs.PostView>;
97
96
98
97
try {
99
-
const data = await ok(
100
-
client.get('app.bsky.feed.getPosts', {
101
-
signal: ctx.signal,
102
-
params: {
103
-
uris: raws.map((item) => item.view.uri),
104
-
},
105
-
}),
106
-
);
98
+
const { data } = await rpc.get('app.bsky.feed.getPosts', {
99
+
signal: ctx.signal,
100
+
params: {
101
+
uris: raws.map((item) => item.view.uri),
102
+
},
103
+
});
107
104
108
105
map = new Map(data.posts.map((view) => [view.uri, view]));
109
106
} catch {}
+2
-3
src/api/queries/composer.ts
+2
-3
src/api/queries/composer.ts
···
1
-
import type { GenericUri } from '@atcute/lexicons';
2
1
import { createQuery } from '@mary/solid-query';
3
2
4
3
const LINK_PROXY_ENDPOINT = 'https://cardyb.bsky.app/v1/extract';
···
13
12
}
14
13
15
14
export interface LinkMeta {
16
-
uri: GenericUri;
15
+
uri: string;
17
16
title: string;
18
17
description: string;
19
18
thumb: Blob | undefined;
···
57
56
}
58
57
59
58
const meta: LinkMeta = {
60
-
uri: $uri as GenericUri,
59
+
uri: $uri,
61
60
title: data.title,
62
61
description: data.description,
63
62
thumb: thumb,
+13
-17
src/api/queries/feed.ts
+13
-17
src/api/queries/feed.ts
···
1
1
import { modifyMutable, reconcile } from 'solid-js/store';
2
2
3
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
4
-
import { ok } from '@atcute/client';
5
-
import { type Did } from '@atcute/lexicons';
6
-
import { isDid } from '@atcute/lexicons/syntax';
3
+
import type { AppBskyFeedDefs, At } from '@atcute/client/lexicons';
7
4
import { createQuery } from '@mary/solid-query';
8
5
9
6
import type { SavedGeneratorFeed } from '~/lib/preferences/account';
···
11
8
import { useSession } from '~/lib/states/session';
12
9
import { omit } from '~/lib/utils/misc';
13
10
14
-
import { assertCanonicalResourceUri, makeAtUri } from '../types/at-uri';
11
+
import { makeAtUri, parseAtUri } from '../types/at-uri';
12
+
import { isDid } from '../types/identity';
15
13
16
14
import { resolveHandle } from './handle';
17
15
18
16
export const createFeedMetaQuery = (feedUri: () => string) => {
19
-
const { client } = useAgent();
17
+
const { rpc } = useAgent();
20
18
const { currentAccount } = useSession();
21
19
22
20
return createQuery((queryClient) => {
···
25
23
return {
26
24
queryKey: ['feed-meta', $feedUri],
27
25
async queryFn(ctx): Promise<AppBskyFeedDefs.GeneratorView> {
28
-
const uri = assertCanonicalResourceUri($feedUri);
26
+
const uri = parseAtUri($feedUri);
29
27
30
-
let did: Did;
28
+
let did: At.DID;
31
29
if (isDid(uri.repo)) {
32
30
did = uri.repo;
33
31
} else {
34
-
did = await resolveHandle(client, uri.repo, ctx.signal);
32
+
did = await resolveHandle(rpc, uri.repo, ctx.signal);
35
33
}
36
34
37
-
const data = await ok(
38
-
client.get('app.bsky.feed.getFeedGenerator', {
39
-
signal: ctx.signal,
40
-
params: {
41
-
feed: makeAtUri(did, uri.collection, uri.rkey),
42
-
},
43
-
}),
44
-
);
35
+
const { data } = await rpc.get('app.bsky.feed.getFeedGenerator', {
36
+
signal: ctx.signal,
37
+
params: {
38
+
feed: makeAtUri(did, uri.collection, uri.rkey),
39
+
},
40
+
});
45
41
46
42
if (currentAccount) {
47
43
const found = currentAccount.preferences.feeds.find((item): item is SavedGeneratorFeed => {
+11
-14
src/api/queries/handle.ts
+11
-14
src/api/queries/handle.ts
···
1
-
import { type Client, ok } from '@atcute/client';
2
-
import type { Handle } from '@atcute/lexicons';
1
+
import { XRPC } from '@atcute/client';
3
2
import { createQuery } from '@mary/solid-query';
4
3
5
4
import { useAgent } from '~/lib/states/agent';
6
5
7
-
export const useResolveHandleQuery = (handle: () => Handle) => {
8
-
const { client } = useAgent();
6
+
export const useResolveHandleQuery = (handle: () => string) => {
7
+
const { rpc } = useAgent();
9
8
10
9
return createQuery(() => {
11
10
const $handle = handle();
···
13
12
return {
14
13
queryKey: ['resolve-handle', $handle],
15
14
async queryFn(ctx) {
16
-
return resolveHandle(client, $handle, ctx.signal);
15
+
return resolveHandle(rpc, $handle, ctx.signal);
17
16
},
18
17
};
19
18
});
20
19
};
21
20
22
-
export const resolveHandle = async (client: Client, handle: Handle, signal?: AbortSignal) => {
23
-
const data = await ok(
24
-
client.get('com.atproto.identity.resolveHandle', {
25
-
signal: signal,
26
-
params: {
27
-
handle: handle,
28
-
},
29
-
}),
30
-
);
21
+
export const resolveHandle = async (rpc: XRPC, handle: string, signal?: AbortSignal) => {
22
+
const { data } = await rpc.get('com.atproto.identity.resolveHandle', {
23
+
signal: signal,
24
+
params: {
25
+
handle: handle,
26
+
},
27
+
});
31
28
32
29
return data.did;
33
30
};
+14
-17
src/api/queries/labeler.ts
+14
-17
src/api/queries/labeler.ts
···
1
-
import type { AppBskyLabelerDefs } from '@atcute/bluesky';
2
-
import { ClientResponseError, ok } from '@atcute/client';
3
-
import type { Did } from '@atcute/lexicons';
1
+
import { XRPCError } from '@atcute/client';
2
+
import type { AppBskyLabelerDefs, At } from '@atcute/client/lexicons';
4
3
import { createQuery } from '@mary/solid-query';
5
4
6
5
import { useAgent } from '~/lib/states/agent';
7
6
8
7
import { interpretLabelerDefinition } from '../moderation/labeler';
9
8
10
-
export const createLabelerMetaQuery = (did: () => Did) => {
11
-
const { client } = useAgent();
9
+
export const createLabelerMetaQuery = (did: () => At.DID) => {
10
+
const { rpc } = useAgent();
12
11
13
12
const query = createQuery(() => {
14
13
const $did = did();
···
16
15
return {
17
16
queryKey: ['labeler-definition', $did],
18
17
async queryFn(ctx) {
19
-
const data = await ok(
20
-
client.get('app.bsky.labeler.getServices', {
21
-
signal: ctx.signal,
22
-
params: {
23
-
dids: [$did],
24
-
detailed: true,
25
-
},
26
-
}),
27
-
);
18
+
const { data } = await rpc.get('app.bsky.labeler.getServices', {
19
+
signal: ctx.signal,
20
+
params: {
21
+
dids: [$did],
22
+
detailed: true,
23
+
},
24
+
});
28
25
29
26
const service = data.views[0] as AppBskyLabelerDefs.LabelerViewDetailed;
30
27
31
28
if (!service) {
32
-
throw new ClientResponseError({
33
-
status: 400,
34
-
data: { error: `NotFound`, message: `Labeler not found: ${$did}` },
29
+
throw new XRPCError(400, {
30
+
kind: 'NotFound',
31
+
description: `Labeler not found: ${$did}`,
35
32
});
36
33
}
37
34
+10
-14
src/api/queries/list-members.ts
+10
-14
src/api/queries/list-members.ts
···
1
-
import { ok } from '@atcute/client';
2
-
import type { ResourceUri } from '@atcute/lexicons';
3
1
import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
4
2
5
3
import { useAgent } from '~/lib/states/agent';
6
4
7
-
export const createListMembersQuery = (listUri: () => ResourceUri) => {
8
-
const { client } = useAgent();
5
+
export const createListMembersQuery = (listUri: () => string) => {
6
+
const { rpc } = useAgent();
9
7
10
8
return createInfiniteQuery(() => {
11
9
const $listUri = listUri();
···
13
11
return {
14
12
queryKey: ['list-members', $listUri],
15
13
async queryFn(ctx: QC<never, string | undefined>) {
16
-
const data = await ok(
17
-
client.get('app.bsky.graph.getList', {
18
-
signal: ctx.signal,
19
-
params: {
20
-
list: $listUri,
21
-
limit: 50,
22
-
cursor: ctx.pageParam,
23
-
},
24
-
}),
25
-
);
14
+
const { data } = await rpc.get('app.bsky.graph.getList', {
15
+
signal: ctx.signal,
16
+
params: {
17
+
list: $listUri,
18
+
limit: 50,
19
+
cursor: ctx.pageParam,
20
+
},
21
+
});
26
22
27
23
return {
28
24
cursor: data.cursor,
+14
-18
src/api/queries/list.ts
+14
-18
src/api/queries/list.ts
···
1
1
import { modifyMutable, reconcile } from 'solid-js/store';
2
2
3
-
import type { AppBskyGraphDefs } from '@atcute/bluesky';
4
-
import { ok } from '@atcute/client';
5
-
import { type Did } from '@atcute/lexicons';
6
-
import { isDid } from '@atcute/lexicons/syntax';
3
+
import type { AppBskyGraphDefs, At } from '@atcute/client/lexicons';
7
4
import { createQuery } from '@mary/solid-query';
8
5
9
6
import type { SavedListFeed } from '~/lib/preferences/account';
···
11
8
import { useSession } from '~/lib/states/session';
12
9
import { omit } from '~/lib/utils/misc';
13
10
14
-
import { assertCanonicalResourceUri, makeAtUri } from '../types/at-uri';
11
+
import { makeAtUri, parseAtUri } from '../types/at-uri';
12
+
import { isDid } from '../types/identity';
15
13
16
14
import { resolveHandle } from './handle';
17
15
18
16
export const createListMetaQuery = (listUri: () => string) => {
19
-
const { client } = useAgent();
17
+
const { rpc } = useAgent();
20
18
const { currentAccount } = useSession();
21
19
22
20
return createQuery((queryClient) => {
···
25
23
return {
26
24
queryKey: ['list-meta', $listUri],
27
25
async queryFn(ctx) {
28
-
const uri = assertCanonicalResourceUri($listUri);
26
+
const uri = parseAtUri($listUri);
29
27
30
-
let did: Did;
28
+
let did: At.DID;
31
29
if (isDid(uri.repo)) {
32
30
did = uri.repo;
33
31
} else {
34
-
did = await resolveHandle(client, uri.repo, ctx.signal);
32
+
did = await resolveHandle(rpc, uri.repo, ctx.signal);
35
33
}
36
34
37
-
const data = await ok(
38
-
client.get('app.bsky.graph.getList', {
39
-
signal: ctx.signal,
40
-
params: {
41
-
list: makeAtUri(did, uri.collection, uri.rkey),
42
-
limit: 1,
43
-
},
44
-
}),
45
-
);
35
+
const { data } = await rpc.get('app.bsky.graph.getList', {
36
+
signal: ctx.signal,
37
+
params: {
38
+
list: makeAtUri(did, uri.collection, uri.rkey),
39
+
limit: 1,
40
+
},
41
+
});
46
42
47
43
if (currentAccount) {
48
44
const found = currentAccount.preferences.feeds.find((item): item is SavedListFeed => {
+24
-31
src/api/queries/my-lists.ts
+24
-31
src/api/queries/my-lists.ts
···
1
-
import type { AppBskyGraphDefs } from '@atcute/bluesky';
2
-
import { ok } from '@atcute/client';
1
+
import type { AppBskyGraphDefs } from '@atcute/client/lexicons';
3
2
import { createQuery } from '@mary/solid-query';
4
3
5
4
import { useAgent } from '~/lib/states/agent';
···
8
7
export type MyListsFilter = 'all' | 'curation' | 'moderation' | 'all-including-subscribed';
9
8
10
9
export const createMyListsQuery = (filter: MyListsFilter) => {
11
-
const { client } = useAgent();
10
+
const { rpc } = useAgent();
12
11
const { currentAccount } = useSession();
13
12
14
13
return createQuery(() => ({
···
16
15
async queryFn({ signal }) {
17
16
const promises = [
18
17
accumulate(async (cursor) => {
19
-
const data = await ok(
20
-
client.get('app.bsky.graph.getLists', {
21
-
signal,
22
-
params: {
23
-
actor: currentAccount!.did,
24
-
cursor,
25
-
limit: 100,
26
-
},
27
-
}),
28
-
);
18
+
const { data } = await rpc.get('app.bsky.graph.getLists', {
19
+
signal,
20
+
params: {
21
+
actor: currentAccount!.did,
22
+
cursor,
23
+
limit: 100,
24
+
},
25
+
});
29
26
30
27
return {
31
28
cursor: data.cursor,
···
37
34
if (filter === 'all-including-subscribed' || filter === 'moderation') {
38
35
promises.push(
39
36
accumulate(async (cursor) => {
40
-
const data = await ok(
41
-
client.get('app.bsky.graph.getListMutes', {
42
-
signal,
43
-
params: {
44
-
cursor,
45
-
limit: 100,
46
-
},
47
-
}),
48
-
);
37
+
const { data } = await rpc.get('app.bsky.graph.getListMutes', {
38
+
signal,
39
+
params: {
40
+
cursor,
41
+
limit: 100,
42
+
},
43
+
});
49
44
50
45
return {
51
46
cursor: data.cursor,
···
56
51
57
52
promises.push(
58
53
accumulate(async (cursor) => {
59
-
const data = await ok(
60
-
client.get('app.bsky.graph.getListBlocks', {
61
-
signal,
62
-
params: {
63
-
cursor,
64
-
limit: 100,
65
-
},
66
-
}),
67
-
);
54
+
const { data } = await rpc.get('app.bsky.graph.getListBlocks', {
55
+
signal,
56
+
params: {
57
+
cursor,
58
+
limit: 100,
59
+
},
60
+
});
68
61
69
62
return {
70
63
cursor: data.cursor,
+4
-7
src/api/queries/notification-count.tsx
+4
-7
src/api/queries/notification-count.tsx
···
1
-
import { ok } from '@atcute/client';
2
1
import { createQuery } from '@mary/solid-query';
3
2
4
3
import { useAgent } from '~/lib/states/agent';
···
6
5
7
6
export const createNotificationCountQuery = (options?: { readonly disabled?: boolean }) => {
8
7
const { currentAccount } = useSession();
9
-
const { client } = useAgent();
8
+
const { rpc } = useAgent();
10
9
11
10
const query = createQuery(() => ({
12
11
queryKey: ['notification', 'count'],
13
12
enabled: currentAccount !== undefined && !options?.disabled,
14
13
async queryFn() {
15
-
const data = await ok(
16
-
client.get('app.bsky.notification.getUnreadCount', {
17
-
params: {},
18
-
}),
19
-
);
14
+
const { data } = await rpc.get('app.bsky.notification.getUnreadCount', {
15
+
params: {},
16
+
});
20
17
21
18
return data;
22
19
},
+22
-33
src/api/queries/notification-feed.tsx
+22
-33
src/api/queries/notification-feed.tsx
···
1
1
import { createSignal } from 'solid-js';
2
2
3
-
import type { AppBskyFeedDefs, AppBskyNotificationListNotifications } from '@atcute/bluesky';
4
-
import { ok } from '@atcute/client';
3
+
import type { AppBskyFeedDefs, AppBskyNotificationListNotifications } from '@atcute/client/lexicons';
5
4
import { chunked, mapDefined } from '@mary/array-fns';
6
5
import { type QueryFunctionContext as QC, createInfiniteQuery, useQueryClient } from '@mary/solid-query';
7
6
8
7
import { useAgent } from '~/lib/states/agent';
9
8
10
-
import { assertCanonicalResourceUri } from '../types/at-uri';
9
+
import { parseAtUri } from '../types/at-uri';
11
10
import { dequal } from '../utils/dequal';
12
11
import { resetInfiniteData } from '../utils/query';
13
12
···
85
84
export type NotificationsFilter = 'all' | 'mentions';
86
85
87
86
export const createNotificationFeedQuery = (filter: () => NotificationsFilter) => {
88
-
const { client } = useAgent();
87
+
const { rpc } = useAgent();
89
88
const queryClient = useQueryClient();
90
89
91
90
const [firstFetchedAt, setFirstFetchedAt] = createSignal(0);
···
105
104
reasons = ['mention', 'reply', 'quote'];
106
105
}
107
106
108
-
const data = await ok(
109
-
client.get('app.bsky.notification.listNotifications', {
110
-
signal: signal,
111
-
params: {
112
-
limit: 40,
113
-
reasons: reasons,
114
-
cursor: pageParam?.cursor,
115
-
},
116
-
}),
117
-
);
107
+
const { data } = await rpc.get('app.bsky.notification.listNotifications', {
108
+
signal: signal,
109
+
params: {
110
+
limit: 40,
111
+
reasons: reasons,
112
+
cursor: pageParam?.cursor,
113
+
},
114
+
});
118
115
119
116
const notifs = data.notifications;
120
117
const firstSeenAt = pageParam?.seenAt;
···
132
129
const subjectUri = item.reasonSubject;
133
130
134
131
// skip if they're not related to posts.
135
-
if (
136
-
!subjectUri ||
137
-
assertCanonicalResourceUri(subjectUri).collection !== 'app.bsky.feed.post'
138
-
) {
132
+
if (!subjectUri || parseAtUri(subjectUri).collection !== 'app.bsky.feed.post') {
139
133
return;
140
134
}
141
135
···
148
142
149
143
const chunkedPosts = await Promise.all(
150
144
chunked(Array.from(postUris), 25).map(async (uris) => {
151
-
const data = await ok(
152
-
client.get('app.bsky.feed.getPosts', {
153
-
params: {
154
-
uris: uris,
155
-
},
156
-
}),
157
-
);
145
+
const { data } = await rpc.get('app.bsky.feed.getPosts', {
146
+
params: {
147
+
uris: uris,
148
+
},
149
+
});
158
150
159
151
return data.posts;
160
152
}),
···
246
238
const indexedAt = new Date(notifs[0]?.indexedAt ?? 0).getTime();
247
239
const seenAt = Math.max(now, indexedAt);
248
240
249
-
const promise = ok(
250
-
client.post('app.bsky.notification.updateSeen', {
251
-
as: null,
252
-
input: {
253
-
seenAt: new Date(seenAt).toISOString(),
254
-
},
255
-
}),
256
-
);
241
+
const promise = rpc.call('app.bsky.notification.updateSeen', {
242
+
data: {
243
+
seenAt: new Date(seenAt).toISOString(),
244
+
},
245
+
});
257
246
258
247
queryClient.cancelQueries({
259
248
exact: true,
+12
-16
src/api/queries/post-quotes.ts
+12
-16
src/api/queries/post-quotes.ts
···
1
-
import type { AppBskyFeedGetQuotes } from '@atcute/bluesky';
2
-
import { ok } from '@atcute/client';
3
-
import type { ResourceUri } from '@atcute/lexicons';
1
+
import type { AppBskyFeedGetQuotes } from '@atcute/client/lexicons';
4
2
import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
5
3
6
4
import { useAgent } from '~/lib/states/agent';
7
5
8
-
export const createPostQuotesQuery = (uri: () => ResourceUri) => {
9
-
const { client } = useAgent();
6
+
export const createPostQuotesQuery = (uri: () => string) => {
7
+
const { rpc } = useAgent();
10
8
11
9
return createInfiniteQuery(() => {
12
10
const $uri = uri();
···
14
12
return {
15
13
queryKey: ['post-quotes', $uri],
16
14
structuralSharing: false,
17
-
async queryFn(ctx: QC<never, string | undefined>): Promise<AppBskyFeedGetQuotes.$output> {
18
-
const data = await ok(
19
-
client.get('app.bsky.feed.getQuotes', {
20
-
signal: ctx.signal,
21
-
params: {
22
-
uri: $uri,
23
-
limit: 50,
24
-
cursor: ctx.pageParam,
25
-
},
26
-
}),
27
-
);
15
+
async queryFn(ctx: QC<never, string | undefined>): Promise<AppBskyFeedGetQuotes.Output> {
16
+
const { data } = await rpc.get('app.bsky.feed.getQuotes', {
17
+
signal: ctx.signal,
18
+
params: {
19
+
uri: $uri,
20
+
limit: 50,
21
+
cursor: ctx.pageParam,
22
+
},
23
+
});
28
24
29
25
return data;
30
26
},
+17
-23
src/api/queries/post-thread.ts
+17
-23
src/api/queries/post-thread.ts
···
1
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
2
-
import { ClientResponseError, ok } from '@atcute/client';
3
-
import type { $type, ResourceUri } from '@atcute/lexicons';
1
+
import { XRPCError } from '@atcute/client';
2
+
import type { AppBskyFeedDefs, Brand } from '@atcute/client/lexicons';
4
3
import { createQuery } from '@mary/solid-query';
5
4
6
5
import { useAgent } from '~/lib/states/agent';
···
10
9
const MAX_HEIGHT = 10;
11
10
const MAX_DEPTH = 4;
12
11
13
-
type ThreadReturn = $type.enforce<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost>;
12
+
type ThreadReturn = Brand.Union<AppBskyFeedDefs.ThreadViewPost | AppBskyFeedDefs.BlockedPost>;
14
13
15
-
export const usePostThreadQuery = (uri: () => ResourceUri) => {
16
-
const { client } = useAgent();
14
+
export const usePostThreadQuery = (uri: () => string) => {
15
+
const { rpc } = useAgent();
17
16
18
17
return createQuery((queryClient) => {
19
18
const $uri = uri();
···
22
21
queryKey: ['post-thread', $uri],
23
22
structuralSharing: false,
24
23
async queryFn(ctx): Promise<ThreadReturn> {
25
-
const data = await ok(
26
-
client.get('app.bsky.feed.getPostThread', {
27
-
signal: ctx.signal,
28
-
params: {
29
-
uri: $uri,
30
-
depth: MAX_DEPTH,
31
-
parentHeight: MAX_HEIGHT,
32
-
},
33
-
}),
34
-
);
24
+
const { data } = await rpc.get('app.bsky.feed.getPostThread', {
25
+
signal: ctx.signal,
26
+
params: {
27
+
uri: $uri,
28
+
depth: MAX_DEPTH,
29
+
parentHeight: MAX_HEIGHT,
30
+
},
31
+
});
35
32
36
33
const thread = data.thread;
37
34
38
35
if (thread.$type === 'app.bsky.feed.defs#notFoundPost') {
39
-
throw new ClientResponseError({
40
-
status: 400,
41
-
data: {
42
-
error: `NotFound`,
43
-
message: `Post not found: ${$uri}`,
44
-
},
36
+
throw new XRPCError(400, {
37
+
kind: 'NotFound',
38
+
description: `Post not found: ${$uri}`,
45
39
});
46
40
}
47
41
···
57
51
// Break if either:
58
52
// - This isn't a quote embed transformed into a post view
59
53
// - We've went through 10 post views
60
-
if (!('$transform' in post) || ++step >= 10) {
54
+
if (!('$transform' in found) || ++step >= 10) {
61
55
break;
62
56
}
63
57
}
+13
-16
src/api/queries/post.ts
+13
-16
src/api/queries/post.ts
···
1
-
import { ok } from '@atcute/client';
2
-
import { type Did } from '@atcute/lexicons';
3
-
import { isDid } from '@atcute/lexicons/syntax';
1
+
import type { At } from '@atcute/client/lexicons';
4
2
import { createQuery } from '@mary/solid-query';
5
3
6
4
import { useAgent } from '~/lib/states/agent';
7
5
8
6
import { findPostsInCache } from '../cache/post-shadow';
9
-
import { assertCanonicalResourceUri, makeAtUri } from '../types/at-uri';
7
+
import { makeAtUri, parseAtUri } from '../types/at-uri';
8
+
import { isDid } from '../types/identity';
10
9
11
10
import { resolveHandle } from './handle';
12
11
13
12
export const createPostQuery = (postUri: () => string) => {
14
-
const { client } = useAgent();
13
+
const { rpc } = useAgent();
15
14
16
15
return createQuery((queryClient) => {
17
16
const $postUri = postUri();
···
19
18
return {
20
19
queryKey: ['post', $postUri],
21
20
async queryFn(ctx) {
22
-
const uri = assertCanonicalResourceUri($postUri);
21
+
const uri = parseAtUri($postUri);
23
22
24
-
let did: Did;
23
+
let did: At.DID;
25
24
if (isDid(uri.repo)) {
26
25
did = uri.repo;
27
26
} else {
28
-
did = await resolveHandle(client, uri.repo, ctx.signal);
27
+
did = await resolveHandle(rpc, uri.repo, ctx.signal);
29
28
}
30
29
31
-
const data = await ok(
32
-
client.get('app.bsky.feed.getPosts', {
33
-
signal: ctx.signal,
34
-
params: {
35
-
uris: [makeAtUri(did, uri.collection, uri.rkey)],
36
-
},
37
-
}),
38
-
);
30
+
const { data } = await rpc.get('app.bsky.feed.getPosts', {
31
+
signal: ctx.signal,
32
+
params: {
33
+
uris: [makeAtUri(did, uri.collection, uri.rkey)],
34
+
},
35
+
});
39
36
40
37
const post = data.posts[0];
41
38
+8
-11
src/api/queries/profile-autocomplete.ts
+8
-11
src/api/queries/profile-autocomplete.ts
···
1
-
import { ok } from '@atcute/client';
2
1
import { createQuery, keepPreviousData } from '@mary/solid-query';
3
2
4
3
import { useAgent } from '~/lib/states/agent';
···
11
10
query: () => string,
12
11
opts?: ProfileAutocompleteQueryOptions,
13
12
) => {
14
-
const { client } = useAgent();
13
+
const { rpc } = useAgent();
15
14
16
15
return createQuery(() => {
17
16
const $query = query();
···
27
26
enabled: isEnabled,
28
27
placeholderData: isEnabled ? keepPreviousData : undefined,
29
28
async queryFn({ signal }) {
30
-
const data = await ok(
31
-
client.get('app.bsky.actor.searchActorsTypeahead', {
32
-
signal,
33
-
params: {
34
-
q: trimmed,
35
-
limit: 10,
36
-
},
37
-
}),
38
-
);
29
+
const { data } = await rpc.get('app.bsky.actor.searchActorsTypeahead', {
30
+
signal,
31
+
params: {
32
+
q: trimmed,
33
+
limit: 10,
34
+
},
35
+
});
39
36
40
37
return data;
41
38
},
+10
-14
src/api/queries/profile-feeds.ts
+10
-14
src/api/queries/profile-feeds.ts
···
1
-
import { ok } from '@atcute/client';
2
-
import type { ActorIdentifier } from '@atcute/lexicons';
3
1
import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
4
2
5
3
import { useAgent } from '~/lib/states/agent';
6
4
7
-
export const createProfileFeedsQuery = (didOrHandle: () => ActorIdentifier) => {
8
-
const { client } = useAgent();
5
+
export const createProfileFeedsQuery = (didOrHandle: () => string) => {
6
+
const { rpc } = useAgent();
9
7
10
8
return createInfiniteQuery(() => {
11
9
const $didOrHandle = didOrHandle();
···
13
11
return {
14
12
queryKey: ['profile-feeds', $didOrHandle],
15
13
async queryFn(ctx: QC<never, string | undefined>) {
16
-
const data = await ok(
17
-
client.get('app.bsky.feed.getActorFeeds', {
18
-
signal: ctx.signal,
19
-
params: {
20
-
actor: $didOrHandle,
21
-
limit: 100,
22
-
cursor: ctx.pageParam,
23
-
},
24
-
}),
25
-
);
14
+
const { data } = await rpc.get('app.bsky.feed.getActorFeeds', {
15
+
signal: ctx.signal,
16
+
params: {
17
+
actor: $didOrHandle,
18
+
limit: 100,
19
+
cursor: ctx.pageParam,
20
+
},
21
+
});
26
22
27
23
data.feeds.sort((a, b) => (b.likeCount ?? 0) - (a.likeCount ?? 0));
28
24
return data;
+11
-15
src/api/queries/profile-followers.ts
+11
-15
src/api/queries/profile-followers.ts
···
1
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
2
-
import { ok } from '@atcute/client';
3
-
import type { ActorIdentifier } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
4
2
import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
5
3
6
4
import { useAgent } from '~/lib/states/agent';
7
5
8
6
import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response';
9
7
10
-
export const createProfileFollowersQuery = (didOrHandle: () => ActorIdentifier) => {
11
-
const { client } = useAgent();
8
+
export const createProfileFollowersQuery = (didOrHandle: () => string) => {
9
+
const { rpc } = useAgent();
12
10
13
11
return createInfiniteQuery((queryClient) => {
14
12
const $didOrHandle = didOrHandle();
···
16
14
return {
17
15
queryKey: ['profile-followers', $didOrHandle],
18
16
async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> {
19
-
const data = await ok(
20
-
client.get('app.bsky.graph.getFollowers', {
21
-
signal: ctx.signal,
22
-
params: {
23
-
actor: $didOrHandle,
24
-
limit: 50,
25
-
cursor: ctx.pageParam,
26
-
},
27
-
}),
28
-
);
17
+
const { data } = await rpc.get('app.bsky.graph.getFollowers', {
18
+
signal: ctx.signal,
19
+
params: {
20
+
actor: $didOrHandle,
21
+
limit: 50,
22
+
cursor: ctx.pageParam,
23
+
},
24
+
});
29
25
30
26
return toProfilesListWithSubjectPage(data, 'followers');
31
27
},
+11
-15
src/api/queries/profile-following.ts
+11
-15
src/api/queries/profile-following.ts
···
1
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
2
-
import { ok } from '@atcute/client';
3
-
import type { ActorIdentifier } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
4
2
import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
5
3
6
4
import { useAgent } from '~/lib/states/agent';
7
5
8
6
import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response';
9
7
10
-
export const createProfileFollowingQuery = (didOrHandle: () => ActorIdentifier) => {
11
-
const { client } = useAgent();
8
+
export const createProfileFollowingQuery = (didOrHandle: () => string) => {
9
+
const { rpc } = useAgent();
12
10
13
11
return createInfiniteQuery((queryClient) => {
14
12
const $didOrHandle = didOrHandle();
···
16
14
return {
17
15
queryKey: ['profile-following', $didOrHandle],
18
16
async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> {
19
-
const data = await ok(
20
-
client.get('app.bsky.graph.getFollows', {
21
-
signal: ctx.signal,
22
-
params: {
23
-
actor: $didOrHandle,
24
-
limit: 50,
25
-
cursor: ctx.pageParam,
26
-
},
27
-
}),
28
-
);
17
+
const { data } = await rpc.get('app.bsky.graph.getFollows', {
18
+
signal: ctx.signal,
19
+
params: {
20
+
actor: $didOrHandle,
21
+
limit: 50,
22
+
cursor: ctx.pageParam,
23
+
},
24
+
});
29
25
30
26
return toProfilesListWithSubjectPage(data, 'follows');
31
27
},
+11
-15
src/api/queries/profile-known-followers.ts
+11
-15
src/api/queries/profile-known-followers.ts
···
1
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
2
-
import { ok } from '@atcute/client';
3
-
import type { ActorIdentifier } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
4
2
import { type InfiniteData, type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
5
3
6
4
import { useAgent } from '~/lib/states/agent';
7
5
8
6
import { type ProfilesListWithSubjectPage, toProfilesListWithSubjectPage } from '../types/profile-response';
9
7
10
-
export const createProfileKnownFollowersQuery = (didOrHandle: () => ActorIdentifier) => {
11
-
const { client } = useAgent();
8
+
export const createProfileKnownFollowersQuery = (didOrHandle: () => string) => {
9
+
const { rpc } = useAgent();
12
10
13
11
return createInfiniteQuery((queryClient) => {
14
12
const $didOrHandle = didOrHandle();
···
16
14
return {
17
15
queryKey: ['profile-known-followers', $didOrHandle],
18
16
async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListWithSubjectPage> {
19
-
const data = await ok(
20
-
client.get('app.bsky.graph.getKnownFollowers', {
21
-
signal: ctx.signal,
22
-
params: {
23
-
actor: $didOrHandle,
24
-
limit: 50,
25
-
cursor: ctx.pageParam,
26
-
},
27
-
}),
28
-
);
17
+
const { data } = await rpc.get('app.bsky.graph.getKnownFollowers', {
18
+
signal: ctx.signal,
19
+
params: {
20
+
actor: $didOrHandle,
21
+
limit: 50,
22
+
cursor: ctx.pageParam,
23
+
},
24
+
});
29
25
30
26
return toProfilesListWithSubjectPage(data, 'followers');
31
27
},
+10
-14
src/api/queries/profile-lists.ts
+10
-14
src/api/queries/profile-lists.ts
···
1
-
import { ok } from '@atcute/client';
2
-
import type { ActorIdentifier } from '@atcute/lexicons';
3
1
import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
4
2
5
3
import { useAgent } from '~/lib/states/agent';
6
4
7
-
export const createProfileListsQuery = (didOrHandle: () => ActorIdentifier) => {
8
-
const { client } = useAgent();
5
+
export const createProfileListsQuery = (didOrHandle: () => string) => {
6
+
const { rpc } = useAgent();
9
7
10
8
const collator = new Intl.Collator('en-US');
11
9
···
15
13
return {
16
14
queryKey: ['profile-lists', $didOrHandle],
17
15
async queryFn(ctx: QC<never, string | undefined>) {
18
-
const data = await ok(
19
-
client.get('app.bsky.graph.getLists', {
20
-
signal: ctx.signal,
21
-
params: {
22
-
actor: $didOrHandle,
23
-
limit: 100,
24
-
cursor: ctx.pageParam,
25
-
},
26
-
}),
27
-
);
16
+
const { data } = await rpc.get('app.bsky.graph.getLists', {
17
+
signal: ctx.signal,
18
+
params: {
19
+
actor: $didOrHandle,
20
+
limit: 100,
21
+
cursor: ctx.pageParam,
22
+
},
23
+
});
28
24
29
25
data.lists.sort((a, b) => collator.compare(a.name, b.name));
30
26
return data;
+19
-50
src/api/queries/profile.ts
+19
-50
src/api/queries/profile.ts
···
1
1
import { modifyMutable, reconcile } from 'solid-js/store';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import { ok } from '@atcute/client';
5
-
import type { ActorIdentifier, Did } from '@atcute/lexicons';
6
-
import { isDid } from '@atcute/lexicons/syntax';
7
-
import { createBatchedFetch } from '@mary/batch-fetch';
3
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
8
4
import { createQuery } from '@mary/solid-query';
9
5
10
6
import { useAgent } from '~/lib/states/agent';
11
7
import { useSession } from '~/lib/states/session';
12
-
import { define, inject } from '~/lib/states/singleton';
13
8
9
+
import { findProfilesInCache } from '../cache/profile-shadow';
14
10
import { dequal } from '../utils/dequal';
15
11
16
12
export interface ProfileQueryOptions {
17
-
batched?: boolean;
18
13
staleTime?: number;
19
14
gcTime?: number;
20
15
}
21
16
22
-
const BatchedProfileService = define('batched-profile', () => {
23
-
const { client } = useAgent();
24
-
25
-
const fetch = createBatchedFetch<Did, AppBskyActorDefs.ProfileViewDetailed>({
26
-
limit: 25,
27
-
idFromResource: (profile) => profile.did,
28
-
async fetch(queries, signal) {
29
-
const data = await ok(
30
-
client.get('app.bsky.actor.getProfiles', {
31
-
signal,
32
-
params: {
33
-
actors: queries,
34
-
},
35
-
}),
36
-
);
37
-
38
-
return data.profiles;
39
-
},
40
-
});
41
-
42
-
return { fetch };
43
-
});
44
-
45
-
export const createProfileQuery = (didOrHandle: () => ActorIdentifier, opts: ProfileQueryOptions = {}) => {
46
-
const { client } = useAgent();
17
+
export const createProfileQuery = (didOrHandle: () => string, opts: ProfileQueryOptions = {}) => {
18
+
const { rpc } = useAgent();
47
19
const { currentAccount } = useSession();
48
-
49
-
const batched = inject(BatchedProfileService);
50
20
51
21
return createQuery((queryClient) => {
52
22
const $didOrHandle = didOrHandle();
···
55
25
queryKey: ['profile', $didOrHandle],
56
26
staleTime: opts.staleTime,
57
27
gcTime: opts.gcTime,
58
-
async queryFn({ signal }): Promise<AppBskyActorDefs.ProfileViewDetailed> {
59
-
let data: AppBskyActorDefs.ProfileViewDetailed;
60
-
61
-
if (opts.batched && isDid($didOrHandle)) {
62
-
data = await batched.fetch($didOrHandle, signal);
63
-
} else {
64
-
data = await ok(
65
-
client.get('app.bsky.actor.getProfile', {
66
-
signal,
67
-
params: {
68
-
actor: $didOrHandle!,
69
-
},
70
-
}),
71
-
);
72
-
}
28
+
async queryFn(ctx): Promise<AppBskyActorDefs.ProfileViewDetailed> {
29
+
const { data } = await rpc.get('app.bsky.actor.getProfile', {
30
+
signal: ctx.signal,
31
+
params: {
32
+
actor: $didOrHandle!,
33
+
},
34
+
});
73
35
74
36
if (currentAccount !== undefined && currentAccount.did === data.did) {
75
37
// Unset `knownFollowers` as we don't need that on our own profile.
···
89
51
return data;
90
52
},
91
53
placeholderData(): AppBskyActorDefs.ProfileViewDetailed | undefined {
92
-
return queryClient.getQueryData(['profile-precache', $didOrHandle]);
54
+
const precache = queryClient.getQueryData(['profile-precache', $didOrHandle]);
55
+
if (precache) {
56
+
return precache as any;
57
+
}
58
+
59
+
for (const profile of findProfilesInCache(queryClient, $didOrHandle as At.DID)) {
60
+
return profile as any;
61
+
}
93
62
},
94
63
initialData(): AppBskyActorDefs.ProfileViewDetailed | undefined {
95
64
if (currentAccount !== undefined && currentAccount.did === $didOrHandle) {
+11
-14
src/api/queries/search-feeds.ts
+11
-14
src/api/queries/search-feeds.ts
···
1
-
import type { AppBskyUnspeccedGetPopularFeedGenerators } from '@atcute/bluesky';
2
-
import { ok } from '@atcute/client';
1
+
import type { AppBskyUnspeccedGetPopularFeedGenerators } from '@atcute/client/lexicons';
3
2
import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
4
3
5
4
import { useAgent } from '~/lib/states/agent';
6
5
7
6
export const createSearchFeedsQuery = (query: () => string) => {
8
-
const { client } = useAgent();
7
+
const { rpc } = useAgent();
9
8
10
9
return createInfiniteQuery(() => {
11
10
const q = query();
···
14
13
queryKey: ['search-feeds', q],
15
14
async queryFn(
16
15
ctx: QC<never, string | undefined>,
17
-
): Promise<AppBskyUnspeccedGetPopularFeedGenerators.$output> {
18
-
const data = await ok(
19
-
client.get('app.bsky.unspecced.getPopularFeedGenerators', {
20
-
signal: ctx.signal,
21
-
params: {
22
-
query: q,
23
-
limit: 50,
24
-
cursor: ctx.pageParam,
25
-
},
26
-
}),
27
-
);
16
+
): Promise<AppBskyUnspeccedGetPopularFeedGenerators.Output> {
17
+
const { data } = await rpc.get('app.bsky.unspecced.getPopularFeedGenerators', {
18
+
signal: ctx.signal,
19
+
params: {
20
+
query: q,
21
+
limit: 50,
22
+
cursor: ctx.pageParam,
23
+
},
24
+
});
28
25
29
26
return data;
30
27
},
+9
-12
src/api/queries/search-profiles.ts
+9
-12
src/api/queries/search-profiles.ts
···
1
-
import { ok } from '@atcute/client';
2
1
import { type QueryFunctionContext as QC, createInfiniteQuery } from '@mary/solid-query';
3
2
4
3
import { useAgent } from '~/lib/states/agent';
···
6
5
import { type ProfilesListPage, toProfilesListPage } from '../types/profile-response';
7
6
8
7
export const createSearchProfilesQuery = (query: () => string) => {
9
-
const { client } = useAgent();
8
+
const { rpc } = useAgent();
10
9
11
10
return createInfiniteQuery(() => {
12
11
const q = query();
···
14
13
return {
15
14
queryKey: ['search-profiles', q],
16
15
async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListPage> {
17
-
const data = await ok(
18
-
client.get('app.bsky.actor.searchActors', {
19
-
signal: ctx.signal,
20
-
params: {
21
-
q: q,
22
-
limit: 50,
23
-
cursor: ctx.pageParam,
24
-
},
25
-
}),
26
-
);
16
+
const { data } = await rpc.get('app.bsky.actor.searchActors', {
17
+
signal: ctx.signal,
18
+
params: {
19
+
q: q,
20
+
limit: 50,
21
+
cursor: ctx.pageParam,
22
+
},
23
+
});
27
24
28
25
return toProfilesListPage(data, 'actors');
29
26
},
+10
-14
src/api/queries/subject-likers.ts
+10
-14
src/api/queries/subject-likers.ts
···
1
-
import { ok } from '@atcute/client';
2
-
import type { ResourceUri } from '@atcute/lexicons';
3
1
import type { QueryFunctionContext as QC } from '@mary/solid-query';
4
2
import { createInfiniteQuery } from '@mary/solid-query';
5
3
···
7
5
8
6
import type { ProfilesListPage } from '../types/profile-response';
9
7
10
-
export const createSubjectLikersQuery = (uri: () => ResourceUri) => {
11
-
const { client } = useAgent();
8
+
export const createSubjectLikersQuery = (uri: () => string) => {
9
+
const { rpc } = useAgent();
12
10
13
11
return createInfiniteQuery(() => {
14
12
const $uri = uri();
···
17
15
queryKey: ['subject-likers', $uri],
18
16
structuralSharing: false,
19
17
async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListPage> {
20
-
const data = await ok(
21
-
client.get('app.bsky.feed.getLikes', {
22
-
signal: ctx.signal,
23
-
params: {
24
-
uri: $uri,
25
-
limit: 50,
26
-
cursor: ctx.pageParam,
27
-
},
28
-
}),
29
-
);
18
+
const { data } = await rpc.get('app.bsky.feed.getLikes', {
19
+
signal: ctx.signal,
20
+
params: {
21
+
uri: $uri,
22
+
limit: 50,
23
+
cursor: ctx.pageParam,
24
+
},
25
+
});
30
26
31
27
return {
32
28
cursor: data.cursor,
+10
-14
src/api/queries/subject-reposters.ts
+10
-14
src/api/queries/subject-reposters.ts
···
1
-
import { ok } from '@atcute/client';
2
-
import type { ResourceUri } from '@atcute/lexicons';
3
1
import type { QueryFunctionContext as QC } from '@mary/solid-query';
4
2
import { createInfiniteQuery } from '@mary/solid-query';
5
3
···
7
5
8
6
import { type ProfilesListPage, toProfilesListPage } from '../types/profile-response';
9
7
10
-
export const createSubjectRepostersQuery = (uri: () => ResourceUri) => {
11
-
const { client } = useAgent();
8
+
export const createSubjectRepostersQuery = (uri: () => string) => {
9
+
const { rpc } = useAgent();
12
10
13
11
return createInfiniteQuery(() => {
14
12
const $uri = uri();
···
17
15
queryKey: ['subject-reposters', $uri],
18
16
structuralSharing: false,
19
17
async queryFn(ctx: QC<never, string | undefined>): Promise<ProfilesListPage> {
20
-
const data = await ok(
21
-
client.get('app.bsky.feed.getRepostedBy', {
22
-
signal: ctx.signal,
23
-
params: {
24
-
uri: $uri,
25
-
limit: 50,
26
-
cursor: ctx.pageParam,
27
-
},
28
-
}),
29
-
);
18
+
const { data } = await rpc.get('app.bsky.feed.getRepostedBy', {
19
+
signal: ctx.signal,
20
+
params: {
21
+
uri: $uri,
22
+
limit: 50,
23
+
cursor: ctx.pageParam,
24
+
},
25
+
});
30
26
31
27
return toProfilesListPage(data, 'repostedBy');
32
28
},
+82
-98
src/api/queries/timeline.ts
+82
-98
src/api/queries/timeline.ts
···
1
1
import { createEffect, createMemo, createRenderEffect, onCleanup, untrack } from 'solid-js';
2
2
3
-
import {
4
-
type AppBskyFeedDefs,
5
-
type AppBskyFeedGetTimeline,
6
-
type AppBskyFeedPost,
7
-
unwrapRawRecordEmbed,
8
-
unwrapRecordEmbed,
9
-
} from '@atcute/bluesky';
10
-
import { type Client, ok } from '@atcute/client';
11
-
import { type Did, type ResourceUri } from '@atcute/lexicons';
3
+
import type { XRPC } from '@atcute/client';
4
+
import type { AppBskyFeedDefs, AppBskyFeedGetTimeline, AppBskyFeedPost, At } from '@atcute/client/lexicons';
12
5
import { type FalsyValue, definite } from '@mary/array-fns';
13
6
import { type InfiniteData, createInfiniteQuery, createQuery, useQueryClient } from '@mary/solid-query';
14
7
···
38
31
getModerationUI,
39
32
} from '../moderation';
40
33
import { ContextContentList, PreferenceHide, TargetContent } from '../moderation/constants';
41
-
import { assertCanonicalResourceUri } from '../types/at-uri';
34
+
import { parseAtUri } from '../types/at-uri';
35
+
import { unwrapRecordEmbed } from '../utils/bluesky/embed';
36
+
import { unwrapRecordEmbedView } from '../utils/bluesky/embed-view';
42
37
import { EQUALS_DEQUAL } from '../utils/dequal';
43
38
import { unwrapPostEmbedText } from '../utils/post';
44
39
import { resetInfiniteData, wrapQuery } from '../utils/query';
45
40
46
-
type PostRecord = AppBskyFeedPost.Main;
41
+
type PostRecord = AppBskyFeedPost.Record;
47
42
48
43
export interface FollowingTimelineParams {
49
44
type: 'following';
···
54
49
55
50
export interface FeedTimelineParams {
56
51
type: 'feed';
57
-
uri: ResourceUri;
52
+
uri: string;
58
53
showReplies: boolean;
59
54
showReposts: boolean;
60
55
showQuotes: boolean;
···
62
57
63
58
export interface ListTimelineParams {
64
59
type: 'list';
65
-
uri: ResourceUri;
60
+
uri: string;
66
61
showReplies: boolean;
67
62
showQuotes: boolean;
68
63
}
69
64
70
65
export interface ProfileTimelineParams {
71
66
type: 'profile';
72
-
actor: Did;
67
+
actor: At.DID;
73
68
tab: 'posts' | 'replies' | 'likes' | 'media';
74
69
}
75
70
···
131
126
export const useTimelineQuery = (_params: () => TimelineParams) => {
132
127
const getParams = createMemo(() => _params(), EQUALS_DEQUAL);
133
128
134
-
const { client } = useAgent();
129
+
const { rpc } = useAgent();
135
130
const { currentAccount } = useSession();
136
131
const queryClient = useQueryClient();
137
132
···
200
195
postFilter = createLabelPostFilter(moderation);
201
196
}
202
197
203
-
const timeline = await fetchPage(client, params, limit, cursor, ctx.signal);
198
+
const timeline = await fetchPage(rpc, params, limit, cursor, ctx.signal);
204
199
205
200
const feed = timeline.feed;
206
201
const newCursor = timeline.cursor;
···
243
238
// const offset = params.type !== 'profile' ? timelineData!.pages[0].pinAmount : 0;
244
239
const offset = timelineData!.pages[0].pinAmount;
245
240
246
-
const timeline = await fetchPage(client, params, offset + 1, undefined, ctx.signal);
241
+
const timeline = await fetchPage(rpc, params, offset + 1, undefined, ctx.signal);
247
242
const feed = timeline.feed;
248
243
249
244
return { hash: getTimelineHash(feed) };
···
313
308
314
309
//// Raw fetch
315
310
const fetchPage = async (
316
-
client: Client,
311
+
rpc: XRPC,
317
312
params: TimelineParams,
318
313
limit: number,
319
314
cursor: string | undefined,
320
315
signal: AbortSignal,
321
-
): Promise<AppBskyFeedGetTimeline.$output> => {
316
+
): Promise<AppBskyFeedGetTimeline.Output> => {
322
317
const type = params.type;
323
318
324
319
if (type === 'following') {
325
-
const data = await ok(
326
-
client.get('app.bsky.feed.getTimeline', {
327
-
signal: signal,
328
-
params: {
329
-
algorithm: 'reverse-chronological',
330
-
cursor: cursor,
331
-
limit: limit,
332
-
},
333
-
}),
334
-
);
320
+
const response = await rpc.get('app.bsky.feed.getTimeline', {
321
+
signal: signal,
322
+
params: {
323
+
algorithm: 'reverse-chronological',
324
+
cursor: cursor,
325
+
limit: limit,
326
+
},
327
+
});
335
328
336
-
return data;
329
+
return response.data;
337
330
} else if (type === 'feed') {
338
-
const data = await ok(
339
-
client.get('app.bsky.feed.getFeed', {
340
-
signal: signal,
341
-
headers: {
342
-
'accent-language': navigator.languages.join(','),
343
-
},
344
-
params: {
345
-
feed: params.uri,
346
-
cursor: cursor,
347
-
limit: limit,
348
-
},
349
-
}),
350
-
);
331
+
const response = await rpc.get('app.bsky.feed.getFeed', {
332
+
signal: signal,
333
+
headers: {
334
+
'accent-language': navigator.languages.join(','),
335
+
},
336
+
params: {
337
+
feed: params.uri,
338
+
cursor: cursor,
339
+
limit: limit,
340
+
},
341
+
});
342
+
343
+
const data = response.data;
351
344
352
345
return {
353
346
// Discover feed, wooo.
···
355
348
feed: data.feed,
356
349
};
357
350
} else if (type === 'list') {
358
-
const data = await ok(
359
-
client.get('app.bsky.feed.getListFeed', {
351
+
const response = await rpc.get('app.bsky.feed.getListFeed', {
352
+
signal: signal,
353
+
params: {
354
+
list: params.uri,
355
+
cursor: cursor,
356
+
limit: limit,
357
+
},
358
+
});
359
+
360
+
return response.data;
361
+
} else if (type === 'profile') {
362
+
if (params.tab === 'likes') {
363
+
const response = await rpc.get('app.bsky.feed.getActorLikes', {
360
364
signal: signal,
361
365
params: {
362
-
list: params.uri,
366
+
actor: params.actor,
363
367
cursor: cursor,
364
368
limit: limit,
365
369
},
366
-
}),
367
-
);
370
+
});
368
371
369
-
return data;
370
-
} else if (type === 'profile') {
371
-
if (params.tab === 'likes') {
372
-
const data = await ok(
373
-
client.get('app.bsky.feed.getActorLikes', {
374
-
signal: signal,
375
-
params: {
376
-
actor: params.actor,
377
-
cursor: cursor,
378
-
limit: limit,
379
-
},
380
-
}),
381
-
);
382
-
383
-
return data;
372
+
return response.data;
384
373
} else {
385
-
const data = await ok(
386
-
client.get('app.bsky.feed.getAuthorFeed', {
387
-
signal: signal,
388
-
params: {
389
-
actor: params.actor,
390
-
cursor: cursor,
391
-
limit: limit,
392
-
includePins: params.tab !== 'media',
393
-
filter:
394
-
params.tab === 'media'
395
-
? 'posts_with_media'
396
-
: params.tab === 'replies'
397
-
? 'posts_with_replies'
398
-
: 'posts_and_author_threads',
399
-
},
400
-
}),
401
-
);
402
-
403
-
return data;
404
-
}
405
-
} else if (type === 'search') {
406
-
const data = await ok(
407
-
client.get('app.bsky.feed.searchPosts', {
374
+
const response = await rpc.get('app.bsky.feed.getAuthorFeed', {
408
375
signal: signal,
409
376
params: {
410
-
sort: params.sort,
411
-
q: params.query,
377
+
actor: params.actor,
412
378
cursor: cursor,
413
379
limit: limit,
380
+
includePins: params.tab !== 'media',
381
+
filter:
382
+
params.tab === 'media'
383
+
? 'posts_with_media'
384
+
: params.tab === 'replies'
385
+
? 'posts_with_replies'
386
+
: 'posts_and_author_threads',
414
387
},
415
-
}),
416
-
);
388
+
});
389
+
390
+
return response.data;
391
+
}
392
+
} else if (type === 'search') {
393
+
const response = await rpc.get('app.bsky.feed.searchPosts', {
394
+
signal: signal,
395
+
params: {
396
+
sort: params.sort,
397
+
q: params.query,
398
+
cursor: cursor,
399
+
limit: limit,
400
+
},
401
+
});
402
+
403
+
const data = response.data;
417
404
418
405
return { cursor: data.cursor, feed: data.posts.map((view) => ({ post: view })) };
419
406
} else {
···
537
524
const createHideQuotesFilter = (): PostFilter => {
538
525
return (item) => {
539
526
const post = item.post.record as PostRecord;
540
-
const record = unwrapRawRecordEmbed(post.embed);
527
+
const record = unwrapRecordEmbed(post.embed);
541
528
542
-
return (
543
-
record === undefined ||
544
-
assertCanonicalResourceUri(record.record.uri).collection === 'app.bsky.feed.post'
545
-
);
529
+
return record === undefined || parseAtUri(record.record.uri).collection === 'app.bsky.feed.post';
546
530
};
547
531
};
548
532
549
533
const createHideQuotesFromMutedFilter = (): PostFilter => {
550
534
return (item) => {
551
535
const post = item.post;
552
-
const record = unwrapRecordEmbed(post.embed);
536
+
const record = unwrapRecordEmbedView(post.embed);
553
537
554
538
return (
555
539
record === undefined ||
···
591
575
};
592
576
};
593
577
594
-
const createHomeSliceFilter = (uid: Did, followsOnly: boolean): SliceFilter | undefined => {
578
+
const createHomeSliceFilter = (uid: At.DID, followsOnly: boolean): SliceFilter | undefined => {
595
579
return (slice) => {
596
580
const items = slice.items;
597
581
const first = items[0];
···
623
607
};
624
608
};
625
609
626
-
const createProfileSliceFilter = (did: Did): SliceFilter | undefined => {
610
+
const createProfileSliceFilter = (did: At.DID): SliceFilter | undefined => {
627
611
return (slice) => {
628
612
const items = slice.items;
629
613
const first = items[0];
+2
-3
src/api/queries-cache/bookmark-feed.ts
+2
-3
src/api/queries-cache/bookmark-feed.ts
···
1
-
import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, AppBskyFeedDefs, At } from '@atcute/client/lexicons';
3
2
import type { InfiniteData } from '@mary/solid-query';
4
3
5
4
import type { CacheMatcher } from '../cache/utils';
···
36
35
};
37
36
};
38
37
39
-
export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
38
+
export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
40
39
return {
41
40
filter: {
42
41
queryKey: ['bookmarks-feed'],
+1
-1
src/api/queries-cache/feed-precache.ts
+1
-1
src/api/queries-cache/feed-precache.ts
+1
-1
src/api/queries-cache/list-precache.ts
+1
-1
src/api/queries-cache/list-precache.ts
+2
-3
src/api/queries-cache/notification-feed.ts
+2
-3
src/api/queries-cache/notification-feed.ts
···
1
-
import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, AppBskyFeedDefs, At } from '@atcute/client/lexicons';
3
2
import type { InfiniteData } from '@mary/solid-query';
4
3
5
4
import type { CacheMatcher } from '../cache/utils';
···
39
38
};
40
39
41
40
export const findAllProfiles = (
42
-
did: Did,
41
+
did: At.DID,
43
42
): CacheMatcher<AppBskyActorDefs.ProfileViewBasic | AppBskyActorDefs.ProfileView> => {
44
43
return {
45
44
filter: {
+2
-2
src/api/queries-cache/post-quotes.ts
+2
-2
src/api/queries-cache/post-quotes.ts
···
1
-
import type { AppBskyFeedDefs, AppBskyFeedGetQuotes } from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs, AppBskyFeedGetQuotes } from '@atcute/client/lexicons';
2
2
import type { InfiniteData } from '@mary/solid-query';
3
3
4
4
import type { CacheMatcher } from '../cache/utils';
···
9
9
filter: {
10
10
queryKey: ['post-quotes'],
11
11
},
12
-
*iterate(data: InfiniteData<AppBskyFeedGetQuotes.$output>) {
12
+
*iterate(data: InfiniteData<AppBskyFeedGetQuotes.Output>) {
13
13
for (const page of data.pages) {
14
14
for (const post of page.posts) {
15
15
if (post.uri === uri) {
+12
-8
src/api/queries-cache/post-thread.ts
+12
-8
src/api/queries-cache/post-thread.ts
···
1
-
import type { AppBskyActorDefs, AppBskyFeedDefs, AppBskyFeedGetPostThread } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type {
2
+
AppBskyActorDefs,
3
+
AppBskyFeedDefs,
4
+
AppBskyFeedGetPostThread,
5
+
At,
6
+
} from '@atcute/client/lexicons';
3
7
4
8
import type { CacheMatcher } from '../cache/utils';
5
9
import { embedViewRecordToPostView, getEmbeddedPost } from '../utils/post';
6
10
7
-
type Thread = AppBskyFeedGetPostThread.$output['thread'];
8
-
9
-
function* traverseThread(node: Thread): Generator<AppBskyFeedDefs.ThreadViewPost> {
11
+
function* traverseThread(
12
+
node: AppBskyFeedGetPostThread.Output['thread'],
13
+
): Generator<AppBskyFeedDefs.ThreadViewPost> {
10
14
if (node.$type === 'app.bsky.feed.defs#threadViewPost') {
11
15
const parent = node.parent;
12
16
const replies = node.replies;
···
31
35
filter: {
32
36
queryKey: ['post-thread'],
33
37
},
34
-
*iterate(data: Thread) {
38
+
*iterate(data: AppBskyFeedGetPostThread.Output['thread']) {
35
39
for (const thread of traverseThread(data)) {
36
40
const post = thread.post;
37
41
···
50
54
};
51
55
};
52
56
53
-
export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
57
+
export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
54
58
return {
55
59
filter: {
56
60
queryKey: ['post-thread'],
57
61
},
58
-
*iterate(data: Thread) {
62
+
*iterate(data: AppBskyFeedGetPostThread.Output['thread']) {
59
63
for (const thread of traverseThread(data)) {
60
64
const post = thread.post;
61
65
+3
-4
src/api/queries-cache/profile-autocomplete.ts
+3
-4
src/api/queries-cache/profile-autocomplete.ts
···
1
-
import type { AppBskyActorDefs, AppBskyActorSearchActorsTypeahead } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, AppBskyActorSearchActorsTypeahead, At } from '@atcute/client/lexicons';
3
2
4
3
import type { CacheMatcher } from '../cache/utils';
5
4
6
-
export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
5
+
export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
7
6
return {
8
7
filter: {
9
8
queryKey: ['profile-autocomplete'],
10
9
},
11
-
*iterate(data: AppBskyActorSearchActorsTypeahead.$output) {
10
+
*iterate(data: AppBskyActorSearchActorsTypeahead.Output) {
12
11
for (const profile of data.actors) {
13
12
if (profile.did === did) {
14
13
yield profile;
+2
-3
src/api/queries-cache/profile-list.ts
+2
-3
src/api/queries-cache/profile-list.ts
···
1
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
3
2
import type { InfiniteData } from '@mary/solid-query';
4
3
5
4
import type { CacheMatcher } from '../cache/utils';
6
5
import type { ProfilesListPage, ProfilesListWithSubjectPage } from '../types/profile-response';
7
6
8
-
export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileView> => {
7
+
export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileView> => {
9
8
return {
10
9
filter: [
11
10
{ queryKey: ['profile-followers'] },
+1
-1
src/api/queries-cache/profile-precache.ts
+1
-1
src/api/queries-cache/profile-precache.ts
+2
-3
src/api/queries-cache/profile.ts
+2
-3
src/api/queries-cache/profile.ts
···
1
-
import { AppBskyActorDefs } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
3
2
4
3
import type { CacheMatcher } from '../cache/utils';
5
4
6
-
export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewDetailed> => {
5
+
export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewDetailed> => {
7
6
return {
8
7
filter: {
9
8
queryKey: ['profile', did],
+2
-3
src/api/queries-cache/timeline.ts
+2
-3
src/api/queries-cache/timeline.ts
···
1
-
import type { AppBskyActorDefs, AppBskyFeedDefs } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, AppBskyFeedDefs, At } from '@atcute/client/lexicons';
3
2
import type { InfiniteData } from '@mary/solid-query';
4
3
5
4
import type { CacheMatcher } from '../cache/utils';
···
64
63
};
65
64
};
66
65
67
-
export const findAllProfiles = (did: Did): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
66
+
export const findAllProfiles = (did: At.DID): CacheMatcher<AppBskyActorDefs.ProfileViewBasic> => {
68
67
return {
69
68
filter: {
70
69
queryKey: ['timeline'],
+21
-21
src/api/types/at-uri.ts
+21
-21
src/api/types/at-uri.ts
···
1
-
import {
2
-
type ActorIdentifier,
3
-
type Nsid,
4
-
type ParsedCanonicalResourceUri,
5
-
type RecordKey,
6
-
type ResourceUri,
7
-
parseCanonicalResourceUri,
8
-
} from '@atcute/lexicons';
9
-
import type { Records } from '@atcute/lexicons/ambient';
1
+
import type { At, Records } from '@atcute/client/lexicons';
10
2
11
3
import { assert } from '~/lib/utils/invariant';
12
4
13
-
// #__NO_SIDE_EFFECTS__
14
-
export const assertCanonicalResourceUri = (input: string): ParsedCanonicalResourceUri => {
15
-
const result = parseCanonicalResourceUri(input);
16
-
if (!result.ok) {
17
-
assert(false, result.error);
18
-
}
5
+
export const ATURI_RE =
6
+
/^at:\/\/(did:[a-z]+:[a-zA-Z0-9._:%\-]*[a-zA-Z0-9._\-]|(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\/([a-zA-Z0-9-.]+)\/((?!\.{1,2}$)[a-zA-Z0-9_~.:-]{1,512})(?:#(\/[a-zA-Z0-9._~:@!$&%')(*+,;=\-[\]/\\]*))?$/;
19
7
20
-
return result.value;
8
+
export interface ParsedAtUri {
9
+
repo: string;
10
+
collection: string;
11
+
rkey: string;
12
+
fragment: string | undefined;
13
+
}
14
+
15
+
export const parseAtUri = (str: string): ParsedAtUri => {
16
+
const match = ATURI_RE.exec(str);
17
+
assert(match !== null, `failed to parse at-uri for ${str}`);
18
+
19
+
return {
20
+
repo: match[1] as At.DID,
21
+
collection: match[2],
22
+
rkey: match[3],
23
+
fragment: match[4],
24
+
};
21
25
};
22
26
23
-
export const makeAtUri = (
24
-
repo: ActorIdentifier,
25
-
collection: keyof Records | (Nsid & {}),
26
-
rkey: RecordKey,
27
-
): ResourceUri => {
27
+
export const makeAtUri = (repo: string, collection: keyof Records | (string & {}), rkey: string) => {
28
28
return `at://${repo}/${collection}/${rkey}`;
29
29
};
+34
src/api/types/identity.ts
+34
src/api/types/identity.ts
···
1
+
export type Handle = `${string}.${string}`;
2
+
3
+
export const HANDLE_RE =
4
+
/^(?=.{4,253}$)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+([a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/;
5
+
6
+
export const isHandle = (input: string): input is Handle => {
7
+
return input.length >= 3 && input.length <= 253 && HANDLE_RE.test(input);
8
+
};
9
+
10
+
export type Did<TMethod extends string = string> = `did:${TMethod}:${string}`;
11
+
export type AtprotoDid = Did<'plc' | 'web'>;
12
+
13
+
export const DID_RE = /^(?=.{7,2048}$)did:([a-z]+):([a-zA-Z0-9._:%\-]*[a-zA-Z0-9._\-])$/;
14
+
15
+
export const isDid = (input: string): input is Did => {
16
+
return input.length >= 7 && input.length <= 2048 && DID_RE.test(input);
17
+
};
18
+
19
+
export const ATPROTO_WEB_DID_RE =
20
+
/^did:web:([a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*(?:\.[a-zA-Z]{2,})|localhost(?:%3[aA]\d+)?)$/;
21
+
22
+
export const isAtprotoWebDid = (input: string): input is Did<'web'> => {
23
+
return input.length >= 12 && ATPROTO_WEB_DID_RE.test(input);
24
+
};
25
+
26
+
export const PLC_DID_RE = /^did:plc:([a-z2-7]{24})$/;
27
+
28
+
export const isPlcDid = (input: string): input is Did<'plc'> => {
29
+
return input.length === 32 && PLC_DID_RE.test(input);
30
+
};
31
+
32
+
export const isAtprotoDid = (input: string): input is AtprotoDid => {
33
+
return isPlcDid(input) || isAtprotoWebDid(input);
34
+
};
+1
-1
src/api/types/profile-response.ts
+1
-1
src/api/types/profile-response.ts
+11
src/api/types/rkey.ts
+11
src/api/types/rkey.ts
···
1
+
export const RECORD_KEY_RE = /(?!\.{1,2}$)[a-zA-Z0-9_~.:-]{1,512}/;
2
+
3
+
export const isRecordKey = (input: string) => {
4
+
return input.length >= 1 && input.length <= 512 && RECORD_KEY_RE.test(input);
5
+
};
6
+
7
+
export const TID_RE = /^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/;
8
+
9
+
export const isTid = (input: string) => {
10
+
return input.length === 13 && TID_RE.test(input);
11
+
};
+56
src/api/utils/bluesky/embed-view.ts
+56
src/api/utils/bluesky/embed-view.ts
···
1
+
import type { AppBskyEmbedRecordWithMedia, AppBskyFeedDefs } from '@atcute/client/lexicons';
2
+
3
+
import { parseAtUri } from '~/api/types/at-uri';
4
+
5
+
export interface EmbedsView {
6
+
media?: AppBskyEmbedRecordWithMedia.View['media'];
7
+
record?: AppBskyEmbedRecordWithMedia.View['record']['record'];
8
+
}
9
+
10
+
export type MediaEmbedView = NonNullable<EmbedsView['media']>;
11
+
export type RecordEmbedView = NonNullable<EmbedsView['record']>;
12
+
13
+
export const unwrapMediaEmbedView = (embed: AppBskyFeedDefs.PostView['embed']): EmbedsView['media'] => {
14
+
switch (embed?.$type) {
15
+
case 'app.bsky.embed.recordWithMedia#view':
16
+
return embed.media;
17
+
case 'app.bsky.embed.record#view':
18
+
return;
19
+
}
20
+
21
+
return embed;
22
+
};
23
+
24
+
export const unwrapRecordEmbedView = (embed: AppBskyFeedDefs.PostView['embed']): EmbedsView['record'] => {
25
+
switch (embed?.$type) {
26
+
case 'app.bsky.embed.recordWithMedia#view':
27
+
return embed.record.record;
28
+
29
+
case 'app.bsky.embed.record#view':
30
+
return embed.record;
31
+
}
32
+
};
33
+
34
+
export const unwrapEmbedView = (embed: AppBskyFeedDefs.PostView['embed']): EmbedsView => {
35
+
return {
36
+
media: unwrapMediaEmbedView(embed),
37
+
record: unwrapRecordEmbedView(embed),
38
+
};
39
+
};
40
+
41
+
export const getQuoteEmbedView = (embed: RecordEmbedView | undefined) => {
42
+
switch (embed?.$type) {
43
+
case 'app.bsky.embed.record#viewRecord': {
44
+
return embed;
45
+
}
46
+
47
+
case 'app.bsky.embed.record#viewNotFound':
48
+
case 'app.bsky.embed.record#viewDetached':
49
+
case 'app.bsky.embed.record#viewBlocked': {
50
+
const uri = parseAtUri(embed.uri);
51
+
if (uri.collection === 'app.bsky.feed.post') {
52
+
return embed;
53
+
}
54
+
}
55
+
}
56
+
};
+37
src/api/utils/bluesky/embed.ts
+37
src/api/utils/bluesky/embed.ts
···
1
+
import type { AppBskyEmbedRecordWithMedia, AppBskyFeedPost } from '@atcute/client/lexicons';
2
+
3
+
export interface Embeds {
4
+
media?: AppBskyEmbedRecordWithMedia.Main['media'];
5
+
record?: AppBskyEmbedRecordWithMedia.Main['record'];
6
+
}
7
+
8
+
export type MediaEmbed = NonNullable<Embeds['media']>;
9
+
export type RecordEmbed = NonNullable<Embeds['record']>;
10
+
11
+
export const unwrapMediaEmbed = (embed: AppBskyFeedPost.Record['embed']): Embeds['media'] => {
12
+
switch (embed?.$type) {
13
+
case 'app.bsky.embed.recordWithMedia':
14
+
return embed.media;
15
+
case 'app.bsky.embed.record':
16
+
return;
17
+
}
18
+
19
+
return embed;
20
+
};
21
+
22
+
export const unwrapRecordEmbed = (embed: AppBskyFeedPost.Record['embed']): Embeds['record'] => {
23
+
switch (embed?.$type) {
24
+
case 'app.bsky.embed.recordWithMedia':
25
+
return embed.record;
26
+
27
+
case 'app.bsky.embed.record':
28
+
return embed;
29
+
}
30
+
};
31
+
32
+
export const unwrapEmbed = (embed: AppBskyFeedPost.Record['embed']): Embeds => {
33
+
return {
34
+
media: unwrapMediaEmbed(embed),
35
+
record: unwrapRecordEmbed(embed),
36
+
};
37
+
};
+11
-12
src/api/utils/did.ts
+11
-12
src/api/utils/did.ts
···
1
-
import { type Client, ok } from '@atcute/client';
2
-
import type { Did, Handle } from '@atcute/lexicons';
3
-
import { isDid } from '@atcute/lexicons/syntax';
1
+
import type { XRPC } from '@atcute/client';
2
+
import type { At } from '@atcute/client/lexicons';
4
3
5
-
const getDid = async (client: Client, actor: Handle, signal?: AbortSignal) => {
6
-
let did: Did;
4
+
import { isDid } from '../types/identity';
5
+
6
+
const getDid = async (rpc: XRPC, actor: string, signal?: AbortSignal) => {
7
+
let did: At.DID;
7
8
if (isDid(actor)) {
8
9
did = actor;
9
10
} else {
10
-
const data = await ok(
11
-
client.get('com.atproto.identity.resolveHandle', {
12
-
signal: signal,
13
-
params: { handle: actor },
14
-
}),
15
-
);
11
+
const response = await rpc.get('com.atproto.identity.resolveHandle', {
12
+
signal: signal,
13
+
params: { handle: actor },
14
+
});
16
15
17
-
did = data.did;
16
+
did = response.data.did;
18
17
}
19
18
20
19
return did;
+5
-5
src/api/utils/error.ts
+5
-5
src/api/utils/error.ts
···
1
-
import { ClientResponseError } from '@atcute/client';
1
+
import { XRPCError } from '@atcute/client';
2
2
import { TokenRefreshError } from '@atcute/oauth-browser-client';
3
3
4
-
export const formatXRPCError = (err: ClientResponseError): string => {
5
-
const name = err.error;
4
+
export const formatXRPCError = (err: XRPCError): string => {
5
+
const name = err.kind;
6
6
return (name ? name + ': ' : '') + err.description;
7
7
};
8
8
···
11
11
return `Account session is no longer valid`;
12
12
}
13
13
14
-
if (err instanceof ClientResponseError) {
15
-
const kind = err.error;
14
+
if (err instanceof XRPCError) {
15
+
const kind = err.kind;
16
16
17
17
if (kind === 'invalid_token') {
18
18
return `Account session is no longer valid`;
+4
-6
src/api/utils/post.ts
+4
-6
src/api/utils/post.ts
···
4
4
AppBskyEmbedRecord,
5
5
AppBskyFeedDefs,
6
6
AppBskyFeedPost,
7
-
} from '@atcute/bluesky';
8
-
import type { $type } from '@atcute/lexicons';
7
+
Brand,
8
+
} from '@atcute/client/lexicons';
9
9
10
-
type RecordEmbed = AppBskyFeedPost.Main['embed'];
10
+
type RecordEmbed = AppBskyFeedPost.Record['embed'];
11
11
type ViewEmbed = AppBskyFeedDefs.PostView['embed'];
12
12
13
13
export const unwrapPostEmbedText = (embed: RecordEmbed | ViewEmbed): string => {
···
35
35
type RecordMedia = AppBskyEmbedExternal.Main | AppBskyEmbedImages.Main;
36
36
type ViewMedia = AppBskyEmbedExternal.View | AppBskyEmbedImages.View;
37
37
38
-
const getMediaEmbed = (
39
-
embed: RecordEmbed | ViewEmbed,
40
-
): $type.enforce<RecordMedia | ViewMedia> | undefined => {
38
+
const getMediaEmbed = (embed: RecordEmbed | ViewEmbed): Brand.Union<RecordMedia | ViewMedia> | undefined => {
41
39
if (embed) {
42
40
const type = embed.$type;
43
41
+44
-62
src/api/utils/records.ts
+44
-62
src/api/utils/records.ts
···
1
-
import type { ComAtprotoRepoGetRecord, ComAtprotoRepoListRecords } from '@atcute/atproto';
2
-
import { type Client, ok } from '@atcute/client';
3
-
import type { Cid, Did, InferInput, ResourceUri } from '@atcute/lexicons';
4
-
import type { Records } from '@atcute/lexicons/ambient';
1
+
import type { XRPC } from '@atcute/client';
2
+
import type {
3
+
At,
4
+
ComAtprotoRepoGetRecord,
5
+
ComAtprotoRepoListRecords,
6
+
Records,
7
+
} from '@atcute/client/lexicons';
5
8
6
9
type RecordType = keyof Records;
7
10
8
11
export interface CreateRecordOptions<K extends RecordType> {
9
-
repo: Did;
12
+
repo: At.DID;
10
13
collection: K;
11
14
rkey?: string;
12
-
record: InferInput<Records[K]>;
15
+
record: Records[K];
13
16
swapCommit?: string;
14
17
validate?: boolean;
15
18
}
16
19
17
-
export const createRecord = async <K extends RecordType>(client: Client, options: CreateRecordOptions<K>) => {
18
-
const data = await ok(
19
-
client.post('com.atproto.repo.createRecord', {
20
-
input: options as any,
21
-
}),
22
-
);
20
+
export const createRecord = async <K extends RecordType>(rpc: XRPC, options: CreateRecordOptions<K>) => {
21
+
const { data } = await rpc.call('com.atproto.repo.createRecord', { data: options });
23
22
24
23
return data;
25
24
};
26
25
27
26
export interface PutRecordOptions<K extends RecordType> {
28
-
repo: Did;
27
+
repo: At.DID;
29
28
collection: K;
30
29
rkey: string;
31
-
record: InferInput<Records[K]>;
30
+
record: Records[K];
32
31
swapCommit?: string;
33
-
swapRecord?: Cid | null;
32
+
swapRecord?: At.CID | null;
34
33
validate?: boolean;
35
34
}
36
35
37
-
export const putRecord = async <K extends RecordType>(client: Client, options: PutRecordOptions<K>) => {
38
-
const data = await ok(
39
-
client.post('com.atproto.repo.putRecord', {
40
-
input: options as any,
41
-
}),
42
-
);
36
+
export const putRecord = async <K extends RecordType>(rpc: XRPC, options: PutRecordOptions<K>) => {
37
+
const { data } = await rpc.call('com.atproto.repo.putRecord', { data: options });
43
38
44
39
return data;
45
40
};
46
41
47
42
export interface DeleteRecordOptions<K extends RecordType> {
48
-
repo: Did;
43
+
repo: At.DID;
49
44
collection: K;
50
45
rkey: string;
51
46
swapCommit?: string;
52
47
swapRecord?: string;
53
48
}
54
49
55
-
export const deleteRecord = async <K extends RecordType>(client: Client, options: DeleteRecordOptions<K>) => {
56
-
await ok(
57
-
client.post('com.atproto.repo.deleteRecord', {
58
-
input: options,
59
-
}),
60
-
);
50
+
export const deleteRecord = async <K extends RecordType>(rpc: XRPC, options: DeleteRecordOptions<K>) => {
51
+
await rpc.call('com.atproto.repo.deleteRecord', {
52
+
data: options,
53
+
});
61
54
};
62
55
63
56
export interface GetRecordOptions<K extends RecordType> {
64
-
signal?: AbortSignal;
65
-
repo: Did;
57
+
repo: At.DID;
66
58
collection: K;
67
59
rkey: string;
68
60
cid?: string;
69
61
}
70
62
71
-
export type GetRecordOutput<T> = ComAtprotoRepoGetRecord.$output & {
63
+
export interface GetRecordOutput<T> extends ComAtprotoRepoGetRecord.Output {
72
64
value: T;
73
-
};
65
+
}
74
66
75
67
export const getRecord = async <K extends RecordType>(
76
-
client: Client,
68
+
rpc: XRPC,
77
69
options: GetRecordOptions<K>,
78
-
): Promise<GetRecordOutput<InferInput<Records[K]>>> => {
79
-
const data = await ok(
80
-
client.get('com.atproto.repo.getRecord', {
81
-
signal: options.signal,
82
-
params: {
83
-
repo: options.repo,
84
-
collection: options.collection,
85
-
rkey: options.rkey,
86
-
cid: options.cid,
87
-
},
88
-
}),
89
-
);
70
+
): Promise<GetRecordOutput<Records[K]>> => {
71
+
const { data } = await rpc.get('com.atproto.repo.getRecord', {
72
+
params: options,
73
+
});
90
74
91
75
return data as any;
92
76
};
93
77
94
78
export interface ListRecordsOptions<K extends RecordType> {
95
79
signal?: AbortSignal;
96
-
repo: Did;
80
+
repo: At.DID;
97
81
collection: K;
98
82
cursor?: string;
99
83
limit?: number;
100
84
}
101
85
102
-
export type ListRecordsOutput<T> = ComAtprotoRepoListRecords.$output & {
86
+
export interface ListRecordsOutput<T> extends ComAtprotoRepoListRecords.Output {
103
87
cursor?: string;
104
-
records: { cid: Cid; uri: ResourceUri; value: T }[];
105
-
};
88
+
records: { cid: At.CID; uri: At.Uri; value: T }[];
89
+
}
106
90
107
91
export const listRecords = async <K extends RecordType>(
108
-
client: Client,
92
+
rpc: XRPC,
109
93
options: ListRecordsOptions<K>,
110
-
): Promise<ListRecordsOutput<InferInput<Records[K]>>> => {
111
-
const data = await ok(
112
-
client.get('com.atproto.repo.listRecords', {
113
-
signal: options.signal,
114
-
params: {
115
-
repo: options.repo,
116
-
collection: options.collection,
117
-
limit: options.limit,
118
-
cursor: options.cursor,
119
-
},
120
-
}),
121
-
);
94
+
): Promise<ListRecordsOutput<Records[K]>> => {
95
+
const { data } = await rpc.get('com.atproto.repo.listRecords', {
96
+
signal: options.signal,
97
+
params: {
98
+
repo: options.repo,
99
+
collection: options.collection,
100
+
limit: options.limit,
101
+
cursor: options.cursor,
102
+
},
103
+
});
122
104
123
105
return data as any;
124
106
};
+1
-1
src/api/utils/richtext-stringify.ts
+1
-1
src/api/utils/richtext-stringify.ts
+17
src/atcute-env.d.ts
+17
src/atcute-env.d.ts
···
1
+
import type { AppBskyRichtextFacet } from '@atcute/client/lexicons';
2
+
3
+
declare module '@atcute/client/lexicons' {
4
+
namespace AppBskyRichtextFacet {
5
+
type FacetFeature = Brand.Union<Link | Mention | Tag | BlueMojiRichtextFacet.Main>;
6
+
7
+
interface Main {
8
+
features: FacetFeature[];
9
+
}
10
+
}
11
+
}
12
+
13
+
declare module '@atcute/bluesky-richtext-segmenter' {
14
+
export interface RichtextSegment {
15
+
features: AppBskyRichtextFacet.FacetFeature[] | undefined;
16
+
}
17
+
}
+69
src/basa-env.d.ts
+69
src/basa-env.d.ts
···
1
+
/* eslint-disable */
2
+
// This file is automatically generated, do not edit!
3
+
import '@atcute/client/lexicons';
4
+
5
+
declare module '@atcute/client/lexicons' {
6
+
/** Describes the translation proxy instance */
7
+
namespace XBasaDescribeServer {
8
+
interface Params {}
9
+
type Input = undefined;
10
+
interface Output {
11
+
engines: Engines;
12
+
}
13
+
interface Engine {
14
+
[Brand.Type]?: 'x.basa.describeServer#engine';
15
+
/** Supported language codes */
16
+
languages: string[];
17
+
}
18
+
interface Engines {
19
+
[Brand.Type]?: 'x.basa.describeServer#engines';
20
+
deepl?: Engine;
21
+
google?: Engine;
22
+
}
23
+
}
24
+
25
+
/** Translates a given text into another language */
26
+
namespace XBasaTranslate {
27
+
interface Params {
28
+
/** Text needing translation */
29
+
text: string;
30
+
/** Target language */
31
+
to: string;
32
+
/**
33
+
* Which translation service to use
34
+
* @default "google"
35
+
*/
36
+
engine?: 'google' | 'deepl';
37
+
/**
38
+
* Source language
39
+
* @default "auto"
40
+
*/
41
+
from?: string;
42
+
}
43
+
type Input = undefined;
44
+
interface Output {
45
+
/** Translated text */
46
+
result: string;
47
+
/** Deteced language from source text */
48
+
sourceLanguage?: string;
49
+
/** Transliteration of source text */
50
+
sourceTransliteration?: string;
51
+
/** Transliteration of translated text */
52
+
targetTransliteration?: string;
53
+
}
54
+
}
55
+
56
+
interface Records {}
57
+
58
+
interface Queries {
59
+
'x.basa.describeServer': {
60
+
output: XBasaDescribeServer.Output;
61
+
};
62
+
'x.basa.translate': {
63
+
params: XBasaTranslate.Params;
64
+
output: XBasaTranslate.Output;
65
+
};
66
+
}
67
+
68
+
interface Procedures {}
69
+
}
+1
-1
src/components/avatar.tsx
+1
-1
src/components/avatar.tsx
···
1
1
import { Match, Switch } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
3
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
4
4
5
5
import { type ModerationCause, getModerationUI } from '~/api/moderation';
6
6
import { ContextProfileMedia, type ModerationContext } from '~/api/moderation/constants';
+1
-1
src/components/bookmarks/add-post-to-folder-dialog.tsx
+1
-1
src/components/bookmarks/add-post-to-folder-dialog.tsx
+4
-5
src/components/bookmarks/bookmark-feed-item.tsx
+4
-5
src/components/bookmarks/bookmark-feed-item.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyFeedPost } from '@atcute/bluesky';
3
+
import type { AppBskyFeedPost } from '@atcute/client/lexicons';
4
4
5
5
import { usePostShadow } from '~/api/cache/post-shadow';
6
6
import { getModerationUI } from '~/api/moderation';
7
7
import { ContextContentList } from '~/api/moderation/constants';
8
8
import { moderatePost } from '~/api/moderation/entities/post';
9
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
9
+
import { parseAtUri } from '~/api/types/at-uri';
10
10
11
11
import { history } from '~/globals/navigation';
12
12
···
35
35
const { post, stale } = item;
36
36
37
37
const author = post.author;
38
-
const record = post.record as AppBskyFeedPost.Main;
38
+
const record = post.record as AppBskyFeedPost.Record;
39
39
const embed = post.embed;
40
40
41
41
const shadow = usePostShadow(post);
42
42
43
-
const uri = assertCanonicalResourceUri(post.uri);
44
-
43
+
const uri = parseAtUri(post.uri);
45
44
const authorHref = `/${author.did}`;
46
45
const href = `/${author.did}/${uri.rkey}`;
47
46
+1
-1
src/components/composer/composer-dialog.tsx
+1
-1
src/components/composer/composer-dialog.tsx
···
13
13
} from 'solid-js';
14
14
import { createMutable, unwrap } from 'solid-js/store';
15
15
16
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
16
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
17
17
import { type CreateQueryResult, useQueryClient } from '@mary/solid-query';
18
18
19
19
import { GLOBAL_LABELS, getLocalizedLabel } from '~/api/moderation';
+9
-12
src/components/composer/composer-input.tsx
+9
-12
src/components/composer/composer-input.tsx
···
12
12
createSignal,
13
13
} from 'solid-js';
14
14
15
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
16
-
import { ok } from '@atcute/client';
15
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
17
16
18
17
import { safeUrlParse } from '~/api/utils/strings';
19
18
···
63
62
const onChange = props.onChange;
64
63
const onSubmit = props.onSubmit;
65
64
66
-
const { client } = useAgent();
65
+
const { rpc } = useAgent();
67
66
68
67
const [inputCursor, setInputCursor] = createSignal<number>();
69
68
const [menuSelection, setMenuSelection] = createSignal<number>();
···
136
135
const MATCH_LIMIT = 5;
137
136
138
137
if (type === Suggestion.MENTION) {
139
-
const data = await ok(
140
-
client.get('app.bsky.actor.searchActorsTypeahead', {
141
-
params: {
142
-
q: match.query,
143
-
limit: MATCH_LIMIT,
144
-
},
145
-
}),
146
-
);
138
+
const response = await rpc.get('app.bsky.actor.searchActorsTypeahead', {
139
+
params: {
140
+
q: match.query,
141
+
limit: MATCH_LIMIT,
142
+
},
143
+
});
147
144
148
-
return data.actors.map((item) => ({ type: Suggestion.MENTION, data: item }));
145
+
return response.data.actors.map((item) => ({ type: Suggestion.MENTION, data: item }));
149
146
}
150
147
151
148
assert(false, `expected match`);
+4
-3
src/components/composer/composer-reply-context.tsx
+4
-3
src/components/composer/composer-reply-context.tsx
···
1
1
import { Match, Switch, createMemo } from 'solid-js';
2
2
3
-
import { type AppBskyFeedPost, unwrapMediaEmbed } from '@atcute/bluesky';
3
+
import type { AppBskyFeedPost } from '@atcute/client/lexicons';
4
4
5
5
import { getModerationUI } from '~/api/moderation';
6
6
import { ContextContentMedia } from '~/api/moderation/constants';
7
7
import { moderatePost } from '~/api/moderation/entities/post';
8
8
import { createPostQuery } from '~/api/queries/post';
9
+
import { unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view';
9
10
import { formatQueryError } from '~/api/utils/error';
10
11
11
12
import { inject } from '~/lib/states/singleton';
···
33
34
<Match when={query.data} keyed>
34
35
{(post) => {
35
36
const author = post.author;
36
-
const record = post.record as AppBskyFeedPost.Main;
37
+
const record = post.record as AppBskyFeedPost.Record;
37
38
38
39
const moderation = createMemo(() => moderatePost(post, moderationOptions()));
39
40
const shouldBlurImage = () => getModerationUI(moderation(), ContextContentMedia).b.length !== 0;
40
41
41
-
const media = unwrapMediaEmbed(post.embed);
42
+
const media = unwrapMediaEmbedView(post.embed);
42
43
43
44
return (
44
45
<div class="relative flex gap-3 px-4 pt-3">
+2
-3
src/components/composer/dialogs/composed-interaction-dialog.tsx
+2
-3
src/components/composer/dialogs/composed-interaction-dialog.tsx
···
1
1
import { For, Match, Switch, batch, createEffect, createMemo, createSignal, untrack } from 'solid-js';
2
2
3
-
import type { AppBskyFeedThreadgate } from '@atcute/bluesky';
4
-
import type { $type } from '@atcute/lexicons';
3
+
import type { AppBskyFeedThreadgate, Brand } from '@atcute/client/lexicons';
5
4
6
5
import { createMyListsQuery } from '~/api/queries/my-lists';
7
6
import { dequal } from '~/api/utils/dequal';
···
240
239
<Boxed.List>
241
240
<For each={lists.data}>
242
241
{(list) => {
243
-
const rule: $type.enforce<AppBskyFeedThreadgate.ListRule> = {
242
+
const rule: Brand.Union<AppBskyFeedThreadgate.ListRule> = {
244
243
$type: 'app.bsky.feed.threadgate#listRule',
245
244
list: list.uri,
246
245
};
+4
-5
src/components/composer/embeds/link-embed.tsx
+4
-5
src/components/composer/embeds/link-embed.tsx
···
1
1
import { Match, Switch, onCleanup } from 'solid-js';
2
2
3
-
import type { AppBskyEmbedExternal } from '@atcute/bluesky';
4
-
import type { GenericUri } from '@atcute/lexicons';
3
+
import type { AppBskyEmbedExternal } from '@atcute/client/lexicons';
5
4
6
5
import { createLinkMetaQuery } from '~/api/queries/composer';
7
6
···
39
38
{(state) => {
40
39
const meta = state.external;
41
40
42
-
let thumbUrl: GenericUri | undefined;
43
-
if (meta.thumb && '$type' in meta.thumb) {
41
+
let thumbUrl: string | undefined;
42
+
if (meta.thumb) {
44
43
const did = currentAccount!.did;
45
44
const cid = meta.thumb.ref.$link;
46
45
···
86
85
title: data.title,
87
86
description: data.description,
88
87
uri: data.uri,
89
-
thumb: thumbUrl as GenericUri,
88
+
thumb: thumbUrl,
90
89
},
91
90
};
92
91
+1
-1
src/components/composer/embeds/quote-embed.tsx
+1
-1
src/components/composer/embeds/quote-embed.tsx
+2
-3
src/components/composer/gifs/gif-search-dialog.tsx
+2
-3
src/components/composer/gifs/gif-search-dialog.tsx
···
1
1
import { For, Match, Switch, createSignal } from 'solid-js';
2
2
3
-
import type { GenericUri } from '@atcute/lexicons';
4
3
import { chunked } from '@mary/array-fns';
5
4
6
5
import { type Gif, createGifSearchQuery } from '~/api/queries/composer-gif';
···
111
110
export default GifSearchDialog;
112
111
113
112
export interface GifMedia {
114
-
embedUrl: GenericUri;
113
+
embedUrl: string;
115
114
alt: string;
116
115
ratio: { width: number; height: number };
117
116
···
129
128
const [, id, file] = /\/([^/]+?AAAAC)\/([^/]+?)\.gif\/?$/.exec(url)!;
130
129
131
130
return {
132
-
embedUrl: (url + `?hh=${dimensions[1]}&ww=${dimensions[0]}`) as GenericUri,
131
+
embedUrl: url + `?hh=${dimensions[1]}&ww=${dimensions[0]}`,
133
132
alt: gif.content_description,
134
133
ratio: { width: dimensions[0], height: dimensions[1] },
135
134
+83
-100
src/components/composer/lib/api.ts
+83
-100
src/components/composer/lib/api.ts
···
1
1
import { nanoid } from 'nanoid/non-secure';
2
2
3
-
import type {
4
-
ComAtprotoLabelDefs,
5
-
ComAtprotoRepoApplyWrites,
6
-
ComAtprotoRepoStrongRef,
7
-
} from '@atcute/atproto';
8
-
import type { BlueMojiRichtextFacet } from '@atcute/bluemoji';
3
+
import { XRPC, XRPCError, simpleFetchHandler } from '@atcute/client';
9
4
import type {
10
5
AppBskyEmbedImages,
11
6
AppBskyEmbedRecord,
···
17
12
AppBskyGraphDefs,
18
13
AppBskyRichtextFacet,
19
14
AppBskyVideoDefs,
20
-
} from '@atcute/bluesky';
21
-
import { Client, ClientResponseError, ok, simpleFetchHandler } from '@atcute/client';
22
-
import { type $type, type Blob as AtpBlob, type Did, type GenericUri, type Handle } from '@atcute/lexicons';
23
-
import { isDid } from '@atcute/lexicons/syntax';
15
+
At,
16
+
BlueMojiRichtextFacet,
17
+
Brand,
18
+
ComAtprotoLabelDefs,
19
+
ComAtprotoRepoApplyWrites,
20
+
ComAtprotoRepoStrongRef,
21
+
} from '@atcute/client/lexicons';
24
22
import * as TID from '@atcute/tid';
25
23
import type { QueryClient } from '@mary/solid-query';
26
24
···
28
26
import { uploadBlob } from '~/api/queries/blob';
29
27
import type { LinkMeta } from '~/api/queries/composer';
30
28
import { resolveHandle } from '~/api/queries/handle';
31
-
import { assertCanonicalResourceUri, makeAtUri } from '~/api/types/at-uri';
29
+
import { makeAtUri, parseAtUri } from '~/api/types/at-uri';
30
+
import { isDid } from '~/api/types/identity';
32
31
import { getRecord } from '~/api/utils/records';
33
32
import { trimRichText } from '~/api/utils/richtext';
34
33
import { getUtf8Length } from '~/api/utils/unicode';
···
58
57
let cidPromise: Promise<typeof import('./cid')>;
59
58
60
59
export const publish = async ({ agent, queryClient, state, onLog: log }: PublishOptions) => {
61
-
const client = agent.client;
60
+
const rpc = agent.rpc;
62
61
const did = agent.did!;
63
62
64
63
const now = new Date();
65
-
const writes: ComAtprotoRepoApplyWrites.$input['writes'] = [];
64
+
const writes: ComAtprotoRepoApplyWrites.Input['writes'] = [];
66
65
67
66
let reply: AppBskyFeedPost.ReplyRef | undefined;
68
67
let rkey: string | undefined;
···
75
74
queryKey: ['post', replyUri],
76
75
staleTime: 30_000,
77
76
async queryFn(ctx) {
78
-
const uri = assertCanonicalResourceUri(replyUri);
77
+
const uri = parseAtUri(replyUri);
79
78
80
-
let did: Did;
79
+
let did: At.DID;
81
80
if (isDid(uri.repo)) {
82
81
did = uri.repo;
83
82
} else {
84
-
did = await resolveHandle(client, uri.repo, ctx.signal);
83
+
did = await resolveHandle(rpc, uri.repo, ctx.signal);
85
84
}
86
85
87
-
const data = await ok(
88
-
client.get('app.bsky.feed.getPosts', {
89
-
signal: ctx.signal,
90
-
params: {
91
-
uris: [makeAtUri(did, uri.collection, uri.rkey)],
92
-
},
93
-
}),
94
-
);
86
+
const { data } = await rpc.get('app.bsky.feed.getPosts', {
87
+
signal: ctx.signal,
88
+
params: {
89
+
uris: [makeAtUri(did, uri.collection, uri.rkey)],
90
+
},
91
+
});
95
92
96
93
const post = data.posts[0];
97
94
···
103
100
},
104
101
});
105
102
106
-
const root = (post.record as AppBskyFeedPost.Main).reply?.root;
103
+
const root = (post.record as AppBskyFeedPost.Record).reply?.root;
107
104
const ref: ComAtprotoRepoStrongRef.Main = {
108
105
uri: post.uri,
109
106
cid: post.cid,
···
116
113
}
117
114
118
115
if (state.redraftUri) {
119
-
const uri = assertCanonicalResourceUri(state.redraftUri);
116
+
const uri = parseAtUri(state.redraftUri);
120
117
121
118
writes.push({
122
119
$type: 'com.atproto.repo.applyWrites#delete',
···
142
139
143
140
// Get the self-labels
144
141
const labels = getEmbedLabels(post.embed);
145
-
let selfLabels: $type.enforce<ComAtprotoLabelDefs.SelfLabels> | undefined;
142
+
let selfLabels: Brand.Union<ComAtprotoLabelDefs.SelfLabels> | undefined;
146
143
147
144
if (labels?.length) {
148
145
selfLabels = {
···
152
149
}
153
150
154
151
// Now form the record
155
-
const record: AppBskyFeedPost.Main = {
152
+
const record: AppBskyFeedPost.Record = {
156
153
$type: 'app.bsky.feed.post',
157
154
createdAt: now.toISOString(),
158
155
text: rt.text,
···
172
169
173
170
// If this is the first post, and we have a threadgate set, create one now.
174
171
if (idx === 0 && !reply && state.threadgate.allow) {
175
-
const threadgateRecord: AppBskyFeedThreadgate.Main = {
172
+
const threadgateRecord: AppBskyFeedThreadgate.Record = {
176
173
$type: 'app.bsky.feed.threadgate',
177
174
createdAt: now.toISOString(),
178
175
post: uri,
···
189
186
190
187
// If we have a postgate set, create one for this post.
191
188
if (state.postgate.embeddingRules?.length) {
192
-
const postgateRecord: AppBskyFeedPostgate.Main = {
189
+
const postgateRecord: AppBskyFeedPostgate.Record = {
193
190
$type: 'app.bsky.feed.postgate',
194
191
createdAt: now.toISOString(),
195
192
post: uri,
···
229
226
230
227
log?.(`Posting`);
231
228
232
-
await ok(
233
-
client.post('com.atproto.repo.applyWrites', {
234
-
input: {
235
-
repo: did,
236
-
writes: writes,
237
-
},
238
-
}),
239
-
);
229
+
await rpc.call('com.atproto.repo.applyWrites', {
230
+
data: {
231
+
repo: did,
232
+
writes: writes,
233
+
},
234
+
});
240
235
241
236
if (state.redraftUri) {
242
237
updatePostShadow(queryClient, state.redraftUri, { deleted: true });
···
244
239
245
240
return writes;
246
241
247
-
async function resolveEmbed(root: PostEmbed): Promise<AppBskyFeedPost.Main['embed']> {
242
+
async function resolveEmbed(root: PostEmbed): Promise<AppBskyFeedPost.Record['embed']> {
248
243
let pMedia: Promise<AppBskyEmbedRecordWithMedia.Main['media']> | undefined;
249
-
let pRecord: Promise<$type.enforce<AppBskyEmbedRecord.Main>> | undefined;
244
+
let pRecord: Promise<Brand.Union<AppBskyEmbedRecord.Main>> | undefined;
250
245
251
246
if (root.media) {
252
247
pMedia = resolveMediaEmbed(root.media);
···
303
298
304
299
switch (source.type) {
305
300
case 'local': {
306
-
const uploaded = await uploadBlob(client, source.blob);
301
+
const uploaded = await uploadBlob(rpc, source.blob);
307
302
308
303
return {
309
304
image: uploaded,
···
344
339
345
340
const blob = source.blob;
346
341
347
-
const videoClient = new Client({
348
-
handler: simpleFetchHandler({ service: 'https://video.bsky.app' }),
349
-
});
342
+
const videoRpc = new XRPC({ handler: simpleFetchHandler({ service: 'https://video.bsky.app' }) });
350
343
351
344
// Get upload limit status
352
345
{
···
367
360
// GET https://porcini.us-east.host.bsky.network/xrpc/chat.bsky.convo.getLog
368
361
// atproto-proxy: did:web:api.bsky.chat#bsky_chat
369
362
//
370
-
const tokenData = await ok(
371
-
client.get('com.atproto.server.getServiceAuth', {
372
-
params: {
373
-
aud: 'did:web:video.bsky.app',
374
-
lxm: 'app.bsky.video.getUploadLimits',
375
-
},
376
-
}),
377
-
);
363
+
const { data: tokenData } = await rpc.get('com.atproto.server.getServiceAuth', {
364
+
params: {
365
+
aud: 'did:web:video.bsky.app',
366
+
lxm: 'app.bsky.video.getUploadLimits',
367
+
},
368
+
});
378
369
379
-
const data = await ok(
380
-
videoClient.get('app.bsky.video.getUploadLimits', {
381
-
headers: {
382
-
authorization: `Bearer ${tokenData.token}`,
383
-
},
384
-
}),
385
-
);
370
+
const { data } = await videoRpc.get('app.bsky.video.getUploadLimits', {
371
+
headers: {
372
+
authorization: `Bearer ${tokenData.token}`,
373
+
},
374
+
});
386
375
387
376
if (!data.canUpload) {
388
377
let message = data.message || `You've reached the limit on video uploads`;
···
419
408
420
409
// Create an access token *to the PDS*, allowing the video service to
421
410
// upload the final blobs to our repository on our behalf.
422
-
const tokenData = await ok(
423
-
client.get('com.atproto.server.getServiceAuth', {
424
-
params: {
425
-
// `did:web:porcini.us-east.host.bsky.network`
426
-
aud: `did:web:${new URL(session.info.aud).host}`,
427
-
lxm: 'com.atproto.repo.uploadBlob',
428
-
exp: Date.now() / 1000 + 60 * 30, // 30 minutes
429
-
},
430
-
}),
431
-
);
411
+
const { data: tokenData } = await rpc.get('com.atproto.server.getServiceAuth', {
412
+
params: {
413
+
// `did:web:porcini.us-east.host.bsky.network`
414
+
aud: `did:web:${new URL(session.info.aud).host}`,
415
+
lxm: 'com.atproto.repo.uploadBlob',
416
+
exp: Date.now() / 1000 + 60 * 30, // 30 minutes
417
+
},
418
+
});
432
419
433
420
jobId = await new Promise((resolve, reject) => {
434
421
const xhr = new XMLHttpRequest();
···
478
465
}
479
466
480
467
// Check the upload status
481
-
let result: AtpBlob<any>;
468
+
let result: At.Blob<any>;
482
469
{
483
470
let pollFailures = 0;
484
471
···
488
475
let status: AppBskyVideoDefs.JobStatus;
489
476
490
477
try {
491
-
const data = await ok(
492
-
videoClient.get('app.bsky.video.getJobStatus', {
493
-
params: {
494
-
jobId: jobId,
495
-
},
496
-
}),
497
-
);
478
+
const { data } = await videoRpc.get('app.bsky.video.getJobStatus', {
479
+
params: {
480
+
jobId: jobId,
481
+
},
482
+
});
498
483
499
484
status = data.jobStatus;
500
485
pollFailures = 0;
···
510
495
const state = status.state;
511
496
512
497
if (state === 'JOB_STATE_COMPLETED') {
513
-
if (!status.blob || !('$type' in status.blob)) {
498
+
if (!status.blob) {
514
499
throw new PublishError(`Unexpected error when processing video`);
515
500
}
516
501
···
548
533
const gif = embed.gif;
549
534
const alt = embed.alt;
550
535
551
-
let thumbBlob: AtpBlob<any> | undefined;
536
+
let thumbBlob: At.Blob<any> | undefined;
552
537
553
538
{
554
539
log?.(`Retrieving GIF thumbnail`);
···
561
546
562
547
log?.(`Uploading GIF thumbnail`);
563
548
const compressed = await compressPostImage(gifBlob);
564
-
const blob = await uploadBlob(client, compressed.blob);
549
+
const blob = await uploadBlob(rpc, compressed.blob);
565
550
566
551
thumbBlob = blob;
567
552
}
···
593
578
594
579
// compress... upload...
595
580
const thumb = meta.thumb;
596
-
let thumbBlob: AtpBlob<any> | undefined;
581
+
let thumbBlob: At.Blob<any> | undefined;
597
582
598
583
if (thumb !== undefined) {
599
584
log?.(`Uploading link thumbnail`);
600
585
601
586
const compressed = await compressPostImage(thumb);
602
-
const blob = await uploadBlob(client, compressed.blob);
587
+
const blob = await uploadBlob(rpc, compressed.blob);
603
588
604
589
thumbBlob = blob;
605
590
}
···
617
602
618
603
async function resolveRecordEmbed(
619
604
record: PostRecordEmbed,
620
-
): Promise<$type.enforce<AppBskyEmbedRecord.Main>> {
605
+
): Promise<Brand.Union<AppBskyEmbedRecord.Main>> {
621
606
const type = record.type;
622
607
623
608
if (type === 'feed') {
···
684
669
if (type === 'link' || type === 'autolink') {
685
670
facets.push({
686
671
index: index,
687
-
features: [{ $type: 'app.bsky.richtext.facet#link', uri: token.url as GenericUri }],
672
+
features: [{ $type: 'app.bsky.richtext.facet#link', uri: token.url }],
688
673
});
689
674
} else if (type === 'mention') {
690
-
const handle = token.handle as Handle;
675
+
const handle = token.handle;
691
676
692
677
if (handle === 'handle.invalid') {
693
678
throw new InvalidHandleError(handle);
694
679
}
695
680
696
681
try {
697
-
const data = await ok(
698
-
client.get('com.atproto.identity.resolveHandle', {
699
-
params: {
700
-
handle: handle,
701
-
},
702
-
}),
703
-
);
682
+
const response = await rpc.get('com.atproto.identity.resolveHandle', {
683
+
params: {
684
+
handle: handle,
685
+
},
686
+
});
704
687
705
-
const did = data.did;
688
+
const did = response.data.did;
706
689
707
690
if (!hasSilent) {
708
691
facets.push({
···
716
699
});
717
700
}
718
701
} catch (err) {
719
-
if (err instanceof ClientResponseError && err.error === 'InvalidRequest') {
702
+
if (err instanceof XRPCError && err.kind === 'InvalidRequest') {
720
703
throw new InvalidHandleError(handle);
721
704
}
722
705
···
728
711
features: [{ $type: 'app.bsky.richtext.facet#tag', tag: token.name }],
729
712
});
730
713
} else if (type === 'emote') {
731
-
const { value } = await getRecord(client, {
714
+
const { value } = await getRecord(rpc, {
732
715
repo: did,
733
716
collection: 'blue.moji.collection.item',
734
717
rkey: token.name,
···
736
719
737
720
const raws = value.formats;
738
721
739
-
const cids: $type.enforce<BlueMojiRichtextFacet.Formats_v0> = {
722
+
const cids: Brand.Union<BlueMojiRichtextFacet.Formats_v0> = {
740
723
$type: 'blue.moji.richtext.facet#formats_v0',
741
724
};
742
725
···
749
732
cids.lottie = true;
750
733
}
751
734
752
-
if (raws.gif_128 && '$type' in raws.gif_128) {
735
+
if (raws.gif_128) {
753
736
cids.gif_128 = raws.gif_128.ref.$link;
754
737
}
755
738
756
-
if (raws.png_128 && '$type' in raws.png_128) {
739
+
if (raws.png_128) {
757
740
cids.png_128 = raws.png_128.ref.$link;
758
741
}
759
742
760
-
if (raws.webp_128 && '$type' in raws.webp_128) {
743
+
if (raws.webp_128) {
761
744
cids.webp_128 = raws.webp_128.ref.$link;
762
745
}
763
746
}
764
747
765
-
const facet: $type.enforce<BlueMojiRichtextFacet.Main> = {
748
+
const facet: Brand.Union<BlueMojiRichtextFacet.Main> = {
766
749
$type: 'blue.moji.richtext.facet',
767
750
did: did,
768
751
name: value.name,
+6
-8
src/components/composer/lib/link-detection.ts
+6
-8
src/components/composer/lib/link-detection.ts
···
1
-
import type { ActorIdentifier } from '@atcute/lexicons';
2
-
3
1
import { makeAtUri } from '~/api/types/at-uri';
4
2
import { safeUrlParse } from '~/api/utils/strings';
5
3
···
17
15
18
16
if (host === 'bsky.app') {
19
17
if ((match = BSKY_POST_LINK_RE.exec(path))) {
20
-
const didOrHandle = match[1] as ActorIdentifier;
18
+
const handleOrDid = match[1];
21
19
const rkey = match[2];
22
20
23
21
return {
24
22
type: 'quote',
25
-
uri: makeAtUri(didOrHandle, 'app.bsky.feed.post', rkey),
23
+
uri: makeAtUri(handleOrDid, 'app.bsky.feed.post', rkey),
26
24
origin: false,
27
25
};
28
26
}
29
27
30
28
if ((match = BSKY_FEED_LINK_RE.exec(path))) {
31
-
const didOrHandle = match[1] as ActorIdentifier;
29
+
const handleOrDid = match[1];
32
30
const rkey = match[2];
33
31
34
32
return {
35
33
type: 'feed',
36
-
uri: makeAtUri(didOrHandle, 'app.bsky.feed.generator', rkey),
34
+
uri: makeAtUri(handleOrDid, 'app.bsky.feed.generator', rkey),
37
35
};
38
36
}
39
37
40
38
if ((match = BSKY_LIST_LINK_RE.exec(path))) {
41
-
const didOrHandle = match[1] as ActorIdentifier;
39
+
const handleOrDid = match[1];
42
40
const rkey = match[2];
43
41
44
42
return {
45
43
type: 'list',
46
-
uri: makeAtUri(didOrHandle, 'app.bsky.graph.list', rkey),
44
+
uri: makeAtUri(handleOrDid, 'app.bsky.graph.list', rkey),
47
45
};
48
46
}
49
47
}
+9
-4
src/components/composer/lib/state.tsx
+9
-4
src/components/composer/lib/state.tsx
···
1
1
import { unwrap } from 'solid-js/store';
2
2
3
-
import type { AppBskyEmbedDefs, AppBskyEmbedExternal, AppBskyFeedDefs } from '@atcute/bluesky';
4
-
import type { $type, Blob as AtpBlob } from '@atcute/lexicons';
3
+
import type {
4
+
AppBskyEmbedDefs,
5
+
AppBskyEmbedExternal,
6
+
AppBskyFeedDefs,
7
+
At,
8
+
Brand,
9
+
} from '@atcute/client/lexicons';
5
10
6
11
import { primarySystemLanguage } from '~/globals/locales';
7
12
···
33
38
34
39
export interface RemoteMediaSource {
35
40
type: 'remote';
36
-
blob: AtpBlob;
41
+
blob: At.Blob;
37
42
aspectRatio?: AppBskyEmbedDefs.AspectRatio;
38
43
}
39
44
···
84
89
85
90
export interface RemoteLinkSource {
86
91
type: 'remote';
87
-
state: $type.enforce<AppBskyEmbedExternal.Main>;
92
+
state: Brand.Union<AppBskyEmbedExternal.Main>;
88
93
}
89
94
90
95
export type LinkSource = UriLinkSource | RemoteLinkSource;
+7
-6
src/components/embeds/embed.tsx
+7
-6
src/components/embeds/embed.tsx
···
1
-
import { type AppBskyFeedDefs, type MediaEmbed, type RecordEmbed, unwrapEmbed } from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
2
2
3
3
import { type ModerationCause, getModerationUI } from '~/api/moderation';
4
4
import { ContextContentMedia } from '~/api/moderation/constants';
5
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
5
+
import { parseAtUri } from '~/api/types/at-uri';
6
+
import { type MediaEmbedView, type RecordEmbedView, unwrapEmbedView } from '~/api/utils/bluesky/embed-view';
6
7
7
8
import ContentHider from '../moderation/content-hider';
8
9
···
25
26
}
26
27
27
28
const Embed = (props: EmbedProps) => {
28
-
const { media, record } = unwrapEmbed(props.embed);
29
+
const { media, record } = unwrapEmbedView(props.embed);
29
30
30
31
const gutterTop = props.gutterTop;
31
32
const large = props.large;
···
42
43
43
44
interface MediaEmbedProps {
44
45
/** Expected to be static */
45
-
embed: MediaEmbed;
46
+
embed: MediaEmbedView;
46
47
moderation?: ModerationCause[];
47
48
}
48
49
···
75
76
76
77
interface RecordEmbedProps {
77
78
/** Expected to be static */
78
-
embed: RecordEmbed;
79
+
embed: RecordEmbedView;
79
80
/** Expected to be static */
80
81
large?: boolean;
81
82
}
···
99
100
}
100
101
101
102
if (type === 'app.bsky.embed.record#viewNotFound' || type === 'app.bsky.embed.record#viewBlocked') {
102
-
const uri = assertCanonicalResourceUri(embed.uri);
103
+
const uri = parseAtUri(embed.uri);
103
104
104
105
if (type === 'app.bsky.embed.record#viewBlocked' && uri.collection === 'app.bsky.feed.post') {
105
106
return <QuoteBlockedEmbed embed={embed} uri={uri} />;
+1
-1
src/components/embeds/external-embed.tsx
+1
-1
src/components/embeds/external-embed.tsx
+3
-3
src/components/embeds/feed-embed.tsx
+3
-3
src/components/embeds/feed-embed.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
3
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
4
4
import { useQueryClient } from '@mary/solid-query';
5
5
6
6
import { moderateGeneric } from '~/api/moderation/entities/generic';
7
7
import { precacheFeed } from '~/api/queries-cache/feed-precache';
8
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
8
+
import { parseAtUri } from '~/api/types/at-uri';
9
9
10
10
import { inject } from '~/lib/states/singleton';
11
11
import ModerationService from '~/lib/states/singletons/moderation';
···
26
26
27
27
const moderation = createMemo(() => moderateGeneric(feed, feed.creator.did, moderationOptions()));
28
28
29
-
const href = `/${feed.creator.did}/feeds/${assertCanonicalResourceUri(feed.uri).rkey}`;
29
+
const href = `/${feed.creator.did}/feeds/${parseAtUri(feed.uri).rkey}`;
30
30
31
31
return (
32
32
<a
+1
-1
src/components/embeds/image-grid-embed.tsx
+1
-1
src/components/embeds/image-grid-embed.tsx
+1
-1
src/components/embeds/image-standalone-embed.tsx
+1
-1
src/components/embeds/image-standalone-embed.tsx
+1
-1
src/components/embeds/lib/image-utils.ts
+1
-1
src/components/embeds/lib/image-utils.ts
+1
-1
src/components/embeds/lib/snippet.tsx
+1
-1
src/components/embeds/lib/snippet.tsx
+1
-1
src/components/embeds/list-embed.tsx
+1
-1
src/components/embeds/list-embed.tsx
+4
-1
src/components/embeds/players/gif-player.tsx
+4
-1
src/components/embeds/players/gif-player.tsx
···
1
+
import { nanoid } from 'nanoid/non-secure';
1
2
import { createEffect, createSignal, onCleanup } from 'solid-js';
2
3
3
4
import { globalEvents } from '~/globals/events';
···
13
14
}
14
15
15
16
const GifPlayer = ({ snippet }: GifPlayerProps) => {
17
+
const playerId = nanoid();
18
+
16
19
const [playing, setPlaying] = createSignal(false);
17
20
const [stalling, setStalling] = createSignal(false);
18
21
···
64
67
}
65
68
}}
66
69
onPlay={() => {
67
-
globalEvents.emit('mediaplay');
70
+
globalEvents.emit('mediaplay', playerId);
68
71
setPlaying(true);
69
72
}}
70
73
onPause={() => {
+4
-1
src/components/embeds/players/video-player.tsx
+4
-1
src/components/embeds/players/video-player.tsx
···
1
1
import type * as h from 'hls.js';
2
2
import Hls from 'hls.js/dist/hls.light.js';
3
+
import { nanoid } from 'nanoid/non-secure';
3
4
import { createEffect, createSignal, onCleanup } from 'solid-js';
4
5
5
-
import type { AppBskyEmbedVideo } from '@atcute/bluesky';
6
+
import type { AppBskyEmbedVideo } from '@atcute/client/lexicons';
6
7
7
8
import { globalEvents } from '~/globals/events';
8
9
···
20
21
const { currentAccount } = useSession();
21
22
22
23
const [playing, setPlaying] = createSignal(false);
24
+
const playerId = nanoid();
23
25
24
26
const hls = new Hls({
25
27
capLevelToPlayerSize: true,
···
88
90
playsinline
89
91
autoplay
90
92
onPlay={() => {
93
+
globalEvents.emit('mediaplay', playerId);
91
94
setPlaying(true);
92
95
}}
93
96
onPause={() => {
+4
-3
src/components/embeds/quote-blocked-embed.tsx
+4
-3
src/components/embeds/quote-blocked-embed.tsx
···
1
-
import type { AppBskyEmbedRecord } from '@atcute/bluesky';
2
-
import type { ParsedCanonicalResourceUri } from '@atcute/lexicons';
1
+
import type { AppBskyEmbedRecord } from '@atcute/client/lexicons';
2
+
3
+
import type { ParsedAtUri } from '~/api/types/at-uri';
3
4
4
5
import BlockOutlinedIcon from '../icons-central/block-outline';
5
6
6
7
export interface QuoteBlockedEmbedProps {
7
8
embed: AppBskyEmbedRecord.ViewBlocked;
8
-
uri: ParsedCanonicalResourceUri;
9
+
uri: ParsedAtUri;
9
10
}
10
11
11
12
const QuoteBlockedEmbed = ({ embed, uri }: QuoteBlockedEmbedProps) => {
+6
-5
src/components/embeds/quote-embed.tsx
+6
-5
src/components/embeds/quote-embed.tsx
···
1
1
import { type JSX, createMemo } from 'solid-js';
2
2
3
-
import { AppBskyEmbedRecord, AppBskyFeedPost, unwrapMediaEmbed } from '@atcute/bluesky';
3
+
import type { AppBskyEmbedRecord, AppBskyFeedPost } from '@atcute/client/lexicons';
4
4
5
5
import { getModerationUI } from '~/api/moderation';
6
6
import { ContextContentMedia } from '~/api/moderation/constants';
7
7
import { moderateQuote } from '~/api/moderation/entities/quote';
8
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
8
+
import { parseAtUri } from '~/api/types/at-uri';
9
+
import { unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view';
9
10
10
11
import { inject } from '~/lib/states/singleton';
11
12
import ModerationService from '~/lib/states/singletons/moderation';
···
28
29
const QuoteEmbed = ({ quote, interactive, large }: QuoteEmbedProps) => {
29
30
const moderationOptions = inject(ModerationService);
30
31
31
-
const record = quote.value as AppBskyFeedPost.Main;
32
+
const record = quote.value as AppBskyFeedPost.Record;
32
33
const author = quote.author;
33
34
34
-
const uri = assertCanonicalResourceUri(quote.uri);
35
+
const uri = parseAtUri(quote.uri);
35
36
const href = `/${author.did}/${uri.rkey}`;
36
37
37
38
const text = record.text.trim();
38
-
const media = unwrapMediaEmbed(quote.embeds?.[0]);
39
+
const media = unwrapMediaEmbedView(quote.embeds?.[0]);
39
40
40
41
const moderation = createMemo(() => moderateQuote(quote, moderationOptions()));
41
42
+1
-1
src/components/embeds/video-embed.tsx
+1
-1
src/components/embeds/video-embed.tsx
···
1
1
import { Show, Suspense, createSignal, lazy } from 'solid-js';
2
2
3
-
import { AppBskyEmbedDefs, AppBskyEmbedVideo } from '@atcute/bluesky';
3
+
import type { AppBskyEmbedDefs, AppBskyEmbedVideo } from '@atcute/client/lexicons';
4
4
5
5
import { replaceVideoCdnUrl } from '~/lib/bsky/video';
6
6
+3
-5
src/components/error-view.tsx
+3
-5
src/components/error-view.tsx
···
1
1
import { Match, Switch } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import { ClientResponseError } from '@atcute/client';
3
+
import { XRPCError } from '@atcute/client';
4
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
5
5
import { TokenRefreshError } from '@atcute/oauth-browser-client';
6
6
import { useQueryClient } from '@mary/solid-query';
7
7
···
65
65
export default ErrorView;
66
66
67
67
const isInvalidTokenError = (err: unknown): boolean => {
68
-
return (
69
-
err instanceof TokenRefreshError || (err instanceof ClientResponseError && err.error === 'invalid_token')
70
-
);
68
+
return err instanceof TokenRefreshError || (err instanceof XRPCError && err.kind === 'invalid_token');
71
69
};
+3
-3
src/components/explore/my-feeds-section.tsx
+3
-3
src/components/explore/my-feeds-section.tsx
···
1
1
import { For, createMemo } from 'solid-js';
2
2
3
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
3
+
import { parseAtUri } from '~/api/types/at-uri';
4
4
5
5
import type { SavedFeed } from '~/lib/preferences/account';
6
6
import { useSession } from '~/lib/states/session';
···
55
55
let href: string;
56
56
switch (type) {
57
57
case 'generator': {
58
-
const uri = assertCanonicalResourceUri(feed.info.uri);
58
+
const uri = parseAtUri(feed.info.uri);
59
59
href = `/${uri.repo}/feeds/${uri.rkey}`;
60
60
break;
61
61
}
62
62
case 'list': {
63
-
const uri = assertCanonicalResourceUri(feed.info.uri);
63
+
const uri = parseAtUri(feed.info.uri);
64
64
href = `/${uri.repo}/lists/${uri.rkey}`;
65
65
break;
66
66
}
+7
-3
src/components/feeds/feed-info-prompt.tsx
+7
-3
src/components/feeds/feed-info-prompt.tsx
···
1
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
2
2
3
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
3
+
import { parseAtUri } from '~/api/types/at-uri';
4
4
5
5
import { useModalContext } from '~/globals/modals';
6
6
7
7
import { formatLong } from '~/lib/intl/number';
8
8
9
9
import Avatar from '~/components/avatar';
10
+
import Button from '~/components/button';
11
+
import Divider from '~/components/divider';
10
12
import * as Prompt from '~/components/prompt';
13
+
14
+
import HeartOutlinedIcon from '../icons-central/heart-outline';
11
15
12
16
export interface FeedInfoPromptProps {
13
17
/** Expected to be static */
···
20
24
const feed = props.feed;
21
25
22
26
const authorUrl = `/${feed.creator.did}`;
23
-
const feedUrl = `${authorUrl}/feeds/${assertCanonicalResourceUri(feed.uri).rkey}`;
27
+
const feedUrl = `${authorUrl}/feeds/${parseAtUri(feed.uri).rkey}`;
24
28
25
29
return (
26
30
<Prompt.Container maxWidth="md">
+3
-3
src/components/feeds/feed-item.tsx
+3
-3
src/components/feeds/feed-item.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
3
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
4
4
import { useQueryClient } from '@mary/solid-query';
5
5
6
6
import { moderateGeneric } from '~/api/moderation/entities/generic';
7
7
import { precacheFeed } from '~/api/queries-cache/feed-precache';
8
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
8
+
import { parseAtUri } from '~/api/types/at-uri';
9
9
10
10
import { history } from '~/globals/navigation';
11
11
···
27
27
const moderationOptions = inject(ModerationService);
28
28
29
29
const creator = item.creator;
30
-
const href = `/${creator.did}/feeds/${assertCanonicalResourceUri(item.uri).rkey}`;
30
+
const href = `/${creator.did}/feeds/${parseAtUri(item.uri).rkey}`;
31
31
32
32
const moderation = createMemo(() => moderateGeneric(item, creator.did, moderationOptions()));
33
33
+7
-18
src/components/list.tsx
+7
-18
src/components/list.tsx
···
3
3
import { getQueryErrorInfo } from '~/api/utils/query';
4
4
5
5
import { ifIntersect } from '~/lib/element-refs';
6
-
import { useIsFocused } from '~/lib/navigation/router';
7
6
8
7
import CircularProgress from './circular-progress';
8
+
import EndOfListView from './end-of-list-view';
9
9
import ErrorView from './error-view';
10
10
11
11
export interface ListProps<T> {
···
93
93
<div
94
94
ref={(node) => {
95
95
if (onEndReached) {
96
-
const isFocused = useIsFocused();
97
-
98
-
ifIntersect(
99
-
node,
100
-
() => !props.isFetchingNextPage && !props.isRefreshing && props.hasNextPage && isFocused(),
101
-
onEndReached,
102
-
{ rootMargin: '200% 0%' },
103
-
);
96
+
ifIntersect(node, () => !props.isFetchingNextPage && props.hasNextPage, onEndReached, {
97
+
rootMargin: `150% 0%`,
98
+
});
104
99
}
105
100
}}
106
-
class="h-[50svh] shrink-0"
101
+
class="grid h-13 shrink-0 place-items-center"
107
102
>
108
-
<div class="grid place-items-center py-8">
109
-
<CircularProgress />
110
-
</div>
103
+
<CircularProgress />
111
104
</div>
112
105
</Match>
113
106
114
107
<Match when={props.data}>
115
-
<div class="h-[50svh] shrink-0">
116
-
<div class="grid place-items-center py-8">
117
-
<div class="h-1 w-1 rounded-full bg-contrast-muted"></div>
118
-
</div>
119
-
</div>
108
+
<EndOfListView />
120
109
</Match>
121
110
</Switch>
122
111
</div>
+3
-3
src/components/lists/lib/utils.ts
+3
-3
src/components/lists/lib/utils.ts
···
1
-
import type { AppBskyGraphDefs } from '@atcute/bluesky';
1
+
import type { AppBskyGraphDefs } from '@atcute/client/lexicons';
2
2
3
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
3
+
import { parseAtUri } from '~/api/types/at-uri';
4
4
5
5
export const getListPurposeLabel = (purpose: AppBskyGraphDefs.ListPurpose) => {
6
6
switch (purpose) {
···
15
15
16
16
export const getListUrl = (list: AppBskyGraphDefs.ListView) => {
17
17
const did = list.creator.did;
18
-
const { rkey } = assertCanonicalResourceUri(list.uri);
18
+
const { rkey } = parseAtUri(list.uri);
19
19
20
20
switch (list.purpose) {
21
21
case 'app.bsky.graph.defs#curatelist':
+1
-1
src/components/lists/list-item.tsx
+1
-1
src/components/lists/list-item.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyGraphDefs } from '@atcute/bluesky';
3
+
import type { AppBskyGraphDefs } from '@atcute/client/lexicons';
4
4
import { useQueryClient } from '@mary/solid-query';
5
5
6
6
import { moderateGeneric } from '~/api/moderation/entities/generic';
+2
-2
src/components/main/sign-in-dialog.tsx
+2
-2
src/components/main/sign-in-dialog.tsx
···
1
1
import { Match, Switch, createSignal, onMount } from 'solid-js';
2
2
3
-
import type { Did } from '@atcute/lexicons';
3
+
import type { At } from '@atcute/client/lexicons';
4
4
import {
5
5
type AuthorizationServerMetadata,
6
6
type IdentityMetadata,
···
27
27
}
28
28
29
29
export interface SignInDialogProps {
30
-
relogin?: { did: Did; handle?: string };
30
+
relogin?: { did: At.DID; handle?: string };
31
31
}
32
32
33
33
const SignInDialog = (props: SignInDialogProps) => {
+31
-35
src/components/moderation/block-account-prompt.tsx
+31
-35
src/components/moderation/block-account-prompt.tsx
···
1
1
import { Match, Switch } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import { type Did } from '@atcute/lexicons';
3
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
5
4
import { QueryClient, createMutation } from '@mary/solid-query';
6
5
7
-
import { type ProfileShadowView, updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow';
6
+
import { updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow';
8
7
import { createListMetaQuery } from '~/api/queries/list';
9
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
8
+
import { parseAtUri } from '~/api/types/at-uri';
10
9
import { getCurrentDate } from '~/api/utils/misc';
11
10
import { createRecord, deleteRecord } from '~/api/utils/records';
12
11
···
23
22
import * as Prompt from '../prompt';
24
23
25
24
export interface BlockAccountPrompt {
25
+
/** Expected to be static */
26
26
profile: AppBskyActorDefs.ProfileViewDetailed;
27
27
}
28
28
29
29
const BlockAccountPrompt = (props: BlockAccountPrompt) => {
30
-
const profile = () => props.profile;
31
-
const shadow = useProfileShadow(profile);
30
+
const profile = props.profile;
31
+
const shadow = useProfileShadow(props.profile);
32
32
33
33
return (
34
34
<Switch>
35
-
<Match when={profile().viewer?.blockingByList}>
36
-
<BlockedByList profile={profile()} shadow={shadow()} />
35
+
<Match when={/* @once */ profile.viewer?.blockingByList}>
36
+
<BlockedByList {...props} />
37
37
</Match>
38
38
39
39
<Match when={shadow().blockUri}>
40
-
<UnblockPrompt profile={profile()} shadow={shadow()} />
40
+
<UnblockPrompt {...props} />
41
41
</Match>
42
42
43
43
<Match when>
44
-
<BlockPrompt profile={profile()} shadow={shadow()} />
44
+
<BlockPrompt {...props} />
45
45
</Match>
46
46
</Switch>
47
47
);
···
49
49
50
50
export default BlockAccountPrompt;
51
51
52
-
interface BlockAccountPromptInnerProps extends BlockAccountPrompt {
53
-
shadow: ProfileShadowView;
54
-
}
55
-
56
-
const BlockPrompt = (props: BlockAccountPromptInnerProps) => {
52
+
const BlockPrompt = ({ profile }: BlockAccountPrompt) => {
57
53
const { close } = useModalContext();
58
54
59
55
const { currentAccount } = useSession();
60
-
const { client } = useAgent();
56
+
const { rpc } = useAgent();
61
57
62
58
const mutation = createMutation((queryClient) => ({
63
59
async mutationFn() {
64
-
return await createRecord(client, {
60
+
return await createRecord(rpc, {
65
61
repo: currentAccount!.did,
66
62
collection: 'app.bsky.graph.block',
67
63
record: {
68
64
$type: 'app.bsky.graph.block',
69
65
createdAt: getCurrentDate(),
70
-
subject: props.profile.did,
66
+
subject: profile.did,
71
67
},
72
68
});
73
69
},
74
70
onSuccess(ret) {
75
71
close();
76
-
updateProfileShadow(queryClient, props.profile.did, { blockUri: ret.uri });
72
+
updateProfileShadow(queryClient, profile.did, { blockUri: ret.uri });
77
73
78
74
setTimeout(() => {
79
-
resetThreadQueries(queryClient, props.profile.did);
75
+
resetThreadQueries(queryClient, profile.did);
80
76
}, 1_500);
81
77
},
82
78
onError() {
···
86
82
87
83
return (
88
84
<Prompt.Container maxWidth="md" disabled={mutation.isPending}>
89
-
<Prompt.Title>{/* @once */ `Block @${props.profile.handle.toLowerCase()}?`}</Prompt.Title>
85
+
<Prompt.Title>{/* @once */ `Block @${profile.handle.toLowerCase()}?`}</Prompt.Title>
90
86
91
87
<Prompt.Description>Here's what happens if you do:</Prompt.Description>
92
88
···
126
122
);
127
123
};
128
124
129
-
const UnblockPrompt = (props: BlockAccountPromptInnerProps) => {
125
+
const UnblockPrompt = ({ profile }: BlockAccountPrompt) => {
130
126
const { close } = useModalContext();
131
127
132
-
const { client } = useAgent();
128
+
const { rpc } = useAgent();
129
+
const { repo, rkey } = parseAtUri(profile.viewer!.blocking!);
133
130
134
131
const mutation = createMutation((queryClient) => ({
135
132
async mutationFn() {
136
-
const uri = assertCanonicalResourceUri(props.shadow.blockUri!);
137
-
138
-
return await deleteRecord(client, {
139
-
repo: uri.repo,
133
+
return await deleteRecord(rpc, {
134
+
repo: repo as At.DID,
140
135
collection: 'app.bsky.graph.block',
141
-
rkey: uri.rkey,
136
+
rkey: rkey,
142
137
});
143
138
},
144
139
onSuccess() {
145
140
close();
146
-
updateProfileShadow(queryClient, props.profile.did, { blockUri: undefined });
141
+
updateProfileShadow(queryClient, profile.did, { blockUri: undefined });
147
142
148
143
setTimeout(() => {
149
-
resetThreadQueries(queryClient, props.profile.did);
144
+
resetThreadQueries(queryClient, profile.did);
150
145
}, 1_500);
151
146
},
152
147
onError() {
···
156
151
157
152
return (
158
153
<Prompt.Container maxWidth="md" disabled={mutation.isPending}>
159
-
<Prompt.Title>{/* @once */ `Unblock @${props.profile.handle.toLowerCase()}?`}</Prompt.Title>
154
+
<Prompt.Title>{/* @once */ `Unblock @${profile.handle.toLowerCase()}?`}</Prompt.Title>
160
155
161
156
<Prompt.Description>Here's what happens if you do:</Prompt.Description>
162
157
···
196
191
);
197
192
};
198
193
199
-
const BlockedByList = (props: BlockAccountPromptInnerProps) => {
194
+
const BlockedByList = ({ profile }: BlockAccountPrompt) => {
200
195
const { close } = useModalContext();
201
196
202
-
const query = createListMetaQuery(() => props.profile.viewer!.blockingByList!.uri);
197
+
const listBasic = profile.viewer!.blockingByList!;
198
+
const query = createListMetaQuery(() => listBasic.uri);
203
199
204
200
return (
205
201
<Prompt.Container>
206
-
<Prompt.Title>{/* @once */ `Can't unblock @${props.profile.handle.toLowerCase()}`}</Prompt.Title>
202
+
<Prompt.Title>{/* @once */ `Can't unblock @${profile.handle.toLowerCase()}`}</Prompt.Title>
207
203
<Prompt.Description>
208
204
You've currently opted to block all accounts that are in this moderation list:
209
205
</Prompt.Description>
···
229
225
);
230
226
};
231
227
232
-
const resetThreadQueries = (queryClient: QueryClient, did: Did) => {
228
+
const resetThreadQueries = (queryClient: QueryClient, did: At.DID) => {
233
229
const substring = `at://${did}/`;
234
230
235
231
queryClient.resetQueries({
+1
-1
src/components/moderation/labels-on-me.tsx
+1
-1
src/components/moderation/labels-on-me.tsx
+13
-20
src/components/moderation/mute-account-prompt.tsx
+13
-20
src/components/moderation/mute-account-prompt.tsx
···
1
1
import { Match, Switch, onMount } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import { ok } from '@atcute/client';
3
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
5
4
import { createMutation } from '@mary/solid-query';
6
5
7
6
import { updateProfileShadow, useProfileShadow } from '~/api/cache/profile-shadow';
···
50
49
const MutePrompt = ({ profile }: MuteAccountPromptProps) => {
51
50
const { close } = useModalContext();
52
51
53
-
const { client } = useAgent();
52
+
const { rpc } = useAgent();
54
53
55
54
const mutation = createMutation((queryClient) => ({
56
55
async mutationFn() {
57
-
await ok(
58
-
client.post('app.bsky.graph.muteActor', {
59
-
as: null,
60
-
input: {
61
-
actor: profile.did,
62
-
},
63
-
}),
64
-
);
56
+
await rpc.call('app.bsky.graph.muteActor', {
57
+
data: {
58
+
actor: profile.did,
59
+
},
60
+
});
65
61
},
66
62
onSuccess() {
67
63
close();
···
119
115
const UnmutePrompt = ({ profile }: MuteAccountPromptProps) => {
120
116
const { close } = useModalContext();
121
117
122
-
const { client } = useAgent();
118
+
const { rpc } = useAgent();
123
119
124
120
const mutation = createMutation((queryClient) => ({
125
121
async mutationFn() {
126
-
await ok(
127
-
client.post('app.bsky.graph.unmuteActor', {
128
-
as: null,
129
-
input: {
130
-
actor: profile.did,
131
-
},
132
-
}),
133
-
);
122
+
await rpc.call('app.bsky.graph.unmuteActor', {
123
+
data: {
124
+
actor: profile.did,
125
+
},
126
+
});
134
127
},
135
128
onSuccess() {
136
129
close();
+13
-15
src/components/notifications/notification-item.tsx
+13
-15
src/components/notifications/notification-item.tsx
···
1
1
import { type Component, type ComponentProps, type JSX, createMemo } from 'solid-js';
2
2
3
-
import {
4
-
type AppBskyEmbedImages,
5
-
type AppBskyFeedDefs,
6
-
type AppBskyFeedPost,
7
-
type AppBskyNotificationListNotifications,
8
-
type MediaEmbed,
9
-
unwrapMediaEmbed,
10
-
} from '@atcute/bluesky';
3
+
import type {
4
+
AppBskyEmbedImages,
5
+
AppBskyFeedDefs,
6
+
AppBskyFeedPost,
7
+
AppBskyNotificationListNotifications,
8
+
} from '@atcute/client/lexicons';
11
9
import { useQueryClient } from '@mary/solid-query';
12
10
13
11
import { getModerationUI } from '~/api/moderation';
···
21
19
NotificationSlice,
22
20
RepostNotificationSlice,
23
21
} from '~/api/queries/notification-feed';
24
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
22
+
import { parseAtUri } from '~/api/types/at-uri';
23
+
import { type MediaEmbedView, unwrapMediaEmbedView } from '~/api/utils/bluesky/embed-view';
25
24
26
25
import { history } from '~/globals/navigation';
27
26
···
96
95
}
97
96
} else {
98
97
const post = item.view;
99
-
const { repo, rkey } = assertCanonicalResourceUri(post.uri);
100
-
101
-
href = `/${repo}/${rkey}`;
98
+
const uri = parseAtUri(post.uri);
99
+
href = `/${uri.repo}/${uri.rkey}`;
102
100
}
103
101
104
102
if (isElementAltClicked(ev)) {
···
236
234
237
235
if (type === 'like' || type === 'repost') {
238
236
const post = data.view;
239
-
const record = post.record as AppBskyFeedPost.Main;
237
+
const record = post.record as AppBskyFeedPost.Record;
240
238
241
-
const media = unwrapMediaEmbed(post.embed);
239
+
const media = unwrapMediaEmbedView(post.embed);
242
240
const gif = maybeUnwrapGifEmbed(media);
243
241
244
242
return (
···
302
300
);
303
301
};
304
302
305
-
const maybeUnwrapGifEmbed = (embed: MediaEmbed | undefined): BlueskyGifSnippet | undefined => {
303
+
const maybeUnwrapGifEmbed = (embed: MediaEmbedView | undefined): BlueskyGifSnippet | undefined => {
306
304
if (embed?.$type === 'app.bsky.embed.external#view') {
307
305
const snippet = detectSnippet(embed.external);
308
306
if (snippet.type !== SnippetType.BLUESKY_GIF) {
+5
-10
src/components/paged-list.tsx
+5
-10
src/components/paged-list.tsx
···
6
6
import { useIsFocused } from '~/lib/navigation/router';
7
7
8
8
import CircularProgress from './circular-progress';
9
+
import EndOfListView from './end-of-list-view';
9
10
import ErrorView from './error-view';
10
11
11
12
export interface PagedListProps<T> {
···
99
100
node,
100
101
() => !props.isFetchingNextPage && !props.isRefreshing && props.hasNextPage && isFocused(),
101
102
onEndReached,
102
-
{ rootMargin: '200% 0%' },
103
+
{ rootMargin: '150% 0%' },
103
104
);
104
105
}
105
106
}}
106
-
class="h-[50svh] shrink-0"
107
+
class="grid h-13 shrink-0 place-items-center"
107
108
>
108
-
<div class="grid place-items-center py-8">
109
-
<CircularProgress />
110
-
</div>
109
+
<CircularProgress />
111
110
</div>
112
111
</Match>
113
112
114
113
<Match when={hasFallback && isEmpty()}>{props.fallback}</Match>
115
114
116
115
<Match when={props.data}>
117
-
<div class="h-[50svh] shrink-0">
118
-
<div class="grid place-items-center py-8">
119
-
<div class="h-1 w-1 rounded-full bg-contrast-muted"></div>
120
-
</div>
121
-
</div>
116
+
<EndOfListView />
122
117
</Match>
123
118
</Switch>
124
119
</div>
+10
-11
src/components/profiles/edit-profile-dialog.tsx
+10
-11
src/components/profiles/edit-profile-dialog.tsx
···
1
1
import { Show, createMemo, createSignal } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import { ClientResponseError } from '@atcute/client';
5
-
import type { Blob as AtpBlob } from '@atcute/lexicons';
3
+
import { XRPCError } from '@atcute/client';
4
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
6
5
import { createMutation } from '@mary/solid-query';
7
6
8
7
import { uploadBlob } from '~/api/queries/blob';
···
35
34
const EditProfileDialog = ({ profile }: EditProfileDialogProps) => {
36
35
const { close } = useModalContext();
37
36
38
-
const { client } = useAgent();
37
+
const { rpc } = useAgent();
39
38
const { currentAccount } = useSession();
40
39
41
40
const snapshot = {
···
75
74
const $avatar = avatar();
76
75
const $banner = banner();
77
76
78
-
let avatarPromise: Promise<AtpBlob<any>> | undefined;
79
-
let bannerPromise: Promise<AtpBlob<any>> | undefined;
77
+
let avatarPromise: Promise<At.Blob<any>> | undefined;
78
+
let bannerPromise: Promise<At.Blob<any>> | undefined;
80
79
81
80
if ($avatar instanceof Blob) {
82
-
avatarPromise = compressProfileImage($avatar, 1000, 1000).then((res) => uploadBlob(client, res.blob));
81
+
avatarPromise = compressProfileImage($avatar, 1000, 1000).then((res) => uploadBlob(rpc, res.blob));
83
82
}
84
83
if ($banner instanceof Blob) {
85
-
bannerPromise = compressProfileImage($banner, 3000, 1000).then((res) => uploadBlob(client, res.blob));
84
+
bannerPromise = compressProfileImage($banner, 3000, 1000).then((res) => uploadBlob(rpc, res.blob));
86
85
}
87
86
88
87
let retriesRemaining = 3;
89
88
while (true) {
90
-
const existing = await getRecord(client, {
89
+
const existing = await getRecord(rpc, {
91
90
repo,
92
91
collection: 'app.bsky.actor.profile',
93
92
rkey: 'self',
···
115
114
}
116
115
117
116
try {
118
-
await putRecord(client, {
117
+
await putRecord(rpc, {
119
118
repo,
120
119
collection: 'app.bsky.actor.profile',
121
120
rkey: 'self',
···
123
122
swapRecord: existing?.cid ?? null,
124
123
});
125
124
} catch (err) {
126
-
if (err instanceof ClientResponseError && err.error === 'InvalidSwapError') {
125
+
if (err instanceof XRPCError && err.kind === 'InvalidSwapError') {
127
126
if (retriesRemaining--) {
128
127
continue;
129
128
}
+1
-1
src/components/profiles/profile-item-pressable.tsx
+1
-1
src/components/profiles/profile-item-pressable.tsx
+1
-1
src/components/profiles/profile-item.tsx
+1
-1
src/components/profiles/profile-item.tsx
···
1
1
import { type JSX, createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
3
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
4
4
import { useQueryClient } from '@mary/solid-query';
5
5
6
6
import { moderateProfile } from '~/api/moderation/entities/profile';
+4
-4
src/components/profiles/profile-view-header.tsx
+4
-4
src/components/profiles/profile-view-header.tsx
···
1
1
import { type Component, type ComponentProps, type JSX, Match, Show, Switch, createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
3
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
4
4
5
5
import { useProfileShadow } from '~/api/cache/profile-shadow';
6
6
import { getModerationUI } from '~/api/moderation';
7
7
import { ContextProfileMedia, ContextProfileView } from '~/api/moderation/constants';
8
8
import { moderateProfile } from '~/api/moderation/entities/profile';
9
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
9
+
import { parseAtUri } from '~/api/types/at-uri';
10
10
11
11
import { openModal } from '~/globals/modals';
12
12
···
259
259
<Match when={viewer()?.mutedByList}>
260
260
{(list) => {
261
261
const href = () => {
262
-
const { repo, rkey } = assertCanonicalResourceUri(list().uri);
263
-
return `/${repo}/lists/${rkey}`;
262
+
const uri = parseAtUri(list().uri);
263
+
return `/${uri.repo}/lists/${uri.rkey}`;
264
264
};
265
265
266
266
return (
+6
-1
src/components/prompt.tsx
+6
-1
src/components/prompt.tsx
···
74
74
}
75
75
76
76
const PromptTitle = (props: PromptTitleProps) => {
77
-
return <h1 class="mb-1 break-words text-lg font-bold">{props.children}</h1>;
77
+
const isDesktop = useMediaQuery('(width >= 688px) and (height >= 500px)');
78
+
return (
79
+
<h1 class={`mb-1 break-words font-bold` + (!isDesktop() ? ` text-base` : ` text-xl`)}>
80
+
{props.children}
81
+
</h1>
82
+
);
78
83
};
79
84
80
85
export { PromptTitle as Title };
+4
-6
src/components/rich-text.tsx
+4
-6
src/components/rich-text.tsx
···
1
1
import type { JSX } from 'solid-js';
2
2
3
-
import type { BlueMojiRichtextFacet } from '@atcute/bluemoji';
4
-
import type { AppBskyRichtextFacet } from '@atcute/bluesky';
5
3
import { segmentize } from '@atcute/bluesky-richtext-segmenter';
4
+
import type { AppBskyRichtextFacet } from '@atcute/client/lexicons';
6
5
7
6
import { isLinkValid } from '~/api/utils/strings';
8
7
···
65
64
66
65
break;
67
66
} else if (type === 'blue.moji.richtext.facet') {
68
-
const feat = feature as BlueMojiRichtextFacet.Main;
69
-
const formats = feat.formats;
67
+
const formats = feature.formats;
70
68
if (formats.$type !== 'blue.moji.richtext.facet#formats_v0' || !formats.png_128) {
71
69
continue;
72
70
}
73
71
74
72
node = (
75
73
<img
76
-
src={/* @once */ getCdnUrl(feat.did, formats.png_128)}
77
-
title={/* @once */ feat.name}
74
+
src={/* @once */ getCdnUrl(feature.did, formats.png_128)}
75
+
title={/* @once */ feature.name}
78
76
class={`mx-px inline-block align-top text-[0]` + (!large ? ` h-5 w-5` : ` h-6 w-6`)}
79
77
/>
80
78
);
+8
-11
src/components/search/suggestions/from-actor-autocompletion-view.tsx
+8
-11
src/components/search/suggestions/from-actor-autocompletion-view.tsx
···
1
1
import { For, Show, createMemo } from 'solid-js';
2
2
3
-
import { ok } from '@atcute/client';
4
3
import { createQuery, keepPreviousData } from '@mary/solid-query';
5
4
6
5
import { createProfileQuery } from '~/api/queries/profile';
···
18
17
}) => {
19
18
const { currentAccount } = useSession();
20
19
21
-
const { client } = useAgent();
20
+
const { rpc } = useAgent();
22
21
const isFocused = useIsFocused();
23
22
24
23
const match = createMemo(() => {
···
33
32
enabled: $match !== '' && isFocused(),
34
33
placeholderData: keepPreviousData,
35
34
async queryFn({ signal }) {
36
-
const data = await ok(
37
-
client.get('app.bsky.actor.searchActorsTypeahead', {
38
-
signal,
39
-
params: {
40
-
q: $match,
41
-
limit: 10,
42
-
},
43
-
}),
44
-
);
35
+
const { data } = await rpc.get('app.bsky.actor.searchActorsTypeahead', {
36
+
signal,
37
+
params: {
38
+
q: $match,
39
+
limit: 10,
40
+
},
41
+
});
45
42
46
43
return data;
47
44
},
+7
-10
src/components/settings/app-passwords/add-app-password-prompt.tsx
+7
-10
src/components/settings/app-passwords/add-app-password-prompt.tsx
···
1
1
import { Match, Switch, createSignal } from 'solid-js';
2
2
3
-
import { ok } from '@atcute/client';
4
3
import { createMutation } from '@mary/solid-query';
5
4
6
5
import { autofocusNode, modelChecked, modelText } from '~/lib/input-refs';
···
14
13
export interface AddAppPasswordPromptProps {}
15
14
16
15
const AddAppPasswordPrompt = ({}: AddAppPasswordPromptProps) => {
17
-
const { client } = useAgent();
16
+
const { rpc } = useAgent();
18
17
19
18
const [name, setName] = createSignal('');
20
19
const [privileged, setPrivileged] = createSignal(false);
···
23
22
const mutation = createMutation((queryClient) => {
24
23
return {
25
24
async mutationFn() {
26
-
const data = await ok(
27
-
client.post('com.atproto.server.createAppPassword', {
28
-
input: {
29
-
name: name().replace(/^\s+|\s+$|(?<=\s)\s+/g, ''),
30
-
privileged: privileged(),
31
-
},
32
-
}),
33
-
);
25
+
const { data } = await rpc.call('com.atproto.server.createAppPassword', {
26
+
data: {
27
+
name: name().replace(/^\s+|\s+$|(?<=\s)\s+/g, ''),
28
+
privileged: privileged(),
29
+
},
30
+
});
34
31
35
32
return data;
36
33
},
+5
-5
src/components/settings/bluemoji/add-emote-prompt.tsx
+5
-5
src/components/settings/bluemoji/add-emote-prompt.tsx
···
42
42
const AddEmotePrompt = ({ blob, onAdd }: AddEmotePromptProps) => {
43
43
const { close } = useModalContext();
44
44
45
-
const { client } = useAgent();
45
+
const { rpc } = useAgent();
46
46
const { currentAccount } = useSession();
47
47
48
48
const blobUrl = URL.createObjectURL(blob);
···
71
71
72
72
const { png_128, webp_128 } = await getCompressedEmotes(blob, cover() ? 'cover' : 'contain');
73
73
74
-
const orig_prom = uploadBlob(client, blob);
75
-
const png_prom = png_128 !== blob ? uploadBlob(client, png_128) : orig_prom;
76
-
const webp_prom = webp_128 !== blob ? uploadBlob(client, webp_128) : orig_prom;
74
+
const orig_prom = uploadBlob(rpc, blob);
75
+
const png_prom = png_128 !== blob ? uploadBlob(rpc, png_128) : orig_prom;
76
+
const webp_prom = webp_128 !== blob ? uploadBlob(rpc, webp_128) : orig_prom;
77
77
78
78
const [orig_blob, png_blob, webp_blob] = await Promise.all([orig_prom, png_prom, webp_prom]);
79
79
80
-
await createRecord(client, {
80
+
await createRecord(rpc, {
81
81
repo: currentAccount!.did,
82
82
collection: 'blue.moji.collection.item',
83
83
rkey: $name,
+3
-3
src/components/settings/content-translation/add-basa-instance-prompt.tsx
+3
-3
src/components/settings/content-translation/add-basa-instance-prompt.tsx
···
1
1
import { createMemo, createSignal } from 'solid-js';
2
2
3
-
import { Client, ok, simpleFetchHandler } from '@atcute/client';
3
+
import { XRPC, simpleFetchHandler } from '@atcute/client';
4
4
import { createMutation } from '@mary/solid-query';
5
5
6
6
import { formatQueryError } from '~/api/utils/error';
···
47
47
48
48
const mutation = createMutation(() => ({
49
49
async mutationFn({ url }: { url: URL }) {
50
-
const client = new Client({ handler: simpleFetchHandler({ service: url }) });
51
-
await ok(client.get('x.basa.describeServer'));
50
+
const rpc = new XRPC({ handler: simpleFetchHandler({ service: url }) });
51
+
await rpc.get('x.basa.describeServer', {});
52
52
},
53
53
onSuccess(_data, { url }) {
54
54
const href = url.toString();
+7
-7
src/components/threads/highlighted-post.tsx
+7
-7
src/components/threads/highlighted-post.tsx
···
1
1
import { Show, createMemo } from 'solid-js';
2
2
3
-
import { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky';
3
+
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons';
4
4
5
5
import { usePostShadow } from '~/api/cache/post-shadow';
6
6
import { getModerationUI } from '~/api/moderation';
7
7
import { ContextContentView } from '~/api/moderation/constants';
8
8
import { moderatePost } from '~/api/moderation/entities/post';
9
9
import { createPostLikeMutation, createPostRepostMutation } from '~/api/mutations/post';
10
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
10
+
import { parseAtUri } from '~/api/types/at-uri';
11
11
12
12
import { primarySystemLanguage } from '~/globals/locales';
13
13
import { openModal } from '~/globals/modals';
···
58
58
const moderationOptions = inject(ModerationService);
59
59
60
60
const author = () => post().author;
61
-
const record = () => post().record as AppBskyFeedPost.Main;
61
+
const record = () => post().record as AppBskyFeedPost.Record;
62
62
const embed = () => post().embed;
63
63
64
64
const shadow = usePostShadow(post);
65
65
66
-
const { rkey } = assertCanonicalResourceUri(post().uri);
66
+
const uri = parseAtUri(post().uri);
67
67
const authorDid = author().did;
68
68
69
69
const isOurPost = currentAccount && authorDid === currentAccount.did;
70
70
71
71
const authorHref = `/${authorDid}`;
72
-
const href = `/${authorDid}/${rkey}`;
72
+
const href = `/${authorDid}/${uri.rkey}`;
73
73
74
74
const moderation = createMemo(() => moderatePost(post(), moderationOptions()));
75
75
const ui = createMemo(() => getModerationUI(moderation(), ContextContentView));
···
151
151
}
152
152
153
153
if (props.translate) {
154
-
return <PostTranslation text={(post().record as AppBskyFeedPost.Main).text} />;
154
+
return <PostTranslation text={(post().record as AppBskyFeedPost.Record).text} />;
155
155
}
156
156
157
157
if (needTranslation(post(), currentAccount.preferences.translation)) {
···
274
274
return false;
275
275
}
276
276
277
-
const record = post.record as AppBskyFeedPost.Main;
277
+
const record = post.record as AppBskyFeedPost.Record;
278
278
const langs = record.langs;
279
279
280
280
if (!langs || langs.length < 1 || !record.text) {
+2
-2
src/components/threads/overflow-thread-item.tsx
+2
-2
src/components/threads/overflow-thread-item.tsx
···
1
1
import type { OverflowAncestorItem, OverflowDescendantItem } from '~/api/models/post-thread';
2
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
2
+
import { parseAtUri } from '~/api/types/at-uri';
3
3
4
4
import MoreHorizOutlinedIcon from '../icons-central/more-horiz-outline';
5
5
···
20
20
return (
21
21
<a
22
22
href={(() => {
23
-
const uri = assertCanonicalResourceUri(props.item.uri);
23
+
const uri = parseAtUri(props.item.uri);
24
24
return `/${uri.repo}/${uri.rkey}`;
25
25
})()}
26
26
class={
+6
-4
src/components/threads/post-thread-item.tsx
+6
-4
src/components/threads/post-thread-item.tsx
···
1
1
import { type JSX, Show, createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyFeedPost } from '@atcute/bluesky';
3
+
import type { AppBskyFeedPost } from '@atcute/client/lexicons';
4
4
import { useQueryClient } from '@mary/solid-query';
5
5
6
6
import { usePostShadow } from '~/api/cache/post-shadow';
···
9
9
import { ContextContentList } from '~/api/moderation/constants';
10
10
import { moderatePost } from '~/api/moderation/entities/post';
11
11
import { precacheProfile } from '~/api/queries-cache/profile-precache';
12
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
12
+
import { parseAtUri } from '~/api/types/at-uri';
13
13
14
14
import { history } from '~/globals/navigation';
15
15
···
49
49
const post = () => item().post;
50
50
51
51
const author = () => post().author;
52
-
const record = post().record as AppBskyFeedPost.Main;
52
+
const record = post().record as AppBskyFeedPost.Record;
53
53
const embed = post().embed;
54
54
55
55
const shadow = usePostShadow(post);
56
56
57
+
const uri = parseAtUri(post().uri);
57
58
const authorHref = `/${author().did}`;
58
-
const href = `/${author().did}/${assertCanonicalResourceUri(post().uri).rkey}`;
59
+
const href = `/${author().did}/${uri.rkey}`;
59
60
60
61
const isOurPost = currentAccount && currentAccount.did === author().did;
61
62
···
112
113
<div class="min-w-0 grow py-3">
113
114
<PostMeta
114
115
post={/* @once */ post()}
116
+
context={(item() as PostDescendantItem).context}
115
117
href={href}
116
118
authorHref={authorHref}
117
119
gutterBottom
+12
-12
src/components/threads/post-translation.tsx
+12
-12
src/components/threads/post-translation.tsx
···
1
1
import { Match, Switch, createMemo, createSignal } from 'solid-js';
2
2
3
-
import { Client, ok, simpleFetchHandler } from '@atcute/client';
3
+
import { XRPC, simpleFetchHandler } from '@atcute/client';
4
4
import { sampleOne } from '@mary/array-fns';
5
5
import { createQuery } from '@mary/solid-query';
6
6
···
66
66
targetLang = found;
67
67
}
68
68
69
-
const client = new Client({ handler: simpleFetchHandler({ service: $instanceUrl! }) });
70
-
const data = await ok(
71
-
client.get('x.basa.translate', {
72
-
params: {
73
-
engine: 'google',
74
-
text: $text,
75
-
from: $source,
76
-
to: targetLang,
77
-
},
78
-
}),
79
-
);
69
+
console.log(targetLang);
70
+
71
+
const rpc = new XRPC({ handler: simpleFetchHandler({ service: $instanceUrl! }) });
72
+
const { data } = await rpc.get('x.basa.translate', {
73
+
params: {
74
+
engine: 'google',
75
+
text: $text,
76
+
from: $source,
77
+
to: targetLang,
78
+
},
79
+
});
80
80
81
81
return data;
82
82
},
+13
-54
src/components/timeline/delete-post-prompt.tsx
+13
-54
src/components/timeline/delete-post-prompt.tsx
···
1
-
import { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky';
2
-
import { ClientResponseError, ok } from '@atcute/client';
1
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
3
2
import { useQueryClient } from '@mary/solid-query';
4
3
5
4
import { updatePostShadow } from '~/api/cache/post-shadow';
6
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
5
+
import { parseAtUri } from '~/api/types/at-uri';
6
+
import { deleteRecord } from '~/api/utils/records';
7
7
8
8
import { useAgent } from '~/lib/states/agent';
9
9
import { useSession } from '~/lib/states/session';
···
19
19
20
20
const DeletePostPrompt = ({ post, onPostDelete }: DeletePostPromptProps) => {
21
21
const { currentAccount } = useSession();
22
-
const { client } = useAgent();
22
+
const { rpc } = useAgent();
23
23
24
24
const queryClient = useQueryClient();
25
25
26
-
const onDelete = async () => {
27
-
const { rkey } = assertCanonicalResourceUri(post.uri);
28
-
29
-
const write = await client.post('com.atproto.repo.applyWrites', {
30
-
input: {
31
-
repo: currentAccount!.did,
32
-
writes: [
33
-
{
34
-
$type: 'com.atproto.repo.applyWrites#delete',
35
-
collection: 'app.bsky.feed.post',
36
-
rkey: rkey,
37
-
},
38
-
],
39
-
},
26
+
const onDelete = () => {
27
+
const uri = parseAtUri(post.uri);
28
+
const promise = deleteRecord(rpc, {
29
+
repo: currentAccount!.did,
30
+
collection: 'app.bsky.feed.post',
31
+
rkey: uri.rkey,
40
32
});
41
33
42
-
if (write.ok) {
43
-
updatePostShadow(queryClient, post.uri, { deleted: true });
44
-
onPostDelete?.();
45
-
return;
46
-
}
34
+
updatePostShadow(queryClient, post.uri, { deleted: true });
47
35
48
-
if (write.data.error !== 'InternalServerError') {
49
-
throw new ClientResponseError(write);
36
+
if (onPostDelete) {
37
+
promise.then(onPostDelete);
50
38
}
51
-
52
-
await ok(
53
-
client.post('com.atproto.repo.putRecord', {
54
-
input: {
55
-
repo: currentAccount!.did,
56
-
collection: 'app.bsky.feed.post',
57
-
rkey: rkey,
58
-
validate: false,
59
-
record: {
60
-
$type: 'app.bsky.feed.post',
61
-
text: '',
62
-
createdAt: '1970-01-01T00:00:00.000Z',
63
-
} satisfies AppBskyFeedPost.Main,
64
-
},
65
-
}),
66
-
);
67
-
68
-
await ok(
69
-
client.post('com.atproto.repo.deleteRecord', {
70
-
input: {
71
-
repo: currentAccount!.did,
72
-
collection: 'app.bsky.feed.post',
73
-
rkey: rkey,
74
-
},
75
-
}),
76
-
);
77
-
78
-
updatePostShadow(queryClient, post.uri, { deleted: true });
79
-
onPostDelete?.();
80
39
};
81
40
82
41
return (
+6
-6
src/components/timeline/pin-post-prompt.tsx
+6
-6
src/components/timeline/pin-post-prompt.tsx
···
1
1
import { Match, Show, Switch, batch } from 'solid-js';
2
2
3
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
4
-
import { ClientResponseError } from '@atcute/client';
3
+
import { XRPCError } from '@atcute/client';
4
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
5
5
import { createMutation } from '@mary/solid-query';
6
6
7
7
import { updatePostShadow, usePostShadow } from '~/api/cache/post-shadow';
···
23
23
24
24
const PinPostPrompt = ({ post }: PinPostPromptProps) => {
25
25
const { currentAccount } = useSession();
26
-
const { client } = useAgent();
26
+
const { rpc } = useAgent();
27
27
28
28
const { close } = useModalContext();
29
29
···
40
40
updatePostShadow(queryClient, post.uri, { pinned: next });
41
41
42
42
while (true) {
43
-
const existing = await getRecord(client, {
43
+
const existing = await getRecord(rpc, {
44
44
repo,
45
45
collection: 'app.bsky.actor.profile',
46
46
rkey: 'self',
···
63
63
record.pinnedPost = next ? { uri: post.uri, cid: post.cid } : undefined;
64
64
65
65
try {
66
-
await putRecord(client, {
66
+
await putRecord(rpc, {
67
67
repo,
68
68
collection: 'app.bsky.actor.profile',
69
69
rkey: 'self',
···
71
71
swapRecord: existing?.cid ?? null,
72
72
});
73
73
} catch (err) {
74
-
if (err instanceof ClientResponseError && err.error === 'InvalidSwapError') {
74
+
if (err instanceof XRPCError && err.kind === 'InvalidSwapError') {
75
75
if (retriesRemaining--) {
76
76
continue;
77
77
}
+1
-1
src/components/timeline/post-actions.tsx
+1
-1
src/components/timeline/post-actions.tsx
+6
-8
src/components/timeline/post-feed-item.tsx
+6
-8
src/components/timeline/post-feed-item.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyFeedPost } from '@atcute/bluesky';
4
-
import { type Did } from '@atcute/lexicons';
3
+
import type { AppBskyFeedPost, At } from '@atcute/client/lexicons';
5
4
import { useQueryClient } from '@mary/solid-query';
6
5
7
6
import { usePostShadow } from '~/api/cache/post-shadow';
···
10
9
import { ContextContentList } from '~/api/moderation/constants';
11
10
import { moderatePost } from '~/api/moderation/entities/post';
12
11
import { precacheProfile } from '~/api/queries-cache/profile-precache';
13
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
12
+
import { parseAtUri } from '~/api/types/at-uri';
14
13
15
14
import { history } from '~/globals/navigation';
16
15
···
37
36
/** Expected to be static */
38
37
item: UiTimelineItem;
39
38
highlighted?: boolean;
40
-
timelineDid?: Did;
39
+
timelineDid?: At.DID;
41
40
}
42
41
43
42
const PostFeedItem = ({ item, highlighted, timelineDid }: PostFeedItemProps) => {
···
51
50
const author = post.author;
52
51
const authorDid = author.did;
53
52
54
-
const record = post.record as AppBskyFeedPost.Main;
53
+
const record = post.record as AppBskyFeedPost.Record;
55
54
const embed = post.embed;
56
55
57
56
const shadow = usePostShadow(post);
58
57
59
-
const { rkey } = assertCanonicalResourceUri(post.uri);
60
-
58
+
const uri = parseAtUri(post.uri);
61
59
const authorHref = `/${authorDid}`;
62
-
const href = `/${authorDid}/${rkey}`;
60
+
const href = `/${authorDid}/${uri.rkey}`;
63
61
64
62
const isOurPost = currentAccount && authorDid === currentAccount.did;
65
63
+24
-4
src/components/timeline/post-meta.tsx
+24
-4
src/components/timeline/post-meta.tsx
···
1
-
import type { AppBskyFeedDefs } from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
2
2
import { useQueryClient } from '@mary/solid-query';
3
3
4
4
import { precacheProfile } from '~/api/queries-cache/profile-precache';
5
5
6
6
import { openModal } from '~/globals/modals';
7
7
8
+
import Avatar from '../avatar';
9
+
import HeartSolidIcon from '../icons-central/heart-solid';
8
10
import MoreHorizOutlinedIcon from '../icons-central/more-horiz-outline';
9
11
import TimeAgo from '../time-ago';
10
12
···
13
15
export interface PostMetaProps {
14
16
/** Expected to be static */
15
17
post: AppBskyFeedDefs.PostView;
18
+
context?: AppBskyFeedDefs.ThreadContext;
19
+
/** Expected to be static */
16
20
authorHref: string;
21
+
/** Expected to be static */
17
22
href: string;
18
-
compact?: boolean;
23
+
/** Expected to be static */
19
24
gutterBottom?: boolean;
20
25
onPostDelete?: () => void;
21
26
onPostRedraft?: () => void;
22
27
}
23
28
24
-
const PostMeta = ({ post, authorHref, href, gutterBottom, onPostDelete, onPostRedraft }: PostMetaProps) => {
29
+
const PostMeta = (props: PostMetaProps) => {
25
30
const queryClient = useQueryClient();
26
31
32
+
const post = props.post;
33
+
const href = props.href;
34
+
const authorHref = props.authorHref;
35
+
const gutterBottom = props.gutterBottom;
36
+
37
+
const onPostDelete = props.onPostDelete;
38
+
const onPostRedraft = props.onPostRedraft;
39
+
27
40
const author = post.author;
28
41
const indexedAt = post.indexedAt;
29
42
···
53
66
</TimeAgo>
54
67
</div>
55
68
56
-
<div class="shrink-0">
69
+
<div class="flex shrink-0 items-center gap-4">
70
+
{props.context?.rootAuthorLike && (
71
+
<div class="relative">
72
+
<Avatar type="user" size={null} class="h-[18px] w-[18px]" />
73
+
<HeartSolidIcon class="absolute -bottom-1 -left-1.5 h-[14px] w-[14px] stroke-background stroke-[3] text-p-red-600" />
74
+
</div>
75
+
)}
76
+
57
77
<button
58
78
onClick={(ev) => {
59
79
const anchor = ev.currentTarget;
+4
-21
src/components/timeline/post-reply-context.tsx
+4
-21
src/components/timeline/post-reply-context.tsx
···
1
-
import type { AppBskyFeedPost } from '@atcute/bluesky';
1
+
import type { AppBskyFeedPost } from '@atcute/client/lexicons';
2
2
3
3
import type { UiTimelineItem } from '~/api/models/timeline';
4
4
import { createProfileQuery } from '~/api/queries/profile';
5
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
5
+
import { parseAtUri } from '~/api/types/at-uri';
6
6
7
7
import { useSession } from '~/lib/states/session';
8
8
···
41
41
);
42
42
}
43
43
44
-
const raw = (post.record as AppBskyFeedPost.Main).reply?.parent;
44
+
const raw = (post.record as AppBskyFeedPost.Record).reply?.parent;
45
45
if (raw) {
46
-
const { repo: did } = assertCanonicalResourceUri(raw.uri);
47
-
46
+
const did = parseAtUri(raw.uri).repo;
48
47
if (did === currentAccount?.did) {
49
48
return <div class="mb-0.5 flex text-de text-contrast-muted">Replying to you</div>;
50
49
}
51
50
52
-
if (did === post.author.did) {
53
-
return (
54
-
<div class="mb-0.5 flex text-de text-contrast-muted">
55
-
<span class="shrink-0 whitespace-pre">Replying to </span>
56
-
<a
57
-
dir="auto"
58
-
href={`/${did}`}
59
-
class="overflow-hidden text-ellipsis whitespace-nowrap font-semibold hover:underline"
60
-
>
61
-
{/* @once */ post.author.handle.toLowerCase()}
62
-
</a>
63
-
</div>
64
-
);
65
-
}
66
-
67
51
const profile = createProfileQuery(() => did, {
68
-
batched: true,
69
52
staleTime: Infinity,
70
53
gcTime: 60_000 * 5,
71
54
});
+24
-37
src/components/timeline/revise-post-prompt.tsx
+24
-37
src/components/timeline/revise-post-prompt.tsx
···
1
-
import {
2
-
type AppBskyFeedDefs,
3
-
type AppBskyFeedPost,
4
-
type AppBskyFeedThreadgate,
5
-
type RawMediaEmbed,
6
-
type RawRecordEmbed,
7
-
unwrapRawEmbed,
8
-
} from '@atcute/bluesky';
1
+
import type { AppBskyFeedDefs, AppBskyFeedPost, AppBskyFeedThreadgate } from '@atcute/client/lexicons';
9
2
10
-
import { assertCanonicalResourceUri } from '~/api/types/at-uri';
3
+
import { parseAtUri } from '~/api/types/at-uri';
4
+
import { type MediaEmbed, type RecordEmbed, unwrapEmbed } from '~/api/utils/bluesky/embed';
11
5
import { serializeRichText } from '~/api/utils/richtext-stringify';
12
6
13
7
import { openModal, useModalContext } from '~/globals/modals';
···
21
15
import {
22
16
type ComposerState,
23
17
type PostEmbed,
24
-
type PostImage,
25
18
type PostLinkEmbed,
26
19
type PostMediaEmbed,
27
20
type PostRecordEmbed,
···
39
32
const { close } = useModalContext();
40
33
41
34
(async () => {
42
-
const record = post.record as AppBskyFeedPost.Main;
43
-
const threadgate = post.threadgate?.record as AppBskyFeedThreadgate.Main | undefined;
35
+
const record = post.record as AppBskyFeedPost.Record;
36
+
const threadgate = post.threadgate?.record as AppBskyFeedThreadgate.Record | undefined;
44
37
const embeddingDisabled = post.viewer?.embeddingDisabled;
45
38
46
-
const embeds = unwrapRawEmbed(record.embed);
39
+
const embeds = unwrapEmbed(record.embed);
47
40
const draftEmbeds: PostEmbed = {
48
41
link: embeds.media ? toLinkEmbed(post, embeds.media) : undefined,
49
42
media: embeds.media ? toMediaEmbed(post, embeds.media) : undefined,
···
83
76
84
77
export default RevisePostPrompt;
85
78
86
-
const toMediaEmbed = (post: AppBskyFeedDefs.PostView, embed: RawMediaEmbed): PostMediaEmbed | undefined => {
79
+
const toMediaEmbed = (post: AppBskyFeedDefs.PostView, embed: MediaEmbed): PostMediaEmbed | undefined => {
87
80
const authorDid = post.author.did;
88
81
89
82
switch (embed.$type) {
90
83
case 'app.bsky.embed.images': {
91
84
return {
92
85
type: 'image',
93
-
images: embed.images.map((item): PostImage => {
94
-
assert('$type' in item.image);
95
-
96
-
return {
97
-
source: {
98
-
type: 'remote',
99
-
blob: item.image,
100
-
aspectRatio: item.aspectRatio,
101
-
},
102
-
alt: item.alt,
103
-
};
104
-
}),
86
+
images: embed.images.map((item) => ({
87
+
source: {
88
+
type: 'remote',
89
+
blob: item.image,
90
+
aspectRatio: item.aspectRatio,
91
+
},
92
+
alt: item.alt,
93
+
})),
105
94
labels: post.labels?.filter((label) => label.src === authorDid).map((label) => label.val) ?? [],
106
95
};
107
96
}
108
97
case 'app.bsky.embed.video': {
109
-
assert('$type' in embed.video);
110
-
111
98
return {
112
99
type: 'video',
113
100
source: {
···
122
109
}
123
110
};
124
111
125
-
const toLinkEmbed = (post: AppBskyFeedDefs.PostView, embed: RawMediaEmbed): PostLinkEmbed | undefined => {
112
+
const toLinkEmbed = (post: AppBskyFeedDefs.PostView, embed: MediaEmbed): PostLinkEmbed | undefined => {
126
113
const authorDid = post.author.did;
127
114
128
115
switch (embed.$type) {
···
142
129
}
143
130
};
144
131
145
-
const toRecordEmbed = (embed: RawRecordEmbed): PostRecordEmbed | undefined => {
132
+
const toRecordEmbed = (embed: RecordEmbed): PostRecordEmbed | undefined => {
146
133
const ref = embed.record;
147
134
148
-
const refUri = ref.uri;
149
-
const uri = assertCanonicalResourceUri(refUri);
135
+
const uri = ref.uri;
136
+
const { collection } = parseAtUri(uri);
150
137
151
-
switch (uri.collection) {
138
+
switch (collection) {
152
139
case 'app.bsky.feed.post': {
153
-
return { type: 'quote', uri: refUri, origin: false };
140
+
return { type: 'quote', uri, origin: false };
154
141
}
155
142
case 'app.bsky.graph.list': {
156
-
return { type: 'list', uri: refUri };
143
+
return { type: 'list', uri };
157
144
}
158
145
case 'app.bsky.feed.generator': {
159
-
return { type: 'feed', uri: refUri };
146
+
return { type: 'feed', uri };
160
147
}
161
148
}
162
149
163
-
assert(false, `unknown "${uri.collection}" record type`);
150
+
assert(false, `unknown "${collection}" record type`);
164
151
};
+2
-2
src/components/timeline/timeline-list.tsx
+2
-2
src/components/timeline/timeline-list.tsx
···
1
-
import type { Did } from '@atcute/lexicons';
1
+
import type { At } from '@atcute/client/lexicons';
2
2
3
3
import { type TimelineParams, useTimelineQuery } from '~/api/queries/timeline';
4
4
···
9
9
10
10
export interface TimelineListProps {
11
11
params: TimelineParams;
12
-
timelineDid?: Did;
12
+
timelineDid?: At.DID;
13
13
}
14
14
15
15
const TimelineList = (props: TimelineListProps) => {
+1
-1
src/globals/events.ts
+1
-1
src/globals/events.ts
+1
-1
src/lib/aglais-bookmarks/db.ts
+1
-1
src/lib/aglais-bookmarks/db.ts
+6
-5
src/lib/aglais-bookmarks/search.ts
+6
-5
src/lib/aglais-bookmarks/search.ts
···
1
-
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky';
2
1
import type { Token } from '@atcute/bluesky-search-parser';
3
-
import { isDid, isHandle } from '@atcute/lexicons/syntax';
2
+
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons';
4
3
import { mapDefined } from '@mary/array-fns';
4
+
5
+
import { DID_RE, HANDLE_RE } from '~/api/types/identity';
5
6
6
7
import { parseEndDate, parseStartDate, splitFilters } from '../bsky/search';
7
8
import { escapeRegex } from '../utils/regex';
···
43
44
44
45
{
45
46
const raw = filters.get('from');
46
-
if (isHandle(raw)) {
47
+
if (raw && HANDLE_RE.test(raw)) {
47
48
from = raw;
48
49
}
49
50
}
50
51
51
52
{
52
53
const raw = filters.get('did');
53
-
if (isDid(raw)) {
54
+
if (raw && DID_RE.test(raw)) {
54
55
from = raw;
55
56
}
56
57
}
···
83
84
});
84
85
85
86
const re = new RegExp('\\b' + values.join('|') + '\\b', 'i');
86
-
predicates.push((post) => re.test((post.record as AppBskyFeedPost.Main).text));
87
+
predicates.push((post) => re.test((post.record as AppBskyFeedPost.Record).text));
87
88
}
88
89
89
90
return (post: AppBskyFeedDefs.PostView) => predicates.every((fn) => fn(post));
+3
-23
src/lib/atproto/labeler.ts
+3
-23
src/lib/atproto/labeler.ts
···
1
1
import { type FetchHandler, type FetchHandlerObject, buildFetchHandler } from '@atcute/client';
2
-
import type { Did } from '@atcute/lexicons';
2
+
import type { At } from '@atcute/client/lexicons';
3
+
import { mergeHeaders } from '@atcute/client/utils/http';
3
4
4
5
export interface Labeler {
5
-
did: Did;
6
+
did: At.DID;
6
7
redact: boolean;
7
8
}
8
9
···
23
24
});
24
25
};
25
26
};
26
-
27
-
const mergeHeaders = (
28
-
init: HeadersInit | undefined,
29
-
defaults: Record<string, string | null>,
30
-
): HeadersInit | undefined => {
31
-
let headers: Headers | undefined;
32
-
33
-
for (const name in defaults) {
34
-
const value = defaults[name];
35
-
36
-
if (value !== null) {
37
-
headers ??= new Headers(init);
38
-
39
-
if (!headers.has(name)) {
40
-
headers.set(name, value);
41
-
}
42
-
}
43
-
}
44
-
45
-
return headers ?? init;
46
-
};
+1
-1
src/lib/bsky/image.ts
+1
-1
src/lib/bsky/image.ts
+3
-6
src/lib/preferences/account.ts
+3
-6
src/lib/preferences/account.ts
···
1
-
import type { AppBskyFeedDefs, AppBskyGraphDefs } from '@atcute/bluesky';
2
-
import type { Did, ResourceUri } from '@atcute/lexicons';
1
+
import type { AppBskyFeedDefs, AppBskyGraphDefs, At } from '@atcute/client/lexicons';
3
2
4
3
import type { ModerationLabeler, ModerationPreferences } from '~/api/moderation';
5
4
···
29
28
30
29
export interface ModerationLabelerPreferences {
31
30
updated: number;
32
-
definitions: Record<Did, ModerationLabeler>;
31
+
definitions: Record<At.DID, ModerationLabeler>;
33
32
}
34
33
35
34
export type SavedFeed = SavedGeneratorFeed | SavedListFeed | SavedSearchFeed;
···
54
53
}
55
54
56
55
export interface PersistedThreadgate {
57
-
allow?: Array<
58
-
{ type: 'following' } | { type: 'follower' } | { type: 'mention' } | { type: 'list'; uri: ResourceUri }
59
-
>;
56
+
allow?: Array<{ type: 'following' } | { type: 'mention' } | { type: 'list'; uri: At.Uri }>;
60
57
}
61
58
62
59
export interface PersistedPostgate {
+3
-4
src/lib/preferences/sessions.ts
+3
-4
src/lib/preferences/sessions.ts
···
1
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
2
-
import type { Did } from '@atcute/lexicons';
1
+
import type { AppBskyActorDefs, At } from '@atcute/client/lexicons';
3
2
4
3
export interface SessionPreferenceSchema {
5
4
$version: 1;
6
-
active: Did | undefined;
5
+
active: At.DID | undefined;
7
6
accounts: AccountData[];
8
7
}
9
8
10
9
export interface AccountData {
11
10
/** Account DID */
12
-
readonly did: Did;
11
+
readonly did: At.DID;
13
12
profile: AppBskyActorDefs.ProfileViewDetailed;
14
13
}
+3
-7
src/lib/preferences/snippets/composer.ts
+3
-7
src/lib/preferences/snippets/composer.ts
···
1
-
import type { AppBskyFeedPostgate, AppBskyFeedThreadgate } from '@atcute/bluesky';
1
+
import type { AppBskyFeedPostgate, AppBskyFeedThreadgate } from '@atcute/client/lexicons';
2
2
3
3
import type { PersistedPostgate, PersistedThreadgate } from '../account';
4
4
5
-
export type ThreadgateState = Pick<AppBskyFeedThreadgate.Main, 'allow' | 'hiddenReplies'>;
6
-
export type PostgateState = Pick<AppBskyFeedPostgate.Main, 'detachedEmbeddingUris' | 'embeddingRules'>;
5
+
export type ThreadgateState = Pick<AppBskyFeedThreadgate.Record, 'allow' | 'hiddenReplies'>;
6
+
export type PostgateState = Pick<AppBskyFeedPostgate.Record, 'detachedEmbeddingUris' | 'embeddingRules'>;
7
7
8
8
export const toPersistedThreadgate = (gate: ThreadgateState): PersistedThreadgate => {
9
9
return {
···
11
11
switch (rule.$type) {
12
12
case 'app.bsky.feed.threadgate#followingRule':
13
13
return { type: 'following' };
14
-
case 'app.bsky.feed.threadgate#followerRule':
15
-
return { type: 'follower' };
16
14
case 'app.bsky.feed.threadgate#mentionRule':
17
15
return { type: 'mention' };
18
16
case 'app.bsky.feed.threadgate#listRule':
···
28
26
switch (rule.type) {
29
27
case 'following':
30
28
return { $type: 'app.bsky.feed.threadgate#followingRule' };
31
-
case 'follower':
32
-
return { $type: 'app.bsky.feed.threadgate#followerRule' };
33
29
case 'mention':
34
30
return { $type: 'app.bsky.feed.threadgate#mentionRule' };
35
31
case 'list':
+2
-2
src/lib/redirector.ts
+2
-2
src/lib/redirector.ts
+6
-6
src/lib/states/agent.tsx
+6
-6
src/lib/states/agent.tsx
···
1
1
import { type JSX, type ParentProps, createContext, createMemo, useContext } from 'solid-js';
2
2
3
-
import { Client, simpleFetchHandler } from '@atcute/client';
4
-
import type { Did } from '@atcute/lexicons';
3
+
import { XRPC, simpleFetchHandler } from '@atcute/client';
4
+
import type { At } from '@atcute/client/lexicons';
5
5
import type { OAuthUserAgent } from '@atcute/oauth-browser-client';
6
6
import { QueryClient, QueryClientProvider } from '@mary/solid-query';
7
7
···
14
14
import { useSession } from './session';
15
15
16
16
export interface AgentContext {
17
-
did: Did | null;
18
-
client: Client;
17
+
did: At.DID | null;
18
+
rpc: XRPC;
19
19
handler: OAuthUserAgent | null;
20
20
persister: ReturnType<typeof createQueryPersister>;
21
21
}
···
32
32
return {
33
33
did: currentAccount.did,
34
34
handler: currentAccount.agent ?? null,
35
-
client: currentAccount.client,
35
+
rpc: currentAccount.rpc,
36
36
persister: createQueryPersister({ name: `queryCache-${currentAccount.did}` }),
37
37
};
38
38
}
···
40
40
return {
41
41
did: null,
42
42
handler: null,
43
-
client: new Client({ handler: simpleFetchHandler({ service: DEFAULT_APPVIEW_URL }) }),
43
+
rpc: new XRPC({ handler: simpleFetchHandler({ service: DEFAULT_APPVIEW_URL }) }),
44
44
persister: createQueryPersister({ name: `queryCache-public` }),
45
45
};
46
46
});
+17
-17
src/lib/states/session.tsx
+17
-17
src/lib/states/session.tsx
···
10
10
useContext,
11
11
} from 'solid-js';
12
12
13
-
import { Client, ClientResponseError, type FetchHandler, type FetchHandlerObject } from '@atcute/client';
14
-
import type { Did, GenericUri } from '@atcute/lexicons';
13
+
import { type FetchHandler, type FetchHandlerObject, XRPC, XRPCError } from '@atcute/client';
14
+
import type { At } from '@atcute/client/lexicons';
15
15
import { OAuthUserAgent, deleteStoredSession, getSession } from '@atcute/oauth-browser-client';
16
16
import { mapDefined } from '@mary/array-fns';
17
17
···
27
27
import { assert } from '../utils/invariant';
28
28
29
29
export interface CurrentAccountState {
30
-
readonly did: Did;
30
+
readonly did: At.DID;
31
31
readonly data: AccountData;
32
32
readonly preferences: PerAccountPreferenceSchema;
33
33
34
-
readonly client: Client;
34
+
readonly rpc: XRPC;
35
35
readonly agent: OAuthUserAgent | undefined;
36
36
readonly _cleanup: () => void;
37
37
}
···
40
40
readonly currentAccount: CurrentAccountState | undefined;
41
41
42
42
getAccounts(): AccountData[];
43
-
resumeSession(did: Did): Promise<void>;
44
-
removeAccount(did: Did): Promise<void>;
43
+
resumeSession(did: At.DID): Promise<void>;
44
+
removeAccount(did: At.DID): Promise<void>;
45
45
46
46
logout(): Promise<void>;
47
47
}
···
60
60
};
61
61
62
62
const createAccountState = (
63
-
did: Did,
63
+
did: At.DID,
64
64
session: OAuthUserAgent | undefined,
65
-
client: Client,
65
+
rpc: XRPC,
66
66
): CurrentAccountState => {
67
67
return createRoot((cleanup): CurrentAccountState => {
68
68
const preferences = createAccountPreferences(did);
···
75
75
76
76
const labelers = createMemo((): Labeler[] => {
77
77
return Object.entries(preferences.moderation.labelers).map(([did, info]): Labeler => {
78
-
return { did: did as Did, redact: info.redact };
78
+
return { did: did as At.DID, redact: info.redact };
79
79
});
80
80
});
81
81
82
82
// A bit of a hack, but works right now.
83
-
client.handler = attachLabelerHeaders(client.handler, labelers);
83
+
rpc.handle = attachLabelerHeaders(rpc.handle, labelers);
84
84
85
85
createEffect(() => {
86
86
const signal = abortable();
···
129
129
return $data;
130
130
},
131
131
132
-
client: client,
132
+
rpc: rpc,
133
133
agent: session,
134
134
_cleanup: cleanup,
135
135
};
···
144
144
getAccounts(): AccountData[] {
145
145
return sessions.accounts;
146
146
},
147
-
async resumeSession(did: Did): Promise<void> {
147
+
async resumeSession(did: At.DID): Promise<void> {
148
148
const account = sessions.accounts.find((acc) => acc.did === did);
149
149
if (!account) {
150
150
return;
···
181
181
// Dirty hack to account for the fact that we aren't dumping the user
182
182
// directly to the login modal.
183
183
handler = () => {
184
-
throw new ClientResponseError({ status: 400, data: { error: 'invalid_token' } });
184
+
throw new XRPCError(400, { kind: 'invalid_token' });
185
185
};
186
186
}
187
187
188
-
const rpc = new Client({ handler });
188
+
const rpc = new XRPC({ handler });
189
189
190
190
signal.throwIfAborted();
191
191
···
197
197
});
198
198
},
199
199
200
-
async removeAccount(did: Did): Promise<void> {
200
+
async removeAccount(did: At.DID): Promise<void> {
201
201
const $state = untrack(state);
202
202
const isLoggedIn = $state !== undefined && $state.did === did;
203
203
···
246
246
return session;
247
247
};
248
248
249
-
const createAccountPreferences = (did: Did) => {
249
+
const createAccountPreferences = (did: At.DID) => {
250
250
const key = `account-${did}`;
251
251
return createReactiveLocalStorage<PerAccountPreferenceSchema>(key, (version, prev) => {
252
252
if (version === 0) {
···
282
282
},
283
283
displayName: 'Popular With Friends',
284
284
description: '',
285
-
avatar: '' as GenericUri,
285
+
avatar: '',
286
286
indexedAt: '0000-00-00T00:00:00.000Z',
287
287
},
288
288
},
+11
-30
src/lib/states/singleton.tsx
+11
-30
src/lib/states/singleton.tsx
···
1
-
import { type ParentProps, createContext, createRoot, getOwner, useContext } from 'solid-js';
1
+
import { type ParentProps, createContext, getOwner, runWithOwner, useContext } from 'solid-js';
2
2
3
3
import { assert } from '../utils/invariant';
4
4
5
-
interface Singleton<T> {
6
-
n: string;
7
-
c: () => T;
8
-
}
9
-
10
-
interface SingletonContext {
11
-
inject<T>(singleton: Singleton<T>): T;
5
+
export interface SingletonContext {
6
+
inject<T>(construct: () => T): T;
12
7
}
13
8
14
9
const Context = createContext<SingletonContext>();
15
10
16
11
export const SingletonProvider = (props: ParentProps) => {
17
12
const owner = getOwner();
18
-
const registry = new Map<
19
-
string,
20
-
{
21
-
c: any;
22
-
v: any;
23
-
d: () => void;
24
-
}
25
-
>();
13
+
const instances = new Map<() => any, any>();
26
14
27
15
const context: SingletonContext = {
28
-
inject({ n: name, c: construct }) {
29
-
let registered = registry.get(name);
30
-
if (registered === undefined || registered.c !== construct) {
31
-
registered?.d();
32
-
registered = createRoot((dispose) => ({ c: construct, d: dispose, v: construct() }), owner);
33
-
34
-
registry.set(name, registered);
16
+
inject(construct) {
17
+
let instance = instances.get(construct);
18
+
if (instance === undefined) {
19
+
instances.set(construct, (instance = runWithOwner(owner, construct)));
35
20
}
36
21
37
-
return registered.v;
22
+
return instance;
38
23
},
39
24
};
40
25
41
26
return <Context.Provider value={context}>{props.children}</Context.Provider>;
42
27
};
43
28
44
-
export const define = <T,>(name: string, construct: () => T): Singleton<T> => {
45
-
return { n: name, c: construct };
46
-
};
47
-
48
-
export const inject = <T,>(singleton: Singleton<T>): T => {
29
+
export const inject = <T,>(construct: () => T): T => {
49
30
const context = useContext(Context);
50
31
assert(context !== undefined, `Expected inject to be called under <SingletonProvider>`);
51
32
52
-
return context.inject(singleton);
33
+
return context.inject(construct);
53
34
};
+2
-3
src/lib/states/singletons/bookmarks.ts
+2
-3
src/lib/states/singletons/bookmarks.ts
···
5
5
import { assert } from '~/lib/utils/invariant';
6
6
7
7
import { useSession } from '../session';
8
-
import { define } from '../singleton';
9
8
10
-
const BookmarksService = define('bookmarks', () => {
9
+
const BookmarksService = () => {
11
10
const { currentAccount } = useSession();
12
11
13
12
let promise: Promise<IDBPDatabase<BookmarkDBSchema>> | undefined;
···
52
51
})());
53
52
},
54
53
};
55
-
});
54
+
};
56
55
57
56
export default BookmarksService;
+24
-24
src/lib/states/singletons/moderation.ts
+24
-24
src/lib/states/singletons/moderation.ts
···
1
1
import { createMemo } from 'solid-js';
2
2
import { unwrap } from 'solid-js/store';
3
3
4
-
import { ok } from '@atcute/client';
5
-
import type { Did } from '@atcute/lexicons';
4
+
import type { AppBskyLabelerDefs, At } from '@atcute/client/lexicons';
6
5
import { mapDefined } from '@mary/array-fns';
7
-
import { createBatchedFetch } from '@mary/batch-fetch';
8
-
import { type QueryFunctionContext as QC, createQueries } from '@mary/solid-query';
6
+
import { createQueries } from '@mary/solid-query';
9
7
10
8
import { BLUESKY_MODERATION_DID } from '~/api/defaults';
11
9
import type { ModerationLabeler, ModerationOptions, ModerationPreferences } from '~/api/moderation';
12
10
import { interpretLabelerDefinition } from '~/api/moderation/labeler';
13
11
12
+
import { createBatchedFetch } from '~/lib/utils/batch-fetch';
13
+
14
14
import { useAgent } from '../agent';
15
15
import { useSession } from '../session';
16
-
import { define } from '../singleton';
17
16
18
-
const ModerationService = define('moderation', () => {
19
-
const { client, persister } = useAgent();
17
+
type Labeler = AppBskyLabelerDefs.LabelerViewDetailed;
18
+
19
+
const ModerationService = () => {
20
+
const { rpc, persister } = useAgent();
20
21
const { currentAccount } = useSession();
21
22
22
23
const modPreferences = createMemo((): ModerationPreferences => {
···
38
39
return currentAccount.preferences.moderation;
39
40
});
40
41
41
-
const fetchLabeler = createBatchedFetch<Did, ModerationLabeler>({
42
+
const fetchLabeler = createBatchedFetch<At.DID, At.DID, ModerationLabeler>({
42
43
limit: 20,
43
44
timeout: 1,
44
-
idFromResource: (labeler) => labeler.did,
45
-
async fetch(dids, signal) {
46
-
const data = await ok(
47
-
client.get('app.bsky.labeler.getServices', {
48
-
signal,
49
-
params: {
50
-
dids: dids,
51
-
detailed: true,
52
-
},
53
-
}),
54
-
);
45
+
idFromQuery: (query) => query,
46
+
idFromData: (data) => data.did,
47
+
async fetch(dids) {
48
+
const { data } = await rpc.get('app.bsky.labeler.getServices', {
49
+
params: {
50
+
dids: dids,
51
+
detailed: true,
52
+
},
53
+
});
55
54
56
-
const views = data.views.filter((view) => view.$type === 'app.bsky.labeler.defs#labelerViewDetailed');
55
+
const views = data.views as Labeler[];
56
+
57
57
return views.map((view) => interpretLabelerDefinition(view));
58
58
},
59
59
});
···
61
61
const labelerDefs = createQueries(() => {
62
62
return {
63
63
queries: Object.keys(modPreferences().labelers).map((_did) => {
64
-
const did = _did as Did;
64
+
const did = _did as At.DID;
65
65
66
66
return {
67
67
queryKey: ['labeler-definition', did],
68
-
queryFn: ({ signal }: QC) => fetchLabeler(did, signal),
68
+
queryFn: () => fetchLabeler(did),
69
69
staleTime: 21600000, // 6 hours
70
70
gcTime: 86400000, // 24 hours
71
71
refetchOnWindowFocus: true,
···
76
76
const defs = mapDefined(results, (result) => result.data);
77
77
const fields = Object.fromEntries(defs.map((def) => [def.did, def]));
78
78
79
-
return fields as Record<Did, ModerationLabeler>;
79
+
return fields as Record<At.DID, ModerationLabeler>;
80
80
},
81
81
};
82
82
});
···
90
90
});
91
91
92
92
return modOptions;
93
-
});
93
+
};
94
94
95
95
export default ModerationService;
+106
src/lib/utils/batch-fetch.ts
+106
src/lib/utils/batch-fetch.ts
···
1
+
// we would sometimes rely on fetching multiple individual posts, and it would
2
+
// be preferrable if it can be batched.
3
+
4
+
type Promisable<T> = T | Promise<T>;
5
+
6
+
export type QueryId = string | number;
7
+
8
+
export interface BatchedFetchOptions<Query, Id extends QueryId, Data> {
9
+
limit: number;
10
+
timeout: number;
11
+
fetch: (queries: Query[]) => Promisable<Data[]>;
12
+
key?: (query: Query) => string | number;
13
+
idFromQuery: (query: Query) => Id;
14
+
idFromData: (data: Data) => Id;
15
+
}
16
+
17
+
interface BatchedFetchMap<Query, Id, Data> {
18
+
key: string | number | undefined;
19
+
timeout: any;
20
+
queries: Query[];
21
+
pending: Map<Id, PromiseWithResolvers<Data>>;
22
+
}
23
+
24
+
export class ResourceMissingError extends Error {
25
+
name = 'ResourceMissingError';
26
+
}
27
+
28
+
/*#__NO_SIDE_EFFECTS__*/
29
+
export const createBatchedFetch = <Query, Id extends QueryId, Data>(
30
+
options: BatchedFetchOptions<Query, Id, Data>,
31
+
) => {
32
+
const { limit, timeout, fetch, key: _key, idFromData, idFromQuery } = options;
33
+
34
+
let curr: BatchedFetchMap<Query, Id, Data> | undefined;
35
+
36
+
return (query: Query): Promise<Data> => {
37
+
const id = idFromQuery(query);
38
+
const key = _key?.(query);
39
+
40
+
let map = curr;
41
+
42
+
if (!map || map.queries.length >= limit || map.key !== key) {
43
+
map = curr = {
44
+
key,
45
+
timeout: undefined,
46
+
queries: [],
47
+
pending: new Map(),
48
+
};
49
+
}
50
+
51
+
let deferred = map.pending.get(id);
52
+
53
+
if (!deferred) {
54
+
deferred = Promise.withResolvers<Data>();
55
+
56
+
map.queries.push(query);
57
+
map.pending.set(id, deferred);
58
+
}
59
+
60
+
clearTimeout(map.timeout);
61
+
62
+
map.timeout = setTimeout(() => {
63
+
if (curr === map) {
64
+
curr = undefined;
65
+
}
66
+
67
+
perform(map!, fetch, idFromData);
68
+
}, timeout);
69
+
70
+
return deferred.promise;
71
+
};
72
+
};
73
+
74
+
const perform = async <Query, Id extends QueryId, Data>(
75
+
map: BatchedFetchMap<Query, Id, Data>,
76
+
fetch: (queries: Query[]) => Promisable<Data[]>,
77
+
idFromData: (data: Data) => Id,
78
+
) => {
79
+
const queries = map.queries;
80
+
const pending = map.pending;
81
+
82
+
let errored = false;
83
+
84
+
try {
85
+
const dataset = await fetch(queries);
86
+
87
+
for (const data of dataset) {
88
+
const id = idFromData(data);
89
+
const deferred = pending.get(id);
90
+
91
+
deferred?.resolve(data);
92
+
}
93
+
} catch (error) {
94
+
errored = true;
95
+
96
+
for (const deferred of pending.values()) {
97
+
deferred.reject(error);
98
+
}
99
+
} finally {
100
+
if (!errored) {
101
+
for (const deferred of pending.values()) {
102
+
deferred.reject(new ResourceMissingError());
103
+
}
104
+
}
105
+
}
106
+
};
+6
-12
src/lib/utils/invariant.ts
+6
-12
src/lib/utils/invariant.ts
···
1
-
export const assert: {
2
-
(condition: any, message?: string): asserts condition;
3
-
} = (condition, message): asserts condition => {
1
+
export function assert(condition: any, message?: string): asserts condition {
4
2
if (import.meta.env.DEV && !condition) {
5
3
throw new Error(`Assertion failed` + (message ? `: ${message}` : ``));
6
4
}
7
-
};
5
+
}
8
6
9
-
export const assertStrong: {
10
-
(condition: any, message?: string): asserts condition;
11
-
} = (condition, message): asserts condition => {
7
+
export function assertStrong(condition: any, message?: string): asserts condition {
12
8
if (!condition) {
13
9
if (import.meta.env.DEV) {
14
10
throw new Error(`Assertion failed` + (message ? `: ${message}` : ``));
···
16
12
17
13
throw new Error(`Assertion failed`);
18
14
}
19
-
};
15
+
}
20
16
21
-
export const assertUnreachable: {
22
-
(_: never, message?: string): never;
23
-
} = (_, message) => {
17
+
export function assertUnreachable(_: never, message?: string): never {
24
18
assertStrong(false, message);
25
-
};
19
+
}
+6
-2
src/main.tsx
+6
-2
src/main.tsx
···
2
2
import { type JSX, createSignal, onMount } from 'solid-js';
3
3
import { render } from 'solid-js/web';
4
4
5
-
import type { Did } from '@atcute/lexicons';
5
+
import type { At } from '@atcute/client/lexicons';
6
6
import { configureOAuth } from '@atcute/oauth-browser-client';
7
7
8
8
import * as navigation from '~/globals/navigation';
···
39
39
},
40
40
});
41
41
42
+
localStorage.removeItem('oauth-dpopNonces');
43
+
localStorage.removeItem('oauth-sessions');
44
+
localStorage.removeItem('oauth-states');
45
+
42
46
const InnerApp = () => {
43
47
const [ready, setReady] = createSignal(false);
44
48
const session = useSession();
45
49
46
50
onMount(() => {
47
-
const resumeAccount = async (did: Did | undefined) => {
51
+
const resumeAccount = async (did: At.DID | undefined) => {
48
52
try {
49
53
if (did) {
50
54
await session.resumeSession(did);
+2
-2
src/shell.tsx
+2
-2
src/shell.tsx
···
8
8
lazy,
9
9
} from 'solid-js';
10
10
11
-
import type { AppBskyNotificationGetUnreadCount } from '@atcute/bluesky';
11
+
import type { AppBskyNotificationGetUnreadCount } from '@atcute/client/lexicons';
12
12
import type { DefinedCreateQueryResult } from '@mary/solid-query';
13
13
14
14
import { createNotificationCountQuery } from '~/api/queries/notification-count';
···
99
99
unread,
100
100
}: {
101
101
route: Accessor<MatchedRouteState>;
102
-
unread: DefinedCreateQueryResult<AppBskyNotificationGetUnreadCount.$output>;
102
+
unread: DefinedCreateQueryResult<AppBskyNotificationGetUnreadCount.Output>;
103
103
}) => {
104
104
const active = () => route().def.meta?.name;
105
105
+3
-4
src/views/bluemoji-emotes.tsx
+3
-4
src/views/bluemoji-emotes.tsx
···
1
1
import { type JSX, createEffect, createSignal } from 'solid-js';
2
2
3
-
import type { Blob as AtpBlob } from '@atcute/lexicons';
4
3
import { remove as removeExif } from '@mary/exif-rm';
5
4
import { createInfiniteQuery } from '@mary/solid-query';
6
5
···
46
45
openModal(() => <AddEmotePrompt blob={blob} onAdd={() => {}} />);
47
46
};
48
47
49
-
const { client } = useAgent();
48
+
const { rpc } = useAgent();
50
49
const { currentAccount } = useSession();
51
50
52
51
const query = createInfiniteQuery(() => ({
53
52
queryKey: ['bluemoji', 'emotes'],
54
53
async queryFn(ctx) {
55
-
return listRecords(client, {
54
+
return listRecords(rpc, {
56
55
repo: currentAccount!.did,
57
56
collection: 'blue.moji.collection.item',
58
57
limit: 100,
···
114
113
return (
115
114
<div class="flex items-center gap-4 px-4 py-4">
116
115
<img
117
-
src={/* @once */ getCdnUrl(currentAccount!.did, (blob! as AtpBlob).ref.$link)}
116
+
src={/* @once */ getCdnUrl(currentAccount!.did, blob!.ref.$link)}
118
117
class="h-8 w-8 object-cover"
119
118
/>
120
119
+7
-9
src/views/oauth-callback.tsx
+7
-9
src/views/oauth-callback.tsx
···
1
1
import { Match, Switch, createResource } from 'solid-js';
2
2
3
-
import { Client, ok } from '@atcute/client';
3
+
import { XRPC } from '@atcute/client';
4
4
import {
5
5
AuthorizationError,
6
6
OAuthResponseError,
···
27
27
const did = session.info.sub;
28
28
29
29
const agent = new OAuthUserAgent(session);
30
-
const client = new Client({ handler: agent });
30
+
const rpc = new XRPC({ handler: agent });
31
31
32
-
const profile = await ok(
33
-
client.get('app.bsky.actor.getProfile', {
34
-
params: {
35
-
actor: did,
36
-
},
37
-
}),
38
-
);
32
+
const { data: profile } = await rpc.get('app.bsky.actor.getProfile', {
33
+
params: {
34
+
actor: did,
35
+
},
36
+
});
39
37
40
38
{
41
39
// Update UI preferences
+1
-6
src/views/post-likes.tsx
+1
-6
src/views/post-likes.tsx
···
1
-
import type { Did, RecordKey } from '@atcute/lexicons';
2
-
3
1
import { createSubjectLikersQuery } from '~/api/queries/subject-likers';
4
2
import { makeAtUri } from '~/api/types/at-uri';
5
3
···
12
10
import VirtualItem from '~/components/virtual-item';
13
11
14
12
const PostLikesPage = () => {
15
-
const { did, rkey } = useParams<{
16
-
did: Did;
17
-
rkey: RecordKey;
18
-
}>();
13
+
const { did, rkey } = useParams();
19
14
20
15
const uri = makeAtUri(did, 'app.bsky.feed.post', rkey);
21
16
const likers = createSubjectLikersQuery(() => uri);
+1
-6
src/views/post-quotes.tsx
+1
-6
src/views/post-quotes.tsx
···
1
-
import type { Did, RecordKey } from '@atcute/lexicons';
2
-
3
1
import { createPostQuotesQuery } from '~/api/queries/post-quotes';
4
2
import { makeAtUri } from '~/api/types/at-uri';
5
3
···
11
9
import VirtualItem from '~/components/virtual-item';
12
10
13
11
const PostQuotesPage = () => {
14
-
const { did, rkey } = useParams<{
15
-
did: Did;
16
-
rkey: RecordKey;
17
-
}>();
12
+
const { did, rkey } = useParams();
18
13
19
14
const uri = makeAtUri(did, 'app.bsky.feed.post', rkey);
20
15
const quotes = createPostQuotesQuery(() => uri);
+1
-6
src/views/post-reposts.tsx
+1
-6
src/views/post-reposts.tsx
···
1
-
import type { Did, RecordKey } from '@atcute/lexicons';
2
-
3
1
import { createSubjectRepostersQuery } from '~/api/queries/subject-reposters';
4
2
import { makeAtUri } from '~/api/types/at-uri';
5
3
···
12
10
import VirtualItem from '~/components/virtual-item';
13
11
14
12
const PostLikesPage = () => {
15
-
const { did, rkey } = useParams<{
16
-
did: Did;
17
-
rkey: RecordKey;
18
-
}>();
13
+
const { did, rkey } = useParams();
19
14
20
15
const uri = makeAtUri(did, 'app.bsky.feed.post', rkey);
21
16
const reposters = createSubjectRepostersQuery(() => uri);
+12
-16
src/views/post-thread.tsx
+12
-16
src/views/post-thread.tsx
···
1
1
import { For, Match, Switch, createEffect, createMemo, createSignal } from 'solid-js';
2
2
3
-
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky';
4
-
import { ClientResponseError } from '@atcute/client';
5
-
import type { $type, ActorIdentifier, Did, RecordKey } from '@atcute/lexicons';
6
-
import { isDid } from '@atcute/lexicons/syntax';
3
+
import { XRPCError } from '@atcute/client';
4
+
import type { AppBskyFeedDefs, AppBskyFeedPost, At, Brand } from '@atcute/client/lexicons';
7
5
import { useQueryClient } from '@mary/solid-query';
8
6
9
7
import {
···
14
12
import { usePostThreadQuery } from '~/api/queries/post-thread';
15
13
import { createProfileQuery } from '~/api/queries/profile';
16
14
import { makeAtUri } from '~/api/types/at-uri';
15
+
import { isDid } from '~/api/types/identity';
17
16
18
17
import { history } from '~/globals/navigation';
19
18
···
39
38
import VirtualItem from '~/components/virtual-item';
40
39
41
40
const PostThreadPage = () => {
42
-
const { didOrHandle, rkey } = useParams<{
43
-
didOrHandle: ActorIdentifier;
44
-
rkey: RecordKey;
45
-
}>();
41
+
const { didOrHandle, rkey } = useParams();
46
42
47
43
const queryClient = useQueryClient();
48
44
···
54
50
if (data && data.$type === 'app.bsky.feed.defs#threadViewPost') {
55
51
const post = data.post;
56
52
const author = post.author;
57
-
const record = post.record as AppBskyFeedPost.Main;
53
+
const record = post.record as AppBskyFeedPost.Record;
58
54
59
55
const authorTitle = `@${truncateMiddle(author.handle, 29).toLowerCase()}`;
60
56
const postContent = record.text?.trim();
···
79
75
80
76
<Switch>
81
77
<Match when={query.error} keyed>
82
-
{(err) => {
83
-
if (err instanceof ClientResponseError) {
84
-
if (err.error === 'NotFound') {
78
+
{(error) => {
79
+
if (error instanceof XRPCError) {
80
+
if (error.kind === 'NotFound') {
85
81
return (
86
82
<div class="px-4 py-3">
87
83
<div class="rounded-md border border-outline p-3">
···
92
88
}
93
89
}
94
90
95
-
return <ErrorView error={err} onRetry={() => query.refetch()} />;
91
+
return <ErrorView error={error} onRetry={() => query.refetch()} />;
96
92
}}
97
93
</Match>
98
94
···
106
102
const data = accessor();
107
103
const type = data.$type;
108
104
109
-
let did: Did | undefined;
105
+
let did: At.DID | undefined;
110
106
111
107
if (type === 'app.bsky.feed.defs#threadViewPost') {
112
108
did = data.post.author.did;
···
221
217
export default PostThreadPage;
222
218
223
219
const ThreadView = (props: {
224
-
data: $type.enforce<AppBskyFeedDefs.ThreadViewPost>;
220
+
data: Brand.Union<AppBskyFeedDefs.ThreadViewPost>;
225
221
isPlaceholderData: boolean;
226
222
onReplyPublish?: () => void;
227
223
onMainPostDelete?: () => void;
···
261
257
}
262
258
}
263
259
264
-
return (post.record as AppBskyFeedPost.Main).reply !== undefined;
260
+
return (post.record as AppBskyFeedPost.Record).reply !== undefined;
265
261
};
266
262
267
263
return (
+1
-6
src/views/profile-curation-list.tsx
+1
-6
src/views/profile-curation-list.tsx
···
1
1
import { Match, Switch } from 'solid-js';
2
2
3
-
import type { Did, RecordKey } from '@atcute/lexicons';
4
-
5
3
import { createListMetaQuery } from '~/api/queries/list';
6
4
import { makeAtUri } from '~/api/types/at-uri';
7
5
···
13
11
import TimelineList from '~/components/timeline/timeline-list';
14
12
15
13
const CurationListPage = () => {
16
-
const { did, rkey } = useParams<{
17
-
did: Did;
18
-
rkey: RecordKey;
19
-
}>();
14
+
const { did, rkey } = useParams();
20
15
21
16
const uri = makeAtUri(did, 'app.bsky.graph.list', rkey);
22
17
const meta = createListMetaQuery(() => uri);
+2
-6
src/views/profile-feed.tsx
+2
-6
src/views/profile-feed.tsx
···
1
1
import { Match, Show, Switch } from 'solid-js';
2
2
3
-
import type { ActorIdentifier, RecordKey } from '@atcute/lexicons';
4
-
import { isDid } from '@atcute/lexicons/syntax';
5
3
import { useQueryClient } from '@mary/solid-query';
6
4
7
5
import { createFeedMetaQuery } from '~/api/queries/feed';
8
6
import { makeAtUri } from '~/api/types/at-uri';
7
+
import { isDid } from '~/api/types/identity';
9
8
10
9
import { openModal } from '~/globals/modals';
11
10
import { history } from '~/globals/navigation';
···
24
23
import TimelineList from '~/components/timeline/timeline-list';
25
24
26
25
const FeedPage = () => {
27
-
const { didOrHandle, rkey } = useParams<{
28
-
didOrHandle: ActorIdentifier;
29
-
rkey: RecordKey;
30
-
}>();
26
+
const { didOrHandle, rkey } = useParams();
31
27
32
28
const queryClient = useQueryClient();
33
29
+1
-3
src/views/profile-feeds.tsx
+1
-3
src/views/profile-feeds.tsx
···
1
-
import type { Did } from '@atcute/lexicons';
2
-
3
1
import { createProfileQuery } from '~/api/queries/profile';
4
2
import { createProfileFeedsQuery } from '~/api/queries/profile-feeds';
5
3
···
11
9
import VirtualItem from '~/components/virtual-item';
12
10
13
11
const ProfileFeedsPage = () => {
14
-
const { did } = useParams<{ did: Did }>();
12
+
const { did } = useParams();
15
13
16
14
const feeds = createProfileFeedsQuery(() => did);
17
15
const profile = createProfileQuery(() => did);
+1
-3
src/views/profile-followers.tsx
+1
-3
src/views/profile-followers.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { Did } from '@atcute/lexicons';
4
-
5
3
import { createProfileFollowersQuery } from '~/api/queries/profile-followers';
6
4
7
5
import { useParams, useTitle } from '~/lib/navigation/router';
···
13
11
import VirtualItem from '~/components/virtual-item';
14
12
15
13
const ProfileFollowersPage = () => {
16
-
const { did } = useParams<{ did: Did }>();
14
+
const { did } = useParams();
17
15
18
16
const followers = createProfileFollowersQuery(() => did);
19
17
const subject = createMemo(() => followers.data?.pages[0].subject);
+1
-3
src/views/profile-following.tsx
+1
-3
src/views/profile-following.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { Did } from '@atcute/lexicons';
4
-
5
3
import { createProfileFollowingQuery } from '~/api/queries/profile-following';
6
4
7
5
import { useParams, useTitle } from '~/lib/navigation/router';
···
13
11
import VirtualItem from '~/components/virtual-item';
14
12
15
13
const ProfileFollowingPage = () => {
16
-
const { did } = useParams<{ did: Did }>();
14
+
const { did } = useParams();
17
15
18
16
const following = createProfileFollowingQuery(() => did);
19
17
const subject = createMemo(() => following.data?.pages[0].subject);
+1
-3
src/views/profile-known-followers.tsx
+1
-3
src/views/profile-known-followers.tsx
···
1
1
import { createMemo } from 'solid-js';
2
2
3
-
import type { Did } from '@atcute/lexicons';
4
-
5
3
import { createProfileKnownFollowersQuery } from '~/api/queries/profile-known-followers';
6
4
7
5
import { useParams, useTitle } from '~/lib/navigation/router';
···
13
11
import VirtualItem from '~/components/virtual-item';
14
12
15
13
const ProfileKnownFollowersPage = () => {
16
-
const { did } = useParams<{ did: Did }>();
14
+
const { did } = useParams();
17
15
18
16
const followers = createProfileKnownFollowersQuery(() => did);
19
17
const subject = createMemo(() => followers.data?.pages[0].subject);
+6
-6
src/views/profile-labels.tsx
+6
-6
src/views/profile-labels.tsx
···
1
1
import { Match, Show, Switch, createMemo } from 'solid-js';
2
2
3
-
import type { Did } from '@atcute/lexicons';
3
+
import type { At } from '@atcute/client/lexicons';
4
4
import { mapDefined } from '@mary/array-fns';
5
5
6
6
import {
···
46
46
import LabelerOverflowMenu from '~/components/settings/moderation/labeling/labeler-overflow-menu';
47
47
48
48
const ProfileLabelsPage = () => {
49
-
const { did } = useParams<{ did: Did }>();
49
+
const { did } = useParams();
50
50
const { currentAccount } = useSession();
51
51
52
-
const query = createLabelerMetaQuery(() => did);
52
+
const query = createLabelerMetaQuery(() => did as At.DID);
53
53
54
54
const config = createMemo(() => {
55
55
if (!currentAccount) {
···
57
57
}
58
58
59
59
const preferences = currentAccount.preferences;
60
-
return preferences.moderation.labelers[did];
60
+
return preferences.moderation.labelers[did as At.DID];
61
61
});
62
62
63
63
useTitle(() => {
···
98
98
const preferences = currentAccount!.preferences;
99
99
const labelers = preferences.moderation.labelers;
100
100
101
-
labelers[did] = {
101
+
labelers[did as At.DID] = {
102
102
labels: {},
103
103
privileged: false,
104
104
redact: false,
···
140
140
const preferences = currentAccount!.preferences;
141
141
const labelers = preferences.moderation.labelers;
142
142
143
-
delete labelers[did];
143
+
delete labelers[did as At.DID];
144
144
}}
145
145
/>
146
146
));
+2
-6
src/views/profile-list.tsx
+2
-6
src/views/profile-list.tsx
···
1
1
import { Match, Switch } from 'solid-js';
2
2
3
-
import type { ActorIdentifier, RecordKey } from '@atcute/lexicons';
4
-
import { isDid } from '@atcute/lexicons/syntax';
5
3
import { useQueryClient } from '@mary/solid-query';
6
4
7
5
import { createListMetaQuery } from '~/api/queries/list';
8
6
import { makeAtUri } from '~/api/types/at-uri';
7
+
import { isDid } from '~/api/types/identity';
9
8
10
9
import { history } from '~/globals/navigation';
11
10
···
16
15
import * as Page from '~/components/page';
17
16
18
17
const ListStubPage = () => {
19
-
const { didOrHandle, rkey } = useParams<{
20
-
didOrHandle: ActorIdentifier;
21
-
rkey: RecordKey;
22
-
}>();
18
+
const { didOrHandle, rkey } = useParams();
23
19
24
20
const queryClient = useQueryClient();
25
21
+1
-3
src/views/profile-lists.tsx
+1
-3
src/views/profile-lists.tsx
···
1
-
import type { Did } from '@atcute/lexicons';
2
-
3
1
import { createProfileQuery } from '~/api/queries/profile';
4
2
import { createProfileListsQuery } from '~/api/queries/profile-lists';
5
3
···
10
8
import PagedList from '~/components/paged-list';
11
9
12
10
const ProfileListsPage = () => {
13
-
const { did } = useParams<{ did: Did }>();
11
+
const { did } = useParams();
14
12
15
13
const lists = createProfileListsQuery(() => did);
16
14
const profile = createProfileQuery(() => did);
+3
-7
src/views/profile-moderation-list.tsx
+3
-7
src/views/profile-moderation-list.tsx
···
1
1
import { Match, Show, Switch, createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyGraphDefs } from '@atcute/bluesky';
4
-
import type { Did, RecordKey, ResourceUri } from '@atcute/lexicons';
3
+
import type { AppBskyGraphDefs } from '@atcute/client/lexicons';
5
4
import { useQueryClient } from '@mary/solid-query';
6
5
7
6
import { ContextContentMedia } from '~/api/moderation/constants';
···
30
29
import VirtualItem from '~/components/virtual-item';
31
30
32
31
const ProfileModerationListPage = () => {
33
-
const { did, rkey } = useParams<{
34
-
did: Did;
35
-
rkey: RecordKey;
36
-
}>();
32
+
const { did, rkey } = useParams();
37
33
38
34
const uri = makeAtUri(did, 'app.bsky.graph.list', rkey);
39
35
const query = createListMetaQuery(() => uri);
···
164
160
);
165
161
};
166
162
167
-
const MembersList = ({ uri }: { uri: ResourceUri }) => {
163
+
const MembersList = ({ uri }: { uri: string }) => {
168
164
const members = createListMembersQuery(() => uri);
169
165
170
166
return (
+2
-6
src/views/profile-search.tsx
+2
-6
src/views/profile-search.tsx
···
1
1
import { createSignal } from 'solid-js';
2
2
3
-
import type { ActorIdentifier } from '@atcute/lexicons';
4
-
import { isDid } from '@atcute/lexicons/syntax';
5
-
6
3
import { createProfileQuery } from '~/api/queries/profile';
4
+
import { isDid } from '~/api/types/identity';
7
5
8
6
import { history } from '~/globals/navigation';
9
7
···
16
14
import SearchSuggestionsView from '~/components/search/search-suggestions-view';
17
15
18
16
const ProfileSearchPage = () => {
19
-
const { didOrHandle } = useParams<{
20
-
didOrHandle: ActorIdentifier;
21
-
}>();
17
+
const { didOrHandle } = useParams();
22
18
23
19
const [query, setQuery] = createSignal('');
24
20
const profile = createProfileQuery(() => didOrHandle);
+10
-13
src/views/profile.tsx
+10
-13
src/views/profile.tsx
···
1
1
import { Match, Show, Switch, createMemo } from 'solid-js';
2
2
3
-
import type { AppBskyActorDefs } from '@atcute/bluesky';
4
-
import { ClientResponseError } from '@atcute/client';
5
-
import type { ActorIdentifier } from '@atcute/lexicons';
6
-
import { isDid } from '@atcute/lexicons/syntax';
3
+
import { XRPCError } from '@atcute/client';
4
+
import type { AppBskyActorDefs } from '@atcute/client/lexicons';
7
5
import { useQueryClient } from '@mary/solid-query';
8
6
9
7
import { useProfileShadow } from '~/api/cache/profile-shadow';
10
8
import { createProfileQuery } from '~/api/queries/profile';
9
+
import { isDid } from '~/api/types/identity';
11
10
12
11
import { openModal } from '~/globals/modals';
13
12
import { history } from '~/globals/navigation';
···
32
31
import VirtualItem from '~/components/virtual-item';
33
32
34
33
const ProfilePage = () => {
35
-
const { didOrHandle } = useParams<{
36
-
didOrHandle: ActorIdentifier;
37
-
}>();
34
+
const { didOrHandle } = useParams();
38
35
39
36
const queryClient = useQueryClient();
40
37
const profile = createProfileQuery(() => didOrHandle);
···
118
115
<Match when={profile.error} keyed>
119
116
{(err) => {
120
117
if (
121
-
err instanceof ClientResponseError &&
122
-
(err.error === 'InvalidRequest' ||
123
-
err.error === 'AccountTakedown' ||
124
-
err.error === 'AccountDeactivated')
118
+
err instanceof XRPCError &&
119
+
(err.kind === 'InvalidRequest' ||
120
+
err.kind === 'AccountTakedown' ||
121
+
err.kind === 'AccountDeactivated')
125
122
) {
126
123
const text =
127
-
err.error === 'AccountTakedown'
124
+
err.kind === 'AccountTakedown'
128
125
? `This account is taken down`
129
-
: err.error === 'AccountDeactivated'
126
+
: err.kind === 'AccountDeactivated'
130
127
? `This account has deactivated`
131
128
: `This account doesn't exist`;
132
129
+6
-7
src/views/settings-account.tsx
+6
-7
src/views/settings-account.tsx
···
1
-
import { ok } from '@atcute/client';
2
1
import { createQuery } from '@mary/solid-query';
3
2
4
3
import { useTitle } from '~/lib/navigation/router';
···
8
7
import * as Page from '~/components/page';
9
8
10
9
const AccountSettingsPage = () => {
11
-
const { client, persister } = useAgent();
10
+
const { did, rpc, persister } = useAgent();
12
11
13
12
const repo = createQuery(() => ({
14
13
queryKey: ['describe-repo'],
15
14
persister: persister as any,
16
15
async queryFn() {
17
-
const [session, server] = await Promise.all([
18
-
ok(client.get('com.atproto.server.getSession')),
19
-
ok(client.get('com.atproto.server.describeServer')),
16
+
const [repoResponse, serverResponse] = await Promise.all([
17
+
rpc.get('com.atproto.repo.describeRepo', { params: { repo: did! } }),
18
+
rpc.handle('/xrpc/com.atproto.server.describeServer', {}),
20
19
]);
21
20
22
21
return {
23
-
handle: session.handle,
24
-
pds: server.did.replace(/^did:web:/, ''),
22
+
handle: repoResponse.data.handle,
23
+
pds: new URL(serverResponse.url).host,
25
24
};
26
25
},
27
26
}));
+7
-11
src/views/settings-app-passwords.tsx
+7
-11
src/views/settings-app-passwords.tsx
···
1
1
import { For, Match, Show, Switch } from 'solid-js';
2
2
3
-
import type { ComAtprotoServerListAppPasswords } from '@atcute/atproto';
4
-
import { ok } from '@atcute/client';
3
+
import type { ComAtprotoServerListAppPasswords } from '@atcute/client/lexicons';
5
4
import { createMutation, createQuery } from '@mary/solid-query';
6
5
7
6
import { openModal } from '~/globals/modals';
···
23
22
import AddAppPasswordPrompt from '~/components/settings/app-passwords/add-app-password-prompt';
24
23
25
24
const AppPasswordsSettingsPage = () => {
26
-
const { client } = useAgent();
25
+
const { rpc } = useAgent();
27
26
28
27
const passwords = createQuery(() => {
29
28
return {
30
29
queryKey: ['app-passwords'],
31
30
async queryFn() {
32
-
const data = await ok(client.get('com.atproto.server.listAppPasswords'));
31
+
const { data } = await rpc.get('com.atproto.server.listAppPasswords', {});
33
32
34
33
return data.passwords;
35
34
},
···
106
105
}
107
106
108
107
const PasswordEntry = ({ item }: PasswordEntryProps) => {
109
-
const { client } = useAgent();
108
+
const { rpc } = useAgent();
110
109
111
110
const isPrivileged = item.privileged;
112
111
113
112
const mutation = createMutation((queryClient) => {
114
113
return {
115
114
async mutationFn() {
116
-
await ok(
117
-
client.post('com.atproto.server.revokeAppPassword', {
118
-
as: null,
119
-
input: { name: item.name },
120
-
}),
121
-
);
115
+
await rpc.call('com.atproto.server.revokeAppPassword', {
116
+
data: { name: item.name },
117
+
});
122
118
},
123
119
async onSuccess() {
124
120
await queryClient.invalidateQueries({ queryKey: ['app-passwords'] });
+1
-8
tsconfig.json
+1
-8
tsconfig.json
···
2
2
"compilerOptions": {
3
3
"target": "ESNext",
4
4
"lib": ["DOM", "DOM.Iterable", "ESNext"],
5
-
"types": [
6
-
"dom-close-watcher",
7
-
"dom-webcodecs",
8
-
"@atcute/atproto",
9
-
"@atcute/bluemoji",
10
-
"@atcute/bluesky",
11
-
"@kelinci/basa-lexicons",
12
-
],
5
+
"types": ["dom-close-watcher", "dom-webcodecs"],
13
6
"skipLibCheck": true,
14
7
15
8
"module": "ESNext",
+1
-1
vite.config.js
+1
-1
vite.config.js