@fkn/lib 0.7.1 → 0.9.0

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 (41) hide show
  1. package/{api-CI4d96Ty.d.ts → api-Bdzns9Sb.d.ts} +5 -2
  2. package/{background-Bu7dBd_Z.cjs → background-Bgznrosz.cjs} +1 -1
  3. package/{background-DLnt6fYS.js → background-EwGRMga_.js} +1 -1
  4. package/cloud/fs.cjs +1 -1
  5. package/cloud/fs.d.ts +1 -1
  6. package/cloud/fs.js +1 -1
  7. package/cloud/net.d.ts +1 -1
  8. package/{cloud-BxPdeAuj.d.ts → cloud-BPd7yisS.d.ts} +3 -3
  9. package/cloud-C-QB3sIK.js +127 -0
  10. package/cloud-Gs4fvw2S.cjs +1 -0
  11. package/cloud.cjs +1 -1
  12. package/cloud.d.ts +3 -3
  13. package/cloud.js +2 -2
  14. package/dgram.d.ts +1 -1
  15. package/{extension-DVHdBvOz.cjs → extension-BeARgX1g.cjs} +1 -1
  16. package/{extension-4ib5y95s.js → extension-CgXBc_iM.js} +1 -1
  17. package/extension.cjs +1 -1
  18. package/extension.js +2 -2
  19. package/fs/promises.cjs +1 -1
  20. package/fs/promises.js +1 -1
  21. package/{fs-BEfsbriO.d.ts → fs-B8A_hQbv.d.ts} +2 -2
  22. package/{fs-BN4hkppN.cjs → fs-CP-81e-c.cjs} +1 -1
  23. package/{fs-7E0-tE2x.js → fs-DhPpGH0c.js} +1 -1
  24. package/fs.cjs +1 -1
  25. package/fs.js +1 -1
  26. package/http.d.ts +1 -1
  27. package/index.cjs +1 -1
  28. package/index.d.ts +6 -3
  29. package/index.js +8 -8
  30. package/{net-Cx8lDWau.d.ts → net-EaGR0bVe.d.ts} +1 -1
  31. package/net.d.ts +1 -1
  32. package/node-fs-BMR2yCEt.cjs +1 -0
  33. package/{node-fs-Dbf93qP7.js → node-fs-DKfokOlh.js} +99 -82
  34. package/opfs.cjs +1 -1
  35. package/opfs.js +1 -1
  36. package/package.json +1 -1
  37. package/{proxy-Du95zAKk.cjs → proxy-Bo-8GoRU.cjs} +2 -2
  38. package/{proxy-Cusnx9Ex.js → proxy-CuuSsVoC.js} +165 -136
  39. package/cloud-CIO9w9MV.cjs +0 -1
  40. package/cloud-D2s-dPZy.js +0 -126
  41. package/node-fs-C0eKnboT.cjs +0 -1
@@ -437,7 +437,7 @@ var Re = (e) => {
437
437
  }), We = "owner", Ge = (e) => {
438
438
  throw Error("owner: must be processed by the executor as an upward pivot");
439
439
  }, Ke = async () => {
440
- let { backgroundResolvers: e } = await import("./background-DLnt6fYS.js"), t = await (await e).getParentFrameId();
440
+ let { backgroundResolvers: e } = await import("./background-EwGRMga_.js"), t = await (await e).getParentFrameId();
441
441
  if (!t) throw Error("owner: already at top frame");
442
442
  return t;
443
443
  }, qe = () => ({
@@ -1270,25 +1270,25 @@ var Xe = class {
1270
1270
  console.error(e);
1271
1271
  }
1272
1272
  lt.add(n), ut && (n.disabled = !0);
1273
- }, Y = "frameLocator", X = [
1273
+ }, Y = "frameLocator", pt = [
1274
1274
  {
1275
1275
  ...L,
1276
1276
  nextLocatorType: "locator"
1277
1277
  },
1278
1278
  V,
1279
1279
  Ue
1280
- ], pt = [$e], mt = {
1280
+ ], mt = [$e], ht = {
1281
1281
  type: Y,
1282
- selectorModules: X,
1283
- operationModules: pt
1284
- }, ht = gt({
1282
+ selectorModules: pt,
1283
+ operationModules: mt
1284
+ }, gt = _t({
1285
1285
  ownType: Y,
1286
- selectorModules: X,
1287
- operationModules: pt
1286
+ selectorModules: pt,
1287
+ operationModules: mt
1288
1288
  });
1289
1289
  //#endregion
1290
1290
  //#region node_modules/@mfkn/web-extension/lib/content-script/resolvers/locators/factory.js
1291
- function gt(e) {
1291
+ function _t(e) {
1292
1292
  return (t, n, r = []) => ({
1293
1293
  ...Object.fromEntries(e.selectorModules.map((i) => [i.type, (...a) => {
1294
1294
  let o = [...r, {
@@ -1296,7 +1296,7 @@ function gt(e) {
1296
1296
  type: i.type,
1297
1297
  args: a
1298
1298
  }];
1299
- return (i.nextLocatorType ?? e.ownType) === "locator" ? Tn(t, n, o) : ht(t, n, o);
1299
+ return (i.nextLocatorType ?? e.ownType) === "locator" ? En(t, n, o) : gt(t, n, o);
1300
1300
  }])),
1301
1301
  ...Object.fromEntries(e.operationModules.map(({ type: e }) => [e, (...i) => Ae(t, r, e, i, n)])),
1302
1302
  ensure: (e, t = {}) => n ? n(r, e, [t]) : Promise.resolve()
@@ -1304,48 +1304,48 @@ function gt(e) {
1304
1304
  }
1305
1305
  //#endregion
1306
1306
  //#region node_modules/@mfkn/web-extension/lib/content-script/resolvers/locators/selectors/get-by-role.js
1307
- var _t = /* @__PURE__ */ e({
1308
- render: () => bt,
1309
- resolve: () => yt,
1310
- type: () => vt
1311
- }), vt = "getByRole", yt = (e, t) => e.elements.flatMap((e) => [...e.querySelectorAll(`[role="${CSS.escape(t)}"]`)]), bt = (e) => ({ fragment: typeof e == "string" ? `[role="${e.replaceAll("\"", "\\\"")}"]` : "[role]" }), xt = /* @__PURE__ */ e({
1312
- render: () => wt,
1313
- resolve: () => Ct,
1314
- type: () => St
1315
- }), St = "getByText", Ct = (e, t) => e.elements.flatMap((e) => [e, ...e.querySelectorAll("*")]).filter((e) => e.textContent?.includes(t)), wt = (e) => ({ fragment: typeof e == "string" ? `:has-text("${e.replaceAll("\"", "\\\"")}")` : ":has-text(...)" }), Tt = /* @__PURE__ */ e({
1316
- render: () => Ot,
1317
- resolve: () => Dt,
1318
- type: () => Et
1319
- }), Et = "getByTestId", Dt = (e, t) => e.elements.flatMap((e) => [...e.querySelectorAll(`[data-testid="${CSS.escape(t)}"]`)]), Ot = (e) => ({ fragment: typeof e == "string" ? `[data-testid="${e.replaceAll("\"", "\\\"")}"]` : "[data-testid]" }), kt = /* @__PURE__ */ e({
1320
- render: () => Mt,
1321
- resolve: () => jt,
1322
- type: () => At
1323
- }), At = "first", jt = (e) => e.elements.slice(0, 1), Mt = () => ({ fragment: ":first" }), Nt = /* @__PURE__ */ e({
1324
- render: () => Ft,
1325
- resolve: () => Pt,
1307
+ var vt = /* @__PURE__ */ e({
1308
+ render: () => xt,
1309
+ resolve: () => bt,
1310
+ type: () => yt
1311
+ }), yt = "getByRole", bt = (e, t) => e.elements.flatMap((e) => [...e.querySelectorAll(`[role="${CSS.escape(t)}"]`)]), xt = (e) => ({ fragment: typeof e == "string" ? `[role="${e.replaceAll("\"", "\\\"")}"]` : "[role]" }), St = /* @__PURE__ */ e({
1312
+ render: () => Tt,
1313
+ resolve: () => wt,
1314
+ type: () => Ct
1315
+ }), Ct = "getByText", wt = (e, t) => e.elements.flatMap((e) => [e, ...e.querySelectorAll("*")]).filter((e) => e.textContent?.includes(t)), Tt = (e) => ({ fragment: typeof e == "string" ? `:has-text("${e.replaceAll("\"", "\\\"")}")` : ":has-text(...)" }), Et = /* @__PURE__ */ e({
1316
+ render: () => kt,
1317
+ resolve: () => Ot,
1318
+ type: () => Dt
1319
+ }), Dt = "getByTestId", Ot = (e, t) => e.elements.flatMap((e) => [...e.querySelectorAll(`[data-testid="${CSS.escape(t)}"]`)]), kt = (e) => ({ fragment: typeof e == "string" ? `[data-testid="${e.replaceAll("\"", "\\\"")}"]` : "[data-testid]" }), At = /* @__PURE__ */ e({
1320
+ render: () => Nt,
1321
+ resolve: () => Mt,
1322
+ type: () => jt
1323
+ }), jt = "first", Mt = (e) => e.elements.slice(0, 1), Nt = () => ({ fragment: ":first" }), Pt = /* @__PURE__ */ e({
1324
+ render: () => It,
1325
+ resolve: () => Ft,
1326
1326
  type: () => "nth"
1327
- }), Pt = (e, t) => {
1327
+ }), Ft = (e, t) => {
1328
1328
  let n = e.elements.at(t);
1329
1329
  return n ? [n] : [];
1330
- }, Ft = (e) => ({ fragment: typeof e == "number" ? `:nth(${e})` : ":nth(?)" }), It = (e) => {
1330
+ }, It = (e) => ({ fragment: typeof e == "number" ? `:nth(${e})` : ":nth(?)" }), Lt = (e) => {
1331
1331
  let t = Error(e);
1332
1332
  return t.name = "LocatorError", t;
1333
- }, Z = (e) => {
1334
- if (e.length === 0) throw It("No elements found");
1335
- if (e.length > 1) throw It(`Strict mode violation: locator resolved to ${e.length} elements`);
1333
+ }, X = (e) => {
1334
+ if (e.length === 0) throw Lt("No elements found");
1335
+ if (e.length > 1) throw Lt(`Strict mode violation: locator resolved to ${e.length} elements`);
1336
1336
  return e[0];
1337
- }, Lt = /* @__PURE__ */ e({
1338
- permission: () => zt,
1339
- resolve: () => Bt,
1340
- type: () => Rt
1341
- }), Rt = "click", zt = {
1337
+ }, Rt = /* @__PURE__ */ e({
1338
+ permission: () => Bt,
1339
+ resolve: () => Vt,
1340
+ type: () => zt
1341
+ }), zt = "click", Bt = {
1342
1342
  scope: "act.click",
1343
1343
  category: "act",
1344
1344
  severity: 3,
1345
1345
  title: "Click on the page",
1346
1346
  description: "Lets the app press buttons or links for you."
1347
- }, Bt = (e, t = {}) => {
1348
- let n = Z(e.elements), r = n.getBoundingClientRect(), i = t.position?.x ?? .5, a = t.position?.y ?? .5, o = {
1347
+ }, Vt = (e, t = {}) => {
1348
+ let n = X(e.elements), r = n.getBoundingClientRect(), i = t.position?.x ?? .5, a = t.position?.y ?? .5, o = {
1349
1349
  bubbles: !0,
1350
1350
  cancelable: !0,
1351
1351
  composed: !0,
@@ -1369,21 +1369,21 @@ var _t = /* @__PURE__ */ e({
1369
1369
  ...s,
1370
1370
  buttons: 0
1371
1371
  })), n.dispatchEvent(new MouseEvent("mouseup", l)), n.dispatchEvent(new MouseEvent("click", l));
1372
- }, Vt = /* @__PURE__ */ e({
1373
- permission: () => Ut,
1374
- resolve: () => Kt,
1375
- type: () => Ht
1376
- }), Ht = "fill", Ut = {
1372
+ }, Ht = /* @__PURE__ */ e({
1373
+ permission: () => Wt,
1374
+ resolve: () => qt,
1375
+ type: () => Ut
1376
+ }), Ut = "fill", Wt = {
1377
1377
  scope: "act.type",
1378
1378
  category: "act",
1379
1379
  severity: 1,
1380
1380
  title: "Type into a text field",
1381
1381
  description: "Lets the app fill in form fields on your behalf."
1382
- }, Wt = (e, t) => {
1382
+ }, Gt = (e, t) => {
1383
1383
  e._valueTracker?.setValue("");
1384
1384
  let n = e instanceof HTMLTextAreaElement ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype, r = Object.getOwnPropertyDescriptor(n, "value")?.set;
1385
1385
  r ? r.call(e, t) : e.value = t;
1386
- }, Gt = (e, t) => {
1386
+ }, Kt = (e, t) => {
1387
1387
  if (e.type !== "range") return null;
1388
1388
  let n = Number(e.min || 0), r = Number(e.max || 100);
1389
1389
  if (!Number.isFinite(n) || !Number.isFinite(r) || r <= n) return null;
@@ -1421,15 +1421,15 @@ var _t = /* @__PURE__ */ e({
1421
1421
  buttons: 0
1422
1422
  }
1423
1423
  };
1424
- }, Kt = (e, t, n = {}) => {
1425
- let r = Z(e.elements);
1424
+ }, qt = (e, t, n = {}) => {
1425
+ let r = X(e.elements);
1426
1426
  if (r instanceof HTMLInputElement || r instanceof HTMLTextAreaElement) {
1427
- let e = r instanceof HTMLInputElement ? Gt(r, t) : null;
1427
+ let e = r instanceof HTMLInputElement ? Kt(r, t) : null;
1428
1428
  if (e) {
1429
- r.dispatchEvent(new PointerEvent("pointerdown", e.pointerDown)), r.dispatchEvent(new MouseEvent("mousedown", e.mouseDown)), Wt(r, t), r.dispatchEvent(new Event("input", { bubbles: !0 })), r.dispatchEvent(new PointerEvent("pointerup", e.pointerUp)), r.dispatchEvent(new MouseEvent("mouseup", e.mouseUp)), r.dispatchEvent(new Event("change", { bubbles: !0 }));
1429
+ r.dispatchEvent(new PointerEvent("pointerdown", e.pointerDown)), r.dispatchEvent(new MouseEvent("mousedown", e.mouseDown)), Gt(r, t), r.dispatchEvent(new Event("input", { bubbles: !0 })), r.dispatchEvent(new PointerEvent("pointerup", e.pointerUp)), r.dispatchEvent(new MouseEvent("mouseup", e.mouseUp)), r.dispatchEvent(new Event("change", { bubbles: !0 }));
1430
1430
  return;
1431
1431
  }
1432
- Wt(r, t), r.dispatchEvent(new Event("input", { bubbles: !0 })), r.dispatchEvent(new Event("change", { bubbles: !0 }));
1432
+ Gt(r, t), r.dispatchEvent(new Event("input", { bubbles: !0 })), r.dispatchEvent(new Event("change", { bubbles: !0 }));
1433
1433
  return;
1434
1434
  }
1435
1435
  if (r instanceof HTMLElement && r.isContentEditable) {
@@ -1437,18 +1437,18 @@ var _t = /* @__PURE__ */ e({
1437
1437
  return;
1438
1438
  }
1439
1439
  throw Error(`fill: element <${r.tagName.toLowerCase()}> is not fillable`);
1440
- }, qt = /* @__PURE__ */ e({
1441
- permission: () => Yt,
1442
- resolve: () => Xt,
1443
- type: () => Jt
1444
- }), Jt = "hover", Yt = {
1440
+ }, Jt = /* @__PURE__ */ e({
1441
+ permission: () => Xt,
1442
+ resolve: () => Zt,
1443
+ type: () => Yt
1444
+ }), Yt = "hover", Xt = {
1445
1445
  scope: "act.hover",
1446
1446
  category: "act",
1447
1447
  severity: 1,
1448
1448
  title: "Hover over the page",
1449
1449
  description: "Lets the app point at things to reveal menus or tooltips."
1450
- }, Xt = (e, t = {}) => {
1451
- let n = Z(e.elements), r = n.getBoundingClientRect(), i = {
1450
+ }, Zt = (e, t = {}) => {
1451
+ let n = X(e.elements), r = n.getBoundingClientRect(), i = {
1452
1452
  bubbles: !0,
1453
1453
  cancelable: !0,
1454
1454
  composed: !0,
@@ -1467,115 +1467,115 @@ var _t = /* @__PURE__ */ e({
1467
1467
  ...i,
1468
1468
  bubbles: !1
1469
1469
  })), n.dispatchEvent(new MouseEvent("mouseover", i)), n.dispatchEvent(new PointerEvent("pointermove", a)), n.dispatchEvent(new MouseEvent("mousemove", i));
1470
- }, Zt = /* @__PURE__ */ e({
1471
- permission: () => $t,
1472
- resolve: () => en,
1473
- type: () => Qt
1474
- }), Qt = "textContent", $t = {
1470
+ }, Qt = /* @__PURE__ */ e({
1471
+ permission: () => en,
1472
+ resolve: () => tn,
1473
+ type: () => $t
1474
+ }), $t = "textContent", en = {
1475
1475
  scope: "read.text",
1476
1476
  category: "read",
1477
1477
  severity: 1,
1478
1478
  title: "Read text from the page",
1479
1479
  description: "Lets the app see the text shown on this page."
1480
- }, en = (e, t = {}) => Z(e.elements).textContent, tn = /* @__PURE__ */ e({
1481
- permission: () => rn,
1482
- resolve: () => an,
1483
- type: () => nn
1484
- }), nn = "isVisible", rn = {
1480
+ }, tn = (e, t = {}) => X(e.elements).textContent, nn = /* @__PURE__ */ e({
1481
+ permission: () => an,
1482
+ resolve: () => on,
1483
+ type: () => rn
1484
+ }), rn = "isVisible", an = {
1485
1485
  scope: "read.visible",
1486
1486
  category: "read",
1487
1487
  severity: 0,
1488
1488
  title: "See what’s visible on the page",
1489
1489
  description: "Lets the app check which elements are currently on screen."
1490
- }, an = (e, t = {}) => {
1491
- let n = Z(e.elements);
1490
+ }, on = (e, t = {}) => {
1491
+ let n = X(e.elements);
1492
1492
  if (!(n instanceof HTMLElement)) return !0;
1493
1493
  let r = n.ownerDocument.defaultView?.getComputedStyle(n);
1494
1494
  if (r?.display === "none" || r?.visibility === "hidden") return !1;
1495
1495
  let i = n.getBoundingClientRect();
1496
1496
  return i.width > 0 && i.height > 0;
1497
- }, on = /* @__PURE__ */ e({
1498
- permission: () => cn,
1499
- resolve: () => ln,
1500
- type: () => sn
1501
- }), sn = "count", cn = {
1497
+ }, sn = /* @__PURE__ */ e({
1498
+ permission: () => ln,
1499
+ resolve: () => un,
1500
+ type: () => cn
1501
+ }), cn = "count", ln = {
1502
1502
  scope: "read.count",
1503
1503
  category: "read",
1504
1504
  severity: 0,
1505
1505
  title: "Count items on the page",
1506
1506
  description: "Lets the app count how many matching elements are present."
1507
- }, ln = (e, t = {}) => e.elements.length, un = /* @__PURE__ */ e({
1508
- permission: () => fn,
1509
- resolve: () => pn,
1510
- type: () => dn
1511
- }), dn = "exists", fn = {
1507
+ }, un = (e, t = {}) => e.elements.length, dn = /* @__PURE__ */ e({
1508
+ permission: () => pn,
1509
+ resolve: () => mn,
1510
+ type: () => fn
1511
+ }), fn = "exists", pn = {
1512
1512
  scope: "read.check",
1513
1513
  category: "read",
1514
1514
  severity: 0,
1515
1515
  title: "Check if something is on the page",
1516
1516
  description: "Lets the app test whether a specific element exists."
1517
- }, pn = (e, t = {}) => e.elements.length > 0, mn = /* @__PURE__ */ e({
1518
- permission: () => gn,
1519
- resolve: () => _n,
1520
- type: () => hn
1521
- }), hn = "getAttribute", gn = {
1517
+ }, mn = (e, t = {}) => e.elements.length > 0, hn = /* @__PURE__ */ e({
1518
+ permission: () => _n,
1519
+ resolve: () => vn,
1520
+ type: () => gn
1521
+ }), gn = "getAttribute", _n = {
1522
1522
  scope: "read.info",
1523
1523
  category: "read",
1524
1524
  severity: 1,
1525
1525
  title: "Read info from the page",
1526
1526
  description: "Lets the app read the href value from a part of the page."
1527
- }, _n = (e, t, n = {}) => Z(e.elements).getAttribute(t), vn = /* @__PURE__ */ e({
1528
- permission: () => bn,
1529
- resolve: () => xn,
1530
- type: () => yn
1531
- }), yn = "videoElement", bn = {
1527
+ }, vn = (e, t, n = {}) => X(e.elements).getAttribute(t), yn = /* @__PURE__ */ e({
1528
+ permission: () => xn,
1529
+ resolve: () => Sn,
1530
+ type: () => bn
1531
+ }), bn = "videoElement", xn = {
1532
1532
  scope: "media.video",
1533
1533
  category: "media",
1534
1534
  severity: 0,
1535
1535
  title: "Control video playback",
1536
1536
  description: "Lets the app play, pause, seek, and read the video on the page."
1537
- }, xn = (e, t = {}) => {
1538
- let n = Z(e.elements);
1537
+ }, Sn = (e, t = {}) => {
1538
+ let n = X(e.elements);
1539
1539
  if (!(n instanceof HTMLVideoElement)) throw Error(`videoElement: expected <video>, got <${n.tagName.toLowerCase()}>`);
1540
1540
  return C(n);
1541
- }, Q = "locator", Sn = [
1541
+ }, Z = "locator", Cn = [
1542
1542
  L,
1543
1543
  {
1544
1544
  ...V,
1545
1545
  nextLocatorType: "frameLocator"
1546
1546
  },
1547
- _t,
1548
- xt,
1549
- Tt,
1550
- kt,
1551
- Nt
1552
- ], Cn = [
1553
- Lt,
1554
- Vt,
1555
- qt,
1556
- Zt,
1557
- tn,
1558
- on,
1559
- un,
1560
- mn,
1561
- vn
1562
- ], wn = {
1563
- type: Q,
1564
- selectorModules: Sn,
1565
- operationModules: Cn
1566
- }, Tn = gt({
1567
- ownType: Q,
1568
- selectorModules: Sn,
1569
- operationModules: Cn
1547
+ vt,
1548
+ St,
1549
+ Et,
1550
+ At,
1551
+ Pt
1552
+ ], wn = [
1553
+ Rt,
1554
+ Ht,
1555
+ Jt,
1556
+ Qt,
1557
+ nn,
1558
+ sn,
1559
+ dn,
1560
+ hn,
1561
+ yn
1562
+ ], Tn = {
1563
+ type: Z,
1564
+ selectorModules: Cn,
1565
+ operationModules: wn
1566
+ }, En = _t({
1567
+ ownType: Z,
1568
+ selectorModules: Cn,
1569
+ operationModules: wn
1570
1570
  });
1571
1571
  (() => {
1572
- let e = {}, t = [...wn.selectorModules, ...mt.selectorModules];
1572
+ let e = {}, t = [...Tn.selectorModules, ...ht.selectorModules];
1573
1573
  for (let n of t) n.render && !(n.type in e) && (e[n.type] = n.render);
1574
1574
  return e;
1575
1575
  })();
1576
1576
  //#endregion
1577
1577
  //#region node_modules/@mfkn/web-extension/lib/lib/frame-url.js
1578
- var En = (e) => {
1578
+ var Dn = (e) => {
1579
1579
  if (!e || e === "about:blank") return !1;
1580
1580
  let t;
1581
1581
  try {
@@ -1587,44 +1587,44 @@ var En = (e) => {
1587
1587
  if (t.protocol === "about:") return !1;
1588
1588
  let n = t.hostname, r = (e) => n === e || n.endsWith(`.${e}`);
1589
1589
  return r("fkn.app") || r("fkn.dev") || r("sdbx.app");
1590
- }, $ = (e) => {
1591
- if (En(e)) throw Error("attachFrame: refusing to target the extension's own pages or an FKN platform origin");
1592
- }, Dn = ({ src: e, domains: t, lockdown: n }) => {
1590
+ }, Q = (e) => {
1591
+ if (Dn(e)) throw Error("attachFrame: refusing to target the extension's own pages or an FKN platform origin");
1592
+ }, On = ({ src: e, domains: t, lockdown: n }) => {
1593
1593
  if (!(!n || t.length) && e && e !== "about:blank") throw Error("attachFrame: lockdown needs domains when the frame already has a src; pass domains or load it via goto");
1594
- }, On = {
1594
+ }, kn = {
1595
1595
  scope: "embed.iframe",
1596
1596
  category: "embed",
1597
1597
  severity: 0,
1598
1598
  title: "Load another website inside this app",
1599
1599
  description: "Lets the app embed external pages directly inside its own view."
1600
- }, kn = {
1600
+ }, An = {
1601
1601
  scope: "embed.open",
1602
1602
  category: "embed",
1603
1603
  severity: 0,
1604
1604
  title: "Open a website inside this app",
1605
1605
  description: "Lets the app navigate to another site without leaving its window."
1606
- }, An = (e) => {
1607
- let t = ht(e.executeLocator, e.ensurePermission), n = (t, n = {}) => ($(t), e.goto(t, n)), r = () => e.url();
1606
+ }, jn = (e) => {
1607
+ let t = gt(e.executeLocator, e.ensurePermission), n = (t, n = {}) => (Q(t), e.goto(t, n)), r = () => e.url();
1608
1608
  return {
1609
1609
  ...t,
1610
1610
  goto: n,
1611
1611
  url: r
1612
1612
  };
1613
- }, jn = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", Mn = async ({ iframe: e, domains: t = [], syncCookies: n = !0, lockdown: r = !1 }) => {
1613
+ }, Mn = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", Nn = async ({ iframe: e, domains: t = [], syncCookies: n = !0, lockdown: r = !1 }) => {
1614
1614
  let i = crypto.randomUUID();
1615
- if ($(e.src), Dn({
1615
+ if (Q(e.src), On({
1616
1616
  src: e.src,
1617
1617
  domains: t,
1618
1618
  lockdown: r
1619
1619
  }), await j(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
1620
- e.dispatchEvent(new CustomEvent(jn, { detail: i }));
1620
+ e.dispatchEvent(new CustomEvent(Mn, { detail: i }));
1621
1621
  let { executeLocator: a, ensureLocatorPermission: o, goto: s } = await M.attachFrame({
1622
1622
  marker: i,
1623
1623
  domains: t,
1624
1624
  syncCookies: n,
1625
1625
  lockdown: r
1626
1626
  });
1627
- return An({
1627
+ return jn({
1628
1628
  executeLocator: a,
1629
1629
  ensurePermission: o,
1630
1630
  goto: (e, t = {}) => s({
@@ -1633,11 +1633,11 @@ var En = (e) => {
1633
1633
  }),
1634
1634
  url: () => e.src
1635
1635
  });
1636
- }, Nn = { request: (e) => M.requestPermissions(e.map((e) => ({
1636
+ }, Pn = { request: (e) => M.requestPermissions(e.map((e) => ({
1637
1637
  key: e.key,
1638
1638
  scope: e.scope ?? "",
1639
1639
  reason: e.reason
1640
- }))) }, Pn = ["fkn.app", "fkn.dev"], Fn = (e) => {
1640
+ }))) }, Fn = ["fkn.app", "fkn.dev"], $ = (e) => {
1641
1641
  let t = typeof e == "string" ? e : e instanceof URL ? e.href : e.url, n;
1642
1642
  try {
1643
1643
  n = new URL(t);
@@ -1645,7 +1645,36 @@ var En = (e) => {
1645
1645
  return;
1646
1646
  }
1647
1647
  let r = n.hostname;
1648
- if (Pn.some((e) => r === e || r.endsWith(`.${e}`))) throw Error(`fetch refuses FKN platform domains (${r})`);
1649
- }, In = (e, n) => (Fn(e), t.then((t) => t.cloud.fetch(e, n)));
1648
+ if (Fn.some((e) => r === e || r.endsWith(`.${e}`))) throw Error(`fetch refuses FKN platform domains (${r})`);
1649
+ }, In = async (e) => {
1650
+ if (e != null) return typeof e == "string" || e instanceof ArrayBuffer || ArrayBuffer.isView(e) ? e : new Request("https://body.invalid/", {
1651
+ method: "POST",
1652
+ body: e,
1653
+ duplex: "half"
1654
+ }).arrayBuffer();
1655
+ }, Ln = async (e) => {
1656
+ if (e.method === "GET" || e.method === "HEAD") return;
1657
+ let t = await e.clone().arrayBuffer();
1658
+ return t.byteLength ? t : void 0;
1659
+ }, Rn = async (e, n) => {
1660
+ if ($(e), typeof e == "object" && e && !(e instanceof URL) && typeof e.url == "string") {
1661
+ let r = e, i = {};
1662
+ r.headers.forEach((e, t) => {
1663
+ i[t] = e;
1664
+ });
1665
+ let a = await In(n?.body === void 0 ? await Ln(r) : n.body);
1666
+ return t.then((e) => e.cloud.fetch(r.url, {
1667
+ ...n,
1668
+ method: n?.method ?? r.method,
1669
+ headers: n?.headers ?? i,
1670
+ body: a
1671
+ }));
1672
+ }
1673
+ let r = e instanceof URL ? e.href : e, i = await In(n?.body);
1674
+ return t.then((e) => e.cloud.fetch(r, n?.body === void 0 ? n : {
1675
+ ...n,
1676
+ body: i
1677
+ }));
1678
+ };
1650
1679
  //#endregion
1651
- export { ce as A, w as B, be as C, ge as D, P as E, ae as F, d as H, j as I, D as L, fe as M, O as N, le as O, k as P, T as R, xe as S, _e as T, E as V, Le as _, Mn as a, F as b, kn as c, En as d, wn as f, dt as g, Y as h, jn as i, N as j, ue as k, $ as l, mt as m, Fn as n, On as o, Q as p, Nn as r, An as s, In as t, Dn as u, I as v, ve as w, ye as x, we as y, C as z };
1680
+ export { ce as A, w as B, be as C, ge as D, P as E, ae as F, d as H, j as I, D as L, fe as M, O as N, le as O, k as P, T as R, xe as S, _e as T, E as V, Le as _, Nn as a, F as b, An as c, Dn as d, Tn as f, dt as g, Y as h, Mn as i, N as j, ue as k, Q as l, ht as m, $ as n, kn as o, Z as p, Pn as r, jn as s, Rn as t, On as u, I as v, ve as w, ye as x, we as y, C as z };
@@ -1 +0,0 @@
1
- const e=require("./rolldown-runtime-Doa5O59j.cjs"),t=require("./proxy-Du95zAKk.cjs"),n=require("./api-DD5v1qP9.cjs"),r=require("./dns.cjs"),i=require("./cloud/fs.cjs"),a=require("./net-BPpdNdpy.cjs"),o=require("./dgram-DcvdNkg6.cjs"),s=require("./http.cjs");let c=require("osra");var l=`autoplay; fullscreen; encrypted-media; picture-in-picture; clipboard-read; clipboard-write`,u=2e4,d=65e3,f=3e4,p=5e3,m=new Set([`videoElement`]),h=()=>`https://fkn.app`,g=e=>!e||e===`about:blank`,_=e=>e?``:`incognito-${crypto.randomUUID()}`,v=({target:e,session:t})=>{let n=new URL(`/attach-frame`,h());return e&&n.searchParams.set(`url`,e),t&&n.searchParams.set(`session`,t),n.href},y=(e,t,n)=>{let r,i=new Promise((e,i)=>{r=setTimeout(()=>i(Error(n)),t)});return Promise.race([e,i]).finally(()=>clearTimeout(r))},b=(e,t)=>{let n=()=>{a(),t()},r=e.parentNode,i=new MutationObserver(()=>{(!e.isConnected||e.parentNode!==r)&&(a(),t())}),a=()=>{window.removeEventListener(`pagehide`,n),i.disconnect()};window.addEventListener(`pagehide`,n,{once:!0}),r&&i.observe(r,{childList:!0}),e.isConnected||(a(),t())},x=()=>Object.assign(Error(`cloud.attachFrame: the attached iframe left the document or was reloaded; attach a fresh iframe`),{name:t.v}),S=(e,t)=>{let n=[...e.split(`;`),...t.split(`;`)].map(e=>e.trim()).filter(Boolean);return[...new Set(n)].join(`; `)},C=[300,1200,4e3],w=e=>{let t=()=>{if(!e.isConnected)return;let t=e.style.height,n=e.getBoundingClientRect();n.height&&(e.style.height=`${n.height-1}px`,setTimeout(()=>{e.style.height=t},50))};t();for(let e of C)setTimeout(t,e)},T=e=>{let t=e.getAttribute(`sandbox`);if(t===null)return;let n=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),r=[`allow-scripts`,`allow-same-origin`].filter(e=>!n.has(e));if(r.length)throw Error(`cloud.attachFrame: the iframe's sandbox attribute must include ${r.join(` and `)} for the render proxy to load`)},E=async({iframe:e,domains:n=[],syncCookies:r=!0,lockdown:i=!1})=>{if(typeof window>`u`)throw Error(`cloud.attachFrame needs a window realm`);if(i)throw Error(`cloud.attachFrame does not support lockdown; use the extension backend for a sealed frame`);if(!e.isConnected)throw Error(`cloud.attachFrame: the iframe must be connected to the document before attaching`);T(e);let a=e.getAttribute(`src`)??``,o=(()=>{if(g(a))return null;try{return new URL(e.src||a,location.href)}catch{throw Error(`cloud.attachFrame: the iframe src is not a valid URL: ${a}`)}})();if(o){let e=new URL(`/attach-frame`,h());if(o.origin===e.origin&&o.pathname===e.pathname)throw Error(`cloud.attachFrame: this iframe is already attached; navigate with the Frame returned by that attach or use a fresh iframe`)}let s=o?.href??``;s&&t.l(s);let C=s,E=_(r),D=new AbortController,O=e.referrerPolicy,k=e.allow;if(e.referrerPolicy=`origin`,e.allow=S(l,e.allow),e.src=v({target:s,session:E}),!e.contentWindow)throw Error(`cloud.attachFrame: the iframe window is not available`);try{let n=await y((0,c.expose)({},{key:`fkn-attach-frame`,origin:h(),transport:{receive:window,emit:e.contentWindow},unregisterSignal:D.signal}),u,`cloud.attachFrame: timed out connecting to the render proxy page`);await y(n.ready(),d,`cloud.attachFrame: the render proxy never became ready`),s&&w(e),b(e,()=>D.abort());let r=e.contentWindow,i=()=>{if(!(!D.signal.aborted&&e.isConnected&&e.contentWindow===r))throw D.abort(),x()};return t.s({executeLocator:(e,r,a)=>m.has(r)?Promise.reject(t.y(r,`cloud`)):(i(),n.executeLocator(e,r,a)),ensurePermission:async()=>{},goto:async(t,r={})=>{let a=new URL(t,location.href).href;i();let{timeoutMs:o}=r;await y(n.goto(a,r),(o??f)+p,`cloud.attachFrame: the render proxy did not answer goto; the frame may have been detached or its page reloaded`),C=a,w(e)},url:()=>C})}catch(t){throw D.abort(),e.referrerPolicy=O,e.allow=k,e.src=s||`about:blank`,t}},D=()=>typeof window<`u`&&!0,O=async()=>{let e=await n.t.then(e=>e.cloud.quota());return{premium:e.premium,overQuota:e.overQuota,throttled:e.overQuota&&!e.premium,usedBytes:e.usedBytes,limitBytes:e.limitBytes,remainingBytes:e.remaining,bytesPerSecond:e.bytesPerSecond,bitsPerSecond:e.bytesPerSecond*8}},k=e.n({attachFrame:()=>E,available:()=>A,dgram:()=>o.i,dns:()=>r.t,fetch:()=>t.t,fs:()=>i.t,http:()=>s.t,net:()=>a.s,quota:()=>O}),A=()=>n.n;Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return A}});
package/cloud-D2s-dPZy.js DELETED
@@ -1,126 +0,0 @@
1
- import { n as e } from "./rolldown-runtime-DF993M8W.js";
2
- import { l as t, s as n, t as r, v as i, y as a } from "./proxy-Cusnx9Ex.js";
3
- import { n as o, t as s } from "./api--bnCFd4w.js";
4
- import { t as c } from "./dns.js";
5
- import { t as l } from "./cloud/fs.js";
6
- import { s as u } from "./net-BFYMbE4N.js";
7
- import { i as d } from "./dgram-CKRbKVzG.js";
8
- import { t as f } from "./http.js";
9
- import { expose as p } from "osra";
10
- //#region src/lib/cloud/frame.ts
11
- var m = "autoplay; fullscreen; encrypted-media; picture-in-picture; clipboard-read; clipboard-write", h = 2e4, g = 65e3, _ = 3e4, v = 5e3, y = /* @__PURE__ */ new Set(["videoElement"]), b = () => "https://fkn.app", x = (e) => !e || e === "about:blank", S = (e) => e ? "" : `incognito-${crypto.randomUUID()}`, C = ({ target: e, session: t }) => {
12
- let n = new URL("/attach-frame", b());
13
- return e && n.searchParams.set("url", e), t && n.searchParams.set("session", t), n.href;
14
- }, w = (e, t, n) => {
15
- let r, i = new Promise((e, i) => {
16
- r = setTimeout(() => i(Error(n)), t);
17
- });
18
- return Promise.race([e, i]).finally(() => clearTimeout(r));
19
- }, T = (e, t) => {
20
- let n = () => {
21
- a(), t();
22
- }, r = e.parentNode, i = new MutationObserver(() => {
23
- (!e.isConnected || e.parentNode !== r) && (a(), t());
24
- }), a = () => {
25
- window.removeEventListener("pagehide", n), i.disconnect();
26
- };
27
- window.addEventListener("pagehide", n, { once: !0 }), r && i.observe(r, { childList: !0 }), e.isConnected || (a(), t());
28
- }, E = () => Object.assign(/* @__PURE__ */ Error("cloud.attachFrame: the attached iframe left the document or was reloaded; attach a fresh iframe"), { name: i }), D = (e, t) => {
29
- let n = [...e.split(";"), ...t.split(";")].map((e) => e.trim()).filter(Boolean);
30
- return [...new Set(n)].join("; ");
31
- }, O = [
32
- 300,
33
- 1200,
34
- 4e3
35
- ], k = (e) => {
36
- let t = () => {
37
- if (!e.isConnected) return;
38
- let t = e.style.height, n = e.getBoundingClientRect();
39
- n.height && (e.style.height = `${n.height - 1}px`, setTimeout(() => {
40
- e.style.height = t;
41
- }, 50));
42
- };
43
- t();
44
- for (let e of O) setTimeout(t, e);
45
- }, A = (e) => {
46
- let t = e.getAttribute("sandbox");
47
- if (t === null) return;
48
- let n = new Set(t.toLowerCase().split(/\s+/).filter(Boolean)), r = ["allow-scripts", "allow-same-origin"].filter((e) => !n.has(e));
49
- if (r.length) throw Error(`cloud.attachFrame: the iframe's sandbox attribute must include ${r.join(" and ")} for the render proxy to load`);
50
- }, j = async ({ iframe: e, domains: r = [], syncCookies: i = !0, lockdown: o = !1 }) => {
51
- if (typeof window > "u") throw Error("cloud.attachFrame needs a window realm");
52
- if (o) throw Error("cloud.attachFrame does not support lockdown; use the extension backend for a sealed frame");
53
- if (!e.isConnected) throw Error("cloud.attachFrame: the iframe must be connected to the document before attaching");
54
- A(e);
55
- let s = e.getAttribute("src") ?? "", c = (() => {
56
- if (x(s)) return null;
57
- try {
58
- return new URL(e.src || s, location.href);
59
- } catch {
60
- throw Error(`cloud.attachFrame: the iframe src is not a valid URL: ${s}`);
61
- }
62
- })();
63
- if (c) {
64
- let e = new URL("/attach-frame", b());
65
- if (c.origin === e.origin && c.pathname === e.pathname) throw Error("cloud.attachFrame: this iframe is already attached; navigate with the Frame returned by that attach or use a fresh iframe");
66
- }
67
- let l = c?.href ?? "";
68
- l && t(l);
69
- let u = l, d = S(i), f = new AbortController(), O = e.referrerPolicy, j = e.allow;
70
- if (e.referrerPolicy = "origin", e.allow = D(m, e.allow), e.src = C({
71
- target: l,
72
- session: d
73
- }), !e.contentWindow) throw Error("cloud.attachFrame: the iframe window is not available");
74
- try {
75
- let t = await w(p({}, {
76
- key: "fkn-attach-frame",
77
- origin: b(),
78
- transport: {
79
- receive: window,
80
- emit: e.contentWindow
81
- },
82
- unregisterSignal: f.signal
83
- }), h, "cloud.attachFrame: timed out connecting to the render proxy page");
84
- await w(t.ready(), g, "cloud.attachFrame: the render proxy never became ready"), l && k(e), T(e, () => f.abort());
85
- let r = e.contentWindow, i = () => {
86
- if (!(!f.signal.aborted && e.isConnected && e.contentWindow === r)) throw f.abort(), E();
87
- };
88
- return n({
89
- executeLocator: (e, n, r) => y.has(n) ? Promise.reject(a(n, "cloud")) : (i(), t.executeLocator(e, n, r)),
90
- ensurePermission: async () => {},
91
- goto: async (n, r = {}) => {
92
- let a = new URL(n, location.href).href;
93
- i();
94
- let { timeoutMs: o } = r;
95
- await w(t.goto(a, r), (o ?? _) + v, "cloud.attachFrame: the render proxy did not answer goto; the frame may have been detached or its page reloaded"), u = a, k(e);
96
- },
97
- url: () => u
98
- });
99
- } catch (t) {
100
- throw f.abort(), e.referrerPolicy = O, e.allow = j, e.src = l || "about:blank", t;
101
- }
102
- }, M = () => typeof window < "u" && !0, N = async () => {
103
- let e = await s.then((e) => e.cloud.quota());
104
- return {
105
- premium: e.premium,
106
- overQuota: e.overQuota,
107
- throttled: e.overQuota && !e.premium,
108
- usedBytes: e.usedBytes,
109
- limitBytes: e.limitBytes,
110
- remainingBytes: e.remaining,
111
- bytesPerSecond: e.bytesPerSecond,
112
- bitsPerSecond: e.bytesPerSecond * 8
113
- };
114
- }, P = /* @__PURE__ */ e({
115
- attachFrame: () => j,
116
- available: () => F,
117
- dgram: () => d,
118
- dns: () => c,
119
- fetch: () => r,
120
- fs: () => l,
121
- http: () => f,
122
- net: () => u,
123
- quota: () => N
124
- }), F = () => o;
125
- //#endregion
126
- export { M as a, j as i, P as n, N as r, F as t };
@@ -1 +0,0 @@
1
- let e=require("buffer");var t={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`},n=(e,n)=>{if(n)return n;let r=e.split(`/`).pop()??``,i=r.lastIndexOf(`.`);if(!(i<=0))return t[r.slice(i+1).toLowerCase()]},r=(e,t)=>({size:e,mtimeMs:t,mtime:new Date(t),atimeMs:t,ctimeMs:t,mode:420,isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}),i=(e=0)=>({size:0,mtimeMs:e,mtime:new Date(e),atimeMs:e,ctimeMs:e,mode:493,isFile:()=>!1,isDirectory:()=>!0,isSymbolicLink:()=>!1}),a=(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},o=e=>{let t=[];for(let n of e.split(`/`))if(!(!n||n===`.`)){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},s=e=>e.split(`/`).slice(0,-1).join(`/`),c=e=>typeof e==`string`?e:e instanceof URL?decodeURIComponent(e.pathname):e.toString(),l=e=>typeof e==`string`?e:e?.encoding??void 0,u=e=>typeof e==`object`?e?.contentType:void 0,d=e=>typeof e==`object`&&!!e?.recursive,f=(t,n)=>{let r=l(n);return r?e.Buffer.from(t).toString(r):e.Buffer.from(t)},p=(t,n)=>{if(typeof t==`string`)return new Uint8Array(e.Buffer.from(t,l(n)??`utf8`));if(t instanceof Uint8Array)return t.slice();if(t instanceof ArrayBuffer)return new Uint8Array(t).slice();if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength).slice();throw TypeError(`The "data" argument must be of type string, Buffer, TypedArray, or DataView`)},m=e=>{let t=new Map([[``,{kind:`dir`,mtimeMs:0}]]),c=new Set,l=new Set,u=()=>Date.now(),d=e=>{if(!e)return;let n=e.split(`/`),r=``;for(let e of n){r=r?`${r}/${e}`:e;let n=t.get(r);if(!n)t.set(r,{kind:`dir`,mtimeMs:u()});else if(n.kind===`file`)throw a(`ENOTDIR`,r,`mkdir`)}},f,p=()=>f??=(async()=>{let n=await e.list().catch(()=>[]);for(let r of n)try{let n=o(r.path);if(c.has(n))continue;let i=await(await e.readFile(r.path)).arrayBuffer();if(c.has(n)||l.has(n))continue;d(s(n));let a=Date.parse(r.updatedAt??``);t.set(n,{kind:`file`,data:new Uint8Array(i),mtimeMs:Number.isFinite(a)?a:u(),contentType:r.contentType??void 0})}catch{}})(),m=async()=>{f=void 0,await p()},h=async()=>{let r=[...c].map(async r=>{let i=t.get(r);if(i?.kind!==`file`){c.delete(r);return}let a=i.data,o=n(r,i.contentType);try{await e.writeFile(r,a,o?{contentType:o}:void 0);let n=t.get(r);n?.kind===`file`&&n.data===a&&c.delete(r)}catch{}}),i=[...l].map(async t=>{try{await e.remove(t),l.delete(t)}catch{}});await Promise.all([...r,...i])},g,_=()=>{g||=setTimeout(()=>{g=void 0,h().catch(()=>{})},250)};typeof addEventListener<`u`&&(addEventListener(`pagehide`,()=>{h().catch(()=>{})}),addEventListener(`visibilitychange`,()=>{typeof document<`u`&&document.visibilityState===`hidden`&&h().catch(()=>{})}));let v=e=>e.kind===`file`?r(e.data.byteLength,e.mtimeMs):i(e.mtimeMs),y=e=>t.has(o(e)),b=e=>{let n=t.get(o(e));if(!n)throw a(`ENOENT`,e,`stat`);return v(n)},x=e=>{let n=t.get(o(e));if(!n)throw a(`ENOENT`,e,`open`);if(n.kind===`dir`)throw a(`EISDIR`,e,`read`);return n.data},S=(e,t)=>{let n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e,0),n.set(t,e.byteLength),n},C=(e,n,r,i)=>{let f=o(e);if(!f)throw a(`EISDIR`,e,`open`);let p=t.get(f);if(p?.kind===`dir`)throw a(`EISDIR`,e,`open`);d(s(f));let m=r&&p?.kind===`file`?S(p.data,n):n;t.set(f,{kind:`file`,data:m,mtimeMs:u(),contentType:i??(p?.kind===`file`?p.contentType:void 0)}),c.add(f),l.delete(f),_()},w=(e,n)=>{let r=o(e);if(r){if(t.has(r)){if(n)return;throw a(`EEXIST`,e,`mkdir`)}if(!n&&!t.has(s(r)))throw a(`ENOENT`,e,`mkdir`);d(r)}},T=e=>{let n=o(e),r=t.get(n);if(!r)throw a(`ENOENT`,e,`scandir`);if(r.kind===`file`)throw a(`ENOTDIR`,e,`scandir`);let i=n?`${n}/`:``,s=new Set;for(let e of t.keys()){if(!e||!e.startsWith(i))continue;let t=e.slice(i.length);t&&s.add(t.split(`/`)[0])}return[...s]},E=(e,{op:n,recursive:r,force:i})=>{let s=o(e),u=t.get(s);if(!u){if(i||n===`rmdir`&&r)return;throw a(`ENOENT`,e,n===`rmdir`?`rmdir`:`unlink`)}if(n===`unlink`&&u.kind===`dir`)throw a(`EISDIR`,e,`unlink`);if(n===`rmdir`&&u.kind===`file`)throw a(`ENOTDIR`,e,`rmdir`);if(n===`rm`&&u.kind===`dir`&&!r)throw a(`ERR_FS_EISDIR`,e,`rm`);let d=`${s}/`,f=[...t.keys()].filter(e=>e.startsWith(d));if(f.length&&!r)throw a(`ENOTEMPTY`,e,`rmdir`);for(let e of[s,...f]){let n=t.get(e);t.delete(e),n?.kind===`file`&&(c.delete(e),l.add(e))}_()};return{mount:p,remount:m,flush:h,exists:y,stat:b,readFile:x,writeFile:C,mkdir:w,readdir:T,remove:E,rename:(e,n)=>{let r=o(e),i=o(n);if(!r)throw a(`EBUSY`,e,`rename`);if(i===r||i.startsWith(`${r}/`))throw a(`EINVAL`,e,`rename`);let u=t.get(r);if(!u)throw a(`ENOENT`,e,`rename`);let f=t.get(i);if(f){if(f.kind!==u.kind)throw a(u.kind===`dir`?`ENOTDIR`:`EISDIR`,n,`rename`);E(i,{op:`rm`,recursive:!0,force:!0})}d(s(i));let p=`${r}/`,m=[r,...[...t.keys()].filter(e=>e.startsWith(p))];for(let e of m){let n=i+e.slice(r.length),a=t.get(e);t.set(n,a),t.delete(e),a.kind===`file`&&(c.add(n),l.delete(n),c.delete(e),l.add(e))}_()}}},h=(e,t)=>typeof e==`function`?e:t,g=e=>typeof e==`function`?void 0:e,_=(e,t)=>{e.then(e=>t(null,e),e=>t(e))},v=e=>{let t=m(e),n=(e,n)=>f(t.readFile(c(e)),n),r=(e,n,r)=>t.writeFile(c(e),p(n,r),!1,u(r)),i=(e,n,r)=>t.writeFile(c(e),p(n,r),!0,u(r)),o=e=>t.exists(c(e)),s=e=>t.stat(c(e)),l=e=>t.readdir(c(e)),_=(e,n)=>t.mkdir(c(e),d(n)),v=(e,n)=>t.remove(c(e),{op:`rm`,...n}),y=(e,n)=>t.remove(c(e),{op:`rmdir`,...n}),b=e=>t.remove(c(e),{op:`unlink`}),x=(e,n)=>t.rename(c(e),c(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:o,statSync:s,lstatSync:s,readdirSync:l,mkdirSync:_,rmSync:v,rmdirSync:y,unlinkSync:b,renameSync:x,readFile:(e,n,r)=>S(()=>f(t.readFile(c(e)),g(n)),h(n,r)),writeFile:(e,n,r,i)=>S(()=>t.writeFile(c(e),p(n,g(r)),!1,u(g(r))),h(r,i)),appendFile:(e,n,r,i)=>S(()=>t.writeFile(c(e),p(n,g(r)),!0,u(g(r))),h(r,i)),stat:(e,n)=>S(()=>t.stat(c(e)),n),readdir:(e,n,r)=>S(()=>t.readdir(c(e)),h(n,r)),mkdir:(e,n,r)=>S(()=>t.mkdir(c(e),d(g(n))),h(n,r)),rm:(e,n,r)=>S(()=>t.remove(c(e),{op:`rm`,...g(n)}),h(n,r)),unlink:(e,n)=>S(()=>t.remove(c(e),{op:`unlink`}),n),rename:(e,n,r)=>S(()=>t.rename(c(e),c(n)),r),exists:(e,n)=>{t.mount().finally(()=>n(t.exists(c(e))))},promises:{readFile:(e,n)=>C(()=>f(t.readFile(c(e)),n)),writeFile:(e,n,r)=>C(()=>t.writeFile(c(e),p(n,r),!1,u(r))),appendFile:(e,n,r)=>C(()=>t.writeFile(c(e),p(n,r),!0,u(r))),stat:e=>C(()=>t.stat(c(e))),lstat:e=>C(()=>t.stat(c(e))),readdir:e=>C(()=>t.readdir(c(e))),mkdir:(e,n)=>C(()=>t.mkdir(c(e),d(n))),rm:(e,n)=>C(()=>t.remove(c(e),{op:`rm`,...n})),rmdir:(e,n)=>C(()=>t.remove(c(e),{op:`rmdir`,...n})),unlink:e=>C(()=>t.remove(c(e),{op:`unlink`})),rename:(e,n)=>C(()=>t.rename(c(e),c(n))),access:e=>C(()=>{if(!t.exists(c(e)))throw a(`ENOENT`,c(e),`access`)})},mount:t.mount,flush:t.flush,remount:t.remount}},y=e=>{let t=async(t,n)=>{let r=await e.readFile(c(t));return f(new Uint8Array(await r.arrayBuffer()),n)},s=async(t,r,i)=>{let a=c(t),o=n(a,u(i));await e.writeFile(a,p(r,i),o?{contentType:o}:void 0)},l=t=>e.remove(c(t)),d=async(t,n)=>{let r=o(c(t)),i=o(c(n));if(r===i)return;let a=await e.readFile(r);await e.writeFile(i,a),await e.remove(r)},m=async t=>{let n=o(c(t)),r=n?`${n}/`:``,i=new Set;for(let t of await e.list()){let e=o(t.path);if(r&&!e.startsWith(r))continue;let n=e.slice(r.length);n&&i.add(n.split(`/`)[0])}return[...i]},v=async(e,t)=>{},y=async(t,n)=>{let r=o(c(t));if(!n?.recursive){await e.remove(c(t));return}let i=`${r}/`,a=await e.list();await Promise.all(a.filter(e=>{let t=o(e.path);return t===r||t.startsWith(i)}).map(t=>e.remove(t.path).catch(()=>{})))},b=async t=>{let n=o(c(t)),s=await e.list(),l=s.find(e=>o(e.path)===n);if(l){let e=Date.parse(l.updatedAt??``);return r(l.size,Number.isFinite(e)?e:0)}if(s.some(e=>o(e.path).startsWith(`${n}/`)))return i();throw a(`ENOENT`,c(t),`stat`)},x={readFile:t,writeFile:s,unlink:l,rename:d,readdir:m,mkdir:v,rm:y,rmdir:y,stat:b,lstat:b,access:async e=>{await b(e)}};return{available:e.available,promises:x,readFile:(e,n,r)=>_(t(e,g(n)),h(n,r)),writeFile:(e,t,n,r)=>_(s(e,t,g(n)),h(n,r)),unlink:(e,t)=>_(l(e),t),rename:(e,t,n)=>_(d(e,t),n),readdir:(e,t,n)=>_(m(e),h(t,n)),mkdir:(e,t,n)=>_(v(),h(t,n)),rm:(e,t,n)=>_(y(e,g(t)),h(t,n)),stat:(e,t)=>_(b(e),t)}};function b(e,t){return t.memfs?v(e):y(e)}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return b}});