@coherent.js/database 1.0.0-beta.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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/database/adapters/memory.d.ts +48 -0
  4. package/dist/database/adapters/memory.d.ts.map +1 -0
  5. package/dist/database/adapters/memory.js +250 -0
  6. package/dist/database/adapters/memory.js.map +1 -0
  7. package/dist/database/adapters/mongodb.d.ts +15 -0
  8. package/dist/database/adapters/mongodb.d.ts.map +1 -0
  9. package/dist/database/adapters/mongodb.js +216 -0
  10. package/dist/database/adapters/mongodb.js.map +1 -0
  11. package/dist/database/adapters/mysql.d.ts +12 -0
  12. package/dist/database/adapters/mysql.d.ts.map +1 -0
  13. package/dist/database/adapters/mysql.js +171 -0
  14. package/dist/database/adapters/mysql.js.map +1 -0
  15. package/dist/database/adapters/postgresql.d.ts +12 -0
  16. package/dist/database/adapters/postgresql.d.ts.map +1 -0
  17. package/dist/database/adapters/postgresql.js +177 -0
  18. package/dist/database/adapters/postgresql.js.map +1 -0
  19. package/dist/database/adapters/sqlite.d.ts +15 -0
  20. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  21. package/dist/database/adapters/sqlite.js +241 -0
  22. package/dist/database/adapters/sqlite.js.map +1 -0
  23. package/dist/database/connection-manager.d.ts +148 -0
  24. package/dist/database/connection-manager.d.ts.map +1 -0
  25. package/dist/database/connection-manager.js +377 -0
  26. package/dist/database/connection-manager.js.map +1 -0
  27. package/dist/database/index.d.ts +38 -0
  28. package/dist/database/index.d.ts.map +1 -0
  29. package/dist/database/index.js +63 -0
  30. package/dist/database/index.js.map +1 -0
  31. package/dist/database/middleware.d.ts +122 -0
  32. package/dist/database/middleware.d.ts.map +1 -0
  33. package/dist/database/middleware.js +403 -0
  34. package/dist/database/middleware.js.map +1 -0
  35. package/dist/database/migration.d.ts +168 -0
  36. package/dist/database/migration.d.ts.map +1 -0
  37. package/dist/database/migration.js +946 -0
  38. package/dist/database/migration.js.map +1 -0
  39. package/dist/database/model.d.ts +81 -0
  40. package/dist/database/model.d.ts.map +1 -0
  41. package/dist/database/model.js +686 -0
  42. package/dist/database/model.js.map +1 -0
  43. package/dist/database/query-builder.d.ts +136 -0
  44. package/dist/database/query-builder.d.ts.map +1 -0
  45. package/dist/database/query-builder.js +248 -0
  46. package/dist/database/query-builder.js.map +1 -0
  47. package/dist/database/utils.d.ts +196 -0
  48. package/dist/database/utils.d.ts.map +1 -0
  49. package/dist/database/utils.js +372 -0
  50. package/dist/database/utils.js.map +1 -0
  51. package/dist/index.cjs +2286 -0
  52. package/dist/index.cjs.map +7 -0
  53. package/dist/index.js +2240 -0
  54. package/dist/index.js.map +7 -0
  55. package/package.json +52 -0
  56. package/types/index.d.ts +732 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * MySQL Database Adapter for Coherent.js
3
+ *
4
+ * @fileoverview MySQL adapter implementation with connection pooling and transaction support.
5
+ */
6
+ /**
7
+ * Create MySQL adapter instance
8
+ *
9
+ * @returns {Object} MySQL adapter instance
10
+ */
11
+ export function createMySQLAdapter() {
12
+ let mysql = null;
13
+ async function initializeMySQL() {
14
+ if (!mysql) {
15
+ try {
16
+ const mysqlModule = await import('mysql2/promise');
17
+ mysql = mysqlModule.default || mysqlModule;
18
+ }
19
+ catch {
20
+ throw new Error('mysql2 package is required for MySQL adapter. Install with: npm install mysql2');
21
+ }
22
+ }
23
+ }
24
+ return {
25
+ /**
26
+ * Create connection pool
27
+ */
28
+ async createPool(config) {
29
+ await initializeMySQL();
30
+ const poolConfig = {
31
+ host: config.host,
32
+ port: config.port,
33
+ database: config.database,
34
+ user: config.username,
35
+ password: config.password,
36
+ connectionLimit: config.pool.max,
37
+ acquireTimeout: config.pool.acquireTimeoutMillis,
38
+ timeout: config.pool.createTimeoutMillis,
39
+ reconnect: true,
40
+ charset: 'utf8mb4',
41
+ timezone: 'Z'
42
+ };
43
+ const pool = mysql.createPool(poolConfig);
44
+ return pool;
45
+ },
46
+ /**
47
+ * Test database connection
48
+ */
49
+ async testConnection(pool) {
50
+ const connection = await pool.getConnection();
51
+ try {
52
+ await connection.query('SELECT 1');
53
+ }
54
+ finally {
55
+ connection.release();
56
+ }
57
+ },
58
+ /**
59
+ * Execute database query
60
+ */
61
+ async query(pool, sql, params = [], options = {}) {
62
+ const connection = await pool.getConnection();
63
+ try {
64
+ const [rows] = await connection.execute(sql, params);
65
+ if (options.single) {
66
+ return Array.isArray(rows) ? rows[0] || null : rows;
67
+ }
68
+ if (Array.isArray(rows)) {
69
+ return {
70
+ rows,
71
+ rowCount: rows.length,
72
+ affectedRows: rows.affectedRows || rows.length,
73
+ insertId: rows.insertId || null
74
+ };
75
+ }
76
+ else {
77
+ return {
78
+ rows: [],
79
+ rowCount: rows.affectedRows || 0,
80
+ affectedRows: rows.affectedRows || 0,
81
+ insertId: rows.insertId || null
82
+ };
83
+ }
84
+ }
85
+ finally {
86
+ connection.release();
87
+ }
88
+ },
89
+ /**
90
+ * Start database transaction
91
+ */
92
+ async transaction(pool) {
93
+ const connection = await pool.getConnection();
94
+ await connection.beginTransaction();
95
+ const transaction = {
96
+ connection,
97
+ pool,
98
+ isCommitted: false,
99
+ isRolledBack: false,
100
+ query: async (sql, params, queryOptions) => {
101
+ if (transaction.isCommitted || transaction.isRolledBack) {
102
+ throw new Error('Cannot execute query on completed transaction');
103
+ }
104
+ const [rows] = await connection.execute(sql, params);
105
+ if (queryOptions && queryOptions.single) {
106
+ return Array.isArray(rows) ? rows[0] || null : rows;
107
+ }
108
+ if (Array.isArray(rows)) {
109
+ return {
110
+ rows,
111
+ rowCount: rows.length,
112
+ affectedRows: rows.affectedRows || rows.length,
113
+ insertId: rows.insertId || null
114
+ };
115
+ }
116
+ else {
117
+ return {
118
+ rows: [],
119
+ rowCount: rows.affectedRows || 0,
120
+ affectedRows: rows.affectedRows || 0,
121
+ insertId: rows.insertId || null
122
+ };
123
+ }
124
+ },
125
+ commit: async () => {
126
+ if (transaction.isCommitted || transaction.isRolledBack) {
127
+ throw new Error('Transaction already completed');
128
+ }
129
+ try {
130
+ await connection.commit();
131
+ transaction.isCommitted = true;
132
+ }
133
+ finally {
134
+ connection.release();
135
+ }
136
+ },
137
+ rollback: async () => {
138
+ if (transaction.isCommitted || transaction.isRolledBack) {
139
+ throw new Error('Transaction already completed');
140
+ }
141
+ try {
142
+ await connection.rollback();
143
+ transaction.isRolledBack = true;
144
+ }
145
+ finally {
146
+ connection.release();
147
+ }
148
+ }
149
+ };
150
+ return transaction;
151
+ },
152
+ /**
153
+ * Get pool statistics
154
+ */
155
+ getPoolStats(pool) {
156
+ return {
157
+ total: pool.config.connectionLimit,
158
+ available: pool._freeConnections ? pool._freeConnections.length : 0,
159
+ acquired: pool._allConnections ? pool._allConnections.length - (pool._freeConnections ? pool._freeConnections.length : 0) : 0,
160
+ waiting: pool._connectionQueue ? pool._connectionQueue.length : 0
161
+ };
162
+ },
163
+ /**
164
+ * Close connection pool
165
+ */
166
+ async closePool(pool) {
167
+ await pool.end();
168
+ }
169
+ };
170
+ }
171
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../../../src/database/adapters/mysql.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * PostgreSQL Database Adapter for Coherent.js
3
+ *
4
+ * @fileoverview PostgreSQL adapter implementation with connection pooling and advanced features.
5
+ */
6
+ /**
7
+ * Create PostgreSQL adapter instance
8
+ *
9
+ * @returns {Object} PostgreSQL adapter instance
10
+ */
11
+ export function createPostgreSQLAdapter(): Object;
12
+ //# sourceMappingURL=postgresql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../../../../src/database/adapters/postgresql.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,2CAFa,MAAM,CAgMlB"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * PostgreSQL Database Adapter for Coherent.js
3
+ *
4
+ * @fileoverview PostgreSQL adapter implementation with connection pooling and advanced features.
5
+ */
6
+ /**
7
+ * Create PostgreSQL adapter instance
8
+ *
9
+ * @returns {Object} PostgreSQL adapter instance
10
+ */
11
+ export function createPostgreSQLAdapter() {
12
+ let pg = null;
13
+ async function initializePostgreSQL() {
14
+ if (!pg) {
15
+ try {
16
+ const pgModule = await import('pg');
17
+ pg = pgModule.default || pgModule;
18
+ }
19
+ catch {
20
+ throw new Error('pg package is required for PostgreSQL adapter. Install with: npm install pg');
21
+ }
22
+ }
23
+ }
24
+ function convertPlaceholders(sql) {
25
+ let index = 1;
26
+ return sql.replace(/\?/g, () => `$${index++}`);
27
+ }
28
+ function extractInsertId(result) {
29
+ if (result.rows && result.rows.length > 0) {
30
+ const row = result.rows[0];
31
+ return row.id || row.insertId || row.lastval || null;
32
+ }
33
+ return null;
34
+ }
35
+ return {
36
+ /**
37
+ * Create connection pool
38
+ */
39
+ async createPool(config) {
40
+ await initializePostgreSQL();
41
+ const poolConfig = {
42
+ host: config.host,
43
+ port: config.port,
44
+ database: config.database,
45
+ user: config.username,
46
+ password: config.password,
47
+ min: config.pool.min,
48
+ max: config.pool.max,
49
+ acquireTimeoutMillis: config.pool.acquireTimeoutMillis,
50
+ createTimeoutMillis: config.pool.createTimeoutMillis,
51
+ destroyTimeoutMillis: config.pool.destroyTimeoutMillis,
52
+ idleTimeoutMillis: config.pool.idleTimeoutMillis,
53
+ reapIntervalMillis: config.pool.reapIntervalMillis,
54
+ createRetryIntervalMillis: config.pool.createRetryIntervalMillis,
55
+ ssl: config.ssl || false
56
+ };
57
+ const pool = new pg.Pool(poolConfig);
58
+ pool.on('error', (err) => {
59
+ console.error('PostgreSQL pool error:', err);
60
+ });
61
+ return pool;
62
+ },
63
+ /**
64
+ * Test database connection
65
+ */
66
+ async testConnection(pool) {
67
+ const client = await pool.connect();
68
+ try {
69
+ await client.query('SELECT 1');
70
+ }
71
+ finally {
72
+ client.release();
73
+ }
74
+ },
75
+ /**
76
+ * Execute database query
77
+ */
78
+ async query(pool, sql, params = [], options = {}) {
79
+ const client = await pool.connect();
80
+ try {
81
+ const pgSql = convertPlaceholders(sql);
82
+ const result = await client.query(pgSql, params);
83
+ if (options.single) {
84
+ return result.rows[0] || null;
85
+ }
86
+ return {
87
+ rows: result.rows,
88
+ rowCount: result.rowCount,
89
+ affectedRows: result.rowCount,
90
+ insertId: extractInsertId(result)
91
+ };
92
+ }
93
+ finally {
94
+ client.release();
95
+ }
96
+ },
97
+ /**
98
+ * Start database transaction
99
+ */
100
+ async transaction(pool, options = {}) {
101
+ const client = await pool.connect();
102
+ let beginSql = 'BEGIN';
103
+ if (options.isolationLevel) {
104
+ beginSql += ` ISOLATION LEVEL ${options.isolationLevel}`;
105
+ }
106
+ if (options.readOnly) {
107
+ beginSql += ' READ ONLY';
108
+ }
109
+ await client.query(beginSql);
110
+ const transaction = {
111
+ client,
112
+ pool,
113
+ isCommitted: false,
114
+ isRolledBack: false,
115
+ query: async (sql, params, queryOptions) => {
116
+ if (transaction.isCommitted || transaction.isRolledBack) {
117
+ throw new Error('Cannot execute query on completed transaction');
118
+ }
119
+ const pgSql = convertPlaceholders(sql);
120
+ const result = await client.query(pgSql, params);
121
+ if (queryOptions && queryOptions.single) {
122
+ return result.rows[0] || null;
123
+ }
124
+ return {
125
+ rows: result.rows,
126
+ rowCount: result.rowCount,
127
+ affectedRows: result.rowCount,
128
+ insertId: extractInsertId(result)
129
+ };
130
+ },
131
+ commit: async () => {
132
+ if (transaction.isCommitted || transaction.isRolledBack) {
133
+ throw new Error('Transaction already completed');
134
+ }
135
+ try {
136
+ await client.query('COMMIT');
137
+ transaction.isCommitted = true;
138
+ }
139
+ finally {
140
+ client.release();
141
+ }
142
+ },
143
+ rollback: async () => {
144
+ if (transaction.isCommitted || transaction.isRolledBack) {
145
+ throw new Error('Transaction already completed');
146
+ }
147
+ try {
148
+ await client.query('ROLLBACK');
149
+ transaction.isRolledBack = true;
150
+ }
151
+ finally {
152
+ client.release();
153
+ }
154
+ }
155
+ };
156
+ return transaction;
157
+ },
158
+ /**
159
+ * Get pool statistics
160
+ */
161
+ getPoolStats(pool) {
162
+ return {
163
+ total: pool.totalCount,
164
+ available: pool.idleCount,
165
+ acquired: pool.totalCount - pool.idleCount,
166
+ waiting: pool.waitingCount
167
+ };
168
+ },
169
+ /**
170
+ * Close connection pool
171
+ */
172
+ async closePool(pool) {
173
+ await pool.end();
174
+ }
175
+ };
176
+ }
177
+ //# sourceMappingURL=postgresql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../../../../src/database/adapters/postgresql.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * SQLite Database Adapter for Coherent.js
3
+ *
4
+ * @fileoverview SQLite adapter implementation with connection pooling and transaction support.
5
+ */
6
+ /**
7
+ * Create a new SQLite adapter instance
8
+ *
9
+ * @returns {Object} SQLite adapter instance with database operations
10
+ */
11
+ export function createSQLiteAdapter(): Object;
12
+ export namespace SQLiteAdapter {
13
+ export { createSQLiteAdapter as create };
14
+ }
15
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../../src/database/adapters/sqlite.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,uCAFa,MAAM,CAmQlB"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * SQLite Database Adapter for Coherent.js
3
+ *
4
+ * @fileoverview SQLite adapter implementation with connection pooling and transaction support.
5
+ */
6
+ /**
7
+ * Create a new SQLite adapter instance
8
+ *
9
+ * @returns {Object} SQLite adapter instance with database operations
10
+ */
11
+ export function createSQLiteAdapter() {
12
+ let sqlite3 = null;
13
+ let db = null;
14
+ /**
15
+ * Initialize SQLite module
16
+ *
17
+ * @private
18
+ * @returns {Promise<void>}
19
+ */
20
+ async function initializeSQLite() {
21
+ if (!sqlite3) {
22
+ try {
23
+ // Try to import sqlite3 (peer dependency)
24
+ const sqlite3Module = await import('sqlite3');
25
+ sqlite3 = sqlite3Module.default || sqlite3Module;
26
+ }
27
+ catch {
28
+ throw new Error('Failed to load sqlite3 module. Make sure to install it: npm install sqlite3');
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * Connect to the database
34
+ *
35
+ * @param {Object} config - Database configuration
36
+ * @param {string} config.database - Path to the SQLite database file
37
+ * @param {boolean} [config.readonly=false] - Open the database in read-only mode
38
+ * @returns {Promise<Object>} The database adapter instance
39
+ */
40
+ async function connect(config) {
41
+ await initializeSQLite();
42
+ return new Promise((resolve, reject) => {
43
+ try {
44
+ db = new sqlite3.Database(config.database, config.readonly ? sqlite3.OPEN_READONLY : sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
45
+ if (err) {
46
+ return reject(new Error(`Failed to connect to SQLite database: ${err.message}`));
47
+ }
48
+ // Enable foreign keys by default
49
+ db.run('PRAGMA foreign_keys = ON');
50
+ // Enable WAL mode for better concurrency
51
+ db.run('PRAGMA journal_mode = WAL');
52
+ // Set busy timeout to handle concurrent write operations
53
+ db.run('PRAGMA busy_timeout = 5000');
54
+ resolve(instance);
55
+ });
56
+ }
57
+ catch (error) {
58
+ reject(new Error(`Failed to connect to SQLite database: ${error.message}`));
59
+ }
60
+ });
61
+ }
62
+ /**
63
+ * Execute a SQL query
64
+ *
65
+ * @param {string} sql - SQL query string
66
+ * @param {Array} [params=[]] - Query parameters
67
+ * @returns {Promise<{rows: Array<Object>}>} Query result
68
+ */
69
+ function query(sql, params = []) {
70
+ return new Promise((resolve, reject) => {
71
+ if (!db) {
72
+ return reject(new Error('Database connection not established. Call connect() first.'));
73
+ }
74
+ db.all(sql, params, (err, rows) => {
75
+ if (err) {
76
+ return reject(new Error(`SQLite query error: ${err.message}`));
77
+ }
78
+ resolve({ rows });
79
+ });
80
+ });
81
+ }
82
+ /**
83
+ * Execute a SQL statement
84
+ *
85
+ * @param {string} sql - SQL statement
86
+ * @param {Array} [params=[]] - Statement parameters
87
+ * @returns {Promise<{affectedRows: number, insertId: number}>} Execution result
88
+ */
89
+ function execute(sql, params = []) {
90
+ return new Promise((resolve, reject) => {
91
+ if (!db) {
92
+ return reject(new Error('Database connection not established. Call connect() first.'));
93
+ }
94
+ db.run(sql, params, function (err) {
95
+ if (err) {
96
+ return reject(new Error(`SQLite execute error: ${err.message}`));
97
+ }
98
+ resolve({
99
+ affectedRows: this.changes,
100
+ insertId: this.lastID
101
+ });
102
+ });
103
+ });
104
+ }
105
+ /**
106
+ * Begin a transaction
107
+ *
108
+ * @returns {Promise<void>}
109
+ */
110
+ function beginTransaction() {
111
+ return new Promise((resolve, reject) => {
112
+ if (!db) {
113
+ return reject(new Error('Database connection not established. Call connect() first.'));
114
+ }
115
+ db.run('BEGIN TRANSACTION', (err) => {
116
+ if (err) {
117
+ return reject(new Error(`Failed to begin transaction: ${err.message}`));
118
+ }
119
+ resolve();
120
+ });
121
+ });
122
+ }
123
+ /**
124
+ * Commit a transaction
125
+ *
126
+ * @returns {Promise<void>}
127
+ */
128
+ function commit() {
129
+ return new Promise((resolve, reject) => {
130
+ if (!db) {
131
+ return reject(new Error('Database connection not established. Call connect() first.'));
132
+ }
133
+ db.run('COMMIT', (err) => {
134
+ if (err) {
135
+ return reject(new Error(`Failed to commit transaction: ${err.message}`));
136
+ }
137
+ resolve();
138
+ });
139
+ });
140
+ }
141
+ /**
142
+ * Rollback a transaction
143
+ *
144
+ * @returns {Promise<void>}
145
+ */
146
+ function rollback() {
147
+ return new Promise((resolve, reject) => {
148
+ if (!db) {
149
+ return reject(new Error('Database connection not established. Call connect() first.'));
150
+ }
151
+ db.run('ROLLBACK', (err) => {
152
+ if (err) {
153
+ return reject(new Error(`Failed to rollback transaction: ${err.message}`));
154
+ }
155
+ resolve();
156
+ });
157
+ });
158
+ }
159
+ /**
160
+ * Disconnect from the database
161
+ *
162
+ * @returns {Promise<void>}
163
+ */
164
+ function disconnect() {
165
+ return new Promise((resolve, reject) => {
166
+ if (!db) {
167
+ return resolve();
168
+ }
169
+ db.close((err) => {
170
+ if (err) {
171
+ return reject(new Error(`Failed to close database connection: ${err.message}`));
172
+ }
173
+ db = null;
174
+ resolve();
175
+ });
176
+ });
177
+ }
178
+ /**
179
+ * Get the underlying database connection
180
+ *
181
+ * @returns {Object} The database connection
182
+ */
183
+ function getConnection() {
184
+ if (!db) {
185
+ throw new Error('Database connection not established. Call connect() first.');
186
+ }
187
+ return db;
188
+ }
189
+ /**
190
+ * Ping the database to check if connection is alive
191
+ *
192
+ * @returns {Promise<boolean>} True if connection is alive
193
+ */
194
+ async function ping() {
195
+ try {
196
+ await query('SELECT 1');
197
+ return true;
198
+ }
199
+ catch {
200
+ return false;
201
+ }
202
+ }
203
+ /**
204
+ * Escape a value for SQL queries
205
+ *
206
+ * @param {*} value - Value to escape
207
+ * @returns {string} Escaped value
208
+ */
209
+ function escape(value) {
210
+ if (value === null || value === undefined) {
211
+ return 'NULL';
212
+ }
213
+ if (typeof value === 'boolean') {
214
+ return value ? '1' : '0';
215
+ }
216
+ if (typeof value === 'number') {
217
+ return String(value);
218
+ }
219
+ // Escape single quotes by doubling them
220
+ return `'${String(value).replace(/'/g, "''")}'`;
221
+ }
222
+ // Public API
223
+ const instance = {
224
+ connect,
225
+ query,
226
+ execute,
227
+ beginTransaction,
228
+ commit,
229
+ rollback,
230
+ disconnect,
231
+ getConnection,
232
+ ping,
233
+ escape,
234
+ // Alias for backward compatibility
235
+ run: execute
236
+ };
237
+ return instance;
238
+ }
239
+ // For backward compatibility
240
+ export const SQLiteAdapter = { create: createSQLiteAdapter };
241
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../../src/database/adapters/sqlite.js"],"names":[],"mappings":"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"}