mongolite-ts 0.7.2 → 0.8.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.
package/README.md CHANGED
@@ -70,6 +70,81 @@ main();
70
70
  | [JSON Safety](./docs/JSON_SAFETY.md) | Document validation and corrupted data recovery |
71
71
  | [Query Debugger](./docs/DEBUGGER.md) | Interactive CLI for debugging queries and inspecting SQL |
72
72
  | [Benchmarks](./docs/BENCHMARKS.md) | Performance benchmarks and storage characteristics |
73
+ | [Cloudflare Durable Objects](./docs/CLOUDFLARE.md) | Using MongoLite inside a Cloudflare Durable Object |
74
+
75
+ ## Backend Examples
76
+
77
+ ### SQLite file (Node.js / Bun)
78
+
79
+ ```typescript
80
+ import { MongoLite } from 'mongolite-ts';
81
+
82
+ const client = new MongoLite('./myapp.sqlite');
83
+ await client.connect();
84
+ const users = client.collection('users');
85
+ await users.insertOne({ name: 'Alice', age: 30 });
86
+ await client.close();
87
+ ```
88
+
89
+ ### In-memory (tests / ephemeral)
90
+
91
+ ```typescript
92
+ import { MongoLite } from 'mongolite-ts';
93
+
94
+ const client = new MongoLite(':memory:');
95
+ await client.connect();
96
+ const users = client.collection('users');
97
+ await users.insertOne({ name: 'Alice', age: 30 });
98
+ // Data is discarded when the process exits
99
+ await client.close();
100
+ ```
101
+
102
+ ### Browser (via sql.js)
103
+
104
+ Requires [sql.js](https://www.npmjs.com/package/sql.js) (`npm install sql.js`).
105
+
106
+ ```typescript
107
+ import initSqlJs from 'sql.js';
108
+ import { MongoLite, BrowserSqliteAdapter } from 'mongolite-ts';
109
+
110
+ const SQL = await initSqlJs({
111
+ locateFile: (file) => `https://cdn.jsdelivr.net/npm/sql.js/dist/${file}`,
112
+ });
113
+ const sqlJsDb = new SQL.Database(); // in-memory; use OPFS/IndexedDB for persistence
114
+
115
+ const client = new MongoLite(new BrowserSqliteAdapter(sqlJsDb));
116
+ await client.connect();
117
+ const users = client.collection('users');
118
+ await users.insertOne({ name: 'Alice', age: 30 });
119
+ console.log(await users.findOne({ name: 'Alice' }));
120
+ await client.close();
121
+ ```
122
+
123
+ ### Cloudflare Durable Objects
124
+
125
+ ```typescript
126
+ import { DurableObject } from 'cloudflare:workers';
127
+ import { MongoLite, CloudflareDurableObjectAdapter } from 'mongolite-ts/cloudflare';
128
+
129
+ export class MyDurableObject extends DurableObject {
130
+ private client: MongoLite;
131
+
132
+ constructor(ctx: DurableObjectState, env: Env) {
133
+ super(ctx, env);
134
+ // Pass ctx.storage.sql — no file path needed
135
+ this.client = new MongoLite(new CloudflareDurableObjectAdapter(ctx.storage.sql));
136
+ ctx.blockConcurrencyWhile(() => this.client.collection('users').ensureTable());
137
+ }
138
+
139
+ async fetch(request: Request) {
140
+ const users = this.client.collection('users');
141
+ await users.insertOne({ name: 'Alice', age: 30 });
142
+ return Response.json(await users.findOne({ name: 'Alice' }));
143
+ }
144
+ }
145
+ ```
146
+
147
+ > See [docs/CLOUDFLARE.md](./docs/CLOUDFLARE.md) for the full guide, supported operations, and limitations.
73
148
 
74
149
  ## Development
75
150
 
@@ -0,0 +1,97 @@
1
+ import type { IDatabaseAdapter } from '../db.js';
2
+ type SqlJsColumnType = string | number | bigint | null | Uint8Array;
3
+ type SqlJsBindParams = SqlJsColumnType[] | Record<string, SqlJsColumnType> | null;
4
+ /**
5
+ * Minimal interface representing a sql.js Statement object.
6
+ * @see https://sql.js.org/documentation/Statement.html
7
+ */
8
+ export interface SqlJsStatement {
9
+ bind(params?: SqlJsBindParams): boolean;
10
+ step(): boolean;
11
+ getAsObject(params?: SqlJsBindParams | null): Record<string, SqlJsColumnType>;
12
+ free(): boolean;
13
+ }
14
+ /**
15
+ * Minimal interface representing a sql.js Database object.
16
+ * @see https://sql.js.org/documentation/Database.html
17
+ */
18
+ export interface SqlJsDatabase {
19
+ run(sql: string, params?: SqlJsBindParams): SqlJsDatabase;
20
+ exec(sql: string): Array<{
21
+ columns: string[];
22
+ values: SqlJsColumnType[][];
23
+ }>;
24
+ prepare(sql: string): SqlJsStatement;
25
+ close(): void;
26
+ }
27
+ /**
28
+ * Database adapter that wraps a {@link SqlJsDatabase} instance, enabling MongoLite
29
+ * to run in browser environments via [sql.js](https://sql.js.org/).
30
+ *
31
+ * ## Usage
32
+ *
33
+ * Install [sql.js](https://www.npmjs.com/package/sql.js) and initialise it before
34
+ * constructing the adapter:
35
+ *
36
+ * ```ts
37
+ * import initSqlJs from 'sql.js';
38
+ * import { MongoLite, BrowserSqliteAdapter } from 'mongolite-ts';
39
+ *
40
+ * const SQL = await initSqlJs({
41
+ * locateFile: (file) => `https://cdn.jsdelivr.net/npm/sql.js/dist/${file}`,
42
+ * });
43
+ * const sqlJsDb = new SQL.Database(); // in-memory; persist via OPFS or IndexedDB
44
+ *
45
+ * const client = new MongoLite(new BrowserSqliteAdapter(sqlJsDb));
46
+ * await client.connect();
47
+ * const users = client.collection('users');
48
+ * await users.insertOne({ name: 'Alice', age: 30 });
49
+ * await client.close();
50
+ * ```
51
+ *
52
+ * ## Limitations
53
+ *
54
+ * - **`$regex` queries are not supported** — sql.js does not ship with a `regexp()`
55
+ * SQL function. Use JS-side filtering as a workaround.
56
+ * - **`lastID` / `changes`** are not exposed by the sql.js API. `run()` always
57
+ * returns `{ lastID: 0, changes: 0 }`, which is safe because MongoLite does not
58
+ * use these values internally.
59
+ * - **Persistence** — by default sql.js stores data in memory. For durable storage
60
+ * use the OPFS back-end or export the database buffer to IndexedDB.
61
+ */
62
+ export declare class BrowserSqliteAdapter implements IDatabaseAdapter {
63
+ private readonly db;
64
+ /**
65
+ * @param db An initialised sql.js `Database` instance.
66
+ */
67
+ constructor(db: SqlJsDatabase);
68
+ /**
69
+ * No-op: sql.js Database is already open on construction.
70
+ */
71
+ connect(): Promise<void>;
72
+ /**
73
+ * Closes the underlying sql.js Database and frees its WASM memory.
74
+ */
75
+ close(): Promise<void>;
76
+ /**
77
+ * Executes a DML statement (INSERT, UPDATE, DELETE) with optional bound parameters.
78
+ * Returns `{ lastID: 0, changes: 0 }` — sql.js does not expose these values.
79
+ */
80
+ run(sql: string, params?: unknown[]): Promise<{
81
+ lastID: number;
82
+ changes: number;
83
+ }>;
84
+ /**
85
+ * Executes a SQL query and returns the first matching row, or `undefined`.
86
+ */
87
+ get<T>(sql: string, params?: unknown[]): Promise<T | undefined>;
88
+ /**
89
+ * Executes a SQL query and returns all matching rows.
90
+ */
91
+ all<T>(sql: string, params?: unknown[]): Promise<T[]>;
92
+ /**
93
+ * Executes one or more SQL statements (DDL, transactions, etc.).
94
+ */
95
+ exec(sql: string): Promise<void>;
96
+ }
97
+ export {};
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Database adapter that wraps a {@link SqlJsDatabase} instance, enabling MongoLite
3
+ * to run in browser environments via [sql.js](https://sql.js.org/).
4
+ *
5
+ * ## Usage
6
+ *
7
+ * Install [sql.js](https://www.npmjs.com/package/sql.js) and initialise it before
8
+ * constructing the adapter:
9
+ *
10
+ * ```ts
11
+ * import initSqlJs from 'sql.js';
12
+ * import { MongoLite, BrowserSqliteAdapter } from 'mongolite-ts';
13
+ *
14
+ * const SQL = await initSqlJs({
15
+ * locateFile: (file) => `https://cdn.jsdelivr.net/npm/sql.js/dist/${file}`,
16
+ * });
17
+ * const sqlJsDb = new SQL.Database(); // in-memory; persist via OPFS or IndexedDB
18
+ *
19
+ * const client = new MongoLite(new BrowserSqliteAdapter(sqlJsDb));
20
+ * await client.connect();
21
+ * const users = client.collection('users');
22
+ * await users.insertOne({ name: 'Alice', age: 30 });
23
+ * await client.close();
24
+ * ```
25
+ *
26
+ * ## Limitations
27
+ *
28
+ * - **`$regex` queries are not supported** — sql.js does not ship with a `regexp()`
29
+ * SQL function. Use JS-side filtering as a workaround.
30
+ * - **`lastID` / `changes`** are not exposed by the sql.js API. `run()` always
31
+ * returns `{ lastID: 0, changes: 0 }`, which is safe because MongoLite does not
32
+ * use these values internally.
33
+ * - **Persistence** — by default sql.js stores data in memory. For durable storage
34
+ * use the OPFS back-end or export the database buffer to IndexedDB.
35
+ */
36
+ export class BrowserSqliteAdapter {
37
+ /**
38
+ * @param db An initialised sql.js `Database` instance.
39
+ */
40
+ constructor(db) {
41
+ this.db = db;
42
+ }
43
+ /**
44
+ * No-op: sql.js Database is already open on construction.
45
+ */
46
+ async connect() {
47
+ // Nothing to do — the sql.js Database is ready to use immediately.
48
+ }
49
+ /**
50
+ * Closes the underlying sql.js Database and frees its WASM memory.
51
+ */
52
+ async close() {
53
+ this.db.close();
54
+ }
55
+ /**
56
+ * Executes a DML statement (INSERT, UPDATE, DELETE) with optional bound parameters.
57
+ * Returns `{ lastID: 0, changes: 0 }` — sql.js does not expose these values.
58
+ */
59
+ async run(sql, params = []) {
60
+ this.db.run(sql, params);
61
+ return { lastID: 0, changes: 0 };
62
+ }
63
+ /**
64
+ * Executes a SQL query and returns the first matching row, or `undefined`.
65
+ */
66
+ async get(sql, params = []) {
67
+ const stmt = this.db.prepare(sql);
68
+ try {
69
+ stmt.bind(params);
70
+ if (stmt.step()) {
71
+ return stmt.getAsObject();
72
+ }
73
+ return undefined;
74
+ }
75
+ finally {
76
+ stmt.free();
77
+ }
78
+ }
79
+ /**
80
+ * Executes a SQL query and returns all matching rows.
81
+ */
82
+ async all(sql, params = []) {
83
+ const stmt = this.db.prepare(sql);
84
+ try {
85
+ stmt.bind(params);
86
+ const rows = [];
87
+ while (stmt.step()) {
88
+ rows.push(stmt.getAsObject());
89
+ }
90
+ return rows;
91
+ }
92
+ finally {
93
+ stmt.free();
94
+ }
95
+ }
96
+ /**
97
+ * Executes one or more SQL statements (DDL, transactions, etc.).
98
+ */
99
+ async exec(sql) {
100
+ this.db.exec(sql);
101
+ }
102
+ }
103
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/adapters/browser.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,oBAAoB;IAG/B;;OAEG;IACH,YAAY,EAAiB;QAC3B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,mEAAmE;IACrE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC3C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAA2B,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,SAAoB,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAA2B,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,WAAW,EAAO,CAAC;YACjC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,SAAoB,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAA2B,CAAC,CAAC;YACvC,MAAM,IAAI,GAAQ,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAO,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,106 @@
1
+ import { IDatabaseAdapter } from '../db.js';
2
+ /**
3
+ * Allowed scalar binding values accepted by Cloudflare's SqlStorage.exec().
4
+ */
5
+ export type SqlStorageValue = string | number | boolean | null | ArrayBuffer;
6
+ /**
7
+ * Minimal interface for the cursor returned by SqlStorage.exec().
8
+ * This matches the Cloudflare Durable Objects SqlStorage API.
9
+ */
10
+ export interface SqlStorageCursor<T = Record<string, SqlStorageValue>> {
11
+ toArray(): T[];
12
+ one(): T;
13
+ readonly rowsRead: number;
14
+ readonly rowsWritten: number;
15
+ readonly columnNames: readonly string[];
16
+ }
17
+ /**
18
+ * Minimal interface for the Cloudflare Durable Objects SqlStorage API.
19
+ * Pass `ctx.storage.sql` from your Durable Object to the adapter constructor.
20
+ *
21
+ * @see https://developers.cloudflare.com/durable-objects/api/sqlite-storage-api/
22
+ */
23
+ export interface SqlStorage {
24
+ exec<T = Record<string, SqlStorageValue>>(query: string, ...bindings: SqlStorageValue[]): SqlStorageCursor<T>;
25
+ }
26
+ /**
27
+ * Database adapter that wraps the Cloudflare Durable Objects `SqlStorage` API,
28
+ * allowing MongoLite to be used inside a Cloudflare Durable Object.
29
+ *
30
+ * ## Usage
31
+ *
32
+ * ```ts
33
+ * import { DurableObject } from 'cloudflare:workers';
34
+ * import { MongoLite, CloudflareDurableObjectAdapter } from 'mongolite-ts/cloudflare';
35
+ *
36
+ * export class MyDurableObject extends DurableObject {
37
+ * private client: MongoLite;
38
+ *
39
+ * constructor(ctx: DurableObjectState, env: Env) {
40
+ * super(ctx, env);
41
+ * const adapter = new CloudflareDurableObjectAdapter(ctx.storage.sql);
42
+ * this.client = new MongoLite(adapter);
43
+ * }
44
+ *
45
+ * async fetch(request: Request) {
46
+ * await this.client.connect();
47
+ * const users = this.client.collection('users');
48
+ * await users.insertOne({ name: 'Alice', age: 30 });
49
+ * const user = await users.findOne({ name: 'Alice' });
50
+ * return Response.json(user);
51
+ * }
52
+ * }
53
+ * ```
54
+ *
55
+ * ## Limitations
56
+ *
57
+ * - **`$regex` queries are not supported.** Cloudflare's SQLite does not allow custom
58
+ * SQL functions, so the `regexp()` UDF registered by the default Node.js adapter is
59
+ * unavailable. Queries using `$regex` will throw a SQL error at runtime.
60
+ * - `WAL` mode and most `PRAGMA` statements are not available in Cloudflare Durable
61
+ * Objects (Cloudflare manages this internally).
62
+ * - Change Streams (`collection.watch()`) use SQL triggers and a change-log table.
63
+ * They work in Cloudflare Durable Objects, but the polling mechanism relies on
64
+ * `setInterval`, which is supported in the Workers runtime.
65
+ */
66
+ export declare class CloudflareDurableObjectAdapter implements IDatabaseAdapter {
67
+ private readonly sql;
68
+ /**
69
+ * @param sql The `SqlStorage` instance from a Cloudflare Durable Object context
70
+ * (i.e. `ctx.storage.sql`).
71
+ */
72
+ constructor(sql: SqlStorage);
73
+ /**
74
+ * No-op: Cloudflare Durable Objects manage the storage lifecycle automatically.
75
+ */
76
+ connect(): Promise<void>;
77
+ /**
78
+ * No-op: Cloudflare Durable Objects manage the storage lifecycle automatically.
79
+ */
80
+ close(): Promise<void>;
81
+ /**
82
+ * Executes a SQL statement that does not return rows (INSERT, UPDATE, DELETE, DDL).
83
+ */
84
+ run(sql: string, params?: unknown[]): Promise<{
85
+ lastID: number;
86
+ changes: number;
87
+ }>;
88
+ /**
89
+ * Executes a SQL query and returns the first matching row, or `undefined`.
90
+ */
91
+ get<T>(sql: string, params?: unknown[]): Promise<T | undefined>;
92
+ /**
93
+ * Executes a SQL query and returns all matching rows.
94
+ */
95
+ all<T>(sql: string, params?: unknown[]): Promise<T[]>;
96
+ /**
97
+ * Executes a single SQL statement (DDL, transactions, etc.).
98
+ *
99
+ * Cloudflare's `SqlStorage.exec` only supports one statement at a time, and
100
+ * some valid statements (e.g. `CREATE TRIGGER ... BEGIN ...; ...; END;`)
101
+ * contain internal semicolons. Callers must therefore pass exactly one
102
+ * statement per call; this method will not attempt to split multi-statement
103
+ * SQL strings.
104
+ */
105
+ exec(sql: string): Promise<void>;
106
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Database adapter that wraps the Cloudflare Durable Objects `SqlStorage` API,
3
+ * allowing MongoLite to be used inside a Cloudflare Durable Object.
4
+ *
5
+ * ## Usage
6
+ *
7
+ * ```ts
8
+ * import { DurableObject } from 'cloudflare:workers';
9
+ * import { MongoLite, CloudflareDurableObjectAdapter } from 'mongolite-ts/cloudflare';
10
+ *
11
+ * export class MyDurableObject extends DurableObject {
12
+ * private client: MongoLite;
13
+ *
14
+ * constructor(ctx: DurableObjectState, env: Env) {
15
+ * super(ctx, env);
16
+ * const adapter = new CloudflareDurableObjectAdapter(ctx.storage.sql);
17
+ * this.client = new MongoLite(adapter);
18
+ * }
19
+ *
20
+ * async fetch(request: Request) {
21
+ * await this.client.connect();
22
+ * const users = this.client.collection('users');
23
+ * await users.insertOne({ name: 'Alice', age: 30 });
24
+ * const user = await users.findOne({ name: 'Alice' });
25
+ * return Response.json(user);
26
+ * }
27
+ * }
28
+ * ```
29
+ *
30
+ * ## Limitations
31
+ *
32
+ * - **`$regex` queries are not supported.** Cloudflare's SQLite does not allow custom
33
+ * SQL functions, so the `regexp()` UDF registered by the default Node.js adapter is
34
+ * unavailable. Queries using `$regex` will throw a SQL error at runtime.
35
+ * - `WAL` mode and most `PRAGMA` statements are not available in Cloudflare Durable
36
+ * Objects (Cloudflare manages this internally).
37
+ * - Change Streams (`collection.watch()`) use SQL triggers and a change-log table.
38
+ * They work in Cloudflare Durable Objects, but the polling mechanism relies on
39
+ * `setInterval`, which is supported in the Workers runtime.
40
+ */
41
+ export class CloudflareDurableObjectAdapter {
42
+ /**
43
+ * @param sql The `SqlStorage` instance from a Cloudflare Durable Object context
44
+ * (i.e. `ctx.storage.sql`).
45
+ */
46
+ constructor(sql) {
47
+ this.sql = sql;
48
+ }
49
+ /**
50
+ * No-op: Cloudflare Durable Objects manage the storage lifecycle automatically.
51
+ */
52
+ async connect() {
53
+ // Nothing to do — the SqlStorage instance is already live.
54
+ }
55
+ /**
56
+ * No-op: Cloudflare Durable Objects manage the storage lifecycle automatically.
57
+ */
58
+ async close() {
59
+ // Nothing to do — storage is managed by the Durable Object runtime.
60
+ }
61
+ /**
62
+ * Executes a SQL statement that does not return rows (INSERT, UPDATE, DELETE, DDL).
63
+ */
64
+ async run(sql, params = []) {
65
+ const cursor = this.sql.exec(sql, ...params);
66
+ return { lastID: 0, changes: cursor.rowsWritten };
67
+ }
68
+ /**
69
+ * Executes a SQL query and returns the first matching row, or `undefined`.
70
+ */
71
+ async get(sql, params = []) {
72
+ const rows = this.sql.exec(sql, ...params).toArray();
73
+ return rows[0];
74
+ }
75
+ /**
76
+ * Executes a SQL query and returns all matching rows.
77
+ */
78
+ async all(sql, params = []) {
79
+ return this.sql.exec(sql, ...params).toArray();
80
+ }
81
+ /**
82
+ * Executes a single SQL statement (DDL, transactions, etc.).
83
+ *
84
+ * Cloudflare's `SqlStorage.exec` only supports one statement at a time, and
85
+ * some valid statements (e.g. `CREATE TRIGGER ... BEGIN ...; ...; END;`)
86
+ * contain internal semicolons. Callers must therefore pass exactly one
87
+ * statement per call; this method will not attempt to split multi-statement
88
+ * SQL strings.
89
+ */
90
+ async exec(sql) {
91
+ this.sql.exec(sql);
92
+ }
93
+ }
94
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,OAAO,8BAA8B;IAGzC;;;OAGG;IACH,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,2DAA2D;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,oEAAoE;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAI,MAA4B,CAAC,CAAC;QACpE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,SAAoB,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAI,GAAG,EAAE,GAAI,MAA4B,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,SAAoB,EAAE;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAI,GAAG,EAAE,GAAI,MAA4B,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3E,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
- import { SQLiteDB } from './db.js';
2
+ import type { IDatabaseAdapter } from './db.js';
3
3
  import { DocumentWithId, Filter } from './types.js';
4
4
  export type ChangeOperationType = 'insert' | 'update' | 'delete' | 'replace';
5
5
  export interface ChangeStreamDocument<T extends DocumentWithId = DocumentWithId> {
@@ -51,7 +51,7 @@ export declare class ChangeStream<T extends DocumentWithId = DocumentWithId> ext
51
51
  private lastProcessedId;
52
52
  private buffer;
53
53
  private readonly maxBufferSize;
54
- constructor(db: SQLiteDB, collectionName: string, options?: ChangeStreamOptions<T>);
54
+ constructor(db: IDatabaseAdapter, collectionName: string, options?: ChangeStreamOptions<T>);
55
55
  /**
56
56
  * Sets up the change tracking infrastructure
57
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"changeStream.js","sourceRoot":"","sources":["../src/changeStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changeStream.js","sourceRoot":"","sources":["../src/changeStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Cloudflare-safe entry point for MongoLite.
3
+ *
4
+ * Import from `mongolite-ts/cloudflare` inside Cloudflare Workers / Durable Objects.
5
+ * This module does **not** import `better-sqlite3`, so it bundles cleanly with `wrangler`.
6
+ *
7
+ * ## Requirements
8
+ *
9
+ * - Enable **Node.js compatibility** in your Worker configuration (e.g. `nodejs_compat`
10
+ * flag in `wrangler.toml`/`wrangler.jsonc`). The `ChangeStream` class depends on
11
+ * Node's built-in `events` module, which requires this flag even if you don't use
12
+ * change streams directly.
13
+ *
14
+ * ## Usage
15
+ *
16
+ * ```ts
17
+ * import { DurableObject } from 'cloudflare:workers';
18
+ * import { MongoLite, CloudflareDurableObjectAdapter } from 'mongolite-ts/cloudflare';
19
+ *
20
+ * export class MyDurableObject extends DurableObject {
21
+ * private client: MongoLite;
22
+ *
23
+ * constructor(ctx: DurableObjectState, env: Env) {
24
+ * super(ctx, env);
25
+ * this.client = new MongoLite(new CloudflareDurableObjectAdapter(ctx.storage.sql));
26
+ * ctx.blockConcurrencyWhile(() => this.client.collection('users').ensureTable());
27
+ * }
28
+ * }
29
+ * ```
30
+ */
31
+ export { MongoLite } from './mongo-client.js';
32
+ export type { MongoLiteBaseOptions } from './mongo-client.js';
33
+ export { CloudflareDurableObjectAdapter } from './adapters/cloudflare.js';
34
+ export type { SqlStorage, SqlStorageCursor, SqlStorageValue, } from './adapters/cloudflare.js';
35
+ export type { IDatabaseAdapter } from './db.js';
36
+ export { MongoLiteCollection } from './collection.js';
37
+ export * from './types.js';
38
+ export { ChangeStream } from './changeStream.js';
39
+ export type { ChangeStreamDocument, ChangeStreamOptions, ChangeOperationType, } from './changeStream.js';
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Cloudflare-safe entry point for MongoLite.
3
+ *
4
+ * Import from `mongolite-ts/cloudflare` inside Cloudflare Workers / Durable Objects.
5
+ * This module does **not** import `better-sqlite3`, so it bundles cleanly with `wrangler`.
6
+ *
7
+ * ## Requirements
8
+ *
9
+ * - Enable **Node.js compatibility** in your Worker configuration (e.g. `nodejs_compat`
10
+ * flag in `wrangler.toml`/`wrangler.jsonc`). The `ChangeStream` class depends on
11
+ * Node's built-in `events` module, which requires this flag even if you don't use
12
+ * change streams directly.
13
+ *
14
+ * ## Usage
15
+ *
16
+ * ```ts
17
+ * import { DurableObject } from 'cloudflare:workers';
18
+ * import { MongoLite, CloudflareDurableObjectAdapter } from 'mongolite-ts/cloudflare';
19
+ *
20
+ * export class MyDurableObject extends DurableObject {
21
+ * private client: MongoLite;
22
+ *
23
+ * constructor(ctx: DurableObjectState, env: Env) {
24
+ * super(ctx, env);
25
+ * this.client = new MongoLite(new CloudflareDurableObjectAdapter(ctx.storage.sql));
26
+ * ctx.blockConcurrencyWhile(() => this.client.collection('users').ensureTable());
27
+ * }
28
+ * }
29
+ * ```
30
+ */
31
+ // Core MongoLite class — accepts any IDatabaseAdapter, no better-sqlite3 dependency.
32
+ export { MongoLite } from './mongo-client.js';
33
+ // Cloudflare-specific adapter
34
+ export { CloudflareDurableObjectAdapter } from './adapters/cloudflare.js';
35
+ export { MongoLiteCollection } from './collection.js';
36
+ export * from './types.js';
37
+ // Change streams (requires nodejs_compat in Workers)
38
+ export { ChangeStream } from './changeStream.js';
39
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qFAAqF;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,8BAA8B;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAS1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,cAAc,YAAY,CAAC;AAE3B,qDAAqD;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { SQLiteDB } from './db.js';
1
+ import type { IDatabaseAdapter } from './db.js';
2
2
  import { DocumentWithId, Filter, UpdateFilter, InsertOneResult, InsertManyResult, UpdateResult, DeleteResult, Projection, IndexSpecification, CreateIndexOptions, CreateIndexResult, DropIndexResult, IndexInfo, FindOneAndUpdateOptions, FindOneAndDeleteOptions, FindOneAndReplaceOptions, ReplaceOptions, AggregationPipeline } from './types.js';
3
3
  import { FindCursor } from './cursors/findCursor.js';
4
4
  import { ChangeStream, ChangeStreamOptions } from './changeStream.js';
@@ -10,7 +10,7 @@ export declare class MongoLiteCollection<T extends DocumentWithId> {
10
10
  private db;
11
11
  readonly name: string;
12
12
  private readonly options;
13
- constructor(db: SQLiteDB, name: string, options?: {
13
+ constructor(db: IDatabaseAdapter, name: string, options?: {
14
14
  verbose?: boolean;
15
15
  });
16
16
  /**