@ai-ecoverse/slicc-kernel 1.103.2 → 1.103.3

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.
@@ -563,6 +563,84 @@ var init_ranged = __esm({
563
563
  }
564
564
  });
565
565
 
566
+ // src/realm/sync-fs-wire.ts
567
+ function parseSyncFsUsage(json2) {
568
+ const u = json2;
569
+ if (!u || typeof u.quota !== "number" || typeof u.usage !== "number") return null;
570
+ return { quota: u.quota, usage: u.usage };
571
+ }
572
+ function syncError(code2, label) {
573
+ return Object.assign(new Error(`${code2}: ${label}`), { code: code2 });
574
+ }
575
+ function parseSyncFsStat(json2) {
576
+ const s = json2;
577
+ if (!s || typeof s.isFile !== "boolean" || typeof s.isDirectory !== "boolean" || typeof s.size !== "number") {
578
+ return null;
579
+ }
580
+ return {
581
+ isFile: s.isFile,
582
+ isDirectory: s.isDirectory,
583
+ isSymbolicLink: s.isSymbolicLink,
584
+ ...s.isSocket === true ? { isSocket: true } : {},
585
+ size: s.size,
586
+ ...typeof s.mode === "number" ? { mode: s.mode } : {},
587
+ ...typeof s.mtimeMs === "number" ? { mtimeMs: s.mtimeMs } : {},
588
+ ...typeof s.atimeMs === "number" ? { atimeMs: s.atimeMs } : {},
589
+ ...typeof s.ctimeMs === "number" ? { ctimeMs: s.ctimeMs } : {},
590
+ ...typeof s.ino === "number" ? { ino: s.ino } : {},
591
+ ...typeof s.nlink === "number" ? { nlink: s.nlink } : {},
592
+ ...typeof s.dev === "number" ? { dev: s.dev } : {},
593
+ ...s.readonly === true ? { readonly: true } : {},
594
+ ...typeof s.maxFile === "number" ? { maxFile: s.maxFile } : {},
595
+ ...s.ranged === true ? { ranged: true } : {},
596
+ ...s.linkable === true ? { linkable: true } : {},
597
+ ...typeof s.version === "string" ? { version: s.version } : {},
598
+ ...typeof s.uid === "number" ? { uid: s.uid } : {},
599
+ ...typeof s.gid === "number" ? { gid: s.gid } : {}
600
+ };
601
+ }
602
+ var SYNC_FS_OPS, HOLD_READ, HOLD_WRITE, HOLD_CREATED, SYNC_FS_REQUEST_TIMEOUT_MS;
603
+ var init_sync_fs_wire = __esm({
604
+ "src/realm/sync-fs-wire.ts"() {
605
+ "use strict";
606
+ SYNC_FS_OPS = [
607
+ "read",
608
+ "write",
609
+ "exists",
610
+ "stat",
611
+ "lstat",
612
+ "readdir",
613
+ "readdir-stat",
614
+ "mkdir",
615
+ "rm",
616
+ "rename",
617
+ "link",
618
+ "unlink",
619
+ "rmdir",
620
+ "symlink",
621
+ "readlink",
622
+ "chmod",
623
+ "utimes",
624
+ "lutimes",
625
+ "statfs",
626
+ "hold",
627
+ "create",
628
+ "kept",
629
+ "pread",
630
+ "pwrite",
631
+ "append",
632
+ "truncate",
633
+ "chown",
634
+ "lchown",
635
+ "access"
636
+ ];
637
+ HOLD_READ = 4;
638
+ HOLD_WRITE = 8;
639
+ HOLD_CREATED = 16;
640
+ SYNC_FS_REQUEST_TIMEOUT_MS = 25e3;
641
+ }
642
+ });
643
+
566
644
  // src/process/wasi/wasi-files.ts
567
645
  function normalize(path) {
568
646
  const out = [];
@@ -653,15 +731,37 @@ function cachingBridge(bridge, now = () => performance.now(), shared) {
653
731
  const blind = shared !== void 0 && shared.length * 4 < SHARED_IDS_BYTES;
654
732
  const cache = new StatCache(blind ? void 0 : shared);
655
733
  const { stats, lstats } = cache;
734
+ const view = bridge.changes;
735
+ const live = (miss, path) => miss.until > now() && (view === void 0 || miss.gen === void 0 || !view.changedSince(miss.gen, path).changed);
736
+ const seenAt = /* @__PURE__ */ new Map();
737
+ const gone = (path) => {
738
+ for (let at = path.lastIndexOf("/"); at > 0; at = path.lastIndexOf("/", at - 1)) {
739
+ const up = path.slice(0, at);
740
+ for (const map of [lstats, stats]) {
741
+ const hit = map.get(up);
742
+ const code2 = hit && "until" in hit ? hit.error.code : void 0;
743
+ if (hit && "until" in hit && code2 === "ENOENT" && live(hit, up)) return hit;
744
+ }
745
+ }
746
+ return void 0;
747
+ };
656
748
  const cached = (map, path, get) => {
657
749
  if (blind) return get();
658
750
  cache.fresh();
659
751
  let hit = map.get(path);
660
- if (hit === void 0 || "until" in hit && hit.until <= now()) {
752
+ if (hit === void 0 || "until" in hit && !live(hit, path)) {
753
+ const missing2 = gone(path);
754
+ if (missing2) throw missing2.error;
755
+ const gen = view?.now();
661
756
  try {
662
757
  hit = get();
758
+ if (gen !== void 0 && map === lstats) seenAt.set(path, gen);
663
759
  } catch (e) {
664
- hit = { error: e, until: now() + MISS_TTL_MS };
760
+ hit = {
761
+ error: e,
762
+ until: now() + MISS_TTL_MS,
763
+ ...gen !== void 0 ? { gen } : {}
764
+ };
665
765
  }
666
766
  cache.put(map, path, hit);
667
767
  }
@@ -717,7 +817,15 @@ function cachingBridge(bridge, now = () => performance.now(), shared) {
717
817
  }
718
818
  return list;
719
819
  },
720
- readlink: (p) => bridge.readlink(p),
820
+ readlink: (p) => {
821
+ const known = blind ? void 0 : (cache.fresh(), lstats.get(p));
822
+ const gen = seenAt.get(p);
823
+ const current = view !== void 0 && gen !== void 0 && !view.changedSince(gen, p).changed;
824
+ if (known && current && !("until" in known) && !known.isSymbolicLink) {
825
+ throw syncError("EINVAL", `'${p}' is not a symbolic link`);
826
+ }
827
+ return bridge.readlink(p);
828
+ },
721
829
  stat: (p) => cached(stats, p, () => bridge.stat(p)),
722
830
  lstat: (p) => cached(lstats, p, () => bridge.lstat(p)),
723
831
  exists: (p) => {
@@ -784,6 +892,7 @@ var init_wasi_files = __esm({
784
892
  "src/process/wasi/wasi-files.ts"() {
785
893
  "use strict";
786
894
  init_ranged();
895
+ init_sync_fs_wire();
787
896
  WasiError = class extends Error {
788
897
  code;
789
898
  constructor(code2) {
@@ -1631,84 +1740,6 @@ var init_fd_table = __esm({
1631
1740
  }
1632
1741
  });
1633
1742
 
1634
- // src/realm/sync-fs-wire.ts
1635
- function parseSyncFsUsage(json2) {
1636
- const u = json2;
1637
- if (!u || typeof u.quota !== "number" || typeof u.usage !== "number") return null;
1638
- return { quota: u.quota, usage: u.usage };
1639
- }
1640
- function syncError(code2, label) {
1641
- return Object.assign(new Error(`${code2}: ${label}`), { code: code2 });
1642
- }
1643
- function parseSyncFsStat(json2) {
1644
- const s = json2;
1645
- if (!s || typeof s.isFile !== "boolean" || typeof s.isDirectory !== "boolean" || typeof s.size !== "number") {
1646
- return null;
1647
- }
1648
- return {
1649
- isFile: s.isFile,
1650
- isDirectory: s.isDirectory,
1651
- isSymbolicLink: s.isSymbolicLink,
1652
- ...s.isSocket === true ? { isSocket: true } : {},
1653
- size: s.size,
1654
- ...typeof s.mode === "number" ? { mode: s.mode } : {},
1655
- ...typeof s.mtimeMs === "number" ? { mtimeMs: s.mtimeMs } : {},
1656
- ...typeof s.atimeMs === "number" ? { atimeMs: s.atimeMs } : {},
1657
- ...typeof s.ctimeMs === "number" ? { ctimeMs: s.ctimeMs } : {},
1658
- ...typeof s.ino === "number" ? { ino: s.ino } : {},
1659
- ...typeof s.nlink === "number" ? { nlink: s.nlink } : {},
1660
- ...typeof s.dev === "number" ? { dev: s.dev } : {},
1661
- ...s.readonly === true ? { readonly: true } : {},
1662
- ...typeof s.maxFile === "number" ? { maxFile: s.maxFile } : {},
1663
- ...s.ranged === true ? { ranged: true } : {},
1664
- ...s.linkable === true ? { linkable: true } : {},
1665
- ...typeof s.version === "string" ? { version: s.version } : {},
1666
- ...typeof s.uid === "number" ? { uid: s.uid } : {},
1667
- ...typeof s.gid === "number" ? { gid: s.gid } : {}
1668
- };
1669
- }
1670
- var SYNC_FS_OPS, HOLD_READ, HOLD_WRITE, HOLD_CREATED, SYNC_FS_REQUEST_TIMEOUT_MS;
1671
- var init_sync_fs_wire = __esm({
1672
- "src/realm/sync-fs-wire.ts"() {
1673
- "use strict";
1674
- SYNC_FS_OPS = [
1675
- "read",
1676
- "write",
1677
- "exists",
1678
- "stat",
1679
- "lstat",
1680
- "readdir",
1681
- "readdir-stat",
1682
- "mkdir",
1683
- "rm",
1684
- "rename",
1685
- "link",
1686
- "unlink",
1687
- "rmdir",
1688
- "symlink",
1689
- "readlink",
1690
- "chmod",
1691
- "utimes",
1692
- "lutimes",
1693
- "statfs",
1694
- "hold",
1695
- "create",
1696
- "kept",
1697
- "pread",
1698
- "pwrite",
1699
- "append",
1700
- "truncate",
1701
- "chown",
1702
- "lchown",
1703
- "access"
1704
- ];
1705
- HOLD_READ = 4;
1706
- HOLD_WRITE = 8;
1707
- HOLD_CREATED = 16;
1708
- SYNC_FS_REQUEST_TIMEOUT_MS = 25e3;
1709
- }
1710
- });
1711
-
1712
1743
  // src/process/wasi/wasi-fds.ts
1713
1744
  function stdioAlias(path) {
1714
1745
  const m = /^\/dev\/(?:(stdin)|(stdout)|(stderr)|fd\/(\d+))$/.exec(path);
@@ -4785,7 +4816,7 @@ var KERNEL_VERSION, OS_RELEASE;
4785
4816
  var init_version = __esm({
4786
4817
  "src/version.ts"() {
4787
4818
  "use strict";
4788
- KERNEL_VERSION = true ? "1.103.2" : "0.0.0-dev";
4819
+ KERNEL_VERSION = true ? "1.103.3" : "0.0.0-dev";
4789
4820
  OS_RELEASE = "6.0.0-slicc";
4790
4821
  }
4791
4822
  });