@libredb/libredb 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -249,6 +249,61 @@ users.join(orders, "id", "userId").select("users.name", "orders.total").toArray(
249
249
 
250
250
  `where` is O(n) in the table size and `join` is O(n*m) — nested-loop, no indexes (the same deliberate v1 omission as the document lens). Unmatched rows on either side are dropped (inner join), and a left key matching several right rows fans out to several result rows.
251
251
 
252
+ ## The catalog — what a database holds
253
+
254
+ Open a LibreDB file cold and the bytes alone don't say which lens each namespace belongs to. The catalog records that as you write: a `table` registers `{ kind: "relational", schema }` when its handle is built, and a `doc` collection registers `{ kind: "document" }` on its first write. `catalog(db)` reads the whole registry — a `Map` from namespace name to its entry — so a tool can render faithful per-kind views without guessing:
255
+
256
+ ```ts
257
+ import { open, table, doc, catalog } from "libredb";
258
+
259
+ const db = open();
260
+
261
+ table(db, "users", { primaryKey: "id", columns: { id: "string", age: "number" } });
262
+ doc(db, "logs").put("l1", { message: "hello" });
263
+
264
+ const registry = catalog(db);
265
+ registry.get("users");
266
+ // { kind: "relational", schema: { primaryKey: "id", columns: { id: "string", age: "number" } } }
267
+ registry.get("logs");
268
+ // { kind: "document" }
269
+ [...registry.keys()].sort();
270
+ // ["logs", "users"]
271
+ ```
272
+
273
+ The catalog lives under a reserved key prefix that sorts below all user data, so its entries never appear in a `kv`, `doc`, or `table` scan — and no user row leaks into the registry. `kv` namespaces are deliberately not cataloged: `kv` is the raw layer with full keyspace access.
274
+
275
+ ## Reliability — deterministic simulation testing
276
+
277
+ Durability is the trust-critical promise: a transaction that returns has been fsync'd, and a crash can only ever damage the last, un-fsync'd record. LibreDB proves this with **deterministic simulation testing (DST)** — the WAL's crash/recovery path is tortured under a seeded, in-memory simulated filesystem. The kernel reaches the disk only through an injectable FS seam (`open({ path, fs })`), so a test can run the real engine on a `SimFS` that crashes on command, tears the un-fsync'd tail at a seeded point, and injects CRC corruption or short reads.
278
+
279
+ Every run is driven by one integer seed and a seeded workload of `set`/`delete`/`transact` operations. After the crash and reopen, recovery must reproduce **a valid committed prefix** of the workload — every transaction that returned successfully, and never a torn or un-committed one. An independent committed-map model (sharing no code with the engine) is the oracle the recovered state is compared against.
280
+
281
+ The DST suite runs as part of the normal gate:
282
+
283
+ ```sh
284
+ bun run test # runs a bounded 50 seeds (fast, CI-friendly)
285
+ ```
286
+
287
+ Run a longer soak by raising the seed count (and optionally the base seed):
288
+
289
+ ```sh
290
+ LIBREDB_DST_SEEDS=5000 bun test src/sim/dst.test.ts
291
+ LIBREDB_DST_BASE=1000000 LIBREDB_DST_SEEDS=5000 bun test src/sim/dst.test.ts
292
+ ```
293
+
294
+ When a seed fails, the suite prints the exact replay hint — `Replay with runSeed(<seed>)`. Because everything is seed-driven, one seed reproduces the whole run byte-for-byte:
295
+
296
+ ```ts
297
+ import { runSeed } from "./src/sim/dst.ts";
298
+
299
+ const result = runSeed(42);
300
+ result.passed; // true — recovered state is a valid committed prefix
301
+ result.recovered; // Map of the recovered committed key-value state
302
+ result.expected; // the model oracle's committed state
303
+ ```
304
+
305
+ The DST harness lives in `src/sim/` and is excluded from the published package — it is test machinery, not shipped code.
306
+
252
307
  ## Read first
253
308
 
254
309
  - [`MANIFESTO.md`](./MANIFESTO.md) — what LibreDB is and what it refuses to be.
@@ -29,4 +29,3 @@ import type { Transaction } from "../core.ts";
29
29
  export interface Store {
30
30
  transact<T>(run: (tx: Transaction) => T): T;
31
31
  }
32
- //# sourceMappingURL=store.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=store.js.map
package/dist/core.d.ts CHANGED
@@ -20,7 +20,7 @@
20
20
  * and discards any record a crash left half-written.
21
21
  */
22
22
  /** The LibreDB package version. Kept in sync with package.json. */
23
- export declare const version = "0.0.1";
23
+ export declare const version = "0.0.2";
24
24
  /**
25
25
  * A key in the kernel: an immutable sequence of bytes.
26
26
  *
@@ -87,6 +87,42 @@ export interface Database {
87
87
  /** Flush pending state and release resources. Safe to call once. */
88
88
  close(): void;
89
89
  }
90
+ /**
91
+ * The filesystem the write-ahead log runs on — the kernel's one IO seam.
92
+ *
93
+ * The kernel never calls `node:fs` directly; every byte that reaches the disk
94
+ * goes through this interface. That keeps the IO boundary explicit and in one
95
+ * place (a readability gain), and it lets a test inject a simulated filesystem
96
+ * to torture crash recovery without a real disk (DESIGN.md section 6.4). The
97
+ * default is a thin real-`node:fs` adapter, so production behaviour is
98
+ * unchanged. The interface is deliberately the SMALLEST set of operations the
99
+ * WAL performs and nothing more.
100
+ */
101
+ export interface FileSystem {
102
+ /** Open the log file at `path` for reading and appending, creating it if it
103
+ * is absent, and return a handle to it. */
104
+ open(path: string): WalFile;
105
+ }
106
+ /**
107
+ * An open handle to a write-ahead log file: exactly the operations the WAL
108
+ * performs on it. Writes are append-only; recovery reads the file and may
109
+ * truncate a torn tail.
110
+ */
111
+ export interface WalFile {
112
+ /** The number of bytes currently in the file. */
113
+ size(): number;
114
+ /** Read `length` bytes starting at `offset`. */
115
+ read(offset: number, length: number): Uint8Array;
116
+ /** Append `bytes` to the end of the file. */
117
+ append(bytes: Uint8Array): void;
118
+ /** Flush appended bytes to durable storage. After this returns the bytes
119
+ * survive a crash — the durability point of a commit. */
120
+ fsync(): void;
121
+ /** Shrink the file to `length` bytes, dropping anything after it. */
122
+ truncate(length: number): void;
123
+ /** Release the handle. */
124
+ close(): void;
125
+ }
90
126
  /**
91
127
  * How to open a kernel instance.
92
128
  *
@@ -96,6 +132,13 @@ export interface Database {
96
132
  */
97
133
  export interface OpenOptions {
98
134
  readonly path?: string;
135
+ /**
136
+ * The filesystem the write-ahead log runs on. Defaults to a thin real
137
+ * `node:fs` adapter. Injecting one lets tests simulate crashes and IO faults
138
+ * deterministically (DESIGN.md section 6.4). Ignored when there is no `path`
139
+ * (an in-memory database never touches a filesystem).
140
+ */
141
+ readonly fs?: FileSystem;
99
142
  }
100
143
  /** The signature of the kernel's entry point (see {@link open} for the
101
144
  * implementation). Naming the contract separately lets lenses depend on it. */
@@ -108,4 +151,3 @@ export type Open = (options?: OpenOptions) => Database;
108
151
  * in-memory.
109
152
  */
110
153
  export declare const open: Open;
111
- //# sourceMappingURL=core.d.ts.map
package/dist/core.js CHANGED
@@ -19,9 +19,9 @@
19
19
  * transactions, and a write-ahead log for durability. Recovery replays that log
20
20
  * and discards any record a crash left half-written.
21
21
  */
22
- import { closeSync, existsSync, fsyncSync, openSync, readFileSync, truncateSync, writeSync, } from "node:fs";
22
+ import { closeSync, fsyncSync, openSync, readFileSync, statSync, truncateSync, writeSync, } from "node:fs";
23
23
  /** The LibreDB package version. Kept in sync with package.json. */
24
- export const version = "0.0.1";
24
+ export const version = "0.0.2";
25
25
  /**
26
26
  * Compare two keys by unsigned byte-lexicographic order: the first differing
27
27
  * byte decides, and if one key is a prefix of the other the shorter sorts
@@ -219,18 +219,14 @@ function replayPayload(entries, payload) {
219
219
  }
220
220
  }
221
221
  /**
222
- * Rebuild the committed store from the log at `path`, returning its entries.
222
+ * Rebuild the committed store from the log behind `file`, returning its entries.
223
223
  * Replays every intact record and stops at the first record a crash left torn
224
224
  * (header promises bytes that are not there) or corrupt (checksum mismatch),
225
225
  * truncating that tail away so the next append starts from a clean boundary.
226
226
  */
227
- function recover(path) {
227
+ function recover(file) {
228
228
  const entries = [];
229
- if (!existsSync(path))
230
- return entries;
231
- // Copy into a plain Uint8Array so slices are independent copies, not views
232
- // aliasing a shared Buffer pool.
233
- const log = new Uint8Array(readFileSync(path));
229
+ const log = file.read(0, file.size());
234
230
  let offset = 0;
235
231
  while (offset + RECORD_HEADER <= log.length) {
236
232
  const size = readU32(log, offset);
@@ -246,26 +242,62 @@ function recover(path) {
246
242
  offset = end;
247
243
  }
248
244
  if (offset < log.length)
249
- truncateSync(path, offset);
245
+ file.truncate(offset);
250
246
  return entries;
251
247
  }
252
- /** Recover the store at `path` and return it together with a {@link Log} that
253
- * appends future commits to the same file. */
254
- function openLog(path) {
255
- const entries = recover(path);
256
- const fd = openSync(path, "a"); // append-only; creates the file if missing
248
+ /**
249
+ * The default {@link FileSystem}: a thin adapter over `node:fs`. Each method is
250
+ * the obvious synchronous syscall, so the seam adds an interface, not behaviour.
251
+ * Appends go through one append-mode descriptor (creating the file if missing);
252
+ * reads, size and truncate work by path, matching how the WAL has always
253
+ * reached the disk.
254
+ */
255
+ function nodeFileSystem() {
256
+ return {
257
+ open(path) {
258
+ const fd = openSync(path, "a"); // append-only; creates the file if missing
259
+ return {
260
+ size() {
261
+ return statSync(path).size;
262
+ },
263
+ read(offset, length) {
264
+ // A fresh Uint8Array so the returned slice is an independent copy, not
265
+ // a view aliasing a shared Buffer pool.
266
+ return new Uint8Array(readFileSync(path)).subarray(offset, offset + length);
267
+ },
268
+ append(bytes) {
269
+ for (let written = 0; written < bytes.length;) {
270
+ written += writeSync(fd, bytes, written);
271
+ }
272
+ },
273
+ fsync() {
274
+ fsyncSync(fd);
275
+ },
276
+ truncate(length) {
277
+ truncateSync(path, length);
278
+ },
279
+ close() {
280
+ closeSync(fd);
281
+ },
282
+ };
283
+ },
284
+ };
285
+ }
286
+ /** Open the log file at `path` on `fs`, recover the store from it, and return
287
+ * the recovered entries together with a {@link Log} that appends future commits
288
+ * to the same file. */
289
+ function openLog(path, fs) {
290
+ const file = fs.open(path);
291
+ const entries = recover(file);
257
292
  return {
258
293
  entries,
259
294
  log: {
260
295
  append(ops) {
261
- const record = encodeRecord(ops);
262
- for (let written = 0; written < record.length;) {
263
- written += writeSync(fd, record, written);
264
- }
265
- fsyncSync(fd); // the durability point: bytes are on disk before we return
296
+ file.append(encodeRecord(ops));
297
+ file.fsync(); // the durability point: bytes are on disk before we return
266
298
  },
267
299
  close() {
268
- closeSync(fd);
300
+ file.close();
269
301
  },
270
302
  },
271
303
  };
@@ -285,7 +317,7 @@ export const open = (options) => {
285
317
  let committed;
286
318
  let log;
287
319
  if (options?.path !== undefined) {
288
- const opened = openLog(options.path);
320
+ const opened = openLog(options.path, options.fs ?? nodeFileSystem());
289
321
  committed = opened.entries;
290
322
  log = opened.log;
291
323
  }
@@ -340,4 +372,3 @@ export const open = (options) => {
340
372
  },
341
373
  };
342
374
  };
343
- //# sourceMappingURL=core.js.map
package/dist/index.d.ts CHANGED
@@ -5,7 +5,8 @@
5
5
  * database and put a lens over it — {@link kv} (strings) or {@link doc} (JSON
6
6
  * documents). The kernel's byte-level internals (and each lens's private codec)
7
7
  * stay unexported on purpose — the lens is the usable face. The relational lens
8
- * ({@link table}) completes the trio.
8
+ * ({@link table}) completes the trio. {@link catalog} reads the registry of
9
+ * namespaces a database holds, so a tool can render faithful per-kind views.
9
10
  */
10
11
  export { version, open } from "./core.ts";
11
12
  export type { Database, OpenOptions } from "./core.ts";
@@ -15,5 +16,6 @@ export { doc } from "./lens/document.ts";
15
16
  export type { DocCollection, Doc, DocEntry, JsonValue } from "./lens/document.ts";
16
17
  export { table } from "./lens/relational.ts";
17
18
  export type { Table, TableSchema, Row, ColumnType, Query } from "./lens/relational.ts";
19
+ export { catalog } from "./lens/catalog.ts";
20
+ export type { CatalogEntry, CatalogRegistry } from "./lens/catalog.ts";
18
21
  export type { Result, WriteResult } from "./lens/types.ts";
19
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -5,10 +5,11 @@
5
5
  * database and put a lens over it — {@link kv} (strings) or {@link doc} (JSON
6
6
  * documents). The kernel's byte-level internals (and each lens's private codec)
7
7
  * stay unexported on purpose — the lens is the usable face. The relational lens
8
- * ({@link table}) completes the trio.
8
+ * ({@link table}) completes the trio. {@link catalog} reads the registry of
9
+ * namespaces a database holds, so a tool can render faithful per-kind views.
9
10
  */
10
11
  export { version, open } from "./core.js";
11
12
  export { kv } from "./lens/kv.js";
12
13
  export { doc } from "./lens/document.js";
13
14
  export { table } from "./lens/relational.js";
14
- //# sourceMappingURL=index.js.map
15
+ export { catalog } from "./lens/catalog.js";
@@ -0,0 +1,99 @@
1
+ import type { Store } from "../adapter/store.ts";
2
+ import type { Transaction } from "../core.ts";
3
+ import type { TableSchema } from "./relational.ts";
4
+ /**
5
+ * The reserved marker. It is U+0000, encoded as the single byte 0x00 — the
6
+ * lowest byte, so it sorts before every byte a non-reserved UTF-8 name can begin
7
+ * with. A user collection or table name may not start with it (see
8
+ * {@link assertUserName}); that one rule keeps all user keys strictly above, and
9
+ * therefore disjoint from, the catalog namespace below.
10
+ */
11
+ export declare const RESERVED_MARKER = "\0";
12
+ /**
13
+ * The catalog key prefix: every catalog entry's key begins with this string. It
14
+ * opens with the reserved marker, so the whole catalog namespace sorts before
15
+ * any user-data key (which can never start with the marker). The readable
16
+ * `libredb:catalog:` tail keeps the namespace self-describing if a raw-KV tool
17
+ * dumps the file before it understands the catalog.
18
+ */
19
+ export declare const CATALOG_PREFIX = "\0libredb:catalog:";
20
+ /**
21
+ * Reject a user namespace name that begins with the reserved marker — a loud
22
+ * error, the same class of correctness rule as the prefix-soundness checks the
23
+ * lenses already enforce. Such a name could place a user key inside the catalog
24
+ * namespace and break the isolation the catalog relies on, so it is forbidden
25
+ * outright rather than silently remapped. Called by `doc` and `table` when a
26
+ * handle is built; the raw kv lens is deliberately not guarded — it is the raw
27
+ * layer with full keyspace access (DESIGN.md section 6.3).
28
+ */
29
+ export declare function assertUserName(name: string): void;
30
+ /**
31
+ * The lens a cataloged namespace belongs to, plus (for a relational table) its
32
+ * schema — the otherwise-unrecoverable interpretation a cold-opening tool needs
33
+ * (DESIGN.md section 6.3). `kv` namespaces are never cataloged (kv is the raw
34
+ * layer); a `document` entry carries only `kind` (documents are schemaless).
35
+ */
36
+ export interface CatalogEntry {
37
+ readonly kind: "kv" | "document" | "relational";
38
+ readonly schema?: TableSchema;
39
+ }
40
+ /**
41
+ * The whole catalog as a snapshot, keyed by namespace name (the `<collection>`
42
+ * or `<table>`, with the reserved prefix stripped). It is the registry a tool
43
+ * that opens a LibreDB file cold reads to render faithful per-kind views
44
+ * (DESIGN.md section 6.3): for each namespace, which lens it belongs to and, for
45
+ * a relational table, its schema.
46
+ */
47
+ export type CatalogRegistry = ReadonlyMap<string, CatalogEntry>;
48
+ /**
49
+ * Record a relational table's schema in the catalog on first creation, or — if
50
+ * the namespace is already cataloged — validate that the passed schema equals
51
+ * the persisted one, throwing on mismatch (DESIGN.md section 6.3: no schema
52
+ * migration in v1). Called by {@link table} when a handle is built.
53
+ *
54
+ * The read and the conditional write run in ONE kernel transaction, so the
55
+ * check-then-record is atomic and, on a file-backed database, the entry is
56
+ * fsync'd through the WAL before `table()` returns (it survives a reopen). The
57
+ * value is JSON of a {@link CatalogEntry} — an ordinary KV value under the
58
+ * reserved key, so the kv lens (the raw layer) can also read it.
59
+ */
60
+ export declare function recordRelational(store: Store, name: string, schema: TableSchema): void;
61
+ /**
62
+ * Register a document collection in the catalog on its first write, recording
63
+ * only `{ kind: "document" }` — documents are schemaless, so existence and kind
64
+ * are all there is to record (DESIGN.md section 6.3). Idempotent: it writes the
65
+ * entry only when the namespace is not already cataloged, so repeated writes
66
+ * neither duplicate nor error.
67
+ *
68
+ * Unlike {@link recordRelational}, this takes the caller's {@link Transaction}
69
+ * rather than a {@link Store}: a document collection registers lazily on its
70
+ * first `put`, which is already inside a transaction, and the kernel forbids
71
+ * nested `transact`. Riding the write's own transaction also makes the
72
+ * registration and the first document durable together (one fsync, atomic).
73
+ *
74
+ * Write-if-absent is the crux that keeps a relational table's catalog entry
75
+ * intact: `table()` routes its inserts through an internal document `put`, but
76
+ * the `{ kind: "relational", schema }` entry was already recorded at table
77
+ * construction (see {@link recordRelational}), so this no-ops there and never
78
+ * downgrades it to a bare `document` kind.
79
+ */
80
+ export declare function recordDocument(tx: Transaction, name: string): void;
81
+ /**
82
+ * Read the whole catalog as a {@link CatalogRegistry} snapshot — the public
83
+ * read API a tool uses to enumerate a database's namespaces and their kinds
84
+ * (DESIGN.md section 6.3). Each entry's key has the reserved prefix stripped, so
85
+ * callers see plain namespace names (`users`, not `\x00libredb:catalog:users`).
86
+ *
87
+ * It scans only `[CATALOG_PREFIX, upperBound)` — the same byte-level prefix
88
+ * range the lenses use, computed by {@link prefixRange}. Because the prefix
89
+ * opens with the reserved low byte and {@link assertUserName} keeps user keys
90
+ * above it, that range is disjoint from all user data: catalog entries never
91
+ * leak into a `doc`/`table`/user-`kv` scan, and no user row leaks into the
92
+ * registry.
93
+ *
94
+ * The result is an EAGER snapshot, not a lazy {@link import("./types.ts").Result}
95
+ * like a lens read: the catalog is small metadata (one entry per namespace), and
96
+ * a `Map` gives a tool direct lookup and enumeration. The single read
97
+ * transaction sees one consistent committed state.
98
+ */
99
+ export declare function catalog(store: Store): CatalogRegistry;
@@ -0,0 +1,157 @@
1
+ /**
2
+ * lens/catalog.ts — the reserved catalog namespace and the user-name policy.
3
+ *
4
+ * The catalog (DESIGN.md section 6.3) lets a tool that opens a LibreDB file cold
5
+ * — e.g. the LibreDB Studio provider — show faithful per-kind views: which lens
6
+ * a namespace belongs to, and a relational table's schema. That interpretation
7
+ * lives in application code, not on disk, so the lenses persist it as ordinary
8
+ * KV entries under a reserved key prefix. It is a lens-level CONVENTION, not a
9
+ * kernel feature: core.ts stays pure ordered-KV and unchanged (honesty
10
+ * discipline — do not grow the core for this).
11
+ *
12
+ * This file establishes the namespace, the one correctness rule it depends on,
13
+ * and the registry write/validate mechanics. The `catalog` read API for tools is
14
+ * added in a later phase; here a `table` records its schema and a reopen
15
+ * validates against it.
16
+ *
17
+ * The codec and comparison here are the catalog's OWN — it deliberately does not
18
+ * import a lens. The dependency arrow points lenses -> catalog (the lenses call
19
+ * {@link recordRelational}); the catalog never points back at a lens, so it stays
20
+ * a leaf the lenses build on. The only lens reference is the type-level
21
+ * {@link TableSchema} import, which is erased at runtime (`import type`), so it
22
+ * adds no runtime coupling or import cycle.
23
+ */
24
+ import { prefixRange } from "../query/range.js";
25
+ /**
26
+ * The reserved marker. It is U+0000, encoded as the single byte 0x00 — the
27
+ * lowest byte, so it sorts before every byte a non-reserved UTF-8 name can begin
28
+ * with. A user collection or table name may not start with it (see
29
+ * {@link assertUserName}); that one rule keeps all user keys strictly above, and
30
+ * therefore disjoint from, the catalog namespace below.
31
+ */
32
+ export const RESERVED_MARKER = "\x00";
33
+ /**
34
+ * The catalog key prefix: every catalog entry's key begins with this string. It
35
+ * opens with the reserved marker, so the whole catalog namespace sorts before
36
+ * any user-data key (which can never start with the marker). The readable
37
+ * `libredb:catalog:` tail keeps the namespace self-describing if a raw-KV tool
38
+ * dumps the file before it understands the catalog.
39
+ */
40
+ export const CATALOG_PREFIX = `${RESERVED_MARKER}libredb:catalog:`;
41
+ /**
42
+ * Reject a user namespace name that begins with the reserved marker — a loud
43
+ * error, the same class of correctness rule as the prefix-soundness checks the
44
+ * lenses already enforce. Such a name could place a user key inside the catalog
45
+ * namespace and break the isolation the catalog relies on, so it is forbidden
46
+ * outright rather than silently remapped. Called by `doc` and `table` when a
47
+ * handle is built; the raw kv lens is deliberately not guarded — it is the raw
48
+ * layer with full keyspace access (DESIGN.md section 6.3).
49
+ */
50
+ export function assertUserName(name) {
51
+ if (name.startsWith(RESERVED_MARKER)) {
52
+ throw new Error(`libredb: namespace name ${JSON.stringify(name)} may not start with the reserved catalog marker (U+0000)`);
53
+ }
54
+ }
55
+ const utf8 = new TextEncoder();
56
+ const fromUtf8 = new TextDecoder();
57
+ /** The kernel key for one namespace's catalog entry: the reserved prefix plus
58
+ * the namespace name, UTF-8 encoded. Because the prefix opens with the reserved
59
+ * low byte, this key always sorts outside every user-data range. */
60
+ function catalogKey(name) {
61
+ return utf8.encode(CATALOG_PREFIX + name);
62
+ }
63
+ /** Whether two table schemas are equal by structure: same primary key and the
64
+ * same columns mapped to the same types. Declared column ORDER is irrelevant
65
+ * (the comparison is over the key set), so reopening with the same schema
66
+ * written differently still validates. Specialized to the schema shape on
67
+ * purpose — the catalog has no arbitrary-JSON entries to compare. */
68
+ function schemasEqual(a, b) {
69
+ const aColumns = Object.keys(a.columns);
70
+ const bColumns = Object.keys(b.columns);
71
+ return (a.primaryKey === b.primaryKey &&
72
+ aColumns.length === bColumns.length &&
73
+ aColumns.every((column) => a.columns[column] === b.columns[column]));
74
+ }
75
+ /**
76
+ * Record a relational table's schema in the catalog on first creation, or — if
77
+ * the namespace is already cataloged — validate that the passed schema equals
78
+ * the persisted one, throwing on mismatch (DESIGN.md section 6.3: no schema
79
+ * migration in v1). Called by {@link table} when a handle is built.
80
+ *
81
+ * The read and the conditional write run in ONE kernel transaction, so the
82
+ * check-then-record is atomic and, on a file-backed database, the entry is
83
+ * fsync'd through the WAL before `table()` returns (it survives a reopen). The
84
+ * value is JSON of a {@link CatalogEntry} — an ordinary KV value under the
85
+ * reserved key, so the kv lens (the raw layer) can also read it.
86
+ */
87
+ export function recordRelational(store, name, schema) {
88
+ store.transact((tx) => {
89
+ const key = catalogKey(name);
90
+ const existing = tx.get(key);
91
+ if (existing === undefined) {
92
+ const entry = { kind: "relational", schema };
93
+ tx.set(key, utf8.encode(JSON.stringify(entry)));
94
+ return;
95
+ }
96
+ const persisted = JSON.parse(fromUtf8.decode(existing));
97
+ if (persisted.schema === undefined || !schemasEqual(persisted.schema, schema)) {
98
+ throw new Error(`libredb: table ${JSON.stringify(name)} was reopened with a schema that does not match ` +
99
+ `the persisted catalog entry; v1 does not support schema migration`);
100
+ }
101
+ });
102
+ }
103
+ /**
104
+ * Register a document collection in the catalog on its first write, recording
105
+ * only `{ kind: "document" }` — documents are schemaless, so existence and kind
106
+ * are all there is to record (DESIGN.md section 6.3). Idempotent: it writes the
107
+ * entry only when the namespace is not already cataloged, so repeated writes
108
+ * neither duplicate nor error.
109
+ *
110
+ * Unlike {@link recordRelational}, this takes the caller's {@link Transaction}
111
+ * rather than a {@link Store}: a document collection registers lazily on its
112
+ * first `put`, which is already inside a transaction, and the kernel forbids
113
+ * nested `transact`. Riding the write's own transaction also makes the
114
+ * registration and the first document durable together (one fsync, atomic).
115
+ *
116
+ * Write-if-absent is the crux that keeps a relational table's catalog entry
117
+ * intact: `table()` routes its inserts through an internal document `put`, but
118
+ * the `{ kind: "relational", schema }` entry was already recorded at table
119
+ * construction (see {@link recordRelational}), so this no-ops there and never
120
+ * downgrades it to a bare `document` kind.
121
+ */
122
+ export function recordDocument(tx, name) {
123
+ const key = catalogKey(name);
124
+ if (tx.get(key) !== undefined)
125
+ return;
126
+ const entry = { kind: "document" };
127
+ tx.set(key, utf8.encode(JSON.stringify(entry)));
128
+ }
129
+ /**
130
+ * Read the whole catalog as a {@link CatalogRegistry} snapshot — the public
131
+ * read API a tool uses to enumerate a database's namespaces and their kinds
132
+ * (DESIGN.md section 6.3). Each entry's key has the reserved prefix stripped, so
133
+ * callers see plain namespace names (`users`, not `\x00libredb:catalog:users`).
134
+ *
135
+ * It scans only `[CATALOG_PREFIX, upperBound)` — the same byte-level prefix
136
+ * range the lenses use, computed by {@link prefixRange}. Because the prefix
137
+ * opens with the reserved low byte and {@link assertUserName} keeps user keys
138
+ * above it, that range is disjoint from all user data: catalog entries never
139
+ * leak into a `doc`/`table`/user-`kv` scan, and no user row leaks into the
140
+ * registry.
141
+ *
142
+ * The result is an EAGER snapshot, not a lazy {@link import("./types.ts").Result}
143
+ * like a lens read: the catalog is small metadata (one entry per namespace), and
144
+ * a `Map` gives a tool direct lookup and enumeration. The single read
145
+ * transaction sees one consistent committed state.
146
+ */
147
+ export function catalog(store) {
148
+ const { start, end } = prefixRange(utf8.encode(CATALOG_PREFIX));
149
+ return store.transact((tx) => {
150
+ const registry = new Map();
151
+ for (const entry of tx.getRange(start, end)) {
152
+ const name = fromUtf8.decode(entry.key).slice(CATALOG_PREFIX.length);
153
+ registry.set(name, JSON.parse(fromUtf8.decode(entry.value)));
154
+ }
155
+ return registry;
156
+ });
157
+ }
@@ -101,4 +101,3 @@ export interface DocCollection {
101
101
  * can run a transaction).
102
102
  */
103
103
  export declare function doc(store: Store, collection: string): DocCollection;
104
- //# sourceMappingURL=document.d.ts.map
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import { result } from "./types.js";
15
15
  import { prefixRange } from "../query/range.js";
16
+ import { assertUserName, recordDocument } from "./catalog.js";
16
17
  const utf8 = new TextEncoder();
17
18
  const fromUtf8 = new TextDecoder();
18
19
  /** Serialize a document to UTF-8 JSON bytes — the form the kernel stores. */
@@ -95,6 +96,9 @@ function keyOf(collection, id) {
95
96
  * can run a transaction).
96
97
  */
97
98
  export function doc(store, collection) {
99
+ // A collection name may not intrude on the reserved catalog namespace
100
+ // (DESIGN.md section 6.3) — reject it loudly before any key is derived.
101
+ assertUserName(collection);
98
102
  // The byte range covering every `<collection>:` key. prefixRange computes the
99
103
  // [start, end) bound on raw bytes so it agrees with the kernel's order, which
100
104
  // is what makes the colon a sound collection boundary (a sibling like "users2"
@@ -120,6 +124,12 @@ export function doc(store, collection) {
120
124
  return {
121
125
  put(id, document) {
122
126
  store.transact((tx) => {
127
+ // Register this collection in the catalog on its first write (DESIGN.md
128
+ // section 6.3). Idempotent and inside the write's own transaction, so the
129
+ // registration and the document are durable together. A table's inserts
130
+ // also reach here, but recordDocument is write-if-absent and the
131
+ // relational entry already exists, so it never downgrades that entry.
132
+ recordDocument(tx, collection);
123
133
  tx.set(keyOf(collection, id), encodeDoc(document));
124
134
  });
125
135
  return { changed: 1 };
@@ -149,4 +159,3 @@ export function doc(store, collection) {
149
159
  },
150
160
  };
151
161
  }
152
- //# sourceMappingURL=document.js.map
package/dist/lens/kv.d.ts CHANGED
@@ -56,4 +56,3 @@ export interface Kv {
56
56
  /** Build a {@link Kv} lens over a {@link Store} (the kernel's `Database`
57
57
  * satisfies it, as does any object that can run a transaction). */
58
58
  export declare function kv(store: Store): Kv;
59
- //# sourceMappingURL=kv.d.ts.map
package/dist/lens/kv.js CHANGED
@@ -84,4 +84,3 @@ function scan(store, start, end) {
84
84
  return rows;
85
85
  }));
86
86
  }
87
- //# sourceMappingURL=kv.js.map
@@ -116,4 +116,3 @@ export interface Table {
116
116
  * the primary key becomes the string kernel key.
117
117
  */
118
118
  export declare function table(store: Store, name: string, schema: TableSchema): Table;
119
- //# sourceMappingURL=relational.d.ts.map
@@ -24,6 +24,7 @@
24
24
  * `table.column`). The kernel is unchanged.
25
25
  */
26
26
  import { doc, matches } from "./document.js";
27
+ import { assertUserName, recordRelational } from "./catalog.js";
27
28
  import { result } from "./types.js";
28
29
  /** Whether `value` matches the declared `type`. `"object"` is a plain JSON
29
30
  * object — `null` (typeof `"object"`) and arrays are rejected, since v1 has
@@ -162,6 +163,9 @@ function query(name, source) {
162
163
  * the primary key becomes the string kernel key.
163
164
  */
164
165
  export function table(store, name, schema) {
166
+ // A table name may not intrude on the reserved catalog namespace (DESIGN.md
167
+ // section 6.3) — reject it before validating the schema or deriving any key.
168
+ assertUserName(name);
165
169
  const pkType = schema.columns[schema.primaryKey];
166
170
  if (pkType === undefined) {
167
171
  throw new Error(`primaryKey "${schema.primaryKey}" is not a declared column`);
@@ -169,6 +173,13 @@ export function table(store, name, schema) {
169
173
  if (pkType !== "string") {
170
174
  throw new Error(`primaryKey "${schema.primaryKey}" must be a string column, but is ${pkType}`);
171
175
  }
176
+ // Record this table's schema in the catalog (DESIGN.md section 6.3) so a tool
177
+ // opening the file cold can show a faithful relational view, or — if the name
178
+ // is already cataloged — validate the schema matches the persisted one (no
179
+ // migration in v1). Runs after the schema is structurally valid, so a broken
180
+ // schema never reaches the catalog. The kernel stays unchanged: this is just a
181
+ // KV write under the reserved prefix.
182
+ recordRelational(store, name, schema);
172
183
  // A table is a schema-validated document collection: rows are stored, read,
173
184
  // deleted, and scanned through the document lens at `<table>:<pk>`. This is
174
185
  // what reuses the document codec and the collection-isolation-safe prefix scan;
@@ -210,4 +221,3 @@ export function table(store, name, schema) {
210
221
  },
211
222
  };
212
223
  }
213
- //# sourceMappingURL=relational.js.map
@@ -55,4 +55,3 @@ export interface WriteResult {
55
55
  * helper so "what a Result is" has a single definition.
56
56
  */
57
57
  export declare function result<Row>(source: () => Iterable<Row>): Result<Row>;
58
- //# sourceMappingURL=types.d.ts.map
@@ -32,4 +32,3 @@ export function result(source) {
32
32
  },
33
33
  };
34
34
  }
35
- //# sourceMappingURL=types.js.map
@@ -41,4 +41,3 @@ export interface KeyRange {
41
41
  * (DESIGN.md principle 2) where silently scanning the wrong range would not be.
42
42
  */
43
43
  export declare function prefixRange(prefix: Uint8Array): KeyRange;
44
- //# sourceMappingURL=range.d.ts.map
@@ -57,4 +57,3 @@ function upperBound(prefix) {
57
57
  bound[length - 1] = bound[length - 1] + 1;
58
58
  return bound;
59
59
  }
60
- //# sourceMappingURL=range.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libredb/libredb",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "A small, readable, embeddable, multi-model database. One ordered key-value core, thin model lenses on top.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/adapter/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC;CAC7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/adapter/store.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAYH,mEAAmE;AACnE,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC;AAE7B;4EAC4E;AAC5E,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC;AAE/B,2DAA2D;AAC3D,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,4DAA4D;IAC5D,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAClC,8CAA8C;IAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;CACjD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,oEAAoE;IACpE,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;+EAC+E;AAC/E,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,QAAQ,CAAC;AAwSvD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,IA0DlB,CAAC"}
package/dist/core.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEvF,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAGlC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/lens/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;AAKD,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAEhD;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAE9D;AAaD;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B;2CACuC;IACvC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,WAAW,CAAC;IAC5C,2EAA2E;IAC3E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IACjC;wBACoB;IACpB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAAC;IAChC;;;;;yDAKqD;IACrD,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB;;;;;;;;eAQW;IACX,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CA2DnE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/lens/document.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/lens/kv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;gFACgF;AAChF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,EAAE;IACjB,mEAAmE;IACnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC;4BACwB;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7C,iFAAiF;IACjF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;IACjC;4EACwE;IACxE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD;;;qEAGiE;IACjE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACzC;AAOD;mEACmE;AACnE,wBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAmCnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/lens/kv.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"relational.d.ts","sourceRoot":"","sources":["../../src/lens/relational.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC;CAC3D;AAED;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;CAAE,CAAC;AA0C3E;;;;;;;;GAQG;AACH,MAAM,WAAW,KAAM,SAAQ,MAAM,CAAC,GAAG,CAAC;IACxC;;;yEAGqE;IACrE,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,KAAK,CAAC;IAC7B;;;sFAGkF;IAClF,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;CAClE;AAuGD;;;;;;;GAOG;AACH,MAAM,WAAW,KAAK;IACpB;wEACoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC;IAC9B;oFACgF;IAChF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IACjC;sCACkC;IAClC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAAC;IAChC;;;;;;4BAMwB;IACxB,GAAG,IAAI,KAAK,CAAC;IACb;sEACkE;IAClE,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,KAAK,CAAC;IAC7B;4CACwC;IACxC,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC;;;2CAGuC;IACvC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;CAClE;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK,CAoD5E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"relational.js","sourceRoot":"","sources":["../../src/lens/relational.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lens/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,MAAM,CAAC,GAAG,CAAE,SAAQ,QAAQ,CAAC,GAAG,CAAC;IAChD;4DACwD;IACxD,OAAO,IAAI,GAAG,EAAE,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CASpE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lens/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoCH;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAM,MAA2B;IACrD,OAAO;QACL,CAAC,MAAM,CAAC,QAAQ,CAAC;YACf,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,CAAC;QACD,OAAO;YACL,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/query/range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAMxD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/query/range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAaH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,MAAkB;IACpC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,OAAO,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,MAAM,EAAE,CAAC;IAC3D,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAY,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC"}