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/dist/utils/seeds.js
CHANGED
|
@@ -6,26 +6,62 @@ const connection_1 = require("../core/connection");
|
|
|
6
6
|
const logger_1 = require("./logger");
|
|
7
7
|
const error_handler_1 = require("./error-handler");
|
|
8
8
|
const errors_1 = require("../types/errors");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
const defaultState = {
|
|
10
|
+
tables: {},
|
|
11
|
+
tableNames: [],
|
|
12
|
+
seedData: {},
|
|
13
|
+
};
|
|
14
|
+
const seedStates = new Map();
|
|
15
|
+
function getState(contextId = 'default') {
|
|
16
|
+
if (contextId === 'default')
|
|
17
|
+
return defaultState;
|
|
18
|
+
const state = seedStates.get(contextId);
|
|
19
|
+
if (!state)
|
|
20
|
+
throw new errors_1.SeedError(`Seed context "${contextId}" not initialized`);
|
|
21
|
+
return state;
|
|
22
|
+
}
|
|
23
|
+
async function resolveDb(dbOverride, contextId) {
|
|
24
|
+
if (dbOverride)
|
|
25
|
+
return dbOverride;
|
|
26
|
+
if (contextId !== 'default') {
|
|
27
|
+
throw new errors_1.SeedError(`Context "${contextId}" requires an explicit database instance`);
|
|
28
|
+
}
|
|
29
|
+
return await connection_1.DatabaseConnection.getInstance();
|
|
30
|
+
}
|
|
15
31
|
// ============================================================================
|
|
16
32
|
// Public API
|
|
17
33
|
// ============================================================================
|
|
18
34
|
exports.DatabaseSeeds = {
|
|
19
35
|
/** Initialize with schema and seed data */
|
|
20
|
-
initialize(data) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
initialize(data, contextId = 'default') {
|
|
37
|
+
const nextState = {
|
|
38
|
+
tables: data.tables,
|
|
39
|
+
tableNames: data.tableNames,
|
|
40
|
+
seedData: data.seedData ?? {},
|
|
41
|
+
};
|
|
42
|
+
if (contextId === 'default') {
|
|
43
|
+
defaultState.tables = nextState.tables;
|
|
44
|
+
defaultState.tableNames = nextState.tableNames;
|
|
45
|
+
defaultState.seedData = nextState.seedData;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
seedStates.set(contextId, nextState);
|
|
49
|
+
},
|
|
50
|
+
/** Dispose seed context state */
|
|
51
|
+
dispose(contextId = 'default') {
|
|
52
|
+
if (contextId === 'default') {
|
|
53
|
+
defaultState.tables = {};
|
|
54
|
+
defaultState.tableNames = [];
|
|
55
|
+
defaultState.seedData = {};
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
seedStates.delete(contextId);
|
|
24
59
|
},
|
|
25
60
|
/** Check if any table has data */
|
|
26
|
-
async hasData(dbOverride) {
|
|
27
|
-
const
|
|
28
|
-
|
|
61
|
+
async hasData(dbOverride, contextId = 'default') {
|
|
62
|
+
const state = getState(contextId);
|
|
63
|
+
const db = await resolveDb(dbOverride, contextId);
|
|
64
|
+
for (const name of state.tableNames) {
|
|
29
65
|
try {
|
|
30
66
|
const result = await db.run((0, drizzle_orm_1.sql) `
|
|
31
67
|
SELECT COUNT(*) as c FROM ${drizzle_orm_1.sql.identifier(name)}
|
|
@@ -42,20 +78,21 @@ exports.DatabaseSeeds = {
|
|
|
42
78
|
return false;
|
|
43
79
|
},
|
|
44
80
|
/** Seed database with initial data (skips if data exists) */
|
|
45
|
-
async seed(dbOverride) {
|
|
81
|
+
async seed(dbOverride, contextId = 'default') {
|
|
46
82
|
return (0, error_handler_1.withErrorHandling)('seed', async () => {
|
|
47
|
-
|
|
83
|
+
const state = getState(contextId);
|
|
84
|
+
if (await this.hasData(dbOverride, contextId)) {
|
|
48
85
|
logger_1.logger.info('Database has data, skipping seed');
|
|
49
86
|
return;
|
|
50
87
|
}
|
|
51
|
-
if (Object.keys(seedData).length === 0) {
|
|
88
|
+
if (Object.keys(state.seedData).length === 0) {
|
|
52
89
|
logger_1.logger.debug('No seed data provided');
|
|
53
90
|
return;
|
|
54
91
|
}
|
|
55
92
|
logger_1.logger.info('Seeding database...');
|
|
56
|
-
const db =
|
|
57
|
-
for (const tableName of tableNames) {
|
|
58
|
-
const data = seedData[tableName];
|
|
93
|
+
const db = await resolveDb(dbOverride, contextId);
|
|
94
|
+
for (const tableName of state.tableNames) {
|
|
95
|
+
const data = state.seedData[tableName];
|
|
59
96
|
if (!data?.length)
|
|
60
97
|
continue;
|
|
61
98
|
await seedTable(db, tableName, data);
|
|
@@ -64,12 +101,13 @@ exports.DatabaseSeeds = {
|
|
|
64
101
|
});
|
|
65
102
|
},
|
|
66
103
|
/** Clear all data from all tables */
|
|
67
|
-
async clearAllData(dbOverride) {
|
|
104
|
+
async clearAllData(dbOverride, contextId = 'default') {
|
|
68
105
|
return (0, error_handler_1.withErrorHandling)('clear-data', async () => {
|
|
106
|
+
const state = getState(contextId);
|
|
69
107
|
logger_1.logger.warn('Clearing all data...');
|
|
70
|
-
const db =
|
|
108
|
+
const db = await resolveDb(dbOverride, contextId);
|
|
71
109
|
// Clear in reverse order for foreign key constraints
|
|
72
|
-
for (const name of [...tableNames].reverse()) {
|
|
110
|
+
for (const name of [...state.tableNames].reverse()) {
|
|
73
111
|
await db.run((0, drizzle_orm_1.sql) `DELETE FROM ${drizzle_orm_1.sql.identifier(name)}`);
|
|
74
112
|
}
|
|
75
113
|
// Reset autoincrement sequences so IDs start from 1 again
|
|
@@ -83,11 +121,12 @@ exports.DatabaseSeeds = {
|
|
|
83
121
|
});
|
|
84
122
|
},
|
|
85
123
|
/** Reset database (clear + seed) */
|
|
86
|
-
async reset(dbOverride) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
124
|
+
async reset(dbOverride, contextId = 'default') {
|
|
125
|
+
const state = getState(contextId);
|
|
126
|
+
await this.clearAllData(dbOverride, contextId);
|
|
127
|
+
const db = await resolveDb(dbOverride, contextId);
|
|
128
|
+
for (const tableName of state.tableNames) {
|
|
129
|
+
const data = state.seedData[tableName];
|
|
91
130
|
if (!data?.length)
|
|
92
131
|
continue;
|
|
93
132
|
await seedTable(db, tableName, data);
|
|
@@ -113,7 +152,7 @@ async function seedTable(db, tableName, rows) {
|
|
|
113
152
|
// Parse the internal error to get a user-friendly message
|
|
114
153
|
const parsed = (0, errors_1.parseDbError)(error, { table: tableName, operation: 'seed' });
|
|
115
154
|
// Create error with extra context about the row data
|
|
116
|
-
const seedError = new errors_1.SeedError(parsed.message, tableName, `
|
|
155
|
+
const seedError = new errors_1.SeedError(parsed.message, tableName, `Failed seed columns: ${Object.keys(row).join(', ')}`);
|
|
117
156
|
// Log once, then throw
|
|
118
157
|
logger_1.logger.error(seedError.format());
|
|
119
158
|
throw seedError;
|
package/dist/utils/seeds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../utils/seeds.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAClC,mDAAwD;AACxD,qCAAkC;AAClC,mDAAoD;AACpD,4CAA0D;
|
|
1
|
+
{"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../utils/seeds.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/sync.d.ts
CHANGED
|
@@ -13,17 +13,17 @@ interface DrizzleDbRun {
|
|
|
13
13
|
*/
|
|
14
14
|
export declare const DatabaseSync: {
|
|
15
15
|
/** Initialize schema and seed data */
|
|
16
|
-
setup(dbOverride?: DrizzleDbRun): Promise<void>;
|
|
16
|
+
setup(dbOverride?: DrizzleDbRun, contextId?: string): Promise<void>;
|
|
17
17
|
/** Reset database (drop, recreate, seed) */
|
|
18
|
-
reset(dbOverride?: DrizzleDbRun): Promise<void>;
|
|
18
|
+
reset(dbOverride?: DrizzleDbRun, contextId?: string): Promise<void>;
|
|
19
19
|
/** Sync with remote (Turso) if supported */
|
|
20
|
-
sync(dbOverride?: DrizzleDbRun): Promise<SyncResult>;
|
|
20
|
+
sync(dbOverride?: DrizzleDbRun, contextId?: string): Promise<SyncResult>;
|
|
21
21
|
/** Get database information */
|
|
22
|
-
getDatabaseInfo(dbOverride?: DrizzleDbRun): Promise<DatabaseInfo>;
|
|
22
|
+
getDatabaseInfo(dbOverride?: DrizzleDbRun, contextId?: string): Promise<DatabaseInfo>;
|
|
23
23
|
/** Health check */
|
|
24
|
-
healthCheck(dbOverride?: DrizzleDbRun): Promise<HealthCheck>;
|
|
24
|
+
healthCheck(dbOverride?: DrizzleDbRun, contextId?: string): Promise<HealthCheck>;
|
|
25
25
|
/** Check if database is ready */
|
|
26
|
-
isReady(dbOverride?: DrizzleDbRun): Promise<boolean>;
|
|
26
|
+
isReady(dbOverride?: DrizzleDbRun, contextId?: string): Promise<boolean>;
|
|
27
27
|
};
|
|
28
28
|
export {};
|
|
29
29
|
//# sourceMappingURL=sync.d.ts.map
|
package/dist/utils/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../utils/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAOlC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtE,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IACnG,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CAC1C;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../utils/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAOlC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtE,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IACnG,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CAC1C;AAcD;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,sCAAsC;uBACb,YAAY,uBAA0B,OAAO,CAAC,IAAI,CAAC;IAS5E,4CAA4C;uBACnB,YAAY,uBAA0B,OAAO,CAAC,IAAI,CAAC;IAS5E,4CAA4C;sBACpB,YAAY,uBAA0B,OAAO,CAAC,UAAU,CAAC;IA0BjF,+BAA+B;iCACI,YAAY,uBAA0B,OAAO,CAAC,YAAY,CAAC;IAkC9F,mBAAmB;6BACY,YAAY,uBAA0B,OAAO,CAAC,WAAW,CAAC;IA4BzF,iCAAiC;yBACN,YAAY,uBAA0B,OAAO,CAAC,OAAO,CAAC;CAIlF,CAAC"}
|
package/dist/utils/sync.js
CHANGED
|
@@ -8,6 +8,14 @@ const error_handler_1 = require("./error-handler");
|
|
|
8
8
|
const migrations_1 = require("./migrations");
|
|
9
9
|
const seeds_1 = require("./seeds");
|
|
10
10
|
const schema_introspection_1 = require("./schema-introspection");
|
|
11
|
+
async function resolveDb(dbOverride, contextId) {
|
|
12
|
+
if (dbOverride)
|
|
13
|
+
return dbOverride;
|
|
14
|
+
if (contextId !== 'default') {
|
|
15
|
+
throw new Error(`Context "${contextId}" requires an explicit database instance`);
|
|
16
|
+
}
|
|
17
|
+
return await connection_1.DatabaseConnection.getInstance();
|
|
18
|
+
}
|
|
11
19
|
// ============================================================================
|
|
12
20
|
// Public API
|
|
13
21
|
// ============================================================================
|
|
@@ -16,28 +24,28 @@ const schema_introspection_1 = require("./schema-introspection");
|
|
|
16
24
|
*/
|
|
17
25
|
exports.DatabaseSync = {
|
|
18
26
|
/** Initialize schema and seed data */
|
|
19
|
-
async setup(dbOverride) {
|
|
27
|
+
async setup(dbOverride, contextId = 'default') {
|
|
20
28
|
return (0, error_handler_1.withErrorHandling)('setup', async () => {
|
|
21
29
|
logger_1.logger.info('Setting up database...');
|
|
22
|
-
await migrations_1.DatabaseMigrations.initializeSchema(dbOverride);
|
|
23
|
-
await seeds_1.DatabaseSeeds.seed(dbOverride);
|
|
30
|
+
await migrations_1.DatabaseMigrations.initializeSchema(dbOverride, contextId);
|
|
31
|
+
await seeds_1.DatabaseSeeds.seed(dbOverride, contextId);
|
|
24
32
|
logger_1.logger.info('Database setup complete');
|
|
25
33
|
});
|
|
26
34
|
},
|
|
27
35
|
/** Reset database (drop, recreate, seed) */
|
|
28
|
-
async reset(dbOverride) {
|
|
36
|
+
async reset(dbOverride, contextId = 'default') {
|
|
29
37
|
return (0, error_handler_1.withErrorHandling)('reset', async () => {
|
|
30
38
|
logger_1.logger.warn('Resetting database...');
|
|
31
|
-
await migrations_1.DatabaseMigrations.resetDatabase(dbOverride);
|
|
32
|
-
await seeds_1.DatabaseSeeds.seed(dbOverride);
|
|
39
|
+
await migrations_1.DatabaseMigrations.resetDatabase(dbOverride, contextId);
|
|
40
|
+
await seeds_1.DatabaseSeeds.seed(dbOverride, contextId);
|
|
33
41
|
logger_1.logger.info('Database reset complete');
|
|
34
42
|
});
|
|
35
43
|
},
|
|
36
44
|
/** Sync with remote (Turso) if supported */
|
|
37
|
-
async sync(dbOverride) {
|
|
38
|
-
const tableNames = schema_introspection_1.SchemaIntrospection.getAllTableNames();
|
|
45
|
+
async sync(dbOverride, contextId = 'default') {
|
|
46
|
+
const tableNames = schema_introspection_1.SchemaIntrospection.getAllTableNames(contextId);
|
|
39
47
|
try {
|
|
40
|
-
const db =
|
|
48
|
+
const db = await resolveDb(dbOverride, contextId);
|
|
41
49
|
const client = db.$client;
|
|
42
50
|
if (client?.sync) {
|
|
43
51
|
await client.sync();
|
|
@@ -58,10 +66,10 @@ exports.DatabaseSync = {
|
|
|
58
66
|
}
|
|
59
67
|
},
|
|
60
68
|
/** Get database information */
|
|
61
|
-
async getDatabaseInfo(dbOverride) {
|
|
69
|
+
async getDatabaseInfo(dbOverride, contextId = 'default') {
|
|
62
70
|
try {
|
|
63
|
-
const db =
|
|
64
|
-
const tableNames = schema_introspection_1.SchemaIntrospection.getAllTableNames();
|
|
71
|
+
const db = await resolveDb(dbOverride, contextId);
|
|
72
|
+
const tableNames = schema_introspection_1.SchemaIntrospection.getAllTableNames(contextId);
|
|
65
73
|
const tableCounts = {};
|
|
66
74
|
let totalRecords = 0;
|
|
67
75
|
for (const name of tableNames) {
|
|
@@ -78,7 +86,7 @@ exports.DatabaseSync = {
|
|
|
78
86
|
tableCounts[name] = 0;
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
|
-
const validation = await migrations_1.DatabaseMigrations.validateSchema(dbOverride);
|
|
89
|
+
const validation = await migrations_1.DatabaseMigrations.validateSchema(dbOverride, contextId);
|
|
82
90
|
return {
|
|
83
91
|
tables: tableNames,
|
|
84
92
|
tableCounts,
|
|
@@ -91,9 +99,9 @@ exports.DatabaseSync = {
|
|
|
91
99
|
}
|
|
92
100
|
},
|
|
93
101
|
/** Health check */
|
|
94
|
-
async healthCheck(dbOverride) {
|
|
102
|
+
async healthCheck(dbOverride, contextId = 'default') {
|
|
95
103
|
try {
|
|
96
|
-
const info = await this.getDatabaseInfo(dbOverride);
|
|
104
|
+
const info = await this.getDatabaseInfo(dbOverride, contextId);
|
|
97
105
|
const errors = [];
|
|
98
106
|
if (!info.schemaValid)
|
|
99
107
|
errors.push('Schema validation failed');
|
|
@@ -120,8 +128,8 @@ exports.DatabaseSync = {
|
|
|
120
128
|
}
|
|
121
129
|
},
|
|
122
130
|
/** Check if database is ready */
|
|
123
|
-
async isReady(dbOverride) {
|
|
124
|
-
const health = await this.healthCheck(dbOverride);
|
|
131
|
+
async isReady(dbOverride, contextId = 'default') {
|
|
132
|
+
const health = await this.healthCheck(dbOverride, contextId);
|
|
125
133
|
return health.healthy;
|
|
126
134
|
},
|
|
127
135
|
};
|
package/dist/utils/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../utils/sync.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAClC,mDAAwD;AACxD,qCAAkC;AAClC,mDAAoD;AACpD,6CAAkD;AAClD,mCAAwC;AACxC,iEAA6D;AAY7D,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,sCAAsC;IACtC,KAAK,CAAC,KAAK,CAAC,UAAyB;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../utils/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,12 @@ export interface TransactionClient {
|
|
|
16
16
|
*/
|
|
17
17
|
run(query: string | SQL): Promise<QueryResult>;
|
|
18
18
|
}
|
|
19
|
+
interface DrizzleDb {
|
|
20
|
+
run: (query: string | SQL) => Promise<QueryResult>;
|
|
21
|
+
transaction?: <T>(fn: (tx: {
|
|
22
|
+
run: (query: string | SQL) => Promise<QueryResult>;
|
|
23
|
+
}) => Promise<T>) => Promise<T>;
|
|
24
|
+
}
|
|
19
25
|
/**
|
|
20
26
|
* Execute operations within a database transaction.
|
|
21
27
|
* Automatically commits on success, rolls back on failure.
|
|
@@ -38,7 +44,7 @@ export interface TransactionClient {
|
|
|
38
44
|
* }
|
|
39
45
|
* ```
|
|
40
46
|
*/
|
|
41
|
-
export declare function transaction<T>(operation: (tx: TransactionClient) => Promise<T
|
|
47
|
+
export declare function transaction<T>(operation: (tx: TransactionClient) => Promise<T>, dbOverride?: DrizzleDb): Promise<TransactionResult<T>>;
|
|
42
48
|
/**
|
|
43
49
|
* Execute a batch of SQL statements atomically.
|
|
44
50
|
* All statements succeed or all fail together.
|
|
@@ -54,7 +60,7 @@ export declare function transaction<T>(operation: (tx: TransactionClient) => Pro
|
|
|
54
60
|
* ]);
|
|
55
61
|
* ```
|
|
56
62
|
*/
|
|
57
|
-
export declare function batch(statements: SQL[]): Promise<TransactionResult<QueryResult[]>>;
|
|
63
|
+
export declare function batch(statements: SQL[], dbOverride?: DrizzleDb): Promise<TransactionResult<QueryResult[]>>;
|
|
58
64
|
/**
|
|
59
65
|
* Drop and recreate a table within a transaction.
|
|
60
66
|
*
|
|
@@ -68,7 +74,7 @@ export declare function batch(statements: SQL[]): Promise<TransactionResult<Quer
|
|
|
68
74
|
* `);
|
|
69
75
|
* ```
|
|
70
76
|
*/
|
|
71
|
-
export declare function recreateTable(tableName: string, createSql: string): Promise<TransactionResult<void>>;
|
|
77
|
+
export declare function recreateTable(tableName: string, createSql: string, dbOverride?: DrizzleDb): Promise<TransactionResult<void>>;
|
|
72
78
|
/**
|
|
73
79
|
* Migrate a table schema while preserving existing data.
|
|
74
80
|
* Uses SQLite's recommended pattern:
|
|
@@ -92,8 +98,9 @@ export declare function recreateTable(tableName: string, createSql: string): Pro
|
|
|
92
98
|
* );
|
|
93
99
|
* ```
|
|
94
100
|
*/
|
|
95
|
-
export declare function migrateTablePreservingData(tableName: string, newCreateSql: string, oldColumns: string[], newColumns: string[]): Promise<TransactionResult<{
|
|
101
|
+
export declare function migrateTablePreservingData(tableName: string, newCreateSql: string, oldColumns: string[], newColumns: string[], dbOverride?: DrizzleDb): Promise<TransactionResult<{
|
|
96
102
|
rowsMigrated: number;
|
|
97
103
|
columnsPreserved: string[];
|
|
98
104
|
}>>;
|
|
105
|
+
export {};
|
|
99
106
|
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../utils/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAChD;
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../utils/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAChD;AAMD,UAAU,SAAS;IACjB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAEnD,WAAW,CAAC,EAAE,CAAC,CAAC,EACd,EAAE,EAAE,CAAC,EAAE,EAAE;QAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAC3E,OAAO,CAAC,CAAC,CAAC,CAAC;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,SAAS,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,EAChD,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAgD/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,KAAK,CACzB,UAAU,EAAE,GAAG,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,CAQ3C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAMlC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,iBAAiB,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC,CA+DlF"}
|
|
@@ -32,8 +32,8 @@ const logger_1 = require("./logger");
|
|
|
32
32
|
* }
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
async function transaction(operation) {
|
|
36
|
-
const db = (await connection_1.DatabaseConnection.getInstance());
|
|
35
|
+
async function transaction(operation, dbOverride) {
|
|
36
|
+
const db = dbOverride ?? (await connection_1.DatabaseConnection.getInstance());
|
|
37
37
|
// Try to use Drizzle's native transaction (better for Turso/libSQL)
|
|
38
38
|
if (typeof db.transaction === 'function') {
|
|
39
39
|
try {
|
|
@@ -94,14 +94,14 @@ async function transaction(operation) {
|
|
|
94
94
|
* ]);
|
|
95
95
|
* ```
|
|
96
96
|
*/
|
|
97
|
-
async function batch(statements) {
|
|
97
|
+
async function batch(statements, dbOverride) {
|
|
98
98
|
return transaction(async (tx) => {
|
|
99
99
|
const results = [];
|
|
100
100
|
for (const stmt of statements) {
|
|
101
101
|
results.push(await tx.run(stmt));
|
|
102
102
|
}
|
|
103
103
|
return results;
|
|
104
|
-
});
|
|
104
|
+
}, dbOverride);
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
107
|
* Drop and recreate a table within a transaction.
|
|
@@ -116,12 +116,12 @@ async function batch(statements) {
|
|
|
116
116
|
* `);
|
|
117
117
|
* ```
|
|
118
118
|
*/
|
|
119
|
-
async function recreateTable(tableName, createSql) {
|
|
119
|
+
async function recreateTable(tableName, createSql, dbOverride) {
|
|
120
120
|
return transaction(async (tx) => {
|
|
121
121
|
await tx.run(drizzle_orm_1.sql.raw(`DROP TABLE IF EXISTS "${tableName}"`));
|
|
122
122
|
await tx.run(drizzle_orm_1.sql.raw(createSql));
|
|
123
123
|
logger_1.logger.info(`Recreated table: ${tableName}`);
|
|
124
|
-
});
|
|
124
|
+
}, dbOverride);
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
127
|
* Migrate a table schema while preserving existing data.
|
|
@@ -146,7 +146,7 @@ async function recreateTable(tableName, createSql) {
|
|
|
146
146
|
* );
|
|
147
147
|
* ```
|
|
148
148
|
*/
|
|
149
|
-
async function migrateTablePreservingData(tableName, newCreateSql, oldColumns, newColumns) {
|
|
149
|
+
async function migrateTablePreservingData(tableName, newCreateSql, oldColumns, newColumns, dbOverride) {
|
|
150
150
|
return transaction(async (tx) => {
|
|
151
151
|
const tempTableName = `__migrate_${tableName}_${Date.now()}`;
|
|
152
152
|
// Disable foreign key checks during migration (SQLite requirement)
|
|
@@ -191,6 +191,6 @@ async function migrateTablePreservingData(tableName, newCreateSql, oldColumns, n
|
|
|
191
191
|
await tx.run(drizzle_orm_1.sql.raw('PRAGMA foreign_keys = ON'));
|
|
192
192
|
throw error;
|
|
193
193
|
}
|
|
194
|
-
});
|
|
194
|
+
}, dbOverride);
|
|
195
195
|
}
|
|
196
196
|
//# sourceMappingURL=transactions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../utils/transactions.ts"],"names":[],"mappings":";;AAiEA,
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../utils/transactions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nanodb-orm",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "Lightweight ORM wrapper for Drizzle with auto-migrations, schema introspection, and CLI",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,10 +20,19 @@
|
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc",
|
|
23
|
+
"build:packages": "npm run build --workspaces --if-present",
|
|
24
|
+
"build:all": "npm run build && npm run build:packages",
|
|
23
25
|
"dev": "tsc --watch",
|
|
24
26
|
"clean": "rm -rf dist",
|
|
25
|
-
"
|
|
27
|
+
"clean:packages": "npm run clean --workspaces --if-present",
|
|
28
|
+
"prepublishOnly": "npm run clean && npm run clean:packages && npm run build:all && npm test && npm run test:integration",
|
|
26
29
|
"test": "jest",
|
|
30
|
+
"test:integration": "jest --config jest.integration.config.js",
|
|
31
|
+
"test:usage": "jest --config jest.integration.config.js __tests__/integration/usage-capabilities.integration.test.ts",
|
|
32
|
+
"test:ledger": "jest --config jest.integration.config.js __tests__/integration/ledger-invariants.integration.test.ts",
|
|
33
|
+
"test:all": "npm test && npm run test:integration && npm run build:packages",
|
|
34
|
+
"pack:dry-run": "npm pack --dry-run",
|
|
35
|
+
"pack:dry-run:all": "npm run pack:dry-run && npm run pack:dry-run --workspaces --if-present",
|
|
27
36
|
"test:watch": "jest --watchAll",
|
|
28
37
|
"studio": "npx ts-node cli.ts studio"
|
|
29
38
|
},
|
|
@@ -81,5 +90,8 @@
|
|
|
81
90
|
"bugs": {
|
|
82
91
|
"url": "https://github.com/Easy-Deploy-Dev/nanodb-orm/issues"
|
|
83
92
|
},
|
|
84
|
-
"homepage": "https://github.com/Easy-Deploy-Dev/nanodb-orm#readme"
|
|
93
|
+
"homepage": "https://github.com/Easy-Deploy-Dev/nanodb-orm#readme",
|
|
94
|
+
"workspaces": [
|
|
95
|
+
"packages/*"
|
|
96
|
+
]
|
|
85
97
|
}
|