@squiz/db-lib 1.2.11 → 1.2.13-alpha.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.
package/CHANGELOG.md CHANGED
@@ -3,174 +3,100 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [1.2.11](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.11) (2022-11-11)
7
-
8
- **Note:** Version bump only for package @squiz/db-lib
6
+ ## [1.2.13-alpha.0](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.13-alpha.0) (2023-01-13)
9
7
 
8
+ ### Bug Fixes
10
9
 
10
+ - **deps:** update dependency constructs to v10.1.183 ([def2040](https://gitlab.squiz.net/developer-experience/cmp/commit/def204076fd709282067ccaa09f73f08824bdbf4))
11
11
 
12
-
13
-
14
- ## [1.2.10](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.10) (2022-11-09)
12
+ ## [1.2.12](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.12) (2022-11-24)
15
13
 
16
14
  **Note:** Version bump only for package @squiz/db-lib
17
15
 
16
+ ## [1.2.11](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.11) (2022-11-11)
18
17
 
18
+ **Note:** Version bump only for package @squiz/db-lib
19
19
 
20
+ ## [1.2.10](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.10) (2022-11-09)
20
21
 
22
+ **Note:** Version bump only for package @squiz/db-lib
21
23
 
22
24
  ## [1.2.9](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.9) (2022-11-04)
23
25
 
24
26
  **Note:** Version bump only for package @squiz/db-lib
25
27
 
26
-
27
-
28
-
29
-
30
28
  ## [1.2.2](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1...v1.2.2) (2022-09-26)
31
29
 
32
30
  **Note:** Version bump only for package @squiz/db-lib
33
31
 
34
-
35
-
36
-
37
-
38
32
  ## [1.2.1](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1) (2022-09-23)
39
33
 
40
34
  **Note:** Version bump only for package @squiz/db-lib
41
35
 
42
-
43
-
44
-
45
-
46
36
  ## [1.2.1-alpha.107](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.107) (2022-09-21)
47
37
 
48
38
  **Note:** Version bump only for package @squiz/db-lib
49
39
 
50
-
51
-
52
-
53
-
54
40
  ## [1.2.1-alpha.106](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.106) (2022-09-02)
55
41
 
56
42
  **Note:** Version bump only for package @squiz/db-lib
57
43
 
58
-
59
-
60
-
61
-
62
44
  ## [1.2.1-alpha.105](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.105) (2022-08-26)
63
45
 
64
46
  **Note:** Version bump only for package @squiz/db-lib
65
47
 
66
-
67
-
68
-
69
-
70
48
  ## [1.2.1-alpha.104](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.104) (2022-08-23)
71
49
 
72
50
  **Note:** Version bump only for package @squiz/db-lib
73
51
 
74
-
75
-
76
-
77
-
78
52
  ## [1.2.1-alpha.103](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.103) (2022-08-23)
79
53
 
80
54
  **Note:** Version bump only for package @squiz/db-lib
81
55
 
82
-
83
-
84
-
85
-
86
56
  ## [1.2.1-alpha.102](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.102) (2022-08-23)
87
57
 
88
58
  **Note:** Version bump only for package @squiz/db-lib
89
59
 
90
-
91
-
92
-
93
-
94
60
  ## [1.2.1-alpha.101](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.101) (2022-08-19)
95
61
 
96
62
  **Note:** Version bump only for package @squiz/db-lib
97
63
 
98
-
99
-
100
-
101
-
102
64
  ## [1.2.1-alpha.100](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.100) (2022-08-18)
103
65
 
104
66
  **Note:** Version bump only for package @squiz/db-lib
105
67
 
106
-
107
-
108
-
109
-
110
68
  ## [1.2.1-alpha.99](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.99) (2022-08-18)
111
69
 
112
70
  **Note:** Version bump only for package @squiz/db-lib
113
71
 
114
-
115
-
116
-
117
-
118
72
  ## [1.2.1-alpha.98](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.98) (2022-08-17)
119
73
 
120
74
  **Note:** Version bump only for package @squiz/db-lib
121
75
 
122
-
123
-
124
-
125
-
126
76
  ## [1.2.1-alpha.97](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.97) (2022-08-17)
127
77
 
128
78
  **Note:** Version bump only for package @squiz/db-lib
129
79
 
130
-
131
-
132
-
133
-
134
80
  ## [1.2.1-alpha.96](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.96) (2022-08-12)
135
81
 
136
82
  **Note:** Version bump only for package @squiz/db-lib
137
83
 
138
-
139
-
140
-
141
-
142
84
  ## [1.2.1-alpha.95](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.95) (2022-08-10)
143
85
 
144
86
  **Note:** Version bump only for package @squiz/db-lib
145
87
 
146
-
147
-
148
-
149
-
150
88
  ## [1.2.1-alpha.90](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.89...v1.2.1-alpha.90) (2022-08-05)
151
89
 
152
90
  **Note:** Version bump only for package @squiz/db-lib
153
91
 
154
-
155
-
156
-
157
-
158
92
  ## [1.2.1-alpha.89](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.88...v1.2.1-alpha.89) (2022-08-05)
159
93
 
160
94
  **Note:** Version bump only for package @squiz/db-lib
161
95
 
162
-
163
-
164
-
165
-
166
96
  ## [1.2.1-alpha.88](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.67...v1.2.1-alpha.88) (2022-08-05)
167
97
 
168
98
  **Note:** Version bump only for package @squiz/db-lib
169
99
 
170
-
171
-
172
-
173
-
174
100
  ## [1.2.1-alpha.87](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.67...v1.2.1-alpha.87) (2022-08-05)
175
101
 
176
102
  **Note:** Version bump only for package @squiz/db-lib
@@ -9,15 +9,15 @@ export interface Writer<T> {
9
9
  update(where: Partial<T>, newValue: Partial<T>): Promise<T[]>;
10
10
  delete(where: Partial<T>): Promise<number>;
11
11
  }
12
- export declare type Repository<T> = Reader<T> & Writer<T>;
13
- export declare type PageResult<T> = {
12
+ export type Repository<T> = Reader<T> & Writer<T>;
13
+ export type PageResult<T> = {
14
14
  items: T[];
15
15
  totalCount: number;
16
16
  pageSize: number;
17
17
  };
18
- export declare type SortDirection = 'desc' | 'asc';
18
+ export type SortDirection = 'desc' | 'asc';
19
19
  export declare const DEFAULT_PAGE_SIZE = 20;
20
- export declare abstract class AbstractRepository<T, ObjT extends T> implements Reader<T>, Writer<T> {
20
+ export declare abstract class AbstractRepository<T extends object, ObjT extends T> implements Reader<T>, Writer<T> {
21
21
  protected repositories: Repositories;
22
22
  protected pool: Pool;
23
23
  protected classRef: {
@@ -50,4 +50,6 @@ export declare abstract class AbstractRepository<T, ObjT extends T> implements R
50
50
  findAll(): Promise<T[]>;
51
51
  getCount(item?: Partial<T> | null): Promise<number>;
52
52
  getPage(pageNumber: number, sortBy?: (keyof T)[], direction?: SortDirection, pageSize?: number | null, item?: Partial<T> | null): Promise<PageResult<T>>;
53
+ getCountRaw(whereClause?: string, values?: any[], tableRef?: string): Promise<number>;
54
+ getPageRaw(pageNumber: number, sortBy?: (keyof T)[], direction?: SortDirection, whereClause?: string, tableRef?: string, values?: any[], pageSize?: number | null): Promise<PageResult<T>>;
53
55
  }
@@ -11,7 +11,7 @@ export interface DbConnection {
11
11
  export interface ConnectionStringObj {
12
12
  connectionString: string;
13
13
  }
14
- export declare type TransactionClient = PoolClient;
14
+ export type TransactionClient = PoolClient;
15
15
  export declare class ConnectionManager<T extends Repositories> {
16
16
  protected applicationName: string;
17
17
  protected migrationDirectory: string;
package/lib/Migrator.d.ts CHANGED
@@ -6,13 +6,15 @@ export declare class Migrator {
6
6
  constructor(migrationDir: string, migrationList: string[], pool: PoolClient);
7
7
  protected ensureMigrationTableExists(): Promise<import("pg").QueryResult<any>>;
8
8
  protected getAppliedMigrations(): Promise<any[]>;
9
- protected applyMigration(migration: string, sql: string): Promise<void>;
9
+ protected doSqlMigration(migration: string, sql: string): Promise<void>;
10
10
  protected getPending(migrationsList: string[], appliedMigrations: string[]): Promise<string[]>;
11
11
  protected getSql(migration: string): Promise<string>;
12
12
  protected tryToObtainLock(): Promise<boolean>;
13
13
  protected releaseLock(): Promise<void>;
14
14
  migrate(): Promise<any>;
15
15
  protected runMigrations(): Promise<void>;
16
+ protected doScriptMigration(migration: string): Promise<void>;
16
17
  protected runMigration(migration: string): Promise<void>;
18
+ protected doMigrationWork(migration: string): Promise<void>;
17
19
  protected dispose(): void;
18
20
  }
@@ -1,2 +1,2 @@
1
1
  import { Repository } from './AbstractRepository';
2
- export declare type Repositories = Record<string, Repository<any>>;
2
+ export type Repositories = Record<string, Repository<any>>;
package/lib/index.js CHANGED
@@ -31165,12 +31165,7 @@ var AbstractRepository = class {
31165
31165
  if (item) {
31166
31166
  whereClause = `WHERE ${this.createWhereStringFromPartialModel(item)}`;
31167
31167
  }
31168
- const result = await this.executeQueryRaw(
31169
- `SELECT count(*)
31170
- FROM ${this.tableName} ${whereClause}`,
31171
- item ? Object.values(item) : []
31172
- );
31173
- return parseInt(result[0].count);
31168
+ return this.getCountRaw(whereClause, item ? Object.values(item) : []);
31174
31169
  }
31175
31170
  async getPage(pageNumber, sortBy = [], direction = "asc", pageSize = null, item = null) {
31176
31171
  if (pageSize === null) {
@@ -31204,6 +31199,41 @@ var AbstractRepository = class {
31204
31199
  pageSize
31205
31200
  };
31206
31201
  }
31202
+ async getCountRaw(whereClause = "", values = [], tableRef = "") {
31203
+ const result = await this.executeQueryRaw(
31204
+ `SELECT COUNT(*) FROM ${this.tableName} ${tableRef} ${whereClause}`,
31205
+ values
31206
+ );
31207
+ return parseInt(result[0].count);
31208
+ }
31209
+ async getPageRaw(pageNumber, sortBy = [], direction = "asc", whereClause = "", tableRef = "", values = [], pageSize = null) {
31210
+ if (pageSize === null) {
31211
+ pageSize = DEFAULT_PAGE_SIZE;
31212
+ }
31213
+ if (pageNumber <= 0) {
31214
+ throw new Error(`Page number value cannot be less than 1`);
31215
+ }
31216
+ if (pageSize <= 0) {
31217
+ throw new Error(`Page size value cannot be less than 1`);
31218
+ }
31219
+ let orderByClause = "";
31220
+ if (sortBy.length) {
31221
+ orderByClause = `ORDER BY ${sortBy.join(",")} ${direction}`;
31222
+ }
31223
+ const offset = (pageNumber - 1) * pageSize;
31224
+ const query = `
31225
+ SELECT *
31226
+ FROM ${this.tableName} ${tableRef} ${whereClause} ${orderByClause}
31227
+ OFFSET ${offset}
31228
+ LIMIT ${pageSize}
31229
+ `;
31230
+ const items = await this.executeQuery(query, values);
31231
+ return {
31232
+ items,
31233
+ totalCount: await this.getCountRaw(whereClause, values, tableRef),
31234
+ pageSize
31235
+ };
31236
+ }
31207
31237
  };
31208
31238
 
31209
31239
  // src/ConnectionManager.ts
@@ -31232,14 +31262,13 @@ var Migrator = class {
31232
31262
  return row.id;
31233
31263
  });
31234
31264
  }
31235
- async applyMigration(migration, sql) {
31265
+ async doSqlMigration(migration, sql) {
31236
31266
  try {
31237
31267
  const result = await this.pool.query(sql);
31238
31268
  logger.info("Applying " + migration);
31239
31269
  if (result.rowCount !== void 0) {
31240
31270
  logger.info("affected rows", result.rowCount);
31241
31271
  }
31242
- await this.pool.query("insert into __migrations__ (id) values ($1)", [migration]);
31243
31272
  } catch (e) {
31244
31273
  logger.info("error occurred running migration", migration, e);
31245
31274
  throw e;
@@ -31309,11 +31338,24 @@ var Migrator = class {
31309
31338
  await this.runMigration(migration);
31310
31339
  }
31311
31340
  }
31341
+ async doScriptMigration(migration) {
31342
+ const migrationScript = import_path.default.join(this.migrationDir, migration);
31343
+ const migrationFunc = require(migrationScript);
31344
+ let callable;
31345
+ if (migrationFunc instanceof Function) {
31346
+ callable = migrationFunc;
31347
+ } else if (migrationFunc.default instanceof Function) {
31348
+ callable = migrationFunc.default;
31349
+ } else {
31350
+ throw new Error(`${migrationScript} isn't callable`);
31351
+ }
31352
+ await callable(this.pool, logger);
31353
+ }
31312
31354
  async runMigration(migration) {
31313
31355
  try {
31314
31356
  await this.pool.query("BEGIN");
31315
- const sql = await this.getSql(migration);
31316
- await this.applyMigration(migration, sql);
31357
+ await this.doMigrationWork(migration);
31358
+ await this.pool.query("insert into __migrations__ (id) values ($1)", [migration]);
31317
31359
  await this.pool.query("COMMIT");
31318
31360
  } catch (e) {
31319
31361
  logger.error("migration failed", migration, e);
@@ -31321,6 +31363,16 @@ var Migrator = class {
31321
31363
  throw e;
31322
31364
  }
31323
31365
  }
31366
+ async doMigrationWork(migration) {
31367
+ if (migration.endsWith(".sql")) {
31368
+ const sql = await this.getSql(migration);
31369
+ await this.doSqlMigration(migration, sql);
31370
+ } else if (migration.endsWith(".js")) {
31371
+ await this.doScriptMigration(migration);
31372
+ } else {
31373
+ throw new Error(`${migration} as an invalid migration extension`);
31374
+ }
31375
+ }
31324
31376
  dispose() {
31325
31377
  return this.pool.release();
31326
31378
  }