@ignisia/sql 0.2.2 → 0.4.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.
Files changed (130) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/column/constants.d.cts +58 -5
  3. package/dist/cjs/column/constants.js +79 -22
  4. package/dist/cjs/column/index.d.cts +1 -0
  5. package/dist/cjs/column/index.js +31 -18
  6. package/dist/cjs/column/utils.d.cts +133 -0
  7. package/dist/cjs/column/utils.js +34 -0
  8. package/dist/cjs/database/alter.d.cts +3 -2
  9. package/dist/cjs/database/alter.js +15 -15
  10. package/dist/cjs/database/column.d.cts +3 -2
  11. package/dist/cjs/database/column.js +9 -7
  12. package/dist/cjs/database/contract.d.cts +3 -2
  13. package/dist/cjs/database/index.d.cts +3 -2
  14. package/dist/cjs/database/index.js +15 -2
  15. package/dist/cjs/database/table.d.cts +3 -2
  16. package/dist/cjs/database/table.js +12 -4
  17. package/dist/cjs/database/types.d.cts +2 -1
  18. package/dist/cjs/database/wrapper.d.cts +17 -21
  19. package/dist/cjs/database/wrapper.js +28 -52
  20. package/dist/cjs/index-CHxuUiO4.d.cts +472 -0
  21. package/dist/cjs/{index---zaMa69.d.cts → index-CZhrzE5r.d.cts} +5 -3
  22. package/dist/cjs/index.d.cts +3 -2
  23. package/dist/cjs/migration/index.d.cts +3 -2
  24. package/dist/cjs/migration/runner.js +1 -1
  25. package/dist/cjs/migration/type.d.cts +3 -2
  26. package/dist/cjs/query/builder.d.cts +3 -2
  27. package/dist/cjs/query/builder.js +1 -1
  28. package/dist/cjs/query/condition/common.d.cts +41 -0
  29. package/dist/cjs/query/condition/common.js +62 -0
  30. package/dist/cjs/query/condition/core.d.cts +8 -0
  31. package/dist/cjs/query/condition/core.js +57 -0
  32. package/dist/cjs/query/condition/index.d.cts +10 -0
  33. package/dist/cjs/query/condition/index.js +33 -0
  34. package/dist/cjs/query/condition/not.d.cts +34 -0
  35. package/dist/cjs/query/condition/not.js +51 -0
  36. package/dist/cjs/query/condition/raw.d.cts +8 -0
  37. package/dist/cjs/query/condition/raw.js +54 -0
  38. package/dist/cjs/query/constants.d.cts +27 -1
  39. package/dist/cjs/query/constants.js +28 -2
  40. package/dist/cjs/query/contract.d.cts +4 -3
  41. package/dist/cjs/query/explain.d.cts +12 -0
  42. package/dist/cjs/query/explain.js +65 -0
  43. package/dist/cjs/query/helper.d.cts +3 -2
  44. package/dist/cjs/query/helper.js +1 -1
  45. package/dist/cjs/query/index.d.cts +3 -2
  46. package/dist/cjs/query/index.js +69 -65
  47. package/dist/cjs/query/join.d.cts +18 -5
  48. package/dist/cjs/query/join.js +38 -9
  49. package/dist/cjs/query/sql.d.cts +9 -6
  50. package/dist/cjs/query/sql.js +80 -21
  51. package/dist/cjs/query/types.d.cts +2 -1
  52. package/dist/cjs/query/utilities.d.cts +7 -3
  53. package/dist/cjs/query/utilities.js +86 -5
  54. package/dist/cjs/table/constants.d.cts +1 -0
  55. package/dist/cjs/table/constants.js +1 -0
  56. package/dist/cjs/table/index.d.cts +3 -2
  57. package/dist/cjs/table/index.js +29 -9
  58. package/dist/cjs/table/types.d.cts +3 -2
  59. package/dist/cjs/table/utilities.d.cts +2 -1
  60. package/dist/cjs/types.d.cts +5 -1
  61. package/dist/cjs/utilities.d.cts +2 -1
  62. package/dist/cjs/utilities.js +22 -0
  63. package/dist/esm/column/constants.d.ts +58 -5
  64. package/dist/esm/column/constants.js +78 -23
  65. package/dist/esm/column/index.d.ts +1 -0
  66. package/dist/esm/column/index.js +31 -18
  67. package/dist/esm/column/utils.d.ts +133 -0
  68. package/dist/esm/column/utils.js +32 -0
  69. package/dist/esm/database/alter.d.ts +3 -2
  70. package/dist/esm/database/alter.js +15 -15
  71. package/dist/esm/database/column.d.ts +3 -2
  72. package/dist/esm/database/column.js +9 -7
  73. package/dist/esm/database/contract.d.ts +3 -2
  74. package/dist/esm/database/index.d.ts +3 -2
  75. package/dist/esm/database/index.js +17 -4
  76. package/dist/esm/database/table.d.ts +3 -2
  77. package/dist/esm/database/table.js +12 -4
  78. package/dist/esm/database/types.d.ts +2 -1
  79. package/dist/esm/database/wrapper.d.ts +17 -21
  80. package/dist/esm/database/wrapper.js +27 -53
  81. package/dist/esm/index-CjurLJdK.d.ts +472 -0
  82. package/dist/esm/{index-DFrpzXEn.d.ts → index-DgOs61lH.d.ts} +5 -3
  83. package/dist/esm/index.d.ts +3 -2
  84. package/dist/esm/migration/index.d.ts +3 -2
  85. package/dist/esm/migration/runner.js +1 -1
  86. package/dist/esm/migration/type.d.ts +3 -2
  87. package/dist/esm/query/builder.d.ts +3 -2
  88. package/dist/esm/query/builder.js +1 -1
  89. package/dist/esm/query/condition/common.d.ts +41 -0
  90. package/dist/esm/query/condition/common.js +56 -0
  91. package/dist/esm/query/condition/core.d.ts +8 -0
  92. package/dist/esm/query/condition/core.js +55 -0
  93. package/dist/esm/query/condition/index.d.ts +10 -0
  94. package/dist/esm/query/condition/index.js +4 -0
  95. package/dist/esm/query/condition/not.d.ts +34 -0
  96. package/dist/esm/query/condition/not.js +46 -0
  97. package/dist/esm/query/condition/raw.d.ts +8 -0
  98. package/dist/esm/query/condition/raw.js +50 -0
  99. package/dist/esm/query/constants.d.ts +27 -1
  100. package/dist/esm/query/constants.js +27 -3
  101. package/dist/esm/query/contract.d.ts +4 -3
  102. package/dist/esm/query/explain.d.ts +12 -0
  103. package/dist/esm/query/explain.js +64 -0
  104. package/dist/esm/query/helper.d.ts +3 -2
  105. package/dist/esm/query/helper.js +2 -2
  106. package/dist/esm/query/index.d.ts +3 -2
  107. package/dist/esm/query/index.js +72 -68
  108. package/dist/esm/query/join.d.ts +18 -5
  109. package/dist/esm/query/join.js +37 -9
  110. package/dist/esm/query/sql.d.ts +9 -6
  111. package/dist/esm/query/sql.js +80 -23
  112. package/dist/esm/query/types.d.ts +2 -1
  113. package/dist/esm/query/utilities.d.ts +7 -3
  114. package/dist/esm/query/utilities.js +86 -6
  115. package/dist/esm/table/constants.d.ts +1 -0
  116. package/dist/esm/table/constants.js +1 -0
  117. package/dist/esm/table/index.d.ts +3 -2
  118. package/dist/esm/table/index.js +29 -9
  119. package/dist/esm/table/types.d.ts +3 -2
  120. package/dist/esm/table/utilities.d.ts +2 -1
  121. package/dist/esm/types.d.ts +5 -1
  122. package/dist/esm/utilities.d.ts +2 -1
  123. package/dist/esm/utilities.js +22 -1
  124. package/package.json +8 -2
  125. package/dist/cjs/index-CwiFQh0I.d.cts +0 -358
  126. package/dist/cjs/query/condition.d.cts +0 -7
  127. package/dist/cjs/query/condition.js +0 -106
  128. package/dist/esm/index-FMT0YEO7.d.ts +0 -358
  129. package/dist/esm/query/condition.d.ts +0 -7
  130. package/dist/esm/query/condition.js +0 -98
@@ -3,9 +3,9 @@
3
3
  var constants = require('../table/constants');
4
4
 
5
5
  async function addColumn(tableName, columnName, column) {
6
- await this.client.exec(
7
- `ALTER TABLE ${tableName} ADD COLUMN ${columnName} ${column.toString()};`
8
- );
6
+ await this.client.exec({
7
+ sql: `ALTER TABLE ${tableName} ADD COLUMN ${columnName} ${column.toString()};`
8
+ });
9
9
  if (!this.tables[tableName]) return this;
10
10
  this.tables[tableName].columns[columnName] = column;
11
11
  return this;
@@ -14,9 +14,9 @@ async function renameColumn(tableName, oldName, newName) {
14
14
  if (this.dialect === constants.Dialect.SQLITE) {
15
15
  throw new Error("SQLite does not support RENAME COLUMN natively.");
16
16
  }
17
- await this.client.exec(
18
- `ALTER TABLE ${tableName} RENAME COLUMN ${oldName} TO ${newName};`
19
- );
17
+ await this.client.exec({
18
+ sql: `ALTER TABLE ${tableName} RENAME COLUMN ${oldName} TO ${newName};`
19
+ });
20
20
  if (!this.tables[tableName]) return this;
21
21
  this.tables[tableName].columns[newName] = this.tables[tableName].columns[oldName];
22
22
  delete this.tables[tableName].columns[oldName];
@@ -26,7 +26,9 @@ async function dropColumn(tableName, columnName) {
26
26
  if (this.dialect === constants.Dialect.SQLITE) {
27
27
  throw new Error("SQLite does not support DROP COLUMN natively.");
28
28
  }
29
- await this.client.exec(`ALTER TABLE ${tableName} DROP COLUMN ${columnName};`);
29
+ await this.client.exec({
30
+ sql: `ALTER TABLE ${tableName} DROP COLUMN ${columnName};`
31
+ });
30
32
  if (!this.tables[tableName]) return this;
31
33
  delete this.tables[tableName].columns[columnName];
32
34
  return this;
@@ -1,8 +1,9 @@
1
- export { C as ColumnAlterationContract, T as TableAlterationContract } from '../index---zaMa69.cjs';
1
+ export { C as ColumnAlterationContract, T as TableAlterationContract } from '../index-CZhrzE5r.cjs';
2
2
  import '../column/index.cjs';
3
3
  import '../column/constants.cjs';
4
- import '../index-CwiFQh0I.cjs';
4
+ import '../index-CHxuUiO4.cjs';
5
5
  import '../table/constants.cjs';
6
+ import 'bun';
6
7
  import '../query/constants.cjs';
7
8
  import '../column/types.cjs';
8
9
  import '../types.cjs';
@@ -1,8 +1,9 @@
1
+ import 'bun';
1
2
  import '../column/index.cjs';
2
- import '../index-CwiFQh0I.cjs';
3
+ import '../index-CHxuUiO4.cjs';
3
4
  import '../query/constants.cjs';
4
5
  import '../table/constants.cjs';
5
- export { D as Database } from '../index---zaMa69.cjs';
6
+ export { D as Database } from '../index-CZhrzE5r.cjs';
6
7
  import '../column/constants.cjs';
7
8
  import '../column/types.cjs';
8
9
  import '../types.cjs';
@@ -32,10 +32,11 @@ class Database {
32
32
  dialect: options.dialect,
33
33
  config: options.config
34
34
  };
35
- this.client = options.dialect === constants.Dialect.POSTGRES ? new wrapper.DatabasePsql(options.config) : new wrapper.DatabaseSqlite(options.config);
35
+ this.client = this.createClient(options);
36
36
  if (options.tables) {
37
37
  for (const tableName in options.tables) {
38
38
  options.tables[tableName].client = this.client;
39
+ options.tables[tableName].setDialect(this.dialect);
39
40
  }
40
41
  }
41
42
  this.createTable = table.createTable.bind(this);
@@ -53,13 +54,25 @@ class Database {
53
54
  this.dropColumnDefault = alter.dropColumnDefault.bind(
54
55
  this
55
56
  );
56
- this.setColumnNotNull = alter.setColumnDefault.bind(
57
+ this.setColumnNotNull = alter.setColumnNotNull.bind(
57
58
  this
58
59
  );
59
60
  this.dropColumnNotNull = alter.dropColumnNotNull.bind(
60
61
  this
61
62
  );
62
63
  }
64
+ createClient(options) {
65
+ switch (options.dialect) {
66
+ case constants.Dialect.SQLITE:
67
+ return new wrapper.DatabaseSqlite(options.config);
68
+ case constants.Dialect.POSTGRES:
69
+ return new wrapper.DatabasePsql(options.config);
70
+ case constants.Dialect.MYSQL:
71
+ return new wrapper.DatabaseMysql(options.config);
72
+ default:
73
+ throw new Error(`Dialect ${options.dialect} is not supported`);
74
+ }
75
+ }
63
76
  table(tableName) {
64
77
  if (!this.tables[tableName]) {
65
78
  throw new Error(`Table ${tableName} does not exist`);
@@ -1,7 +1,8 @@
1
- import { D as Database } from '../index---zaMa69.cjs';
1
+ import { D as Database } from '../index-CZhrzE5r.cjs';
2
2
  import { Column } from '../column/index.cjs';
3
- import { T as Table, D as DatabaseDefinition, a as TimestampOptions, M as MergeTimestampParanoid } from '../index-CwiFQh0I.cjs';
3
+ import { T as Table, D as DatabaseDefinition, f as TimestampOptions, M as MergeTimestampParanoid } from '../index-CHxuUiO4.cjs';
4
4
  import { Dialect } from '../table/constants.cjs';
5
+ import 'bun';
5
6
  import '../query/constants.cjs';
6
7
  import '../column/constants.cjs';
7
8
  import '../column/types.cjs';
@@ -17,21 +17,29 @@ async function createTable(tableName, columns, options) {
17
17
  while (this.client.status === "connecting") {
18
18
  await new Promise((resolve) => setTimeout(resolve, 100));
19
19
  }
20
- await table$1.create(this.client);
20
+ await table$1.create({
21
+ db: this.client
22
+ });
21
23
  return this;
22
24
  }
23
25
  async function renameTable(oldName, newName) {
24
- await this.client.exec(`ALTER TABLE ${oldName} RENAME TO ${newName};`);
26
+ await this.client.exec({
27
+ sql: `ALTER TABLE ${oldName} RENAME TO ${newName};`
28
+ });
25
29
  this.tables[newName] = this.tables[oldName];
26
30
  delete this.tables[oldName];
27
31
  return this;
28
32
  }
29
33
  async function dropTable(tableName) {
30
34
  if (!this.tables[tableName]) {
31
- await this.client.exec(`DROP TABLE IF EXISTS ${tableName};`);
35
+ await this.client.exec({
36
+ sql: `DROP TABLE IF EXISTS ${tableName};`
37
+ });
32
38
  return this;
33
39
  }
34
- await this.tables[tableName].drop(this.client);
40
+ await this.tables[tableName].drop({
41
+ db: this.client
42
+ });
35
43
  delete this.tables[tableName];
36
44
  return this;
37
45
  }
@@ -1,5 +1,6 @@
1
+ import 'bun';
1
2
  import '../column/index.cjs';
2
- export { D as DatabaseDefinition, b as DatabaseDialect, g as DatabaseOptions, P as PostgresConfig, S as SqliteConfig } from '../index-CwiFQh0I.cjs';
3
+ export { D as DatabaseDefinition, g as DatabaseDialect, h as DatabaseExecOptions, q as DatabaseOptions, i as MysqlConfig, P as PostgresConfig, J as SqlConfig, S as SqlConfigMapping, j as SqliteConfig } from '../index-CHxuUiO4.cjs';
3
4
  import '../table/constants.cjs';
4
5
  import '../column/constants.cjs';
5
6
  import '../column/types.cjs';
@@ -1,36 +1,32 @@
1
- import { SQL } from 'bun';
2
- import { Database } from 'bun:sqlite';
1
+ import { SQL, TransactionSQL } from 'bun';
3
2
  import { Dialect } from '../table/constants.cjs';
4
- import { b as DatabaseDialect, P as PostgresConfig, S as SqliteConfig } from '../index-CwiFQh0I.cjs';
3
+ import { S as SqlConfigMapping, g as DatabaseDialect, h as DatabaseExecOptions, P as PostgresConfig, i as MysqlConfig, j as SqliteConfig } from '../index-CHxuUiO4.cjs';
5
4
  import '../column/index.cjs';
6
5
  import '../column/constants.cjs';
7
6
  import '../column/types.cjs';
8
7
  import '../types.cjs';
9
8
  import '../query/constants.cjs';
10
9
 
11
- declare class DatabasePsql implements DatabaseDialect {
12
- readonly dialect: typeof Dialect.POSTGRES;
13
- readonly options: PostgresConfig;
10
+ declare class BaseSql<DbDialect extends Dialect, Options extends SqlConfigMapping[DbDialect]> implements DatabaseDialect {
11
+ readonly dialect: Dialect;
12
+ readonly options: Options;
14
13
  client: SQL;
15
14
  status: 'connecting' | 'connected' | 'disconnected';
16
- constructor(options: PostgresConfig);
15
+ constructor(dialect: Dialect, options: Options);
17
16
  connect(): Promise<this>;
18
17
  disconnect(): Promise<this>;
19
- exec<T>(sql: string): Promise<T>;
20
- exec<T>(sql: string, values: any[]): Promise<T>;
21
- transaction<T, U extends () => Promise<T>>(fn: U): Promise<T>;
18
+ exec<T>(options: DatabaseExecOptions): Promise<T>;
19
+ transaction<T, U extends (tx: TransactionSQL) => Promise<T>>(fn: U): Promise<T>;
20
+ distributed<T extends string, U, V extends (tx: TransactionSQL) => Promise<U>>(name: T, fn: V): Promise<U>;
22
21
  }
23
- declare class DatabaseSqlite implements DatabaseDialect {
24
- readonly dialect: typeof Dialect.SQLITE;
25
- readonly options: SqliteConfig;
26
- client: Database;
27
- status: 'connecting' | 'connected' | 'disconnected';
22
+ declare class DatabasePsql extends BaseSql<typeof Dialect.POSTGRES, PostgresConfig> {
23
+ constructor(options: PostgresConfig);
24
+ }
25
+ declare class DatabaseMysql extends BaseSql<typeof Dialect.MYSQL, MysqlConfig> {
26
+ constructor(options: MysqlConfig);
27
+ }
28
+ declare class DatabaseSqlite extends BaseSql<typeof Dialect.SQLITE, SqliteConfig> {
28
29
  constructor(options: SqliteConfig);
29
- connect(): Promise<this>;
30
- disconnect(): Promise<this>;
31
- exec<T>(sql: string): Promise<T>;
32
- exec<T>(sql: string, params: any): Promise<T>;
33
- transaction<T, U extends () => Promise<T>>(fn: U): Promise<T>;
34
30
  }
35
31
 
36
- export { DatabasePsql, DatabaseSqlite };
32
+ export { BaseSql, DatabaseMysql, DatabasePsql, DatabaseSqlite };
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
3
  var bun = require('bun');
4
- var bun_sqlite = require('bun:sqlite');
5
4
  var constants = require('../table/constants');
6
5
 
7
- class DatabasePsql {
6
+ class BaseSql {
8
7
  dialect;
9
8
  options;
10
9
  client;
11
10
  status;
12
- constructor(options) {
13
- this.dialect = constants.Dialect.POSTGRES;
11
+ constructor(dialect, options) {
12
+ this.dialect = dialect;
14
13
  this.options = options;
15
14
  this.status = "connecting";
16
15
  this.client = new bun.SQL({
17
16
  ...options,
17
+ adapter: dialect,
18
18
  onconnect: () => {
19
19
  this.status = "connected";
20
20
  },
@@ -32,64 +32,40 @@ class DatabasePsql {
32
32
  await this.client.close();
33
33
  return this;
34
34
  }
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- async exec(sql, values) {
37
- if (!values) {
38
- return this.client.unsafe(sql);
35
+ async exec(options) {
36
+ const client = options.tx || this.client;
37
+ if (!client) {
38
+ throw new Error("Database not connected");
39
+ }
40
+ if (!options.params) {
41
+ return client.unsafe(options.sql);
39
42
  }
40
- return this.client.unsafe(sql, values);
43
+ return client.unsafe(options.sql, options.params);
41
44
  }
42
45
  async transaction(fn) {
43
- try {
44
- await this.exec("BEGIN");
45
- const result = await fn();
46
- await this.exec("COMMIT");
47
- return result;
48
- } catch (err) {
49
- await this.exec("ROLLBACK");
50
- throw err;
51
- }
46
+ return this.client.transaction(fn);
47
+ }
48
+ async distributed(name, fn) {
49
+ return this.client.distributed(name, fn);
52
50
  }
53
51
  }
54
- class DatabaseSqlite {
55
- dialect;
56
- options;
57
- client;
58
- status;
52
+ class DatabasePsql extends BaseSql {
59
53
  constructor(options) {
60
- this.dialect = constants.Dialect.SQLITE;
61
- this.options = options;
62
- this.status = "connecting";
63
- this.client = new bun_sqlite.Database(options.filename);
64
- this.status = "connected";
65
- }
66
- async connect() {
67
- this.client = new bun_sqlite.Database(this.options.filename);
68
- this.status = "connected";
69
- return this;
70
- }
71
- async disconnect() {
72
- this.client.close();
73
- this.status = "disconnected";
74
- return this;
54
+ super(constants.Dialect.POSTGRES, options);
75
55
  }
76
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
- async exec(sql, params) {
78
- const query = this.client.prepare(sql, params);
79
- return query.all();
56
+ }
57
+ class DatabaseMysql extends BaseSql {
58
+ constructor(options) {
59
+ super(constants.Dialect.MYSQL, options);
80
60
  }
81
- async transaction(fn) {
82
- try {
83
- await this.exec("BEGIN");
84
- const result = await fn();
85
- await this.exec("COMMIT");
86
- return result;
87
- } catch (err) {
88
- await this.exec("ROLLBACK");
89
- throw err;
90
- }
61
+ }
62
+ class DatabaseSqlite extends BaseSql {
63
+ constructor(options) {
64
+ super(constants.Dialect.SQLITE, options);
91
65
  }
92
66
  }
93
67
 
68
+ exports.BaseSql = BaseSql;
69
+ exports.DatabaseMysql = DatabaseMysql;
94
70
  exports.DatabasePsql = DatabasePsql;
95
71
  exports.DatabaseSqlite = DatabaseSqlite;