drizzle-orm 0.9.1 → 0.9.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 (133) hide show
  1. package/builders/aggregators/abstractAggregator.d.ts +3 -4
  2. package/builders/aggregators/abstractAggregator.js +5 -8
  3. package/builders/aggregators/deleteAggregator.d.ts +2 -1
  4. package/builders/aggregators/deleteAggregator.js +10 -4
  5. package/builders/aggregators/insertAggregator.d.ts +4 -6
  6. package/builders/aggregators/insertAggregator.js +37 -44
  7. package/builders/aggregators/selectAggregator.d.ts +8 -5
  8. package/builders/aggregators/selectAggregator.js +50 -31
  9. package/builders/aggregators/updateAggregator.d.ts +2 -1
  10. package/builders/aggregators/updateAggregator.js +6 -4
  11. package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +4 -3
  12. package/builders/highLvlBuilders/abstractRequestBuilder.js +2 -2
  13. package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +5 -4
  14. package/builders/highLvlBuilders/deleteRequestBuilder.js +8 -9
  15. package/builders/highLvlBuilders/insertRequestBuilder.d.ts +2 -4
  16. package/builders/highLvlBuilders/insertRequestBuilder.js +17 -24
  17. package/builders/highLvlBuilders/selectRequestBuilder.d.ts +5 -4
  18. package/builders/highLvlBuilders/selectRequestBuilder.js +29 -32
  19. package/builders/highLvlBuilders/updateRequestBuilder.d.ts +5 -4
  20. package/builders/highLvlBuilders/updateRequestBuilder.js +9 -9
  21. package/builders/index.d.ts +1 -1
  22. package/builders/index.js +2 -1
  23. package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +18 -9
  24. package/builders/joinBuilders/builders/abstractJoinBuilder.js +34 -4
  25. package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +23 -0
  26. package/builders/joinBuilders/builders/selectWithFiveJoins.js +33 -0
  27. package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +23 -6
  28. package/builders/joinBuilders/builders/selectWithFourJoins.js +52 -36
  29. package/builders/joinBuilders/builders/selectWithJoin.d.ts +9 -6
  30. package/builders/joinBuilders/builders/selectWithJoin.js +15 -35
  31. package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +9 -6
  32. package/builders/joinBuilders/builders/selectWithThreeJoins.js +19 -39
  33. package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +9 -6
  34. package/builders/joinBuilders/builders/selectWithTwoJoins.js +17 -38
  35. package/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +19 -0
  36. package/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
  37. package/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +8 -0
  38. package/builders/joinBuilders/responses/selectResponseFourJoins.js +15 -4
  39. package/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +8 -0
  40. package/builders/joinBuilders/responses/selectResponseThreeJoins.js +15 -0
  41. package/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +8 -0
  42. package/builders/joinBuilders/responses/selectResponseTwoJoins.js +15 -0
  43. package/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +8 -0
  44. package/builders/joinBuilders/responses/selectResponseWithJoin.js +15 -0
  45. package/builders/lowLvlBuilders/create.js +1 -1
  46. package/builders/lowLvlBuilders/delets/delete.d.ts +2 -1
  47. package/builders/lowLvlBuilders/delets/delete.js +3 -3
  48. package/builders/lowLvlBuilders/inserts/insert.d.ts +2 -3
  49. package/builders/lowLvlBuilders/inserts/insert.js +3 -3
  50. package/builders/lowLvlBuilders/inserts/insertInto.d.ts +2 -4
  51. package/builders/lowLvlBuilders/inserts/insertInto.js +2 -1
  52. package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +3 -5
  53. package/builders/lowLvlBuilders/inserts/valuesInsert.js +3 -3
  54. package/builders/lowLvlBuilders/selects/select.d.ts +2 -3
  55. package/builders/lowLvlBuilders/selects/select.js +3 -3
  56. package/builders/lowLvlBuilders/selects/selectFrom.d.ts +5 -4
  57. package/builders/lowLvlBuilders/selects/selectFrom.js +6 -0
  58. package/builders/lowLvlBuilders/selects/selectJoined.d.ts +5 -5
  59. package/builders/lowLvlBuilders/selects/whereSelect.d.ts +4 -4
  60. package/builders/lowLvlBuilders/updates/update.d.ts +2 -1
  61. package/builders/lowLvlBuilders/updates/update.js +3 -3
  62. package/builders/lowLvlBuilders/updates/updateIn.d.ts +1 -3
  63. package/builders/lowLvlBuilders/updates/updateIn.js +1 -4
  64. package/builders/requestBuilders/where/const.js +1 -1
  65. package/builders/requestBuilders/where/constArray.js +1 -1
  66. package/builders/requestBuilders/where/isNull.d.ts +6 -0
  67. package/builders/requestBuilders/where/isNull.js +11 -0
  68. package/builders/requestBuilders/where/notEqWhere.d.ts +7 -0
  69. package/builders/requestBuilders/where/notEqWhere.js +12 -0
  70. package/builders/requestBuilders/where/rawWhere.d.ts +6 -0
  71. package/builders/requestBuilders/where/rawWhere.js +11 -0
  72. package/builders/requestBuilders/where/static.d.ts +3 -0
  73. package/builders/requestBuilders/where/static.js +10 -1
  74. package/builders/requestBuilders/where/var.js +1 -1
  75. package/db/session.js +2 -2
  76. package/{manual.d.ts → docs/cases/simple_delete.d.ts} +0 -0
  77. package/docs/cases/simple_delete.js +30 -0
  78. package/{tests/cases/commentsTable.test.d.ts → docs/cases/simple_insert.d.ts} +0 -0
  79. package/docs/cases/simple_insert.js +51 -0
  80. package/docs/cases/simple_join.d.ts +1 -0
  81. package/docs/cases/simple_join.js +95 -0
  82. package/docs/cases/simple_select.d.ts +1 -0
  83. package/docs/cases/simple_select.js +39 -0
  84. package/docs/cases/simple_update.d.ts +1 -0
  85. package/docs/cases/simple_update.js +33 -0
  86. package/docs/tables/citiesTable.d.ts +14 -0
  87. package/{examples/tables/authOtpTable.js → docs/tables/citiesTable.js} +6 -9
  88. package/docs/tables/citiesToUsers.d.ts +7 -0
  89. package/docs/tables/citiesToUsers.js +18 -0
  90. package/docs/tables/userGroupsTable.d.ts +7 -0
  91. package/docs/tables/userGroupsTable.js +15 -0
  92. package/{examples → docs}/tables/usersTable.d.ts +7 -4
  93. package/{examples → docs}/tables/usersTable.js +11 -6
  94. package/docs/tables/usersToUserGroups.d.ts +7 -0
  95. package/docs/tables/usersToUserGroups.js +18 -0
  96. package/{examples → docs}/types/rolesType.d.ts +0 -0
  97. package/{examples → docs}/types/rolesType.js +1 -1
  98. package/indexes/tableIndex.d.ts +3 -1
  99. package/indexes/tableIndex.js +3 -1
  100. package/package.json +1 -1
  101. package/serializer/serializer.d.ts +39 -0
  102. package/serializer/serializer.js +73 -0
  103. package/tables/abstractTable.d.ts +4 -2
  104. package/tables/abstractTable.js +10 -10
  105. package/test.d.ts +1 -0
  106. package/test.js +38 -25
  107. package/examples/tables/authOtpTable.d.ts +0 -12
  108. package/examples/tables/cityTable.d.ts +0 -8
  109. package/examples/tables/cityTable.js +0 -17
  110. package/examples/testEnum.d.ts +0 -6
  111. package/examples/testEnum.js +0 -10
  112. package/manual.js +0 -27
  113. package/tests/cases/commentsTable.test.js +0 -66
  114. package/tests/cases/messagesTable.test1.d.ts +0 -0
  115. package/tests/cases/messagesTable.test1.js +0 -1
  116. package/tests/cases/postsTable.test1.d.ts +0 -0
  117. package/tests/cases/postsTable.test1.js +0 -1
  118. package/tests/cases/usersTable.test1.d.ts +0 -0
  119. package/tests/cases/usersTable.test1.js +0 -1
  120. package/tests/tables/citiesTable.d.ts +0 -6
  121. package/tests/tables/citiesTable.js +0 -14
  122. package/tests/tables/commentsTable.d.ts +0 -0
  123. package/tests/tables/commentsTable.js +0 -1
  124. package/tests/tables/likesTable.d.ts +0 -0
  125. package/tests/tables/likesTable.js +0 -1
  126. package/tests/tables/messagesTable.d.ts +0 -0
  127. package/tests/tables/messagesTable.js +0 -1
  128. package/tests/tables/postsTable.d.ts +0 -0
  129. package/tests/tables/postsTable.js +0 -1
  130. package/tests/tables/userFollowers.d.ts +0 -0
  131. package/tests/tables/userFollowers.js +0 -1
  132. package/tests/tables/usersTable.d.ts +0 -8
  133. package/tests/tables/usersTable.js +0 -20
@@ -0,0 +1,14 @@
1
+ import AbstractTable from '../../tables/abstractTable';
2
+ interface CityMeta {
3
+ population: number;
4
+ connection: string;
5
+ }
6
+ export default class CitiesTable extends AbstractTable<CitiesTable> {
7
+ id: import("../../columns/column").IndexedColumn<import("../..").PgInteger, true, true>;
8
+ foundationDate: import("../../columns/column").Column<import("../..").PgTimestamp, false, false>;
9
+ location: import("../../columns/column").Column<import("../..").PgVarChar, true, false>;
10
+ userId: import("../../columns/column").Column<import("../..").PgInteger, true, false>;
11
+ metadata: import("../../columns/column").Column<import("../..").PgJsonb<CityMeta>, true, false>;
12
+ tableName(): string;
13
+ }
14
+ export {};
@@ -3,20 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const column_1 = require("../../columns/column");
4
4
  const abstractTable_1 = require("../../tables/abstractTable");
5
5
  const usersTable_1 = require("./usersTable");
6
- class AuthOtpTable extends abstractTable_1.default {
6
+ class CitiesTable extends abstractTable_1.default {
7
7
  constructor() {
8
8
  super(...arguments);
9
9
  this.id = this.int('id').autoIncrement().primaryKey();
10
- this.phone = this.varchar('phone', { size: 256 });
11
- this.otp = this.varchar('otp', { size: 256 });
12
- this.issuedAt = this.timestamp('issued_at', { notNull: true });
13
- this.createdAt = this.timestamp('created_at', { notNull: true });
14
- this.updatedAt = this.timestamp('updated_at', { notNull: true });
10
+ this.foundationDate = this.timestamp('name', { notNull: true });
11
+ this.location = this.varchar('page', { size: 256 });
15
12
  this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id, column_1.OnDelete.CASCADE);
16
- this.test = this.jsonb('test');
13
+ this.metadata = this.jsonb('metadata');
17
14
  }
18
15
  tableName() {
19
- return 'auth_otp';
16
+ return 'cities';
20
17
  }
21
18
  }
22
- exports.default = AuthOtpTable;
19
+ exports.default = CitiesTable;
@@ -0,0 +1,7 @@
1
+ import AbstractTable from '../../tables/abstractTable';
2
+ export default class UsersToUserGroupsTable extends AbstractTable<UsersToUserGroupsTable> {
3
+ groupId: import("../../columns/column").Column<import("../..").PgInteger, true, false>;
4
+ userId: import("../../columns/column").Column<import("../..").PgInteger, true, false>;
5
+ manyToManyIndex: import("../../indexes/tableIndex").default;
6
+ tableName(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const column_1 = require("../../columns/column");
4
+ const abstractTable_1 = require("../../tables/abstractTable");
5
+ const userGroupsTable_1 = require("./userGroupsTable");
6
+ const usersTable_1 = require("./usersTable");
7
+ class UsersToUserGroupsTable extends abstractTable_1.default {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.groupId = this.int('city_id').foreignKey(userGroupsTable_1.default, (table) => table.id, column_1.OnDelete.CASCADE);
11
+ this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id, column_1.OnDelete.CASCADE);
12
+ this.manyToManyIndex = this.index([this.groupId, this.userId]);
13
+ }
14
+ tableName() {
15
+ return 'users_to_user_groups';
16
+ }
17
+ }
18
+ exports.default = UsersToUserGroupsTable;
@@ -0,0 +1,7 @@
1
+ import AbstractTable from '../../tables/abstractTable';
2
+ export default class UserGroupsTable extends AbstractTable<UserGroupsTable> {
3
+ id: import("../../columns/column").IndexedColumn<import("../..").PgInteger, true, true>;
4
+ name: import("../..").Column<import("../..").PgVarChar, true, false>;
5
+ description: import("../..").Column<import("../..").PgVarChar, true, false>;
6
+ tableName(): string;
7
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const abstractTable_1 = require("../../tables/abstractTable");
4
+ class UserGroupsTable extends abstractTable_1.default {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.id = this.int('id').autoIncrement().primaryKey();
8
+ this.name = this.varchar('name');
9
+ this.description = this.varchar('description');
10
+ }
11
+ tableName() {
12
+ return 'user_groups';
13
+ }
14
+ }
15
+ exports.default = UserGroupsTable;
@@ -1,13 +1,16 @@
1
1
  import AbstractTable from '../../tables/abstractTable';
2
+ export declare const rolesEnum: import("../../types/type").default<"user" | "guest" | "admin">;
2
3
  export default class UsersTable extends AbstractTable<UsersTable> {
3
4
  id: import("../../columns/column").IndexedColumn<import("../..").PgInteger, true, true>;
5
+ fullName: import("../..").Column<import("../..").PgText, true, false>;
4
6
  phone: import("../..").Column<import("../..").PgVarChar, true, false>;
5
- fullName: import("../..").Column<import("../..").PgVarChar, true, false>;
6
- test: import("../..").Column<import("../..").PgBigDecimal, false, false>;
7
- test1: import("../..").Column<import("../..").PgBigInt, true, false>;
7
+ media: import("../..").Column<import("../..").PgJsonb<string[]>, true, false>;
8
+ decimalField: import("../..").Column<import("../..").PgBigDecimal, false, false>;
9
+ bigIntField: import("../..").Column<import("../..").PgBigInt, true, false>;
10
+ role: import("../..").Column<import("../../columns/types/pgEnum").default<"user" | "guest" | "admin">, false, false>;
8
11
  createdAt: import("../..").Column<import("../..").PgTimestamp, false, false>;
9
12
  updatedAt: import("../..").Column<import("../..").PgTimestamp, true, false>;
10
- role: import("../..").Column<import("../../columns/types/pgEnum").default<"foo" | "bar" | "baz">, false, false>;
13
+ isArchived: import("../..").Column<import("../..").PgBoolean, true, false>;
11
14
  phoneFullNameIndex: import("../../indexes/tableIndex").default;
12
15
  phoneIndex: import("../../indexes/tableIndex").default;
13
16
  tableName(): string;
@@ -1,21 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rolesEnum = void 0;
3
4
  /* eslint-disable max-classes-per-file */
4
5
  const abstractTable_1 = require("../../tables/abstractTable");
5
- const rolesType_1 = require("../types/rolesType");
6
+ const type_1 = require("../../types/type");
7
+ // import { rolesEnum } from '../types/rolesType';
8
+ exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['user', 'guest', 'admin'] });
6
9
  class UsersTable extends abstractTable_1.default {
7
10
  constructor() {
8
11
  super(...arguments);
9
12
  this.id = this.int('id').autoIncrement().primaryKey();
13
+ this.fullName = this.text('full_name');
10
14
  this.phone = this.varchar('phone', { size: 256 });
11
- this.fullName = this.varchar('full_name', { size: 512 });
12
- this.test = this.decimal('test', { notNull: true, precision: 100, scale: 2 });
13
- this.test1 = this.bigint('test1');
15
+ this.media = this.jsonb('media');
16
+ this.decimalField = this.decimal('test', { notNull: true, precision: 100, scale: 2 });
17
+ this.bigIntField = this.bigint('test1');
18
+ this.role = this.type(exports.rolesEnum, 'name_in_table', { notNull: true });
14
19
  this.createdAt = this.timestamp('created_at', { notNull: true });
15
20
  this.updatedAt = this.timestamp('updated_at');
16
- this.role = this.type(rolesType_1.rolesEnum, 'name_in_table', { notNull: true });
21
+ this.isArchived = this.bool('is_archived').defaultValue(false);
17
22
  this.phoneFullNameIndex = this.index([this.phone, this.fullName]);
18
- this.phoneIndex = this.index(this.phone);
23
+ this.phoneIndex = this.uniqueIndex(this.phone);
19
24
  }
20
25
  tableName() {
21
26
  return 'users';
@@ -0,0 +1,7 @@
1
+ import AbstractTable from '../../tables/abstractTable';
2
+ export default class UsersToUserGroupsTable extends AbstractTable<UsersToUserGroupsTable> {
3
+ groupId: import("../../columns/column").Column<import("../..").PgInteger, true, false>;
4
+ userId: import("../../columns/column").Column<import("../..").PgInteger, true, false>;
5
+ manyToManyIndex: import("../../indexes/tableIndex").default;
6
+ tableName(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const column_1 = require("../../columns/column");
4
+ const abstractTable_1 = require("../../tables/abstractTable");
5
+ const userGroupsTable_1 = require("./userGroupsTable");
6
+ const usersTable_1 = require("./usersTable");
7
+ class UsersToUserGroupsTable extends abstractTable_1.default {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.groupId = this.int('city_id').foreignKey(userGroupsTable_1.default, (table) => table.id, column_1.OnDelete.CASCADE);
11
+ this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id, column_1.OnDelete.CASCADE);
12
+ this.manyToManyIndex = this.index([this.groupId, this.userId]);
13
+ }
14
+ tableName() {
15
+ return 'users_to_user_groups';
16
+ }
17
+ }
18
+ exports.default = UsersToUserGroupsTable;
File without changes
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rolesEnum = void 0;
4
4
  const type_1 = require("../../types/type");
5
5
  // eslint-disable-next-line import/prefer-default-export
6
- exports.rolesEnum = (0, type_1.createEnum)({ alias: 'test-enum', values: ['foo', 'bar', 'baz'] });
6
+ exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['foo', 'bar', 'baz'] });
@@ -3,7 +3,9 @@ import ColumnType from '../columns/types/columnType';
3
3
  export default class TableIndex {
4
4
  private _columns;
5
5
  private _tableName;
6
- constructor(tableName: string, columns: Column<ColumnType<any>, boolean, boolean>[]);
6
+ private _isUnique;
7
+ constructor(tableName: string, columns: Column<ColumnType<any>, boolean, boolean>[], isUnique?: boolean);
7
8
  getColumns: () => Column<ColumnType<any>, boolean, boolean>[];
8
9
  indexName: () => string;
10
+ isUnique: () => boolean;
9
11
  }
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class TableIndex {
4
- constructor(tableName, columns) {
4
+ constructor(tableName, columns, isUnique = false) {
5
5
  this._columns = [];
6
6
  this.getColumns = () => this._columns;
7
7
  this.indexName = () => {
8
8
  const columnNames = this._columns.map((column) => column.getColumnName());
9
9
  return `${this._tableName}_${columnNames.join('_')}_index`;
10
10
  };
11
+ this.isUnique = () => this._isUnique;
11
12
  this._columns = columns;
12
13
  this._tableName = tableName;
14
+ this._isUnique = isUnique;
13
15
  }
14
16
  }
15
17
  exports.default = TableIndex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,39 @@
1
+ import { AbstractTable } from '../tables';
2
+ import Enum from '../types/type';
3
+ interface ColumnAsObject {
4
+ [name: string]: {
5
+ name?: string;
6
+ type?: string;
7
+ primaryKey?: boolean;
8
+ autoincrement?: boolean;
9
+ unique?: boolean;
10
+ default?: any;
11
+ notNull?: boolean;
12
+ references?: {
13
+ table: string;
14
+ column: string;
15
+ };
16
+ };
17
+ }
18
+ interface TableAsObject {
19
+ [name: string]: {
20
+ name: string;
21
+ columns: ColumnAsObject;
22
+ indexes: {
23
+ [name: string]: {
24
+ name?: string;
25
+ type?: string;
26
+ };
27
+ };
28
+ };
29
+ }
30
+ export default class MigrationSerializer {
31
+ generate: (tables: AbstractTable<any>[], enums: Enum<any>[]) => {
32
+ version: string;
33
+ tables: TableAsObject;
34
+ enums: {
35
+ [key: string]: Enum<any>;
36
+ };
37
+ };
38
+ }
39
+ export {};
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /* eslint-disable import/no-named-as-default-member */
3
+ /* eslint-disable import/no-named-as-default */
4
+ /* eslint-disable no-param-reassign */
5
+ /* eslint-disable no-restricted-syntax */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const columns_1 = require("../columns");
8
+ const tableIndex_1 = require("../indexes/tableIndex");
9
+ class MigrationSerializer {
10
+ constructor() {
11
+ this.generate = (tables, enums) => {
12
+ const result = {};
13
+ for (const table of tables) {
14
+ const tableEntries = Object.entries(table);
15
+ const columnToReturn = {};
16
+ const indexToReturn = {};
17
+ for (const properties of tableEntries) {
18
+ const key = properties[0];
19
+ const value = properties[1];
20
+ if (value instanceof tableIndex_1.default) {
21
+ const columns = value.getColumns();
22
+ const name = value.indexName();
23
+ const indexColumnToReturn = {};
24
+ for (const column of columns) {
25
+ const columnName = column.getColumnName();
26
+ indexColumnToReturn[columnName] = {
27
+ name: columnName,
28
+ };
29
+ }
30
+ indexToReturn[name] = {
31
+ name,
32
+ columns: indexColumnToReturn,
33
+ };
34
+ }
35
+ if (value instanceof columns_1.Column) {
36
+ columnToReturn[key] = {
37
+ name: value.getColumnName(),
38
+ type: value.getColumnType().getDbName(),
39
+ primaryKey: !!value.primaryKeyName,
40
+ autoincrement: value.isAutoIncrement(),
41
+ unique: !!value.uniqueKeyName,
42
+ default: value.getDefaultValue() === null ? undefined : value.getDefaultValue(),
43
+ notNull: !value.isNullableFlag,
44
+ };
45
+ const referenced = value.getReferenced();
46
+ if (referenced) {
47
+ columnToReturn[key].references = {
48
+ table: referenced.getParentName(),
49
+ column: referenced.getColumnName(),
50
+ };
51
+ }
52
+ }
53
+ }
54
+ result[table.tableName()] = {
55
+ name: table.tableName(),
56
+ columns: columnToReturn,
57
+ indexes: indexToReturn,
58
+ };
59
+ }
60
+ const enumsToReturn = enums.reduce((map, obj) => {
61
+ const key = obj.name;
62
+ const newValues = obj.values.reduce((mapped, value) => {
63
+ mapped[value] = value;
64
+ return mapped;
65
+ }, {});
66
+ map[key] = { name: obj.name, values: newValues };
67
+ return map;
68
+ }, {});
69
+ return { version: '1', tables: result, enums: enumsToReturn };
70
+ };
71
+ }
72
+ }
73
+ exports.default = MigrationSerializer;
@@ -15,7 +15,7 @@ import PgBigInt from '../columns/types/pgBigInt';
15
15
  import BaseLogger from '../logger/abstractLogger';
16
16
  import PgEnum from '../columns/types/pgEnum';
17
17
  import DB from '../db/db';
18
- import { Column } from '../columns/column';
18
+ import { AbstractColumn, Column } from '../columns/column';
19
19
  import TableIndex from '../indexes/tableIndex';
20
20
  import { ExtractModel } from './inferTypes';
21
21
  import Enum, { ExtractEnumValues } from '../types/type';
@@ -35,10 +35,12 @@ export default abstract class AbstractTable<TTable extends AbstractTable<TTable>
35
35
  insertMany: (values: ExtractModel<TTable>[]) => InsertTRB<TTable>;
36
36
  delete: () => DeleteTRB<TTable>;
37
37
  mapServiceToDb(): {
38
- [name in keyof ExtractModel<TTable>]: Column<ColumnType>;
38
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
39
39
  };
40
40
  protected index(columns: Array<Column<ColumnType, boolean, boolean>>): TableIndex;
41
41
  protected index(columns: Column<ColumnType, boolean, boolean>): TableIndex;
42
+ protected uniqueIndex(columns: Array<Column<ColumnType, boolean, boolean>>): TableIndex;
43
+ protected uniqueIndex(columns: Column<ColumnType, boolean, boolean>): TableIndex;
42
44
  protected varchar(name: string, params?: {
43
45
  size?: number;
44
46
  notNull: false;
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable import/no-cycle */
4
- /* eslint-disable max-classes-per-file */
5
3
  const pgVarChar_1 = require("../columns/types/pgVarChar");
6
4
  const pgTimestamp_1 = require("../columns/types/pgTimestamp");
7
5
  const pgInteger_1 = require("../columns/types/pgInteger");
@@ -18,7 +16,6 @@ const pgBigInt_1 = require("../columns/types/pgBigInt");
18
16
  const pgEnum_1 = require("../columns/types/pgEnum");
19
17
  const column_1 = require("../columns/column");
20
18
  const tableIndex_1 = require("../indexes/tableIndex");
21
- // eslint-disable-next-line max-len
22
19
  class AbstractTable {
23
20
  constructor(db) {
24
21
  this.withLogger = (logger) => {
@@ -28,25 +25,25 @@ class AbstractTable {
28
25
  if (!this._session) {
29
26
  throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
30
27
  }
31
- return new updateRequestBuilder_1.default(this.tableName(), this._session, this.mapServiceToDb(), this._logger);
28
+ return new updateRequestBuilder_1.default(this, this._session, this.mapServiceToDb(), this._logger);
32
29
  };
33
30
  this.insert = (value) => {
34
31
  if (!this._session) {
35
32
  throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
36
33
  }
37
- return new insertRequestBuilder_1.default([value], this.tableName(), this._session, this.mapServiceToDb(), this, this._logger);
34
+ return new insertRequestBuilder_1.default([value], this._session, this.mapServiceToDb(), this, this._logger);
38
35
  };
39
36
  this.insertMany = (values) => {
40
37
  if (!this._session) {
41
38
  throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
42
39
  }
43
- return new insertRequestBuilder_1.default(values, this.tableName(), this._session, this.mapServiceToDb(), this, this._logger);
40
+ return new insertRequestBuilder_1.default(values, this._session, this.mapServiceToDb(), this, this._logger);
44
41
  };
45
42
  this.delete = () => {
46
43
  if (!this._session) {
47
44
  throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
48
45
  }
49
- return new deleteRequestBuilder_1.default(this.tableName(), this._session, this.mapServiceToDb(), this._logger);
46
+ return new deleteRequestBuilder_1.default(this, this._session, this.mapServiceToDb(), this._logger);
50
47
  };
51
48
  this._session = db.session();
52
49
  this._logger = db.logger();
@@ -56,13 +53,13 @@ class AbstractTable {
56
53
  if (!this._session) {
57
54
  throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
58
55
  }
59
- return new selectRequestBuilder_1.default(this.tableName(), this._session, this.mapServiceToDb(), { limit, offset }, this, this._logger);
56
+ return new selectRequestBuilder_1.default(this._session, this.mapServiceToDb(), { limit, offset }, this, this._logger);
60
57
  }
61
58
  mapServiceToDb() {
62
59
  return Object.getOwnPropertyNames(this)
63
60
  .reduce((res, fieldName) => {
64
61
  const field = this[fieldName];
65
- if (field instanceof column_1.Column) {
62
+ if (field instanceof column_1.AbstractColumn) {
66
63
  res[fieldName] = field;
67
64
  }
68
65
  return res;
@@ -71,6 +68,9 @@ class AbstractTable {
71
68
  index(columns) {
72
69
  return new tableIndex_1.default(this.tableName(), columns instanceof Array ? columns : [columns]);
73
70
  }
71
+ uniqueIndex(columns) {
72
+ return new tableIndex_1.default(this.tableName(), columns instanceof Array ? columns : [columns]);
73
+ }
74
74
  varchar(name, params = {}) {
75
75
  var _a;
76
76
  return new column_1.Column(this, name, new pgVarChar_1.default(params.size), (_a = !(params === null || params === void 0 ? void 0 : params.notNull)) !== null && _a !== void 0 ? _a : false);
@@ -89,7 +89,7 @@ class AbstractTable {
89
89
  }
90
90
  type(typeEnum, name, params = {}) {
91
91
  var _a;
92
- const pgEnum = new pgEnum_1.default(name);
92
+ const pgEnum = new pgEnum_1.default(typeEnum.name);
93
93
  return new column_1.Column(this, name, pgEnum, (_a = !(params === null || params === void 0 ? void 0 : params.notNull)) !== null && _a !== void 0 ? _a : false);
94
94
  }
95
95
  decimal(name, params = {}) {
package/test.d.ts CHANGED
@@ -0,0 +1 @@
1
+ export {};
package/test.js CHANGED
@@ -1,41 +1,40 @@
1
1
  "use strict";
2
- /* eslint-disable global-require */
3
- /* eslint-disable new-cap */
4
- /* eslint-disable import/no-dynamic-require */
5
- // import { DbConnector } from '.';
6
- // import UsersTable from './examples/tables/usersTable';
7
- // import { ERoles } from './examples/testEnum';
8
- // import { eq } from './builders';
9
- // import DbConnector from './db/dbConnector';
10
- // import UsersTable from './examples/tables/usersTable';
11
- // import { ERoles } from './examples/types/rolesType';
12
- // import * as fs from 'fs';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const _1 = require(".");
4
+ const usersTable_1 = require("./docs/tables/usersTable");
5
+ const serializer_1 = require("./serializer/serializer");
13
6
  // import { Pool } from 'pg';
14
7
  // import { DB } from '.';
15
8
  // import { DB, DbConnector } from '.';
16
9
  // import Enum from './types/type';
17
- // const fromTypeFile = (filepath: string): Array<Enum<any>> => {
18
- // // const db = new DB(new Pool());
19
- // const importedEnum = require(filepath);
20
- // const res: Array<Enum<any>> = [];
21
- // // eslint-disable-next-line no-restricted-syntax
22
- // for (const type of Object.keys(importedEnum)) {
23
- // res.push(importedEnum[type] as Enum<any>);
24
- // }
25
- // return res;
26
- // };
10
+ const fromTypeFile = (filepath) => {
11
+ // const db = new DB(new Pool());
12
+ const importedEnum = require(filepath);
13
+ const res = [];
14
+ // eslint-disable-next-line no-restricted-syntax
15
+ for (const type of Object.keys(importedEnum)) {
16
+ res.push(importedEnum[type]);
17
+ }
18
+ return res;
19
+ };
27
20
  (async () => {
28
21
  try {
29
- // const typesFileNames =
30
- // fs.readdirSync('/Users/andrewsherman/IdeaProjects/datalayer-orm/src/examples/types');
22
+ const db = await new _1.DbConnector()
23
+ .connectionString('postgresql://postgres@127.0.0.1/drizzle')
24
+ .connect();
25
+ const ser = new serializer_1.default();
26
+ const d = db.create(usersTable_1.default);
27
+ const f = ser.generate([d], []);
28
+ console.log(JSON.stringify(f, null, 2));
29
+ // const typesFileNames = fs.readdirSync('/Users/andrewsherman/IdeaProjects/datalayer-orm/src/examples/types');
31
30
  // typesFileNames.forEach((filename) => {
32
31
  // const types = fromTypeFile(`./examples/types/${filename.split('.')[0]}`);
33
32
  // const typeValues = types[0].values;
34
33
  // console.log(typeValues);
35
34
  // // console.log(Object.values(typeValues));
36
35
  // });
37
- // const usersTest = new UsersTest();
38
- // await usersTest.execute();
36
+ // // const usersTest = new UsersTest();
37
+ // // await usersTest.execute();
39
38
  // const db = await new DbConnector()
40
39
  // .connectionString('postgresql://postgres@127.0.0.1/drizzle')
41
40
  // .connect();
@@ -48,6 +47,20 @@
48
47
  // console.log(res.value);
49
48
  // }
50
49
  // const userTable = new UsersTable(db);
50
+ // const citiesTable = new CitiesTable(db);
51
+ // const uni = new UniJoin(userTable).innerJoin(
52
+ // UsersTable,
53
+ // (table) => table.id,
54
+ // (t) => t.id,
55
+ // );
56
+ // Inner.join1(
57
+ // { table: CitiesTable, column: ((table) => table.id), on: ((table) => table.userId1) },
58
+ // );
59
+ // const res = await userTable.select().leftJoin(
60
+ // UsersTable,
61
+ // (table) => table.id,
62
+ // (t) => t.id,
63
+ // ).execute();
51
64
  // const d = await userTable
52
65
  // .insert({ phone: 'phone1', createdAt: new Date(), role: 'foo' }).all();
53
66
  // const all = await userTable.select().all();
@@ -1,12 +0,0 @@
1
- import AbstractTable from '../../tables/abstractTable';
2
- export default class AuthOtpTable extends AbstractTable<AuthOtpTable> {
3
- id: import("../../columns/column").IndexedColumn<import("../..").PgInteger, true, true>;
4
- phone: import("../../columns/column").Column<import("../..").PgVarChar, true, false>;
5
- otp: import("../../columns/column").Column<import("../..").PgVarChar, true, false>;
6
- issuedAt: import("../../columns/column").Column<import("../..").PgTimestamp, false, false>;
7
- createdAt: import("../../columns/column").Column<import("../..").PgTimestamp, false, false>;
8
- updatedAt: import("../../columns/column").Column<import("../..").PgTimestamp, false, false>;
9
- userId: import("../../columns/column").Column<import("../..").PgInteger, true, false>;
10
- test: import("../../columns/column").Column<import("../..").PgJsonb<string[]>, true, false>;
11
- tableName(): string;
12
- }
@@ -1,8 +0,0 @@
1
- import AbstractTable from '../../tables/abstractTable';
2
- export default class CitiesTable extends AbstractTable<CitiesTable> {
3
- name: import("../..").Column<import("../..").PgTimestamp, false, false>;
4
- page: import("../..").Column<import("../..").PgVarChar, true, false>;
5
- userId1: import("../..").Column<import("../..").PgInteger, true, false>;
6
- data: import("../..").Column<import("../..").PgJsonb<string[]>, true, false>;
7
- tableName(): string;
8
- }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const abstractTable_1 = require("../../tables/abstractTable");
4
- const usersTable_1 = require("./usersTable");
5
- class CitiesTable extends abstractTable_1.default {
6
- constructor() {
7
- super(...arguments);
8
- this.name = this.timestamp('name', { notNull: true }).defaultValue(new Date());
9
- this.page = this.varchar('page', { size: 256 });
10
- this.userId1 = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id);
11
- this.data = this.jsonb('data');
12
- }
13
- tableName() {
14
- return 'citiess';
15
- }
16
- }
17
- exports.default = CitiesTable;
@@ -1,6 +0,0 @@
1
- export declare enum ERoles {
2
- ADMIN = "admin",
3
- USER = "user",
4
- GUEST = "guest"
5
- }
6
- export default ERoles;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ERoles = void 0;
4
- var ERoles;
5
- (function (ERoles) {
6
- ERoles["ADMIN"] = "admin";
7
- ERoles["USER"] = "user";
8
- ERoles["GUEST"] = "guest";
9
- })(ERoles = exports.ERoles || (exports.ERoles = {}));
10
- exports.default = ERoles;
package/manual.js DELETED
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const builders_1 = require("./builders");
4
- const dbConnector_1 = require("./db/dbConnector");
5
- const usersTable_1 = require("./examples/tables/usersTable");
6
- (async () => {
7
- try {
8
- // const usersTest = new UsersTest();
9
- // await usersTest.execute();
10
- const db = await new dbConnector_1.default()
11
- .connectionString('postgresql://postgres@127.0.0.1/drizzle')
12
- .connect();
13
- const res = await db.session().execute(builders_1.Create.table(db.create(usersTable_1.default)).build());
14
- if (res.isLeft()) {
15
- console.log(res.value.reason);
16
- }
17
- else {
18
- console.log(res.value);
19
- }
20
- const userTable = new usersTable_1.default(db);
21
- const users = await userTable.select().all();
22
- console.log(users);
23
- }
24
- catch (e) {
25
- console.log(e);
26
- }
27
- })();