@mikro-orm/libsql 7.0.4-dev.9 → 7.0.4

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.
@@ -3,12 +3,10 @@ import { type Options } from 'libsql';
3
3
  import { LibSqlDialect } from './LibSqlDialect.js';
4
4
  /** libSQL database connection supporting both local and remote databases. */
5
5
  export declare class LibSqlConnection extends BaseSqliteConnection {
6
- private database;
7
- connect(options?: {
8
- skipOnConnect?: boolean;
9
- }): Promise<void>;
10
- createKyselyDialect(options: Dictionary & Options): LibSqlDialect;
11
- /** @inheritDoc */
12
- executeDump(source: string): Promise<void>;
13
- private validateAttachSupport;
6
+ private database;
7
+ connect(options?: { skipOnConnect?: boolean }): Promise<void>;
8
+ createKyselyDialect(options: Dictionary & Options): LibSqlDialect;
9
+ /** @inheritDoc */
10
+ executeDump(source: string): Promise<void>;
11
+ private validateAttachSupport;
14
12
  }
@@ -3,34 +3,36 @@ import Database from 'libsql';
3
3
  import { LibSqlDialect } from './LibSqlDialect.js';
4
4
  /** libSQL database connection supporting both local and remote databases. */
5
5
  export class LibSqlConnection extends BaseSqliteConnection {
6
- database;
7
- async connect(options) {
8
- this.validateAttachSupport();
9
- await super.connect(options);
6
+ database;
7
+ async connect(options) {
8
+ this.validateAttachSupport();
9
+ await super.connect(options);
10
+ }
11
+ createKyselyDialect(options) {
12
+ const dbName = options.url ?? this.config.get('dbName');
13
+ options.authToken ??= this.config.get('password');
14
+ return new LibSqlDialect({
15
+ database: async () => {
16
+ return (this.database = new Database(dbName, options));
17
+ },
18
+ onCreateConnection: this.options.onCreateConnection ?? this.config.get('onCreateConnection'),
19
+ });
20
+ }
21
+ /** @inheritDoc */
22
+ async executeDump(source) {
23
+ await this.ensureConnection();
24
+ this.database.exec(source);
25
+ }
26
+ validateAttachSupport() {
27
+ const attachDatabases = this.config.get('attachDatabases');
28
+ if (!attachDatabases?.length) {
29
+ return;
10
30
  }
11
- createKyselyDialect(options) {
12
- const dbName = options.url ?? this.config.get('dbName');
13
- options.authToken ??= this.config.get('password');
14
- return new LibSqlDialect({
15
- database: async () => {
16
- return (this.database = new Database(dbName, options));
17
- },
18
- onCreateConnection: this.options.onCreateConnection ?? this.config.get('onCreateConnection'),
19
- });
20
- }
21
- /** @inheritDoc */
22
- async executeDump(source) {
23
- await this.ensureConnection();
24
- this.database.exec(source);
25
- }
26
- validateAttachSupport() {
27
- const attachDatabases = this.config.get('attachDatabases');
28
- if (!attachDatabases?.length) {
29
- return;
30
- }
31
- const dbName = this.config.get('dbName');
32
- if (/^(https?|libsql):\/\//.exec(dbName)) {
33
- throw new Error('ATTACH DATABASE is not supported for remote libSQL connections. ' + 'Use local file-based databases only.');
34
- }
31
+ const dbName = this.config.get('dbName');
32
+ if (/^(https?|libsql):\/\//.exec(dbName)) {
33
+ throw new Error(
34
+ 'ATTACH DATABASE is not supported for remote libSQL connections. ' + 'Use local file-based databases only.',
35
+ );
35
36
  }
37
+ }
36
38
  }
@@ -1,7 +1,7 @@
1
1
  import { SqliteDialect, type SqliteDialectConfig, SqliteDriver } from 'kysely';
2
2
  /** Kysely dialect adapter for libSQL. */
3
3
  export declare class LibSqlDialect extends SqliteDialect {
4
- #private;
5
- constructor(config: SqliteDialectConfig);
6
- createDriver(): SqliteDriver;
4
+ #private;
5
+ constructor(config: SqliteDialectConfig);
6
+ createDriver(): SqliteDriver;
7
7
  }
package/LibSqlDialect.js CHANGED
@@ -1,110 +1,112 @@
1
- import { SqliteDialect, SqliteDriver, } from 'kysely';
1
+ import { SqliteDialect, SqliteDriver } from 'kysely';
2
2
  const CONNECTION_TIMEOUT = 10_000;
3
3
  class ConnectionMutex {
4
- #promise;
5
- #resolve;
6
- async lock() {
7
- while (this.#promise) {
8
- await this.#promise;
9
- }
10
- this.#promise = new Promise(resolve => {
11
- this.#resolve = resolve;
12
- });
13
- }
14
- unlock() {
15
- const resolve = this.#resolve;
16
- this.#promise = undefined;
17
- this.#resolve = undefined;
18
- resolve?.();
4
+ #promise;
5
+ #resolve;
6
+ async lock() {
7
+ while (this.#promise) {
8
+ await this.#promise;
19
9
  }
10
+ this.#promise = new Promise(resolve => {
11
+ this.#resolve = resolve;
12
+ });
13
+ }
14
+ unlock() {
15
+ const resolve = this.#resolve;
16
+ this.#promise = undefined;
17
+ this.#resolve = undefined;
18
+ resolve?.();
19
+ }
20
20
  }
21
21
  class LibSqlConnection {
22
- #created = Date.now();
23
- #db;
24
- constructor(db) {
25
- this.#db = db;
22
+ #created = Date.now();
23
+ #db;
24
+ constructor(db) {
25
+ this.#db = db;
26
+ }
27
+ isValid() {
28
+ return this.memory || this.#created > Date.now() - CONNECTION_TIMEOUT;
29
+ }
30
+ async executeQuery(compiledQuery) {
31
+ const { sql, parameters } = compiledQuery;
32
+ const stmt = this.#db.prepare(sql);
33
+ if (stmt.reader) {
34
+ return {
35
+ rows: stmt.all(parameters),
36
+ };
26
37
  }
27
- isValid() {
28
- return this.memory || this.#created > Date.now() - CONNECTION_TIMEOUT;
38
+ const query = sql.trim().toLowerCase();
39
+ /* v8 ignore next */
40
+ if (
41
+ query.startsWith('select') ||
42
+ ((query.startsWith('insert into') || query.startsWith('update ')) && query.includes(' returning '))
43
+ ) {
44
+ return {
45
+ rows: stmt.all(parameters),
46
+ };
29
47
  }
30
- async executeQuery(compiledQuery) {
31
- const { sql, parameters } = compiledQuery;
32
- const stmt = this.#db.prepare(sql);
33
- if (stmt.reader) {
34
- return {
35
- rows: stmt.all(parameters),
36
- };
37
- }
38
- const query = sql.trim().toLowerCase();
39
- /* v8 ignore next */
40
- if (query.startsWith('select') ||
41
- ((query.startsWith('insert into') || query.startsWith('update ')) && query.includes(' returning '))) {
42
- return {
43
- rows: stmt.all(parameters),
44
- };
45
- }
46
- const { changes, lastInsertRowid } = stmt.run(parameters);
47
- return {
48
- numAffectedRows: changes,
49
- insertId: lastInsertRowid,
50
- rows: [],
51
- };
48
+ const { changes, lastInsertRowid } = stmt.run(parameters);
49
+ return {
50
+ numAffectedRows: changes,
51
+ insertId: lastInsertRowid,
52
+ rows: [],
53
+ };
54
+ }
55
+ async *streamQuery(compiledQuery) {
56
+ const { sql, parameters } = compiledQuery;
57
+ const stmt = this.#db.prepare(sql);
58
+ /* v8 ignore next */
59
+ if (!sql.toLowerCase().startsWith('select')) {
60
+ throw new Error('Sqlite driver only supports streaming of select queries');
52
61
  }
53
- async *streamQuery(compiledQuery) {
54
- const { sql, parameters } = compiledQuery;
55
- const stmt = this.#db.prepare(sql);
56
- /* v8 ignore next */
57
- if (!sql.toLowerCase().startsWith('select')) {
58
- throw new Error('Sqlite driver only supports streaming of select queries');
59
- }
60
- for (const row of stmt.iterate(parameters)) {
61
- yield {
62
- rows: [row],
63
- };
64
- }
62
+ for (const row of stmt.iterate(parameters)) {
63
+ yield {
64
+ rows: [row],
65
+ };
65
66
  }
67
+ }
66
68
  }
67
69
  class LibSqlKyselyDriver extends SqliteDriver {
68
- #db;
69
- #connection;
70
- #connectionMutex = new ConnectionMutex();
71
- #config;
72
- constructor(config) {
73
- super(config);
74
- this.#config = config;
75
- }
76
- async init() {
77
- this.#db = await this.#config.database();
78
- this.#connection = new LibSqlConnection(this.#db);
79
- /* v8 ignore next */
80
- if (this.#config.onCreateConnection) {
81
- await this.#config.onCreateConnection(this.#connection);
82
- }
83
- }
84
- async acquireConnection() {
85
- await this.#connectionMutex.lock();
86
- /* v8 ignore next */
87
- if (!this.#connection.isValid()) {
88
- await this.destroy();
89
- await this.init();
90
- }
91
- return this.#connection;
70
+ #db;
71
+ #connection;
72
+ #connectionMutex = new ConnectionMutex();
73
+ #config;
74
+ constructor(config) {
75
+ super(config);
76
+ this.#config = config;
77
+ }
78
+ async init() {
79
+ this.#db = await this.#config.database();
80
+ this.#connection = new LibSqlConnection(this.#db);
81
+ /* v8 ignore next */
82
+ if (this.#config.onCreateConnection) {
83
+ await this.#config.onCreateConnection(this.#connection);
92
84
  }
93
- async releaseConnection() {
94
- this.#connectionMutex.unlock();
95
- }
96
- async destroy() {
97
- this.#db.close();
85
+ }
86
+ async acquireConnection() {
87
+ await this.#connectionMutex.lock();
88
+ /* v8 ignore next */
89
+ if (!this.#connection.isValid()) {
90
+ await this.destroy();
91
+ await this.init();
98
92
  }
93
+ return this.#connection;
94
+ }
95
+ async releaseConnection() {
96
+ this.#connectionMutex.unlock();
97
+ }
98
+ async destroy() {
99
+ this.#db.close();
100
+ }
99
101
  }
100
102
  /** Kysely dialect adapter for libSQL. */
101
103
  export class LibSqlDialect extends SqliteDialect {
102
- #config;
103
- constructor(config) {
104
- super(config);
105
- this.#config = config;
106
- }
107
- createDriver() {
108
- return new LibSqlKyselyDriver(this.#config);
109
- }
104
+ #config;
105
+ constructor(config) {
106
+ super(config);
107
+ this.#config = config;
108
+ }
109
+ createDriver() {
110
+ return new LibSqlKyselyDriver(this.#config);
111
+ }
110
112
  }
package/LibSqlDriver.d.ts CHANGED
@@ -4,7 +4,7 @@ import { LibSqlConnection } from './LibSqlConnection.js';
4
4
  import { LibSqlMikroORM } from './LibSqlMikroORM.js';
5
5
  /** Database driver for libSQL (Turso). */
6
6
  export declare class LibSqlDriver extends AbstractSqlDriver<LibSqlConnection> {
7
- constructor(config: Configuration);
8
- /** @inheritDoc */
9
- getORMClass(): Constructor<LibSqlMikroORM>;
7
+ constructor(config: Configuration);
8
+ /** @inheritDoc */
9
+ getORMClass(): Constructor<LibSqlMikroORM>;
10
10
  }
package/LibSqlDriver.js CHANGED
@@ -3,11 +3,11 @@ import { LibSqlConnection } from './LibSqlConnection.js';
3
3
  import { LibSqlMikroORM } from './LibSqlMikroORM.js';
4
4
  /** Database driver for libSQL (Turso). */
5
5
  export class LibSqlDriver extends AbstractSqlDriver {
6
- constructor(config) {
7
- super(config, new SqlitePlatform(), LibSqlConnection, ['kysely', 'libsql']);
8
- }
9
- /** @inheritDoc */
10
- getORMClass() {
11
- return LibSqlMikroORM;
12
- }
6
+ constructor(config) {
7
+ super(config, new SqlitePlatform(), LibSqlConnection, ['kysely', 'libsql']);
8
+ }
9
+ /** @inheritDoc */
10
+ getORMClass() {
11
+ return LibSqlMikroORM;
12
+ }
13
13
  }
@@ -1,20 +1,58 @@
1
- import { type AnyEntity, type EntityClass, type EntitySchema, MikroORM, type Options, type IDatabaseDriver, type EntityManager, type EntityManagerType } from '@mikro-orm/core';
1
+ import {
2
+ type AnyEntity,
3
+ type EntityClass,
4
+ type EntitySchema,
5
+ MikroORM,
6
+ type Options,
7
+ type IDatabaseDriver,
8
+ type EntityManager,
9
+ type EntityManagerType,
10
+ } from '@mikro-orm/core';
2
11
  import type { SqlEntityManager } from '@mikro-orm/sql';
3
12
  import { LibSqlDriver } from './LibSqlDriver.js';
4
13
  /** Configuration options for the libSQL driver. */
5
- export type LibSqlOptions<EM extends SqlEntityManager<LibSqlDriver> = SqlEntityManager<LibSqlDriver>, Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (string | EntityClass<AnyEntity> | EntitySchema)[]> = Partial<Options<LibSqlDriver, EM, Entities>>;
14
+ export type LibSqlOptions<
15
+ EM extends SqlEntityManager<LibSqlDriver> = SqlEntityManager<LibSqlDriver>,
16
+ Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (
17
+ | string
18
+ | EntityClass<AnyEntity>
19
+ | EntitySchema
20
+ )[],
21
+ > = Partial<Options<LibSqlDriver, EM, Entities>>;
6
22
  /** Creates a type-safe configuration object for the libSQL driver. */
7
- export declare function defineLibSqlConfig<EM extends SqlEntityManager<LibSqlDriver> = SqlEntityManager<LibSqlDriver>, Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (string | EntityClass<AnyEntity> | EntitySchema)[]>(options: LibSqlOptions<EM, Entities>): LibSqlOptions<EM, Entities>;
23
+ export declare function defineLibSqlConfig<
24
+ EM extends SqlEntityManager<LibSqlDriver> = SqlEntityManager<LibSqlDriver>,
25
+ Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (
26
+ | string
27
+ | EntityClass<AnyEntity>
28
+ | EntitySchema
29
+ )[],
30
+ >(options: LibSqlOptions<EM, Entities>): LibSqlOptions<EM, Entities>;
8
31
  /**
9
32
  * @inheritDoc
10
33
  */
11
- export declare class LibSqlMikroORM<EM extends SqlEntityManager<LibSqlDriver> = SqlEntityManager<LibSqlDriver>, Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (string | EntityClass<AnyEntity> | EntitySchema)[]> extends MikroORM<LibSqlDriver, EM, Entities> {
12
- /**
13
- * @inheritDoc
14
- */
15
- static init<D extends IDatabaseDriver = LibSqlDriver, EM extends EntityManager<D> = D[typeof EntityManagerType] & EntityManager<D>, Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (string | EntityClass<AnyEntity> | EntitySchema)[]>(options: Partial<Options<D, EM, Entities>>): Promise<MikroORM<D, EM, Entities>>;
16
- /**
17
- * @inheritDoc
18
- */
19
- constructor(options: Partial<Options<LibSqlDriver, EM, Entities>>);
34
+ export declare class LibSqlMikroORM<
35
+ EM extends SqlEntityManager<LibSqlDriver> = SqlEntityManager<LibSqlDriver>,
36
+ Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (
37
+ | string
38
+ | EntityClass<AnyEntity>
39
+ | EntitySchema
40
+ )[],
41
+ > extends MikroORM<LibSqlDriver, EM, Entities> {
42
+ /**
43
+ * @inheritDoc
44
+ */
45
+ static init<
46
+ D extends IDatabaseDriver = LibSqlDriver,
47
+ EM extends EntityManager<D> = D[typeof EntityManagerType] & EntityManager<D>,
48
+ Entities extends (string | EntityClass<AnyEntity> | EntitySchema)[] = (
49
+ | string
50
+ | EntityClass<AnyEntity>
51
+ | EntitySchema
52
+ )[],
53
+ >(options: Partial<Options<D, EM, Entities>>): Promise<MikroORM<D, EM, Entities>>;
54
+ /**
55
+ * @inheritDoc
56
+ */
57
+ constructor(options: Partial<Options<LibSqlDriver, EM, Entities>>);
20
58
  }
package/LibSqlMikroORM.js CHANGED
@@ -1,23 +1,23 @@
1
- import { defineConfig, MikroORM, } from '@mikro-orm/core';
1
+ import { defineConfig, MikroORM } from '@mikro-orm/core';
2
2
  import { LibSqlDriver } from './LibSqlDriver.js';
3
3
  /** Creates a type-safe configuration object for the libSQL driver. */
4
4
  export function defineLibSqlConfig(options) {
5
- return defineConfig({ driver: LibSqlDriver, ...options });
5
+ return defineConfig({ driver: LibSqlDriver, ...options });
6
6
  }
7
7
  /**
8
8
  * @inheritDoc
9
9
  */
10
10
  export class LibSqlMikroORM extends MikroORM {
11
- /**
12
- * @inheritDoc
13
- */
14
- static async init(options) {
15
- return super.init(defineLibSqlConfig(options));
16
- }
17
- /**
18
- * @inheritDoc
19
- */
20
- constructor(options) {
21
- super(defineLibSqlConfig(options));
22
- }
11
+ /**
12
+ * @inheritDoc
13
+ */
14
+ static async init(options) {
15
+ return super.init(defineLibSqlConfig(options));
16
+ }
17
+ /**
18
+ * @inheritDoc
19
+ */
20
+ constructor(options) {
21
+ super(defineLibSqlConfig(options));
22
+ }
23
23
  }
package/README.md CHANGED
@@ -133,7 +133,7 @@ const author = await em.findOneOrFail(Author, 1, {
133
133
  populate: ['books'],
134
134
  });
135
135
  author.name = 'Jon Snow II';
136
- author.books.getItems().forEach(book => book.title += ' (2nd ed.)');
136
+ author.books.getItems().forEach(book => (book.title += ' (2nd ed.)'));
137
137
  author.books.add(orm.em.create(Book, { title: 'New Book', author }));
138
138
 
139
139
  // Flush computes change sets and executes them in a single transaction
package/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  export * from '@mikro-orm/sql';
2
2
  export * from './LibSqlConnection.js';
3
3
  export * from './LibSqlDriver.js';
4
- export { LibSqlMikroORM as MikroORM, type LibSqlOptions as Options, defineLibSqlConfig as defineConfig, } from './LibSqlMikroORM.js';
4
+ export {
5
+ LibSqlMikroORM as MikroORM,
6
+ type LibSqlOptions as Options,
7
+ defineLibSqlConfig as defineConfig,
8
+ } from './LibSqlMikroORM.js';
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from '@mikro-orm/sql';
2
2
  export * from './LibSqlConnection.js';
3
3
  export * from './LibSqlDriver.js';
4
- export { LibSqlMikroORM as MikroORM, defineLibSqlConfig as defineConfig, } from './LibSqlMikroORM.js';
4
+ export { LibSqlMikroORM as MikroORM, defineLibSqlConfig as defineConfig } from './LibSqlMikroORM.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/libsql",
3
- "version": "7.0.4-dev.9",
3
+ "version": "7.0.4",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "keywords": [
6
6
  "data-mapper",
@@ -47,15 +47,15 @@
47
47
  "copy": "node ../../scripts/copy.mjs"
48
48
  },
49
49
  "dependencies": {
50
- "@mikro-orm/sql": "7.0.4-dev.9",
50
+ "@mikro-orm/sql": "7.0.4",
51
51
  "kysely": "0.28.13",
52
52
  "libsql": "0.5.28"
53
53
  },
54
54
  "devDependencies": {
55
- "@mikro-orm/core": "^7.0.3"
55
+ "@mikro-orm/core": "^7.0.4"
56
56
  },
57
57
  "peerDependencies": {
58
- "@mikro-orm/core": "7.0.4-dev.9"
58
+ "@mikro-orm/core": "7.0.4"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">= 22.17.0"