@fkn/lib 0.9.20 → 0.9.21

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.
Files changed (75) hide show
  1. package/account.cjs +1 -1
  2. package/account.js +24 -17
  3. package/{api-CyWF0RUj.d.ts → api-B0qRPCcX.d.ts} +8 -0
  4. package/api-BqRjtWm_.js +311 -0
  5. package/api-CKO3Hw-O.cjs +3 -0
  6. package/busy-Bp1E3JPT.js +24 -0
  7. package/busy-Dv8wzE5M.cjs +1 -0
  8. package/cloud/dgram.cjs +1 -1
  9. package/cloud/dgram.js +1 -1
  10. package/cloud/fetch.cjs +1 -1
  11. package/cloud/fetch.d.ts +1 -1
  12. package/cloud/fetch.js +1 -1
  13. package/cloud/fs.cjs +1 -1
  14. package/cloud/fs.js +2 -2
  15. package/cloud/net.cjs +1 -1
  16. package/cloud/net.d.ts +1 -1
  17. package/cloud/net.js +1 -1
  18. package/cloud-BCQTex58.cjs +1 -0
  19. package/{cloud-CQVtRvcI.d.ts → cloud-BTpJn4jy.d.ts} +2 -2
  20. package/{cloud-C_1Dt_tR.js → cloud-BlR1He17.js} +77 -74
  21. package/cloud.cjs +1 -1
  22. package/cloud.d.ts +3 -3
  23. package/cloud.js +4 -4
  24. package/dgram-9hn582qO.cjs +1 -0
  25. package/{dgram-DlGl_ho1.js → dgram-TB03kqMr.js} +55 -49
  26. package/dgram.cjs +1 -1
  27. package/dgram.d.ts +2 -1
  28. package/dgram.js +1 -1
  29. package/dns.cjs +1 -1
  30. package/dns.js +1 -1
  31. package/{extension-jRuNpBs3.js → extension-BI2NxGtC.js} +2 -2
  32. package/{extension-B3nD2u7c.cjs → extension-rFQQpEqJ.cjs} +1 -1
  33. package/extension.cjs +1 -1
  34. package/extension.js +1 -1
  35. package/fs/promises.cjs +1 -1
  36. package/fs/promises.js +1 -1
  37. package/fs-BUcpl9k4.cjs +1 -0
  38. package/fs-bpb3Ysdd.js +347 -0
  39. package/fs.cjs +1 -1
  40. package/fs.js +1 -1
  41. package/http.cjs +1 -1
  42. package/http.d.ts +1 -1
  43. package/http.js +1 -1
  44. package/index.cjs +1 -1
  45. package/index.d.ts +9 -15
  46. package/index.js +86 -33
  47. package/net-C2fIMWFr.cjs +1 -0
  48. package/{net-ByL9yG7X.d.ts → net-CnYxw_sB.d.ts} +3 -1
  49. package/{net-BbmQeMpt.js → net-Ct8ywVAk.js} +52 -41
  50. package/net.cjs +1 -1
  51. package/net.d.ts +1 -1
  52. package/net.js +1 -1
  53. package/node-fs-BZCQUmeE.js +404 -0
  54. package/node-fs-DZPGCYWg.cjs +1 -0
  55. package/opfs.cjs +1 -1
  56. package/opfs.js +1 -1
  57. package/package.json +1 -1
  58. package/packages.cjs +1 -1
  59. package/packages.js +165 -149
  60. package/proxy--aljNHvG.js +69 -0
  61. package/{proxy-RU8sbq68.d.ts → proxy-CuXtzxSQ.d.ts} +1 -1
  62. package/proxy-oHfEx1cn.cjs +1 -0
  63. package/{storage-C8hBot2f.js → storage-C1nW5Tvh.js} +1 -1
  64. package/{storage-BW-jDLUL.cjs → storage-rXHvV2FU.cjs} +1 -1
  65. package/api-DQ-V4Lls.js +0 -220
  66. package/api-kHMHDGar.cjs +0 -3
  67. package/cloud-C8jfO0iJ.cjs +0 -1
  68. package/dgram-D2Or5f2e.cjs +0 -1
  69. package/fs-BW5mVMmu.js +0 -340
  70. package/fs-DJm0bhjg.cjs +0 -1
  71. package/net-COzDDBnS.cjs +0 -1
  72. package/node-fs-BMR2yCEt.cjs +0 -1
  73. package/node-fs-DKfokOlh.js +0 -401
  74. package/proxy-B0gNjT8-.cjs +0 -1
  75. package/proxy-BpqvCJmA.js +0 -43
@@ -0,0 +1,404 @@
1
+ import { r as e } from "./busy-Bp1E3JPT.js";
2
+ import { Buffer as t } from "buffer";
3
+ //#region src/lib/fs/content-type.ts
4
+ var n = {
5
+ json: "application/json",
6
+ txt: "text/plain",
7
+ html: "text/html",
8
+ htm: "text/html",
9
+ css: "text/css",
10
+ js: "text/javascript",
11
+ mjs: "text/javascript",
12
+ xml: "application/xml",
13
+ csv: "text/csv",
14
+ md: "text/markdown",
15
+ svg: "image/svg+xml",
16
+ png: "image/png",
17
+ jpg: "image/jpeg",
18
+ jpeg: "image/jpeg",
19
+ gif: "image/gif",
20
+ webp: "image/webp",
21
+ pdf: "application/pdf",
22
+ wasm: "application/wasm"
23
+ }, r = (e, t) => {
24
+ if (t) return t;
25
+ let r = e.split("/").pop() ?? "", i = r.lastIndexOf(".");
26
+ if (!(i <= 0)) return n[r.slice(i + 1).toLowerCase()];
27
+ }, i = (e, t) => ({
28
+ size: e,
29
+ mtimeMs: t,
30
+ mtime: new Date(t),
31
+ atimeMs: t,
32
+ ctimeMs: t,
33
+ mode: 420,
34
+ isFile: () => !0,
35
+ isDirectory: () => !1,
36
+ isSymbolicLink: () => !1
37
+ }), a = (e = 0) => ({
38
+ size: 0,
39
+ mtimeMs: e,
40
+ mtime: new Date(e),
41
+ atimeMs: e,
42
+ ctimeMs: e,
43
+ mode: 493,
44
+ isFile: () => !1,
45
+ isDirectory: () => !0,
46
+ isSymbolicLink: () => !1
47
+ }), o = (e, t, n) => {
48
+ let r = /* @__PURE__ */ Error(`${e}: ${{
49
+ ENOENT: "no such file or directory",
50
+ EEXIST: "file already exists",
51
+ ENOTDIR: "not a directory",
52
+ EISDIR: "illegal operation on a directory",
53
+ ENOTEMPTY: "directory not empty",
54
+ ERR_FS_EISDIR: "is a directory"
55
+ }[e] ?? e}, ${n} '${t}'`);
56
+ return r.code = e, r.path = t, r.syscall = n, r;
57
+ }, s = (e) => {
58
+ let t = [];
59
+ for (let n of e.split("/")) if (!(!n || n === ".")) {
60
+ if (n === "..") {
61
+ t.pop();
62
+ continue;
63
+ }
64
+ t.push(n);
65
+ }
66
+ return t.join("/");
67
+ }, c = (e) => e.split("/").slice(0, -1).join("/"), l = (e) => typeof e == "string" ? e : e instanceof URL ? decodeURIComponent(e.pathname) : e.toString(), u = (e) => typeof e == "string" ? e : e?.encoding ?? void 0, d = (e) => typeof e == "object" ? e?.contentType : void 0, f = (e) => typeof e == "object" && !!e?.recursive, p = (e, n) => {
68
+ let r = u(n);
69
+ return r ? t.from(e).toString(r) : t.from(e);
70
+ }, m = (e, n) => {
71
+ if (typeof e == "string") return new Uint8Array(t.from(e, u(n) ?? "utf8"));
72
+ if (e instanceof Uint8Array) return e.slice();
73
+ if (e instanceof ArrayBuffer) return new Uint8Array(e).slice();
74
+ if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength).slice();
75
+ throw TypeError("The \"data\" argument must be of type string, Buffer, TypedArray, or DataView");
76
+ }, h = (t) => {
77
+ let n = /* @__PURE__ */ new Map([["", {
78
+ kind: "dir",
79
+ mtimeMs: 0
80
+ }]]), l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set();
81
+ e("unsaved files", () => l.size > 0 || u.size > 0);
82
+ let d = /* @__PURE__ */ new Set(), f = () => Date.now(), p = (e) => {
83
+ if (!e) return;
84
+ let t = e.split("/"), r = "";
85
+ for (let e of t) {
86
+ r = r ? `${r}/${e}` : e;
87
+ let t = n.get(r);
88
+ if (!t) n.set(r, {
89
+ kind: "dir",
90
+ mtimeMs: f()
91
+ });
92
+ else if (t.kind === "file") throw o("ENOTDIR", r, "mkdir");
93
+ }
94
+ }, m, h = 0, g = async () => {
95
+ let e = await t.list().catch(() => []), r = /* @__PURE__ */ new Set(), i = !1;
96
+ for (let a of e) {
97
+ let e = s(a.path);
98
+ if (r.add(e), !u.has(e) && !(l.has(e) && !d.has(e))) try {
99
+ let r = await (await t.readFile(a.path)).arrayBuffer();
100
+ if (u.has(e) || l.has(e) && !d.has(e)) continue;
101
+ p(c(e));
102
+ let i = Date.parse(a.updatedAt ?? "");
103
+ n.set(e, {
104
+ kind: "file",
105
+ data: new Uint8Array(r),
106
+ mtimeMs: Number.isFinite(i) ? i : f(),
107
+ contentType: a.contentType ?? void 0
108
+ }), d.delete(e), l.delete(e);
109
+ } catch {
110
+ i = !0, d.add(e);
111
+ }
112
+ }
113
+ for (let e of d) r.has(e) || d.delete(e);
114
+ h = i ? Date.now() : 0;
115
+ }, _ = () => (m && (h === 0 || Date.now() - h < 5e3) || (m = g()), m), v = async () => {
116
+ m = void 0, h = 0, await _();
117
+ }, y = async () => {
118
+ let e = [...l].map(async (e) => {
119
+ if (d.has(e)) return;
120
+ let i = n.get(e);
121
+ if (i?.kind !== "file") {
122
+ l.delete(e);
123
+ return;
124
+ }
125
+ let a = i.data, o = r(e, i.contentType);
126
+ try {
127
+ await t.writeFile(e, a, o ? { contentType: o } : void 0);
128
+ let r = n.get(e);
129
+ r?.kind === "file" && r.data === a && l.delete(e);
130
+ } catch {}
131
+ }), i = [...u].map(async (e) => {
132
+ try {
133
+ await t.remove(e), u.delete(e);
134
+ } catch {}
135
+ });
136
+ await Promise.all([...e, ...i]);
137
+ }, b, x = () => {
138
+ b ||= setTimeout(() => {
139
+ b = void 0, y().catch(() => {});
140
+ }, 250);
141
+ };
142
+ typeof addEventListener < "u" && (addEventListener("pagehide", () => {
143
+ y().catch(() => {});
144
+ }), addEventListener("visibilitychange", () => {
145
+ typeof document < "u" && document.visibilityState === "hidden" && y().catch(() => {});
146
+ }));
147
+ let S = (e) => e.kind === "file" ? i(e.data.byteLength, e.mtimeMs) : a(e.mtimeMs), C = (e) => Object.assign(/* @__PURE__ */ Error(`storage: ${e} exists but could not be read, retry once its scope is available`), { code: "FKN_E2E_LOCKED" }), w = (e) => {
148
+ let t = s(e);
149
+ return n.has(t) || d.has(t);
150
+ }, T = (e) => {
151
+ let t = s(e), r = n.get(t);
152
+ if (!r) throw d.has(t) ? C(e) : o("ENOENT", e, "stat");
153
+ return S(r);
154
+ }, E = (e) => {
155
+ let t = s(e), r = n.get(t);
156
+ if (!r) throw d.has(t) ? C(e) : o("ENOENT", e, "open");
157
+ if (r.kind === "dir") throw o("EISDIR", e, "read");
158
+ return r.data;
159
+ }, D = (e, t) => {
160
+ let n = new Uint8Array(e.byteLength + t.byteLength);
161
+ return n.set(e, 0), n.set(t, e.byteLength), n;
162
+ }, O = (e, t, r, i) => {
163
+ let a = s(e);
164
+ if (!a) throw o("EISDIR", e, "open");
165
+ if (d.has(a)) throw C(e);
166
+ let m = n.get(a);
167
+ if (m?.kind === "dir") throw o("EISDIR", e, "open");
168
+ p(c(a));
169
+ let h = r && m?.kind === "file" ? D(m.data, t) : t;
170
+ n.set(a, {
171
+ kind: "file",
172
+ data: h,
173
+ mtimeMs: f(),
174
+ contentType: i ?? (m?.kind === "file" ? m.contentType : void 0)
175
+ }), l.add(a), u.delete(a), x();
176
+ }, k = (e, t) => {
177
+ let r = s(e);
178
+ if (r) {
179
+ if (n.has(r)) {
180
+ if (t) return;
181
+ throw o("EEXIST", e, "mkdir");
182
+ }
183
+ if (!t && !n.has(c(r))) throw o("ENOENT", e, "mkdir");
184
+ p(r);
185
+ }
186
+ }, A = (e) => {
187
+ let t = s(e), r = n.get(t);
188
+ if (!r) throw o("ENOENT", e, "scandir");
189
+ if (r.kind === "file") throw o("ENOTDIR", e, "scandir");
190
+ let i = t ? `${t}/` : "", a = /* @__PURE__ */ new Set();
191
+ for (let e of [...n.keys(), ...d]) {
192
+ if (!e || !e.startsWith(i)) continue;
193
+ let t = e.slice(i.length);
194
+ t && a.add(t.split("/")[0]);
195
+ }
196
+ return [...a];
197
+ }, j = (e, { op: t, recursive: r, force: i }) => {
198
+ let a = s(e), c = n.get(a);
199
+ if (!c && d.has(a)) {
200
+ if (t === "rmdir") throw o("ENOTDIR", e, "rmdir");
201
+ d.delete(a), l.delete(a), u.add(a), x();
202
+ return;
203
+ }
204
+ if (!c) {
205
+ if (i || t === "rmdir" && r) return;
206
+ throw o("ENOENT", e, t === "rmdir" ? "rmdir" : "unlink");
207
+ }
208
+ if (t === "unlink" && c.kind === "dir") throw o("EISDIR", e, "unlink");
209
+ if (t === "rmdir" && c.kind === "file") throw o("ENOTDIR", e, "rmdir");
210
+ if (t === "rm" && c.kind === "dir" && !r) throw o("ERR_FS_EISDIR", e, "rm");
211
+ let f = `${a}/`, p = [...n.keys()].filter((e) => e.startsWith(f));
212
+ if (p.length && !r) throw o("ENOTEMPTY", e, "rmdir");
213
+ for (let e of [a, ...p]) {
214
+ let t = n.get(e);
215
+ n.delete(e), t?.kind === "file" && (l.delete(e), u.add(e));
216
+ }
217
+ x();
218
+ };
219
+ return {
220
+ mount: _,
221
+ remount: v,
222
+ flush: y,
223
+ exists: w,
224
+ stat: T,
225
+ readFile: E,
226
+ writeFile: O,
227
+ mkdir: k,
228
+ readdir: A,
229
+ remove: j,
230
+ rename: (e, t) => {
231
+ let r = s(e), i = s(t);
232
+ if (!r) throw o("EBUSY", e, "rename");
233
+ if (i === r || i.startsWith(`${r}/`)) throw o("EINVAL", e, "rename");
234
+ if (d.has(r)) throw C(e);
235
+ if (d.has(i)) throw C(t);
236
+ let a = n.get(r);
237
+ if (!a) throw o("ENOENT", e, "rename");
238
+ let f = n.get(i);
239
+ if (f) {
240
+ if (f.kind !== a.kind) throw o(a.kind === "dir" ? "ENOTDIR" : "EISDIR", t, "rename");
241
+ j(i, {
242
+ op: "rm",
243
+ recursive: !0,
244
+ force: !0
245
+ });
246
+ }
247
+ p(c(i));
248
+ let m = `${r}/`, h = [r, ...[...n.keys()].filter((e) => e.startsWith(m))];
249
+ for (let e of h) {
250
+ let t = i + e.slice(r.length), a = n.get(e);
251
+ n.set(t, a), n.delete(e), a.kind === "file" && (l.add(t), u.delete(t), l.delete(e), u.add(e));
252
+ }
253
+ x();
254
+ }
255
+ };
256
+ }, g = (e, t) => typeof e == "function" ? e : t, _ = (e) => typeof e == "function" ? void 0 : e, v = (e, t) => {
257
+ e.then((e) => t(null, e), (e) => t(e));
258
+ }, y = (e) => {
259
+ let t = h(e), n = (e, n) => p(t.readFile(l(e)), n), r = (e, n, r) => t.writeFile(l(e), m(n, r), !1, d(r)), i = (e, n, r) => t.writeFile(l(e), m(n, r), !0, d(r)), a = (e) => t.exists(l(e)), s = (e) => t.stat(l(e)), c = (e) => t.readdir(l(e)), u = (e, n) => t.mkdir(l(e), f(n)), v = (e, n) => t.remove(l(e), {
260
+ op: "rm",
261
+ ...n
262
+ }), y = (e, n) => t.remove(l(e), {
263
+ op: "rmdir",
264
+ ...n
265
+ }), b = (e) => t.remove(l(e), { op: "unlink" }), x = (e, n) => t.rename(l(e), l(n)), S = (e, n) => {
266
+ t.mount().finally(() => {
267
+ let t;
268
+ try {
269
+ t = e();
270
+ } catch (e) {
271
+ n(e);
272
+ return;
273
+ }
274
+ n(null, t);
275
+ });
276
+ }, C = (e) => t.mount().then(() => e());
277
+ return {
278
+ available: e.available,
279
+ readFileSync: n,
280
+ writeFileSync: r,
281
+ appendFileSync: i,
282
+ existsSync: a,
283
+ statSync: s,
284
+ lstatSync: s,
285
+ readdirSync: c,
286
+ mkdirSync: u,
287
+ rmSync: v,
288
+ rmdirSync: y,
289
+ unlinkSync: b,
290
+ renameSync: x,
291
+ readFile: (e, n, r) => S(() => p(t.readFile(l(e)), _(n)), g(n, r)),
292
+ writeFile: (e, n, r, i) => S(() => t.writeFile(l(e), m(n, _(r)), !1, d(_(r))), g(r, i)),
293
+ appendFile: (e, n, r, i) => S(() => t.writeFile(l(e), m(n, _(r)), !0, d(_(r))), g(r, i)),
294
+ stat: (e, n) => S(() => t.stat(l(e)), n),
295
+ readdir: (e, n, r) => S(() => t.readdir(l(e)), g(n, r)),
296
+ mkdir: (e, n, r) => S(() => t.mkdir(l(e), f(_(n))), g(n, r)),
297
+ rm: (e, n, r) => S(() => t.remove(l(e), {
298
+ op: "rm",
299
+ ..._(n)
300
+ }), g(n, r)),
301
+ unlink: (e, n) => S(() => t.remove(l(e), { op: "unlink" }), n),
302
+ rename: (e, n, r) => S(() => t.rename(l(e), l(n)), r),
303
+ exists: (e, n) => {
304
+ t.mount().finally(() => n(t.exists(l(e))));
305
+ },
306
+ promises: {
307
+ readFile: (e, n) => C(() => p(t.readFile(l(e)), n)),
308
+ writeFile: (e, n, r) => C(() => t.writeFile(l(e), m(n, r), !1, d(r))),
309
+ appendFile: (e, n, r) => C(() => t.writeFile(l(e), m(n, r), !0, d(r))),
310
+ stat: (e) => C(() => t.stat(l(e))),
311
+ lstat: (e) => C(() => t.stat(l(e))),
312
+ readdir: (e) => C(() => t.readdir(l(e))),
313
+ mkdir: (e, n) => C(() => t.mkdir(l(e), f(n))),
314
+ rm: (e, n) => C(() => t.remove(l(e), {
315
+ op: "rm",
316
+ ...n
317
+ })),
318
+ rmdir: (e, n) => C(() => t.remove(l(e), {
319
+ op: "rmdir",
320
+ ...n
321
+ })),
322
+ unlink: (e) => C(() => t.remove(l(e), { op: "unlink" })),
323
+ rename: (e, n) => C(() => t.rename(l(e), l(n))),
324
+ access: (e) => C(() => {
325
+ if (!t.exists(l(e))) throw o("ENOENT", l(e), "access");
326
+ })
327
+ },
328
+ mount: t.mount,
329
+ flush: t.flush,
330
+ remount: t.remount
331
+ };
332
+ }, b = (e) => {
333
+ let t = async (t, n) => {
334
+ let r = await e.readFile(l(t));
335
+ return p(new Uint8Array(await r.arrayBuffer()), n);
336
+ }, n = async (t, n, i) => {
337
+ let a = l(t), o = r(a, d(i));
338
+ await e.writeFile(a, m(n, i), o ? { contentType: o } : void 0);
339
+ }, c = (t) => e.remove(l(t)), u = async (t, n) => {
340
+ let r = s(l(t)), i = s(l(n));
341
+ if (r === i) return;
342
+ let a = await e.readFile(r);
343
+ await e.writeFile(i, a), await e.remove(r);
344
+ }, f = async (t) => {
345
+ let n = s(l(t)), r = n ? `${n}/` : "", i = /* @__PURE__ */ new Set();
346
+ for (let t of await e.list()) {
347
+ let e = s(t.path);
348
+ if (r && !e.startsWith(r)) continue;
349
+ let n = e.slice(r.length);
350
+ n && i.add(n.split("/")[0]);
351
+ }
352
+ return [...i];
353
+ }, h = async (e, t) => {}, y = async (t, n) => {
354
+ let r = s(l(t));
355
+ if (!n?.recursive) {
356
+ await e.remove(l(t));
357
+ return;
358
+ }
359
+ let i = `${r}/`, a = await e.list();
360
+ await Promise.all(a.filter((e) => {
361
+ let t = s(e.path);
362
+ return t === r || t.startsWith(i);
363
+ }).map((t) => e.remove(t.path).catch(() => {})));
364
+ }, b = async (t) => {
365
+ let n = s(l(t)), r = await e.list(), c = r.find((e) => s(e.path) === n);
366
+ if (c) {
367
+ let e = Date.parse(c.updatedAt ?? "");
368
+ return i(c.size, Number.isFinite(e) ? e : 0);
369
+ }
370
+ if (r.some((e) => s(e.path).startsWith(`${n}/`))) return a();
371
+ throw o("ENOENT", l(t), "stat");
372
+ }, x = {
373
+ readFile: t,
374
+ writeFile: n,
375
+ unlink: c,
376
+ rename: u,
377
+ readdir: f,
378
+ mkdir: h,
379
+ rm: y,
380
+ rmdir: y,
381
+ stat: b,
382
+ lstat: b,
383
+ access: async (e) => {
384
+ await b(e);
385
+ }
386
+ };
387
+ return {
388
+ available: e.available,
389
+ promises: x,
390
+ readFile: (e, n, r) => v(t(e, _(n)), g(n, r)),
391
+ writeFile: (e, t, r, i) => v(n(e, t, _(r)), g(r, i)),
392
+ unlink: (e, t) => v(c(e), t),
393
+ rename: (e, t, n) => v(u(e, t), n),
394
+ readdir: (e, t, n) => v(f(e), g(t, n)),
395
+ mkdir: (e, t, n) => v(h(), g(t, n)),
396
+ rm: (e, t, n) => v(y(e, _(t)), g(t, n)),
397
+ stat: (e, t) => v(b(e), t)
398
+ };
399
+ };
400
+ function x(e, t) {
401
+ return t.memfs ? y(e) : b(e);
402
+ }
403
+ //#endregion
404
+ export { x as t };
@@ -0,0 +1 @@
1
+ const e=require("./busy-Dv8wzE5M.cjs");let t=require("buffer");var n={json:`application/json`,txt:`text/plain`,html:`text/html`,htm:`text/html`,css:`text/css`,js:`text/javascript`,mjs:`text/javascript`,xml:`application/xml`,csv:`text/csv`,md:`text/markdown`,svg:`image/svg+xml`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,pdf:`application/pdf`,wasm:`application/wasm`},r=(e,t)=>{if(t)return t;let r=e.split(`/`).pop()??``,i=r.lastIndexOf(`.`);if(!(i<=0))return n[r.slice(i+1).toLowerCase()]},i=(e,t)=>({size:e,mtimeMs:t,mtime:new Date(t),atimeMs:t,ctimeMs:t,mode:420,isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}),a=(e=0)=>({size:0,mtimeMs:e,mtime:new Date(e),atimeMs:e,ctimeMs:e,mode:493,isFile:()=>!1,isDirectory:()=>!0,isSymbolicLink:()=>!1}),o=(e,t,n)=>{let r=Error(`${e}: ${{ENOENT:`no such file or directory`,EEXIST:`file already exists`,ENOTDIR:`not a directory`,EISDIR:`illegal operation on a directory`,ENOTEMPTY:`directory not empty`,ERR_FS_EISDIR:`is a directory`}[e]??e}, ${n} '${t}'`);return r.code=e,r.path=t,r.syscall=n,r},s=e=>{let t=[];for(let n of e.split(`/`))if(!(!n||n===`.`)){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},c=e=>e.split(`/`).slice(0,-1).join(`/`),l=e=>typeof e==`string`?e:e instanceof URL?decodeURIComponent(e.pathname):e.toString(),u=e=>typeof e==`string`?e:e?.encoding??void 0,d=e=>typeof e==`object`?e?.contentType:void 0,f=e=>typeof e==`object`&&!!e?.recursive,p=(e,n)=>{let r=u(n);return r?t.Buffer.from(e).toString(r):t.Buffer.from(e)},m=(e,n)=>{if(typeof e==`string`)return new Uint8Array(t.Buffer.from(e,u(n)??`utf8`));if(e instanceof Uint8Array)return e.slice();if(e instanceof ArrayBuffer)return new Uint8Array(e).slice();if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength).slice();throw TypeError(`The "data" argument must be of type string, Buffer, TypedArray, or DataView`)},h=t=>{let n=new Map([[``,{kind:`dir`,mtimeMs:0}]]),l=new Set,u=new Set;e.r(`unsaved files`,()=>l.size>0||u.size>0);let d=new Set,f=()=>Date.now(),p=e=>{if(!e)return;let t=e.split(`/`),r=``;for(let e of t){r=r?`${r}/${e}`:e;let t=n.get(r);if(!t)n.set(r,{kind:`dir`,mtimeMs:f()});else if(t.kind===`file`)throw o(`ENOTDIR`,r,`mkdir`)}},m,h=0,g=async()=>{let e=await t.list().catch(()=>[]),r=new Set,i=!1;for(let a of e){let e=s(a.path);if(r.add(e),!u.has(e)&&!(l.has(e)&&!d.has(e)))try{let r=await(await t.readFile(a.path)).arrayBuffer();if(u.has(e)||l.has(e)&&!d.has(e))continue;p(c(e));let i=Date.parse(a.updatedAt??``);n.set(e,{kind:`file`,data:new Uint8Array(r),mtimeMs:Number.isFinite(i)?i:f(),contentType:a.contentType??void 0}),d.delete(e),l.delete(e)}catch{i=!0,d.add(e)}}for(let e of d)r.has(e)||d.delete(e);h=i?Date.now():0},_=()=>(m&&(h===0||Date.now()-h<5e3)||(m=g()),m),v=async()=>{m=void 0,h=0,await _()},y=async()=>{let e=[...l].map(async e=>{if(d.has(e))return;let i=n.get(e);if(i?.kind!==`file`){l.delete(e);return}let a=i.data,o=r(e,i.contentType);try{await t.writeFile(e,a,o?{contentType:o}:void 0);let r=n.get(e);r?.kind===`file`&&r.data===a&&l.delete(e)}catch{}}),i=[...u].map(async e=>{try{await t.remove(e),u.delete(e)}catch{}});await Promise.all([...e,...i])},b,x=()=>{b||=setTimeout(()=>{b=void 0,y().catch(()=>{})},250)};typeof addEventListener<`u`&&(addEventListener(`pagehide`,()=>{y().catch(()=>{})}),addEventListener(`visibilitychange`,()=>{typeof document<`u`&&document.visibilityState===`hidden`&&y().catch(()=>{})}));let S=e=>e.kind===`file`?i(e.data.byteLength,e.mtimeMs):a(e.mtimeMs),C=e=>Object.assign(Error(`storage: ${e} exists but could not be read, retry once its scope is available`),{code:`FKN_E2E_LOCKED`}),w=e=>{let t=s(e);return n.has(t)||d.has(t)},T=e=>{let t=s(e),r=n.get(t);if(!r)throw d.has(t)?C(e):o(`ENOENT`,e,`stat`);return S(r)},E=e=>{let t=s(e),r=n.get(t);if(!r)throw d.has(t)?C(e):o(`ENOENT`,e,`open`);if(r.kind===`dir`)throw o(`EISDIR`,e,`read`);return r.data},D=(e,t)=>{let n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e,0),n.set(t,e.byteLength),n},O=(e,t,r,i)=>{let a=s(e);if(!a)throw o(`EISDIR`,e,`open`);if(d.has(a))throw C(e);let m=n.get(a);if(m?.kind===`dir`)throw o(`EISDIR`,e,`open`);p(c(a));let h=r&&m?.kind===`file`?D(m.data,t):t;n.set(a,{kind:`file`,data:h,mtimeMs:f(),contentType:i??(m?.kind===`file`?m.contentType:void 0)}),l.add(a),u.delete(a),x()},k=(e,t)=>{let r=s(e);if(r){if(n.has(r)){if(t)return;throw o(`EEXIST`,e,`mkdir`)}if(!t&&!n.has(c(r)))throw o(`ENOENT`,e,`mkdir`);p(r)}},A=e=>{let t=s(e),r=n.get(t);if(!r)throw o(`ENOENT`,e,`scandir`);if(r.kind===`file`)throw o(`ENOTDIR`,e,`scandir`);let i=t?`${t}/`:``,a=new Set;for(let e of[...n.keys(),...d]){if(!e||!e.startsWith(i))continue;let t=e.slice(i.length);t&&a.add(t.split(`/`)[0])}return[...a]},j=(e,{op:t,recursive:r,force:i})=>{let a=s(e),c=n.get(a);if(!c&&d.has(a)){if(t===`rmdir`)throw o(`ENOTDIR`,e,`rmdir`);d.delete(a),l.delete(a),u.add(a),x();return}if(!c){if(i||t===`rmdir`&&r)return;throw o(`ENOENT`,e,t===`rmdir`?`rmdir`:`unlink`)}if(t===`unlink`&&c.kind===`dir`)throw o(`EISDIR`,e,`unlink`);if(t===`rmdir`&&c.kind===`file`)throw o(`ENOTDIR`,e,`rmdir`);if(t===`rm`&&c.kind===`dir`&&!r)throw o(`ERR_FS_EISDIR`,e,`rm`);let f=`${a}/`,p=[...n.keys()].filter(e=>e.startsWith(f));if(p.length&&!r)throw o(`ENOTEMPTY`,e,`rmdir`);for(let e of[a,...p]){let t=n.get(e);n.delete(e),t?.kind===`file`&&(l.delete(e),u.add(e))}x()};return{mount:_,remount:v,flush:y,exists:w,stat:T,readFile:E,writeFile:O,mkdir:k,readdir:A,remove:j,rename:(e,t)=>{let r=s(e),i=s(t);if(!r)throw o(`EBUSY`,e,`rename`);if(i===r||i.startsWith(`${r}/`))throw o(`EINVAL`,e,`rename`);if(d.has(r))throw C(e);if(d.has(i))throw C(t);let a=n.get(r);if(!a)throw o(`ENOENT`,e,`rename`);let f=n.get(i);if(f){if(f.kind!==a.kind)throw o(a.kind===`dir`?`ENOTDIR`:`EISDIR`,t,`rename`);j(i,{op:`rm`,recursive:!0,force:!0})}p(c(i));let m=`${r}/`,h=[r,...[...n.keys()].filter(e=>e.startsWith(m))];for(let e of h){let t=i+e.slice(r.length),a=n.get(e);n.set(t,a),n.delete(e),a.kind===`file`&&(l.add(t),u.delete(t),l.delete(e),u.add(e))}x()}}},g=(e,t)=>typeof e==`function`?e:t,_=e=>typeof e==`function`?void 0:e,v=(e,t)=>{e.then(e=>t(null,e),e=>t(e))},y=e=>{let t=h(e),n=(e,n)=>p(t.readFile(l(e)),n),r=(e,n,r)=>t.writeFile(l(e),m(n,r),!1,d(r)),i=(e,n,r)=>t.writeFile(l(e),m(n,r),!0,d(r)),a=e=>t.exists(l(e)),s=e=>t.stat(l(e)),c=e=>t.readdir(l(e)),u=(e,n)=>t.mkdir(l(e),f(n)),v=(e,n)=>t.remove(l(e),{op:`rm`,...n}),y=(e,n)=>t.remove(l(e),{op:`rmdir`,...n}),b=e=>t.remove(l(e),{op:`unlink`}),x=(e,n)=>t.rename(l(e),l(n)),S=(e,n)=>{t.mount().finally(()=>{let t;try{t=e()}catch(e){n(e);return}n(null,t)})},C=e=>t.mount().then(()=>e());return{available:e.available,readFileSync:n,writeFileSync:r,appendFileSync:i,existsSync:a,statSync:s,lstatSync:s,readdirSync:c,mkdirSync:u,rmSync:v,rmdirSync:y,unlinkSync:b,renameSync:x,readFile:(e,n,r)=>S(()=>p(t.readFile(l(e)),_(n)),g(n,r)),writeFile:(e,n,r,i)=>S(()=>t.writeFile(l(e),m(n,_(r)),!1,d(_(r))),g(r,i)),appendFile:(e,n,r,i)=>S(()=>t.writeFile(l(e),m(n,_(r)),!0,d(_(r))),g(r,i)),stat:(e,n)=>S(()=>t.stat(l(e)),n),readdir:(e,n,r)=>S(()=>t.readdir(l(e)),g(n,r)),mkdir:(e,n,r)=>S(()=>t.mkdir(l(e),f(_(n))),g(n,r)),rm:(e,n,r)=>S(()=>t.remove(l(e),{op:`rm`,..._(n)}),g(n,r)),unlink:(e,n)=>S(()=>t.remove(l(e),{op:`unlink`}),n),rename:(e,n,r)=>S(()=>t.rename(l(e),l(n)),r),exists:(e,n)=>{t.mount().finally(()=>n(t.exists(l(e))))},promises:{readFile:(e,n)=>C(()=>p(t.readFile(l(e)),n)),writeFile:(e,n,r)=>C(()=>t.writeFile(l(e),m(n,r),!1,d(r))),appendFile:(e,n,r)=>C(()=>t.writeFile(l(e),m(n,r),!0,d(r))),stat:e=>C(()=>t.stat(l(e))),lstat:e=>C(()=>t.stat(l(e))),readdir:e=>C(()=>t.readdir(l(e))),mkdir:(e,n)=>C(()=>t.mkdir(l(e),f(n))),rm:(e,n)=>C(()=>t.remove(l(e),{op:`rm`,...n})),rmdir:(e,n)=>C(()=>t.remove(l(e),{op:`rmdir`,...n})),unlink:e=>C(()=>t.remove(l(e),{op:`unlink`})),rename:(e,n)=>C(()=>t.rename(l(e),l(n))),access:e=>C(()=>{if(!t.exists(l(e)))throw o(`ENOENT`,l(e),`access`)})},mount:t.mount,flush:t.flush,remount:t.remount}},b=e=>{let t=async(t,n)=>{let r=await e.readFile(l(t));return p(new Uint8Array(await r.arrayBuffer()),n)},n=async(t,n,i)=>{let a=l(t),o=r(a,d(i));await e.writeFile(a,m(n,i),o?{contentType:o}:void 0)},c=t=>e.remove(l(t)),u=async(t,n)=>{let r=s(l(t)),i=s(l(n));if(r===i)return;let a=await e.readFile(r);await e.writeFile(i,a),await e.remove(r)},f=async t=>{let n=s(l(t)),r=n?`${n}/`:``,i=new Set;for(let t of await e.list()){let e=s(t.path);if(r&&!e.startsWith(r))continue;let n=e.slice(r.length);n&&i.add(n.split(`/`)[0])}return[...i]},h=async(e,t)=>{},y=async(t,n)=>{let r=s(l(t));if(!n?.recursive){await e.remove(l(t));return}let i=`${r}/`,a=await e.list();await Promise.all(a.filter(e=>{let t=s(e.path);return t===r||t.startsWith(i)}).map(t=>e.remove(t.path).catch(()=>{})))},b=async t=>{let n=s(l(t)),r=await e.list(),c=r.find(e=>s(e.path)===n);if(c){let e=Date.parse(c.updatedAt??``);return i(c.size,Number.isFinite(e)?e:0)}if(r.some(e=>s(e.path).startsWith(`${n}/`)))return a();throw o(`ENOENT`,l(t),`stat`)},x={readFile:t,writeFile:n,unlink:c,rename:u,readdir:f,mkdir:h,rm:y,rmdir:y,stat:b,lstat:b,access:async e=>{await b(e)}};return{available:e.available,promises:x,readFile:(e,n,r)=>v(t(e,_(n)),g(n,r)),writeFile:(e,t,r,i)=>v(n(e,t,_(r)),g(r,i)),unlink:(e,t)=>v(c(e),t),rename:(e,t,n)=>v(u(e,t),n),readdir:(e,t,n)=>v(f(e),g(t,n)),mkdir:(e,t,n)=>v(h(),g(t,n)),rm:(e,t,n)=>v(y(e,_(t)),g(t,n)),stat:(e,t)=>v(b(e),t)}};function x(e,t){return t.memfs?y(e):b(e)}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return x}});
package/opfs.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./node-fs-BMR2yCEt.cjs"),n=require("./opfs-CXMESVLc.cjs");var r=e.t({appendFile:()=>b,appendFileSync:()=>c,available:()=>a,default:()=>i,exists:()=>D,existsSync:()=>l,flush:()=>A,lstatSync:()=>d,mkdir:()=>C,mkdirSync:()=>p,mount:()=>k,promises:()=>O,readFile:()=>v,readFileSync:()=>o,readdir:()=>S,readdirSync:()=>f,remount:()=>j,rename:()=>E,renameSync:()=>_,rm:()=>w,rmSync:()=>m,rmdirSync:()=>h,stat:()=>x,statSync:()=>u,unlink:()=>T,unlinkSync:()=>g,writeFile:()=>y,writeFileSync:()=>s}),i=t.t(n.r,{memfs:!0}),{available:a,readFileSync:o,writeFileSync:s,appendFileSync:c,existsSync:l,statSync:u,lstatSync:d,readdirSync:f,mkdirSync:p,rmSync:m,rmdirSync:h,unlinkSync:g,renameSync:_,readFile:v,writeFile:y,appendFile:b,stat:x,readdir:S,mkdir:C,rm:w,unlink:T,rename:E,exists:D,promises:O,mount:k,flush:A,remount:j}=i;exports.appendFile=b,exports.appendFileSync=c,exports.available=a,exports.default=i,exports.exists=D,exports.existsSync=l,exports.flush=A,exports.lstatSync=d,exports.mkdir=C,exports.mkdirSync=p,exports.mount=k,exports.promises=O,exports.readFile=v,exports.readFileSync=o,exports.readdir=S,exports.readdirSync=f,exports.remount=j,exports.rename=E,exports.renameSync=_,exports.rm=w,exports.rmSync=m,exports.rmdirSync=h,exports.stat=x,exports.statSync=u,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}}),exports.unlink=T,exports.unlinkSync=g,exports.writeFile=y,exports.writeFileSync=s;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./node-fs-DZPGCYWg.cjs"),n=require("./opfs-CXMESVLc.cjs");var r=e.t({appendFile:()=>b,appendFileSync:()=>c,available:()=>a,default:()=>i,exists:()=>D,existsSync:()=>l,flush:()=>A,lstatSync:()=>d,mkdir:()=>C,mkdirSync:()=>p,mount:()=>k,promises:()=>O,readFile:()=>v,readFileSync:()=>o,readdir:()=>S,readdirSync:()=>f,remount:()=>j,rename:()=>E,renameSync:()=>_,rm:()=>w,rmSync:()=>m,rmdirSync:()=>h,stat:()=>x,statSync:()=>u,unlink:()=>T,unlinkSync:()=>g,writeFile:()=>y,writeFileSync:()=>s}),i=t.t(n.r,{memfs:!0}),{available:a,readFileSync:o,writeFileSync:s,appendFileSync:c,existsSync:l,statSync:u,lstatSync:d,readdirSync:f,mkdirSync:p,rmSync:m,rmdirSync:h,unlinkSync:g,renameSync:_,readFile:v,writeFile:y,appendFile:b,stat:x,readdir:S,mkdir:C,rm:w,unlink:T,rename:E,exists:D,promises:O,mount:k,flush:A,remount:j}=i;exports.appendFile=b,exports.appendFileSync=c,exports.available=a,exports.default=i,exports.exists=D,exports.existsSync=l,exports.flush=A,exports.lstatSync=d,exports.mkdir=C,exports.mkdirSync=p,exports.mount=k,exports.promises=O,exports.readFile=v,exports.readFileSync=o,exports.readdir=S,exports.readdirSync=f,exports.remount=j,exports.rename=E,exports.renameSync=_,exports.rm=w,exports.rmSync=m,exports.rmdirSync=h,exports.stat=x,exports.statSync=u,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}}),exports.unlink=T,exports.unlinkSync=g,exports.writeFile=y,exports.writeFileSync=s;
package/opfs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
- import { t } from "./node-fs-DKfokOlh.js";
2
+ import { t } from "./node-fs-BZCQUmeE.js";
3
3
  import { r as n } from "./opfs-BibrNGF0.js";
4
4
  //#region src/lib/opfs/index.ts
5
5
  var r = /* @__PURE__ */ e({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fkn/lib",
3
- "version": "0.9.20",
3
+ "version": "0.9.21",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
package/packages.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-kHMHDGar.cjs");let n=require("osra");var r=e.t({attach:()=>A,connect:()=>w,hide:()=>C,install:()=>f,isVisible:()=>W,list:()=>p,mount:()=>k,onConnect:()=>U,onVisibilityChange:()=>G,pick:()=>d,search:()=>u,show:()=>S,uninstall:()=>m}),i=`fkn-packages-connection`,a=3e4,o=(e,t)=>Object.assign(Error(t),{code:e}),s=async()=>{if(!t.r)throw o(`unavailable`,`packages: no FKN transport in this realm - use relayWorker to bridge workers`);return t.t},c=(e,t,r)=>(0,n.expose)(e??{},{transport:t,key:i,unregisterSignal:r}),l=async(e,t,n={})=>{let{signal:r,closed:i}=n;if(r?.aborted)throw o(`unavailable`,`packages.connect: aborted before connecting`);let s=new AbortController;r&&r.addEventListener(`abort`,()=>s.abort(r.reason),{once:!0});let l=new AbortController,u=new Promise((e,n)=>{let s=setTimeout(()=>n(o(`timeout`,`packages.connect: the package did not complete the connection`)),a);l.signal.addEventListener(`abort`,()=>clearTimeout(s),{once:!0}),t.addEventListener(`message`,e=>{if(e.data?.type===`fkn-packages-nack`){let t=e.data.message;n(o(`unavailable`,typeof t==`string`&&t?t:`packages.connect: the package refused the connection`))}},{signal:l.signal}),t.start(),r&&r.addEventListener(`abort`,()=>n(o(`unavailable`,`packages.connect: aborted before connecting`)),{once:!0,signal:l.signal}),i?.then(()=>n(o(`unavailable`,`packages.connect: the package closed before connecting`)))});try{return await Promise.race([c(e,t,s.signal),u])}catch(e){s.abort(e);try{t.close()}catch{}throw e}finally{l.abort()}},u=async e=>{let t=await(await s()).packages.search(e);if(`error`in t)throw o(t.error,t.message);return t.results},d=async(e,t)=>{let n=await(await s()).packages.pick(e,t);if(`error`in n)throw o(n.error,n.message);return`declined`in n?[]:n.results},f=async(e,t)=>{let n=await(await s()).packages.install(e,t);if(`error`in n)throw o(n.error,n.message);return`declined`in n?null:n.installed},p=async()=>(await(await s()).packages.list()).results,m=async e=>{let t=await(await s()).packages.uninstall(e);if(`error`in t)throw o(t.error,t.message)},h=({x:e,y:t,width:n,height:r})=>({x:Math.round(e),y:Math.round(t),width:Math.round(n),height:Math.round(r)}),g=(e,t)=>{let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y);return{x:n,y:r,width:Math.max(0,Math.min(e.x+e.width,t.x+t.width)-n),height:Math.max(0,Math.min(e.y+e.height,t.y+t.height)-r)}},_=(e,t)=>{let n=t;for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t);if(!(e.overflowX===`visible`&&e.overflowY===`visible`)&&(n=g(n,h(t.getBoundingClientRect())),n.width===0||n.height===0))break}return n},v=e=>{let t=getComputedStyle(e),n=[t.borderTopLeftRadius,t.borderTopRightRadius,t.borderBottomRightRadius,t.borderBottomLeftRadius];if(n.some(e=>e.includes(`%`)||e.includes(` `)))return;let r=n.map(e=>{let t=Number.parseFloat(e);return Number.isFinite(t)&&t>0?t:0});return r.some(e=>e>0)?r:void 0},y=(e,t)=>{if(!e)return!1;let n=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height;return n(e.rect,t.rect)&&n(e.clip,t.clip)&&((e,t)=>e===t||!!e&&!!t&&e.every((e,n)=>e===t[n]))(e.radius,t.radius)},b=new Map,x=async(e,t)=>{let n=b.get(e);if(n){for(let e of n)t&&e.element!==t||(e.stop(),n.delete(e));if(n.size>0)return;b.delete(e)}let r=await(await s()).packages.hide(e);if(`error`in r)throw o(r.error,r.message)},S=async(e,t)=>{let{element:n,rect:r}=t;if(!n&&!r)throw o(`invalid`,`packages.show: pass an element or a rect`);let i=(await s()).packages,a=()=>{if(!n)return{rect:h(r)};let e=h(n.getBoundingClientRect());return{rect:e,clip:_(n,e),radius:v(n)}},c=!0,l,u=0,d=async t=>{l=t;let n=await i.show(e,t);if(`error`in n)throw c=!1,o(n.error,n.message)};await d(a());let f=()=>{if(!c)return;let e=a();y(l,e)||d(e).catch(()=>{}),u=requestAnimationFrame(f)};n&&(u=requestAnimationFrame(f));let p={element:n,stop:()=>{c=!1,cancelAnimationFrame(u)}},m=b.get(e)??new Set;return m.add(p),b.set(e,m),{hide:()=>{x(e,n).catch(()=>{})},refresh:()=>{if(!c)return;let e=a();y(l,e)||d(e).catch(()=>{})}}},C=async(e,t={})=>x(e,t.element),w=(async(e,t={})=>{let n=await(await s()).packages.connect(e,{protocol:t.protocol});if(`error`in n)throw o(n.error,n.message);let{port:r,closed:i}=n;if(t.raw)return{closed:i,port:r};let a=await l(t.payload,r,{signal:t.signal,closed:i});return t.signal&&t.signal.addEventListener(`abort`,()=>{try{r.postMessage({type:`fkn-packages-disconnect`})}catch{}},{once:!0}),{remote:a,closed:i,port:r}}),T=[`allow-scripts`,`allow-same-origin`],E=e=>{let t=e.getAttribute(`sandbox`);if(t!==null){let e=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),n=T.filter(t=>!e.has(t));if(n.length)throw o(`invalid`,`packages.mount: the iframe's sandbox attribute must include ${n.join(` and `)}, or the package cannot start`)}if(globalThis.crossOriginIsolated&&!new Set((e.getAttribute(`allow`)??``).toLowerCase().split(`;`).map(e=>e.trim().split(/\s+/)[0]).filter(Boolean)).has(`cross-origin-isolated`))throw o(`invalid`,`packages.mount: this page is cross-origin isolated, so the iframe's allow attribute must include 'cross-origin-isolated' to hand that down to the package`)},D=3e4,O=(e,t)=>new Promise((n,r)=>{let i=e=>{clearTimeout(s),window.removeEventListener(`message`,a),e?r(e):n()},a=n=>{if(n.source!==e.contentWindow||n.origin!==t)return;let r=n.data;if(r?.type===`fkn-packages-ready`)return i();r?.type===`fkn-packages-failed`&&i(o(`unavailable`,typeof r.message==`string`&&r.message?r.message:`packages.mount: the package failed to boot`))},s=setTimeout(()=>i(o(`timeout`,`packages.mount: the package did not register a connection handler`)),D);window.addEventListener(`message`,a)}),k=async(e,t)=>{let{iframe:n}=t;if(!(n instanceof HTMLIFrameElement))throw o(`invalid`,`packages.mount: pass the iframe to load the package into`);if(!n.isConnected)throw o(`invalid`,`packages.mount: the iframe must be in the document before mounting into it`);E(n);let r=await(await s()).packages.frame(e);if(`error`in r)throw o(r.error,r.message);n.src=r.url;let i={done:!1},a=()=>{},c=new Promise(e=>{a=e}),u=()=>{if(!i.done){i.done=!0;try{n.contentWindow?.postMessage({type:`fkn-packages-close`},r.origin)}catch{}n.src=`about:blank`,a()}};try{await O(n,r.origin)}catch(e){throw u(),e}let d=new MessageChannel,f=n.contentWindow;if(!f)throw u(),o(`unavailable`,`packages.mount: the frame was detached before it could connect`);f.postMessage({type:`fkn-packages-port`,from:r.from,protocol:t.protocol,uri:r.uri,name:r.name,version:r.version},r.origin,[d.port2]);try{f.postMessage({type:`fkn-packages-visibility`,visible:!0},r.origin)}catch{}return t.raw?{closed:c,port:d.port1,frame:n,unmount:u}:{remote:await l(t.payload,d.port1,{signal:t.signal,closed:c}),closed:c,port:d.port1,frame:n,unmount:u}},A=(e,t,n)=>l(t,e,{signal:n?.signal}),j=null,M=!1,N=new Set,P=[],F=new Map,I=!1,L=!1,R=e=>{let t=F.get(e);t&&(F.delete(e),t())},z=(e,t)=>{try{e.postMessage({type:`fkn-packages-nack`,message:t})}catch{}try{e.close()}catch{}},B=async(e,t)=>{let{port:n,...r}=e;e.port.addEventListener(`message`,t=>{t.data?.type===`fkn-packages-disconnect`&&R(e.port)});let i;try{i=await t.createPayload(r)}catch(t){throw z(e.port,t instanceof Error?t.message:`the package failed to produce a connection`),t}let a=new Promise(t=>F.set(e.port,t)),o=await c(i,e.port);t.handler?.({...r,remote:o,closed:a,port:e.port})},V=()=>{I||typeof window>`u`||window.parent===window||(I=!0,window.addEventListener(`message`,e=>{if(e.source!==window.parent)return;let t=e.data;if(t?.type===`fkn-packages-port`){let n=e.ports[0];if(!n)return;let r={port:n,from:typeof t.from==`string`?t.from:``,protocol:typeof t.protocol==`string`?t.protocol:null,uri:typeof t.uri==`string`?t.uri:``,name:typeof t.name==`string`?t.name:``,version:typeof t.version==`string`?t.version:``};j?B(r,j).catch(e=>console.warn(`packages.onConnect:`,e)):P.push(r)}if(t?.type===`fkn-packages-close`)for(let e of[...F.keys()])R(e);if(t?.type===`fkn-packages-visibility`){M=t.visible===!0;for(let e of N)try{e(M)}catch{}}}))},H=()=>{L||typeof window>`u`||window.parent===window||(L=!0,window.parent.postMessage({type:`fkn-packages-ready`},`*`))},U=(e,t)=>{if(typeof window>`u`)return{unsubscribe:()=>{}};V();let n={createPayload:e,handler:t};for(j=n,H();P.length&&j===n;)B(P.shift(),n).catch(e=>console.warn(`packages.onConnect:`,e));return{unsubscribe:()=>{j===n&&(j=null)}}},W=()=>M,G=e=>{if(typeof window>`u`)return{unsubscribe:()=>{}};V(),N.add(e);try{e(M)}catch{}return{unsubscribe:()=>{N.delete(e)}}};exports.attach=A,exports.connect=w,exports.hide=C,exports.install=f,exports.isVisible=W,exports.list=p,exports.mount=k,exports.onConnect=U,exports.onVisibilityChange=G,exports.pick=d,exports.search=u,exports.show=S,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}}),exports.uninstall=m;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-CKO3Hw-O.cjs"),n=require("./busy-Dv8wzE5M.cjs");let r=require("osra");var i=e.t({attach:()=>j,connect:()=>T,hide:()=>w,install:()=>p,isVisible:()=>G,list:()=>m,mount:()=>A,onConnect:()=>W,onVisibilityChange:()=>K,pick:()=>f,search:()=>d,show:()=>C,uninstall:()=>h}),a=`fkn-packages-connection`,o=3e4,s=(e,t)=>Object.assign(Error(t),{code:e}),c=async()=>{if(!t.o)throw s(`unavailable`,`packages: no FKN transport in this realm - use relayWorker to bridge workers`);return t.r},l=(e,t,n)=>(0,r.expose)(e??{},{transport:t,key:a,unregisterSignal:n}),u=async(e,t,n={})=>{let{signal:r,closed:i}=n;if(r?.aborted)throw s(`unavailable`,`packages.connect: aborted before connecting`);let a=new AbortController;r&&r.addEventListener(`abort`,()=>a.abort(r.reason),{once:!0});let c=new AbortController,u=new Promise((e,n)=>{let a=setTimeout(()=>n(s(`timeout`,`packages.connect: the package did not complete the connection`)),o);c.signal.addEventListener(`abort`,()=>clearTimeout(a),{once:!0}),t.addEventListener(`message`,e=>{if(e.data?.type===`fkn-packages-nack`){let t=e.data.message;n(s(`unavailable`,typeof t==`string`&&t?t:`packages.connect: the package refused the connection`))}},{signal:c.signal}),t.start(),r&&r.addEventListener(`abort`,()=>n(s(`unavailable`,`packages.connect: aborted before connecting`)),{once:!0,signal:c.signal}),i?.then(()=>n(s(`unavailable`,`packages.connect: the package closed before connecting`)))});try{return await Promise.race([l(e,t,a.signal),u])}catch(e){a.abort(e);try{t.close()}catch{}throw e}finally{c.abort()}},d=async e=>{let t=await(await c()).packages.search(e);if(`error`in t)throw s(t.error,t.message);return t.results},f=async(e,t)=>{let n=await(await c()).packages.pick(e,t);if(`error`in n)throw s(n.error,n.message);return`declined`in n?[]:n.results},p=async(e,t)=>{let n=await(await c()).packages.install(e,t);if(`error`in n)throw s(n.error,n.message);return`declined`in n?null:n.installed},m=async()=>(await(await c()).packages.list()).results,h=async e=>{let t=await(await c()).packages.uninstall(e);if(`error`in t)throw s(t.error,t.message)},g=({x:e,y:t,width:n,height:r})=>({x:Math.round(e),y:Math.round(t),width:Math.round(n),height:Math.round(r)}),_=(e,t)=>{let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y);return{x:n,y:r,width:Math.max(0,Math.min(e.x+e.width,t.x+t.width)-n),height:Math.max(0,Math.min(e.y+e.height,t.y+t.height)-r)}},v=(e,t)=>{let n=t;for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t);if(!(e.overflowX===`visible`&&e.overflowY===`visible`)&&(n=_(n,g(t.getBoundingClientRect())),n.width===0||n.height===0))break}return n},y=e=>{let t=getComputedStyle(e),n=[t.borderTopLeftRadius,t.borderTopRightRadius,t.borderBottomRightRadius,t.borderBottomLeftRadius];if(n.some(e=>e.includes(`%`)||e.includes(` `)))return;let r=n.map(e=>{let t=Number.parseFloat(e);return Number.isFinite(t)&&t>0?t:0});return r.some(e=>e>0)?r:void 0},b=(e,t)=>{if(!e)return!1;let n=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height;return n(e.rect,t.rect)&&n(e.clip,t.clip)&&((e,t)=>e===t||!!e&&!!t&&e.every((e,n)=>e===t[n]))(e.radius,t.radius)},x=new Map;n.r(`package view`,()=>x.size>0);var S=async(e,t)=>{let n=x.get(e);if(n){for(let e of n)t&&e.element!==t||(e.stop(),n.delete(e));if(n.size>0)return;x.delete(e)}let r=await(await c()).packages.hide(e);if(`error`in r)throw s(r.error,r.message)},C=async(e,t)=>{let{element:n,rect:r}=t;if(!n&&!r)throw s(`invalid`,`packages.show: pass an element or a rect`);let i=(await c()).packages,a=()=>{if(!n)return{rect:g(r)};let e=g(n.getBoundingClientRect());return{rect:e,clip:v(n,e),radius:y(n)}},o=!0,l,u=0,d=async t=>{l=t;let n=await i.show(e,t);if(`error`in n)throw o=!1,s(n.error,n.message)};await d(a());let f=()=>{if(!o)return;let e=a();b(l,e)||d(e).catch(()=>{}),u=requestAnimationFrame(f)};n&&(u=requestAnimationFrame(f));let p={element:n,stop:()=>{o=!1,cancelAnimationFrame(u)}},m=x.get(e)??new Set;return m.add(p),x.set(e,m),{hide:()=>{S(e,n).catch(()=>{})},refresh:()=>{if(!o)return;let e=a();b(l,e)||d(e).catch(()=>{})}}},w=async(e,t={})=>S(e,t.element),T=(async(e,r={})=>{let i=await(await c()).packages.connect(e,{protocol:r.protocol});if(`error`in i)throw s(i.error,i.message);let a=n.t(`package connection`),o=t.a()?.epoch??0,l=t.s((e,t)=>{t!==o&&(a(),l())});Promise.resolve(i.closed).then(()=>{a(),l()},()=>{a(),l()});let{port:d,closed:f}=i;if(r.raw)return{closed:f,port:d};let p=await u(r.payload,d,{signal:r.signal,closed:f});return r.signal&&r.signal.addEventListener(`abort`,()=>{try{d.postMessage({type:`fkn-packages-disconnect`})}catch{}},{once:!0}),{remote:p,closed:f,port:d}}),E=[`allow-scripts`,`allow-same-origin`],D=e=>{let t=e.getAttribute(`sandbox`);if(t!==null){let e=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),n=E.filter(t=>!e.has(t));if(n.length)throw s(`invalid`,`packages.mount: the iframe's sandbox attribute must include ${n.join(` and `)}, or the package cannot start`)}if(globalThis.crossOriginIsolated&&!new Set((e.getAttribute(`allow`)??``).toLowerCase().split(`;`).map(e=>e.trim().split(/\s+/)[0]).filter(Boolean)).has(`cross-origin-isolated`))throw s(`invalid`,`packages.mount: this page is cross-origin isolated, so the iframe's allow attribute must include 'cross-origin-isolated' to hand that down to the package`)},O=3e4,k=(e,t)=>new Promise((n,r)=>{let i=e=>{clearTimeout(o),window.removeEventListener(`message`,a),e?r(e):n()},a=n=>{if(n.source!==e.contentWindow||n.origin!==t)return;let r=n.data;if(r?.type===`fkn-packages-ready`)return i();r?.type===`fkn-packages-failed`&&i(s(`unavailable`,typeof r.message==`string`&&r.message?r.message:`packages.mount: the package failed to boot`))},o=setTimeout(()=>i(s(`timeout`,`packages.mount: the package did not register a connection handler`)),O);window.addEventListener(`message`,a)}),A=async(e,t)=>{let{iframe:r}=t;if(!(r instanceof HTMLIFrameElement))throw s(`invalid`,`packages.mount: pass the iframe to load the package into`);if(!r.isConnected)throw s(`invalid`,`packages.mount: the iframe must be in the document before mounting into it`);D(r);let i=await(await c()).packages.frame(e);if(`error`in i)throw s(i.error,i.message);r.src=i.url;let a={done:!1},o=()=>{},l=new Promise(e=>{o=e}),d=n.t(`mounted package`),f=()=>{if(!a.done){a.done=!0,d();try{r.contentWindow?.postMessage({type:`fkn-packages-close`},i.origin)}catch{}r.src=`about:blank`,o()}};try{await k(r,i.origin)}catch(e){throw f(),e}let p=new MessageChannel,m=r.contentWindow;if(!m)throw f(),s(`unavailable`,`packages.mount: the frame was detached before it could connect`);m.postMessage({type:`fkn-packages-port`,from:i.from,protocol:t.protocol,uri:i.uri,name:i.name,version:i.version},i.origin,[p.port2]);try{m.postMessage({type:`fkn-packages-visibility`,visible:!0},i.origin)}catch{}if(t.raw)return{closed:l,port:p.port1,frame:r,unmount:f};try{return{remote:await u(t.payload,p.port1,{signal:t.signal,closed:l}),closed:l,port:p.port1,frame:r,unmount:f}}catch(e){throw f(),e}},j=(e,t,n)=>u(t,e,{signal:n?.signal}),M=null,N=!1,P=new Set,F=[],I=new Map,L=!1,R=!1,z=e=>{let t=I.get(e);t&&(I.delete(e),t())},B=(e,t)=>{try{e.postMessage({type:`fkn-packages-nack`,message:t})}catch{}try{e.close()}catch{}},V=async(e,t)=>{let{port:n,...r}=e;e.port.addEventListener(`message`,t=>{t.data?.type===`fkn-packages-disconnect`&&z(e.port)});let i;try{i=await t.createPayload(r)}catch(t){throw B(e.port,t instanceof Error?t.message:`the package failed to produce a connection`),t}let a=new Promise(t=>I.set(e.port,t)),o=await l(i,e.port);t.handler?.({...r,remote:o,closed:a,port:e.port})},H=()=>{L||typeof window>`u`||window.parent===window||(L=!0,window.addEventListener(`message`,e=>{if(e.source!==window.parent)return;let t=e.data;if(t?.type===`fkn-packages-port`){let n=e.ports[0];if(!n)return;let r={port:n,from:typeof t.from==`string`?t.from:``,protocol:typeof t.protocol==`string`?t.protocol:null,uri:typeof t.uri==`string`?t.uri:``,name:typeof t.name==`string`?t.name:``,version:typeof t.version==`string`?t.version:``};M?V(r,M).catch(e=>console.warn(`packages.onConnect:`,e)):F.push(r)}if(t?.type===`fkn-packages-close`)for(let e of[...I.keys()])z(e);if(t?.type===`fkn-packages-visibility`){N=t.visible===!0;for(let e of P)try{e(N)}catch{}}}))},U=()=>{R||typeof window>`u`||window.parent===window||(R=!0,window.parent.postMessage({type:`fkn-packages-ready`},`*`))},W=(e,t)=>{if(typeof window>`u`)return{unsubscribe:()=>{}};H();let n={createPayload:e,handler:t};for(M=n,U();F.length&&M===n;)V(F.shift(),n).catch(e=>console.warn(`packages.onConnect:`,e));return{unsubscribe:()=>{M===n&&(M=null)}}},G=()=>N,K=e=>{if(typeof window>`u`)return{unsubscribe:()=>{}};H(),P.add(e);try{e(N)}catch{}return{unsubscribe:()=>{P.delete(e)}}};exports.attach=j,exports.connect=T,exports.hide=w,exports.install=p,exports.isVisible=G,exports.list=m,exports.mount=A,exports.onConnect=W,exports.onVisibilityChange=K,exports.pick=f,exports.search=d,exports.show=C,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),exports.uninstall=h;