rado 0.3.2 → 0.3.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.
Files changed (101) hide show
  1. package/README.md +2 -0
  2. package/dist/define/CTE.d.ts +2 -0
  3. package/dist/define/CTE.js +51 -0
  4. package/dist/define/Cursor.d.ts +65 -42
  5. package/dist/define/Cursor.js +170 -88
  6. package/dist/define/Expr.d.ts +2 -2
  7. package/dist/define/Expr.js +4 -1
  8. package/dist/define/Ops.d.ts +1 -6
  9. package/dist/define/Ops.js +10 -7
  10. package/dist/define/Query.d.ts +117 -2
  11. package/dist/define/Query.js +472 -17
  12. package/dist/define/Selection.d.ts +1 -1
  13. package/dist/define/Table.d.ts +6 -3
  14. package/dist/define/Table.js +6 -1
  15. package/dist/define/VirtualTable.d.ts +1 -1
  16. package/dist/define/query/Delete.d.ts +0 -2
  17. package/dist/define/query/Delete.js +0 -3
  18. package/dist/define/query/Select.d.ts +0 -2
  19. package/dist/define/query/Select.js +1 -14
  20. package/dist/deno/driver/better-sqlite3.js +57 -0
  21. package/dist/deno/driver/bun-sqlite.js +69 -0
  22. package/dist/deno/driver/sql.js.js +72 -0
  23. package/dist/deno/driver/sqlite3.js +123 -0
  24. package/dist/deno/index.js +14 -0
  25. package/dist/deno/lib/Driver.js +330 -0
  26. package/dist/deno/lib/Formatter.js +715 -0
  27. package/dist/deno/lib/SqlError.js +11 -0
  28. package/dist/deno/lib/Statement.js +108 -0
  29. package/dist/deno/sqlite/SqliteFormatter.js +70 -0
  30. package/dist/deno/sqlite/SqliteFunctions.js +150 -0
  31. package/dist/deno/sqlite/SqliteSchema.js +47 -0
  32. package/dist/deno/sqlite.js +3 -0
  33. package/dist/deno/util/Callable.js +15 -0
  34. package/dist/driver/bun-sqlite.js +1 -2
  35. package/dist/index.d.ts +0 -8
  36. package/dist/index.js +0 -8
  37. package/dist/lib/Driver.d.ts +1 -2
  38. package/dist/lib/Formatter.js +17 -3
  39. package/dist/sqlite/index.d.ts +2 -0
  40. package/dist/sqlite/index.js +3 -0
  41. package/dist/src/driver/better-sqlite3.js +49 -0
  42. package/dist/src/driver/sql.js.js +66 -0
  43. package/dist/src/driver/sqlite3.js +87 -0
  44. package/dist/src/index.js +24 -0
  45. package/dist/{lib → src/lib}/Column.js +1 -6
  46. package/dist/{lib → src/lib}/Cursor.js +25 -50
  47. package/dist/src/lib/Driver.js +316 -0
  48. package/dist/{lib → src/lib}/Expr.js +4 -4
  49. package/dist/src/lib/Formatter.js +625 -0
  50. package/dist/{lib → src/lib}/Ops.js +14 -5
  51. package/dist/src/lib/Sanitizer.js +0 -0
  52. package/dist/src/lib/Statement.js +103 -0
  53. package/dist/{lib → src/lib}/Table.js +1 -1
  54. package/dist/{lib → src/lib}/Target.js +4 -9
  55. package/dist/src/lib/Update.js +0 -0
  56. package/dist/src/sqlite/SqliteFormatter.js +67 -0
  57. package/dist/src/sqlite/SqliteFunctions.js +146 -0
  58. package/dist/src/sqlite/SqliteSchema.js +47 -0
  59. package/dist/src/sqlite.js +3 -0
  60. package/dist/test/DbSuite.js +28 -0
  61. package/dist/test/TSTestTypes.js +6 -0
  62. package/dist/test/TestBasic.js +172 -0
  63. package/dist/test/TestExtend.js +68 -0
  64. package/dist/test/TestFts5.js +34 -0
  65. package/dist/test/TestFunctions.js +28 -0
  66. package/dist/test/TestJoins.js +34 -0
  67. package/dist/test/TestJson.js +33 -0
  68. package/dist/test/TestPrepare.js +27 -0
  69. package/dist/test/TestRawSql.js +31 -0
  70. package/dist/test/TestSchema.js +69 -0
  71. package/dist/test/TestSubQueries.js +79 -0
  72. package/dist/test/TestTransaction.js +54 -0
  73. package/dist/test/TestUpdate.js +95 -0
  74. package/dist/test/index.js +14 -0
  75. package/package.json +1 -1
  76. package/dist/lib/Column.d.ts +0 -57
  77. package/dist/lib/Cursor.d.ts +0 -85
  78. package/dist/lib/Expr.d.ts +0 -154
  79. package/dist/lib/Fields.d.ts +0 -13
  80. package/dist/lib/Functions.d.ts +0 -5
  81. package/dist/lib/Id.d.ts +0 -3
  82. package/dist/lib/Index.d.ts +0 -17
  83. package/dist/lib/Ops.d.ts +0 -7
  84. package/dist/lib/OrderBy.d.ts +0 -9
  85. package/dist/lib/Param.d.ts +0 -20
  86. package/dist/lib/Query.d.ts +0 -109
  87. package/dist/lib/Schema.d.ts +0 -18
  88. package/dist/lib/Selection.d.ts +0 -20
  89. package/dist/lib/Table.d.ts +0 -62
  90. package/dist/lib/Target.d.ts +0 -38
  91. package/dist/lib/Update.d.ts +0 -4
  92. /package/dist/{lib/Fields.js → deno/lib/Sanitizer.js} +0 -0
  93. /package/dist/{lib/Id.js → src/lib/Fields.js} +0 -0
  94. /package/dist/{lib → src/lib}/Functions.js +0 -0
  95. /package/dist/{lib/Update.js → src/lib/Id.js} +0 -0
  96. /package/dist/{lib → src/lib}/Index.js +0 -0
  97. /package/dist/{lib → src/lib}/OrderBy.js +0 -0
  98. /package/dist/{lib → src/lib}/Param.js +0 -0
  99. /package/dist/{lib → src/lib}/Query.js +0 -0
  100. /package/dist/{lib → src/lib}/Schema.js +0 -0
  101. /package/dist/{lib → src/lib}/Selection.js +0 -0
@@ -0,0 +1,34 @@
1
+ // test/TestFts5.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, table } from "../src/index.js";
5
+ import { match } from "../src/sqlite.js";
6
+ import { connect } from "./DbSuite.js";
7
+ var Search = table({
8
+ name: "Search",
9
+ columns: {
10
+ name: column.string(),
11
+ col2: column.string().nullable()
12
+ }
13
+ });
14
+ test("Search", async () => {
15
+ if (process.env.TEST_DRIVER === "sql.js")
16
+ return;
17
+ const query = await connect();
18
+ await query`
19
+ create virtual table if not exists Search using fts5(name, col2)
20
+ `;
21
+ await query(
22
+ Search.insertAll([
23
+ { name: "test" },
24
+ { name: "hello" },
25
+ { name: "world", col2: "test ok" }
26
+ ])
27
+ );
28
+ const results = await query(Search.where(match(Search, "test")));
29
+ assert.equal(
30
+ results.map((res) => res.name),
31
+ ["test", "world"]
32
+ );
33
+ });
34
+ test.run();
@@ -0,0 +1,28 @@
1
+ // test/TestFunctions.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, table } from "../src/index.js";
5
+ import { cast, strftime } from "../src/sqlite.js";
6
+ import { connect } from "./DbSuite.js";
7
+ test("Functions", async () => {
8
+ const query = await connect();
9
+ const User = table({
10
+ name: "User",
11
+ columns: {
12
+ id: column.integer().primaryKey(),
13
+ birthdate: column.string()
14
+ }
15
+ });
16
+ await query(User.createTable());
17
+ const now = "1920-01-01";
18
+ const int = (e) => cast(e, "integer");
19
+ const age = int(strftime("%Y", now)).substract(int(strftime("%Y", User.birthdate))).substract(
20
+ int(strftime("%m-%d", now).less(strftime("%m-%d", User.birthdate)))
21
+ );
22
+ const me = await query(User.insertOne({ birthdate: "1900-01-01" }));
23
+ assert.is(
24
+ (await query(User.sure().select({ age }).where(User.id.is(me.id)))).age,
25
+ 20
26
+ );
27
+ });
28
+ test.run();
@@ -0,0 +1,34 @@
1
+ // test/TestJoins.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, create, table } from "../src/index.js";
5
+ import { connect } from "./DbSuite.js";
6
+ var User = table({
7
+ name: "User",
8
+ columns: {
9
+ id: column.integer().primaryKey(),
10
+ name: column.string()
11
+ }
12
+ });
13
+ var Contact = table({
14
+ name: "Contact",
15
+ columns: {
16
+ id: column.integer().primaryKey(),
17
+ user: column.integer()
18
+ }
19
+ });
20
+ test("OrderBy", async () => {
21
+ const query = await connect();
22
+ await query.transaction(async (query2) => {
23
+ await query2(create(User, Contact));
24
+ const user1 = await query2(User.insertOne({ name: "b" }));
25
+ const user2 = await query2(User.insertOne({ name: "a" }));
26
+ await query2(Contact.insertAll([{ user: user1.id }, { user: user2.id }]));
27
+ });
28
+ const results = await query(
29
+ Contact.leftJoin(User, User.id.is(Contact.user)).select({ ...Contact, user: User }).orderBy(User.name)
30
+ );
31
+ assert.is(results[0].user.name, "a");
32
+ assert.is(results[1].user.name, "b");
33
+ });
34
+ test.run();
@@ -0,0 +1,33 @@
1
+ // test/TestJson.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { Cursor, Expr, column, table } from "../src/index.js";
5
+ import { connect } from "./DbSuite.js";
6
+ var Node = table({
7
+ name: "node",
8
+ columns: {
9
+ id: column.integer().primaryKey(),
10
+ index: column.integer()
11
+ }
12
+ });
13
+ test("json", async () => {
14
+ const query = await connect();
15
+ await query(Node.createTable());
16
+ const amount = 10;
17
+ const objects = Array.from({ length: amount }).map((_, i) => ({ index: i }));
18
+ assert.is(objects.length, amount);
19
+ await query(Node.insertAll(objects));
20
+ const count = await query(Node.count());
21
+ assert.is(count, amount);
22
+ const q = Node.first().select({
23
+ fieldA: Expr.value(12),
24
+ fieldB: Node.index
25
+ }).where(Node.index.is(1));
26
+ const res1 = await query(q);
27
+ assert.is(res1.fieldA, 12);
28
+ assert.is(res1.fieldB, 1);
29
+ const res2 = await query(new Cursor(q.toJSON()));
30
+ assert.is(res2.fieldA, 12);
31
+ assert.is(res2.fieldB, 1);
32
+ });
33
+ test.run();
@@ -0,0 +1,27 @@
1
+ // test/TestPrepare.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, table } from "../src/index.js";
5
+ import { connect } from "./DbSuite.js";
6
+ var Node = table({
7
+ name: "node",
8
+ columns: {
9
+ id: column.integer().primaryKey(),
10
+ index: column.integer()
11
+ }
12
+ });
13
+ test("prepare", async () => {
14
+ const query = await connect();
15
+ await query(Node.createTable());
16
+ const amount = 10;
17
+ const objects = Array.from({ length: amount }).map((_, i) => ({ index: i }));
18
+ const insert = query.prepare((index) => {
19
+ return Node.insertAll([{ index }]);
20
+ });
21
+ for (const object of objects) {
22
+ await insert(object.index);
23
+ }
24
+ const total = await query(Node.count());
25
+ assert.is(amount, total);
26
+ });
27
+ test.run();
@@ -0,0 +1,31 @@
1
+ // test/TestRawSql.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { connect } from "./DbSuite.js";
5
+ var query = await connect();
6
+ var valueWithQuotes = `test"t'est`;
7
+ test("Get row", async () => {
8
+ assert.equal(await query.get`select ${valueWithQuotes} as res`, {
9
+ res: valueWithQuotes
10
+ });
11
+ });
12
+ test("Get rows", async () => {
13
+ assert.equal(
14
+ await query.all`
15
+ with recursive
16
+ cnt(x) as (values(${1}) union all select x+${1} from cnt where x<3)
17
+ select x from cnt;
18
+ `,
19
+ [{ x: 1 }, { x: 2 }, { x: 3 }]
20
+ );
21
+ });
22
+ test("Execute", async () => {
23
+ await query(
24
+ query.sql`create table test (id integer primary key, name text)`,
25
+ query.sql`insert into test (name) values (${valueWithQuotes})`
26
+ );
27
+ assert.equal(await query.all`select * from test`, [
28
+ { id: 1, name: valueWithQuotes }
29
+ ]);
30
+ });
31
+ test.run();
@@ -0,0 +1,69 @@
1
+ // test/TestSchema.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, index, table } from "../src/index.js";
5
+ import { datetime } from "../src/sqlite.js";
6
+ import { connect } from "./DbSuite.js";
7
+ var columns = {
8
+ id: column.integer().primaryKey(),
9
+ index: column.integer(),
10
+ bool: column.boolean(),
11
+ string: column.string(),
12
+ number: column.number(),
13
+ array: column.array(),
14
+ object: column.object(),
15
+ nullableCol: column.string().nullable(),
16
+ defaultString: column.string().defaultValue("'with quotes'"),
17
+ defaultNumber: column.number().defaultValue(123),
18
+ defaultBoolean: column.boolean().defaultValue(true),
19
+ defaultBoolean2: column.boolean().defaultValue(false),
20
+ defaultFloat: column.number().defaultValue(1.23),
21
+ defaultArray: column.array().defaultValue([1, 2, 3]),
22
+ defaultObject: column.object().defaultValue({ a: 1, b: 2, c: 3 }),
23
+ createdAt: column.string().defaultValue(datetime("now", "localtime"))
24
+ };
25
+ var TestTable = table({
26
+ name: "test",
27
+ columns
28
+ });
29
+ var query = await connect();
30
+ test("Create table", async () => {
31
+ await query(TestTable.createTable());
32
+ });
33
+ test("Add col", async () => {
34
+ const createdAt = column.string().defaultValue(datetime("now", "localtime"));
35
+ const Start = table({
36
+ name: "test",
37
+ columns: {
38
+ id: column.integer().primaryKey(),
39
+ createdAt,
40
+ text: column.string()
41
+ }
42
+ });
43
+ await query(Start.createTable());
44
+ const AddCol = table({
45
+ name: "test",
46
+ columns: {
47
+ id: column.integer().primaryKey(),
48
+ createdAt,
49
+ newCol: column.string()
50
+ },
51
+ indexes() {
52
+ return {
53
+ newCol: index(this.newCol),
54
+ multiple: index(this.newCol.concat("inline parameter test"))
55
+ };
56
+ }
57
+ });
58
+ await query.migrateSchema(AddCol);
59
+ await query(
60
+ AddCol.insertOne({
61
+ newCol: "new"
62
+ })
63
+ );
64
+ const rowOne = await query(
65
+ AddCol.select({ id: AddCol.id, newCol: AddCol.newCol }).first()
66
+ );
67
+ assert.equal(rowOne, { id: 1, newCol: "new" });
68
+ });
69
+ test.run();
@@ -0,0 +1,79 @@
1
+ // test/TestSubQueries.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, create, table } from "../src/index.js";
5
+ import { connect } from "./DbSuite.js";
6
+ test("IncludeMany", async () => {
7
+ const query = await connect();
8
+ const Role = table({
9
+ name: "Role",
10
+ columns: {
11
+ id: column.integer().primaryKey(),
12
+ name: column.string()
13
+ }
14
+ });
15
+ const User = table({
16
+ name: "User",
17
+ columns: {
18
+ id: column.integer().primaryKey(),
19
+ roles: column.array()
20
+ }
21
+ });
22
+ const Entry = table({
23
+ name: "Entry",
24
+ columns: {
25
+ id: column.integer().primaryKey()
26
+ }
27
+ });
28
+ const Language = table({
29
+ name: "Language",
30
+ columns: {
31
+ id: column.integer().primaryKey(),
32
+ entry: column.integer()
33
+ }
34
+ });
35
+ const Version = table({
36
+ name: "Version",
37
+ columns: {
38
+ id: column.integer().primaryKey(),
39
+ language: column.integer()
40
+ }
41
+ });
42
+ await query(create(Role, User, Entry, Language, Version));
43
+ const role1 = await query(Role.insertOne({ name: "role1" }));
44
+ const role2 = await query(Role.insertOne({ name: "role2" }));
45
+ const user = await query(User.insertOne({ roles: [role1.id, role2.id] }));
46
+ const UserAlias = User.as("user1");
47
+ const RoleAlias = Role.as("role");
48
+ const bundled = await query(
49
+ UserAlias.first().select({
50
+ ...UserAlias,
51
+ roles: RoleAlias.select({
52
+ name: RoleAlias.name
53
+ }).orderBy(RoleAlias.name.asc()).where(RoleAlias.id.isIn(UserAlias.roles))
54
+ })
55
+ );
56
+ assert.equal(bundled.roles, [{ name: "role1" }, { name: "role2" }]);
57
+ const entry = await query(Entry.insertOne({}));
58
+ const language = await query(Language.insertOne({ entry: entry.id }));
59
+ const version1 = await query(
60
+ Version.insertOne({
61
+ language: language.id
62
+ })
63
+ );
64
+ const version2 = await query(
65
+ Version.insertOne({
66
+ language: language.id
67
+ })
68
+ );
69
+ const languages = Language.where(Language.entry.is(Entry.id)).select({
70
+ ...Language,
71
+ versions: Version.where(Version.language.is(Language.id))
72
+ });
73
+ const page = await query(Entry.select({ ...Entry, languages }).first());
74
+ assert.equal(page, {
75
+ ...entry,
76
+ languages: [{ ...language, versions: [version1, version2] }]
77
+ });
78
+ });
79
+ test.run();
@@ -0,0 +1,54 @@
1
+ // test/TestTransaction.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, table } from "../src/index.js";
5
+ import { connect } from "./DbSuite.js";
6
+ var User = table({
7
+ name: "User",
8
+ columns: {
9
+ id: column.integer().primaryKey(),
10
+ name: column.string()
11
+ }
12
+ });
13
+ test("Transaction", async () => {
14
+ const query = await connect();
15
+ const [_, bob] = await Promise.all([
16
+ query.transaction(async function(query2) {
17
+ await query2(User.createTable());
18
+ await query2(User.insertOne({ name: "Alice" }));
19
+ await query2(User.insertOne({ name: "Bob" }));
20
+ }),
21
+ query(User.first().where(User.name.is("Bob")))
22
+ ]);
23
+ assert.equal(bob?.name, "Bob");
24
+ });
25
+ test("Rollback", async () => {
26
+ const query = await connect();
27
+ await query(User.createTable());
28
+ await query.transaction(async function(query2) {
29
+ await query2(User.insertOne({ name: "Bob" }));
30
+ throw new Error("Rollback");
31
+ }).catch(() => {
32
+ });
33
+ const bob = await query(User.first().where(User.name.is("Bob")));
34
+ assert.is(bob, void 0);
35
+ });
36
+ test("Savepoints", async () => {
37
+ const query = await connect();
38
+ await query(User.createTable());
39
+ await query.transaction(async function(query2) {
40
+ await query2(User.insertOne({ name: "Bob" }));
41
+ await query2.transaction(async function(query3) {
42
+ await query3(User.insertOne({ name: "Ted" }));
43
+ throw new Error("Rollback");
44
+ }).catch(() => {
45
+ });
46
+ await query2(User.insertOne({ name: "Alice" }));
47
+ });
48
+ const users = await query(User);
49
+ assert.equal(users, [
50
+ { id: 1, name: "Bob" },
51
+ { id: 2, name: "Alice" }
52
+ ]);
53
+ });
54
+ test.run();
@@ -0,0 +1,95 @@
1
+ // test/TestUpdate.ts
2
+ import { test } from "uvu";
3
+ import * as assert from "uvu/assert";
4
+ import { column, table } from "../src/index.js";
5
+ import { connect } from "./DbSuite.js";
6
+ var User = table({
7
+ name: "user",
8
+ columns: {
9
+ id: column.integer().primaryKey(),
10
+ name: column.object(),
11
+ email: column.string().nullable(),
12
+ roles: column.array().nullable()
13
+ }
14
+ });
15
+ test("Update", async () => {
16
+ const query = await connect();
17
+ await query(User.createTable());
18
+ const user = await query(
19
+ User.insertOne({
20
+ name: {
21
+ given: "abc",
22
+ last: "test"
23
+ }
24
+ })
25
+ );
26
+ const res = await query(
27
+ User.set({
28
+ email: "test"
29
+ }).where(User.id.is(user.id))
30
+ );
31
+ assert.is(res.rowsAffected, 1);
32
+ assert.is((await query(User.first())).email, "test");
33
+ const res2 = await query(
34
+ User.set({
35
+ email: User.email.concat("@example.com")
36
+ }).where(User.id.is(user.id))
37
+ );
38
+ assert.is(res2.rowsAffected, 1);
39
+ assert.is((await query(User.first())).email, "test@example.com");
40
+ const res3 = await query(
41
+ User.set({
42
+ name: {
43
+ given: "def",
44
+ last: "okay"
45
+ }
46
+ }).where(User.id.is(user.id))
47
+ );
48
+ assert.is(res3.rowsAffected, 1);
49
+ assert.is((await query(User.first())).name.given, "def");
50
+ });
51
+ test("Update object", async () => {
52
+ const query = await connect();
53
+ await query(User.createTable());
54
+ const user = await query(
55
+ User.insertOne({
56
+ name: {
57
+ given: "abc",
58
+ last: "test"
59
+ }
60
+ })
61
+ );
62
+ const res = await query(
63
+ User.set({
64
+ name: {
65
+ given: "123",
66
+ last: "456"
67
+ }
68
+ }).where(User.id.is(user.id))
69
+ );
70
+ assert.is(res.rowsAffected, 1);
71
+ const user2 = await query(User.where(User.id.is(user.id)).first());
72
+ assert.is(user2.name.given, "123");
73
+ assert.is(user2.name.last, "456");
74
+ });
75
+ test("Update array", async () => {
76
+ const query = await connect();
77
+ await query(User.createTable());
78
+ const user = await query(
79
+ User.insertOne({
80
+ name: {
81
+ given: "abc",
82
+ last: "test"
83
+ }
84
+ })
85
+ );
86
+ const res = await query(
87
+ User.set({
88
+ roles: ["a", "b"]
89
+ }).where(User.id.is(user.id))
90
+ );
91
+ assert.is(res.rowsAffected, 1);
92
+ const user2 = await query(User.first().where(User.id.is(user.id)));
93
+ assert.equal(user2.roles, ["a", "b"]);
94
+ });
95
+ test.run();
@@ -0,0 +1,14 @@
1
+ // test/index.ts
2
+ import sade from "sade";
3
+ import { parse } from "uvu/parse";
4
+ import { run } from "uvu/run";
5
+ sade("test [pattern]", true).option("--driver", "Pick driver").action((pattern, opts) => {
6
+ process.env.TEST_DRIVER = opts.driver || "better-sqlite3";
7
+ parse("test", "Test*").then(
8
+ ({ suites }) => run(
9
+ suites.filter(
10
+ ({ name }) => pattern ? name.toLowerCase().includes(pattern) : name.startsWith("Test")
11
+ )
12
+ )
13
+ );
14
+ }).parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rado",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,57 +0,0 @@
1
- import { EV, Expr, ExprData } from './Expr';
2
- export declare enum ColumnType {
3
- String = "String",
4
- Integer = "Integer",
5
- Number = "Number",
6
- Boolean = "Boolean",
7
- Json = "Json"
8
- }
9
- interface PartialColumnData {
10
- type: ColumnType;
11
- name?: string;
12
- nullable?: boolean;
13
- defaultValue?: ExprData;
14
- autoIncrement?: boolean;
15
- primaryKey?: boolean;
16
- unique?: boolean;
17
- references?: ExprData;
18
- }
19
- export interface ColumnData extends PartialColumnData {
20
- type: ColumnType;
21
- name: string;
22
- }
23
- export declare class Column<T> {
24
- data: PartialColumnData;
25
- constructor(data: PartialColumnData);
26
- name(name: string): Column<T>;
27
- nullable(): Column<T | null>;
28
- autoIncrement(): Column<Column.IsOptional<T>>;
29
- primaryKey<K extends string>(): Column<Column.IsPrimary<T, K>>;
30
- references<X extends T>(column: Expr<X> | (() => Expr<X>)): Column<X>;
31
- unique(): Column<T>;
32
- defaultValue(value: EV<T>): Column<Column.IsOptional<T>>;
33
- }
34
- export type PrimaryKey<T, K> = string extends K ? T : T & {
35
- [Column.isPrimary]: K;
36
- };
37
- export declare namespace Column {
38
- const isOptional: unique symbol;
39
- type IsOptional<T> = {
40
- [isOptional]: true;
41
- __t: T;
42
- };
43
- const isPrimary: unique symbol;
44
- type IsPrimary<T, K> = {
45
- [isPrimary]: K;
46
- __t: T;
47
- };
48
- }
49
- export declare const column: {
50
- string<T extends string = string>(): Column<T>;
51
- integer<T_1 extends number = number>(): Column<T_1>;
52
- number<T_2 extends number = number>(): Column<T_2>;
53
- boolean<T_3 extends boolean = boolean>(): Column<T_3>;
54
- object<T_4 extends object = object>(): Column<T_4>;
55
- array<T_5 = any>(): Column<T_5[]>;
56
- };
57
- export {};
@@ -1,85 +0,0 @@
1
- import { Driver } from './Driver';
2
- import { EV, Expr } from './Expr';
3
- import { OrderBy } from './OrderBy';
4
- import { Query } from './Query';
5
- import { Schema } from './Schema';
6
- import { Selection } from './Selection';
7
- import { Table } from './Table';
8
- import { Update as UpdateSet } from './Update';
9
- export declare class Cursor<T> {
10
- [Selection.__cursorType](): T;
11
- constructor(query: Query<T>);
12
- static all(strings: TemplateStringsArray, ...params: Array<any>): Cursor<any>;
13
- query(): Query<T>;
14
- on(driver: Driver.Sync): T;
15
- on(driver: Driver.Async): Promise<T>;
16
- toJSON(): Query<T>;
17
- }
18
- export declare namespace Cursor {
19
- class Delete extends Cursor<{
20
- rowsAffected: number;
21
- }> {
22
- query(): Query.Delete;
23
- where(...where: Array<EV<boolean>>): Delete;
24
- take(limit: number | undefined): Delete;
25
- skip(offset: number | undefined): Delete;
26
- }
27
- class Update<T> extends Cursor<{
28
- rowsAffected: number;
29
- }> {
30
- query(): Query.Update;
31
- set(set: UpdateSet<T>): Update<T>;
32
- where(...where: Array<EV<boolean>>): Update<T>;
33
- take(limit: number | undefined): Update<T>;
34
- skip(offset: number | undefined): Update<T>;
35
- }
36
- class InsertValuesReturning<T> extends Cursor<T> {
37
- }
38
- class InsertValues extends Cursor<{
39
- rowsAffected: number;
40
- }> {
41
- query(): Query.Insert;
42
- returning<X extends Selection>(selection: X): InsertValuesReturning<Selection.Infer<X>>;
43
- }
44
- class Insert<T> {
45
- protected into: Schema;
46
- constructor(into: Schema);
47
- values(...data: Array<Table.Insert<T>>): InsertValues;
48
- }
49
- class CreateTable extends Cursor<void> {
50
- protected table: Schema;
51
- constructor(table: Schema);
52
- }
53
- class Batch<T = void> extends Cursor<T> {
54
- protected queries: Array<Query>;
55
- constructor(queries: Array<Query>);
56
- }
57
- class SelectMultiple<T> extends Cursor<Array<T>> {
58
- query(): Query.Select;
59
- leftJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectMultiple<T>;
60
- innerJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectMultiple<T>;
61
- select<X extends Selection>(selection: X): SelectMultiple<Selection.Infer<X>>;
62
- count(): SelectSingle<number>;
63
- orderBy(...orderBy: Array<Expr<any> | OrderBy>): SelectMultiple<T>;
64
- groupBy(...groupBy: Array<Expr<any>>): SelectMultiple<T>;
65
- first(): SelectSingle<T | undefined>;
66
- sure(): SelectSingle<T>;
67
- where(...where: Array<EV<boolean>>): SelectMultiple<T>;
68
- take(limit: number | undefined): SelectMultiple<T>;
69
- skip(offset: number | undefined): SelectMultiple<T>;
70
- toExpr(): Expr<T>;
71
- }
72
- class SelectSingle<T> extends Cursor<T> {
73
- query(): Query.Select;
74
- leftJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectSingle<T>;
75
- innerJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectSingle<T>;
76
- select<X extends Selection>(selection: X): SelectSingle<Selection.Infer<X>>;
77
- orderBy(...orderBy: Array<OrderBy>): SelectSingle<T>;
78
- groupBy(...groupBy: Array<Expr<any>>): SelectSingle<T>;
79
- where(...where: Array<EV<boolean>>): SelectSingle<T>;
80
- take(limit: number | undefined): SelectSingle<T>;
81
- skip(offset: number | undefined): SelectSingle<T>;
82
- all(): SelectMultiple<T>;
83
- toExpr(): Expr<T>;
84
- }
85
- }