@fkn/lib 0.9.17 → 0.9.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/account.cjs +1 -1
- package/account.js +1 -1
- package/{api-X8SBbrBZ.js → api-DQ-V4Lls.js} +73 -67
- package/{api-Dhc2hNCz.d.ts → api-DnO1DsJC.d.ts} +19 -2
- package/api-kHMHDGar.cjs +3 -0
- package/cloud/dgram.cjs +1 -1
- package/cloud/dgram.js +1 -1
- package/cloud/fetch.cjs +1 -1
- package/cloud/fetch.d.ts +1 -1
- package/cloud/fetch.js +1 -1
- package/cloud/fs.cjs +1 -1
- package/cloud/fs.d.ts +2 -2
- package/cloud/fs.js +1 -1
- package/cloud/net.cjs +1 -1
- package/cloud/net.d.ts +1 -1
- package/cloud/net.js +1 -1
- package/{cloud-CcKsidlt.cjs → cloud-BQoppUw4.cjs} +1 -1
- package/{cloud-DohLHbg2.js → cloud-C8CeqUht.js} +4 -4
- package/{cloud-CvEqxYM6.d.ts → cloud-uE4g-WqI.d.ts} +3 -3
- package/cloud.cjs +1 -1
- package/cloud.d.ts +4 -4
- package/cloud.js +4 -4
- package/{dgram-CW53Betg.cjs → dgram-D2Or5f2e.cjs} +1 -1
- package/{dgram-qpKjZosS.js → dgram-DlGl_ho1.js} +1 -1
- package/dgram.cjs +1 -1
- package/dgram.d.ts +1 -1
- package/dgram.js +1 -1
- package/dns.cjs +1 -1
- package/dns.js +1 -1
- package/{extension-1l_UXQsi.cjs → extension-4BM5hKrn.cjs} +1 -1
- package/{extension-DQcp_LKK.js → extension-DVO10P3i.js} +2 -2
- package/extension.cjs +1 -1
- package/extension.js +1 -1
- package/fs/promises.cjs +1 -1
- package/fs/promises.js +1 -1
- package/fs-BW5mVMmu.js +340 -0
- package/{fs-D5LFP4_n.d.ts → fs-CUmugp10.d.ts} +1 -1
- package/fs-DJm0bhjg.cjs +1 -0
- package/fs.cjs +1 -1
- package/fs.js +1 -1
- package/http.cjs +1 -1
- package/http.d.ts +1 -1
- package/http.js +1 -1
- package/index.cjs +1 -1
- package/index.d.ts +34 -3
- package/index.js +38 -27
- package/{net-B-LNnKps.js → net-BbmQeMpt.js} +1 -1
- package/{net-luhw3yr7.cjs → net-COzDDBnS.cjs} +1 -1
- package/{net-BtdN07IP.d.ts → net-l7JVHsIR.d.ts} +1 -1
- package/net.cjs +1 -1
- package/net.d.ts +1 -1
- package/net.js +1 -1
- package/package.json +1 -1
- package/packages.cjs +1 -1
- package/packages.js +1 -1
- package/{proxy-etZJARWe.d.ts → proxy-7ib45Uo-.d.ts} +1 -1
- package/{proxy-B0W1qzCo.cjs → proxy-B0gNjT8-.cjs} +1 -1
- package/{proxy-CtS_JiZL.js → proxy-BpqvCJmA.js} +1 -1
- package/storage-BW-jDLUL.cjs +1 -0
- package/storage-C8hBot2f.js +51 -0
- package/storage-qxXFLgTM.d.ts +44 -0
- package/api-DLGGoSnx.cjs +0 -3
- package/fs-B-NZzzSX.js +0 -315
- package/fs-C5L6CqmF.cjs +0 -1
- package/storage-CXIXrIxB.d.ts +0 -38
- package/storage-D2a8SsY5.cjs +0 -1
- package/storage-XKGhInxm.js +0 -37
package/fs-B-NZzzSX.js
DELETED
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { t } from "./node-fs-DKfokOlh.js";
|
|
3
|
-
import { c as n, f as r, l as i, o as a, r as o } from "./storage-XKGhInxm.js";
|
|
4
|
-
import { a as s, i as c, n as l, o as u, t as d } from "./opfs-BibrNGF0.js";
|
|
5
|
-
//#region src/lib/fs/hybrid.ts
|
|
6
|
-
var f = /* @__PURE__ */ e({
|
|
7
|
-
adopt: () => F,
|
|
8
|
-
adoptable: () => I,
|
|
9
|
-
available: () => te,
|
|
10
|
-
list: () => ie,
|
|
11
|
-
onConflict: () => N,
|
|
12
|
-
pending: () => D,
|
|
13
|
-
pendingDeletes: () => O,
|
|
14
|
-
pull: () => ce,
|
|
15
|
-
readFile: () => ae,
|
|
16
|
-
remove: () => se,
|
|
17
|
-
replicating: () => k,
|
|
18
|
-
writeFile: () => oe
|
|
19
|
-
}), ee, p = async () => await (ee ??= d().catch(() => !1)) ? !0 : (ee = void 0, !1), m = () => o().catch(() => !1), te = async () => await p() || await m(), h = "fkn:fs:pending", g = "fkn:fs:pending-delete", _ = "fkn:fs:adopt-declined", v = !0, y = /* @__PURE__ */ new Map(), b = (e) => {
|
|
20
|
-
try {
|
|
21
|
-
let t = localStorage.getItem(e);
|
|
22
|
-
if (!t) return {};
|
|
23
|
-
let n = JSON.parse(t);
|
|
24
|
-
return Array.isArray(n) ? Object.fromEntries(n.filter((e) => typeof e == "string").map((e) => [e, null])) : n && typeof n == "object" ? n : {};
|
|
25
|
-
} catch {
|
|
26
|
-
return {};
|
|
27
|
-
}
|
|
28
|
-
}, x = (e, t) => {
|
|
29
|
-
try {
|
|
30
|
-
Object.keys(t).length ? localStorage.setItem(e, JSON.stringify(t)) : localStorage.removeItem(e);
|
|
31
|
-
} catch {}
|
|
32
|
-
}, S = () => b(h), C = (e) => {
|
|
33
|
-
let t = S();
|
|
34
|
-
e in t || (t[e] = y.get(e) ?? null, x(h, t));
|
|
35
|
-
}, w = (e) => {
|
|
36
|
-
let t = S();
|
|
37
|
-
e in t && (delete t[e], x(h, t));
|
|
38
|
-
}, T = () => b(g), ne = (e) => {
|
|
39
|
-
let t = T();
|
|
40
|
-
e in t || (t[e] = y.get(e) ?? null, x(g, t));
|
|
41
|
-
}, E = (e) => {
|
|
42
|
-
let t = T();
|
|
43
|
-
e in t && (delete t[e], x(g, t));
|
|
44
|
-
}, D = () => Object.keys(S()), O = () => Object.keys(T()), k = () => v, A = null, re = null, j = () => re ??= import("./api-X8SBbrBZ.js").then((e) => e.n).then((e) => e.apiPromise), ie = async () => {
|
|
45
|
-
me();
|
|
46
|
-
let e = await m(), [t, n] = await Promise.all([p().then((e) => e ? l() : []).catch(() => []), e ? a().then((e) => ({
|
|
47
|
-
ok: !0,
|
|
48
|
-
entries: e
|
|
49
|
-
})).catch(() => ({
|
|
50
|
-
ok: !1,
|
|
51
|
-
entries: []
|
|
52
|
-
})) : Promise.resolve({
|
|
53
|
-
ok: !0,
|
|
54
|
-
entries: []
|
|
55
|
-
})]);
|
|
56
|
-
v = n.ok, n.ok && (y = new Map(n.entries.map((e) => [e.path, e.updatedAt])));
|
|
57
|
-
let r = /* @__PURE__ */ new Map(), i = (e) => {
|
|
58
|
-
let t = Date.parse(e.updatedAt ?? "");
|
|
59
|
-
return Number.isFinite(t) ? t : 0;
|
|
60
|
-
}, o = (e) => {
|
|
61
|
-
let t = r.get(e.path);
|
|
62
|
-
(!t || i(e) >= i(t)) && r.set(e.path, e);
|
|
63
|
-
};
|
|
64
|
-
for (let e of t) o(e);
|
|
65
|
-
for (let e of n.entries) o(e);
|
|
66
|
-
if (n.ok && e) {
|
|
67
|
-
pe(t, n.entries).catch(() => {});
|
|
68
|
-
let e = Object.keys(S()).length || Object.keys(T()).length;
|
|
69
|
-
e && !A ? A = P(!1).catch(() => {}).finally(() => {
|
|
70
|
-
A = null;
|
|
71
|
-
}) : e || R({
|
|
72
|
-
local: t,
|
|
73
|
-
remote: n.entries
|
|
74
|
-
}).catch(() => {});
|
|
75
|
-
}
|
|
76
|
-
return [...r.values()];
|
|
77
|
-
}, ae = async (e) => {
|
|
78
|
-
if (await p()) try {
|
|
79
|
-
return await c(e);
|
|
80
|
-
} catch (e) {
|
|
81
|
-
if (e?.name !== "NotFoundError") throw e;
|
|
82
|
-
}
|
|
83
|
-
let t = await n(e);
|
|
84
|
-
return await p() && u(e, t).catch(() => {}), t;
|
|
85
|
-
}, oe = async (e, t, n) => {
|
|
86
|
-
let i = t instanceof Blob ? t : new Blob([t], n?.contentType ? { type: n.contentType } : void 0);
|
|
87
|
-
if (await p()) {
|
|
88
|
-
if (await u(e, i, n), !await m()) return;
|
|
89
|
-
if (!v) {
|
|
90
|
-
C(e);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
r(e, i, n).then(() => w(e)).catch((t) => {
|
|
94
|
-
C(e), console.warn("fs: cloud replicate failed, queued for adopt()", t);
|
|
95
|
-
});
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (await m()) return r(e, i, n);
|
|
99
|
-
throw Error("fs: no storage backend available");
|
|
100
|
-
}, se = async (e) => {
|
|
101
|
-
let t = [];
|
|
102
|
-
await p() && t.push(s(e).catch(() => {}));
|
|
103
|
-
let n = await m();
|
|
104
|
-
if (n && t.push(i(e).then(() => E(e)).catch((t) => {
|
|
105
|
-
ne(e), console.warn("fs: cloud delete failed, queued for retry", t);
|
|
106
|
-
})), !t.length) throw Error("fs: no storage backend available");
|
|
107
|
-
n && w(e), await Promise.all(t);
|
|
108
|
-
}, ce = async (e) => {
|
|
109
|
-
let t = await n(e);
|
|
110
|
-
return await p() && await u(e, t), t;
|
|
111
|
-
}, M = null, N = (e) => (M = e, () => {
|
|
112
|
-
M === e && (M = null);
|
|
113
|
-
}), le = async (e) => (await j()).cloud.fs.promptConflict({
|
|
114
|
-
path: e.path,
|
|
115
|
-
local: e.local,
|
|
116
|
-
cloud: e.cloud
|
|
117
|
-
}).catch(() => null), ue = async (e) => {
|
|
118
|
-
if (M) try {
|
|
119
|
-
return await M(e);
|
|
120
|
-
} catch {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
return le(e);
|
|
124
|
-
}, P = async (e) => {
|
|
125
|
-
let t = {
|
|
126
|
-
uploaded: [],
|
|
127
|
-
kept: [],
|
|
128
|
-
resolved: [],
|
|
129
|
-
unresolved: [],
|
|
130
|
-
deleted: [],
|
|
131
|
-
failed: []
|
|
132
|
-
};
|
|
133
|
-
if (!await m()) throw Error("fs: this needs a signed-in account");
|
|
134
|
-
if (!await p()) return t;
|
|
135
|
-
let [o, s] = await Promise.all([l(), a()]), d = new Map(s.map((e) => [e.path, e])), f = S();
|
|
136
|
-
for (let [e, n] of Object.entries(T())) {
|
|
137
|
-
let r = d.get(e);
|
|
138
|
-
if (!r) {
|
|
139
|
-
E(e);
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
if (o.some((t) => t.path === e)) {
|
|
143
|
-
E(e);
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
if (r.updatedAt !== n) {
|
|
147
|
-
E(e);
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
try {
|
|
151
|
-
await i(e), E(e), t.deleted.push(e);
|
|
152
|
-
} catch (n) {
|
|
153
|
-
t.failed.push({
|
|
154
|
-
path: e,
|
|
155
|
-
error: n instanceof Error ? n.message : String(n)
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
for (let i of o) {
|
|
160
|
-
let a = d.get(i.path), o = i.path in f;
|
|
161
|
-
if (!o && (a || !e)) {
|
|
162
|
-
a && t.kept.push(i.path);
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
if (o && a && a.updatedAt !== f[i.path]) {
|
|
166
|
-
let e = await ue({
|
|
167
|
-
path: i.path,
|
|
168
|
-
local: {
|
|
169
|
-
size: i.size,
|
|
170
|
-
updatedAt: i.updatedAt
|
|
171
|
-
},
|
|
172
|
-
cloud: {
|
|
173
|
-
size: a.size,
|
|
174
|
-
updatedAt: a.updatedAt
|
|
175
|
-
},
|
|
176
|
-
readLocal: () => c(i.path),
|
|
177
|
-
readCloud: () => n(i.path)
|
|
178
|
-
});
|
|
179
|
-
if (!e) {
|
|
180
|
-
t.unresolved.push(i.path);
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
try {
|
|
184
|
-
if (e === "cloud") await u(i.path, await n(i.path));
|
|
185
|
-
else {
|
|
186
|
-
let t = e === "local" ? await c(i.path) : e.merged;
|
|
187
|
-
await r(i.path, t, i.contentType ? { contentType: i.contentType } : void 0), e !== "local" && await u(i.path, t);
|
|
188
|
-
}
|
|
189
|
-
w(i.path), t.resolved.push({
|
|
190
|
-
path: i.path,
|
|
191
|
-
choice: e === "local" || e === "cloud" ? e : "merged"
|
|
192
|
-
});
|
|
193
|
-
} catch (e) {
|
|
194
|
-
if (e?.code === "FKN_E2E_LOCKED") throw e;
|
|
195
|
-
t.failed.push({
|
|
196
|
-
path: i.path,
|
|
197
|
-
error: e instanceof Error ? e.message : String(e)
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
try {
|
|
203
|
-
let e = await c(i.path);
|
|
204
|
-
await r(i.path, e, i.contentType ? { contentType: i.contentType } : void 0), w(i.path), t.uploaded.push(i.path);
|
|
205
|
-
} catch (e) {
|
|
206
|
-
if (C(i.path), e?.code === "FKN_E2E_LOCKED") throw e;
|
|
207
|
-
t.failed.push({
|
|
208
|
-
path: i.path,
|
|
209
|
-
error: e instanceof Error ? e.message : String(e)
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return t;
|
|
214
|
-
}, F = () => P(!0), I = async () => {
|
|
215
|
-
if (!await m() || !await p()) return {
|
|
216
|
-
paths: [],
|
|
217
|
-
bytes: 0
|
|
218
|
-
};
|
|
219
|
-
let [e, t] = await Promise.all([l(), a()]), n = new Set(t.map((e) => e.path)), r = e.filter((e) => !n.has(e.path));
|
|
220
|
-
return {
|
|
221
|
-
paths: r.map((e) => e.path),
|
|
222
|
-
bytes: r.reduce((e, t) => e + t.size, 0)
|
|
223
|
-
};
|
|
224
|
-
}, de = () => new Set(Object.keys(b(_))), fe = (e) => {
|
|
225
|
-
let t = b(_);
|
|
226
|
-
for (let n of e) t[n] = null;
|
|
227
|
-
x(_, t);
|
|
228
|
-
}, L = null, R = (e) => L || (L = (async () => {
|
|
229
|
-
if (!await m()) return;
|
|
230
|
-
let t = e ?? (await p() ? {
|
|
231
|
-
local: await l(),
|
|
232
|
-
remote: await a()
|
|
233
|
-
} : null);
|
|
234
|
-
if (!t) return;
|
|
235
|
-
let n = new Set(t.remote.map((e) => e.path)), r = de(), i = t.local.filter((e) => !n.has(e.path) && !r.has(e.path));
|
|
236
|
-
if (!i.length) return;
|
|
237
|
-
let o = await j(), s = i.reduce((e, t) => e + t.size, 0);
|
|
238
|
-
if (!await o.cloud.fs.promptAdopt({
|
|
239
|
-
files: i.length,
|
|
240
|
-
bytes: s
|
|
241
|
-
}).catch(() => !1)) {
|
|
242
|
-
fe(i.map((e) => e.path));
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
await F();
|
|
246
|
-
})().catch(() => {}).finally(() => {
|
|
247
|
-
L = null;
|
|
248
|
-
}), L), pe = async (e, t) => {
|
|
249
|
-
let n = new Set(t.map((e) => e.path)), r = e.filter((e) => !n.has(e.path)), i = await j(), a = async () => {
|
|
250
|
-
await F().catch(() => {});
|
|
251
|
-
let e = await I().catch(() => ({
|
|
252
|
-
paths: [],
|
|
253
|
-
bytes: 0
|
|
254
|
-
}));
|
|
255
|
-
await i.cloud.fs.setAdoptSource({
|
|
256
|
-
files: e.paths.length,
|
|
257
|
-
bytes: e.bytes
|
|
258
|
-
}, a).catch(() => {});
|
|
259
|
-
};
|
|
260
|
-
await i.cloud.fs.setAdoptSource({
|
|
261
|
-
files: r.length,
|
|
262
|
-
bytes: r.reduce((e, t) => e + t.size, 0)
|
|
263
|
-
}, a);
|
|
264
|
-
}, z = !1, me = () => {
|
|
265
|
-
z || typeof window > "u" || (z = !0, import("./account.js").then((e) => e.onChange(() => {
|
|
266
|
-
R().catch(() => {});
|
|
267
|
-
})).catch(() => {}));
|
|
268
|
-
}, he = /* @__PURE__ */ e({
|
|
269
|
-
adopt: () => J,
|
|
270
|
-
adoptable: () => Y,
|
|
271
|
-
appendFile: () => Ee,
|
|
272
|
-
appendFileSync: () => W,
|
|
273
|
-
available: () => V,
|
|
274
|
-
default: () => Le,
|
|
275
|
-
exists: () => Ne,
|
|
276
|
-
existsSync: () => G,
|
|
277
|
-
flush: () => Fe,
|
|
278
|
-
lstatSync: () => _e,
|
|
279
|
-
mkdir: () => ke,
|
|
280
|
-
mkdirSync: () => ye,
|
|
281
|
-
mount: () => K,
|
|
282
|
-
onConflict: () => $,
|
|
283
|
-
pending: () => X,
|
|
284
|
-
pendingDeletes: () => Z,
|
|
285
|
-
promises: () => Pe,
|
|
286
|
-
pull: () => q,
|
|
287
|
-
readFile: () => we,
|
|
288
|
-
readFileSync: () => H,
|
|
289
|
-
readdir: () => Oe,
|
|
290
|
-
readdirSync: () => ve,
|
|
291
|
-
remount: () => Ie,
|
|
292
|
-
rename: () => Me,
|
|
293
|
-
renameSync: () => Ce,
|
|
294
|
-
replicating: () => Q,
|
|
295
|
-
rm: () => Ae,
|
|
296
|
-
rmSync: () => be,
|
|
297
|
-
rmdirSync: () => xe,
|
|
298
|
-
stat: () => De,
|
|
299
|
-
statSync: () => ge,
|
|
300
|
-
unlink: () => je,
|
|
301
|
-
unlinkSync: () => Se,
|
|
302
|
-
writeFile: () => Te,
|
|
303
|
-
writeFileSync: () => U
|
|
304
|
-
}), B = t(f, { memfs: !0 }), { available: V, readFileSync: H, writeFileSync: U, appendFileSync: W, existsSync: G, statSync: ge, lstatSync: _e, readdirSync: ve, mkdirSync: ye, rmSync: be, rmdirSync: xe, unlinkSync: Se, renameSync: Ce, readFile: we, writeFile: Te, appendFile: Ee, stat: De, readdir: Oe, mkdir: ke, rm: Ae, unlink: je, rename: Me, exists: Ne, promises: Pe, mount: K, flush: Fe, remount: Ie } = B, q = ce, J = F, Y = I, X = D, Z = O, Q = k, $ = N, Le = {
|
|
305
|
-
...B,
|
|
306
|
-
pull: q,
|
|
307
|
-
adopt: J,
|
|
308
|
-
adoptable: Y,
|
|
309
|
-
pending: X,
|
|
310
|
-
pendingDeletes: Z,
|
|
311
|
-
replicating: Q,
|
|
312
|
-
onConflict: $
|
|
313
|
-
};
|
|
314
|
-
//#endregion
|
|
315
|
-
export { xe as A, ve as C, Q as D, Ce as E, Te as F, U as I, ge as M, je as N, Ae as O, Se as P, Oe as S, Me as T, Z as _, V as a, we as b, Fe as c, _e as d, ke as f, X as g, $ as h, W as i, De as j, be as k, Le as l, K as m, Y as n, Ne as o, ye as p, Ee as r, G as s, J as t, he as u, Pe as v, Ie as w, H as x, q as y };
|
package/fs-C5L6CqmF.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./node-fs-BMR2yCEt.cjs"),n=require("./storage-D2a8SsY5.cjs"),r=require("./opfs-CXMESVLc.cjs");var i=e.t({adopt:()=>E,adoptable:()=>D,available:()=>c,list:()=>ie,onConflict:()=>le,pending:()=>te,pendingDeletes:()=>ne,pull:()=>ce,readFile:()=>ae,remove:()=>se,replicating:()=>x,writeFile:()=>oe}),a,o=async()=>await(a??=r.t().catch(()=>!1))?!0:(a=void 0,!1),s=()=>n.r().catch(()=>!1),c=async()=>await o()||await s(),l=`fkn:fs:pending`,u=`fkn:fs:pending-delete`,d=`fkn:fs:adopt-declined`,f=!0,p=new Map,m=e=>{try{let t=localStorage.getItem(e);if(!t)return{};let n=JSON.parse(t);return Array.isArray(n)?Object.fromEntries(n.filter(e=>typeof e==`string`).map(e=>[e,null])):n&&typeof n==`object`?n:{}}catch{return{}}},h=(e,t)=>{try{Object.keys(t).length?localStorage.setItem(e,JSON.stringify(t)):localStorage.removeItem(e)}catch{}},g=()=>m(l),_=e=>{let t=g();e in t||(t[e]=p.get(e)??null,h(l,t))},v=e=>{let t=g();e in t&&(delete t[e],h(l,t))},y=()=>m(u),ee=e=>{let t=y();e in t||(t[e]=p.get(e)??null,h(u,t))},b=e=>{let t=y();e in t&&(delete t[e],h(u,t))},te=()=>Object.keys(g()),ne=()=>Object.keys(y()),x=()=>f,S=null,re=null,C=()=>re??=Promise.resolve().then(()=>require("./api-DLGGoSnx.cjs")).then(e=>e.n).then(e=>e.apiPromise),ie=async()=>{he();let e=await s(),[t,i]=await Promise.all([o().then(e=>e?r.n():[]).catch(()=>[]),e?n.o().then(e=>({ok:!0,entries:e})).catch(()=>({ok:!1,entries:[]})):Promise.resolve({ok:!0,entries:[]})]);f=i.ok,i.ok&&(p=new Map(i.entries.map(e=>[e.path,e.updatedAt])));let a=new Map,c=e=>{let t=Date.parse(e.updatedAt??``);return Number.isFinite(t)?t:0},l=e=>{let t=a.get(e.path);(!t||c(e)>=c(t))&&a.set(e.path,e)};for(let e of t)l(e);for(let e of i.entries)l(e);if(i.ok&&e){me(t,i.entries).catch(()=>{});let e=Object.keys(g()).length||Object.keys(y()).length;e&&!S?S=T(!1).catch(()=>{}).finally(()=>{S=null}):e||k({local:t,remote:i.entries}).catch(()=>{})}return[...a.values()]},ae=async e=>{if(await o())try{return await r.i(e)}catch(e){if(e?.name!==`NotFoundError`)throw e}let t=await n.c(e);return await o()&&r.o(e,t).catch(()=>{}),t},oe=async(e,t,i)=>{let a=t instanceof Blob?t:new Blob([t],i?.contentType?{type:i.contentType}:void 0);if(await o()){if(await r.o(e,a,i),!await s())return;if(!f){_(e);return}n.f(e,a,i).then(()=>v(e)).catch(t=>{_(e),console.warn(`fs: cloud replicate failed, queued for adopt()`,t)});return}if(await s())return n.f(e,a,i);throw Error(`fs: no storage backend available`)},se=async e=>{let t=[];await o()&&t.push(r.a(e).catch(()=>{}));let i=await s();if(i&&t.push(n.l(e).then(()=>b(e)).catch(t=>{ee(e),console.warn(`fs: cloud delete failed, queued for retry`,t)})),!t.length)throw Error(`fs: no storage backend available`);i&&v(e),await Promise.all(t)},ce=async e=>{let t=await n.c(e);return await o()&&await r.o(e,t),t},w=null,le=e=>(w=e,()=>{w===e&&(w=null)}),ue=async e=>(await C()).cloud.fs.promptConflict({path:e.path,local:e.local,cloud:e.cloud}).catch(()=>null),de=async e=>{if(w)try{return await w(e)}catch{return null}return ue(e)},T=async e=>{let t={uploaded:[],kept:[],resolved:[],unresolved:[],deleted:[],failed:[]};if(!await s())throw Error(`fs: this needs a signed-in account`);if(!await o())return t;let[i,a]=await Promise.all([r.n(),n.o()]),c=new Map(a.map(e=>[e.path,e])),l=g();for(let[e,r]of Object.entries(y())){let a=c.get(e);if(!a){b(e);continue}if(i.some(t=>t.path===e)){b(e);continue}if(a.updatedAt!==r){b(e);continue}try{await n.l(e),b(e),t.deleted.push(e)}catch(n){t.failed.push({path:e,error:n instanceof Error?n.message:String(n)})}}for(let a of i){let i=c.get(a.path),o=a.path in l;if(!o&&(i||!e)){i&&t.kept.push(a.path);continue}if(o&&i&&i.updatedAt!==l[a.path]){let e=await de({path:a.path,local:{size:a.size,updatedAt:a.updatedAt},cloud:{size:i.size,updatedAt:i.updatedAt},readLocal:()=>r.i(a.path),readCloud:()=>n.c(a.path)});if(!e){t.unresolved.push(a.path);continue}try{if(e===`cloud`)await r.o(a.path,await n.c(a.path));else{let t=e===`local`?await r.i(a.path):e.merged;await n.f(a.path,t,a.contentType?{contentType:a.contentType}:void 0),e!==`local`&&await r.o(a.path,t)}v(a.path),t.resolved.push({path:a.path,choice:e===`local`||e===`cloud`?e:`merged`})}catch(e){if(e?.code===`FKN_E2E_LOCKED`)throw e;t.failed.push({path:a.path,error:e instanceof Error?e.message:String(e)})}continue}try{let e=await r.i(a.path);await n.f(a.path,e,a.contentType?{contentType:a.contentType}:void 0),v(a.path),t.uploaded.push(a.path)}catch(e){if(_(a.path),e?.code===`FKN_E2E_LOCKED`)throw e;t.failed.push({path:a.path,error:e instanceof Error?e.message:String(e)})}}return t},E=()=>T(!0),D=async()=>{if(!await s()||!await o())return{paths:[],bytes:0};let[e,t]=await Promise.all([r.n(),n.o()]),i=new Set(t.map(e=>e.path)),a=e.filter(e=>!i.has(e.path));return{paths:a.map(e=>e.path),bytes:a.reduce((e,t)=>e+t.size,0)}},fe=()=>new Set(Object.keys(m(d))),pe=e=>{let t=m(d);for(let n of e)t[n]=null;h(d,t)},O=null,k=e=>O||(O=(async()=>{if(!await s())return;let t=e??(await o()?{local:await r.n(),remote:await n.o()}:null);if(!t)return;let i=new Set(t.remote.map(e=>e.path)),a=fe(),c=t.local.filter(e=>!i.has(e.path)&&!a.has(e.path));if(!c.length)return;let l=await C(),u=c.reduce((e,t)=>e+t.size,0);if(!await l.cloud.fs.promptAdopt({files:c.length,bytes:u}).catch(()=>!1)){pe(c.map(e=>e.path));return}await E()})().catch(()=>{}).finally(()=>{O=null}),O),me=async(e,t)=>{let n=new Set(t.map(e=>e.path)),r=e.filter(e=>!n.has(e.path)),i=await C(),a=async()=>{await E().catch(()=>{});let e=await D().catch(()=>({paths:[],bytes:0}));await i.cloud.fs.setAdoptSource({files:e.paths.length,bytes:e.bytes},a).catch(()=>{})};await i.cloud.fs.setAdoptSource({files:r.length,bytes:r.reduce((e,t)=>e+t.size,0)},a)},A=!1,he=()=>{A||typeof window>`u`||(A=!0,Promise.resolve().then(()=>require("./account.cjs")).then(e=>e.onChange(()=>{k().catch(()=>{})})).catch(()=>{}))},ge=e.t({adopt:()=>q,adoptable:()=>J,appendFile:()=>ye,appendFileSync:()=>F,available:()=>M,default:()=>$,exists:()=>Ee,existsSync:()=>I,flush:()=>G,lstatSync:()=>R,mkdir:()=>Se,mkdirSync:()=>B,mount:()=>Oe,onConflict:()=>Q,pending:()=>Y,pendingDeletes:()=>X,promises:()=>De,pull:()=>K,readFile:()=>W,readFileSync:()=>N,readdir:()=>xe,readdirSync:()=>z,remount:()=>ke,rename:()=>Te,renameSync:()=>U,replicating:()=>Z,rm:()=>Ce,rmSync:()=>V,rmdirSync:()=>_e,stat:()=>be,statSync:()=>L,unlink:()=>we,unlinkSync:()=>H,writeFile:()=>ve,writeFileSync:()=>P}),j=t.t(i,{memfs:!0}),{available:M,readFileSync:N,writeFileSync:P,appendFileSync:F,existsSync:I,statSync:L,lstatSync:R,readdirSync:z,mkdirSync:B,rmSync:V,rmdirSync:_e,unlinkSync:H,renameSync:U,readFile:W,writeFile:ve,appendFile:ye,stat:be,readdir:xe,mkdir:Se,rm:Ce,unlink:we,rename:Te,exists:Ee,promises:De,mount:Oe,flush:G,remount:ke}=j,K=ce,q=E,J=D,Y=te,X=ne,Z=x,Q=le,$={...j,pull:K,adopt:q,adoptable:J,pending:Y,pendingDeletes:X,replicating:Z,onConflict:Q};Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return K}});
|
package/storage-CXIXrIxB.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
//#region src/api/storage.d.ts
|
|
2
|
-
type StorageEntry = {
|
|
3
|
-
path: string;
|
|
4
|
-
size: number;
|
|
5
|
-
contentType: string | null;
|
|
6
|
-
updatedAt: string;
|
|
7
|
-
encryption: string | null;
|
|
8
|
-
};
|
|
9
|
-
type StorageQuota = {
|
|
10
|
-
usedBytes: number;
|
|
11
|
-
limitBytes: number;
|
|
12
|
-
remaining: number;
|
|
13
|
-
objects: number;
|
|
14
|
-
maxObjects: number;
|
|
15
|
-
};
|
|
16
|
-
type WriteData = ArrayBuffer | Uint8Array | string;
|
|
17
|
-
type StorageReadResult = {
|
|
18
|
-
bytes: Uint8Array;
|
|
19
|
-
encryption: string | null;
|
|
20
|
-
appOrigin: string;
|
|
21
|
-
};
|
|
22
|
-
type KeyState = {
|
|
23
|
-
keyEpoch: number | null;
|
|
24
|
-
keyFingerprint: string | null;
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* "There is no object at this path", as a thing a caller can TEST rather than parse.
|
|
28
|
-
*
|
|
29
|
-
* osra strips an Error's custom properties across the realm boundary but keeps `message` and
|
|
30
|
-
* `code`, so a code set here survives all the way to an app. The message does not survive being
|
|
31
|
-
* reworded, which is the problem this exists to end: absence arrives in two completely different
|
|
32
|
-
* sentences depending on which half of the read failed, and every consumer was left regex-matching
|
|
33
|
-
* both. Ripple got one of them and missed the other, and a library quietly went un-backed-up for a
|
|
34
|
-
* day because a missing backup read as a transient error.
|
|
35
|
-
*/
|
|
36
|
-
declare const STORAGE_NOT_FOUND = "FKN_STORAGE_NOT_FOUND";
|
|
37
|
-
//#endregion
|
|
38
|
-
export { StorageReadResult as a, StorageQuota as i, STORAGE_NOT_FOUND as n, WriteData as o, StorageEntry as r, KeyState as t };
|
package/storage-D2a8SsY5.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-DLGGoSnx.cjs");var n=`FKN_STORAGE_NOT_FOUND`,r=e.t({StorageLockedError:()=>i,StorageNotFoundError:()=>a,available:()=>c,encryption:()=>m,isNotFound:()=>o,list:()=>l,quota:()=>u,readFile:()=>d,remove:()=>p,unlock:()=>h,writeFile:()=>f}),i=class extends Error{code=`FKN_E2E_LOCKED`;constructor(){super(`storage locked: this app stores encrypted data, unlock it from the FKN card or unlock()`)}},a=class extends Error{code=n;constructor(e=`storage: no object at that path`){super(e)}},o=e=>e?.code===n,s=e=>{throw e instanceof Error&&e.message.startsWith(`fkn:e2e-locked`)?new i:o(e)||e instanceof Error&&(/^not found$/i.test(e.message)||/\(404\)$/.test(e.message))?new a(e.message):e},c=()=>t.t.then(e=>e.cloud.fs.available()).catch(()=>!1),l=()=>t.t.then(e=>e.cloud.fs.list()),u=()=>t.t.then(e=>e.cloud.fs.quota()),d=async e=>{let n=await(await t.t).cloud.fs.readFile(e).catch(s);return new Blob([n])},f=async(e,n,r)=>{let i=await t.t,a=n instanceof Blob?new Uint8Array(await n.arrayBuffer()):n;await i.cloud.fs.writeFile(e,a,r?.contentType??null).catch(s)},p=e=>t.t.then(t=>t.cloud.fs.remove(e)).then(()=>void 0),m=()=>t.t.then(e=>e.cloud.fs.encryption()),h=()=>t.t.then(e=>e.cloud.fs.unlock());Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return r}});
|
package/storage-XKGhInxm.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { t } from "./api-X8SBbrBZ.js";
|
|
3
|
-
//#endregion
|
|
4
|
-
//#region src/api/storage.ts
|
|
5
|
-
var n = "FKN_STORAGE_NOT_FOUND", r = /* @__PURE__ */ e({
|
|
6
|
-
StorageLockedError: () => i,
|
|
7
|
-
StorageNotFoundError: () => a,
|
|
8
|
-
available: () => c,
|
|
9
|
-
encryption: () => m,
|
|
10
|
-
isNotFound: () => o,
|
|
11
|
-
list: () => l,
|
|
12
|
-
quota: () => u,
|
|
13
|
-
readFile: () => d,
|
|
14
|
-
remove: () => p,
|
|
15
|
-
unlock: () => h,
|
|
16
|
-
writeFile: () => f
|
|
17
|
-
}), i = class extends Error {
|
|
18
|
-
code = "FKN_E2E_LOCKED";
|
|
19
|
-
constructor() {
|
|
20
|
-
super("storage locked: this app stores encrypted data, unlock it from the FKN card or unlock()");
|
|
21
|
-
}
|
|
22
|
-
}, a = class extends Error {
|
|
23
|
-
code = n;
|
|
24
|
-
constructor(e = "storage: no object at that path") {
|
|
25
|
-
super(e);
|
|
26
|
-
}
|
|
27
|
-
}, o = (e) => e?.code === n, s = (e) => {
|
|
28
|
-
throw e instanceof Error && e.message.startsWith("fkn:e2e-locked") ? new i() : o(e) || e instanceof Error && (/^not found$/i.test(e.message) || /\(404\)$/.test(e.message)) ? new a(e.message) : e;
|
|
29
|
-
}, c = () => t.then((e) => e.cloud.fs.available()).catch(() => !1), l = () => t.then((e) => e.cloud.fs.list()), u = () => t.then((e) => e.cloud.fs.quota()), d = async (e) => {
|
|
30
|
-
let n = await (await t).cloud.fs.readFile(e).catch(s);
|
|
31
|
-
return new Blob([n]);
|
|
32
|
-
}, f = async (e, n, r) => {
|
|
33
|
-
let i = await t, a = n instanceof Blob ? new Uint8Array(await n.arrayBuffer()) : n;
|
|
34
|
-
await i.cloud.fs.writeFile(e, a, r?.contentType ?? null).catch(s);
|
|
35
|
-
}, p = (e) => t.then((t) => t.cloud.fs.remove(e)).then(() => void 0), m = () => t.then((e) => e.cloud.fs.encryption()), h = () => t.then((e) => e.cloud.fs.unlock());
|
|
36
|
-
//#endregion
|
|
37
|
-
export { o as a, d as c, h as d, f, m as i, p as l, a as n, l as o, n as p, c as r, u as s, i as t, r as u };
|