@rlabs-inc/fsdb 1.0.0 → 1.1.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.
@@ -59,6 +59,8 @@ export interface Collection<S extends SchemaDefinition> {
59
59
  getStaleIds(): string[];
60
60
  /** Manually set stale flag */
61
61
  setStale(id: string, stale: boolean): void;
62
+ /** Set metadata (created, updated, stale) for a record - used by persistence layer */
63
+ setMetadata(id: string, created: number, updated: number, stale?: boolean): void;
62
64
  /** Clear all data */
63
65
  clear(): void;
64
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/core/collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/core/collection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAA;AAUpH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAMtE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,gBAAgB,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACrF,iCAAiC;IACjC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAEvB,+BAA+B;IAC/B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAEvB,0BAA0B;IAC1B,aAAa,IAAI,IAAI,CAAA;IAErB,yBAAyB;IACzB,YAAY,IAAI,IAAI,CAAA;IAEpB,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAE5B,yCAAyC;IACzC,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAA;IAEvF,0DAA0D;IAC1D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1G,+BAA+B;IAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAA;IAExH,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,gBAAgB,EACnE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/C,oBAAoB,CAAC,CAAC,CAAC,CA8QzB;AAMD,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB,iCAAiC;IACjC,UAAU,CAAC,CAAC,SAAS,gBAAgB,EACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAC1C,oBAAoB,CAAC,CAAC,CAAC,CAAA;IAE1B,iCAAiC;IACjC,aAAa,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;IAE5F,gCAAgC;IAChC,eAAe,IAAI,MAAM,EAAE,CAAA;IAE3B,4BAA4B;IAC5B,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CA0DtE;AAGD,OAAO,EAAE,cAAc,IAAI,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAA;AAUpH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAMtE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,gBAAgB,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACrF,iCAAiC;IACjC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAEvB,+BAA+B;IAC/B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAEvB,0BAA0B;IAC1B,aAAa,IAAI,IAAI,CAAA;IAErB,yBAAyB;IACzB,YAAY,IAAI,IAAI,CAAA;IAEpB,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAE5B,yCAAyC;IACzC,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAA;IAEvF,0DAA0D;IAC1D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1G,+BAA+B;IAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAA;IAExH,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,gBAAgB,EACnE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/C,oBAAoB,CAAC,CAAC,CAAC,CAgRzB;AAMD,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB,iCAAiC;IACjC,UAAU,CAAC,CAAC,SAAS,gBAAgB,EACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAC1C,oBAAoB,CAAC,CAAC,CAAC,CAAA;IAE1B,iCAAiC;IACjC,aAAa,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;IAE5F,gCAAgC;IAChC,eAAe,IAAI,MAAM,EAAE,CAAA;IAE3B,4BAA4B;IAC5B,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CA2DtE;AAGD,OAAO,EAAE,cAAc,IAAI,IAAI,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -1702,6 +1702,12 @@ function createCollection(name, options) {
1702
1702
  staleArr[index] = stale;
1703
1703
  metadata.stale.value = staleArr;
1704
1704
  },
1705
+ setMetadata(id, created, updated, stale = false) {
1706
+ const index = registry.getIndex(id);
1707
+ if (index === -1)
1708
+ return;
1709
+ setMetadataAt(index, created, updated, stale);
1710
+ },
1705
1711
  clear() {
1706
1712
  registry.reset();
1707
1713
  columns.reset();
@@ -1714,6 +1720,46 @@ function createCollection(name, options) {
1714
1720
  }
1715
1721
 
1716
1722
  // src/persistence/markdown.ts
1723
+ var isBun = typeof Bun !== "undefined";
1724
+ async function readFileText(filepath) {
1725
+ if (isBun) {
1726
+ const file = Bun.file(filepath);
1727
+ if (!await file.exists())
1728
+ return null;
1729
+ return await file.text();
1730
+ } else {
1731
+ const fs = await import("fs/promises");
1732
+ try {
1733
+ return await fs.readFile(filepath, "utf-8");
1734
+ } catch {
1735
+ return null;
1736
+ }
1737
+ }
1738
+ }
1739
+ async function writeFile(filepath, content) {
1740
+ if (isBun) {
1741
+ await Bun.write(filepath, content);
1742
+ return true;
1743
+ } else {
1744
+ const fs = await import("fs/promises");
1745
+ await fs.writeFile(filepath, content, "utf-8");
1746
+ return true;
1747
+ }
1748
+ }
1749
+ function listMarkdownFiles(dirpath) {
1750
+ if (isBun) {
1751
+ const glob = new Bun.Glob("*.md");
1752
+ return Array.from(glob.scanSync({ cwd: dirpath }));
1753
+ } else {
1754
+ const fs = require("fs");
1755
+ try {
1756
+ const files = fs.readdirSync(dirpath);
1757
+ return files.filter((f) => f.endsWith(".md"));
1758
+ } catch {
1759
+ return [];
1760
+ }
1761
+ }
1762
+ }
1717
1763
  function idToFilename(id) {
1718
1764
  return id.replace(/[<>:"/\\|?*\x00-\x1f]/g, "_") + ".md";
1719
1765
  }
@@ -1823,11 +1869,10 @@ function generateMarkdown(record, schema, contentColumn) {
1823
1869
  }
1824
1870
  async function loadFromMarkdown(filepath, schema, contentColumn) {
1825
1871
  try {
1826
- const file = Bun.file(filepath);
1827
- if (!await file.exists()) {
1872
+ const text = await readFileText(filepath);
1873
+ if (text === null) {
1828
1874
  return null;
1829
1875
  }
1830
- const text = await file.text();
1831
1876
  const { frontmatter, content } = parseMarkdown(text);
1832
1877
  const id = frontmatter.id;
1833
1878
  if (!id) {
@@ -1860,8 +1905,7 @@ async function loadFromMarkdown(filepath, schema, contentColumn) {
1860
1905
  async function saveToMarkdown(filepath, record, schema, contentColumn) {
1861
1906
  try {
1862
1907
  const markdown = generateMarkdown(record, schema, contentColumn);
1863
- await Bun.write(filepath, markdown);
1864
- return true;
1908
+ return await writeFile(filepath, markdown);
1865
1909
  } catch {
1866
1910
  return false;
1867
1911
  }
@@ -1869,8 +1913,7 @@ async function saveToMarkdown(filepath, record, schema, contentColumn) {
1869
1913
  async function loadFromDirectory(dirpath, schema, contentColumn) {
1870
1914
  const results = [];
1871
1915
  try {
1872
- const glob = new Bun.Glob("*.md");
1873
- const files = glob.scanSync({ cwd: dirpath });
1916
+ const files = listMarkdownFiles(dirpath);
1874
1917
  for (const filename of files) {
1875
1918
  const filepath = `${dirpath}/${filename}`;
1876
1919
  const result = await loadFromMarkdown(filepath, schema, contentColumn);
@@ -1897,6 +1940,34 @@ async function ensureDirectory(dirpath) {
1897
1940
 
1898
1941
  // src/persistence/watcher.ts
1899
1942
  var import_fs = require("fs");
1943
+ var isBun2 = typeof Bun !== "undefined";
1944
+ async function fileExists(filepath) {
1945
+ if (isBun2) {
1946
+ return await Bun.file(filepath).exists();
1947
+ } else {
1948
+ const fs = await import("fs/promises");
1949
+ try {
1950
+ await fs.access(filepath);
1951
+ return true;
1952
+ } catch {
1953
+ return false;
1954
+ }
1955
+ }
1956
+ }
1957
+ function listMarkdownFilesSync(dirpath) {
1958
+ if (isBun2) {
1959
+ const glob = new Bun.Glob("*.md");
1960
+ return Array.from(glob.scanSync({ cwd: dirpath }));
1961
+ } else {
1962
+ const fs = require("fs");
1963
+ try {
1964
+ const files = fs.readdirSync(dirpath);
1965
+ return files.filter((f) => f.endsWith(".md"));
1966
+ } catch {
1967
+ return [];
1968
+ }
1969
+ }
1970
+ }
1900
1971
  function createFileWatcher(options) {
1901
1972
  const {
1902
1973
  dirpath,
@@ -1918,8 +1989,7 @@ function createFileWatcher(options) {
1918
1989
  if (_savingIds.has(id)) {
1919
1990
  return;
1920
1991
  }
1921
- const file = Bun.file(filepath);
1922
- const exists = await file.exists();
1992
+ const exists = await fileExists(filepath);
1923
1993
  let event;
1924
1994
  if (!exists) {
1925
1995
  if (!_knownFiles.has(filename))
@@ -1978,8 +2048,7 @@ function createFileWatcher(options) {
1978
2048
  if (_isWatching.value)
1979
2049
  return;
1980
2050
  try {
1981
- const glob = new Bun.Glob("*.md");
1982
- for (const filename of glob.scanSync({ cwd: dirpath })) {
2051
+ for (const filename of listMarkdownFilesSync(dirpath)) {
1983
2052
  _knownFiles.add(filename);
1984
2053
  }
1985
2054
  _watcher = import_fs.watch(dirpath, { recursive: false }, (eventType, filename) => {
@@ -2025,6 +2094,18 @@ function createFileWatcher(options) {
2025
2094
  }
2026
2095
 
2027
2096
  // src/vector/search.ts
2097
+ var isBun3 = typeof Bun !== "undefined";
2098
+ function hashContent(content) {
2099
+ if (isBun3) {
2100
+ return BigInt(Bun.hash(content));
2101
+ } else {
2102
+ let hash = 5381n;
2103
+ for (let i = 0;i < content.length; i++) {
2104
+ hash = (hash << 5n) + hash + BigInt(content.charCodeAt(i));
2105
+ }
2106
+ return hash;
2107
+ }
2108
+ }
2028
2109
  function toFloat32Array(arr) {
2029
2110
  if (arr instanceof Float32Array)
2030
2111
  return arr;
@@ -2094,7 +2175,7 @@ function createEmbeddingManager() {
2094
2175
  const hashes = new ReactiveMap;
2095
2176
  return {
2096
2177
  setEmbedding(id, column, content) {
2097
- const hash = BigInt(Bun.hash(content));
2178
+ const hash = hashContent(content);
2098
2179
  let columnHashes = hashes.get(id);
2099
2180
  if (!columnHashes) {
2100
2181
  columnHashes = new Map;
@@ -2109,7 +2190,7 @@ function createEmbeddingManager() {
2109
2190
  const storedHash = columnHashes.get(column);
2110
2191
  if (storedHash === undefined)
2111
2192
  return false;
2112
- const currentHash = BigInt(Bun.hash(currentContent));
2193
+ const currentHash = hashContent(currentContent);
2113
2194
  return storedHash !== currentHash;
2114
2195
  },
2115
2196
  getHash(id, column) {
@@ -2271,6 +2352,7 @@ function createPersistentCollection(name, options) {
2271
2352
  isStale: baseCollection.isStale.bind(baseCollection),
2272
2353
  getStaleIds: baseCollection.getStaleIds.bind(baseCollection),
2273
2354
  setStale: baseCollection.setStale.bind(baseCollection),
2355
+ setMetadata: baseCollection.setMetadata.bind(baseCollection),
2274
2356
  clear() {
2275
2357
  baseCollection.clear();
2276
2358
  embeddingManager.reset();
@@ -2281,7 +2363,10 @@ function createPersistentCollection(name, options) {
2281
2363
  for (const { id, record } of loaded) {
2282
2364
  const index = baseCollection.registry.allocate(id);
2283
2365
  baseCollection.columns.setRecord(index, record);
2284
- if ("created" in record) {}
2366
+ const created = record.created ?? Date.now();
2367
+ const updated = record.updated ?? created;
2368
+ const stale = record.stale ?? false;
2369
+ baseCollection.setMetadata(id, created, updated, stale);
2285
2370
  if (contentColumn) {
2286
2371
  const content = record[contentColumn];
2287
2372
  if (content && isContentStale(id, content)) {
@@ -2375,7 +2460,8 @@ function createDatabase(options = {}) {
2375
2460
  } else if (options.local) {
2376
2461
  basePath = `${process.cwd()}/.fsdb/${name}`;
2377
2462
  } else {
2378
- basePath = `${Bun.env.HOME}/.fsdb/${name}`;
2463
+ const home = typeof Bun !== "undefined" ? Bun.env.HOME : process.env.HOME;
2464
+ basePath = `${home}/.fsdb/${name}`;
2379
2465
  }
2380
2466
  const collections = new ReactiveMap;
2381
2467
  return {
package/dist/index.mjs CHANGED
@@ -1611,6 +1611,12 @@ function createCollection(name, options) {
1611
1611
  staleArr[index] = stale;
1612
1612
  metadata.stale.value = staleArr;
1613
1613
  },
1614
+ setMetadata(id, created, updated, stale = false) {
1615
+ const index = registry.getIndex(id);
1616
+ if (index === -1)
1617
+ return;
1618
+ setMetadataAt(index, created, updated, stale);
1619
+ },
1614
1620
  clear() {
1615
1621
  registry.reset();
1616
1622
  columns.reset();
@@ -1623,6 +1629,46 @@ function createCollection(name, options) {
1623
1629
  }
1624
1630
 
1625
1631
  // src/persistence/markdown.ts
1632
+ var isBun = typeof Bun !== "undefined";
1633
+ async function readFileText(filepath) {
1634
+ if (isBun) {
1635
+ const file = Bun.file(filepath);
1636
+ if (!await file.exists())
1637
+ return null;
1638
+ return await file.text();
1639
+ } else {
1640
+ const fs = await import("fs/promises");
1641
+ try {
1642
+ return await fs.readFile(filepath, "utf-8");
1643
+ } catch {
1644
+ return null;
1645
+ }
1646
+ }
1647
+ }
1648
+ async function writeFile(filepath, content) {
1649
+ if (isBun) {
1650
+ await Bun.write(filepath, content);
1651
+ return true;
1652
+ } else {
1653
+ const fs = await import("fs/promises");
1654
+ await fs.writeFile(filepath, content, "utf-8");
1655
+ return true;
1656
+ }
1657
+ }
1658
+ function listMarkdownFiles(dirpath) {
1659
+ if (isBun) {
1660
+ const glob = new Bun.Glob("*.md");
1661
+ return Array.from(glob.scanSync({ cwd: dirpath }));
1662
+ } else {
1663
+ const fs = __require("fs");
1664
+ try {
1665
+ const files = fs.readdirSync(dirpath);
1666
+ return files.filter((f) => f.endsWith(".md"));
1667
+ } catch {
1668
+ return [];
1669
+ }
1670
+ }
1671
+ }
1626
1672
  function idToFilename(id) {
1627
1673
  return id.replace(/[<>:"/\\|?*\x00-\x1f]/g, "_") + ".md";
1628
1674
  }
@@ -1732,11 +1778,10 @@ function generateMarkdown(record, schema, contentColumn) {
1732
1778
  }
1733
1779
  async function loadFromMarkdown(filepath, schema, contentColumn) {
1734
1780
  try {
1735
- const file = Bun.file(filepath);
1736
- if (!await file.exists()) {
1781
+ const text = await readFileText(filepath);
1782
+ if (text === null) {
1737
1783
  return null;
1738
1784
  }
1739
- const text = await file.text();
1740
1785
  const { frontmatter, content } = parseMarkdown(text);
1741
1786
  const id = frontmatter.id;
1742
1787
  if (!id) {
@@ -1769,8 +1814,7 @@ async function loadFromMarkdown(filepath, schema, contentColumn) {
1769
1814
  async function saveToMarkdown(filepath, record, schema, contentColumn) {
1770
1815
  try {
1771
1816
  const markdown = generateMarkdown(record, schema, contentColumn);
1772
- await Bun.write(filepath, markdown);
1773
- return true;
1817
+ return await writeFile(filepath, markdown);
1774
1818
  } catch {
1775
1819
  return false;
1776
1820
  }
@@ -1778,8 +1822,7 @@ async function saveToMarkdown(filepath, record, schema, contentColumn) {
1778
1822
  async function loadFromDirectory(dirpath, schema, contentColumn) {
1779
1823
  const results = [];
1780
1824
  try {
1781
- const glob = new Bun.Glob("*.md");
1782
- const files = glob.scanSync({ cwd: dirpath });
1825
+ const files = listMarkdownFiles(dirpath);
1783
1826
  for (const filename of files) {
1784
1827
  const filepath = `${dirpath}/${filename}`;
1785
1828
  const result = await loadFromMarkdown(filepath, schema, contentColumn);
@@ -1806,6 +1849,34 @@ async function ensureDirectory(dirpath) {
1806
1849
 
1807
1850
  // src/persistence/watcher.ts
1808
1851
  import { watch } from "fs";
1852
+ var isBun2 = typeof Bun !== "undefined";
1853
+ async function fileExists(filepath) {
1854
+ if (isBun2) {
1855
+ return await Bun.file(filepath).exists();
1856
+ } else {
1857
+ const fs = await import("fs/promises");
1858
+ try {
1859
+ await fs.access(filepath);
1860
+ return true;
1861
+ } catch {
1862
+ return false;
1863
+ }
1864
+ }
1865
+ }
1866
+ function listMarkdownFilesSync(dirpath) {
1867
+ if (isBun2) {
1868
+ const glob = new Bun.Glob("*.md");
1869
+ return Array.from(glob.scanSync({ cwd: dirpath }));
1870
+ } else {
1871
+ const fs = __require("fs");
1872
+ try {
1873
+ const files = fs.readdirSync(dirpath);
1874
+ return files.filter((f) => f.endsWith(".md"));
1875
+ } catch {
1876
+ return [];
1877
+ }
1878
+ }
1879
+ }
1809
1880
  function createFileWatcher(options) {
1810
1881
  const {
1811
1882
  dirpath,
@@ -1827,8 +1898,7 @@ function createFileWatcher(options) {
1827
1898
  if (_savingIds.has(id)) {
1828
1899
  return;
1829
1900
  }
1830
- const file = Bun.file(filepath);
1831
- const exists = await file.exists();
1901
+ const exists = await fileExists(filepath);
1832
1902
  let event;
1833
1903
  if (!exists) {
1834
1904
  if (!_knownFiles.has(filename))
@@ -1887,8 +1957,7 @@ function createFileWatcher(options) {
1887
1957
  if (_isWatching.value)
1888
1958
  return;
1889
1959
  try {
1890
- const glob = new Bun.Glob("*.md");
1891
- for (const filename of glob.scanSync({ cwd: dirpath })) {
1960
+ for (const filename of listMarkdownFilesSync(dirpath)) {
1892
1961
  _knownFiles.add(filename);
1893
1962
  }
1894
1963
  _watcher = watch(dirpath, { recursive: false }, (eventType, filename) => {
@@ -1934,6 +2003,18 @@ function createFileWatcher(options) {
1934
2003
  }
1935
2004
 
1936
2005
  // src/vector/search.ts
2006
+ var isBun3 = typeof Bun !== "undefined";
2007
+ function hashContent(content) {
2008
+ if (isBun3) {
2009
+ return BigInt(Bun.hash(content));
2010
+ } else {
2011
+ let hash = 5381n;
2012
+ for (let i = 0;i < content.length; i++) {
2013
+ hash = (hash << 5n) + hash + BigInt(content.charCodeAt(i));
2014
+ }
2015
+ return hash;
2016
+ }
2017
+ }
1937
2018
  function toFloat32Array(arr) {
1938
2019
  if (arr instanceof Float32Array)
1939
2020
  return arr;
@@ -2003,7 +2084,7 @@ function createEmbeddingManager() {
2003
2084
  const hashes = new ReactiveMap;
2004
2085
  return {
2005
2086
  setEmbedding(id, column, content) {
2006
- const hash = BigInt(Bun.hash(content));
2087
+ const hash = hashContent(content);
2007
2088
  let columnHashes = hashes.get(id);
2008
2089
  if (!columnHashes) {
2009
2090
  columnHashes = new Map;
@@ -2018,7 +2099,7 @@ function createEmbeddingManager() {
2018
2099
  const storedHash = columnHashes.get(column);
2019
2100
  if (storedHash === undefined)
2020
2101
  return false;
2021
- const currentHash = BigInt(Bun.hash(currentContent));
2102
+ const currentHash = hashContent(currentContent);
2022
2103
  return storedHash !== currentHash;
2023
2104
  },
2024
2105
  getHash(id, column) {
@@ -2180,6 +2261,7 @@ function createPersistentCollection(name, options) {
2180
2261
  isStale: baseCollection.isStale.bind(baseCollection),
2181
2262
  getStaleIds: baseCollection.getStaleIds.bind(baseCollection),
2182
2263
  setStale: baseCollection.setStale.bind(baseCollection),
2264
+ setMetadata: baseCollection.setMetadata.bind(baseCollection),
2183
2265
  clear() {
2184
2266
  baseCollection.clear();
2185
2267
  embeddingManager.reset();
@@ -2190,7 +2272,10 @@ function createPersistentCollection(name, options) {
2190
2272
  for (const { id, record } of loaded) {
2191
2273
  const index = baseCollection.registry.allocate(id);
2192
2274
  baseCollection.columns.setRecord(index, record);
2193
- if ("created" in record) {}
2275
+ const created = record.created ?? Date.now();
2276
+ const updated = record.updated ?? created;
2277
+ const stale = record.stale ?? false;
2278
+ baseCollection.setMetadata(id, created, updated, stale);
2194
2279
  if (contentColumn) {
2195
2280
  const content = record[contentColumn];
2196
2281
  if (content && isContentStale(id, content)) {
@@ -2284,7 +2369,8 @@ function createDatabase(options = {}) {
2284
2369
  } else if (options.local) {
2285
2370
  basePath = `${process.cwd()}/.fsdb/${name}`;
2286
2371
  } else {
2287
- basePath = `${Bun.env.HOME}/.fsdb/${name}`;
2372
+ const home = typeof Bun !== "undefined" ? Bun.env.HOME : process.env.HOME;
2373
+ basePath = `${home}/.fsdb/${name}`;
2288
2374
  }
2289
2375
  const collections = new ReactiveMap;
2290
2376
  return {
@@ -2,7 +2,7 @@
2
2
  * Markdown Persistence
3
3
  *
4
4
  * Parse and generate markdown files with YAML frontmatter.
5
- * Uses Bun file APIs for fast I/O.
5
+ * Uses Bun file APIs when available, falls back to Node.js fs/promises.
6
6
  */
7
7
  import type { SchemaDefinition, RecordWithMeta } from '../core/types';
8
8
  /** Convert an ID to a safe filename */
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/persistence/markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAkB,cAAc,EAAE,MAAM,eAAe,CAAA;AAOrF,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAMD,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAqC1D;AAkFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EACzD,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,MAAM,CA4BR;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EAC/D,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CA8CpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EAC7D,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAChE,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,EAAE,CAAC,CAmB/D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/persistence/markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAkB,cAAc,EAAE,MAAM,eAAe,CAAA;AA2DrF,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAMD,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAqC1D;AAkFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EACzD,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,MAAM,CA4BR;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EAC/D,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CA6CpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EAC7D,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAChE,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,CAAC,EACT,aAAa,CAAC,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,EAAE,CAAC,CAkB/D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/persistence/watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAkB,eAAe,EAAE,MAAM,eAAe,CAAA;AAItF,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,gBAAgB;IACrD,qBAAqB;IACrB,KAAK,IAAI,IAAI,CAAA;IAEb,oBAAoB;IACpB,IAAI,IAAI,IAAI,CAAA;IAEZ,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAE5B,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAA;IAEnF,wDAAwD;IACxD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IAE5B,wBAAwB;IACxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,gBAAgB;IACxD,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAA;IAEf,+BAA+B;IAC/B,MAAM,EAAE,CAAC,CAAA;IAET,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;IAEvB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;CAC3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAC1D,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,WAAW,CAAC,CAAC,CAAC,CAoKhB"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/persistence/watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAkB,eAAe,EAAE,MAAM,eAAe,CAAA;AAsCtF,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,gBAAgB;IACrD,qBAAqB;IACrB,KAAK,IAAI,IAAI,CAAA;IAEb,oBAAoB;IACpB,IAAI,IAAI,IAAI,CAAA;IAEZ,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAE5B,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAA;IAEnF,wDAAwD;IACxD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IAE5B,wBAAwB;IACxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,gBAAgB;IACxD,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAA;IAEf,+BAA+B;IAC/B,MAAM,EAAE,CAAC,CAAA;IAET,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;IAEvB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;CAC3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAC1D,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,WAAW,CAAC,CAAC,CAAC,CAkKhB"}
@@ -44,7 +44,7 @@ export interface EmbeddingManager {
44
44
  /**
45
45
  * Create an embedding manager for stale detection
46
46
  *
47
- * Uses Bun.hash() for ultra-fast content fingerprinting
47
+ * Uses fast content hashing for fingerprinting (Bun.hash when available)
48
48
  */
49
49
  export declare function createEmbeddingManager(): EmbeddingManager;
50
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/vector/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EACV,gBAAgB,EAEhB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,eAAe,CAAA;AAMtB;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,YAAY,CAGzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAY/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,EAC1B,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,GACzB,MAAM,CAsBR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,CAmCzC;AAMD,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAE/D,uDAAuD;IACvD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAA;IAEpE,2CAA2C;IAC3C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAEvD,8BAA8B;IAC9B,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAE3C,uBAAuB;IACvB,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CA4CzD;AAMD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,gBAAgB,EACrD,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,YAAY,EAAE,MAAM,CAAC,EACrB,WAAW,EAAE,YAAY,GAAG,MAAM,EAAE,EACpC,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACnC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CA4CzB"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/vector/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EACV,gBAAgB,EAEhB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,eAAe,CAAA;AA0BtB;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,YAAY,CAGzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAY/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,EAC1B,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,GACzB,MAAM,CAsBR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,CAmCzC;AAMD,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAE/D,uDAAuD;IACvD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAA;IAEpE,2CAA2C;IAC3C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAEvD,8BAA8B;IAC9B,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAE3C,uBAAuB;IACvB,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CA4CzD;AAMD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,gBAAgB,EACrD,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,YAAY,EAAE,MAAM,CAAC,EACrB,WAAW,EAAE,YAAY,GAAG,MAAM,EAAE,EACpC,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACnC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CA4CzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rlabs-inc/fsdb",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Fractal State Database - A reactive in memory database with markdown files persistence made with parallel arrays and fine-grained reactivity.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",