nanodb-orm 0.0.7 → 0.0.8
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 +34 -12
- package/dist/core/connection.d.ts +1 -1
- package/dist/core/connection.js +1 -1
- package/dist/init.d.ts +16 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +283 -151
- package/dist/init.js.map +1 -1
- package/dist/replicas.d.ts +0 -4
- package/dist/replicas.d.ts.map +1 -1
- package/dist/replicas.js +2 -0
- package/dist/replicas.js.map +1 -1
- package/dist/types/index.d.ts +8 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/migrations.d.ts +8 -6
- package/dist/utils/migrations.d.ts.map +1 -1
- package/dist/utils/migrations.js +68 -30
- package/dist/utils/migrations.js.map +1 -1
- package/dist/utils/schema-introspection.d.ts +14 -12
- package/dist/utils/schema-introspection.d.ts.map +1 -1
- package/dist/utils/schema-introspection.js +77 -35
- package/dist/utils/schema-introspection.js.map +1 -1
- package/dist/utils/seeds.d.ts +7 -5
- package/dist/utils/seeds.d.ts.map +1 -1
- package/dist/utils/seeds.js +67 -28
- package/dist/utils/seeds.js.map +1 -1
- package/dist/utils/sync.d.ts +6 -6
- package/dist/utils/sync.d.ts.map +1 -1
- package/dist/utils/sync.js +25 -17
- package/dist/utils/sync.js.map +1 -1
- package/dist/utils/transactions.d.ts +11 -4
- package/dist/utils/transactions.d.ts.map +1 -1
- package/dist/utils/transactions.js +8 -8
- package/dist/utils/transactions.js.map +1 -1
- package/package.json +15 -3
package/README.md
CHANGED
|
@@ -19,6 +19,11 @@ A lightweight ORM wrapper for Drizzle ORM with automatic migrations, schema intr
|
|
|
19
19
|
npm install nanodb-orm
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
## Monorepo
|
|
23
|
+
|
|
24
|
+
This repo is managed as an npm workspace with core + plugin packages.
|
|
25
|
+
See `PACKAGES.md` for layout and cross-package commands.
|
|
26
|
+
|
|
22
27
|
> **Important:** All interactions should go through `nanodb-orm`.
|
|
23
28
|
> Use `nanodb-orm` exports for schema, queries, and utilities instead of importing from Drizzle directly.
|
|
24
29
|
|
|
@@ -28,6 +33,9 @@ Optional plugins:
|
|
|
28
33
|
npm install @nanodb-orm/plugin-timestamps @nanodb-orm/plugin-soft-delete @nanodb-orm/plugin-logger
|
|
29
34
|
```
|
|
30
35
|
|
|
36
|
+
> Plugin preview rule: multi-plugin mode requires `preview: { deterministicPluginOrdering: true }`.
|
|
37
|
+
> Without this preview flag, `createDatabase()` accepts only one plugin.
|
|
38
|
+
|
|
31
39
|
Preview features: embedded replicas (opt-in via config switch).
|
|
32
40
|
|
|
33
41
|
## CLI
|
|
@@ -207,7 +215,9 @@ const db = await createDatabase({
|
|
|
207
215
|
autoMigrate: true, // default: true
|
|
208
216
|
dropTables: false, // default: false
|
|
209
217
|
},
|
|
210
|
-
|
|
218
|
+
useSingletonConnection: false, // default: false
|
|
219
|
+
plugins: [auditPlugin], // optional
|
|
220
|
+
preview: { deterministicPluginOrdering: true }, // optional preview for multi-plugin mode
|
|
211
221
|
});
|
|
212
222
|
```
|
|
213
223
|
|
|
@@ -223,6 +233,7 @@ await db.sync(); // Sync with Turso (if remote)
|
|
|
223
233
|
await db.reset(); // Drop all, recreate, reseed
|
|
224
234
|
await db.seed(); // Re-seed data
|
|
225
235
|
await db.clearData(); // Delete all data (keep tables)
|
|
236
|
+
await db.dispose(); // Release in-memory context and non-singleton client
|
|
226
237
|
```
|
|
227
238
|
|
|
228
239
|
### Schema Introspection (from `db.schema`)
|
|
@@ -364,14 +375,25 @@ import { queryLogger } from '@nanodb-orm/plugin-logger';
|
|
|
364
375
|
|
|
365
376
|
const db = await createDatabase({
|
|
366
377
|
tables: { users, posts },
|
|
367
|
-
plugins: [
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
378
|
+
plugins: [timestamps()],
|
|
379
|
+
});
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
To use multiple plugins, enable deterministic ordering preview:
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
const db = await createDatabase({
|
|
386
|
+
tables: { users, posts },
|
|
387
|
+
plugins: [queryLogger(), softDelete(), timestamps()],
|
|
388
|
+
preview: { deterministicPluginOrdering: true },
|
|
372
389
|
});
|
|
373
390
|
```
|
|
374
391
|
|
|
392
|
+
Ordering rules in preview mode:
|
|
393
|
+
- lower `plugin.order` runs first (default `0`)
|
|
394
|
+
- ties are sorted by `plugin.name` (ascending)
|
|
395
|
+
- final tie-breaker is declaration order in the `plugins` array
|
|
396
|
+
|
|
375
397
|
| Package | Function | Description |
|
|
376
398
|
|---------|----------|-------------|
|
|
377
399
|
| `@nanodb-orm/plugin-timestamps` | `timestamps()` | Auto-add `createdAt` / `updatedAt` |
|
|
@@ -414,6 +436,7 @@ import { NanoPlugin } from 'nanodb-orm';
|
|
|
414
436
|
|
|
415
437
|
const myPlugin: NanoPlugin = {
|
|
416
438
|
name: 'my-plugin',
|
|
439
|
+
order: 0, // optional execution priority (lower runs earlier)
|
|
417
440
|
|
|
418
441
|
// Lifecycle
|
|
419
442
|
install: (db) => db, // Modify db instance
|
|
@@ -471,18 +494,17 @@ const validationPlugin: NanoPlugin = {
|
|
|
471
494
|
},
|
|
472
495
|
};
|
|
473
496
|
|
|
474
|
-
// Use
|
|
497
|
+
// Use a plugin (temporary one-plugin limit)
|
|
475
498
|
const db = await createDatabase({
|
|
476
499
|
tables,
|
|
477
|
-
plugins: [auditPlugin
|
|
500
|
+
plugins: [auditPlugin],
|
|
478
501
|
});
|
|
479
502
|
|
|
480
503
|
// Hooks run automatically
|
|
481
|
-
await db.insert(posts).values({ title: 'My Post' });
|
|
482
|
-
await db.insert(users).values({ email: 'invalid' }); // throws error
|
|
504
|
+
await db.insert(posts).values({ title: 'My Post' });
|
|
483
505
|
|
|
484
506
|
// Check loaded plugins
|
|
485
|
-
db.plugins.list(); // ['audit'
|
|
507
|
+
db.plugins.list(); // ['audit']
|
|
486
508
|
```
|
|
487
509
|
|
|
488
510
|
## Best Practices
|
|
@@ -720,7 +742,7 @@ Error output is clean and actionable:
|
|
|
720
742
|
│ Column "email" does not exist
|
|
721
743
|
│ Table: users
|
|
722
744
|
│ Operation: seed
|
|
723
|
-
│ Detail:
|
|
745
|
+
│ Detail: Failed seed columns: name, email
|
|
724
746
|
└────────────────────────────────────────────────
|
|
725
747
|
```
|
|
726
748
|
|
|
@@ -7,7 +7,7 @@ export interface ConnectionOverride {
|
|
|
7
7
|
databasePath?: string;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Database connection factory with optional singleton caching.
|
|
11
11
|
* Supports both Turso (remote) and local SQLite databases.
|
|
12
12
|
*
|
|
13
13
|
* Environment variables:
|
package/dist/core/connection.js
CHANGED
|
@@ -5,7 +5,7 @@ const libsql_1 = require("drizzle-orm/libsql");
|
|
|
5
5
|
const client_1 = require("@libsql/client");
|
|
6
6
|
const config_1 = require("./config");
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Database connection factory with optional singleton caching.
|
|
9
9
|
* Supports both Turso (remote) and local SQLite databases.
|
|
10
10
|
*
|
|
11
11
|
* Environment variables:
|
package/dist/init.d.ts
CHANGED
|
@@ -87,6 +87,8 @@ export type NanoDatabase<S extends Schema> = LibSQLDatabase<S> & {
|
|
|
87
87
|
plugins: PluginUtils;
|
|
88
88
|
/** Hook system */
|
|
89
89
|
hooks: Hooks;
|
|
90
|
+
/** Release in-memory nanodb context state */
|
|
91
|
+
dispose: () => Promise<void>;
|
|
90
92
|
};
|
|
91
93
|
/**
|
|
92
94
|
* Configuration for createDatabase().
|
|
@@ -99,8 +101,21 @@ export interface CreateDatabaseConfig<S extends Schema = Schema> extends SchemaD
|
|
|
99
101
|
forceLocal?: boolean;
|
|
100
102
|
databasePath?: string;
|
|
101
103
|
};
|
|
104
|
+
/** Reuse process-wide singleton connection (default: false) */
|
|
105
|
+
useSingletonConnection?: boolean;
|
|
102
106
|
/** Plugins to extend database functionality */
|
|
103
107
|
plugins?: NanoPlugin[];
|
|
108
|
+
/** Preview features */
|
|
109
|
+
preview?: {
|
|
110
|
+
/** Enables preview-gated features such as replicated database mode */
|
|
111
|
+
enabled?: true;
|
|
112
|
+
/**
|
|
113
|
+
* Enable deterministic plugin ordering for multi-plugin setups.
|
|
114
|
+
* When enabled, plugins are sorted by `order` (asc), then `name` (asc),
|
|
115
|
+
* then declaration position as a final tiebreaker.
|
|
116
|
+
*/
|
|
117
|
+
deterministicPluginOrdering?: boolean;
|
|
118
|
+
};
|
|
104
119
|
}
|
|
105
120
|
declare const HOOK_TYPES: readonly ["beforeInsert", "afterInsert", "beforeUpdate", "afterUpdate", "beforeDelete", "afterDelete", "beforeQuery", "afterQuery"];
|
|
106
121
|
type HookType = typeof HOOK_TYPES[number];
|
|
@@ -140,5 +155,5 @@ export declare function createDatabase<S extends Schema>(config: CreateDatabaseC
|
|
|
140
155
|
*
|
|
141
156
|
* @internal
|
|
142
157
|
*/
|
|
143
|
-
export declare function initializeDatabase<S extends Schema>(schemaData: SchemaData<S
|
|
158
|
+
export declare function initializeDatabase<S extends Schema>(schemaData: SchemaData<S>, contextId?: string): void;
|
|
144
159
|
//# sourceMappingURL=init.d.ts.map
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EACV,eAAe,EACf,UAAU,EAIV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EACV,eAAe,EACf,UAAU,EAIV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAkBxD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5D,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC;IAC3C,mCAAmC;IACnC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;IACxC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,MAAM;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAC1F,wCAAwC;IACxC,aAAa,EAAE,MAAM,KAAK,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1C,+BAA+B;IAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,IAAI,EAAE,MAAM,MAAM,EAAE,CAAC;CACtB;AAWD;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAC/D,mBAAmB;IACnB,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,iCAAiC;IACjC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,uBAAuB;IACvB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,qBAAqB;IACrB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,0BAA0B;IAC1B,UAAU,EAAE,cAAc,CAAC;IAC3B,wBAAwB;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACpF,wDAAwD;IACxD,UAAU,CAAC,EAAE;QACX,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,+DAA+D;IAC/D,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,uBAAuB;IACvB,OAAO,CAAC,EAAE;QACR,sEAAsE;QACtE,OAAO,CAAC,EAAE,IAAI,CAAC;QACf;;;;WAIG;QACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;KACvC,CAAC;CACH;AAMD,QAAA,MAAM,UAAU,qIAKN,CAAC;AAEX,KAAK,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AA0H1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,EACnD,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CA2S1B;AAaD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,SAAY,GAAG,IAAI,CAuB3G"}
|