@proteinjs/db 1.2.1 → 1.3.1
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 +23 -0
- package/LICENSE +21 -0
- package/dist/generated/index.js +3 -3
- package/dist/generated/index.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/src/Columns.d.ts.map +1 -1
- package/dist/src/Columns.js +2 -6
- package/dist/src/Columns.js.map +1 -1
- package/dist/src/Db.d.ts +3 -2
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +40 -17
- package/dist/src/Db.js.map +1 -1
- package/dist/src/TableWatcher.d.ts +31 -0
- package/dist/src/TableWatcher.d.ts.map +1 -0
- package/dist/src/TableWatcher.js +47 -0
- package/dist/src/TableWatcher.js.map +1 -0
- package/dist/src/TableWatcherRunner.d.ts +15 -0
- package/dist/src/TableWatcherRunner.d.ts.map +1 -0
- package/dist/src/TableWatcherRunner.js +275 -0
- package/dist/src/TableWatcherRunner.js.map +1 -0
- package/dist/src/reference/ReferenceArray.d.ts +4 -0
- package/dist/src/reference/ReferenceArray.d.ts.map +1 -1
- package/dist/src/reference/ReferenceArray.js +52 -8
- package/dist/src/reference/ReferenceArray.js.map +1 -1
- package/dist/test/ReferenceArray.test.d.ts +2 -0
- package/dist/test/ReferenceArray.test.d.ts.map +1 -0
- package/dist/test/ReferenceArray.test.js +132 -0
- package/dist/test/ReferenceArray.test.js.map +1 -0
- package/dist/test/ReferenceArraySerializer.test.d.ts +2 -0
- package/dist/test/ReferenceArraySerializer.test.d.ts.map +1 -0
- package/dist/test/ReferenceArraySerializer.test.js +40 -0
- package/dist/test/ReferenceArraySerializer.test.js.map +1 -0
- package/dist/test/reusable/ColumnTypesTests.d.ts +53 -0
- package/dist/test/reusable/ColumnTypesTests.d.ts.map +1 -0
- package/dist/test/{ColumnTypesTests.js → reusable/ColumnTypesTests.js} +4 -4
- package/dist/test/reusable/ColumnTypesTests.js.map +1 -0
- package/dist/test/reusable/CrudTests.d.ts +51 -0
- package/dist/test/reusable/CrudTests.d.ts.map +1 -0
- package/dist/test/{CrudTests.js → reusable/CrudTests.js} +4 -4
- package/dist/test/reusable/CrudTests.js.map +1 -0
- package/dist/test/{TableManagerTests.d.ts → reusable/TableManagerTests.d.ts} +2 -2
- package/dist/test/reusable/TableManagerTests.d.ts.map +1 -0
- package/dist/test/{TableManagerTests.js → reusable/TableManagerTests.js} +3 -3
- package/dist/test/reusable/TableManagerTests.js.map +1 -0
- package/generated/index.ts +16 -19
- package/index.ts +5 -3
- package/package.json +7 -5
- package/src/Columns.ts +1 -2
- package/src/Db.ts +22 -12
- package/src/TableWatcher.ts +77 -0
- package/src/TableWatcherRunner.ts +167 -0
- package/src/reference/ReferenceArray.ts +46 -4
- package/test/ReferenceArray.test.ts +93 -0
- package/test/ReferenceArraySerializer.test.ts +42 -0
- package/test/{ColumnTypesTests.ts → reusable/ColumnTypesTests.ts} +6 -6
- package/test/{CrudTests.ts → reusable/CrudTests.ts} +4 -4
- package/test/{TableManagerTests.ts → reusable/TableManagerTests.ts} +4 -4
- package/dist/test/ColumnTypesTests.d.ts +0 -53
- package/dist/test/ColumnTypesTests.d.ts.map +0 -1
- package/dist/test/ColumnTypesTests.js.map +0 -1
- package/dist/test/CrudTests.d.ts +0 -51
- package/dist/test/CrudTests.d.ts.map +0 -1
- package/dist/test/CrudTests.js.map +0 -1
- package/dist/test/TableManagerTests.d.ts.map +0 -1
- package/dist/test/TableManagerTests.js.map +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Loadable, SourceRepository } from '@proteinjs/reflection';
|
|
2
|
+
import { QueryBuilder } from '@proteinjs/db-query';
|
|
3
|
+
import { Record } from './Record';
|
|
4
|
+
import { Table } from './Table';
|
|
5
|
+
|
|
6
|
+
type RequiredProps<T, K extends keyof T> = Omit<T, K> & {
|
|
7
|
+
[P in K]-?: T[P];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type TableWatcherMap<R extends Record = any> = {
|
|
11
|
+
[tableName: string]: {
|
|
12
|
+
beforeInsert: RequiredProps<TableWatcher<R>, 'beforeInsert'>[];
|
|
13
|
+
afterInsert: RequiredProps<TableWatcher<R>, 'afterInsert'>[];
|
|
14
|
+
beforeUpdate: RequiredProps<TableWatcher<R>, 'beforeUpdate'>[];
|
|
15
|
+
afterUpdate: RequiredProps<TableWatcher<R>, 'afterUpdate'>[];
|
|
16
|
+
beforeDelete: RequiredProps<TableWatcher<R>, 'beforeDelete'>[];
|
|
17
|
+
afterDelete: RequiredProps<TableWatcher<R>, 'afterDelete'>[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const getTableWatcherMap = <R extends Record = any>(): TableWatcherMap<R> => {
|
|
22
|
+
const tableWatcherMap: TableWatcherMap<R> = {};
|
|
23
|
+
const tableWatchers = getTableWatchers();
|
|
24
|
+
for (const tableWatcher of tableWatchers) {
|
|
25
|
+
if (!tableWatcherMap[tableWatcher.table().name]) {
|
|
26
|
+
tableWatcherMap[tableWatcher.table().name] = {
|
|
27
|
+
beforeInsert: [],
|
|
28
|
+
afterInsert: [],
|
|
29
|
+
beforeUpdate: [],
|
|
30
|
+
afterUpdate: [],
|
|
31
|
+
beforeDelete: [],
|
|
32
|
+
afterDelete: [],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const mapping = tableWatcherMap[tableWatcher.table().name];
|
|
37
|
+
if (tableWatcher.beforeInsert) {
|
|
38
|
+
mapping.beforeInsert.push(tableWatcher as any);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (tableWatcher.afterInsert) {
|
|
42
|
+
mapping.afterInsert.push(tableWatcher as any);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (tableWatcher.beforeUpdate) {
|
|
46
|
+
mapping.beforeUpdate.push(tableWatcher as any);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (tableWatcher.afterUpdate) {
|
|
50
|
+
mapping.afterUpdate.push(tableWatcher as any);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (tableWatcher.beforeDelete) {
|
|
54
|
+
mapping.beforeDelete.push(tableWatcher as any);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (tableWatcher.afterDelete) {
|
|
58
|
+
mapping.afterDelete.push(tableWatcher as any);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return tableWatcherMap;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const getTableWatchers = <R extends Record = any>() =>
|
|
66
|
+
SourceRepository.get().objects<TableWatcher<R>>('@proteinjs/db/TableWatcher');
|
|
67
|
+
|
|
68
|
+
export interface TableWatcher<R extends Record = Record> extends Loadable {
|
|
69
|
+
name(): string;
|
|
70
|
+
table(): Table<R>;
|
|
71
|
+
beforeInsert?<T extends R>(record: Omit<T, keyof R>): Promise<Omit<T, keyof R>>;
|
|
72
|
+
afterInsert?<T extends R>(record: T): Promise<void>;
|
|
73
|
+
beforeUpdate?<T extends R>(record: Partial<T>, qb: QueryBuilder<T>): Promise<Partial<T>>;
|
|
74
|
+
afterUpdate?<T extends R>(recordUpdateCount: number, record: Partial<T>, qb: QueryBuilder<T>): Promise<void>;
|
|
75
|
+
beforeDelete?<T extends R>(recordsToDelete: T[], qb: QueryBuilder<T>): Promise<void>;
|
|
76
|
+
afterDelete?<T extends R>(recordDeleteCount: number, deletedRecords: T[], qb: QueryBuilder<T>): Promise<void>;
|
|
77
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Logger } from '@proteinjs/util';
|
|
2
|
+
import { TableWatcherMap, getTableWatcherMap } from './TableWatcher';
|
|
3
|
+
import { Record } from './Record';
|
|
4
|
+
import { Table } from './Table';
|
|
5
|
+
import { QueryBuilder } from '@proteinjs/db-query';
|
|
6
|
+
|
|
7
|
+
export class TableWatcherRunner<R extends Record = Record> {
|
|
8
|
+
private static tableWatcherMap: TableWatcherMap;
|
|
9
|
+
private logger = new Logger(this.constructor.name);
|
|
10
|
+
|
|
11
|
+
constructor() {
|
|
12
|
+
if (!TableWatcherRunner.tableWatcherMap) {
|
|
13
|
+
TableWatcherRunner.tableWatcherMap = getTableWatcherMap();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async runBeforeInsertTableWatchers<T extends R>(
|
|
18
|
+
table: Table<T>,
|
|
19
|
+
record: Omit<T, keyof R>
|
|
20
|
+
): Promise<Omit<T, keyof R>> {
|
|
21
|
+
const tableWatcherMap = TableWatcherRunner.tableWatcherMap[table.name];
|
|
22
|
+
if (!tableWatcherMap) {
|
|
23
|
+
return record;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const tableWatchers = tableWatcherMap.beforeInsert;
|
|
27
|
+
if (tableWatchers.length === 0) {
|
|
28
|
+
return record;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
this.logger.info(`(${table.name}) Running before-insert table watchers`);
|
|
32
|
+
let updatedRecord: any = record;
|
|
33
|
+
for (const tableWatcher of tableWatchers) {
|
|
34
|
+
this.logger.info(`(${table.name}) Running ${tableWatcher.name()}.beforeInsert`);
|
|
35
|
+
updatedRecord = await tableWatcher.beforeInsert(updatedRecord);
|
|
36
|
+
this.logger.info(`(${table.name}) Finished running ${tableWatcher.name()}.beforeInsert`);
|
|
37
|
+
}
|
|
38
|
+
this.logger.info(`(${table.name}) Finished running before-insert table watchers`);
|
|
39
|
+
|
|
40
|
+
return updatedRecord;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async runAfterInsertTableWatchers<T extends R>(table: Table<T>, record: T): Promise<void> {
|
|
44
|
+
const tableWatcherMap = TableWatcherRunner.tableWatcherMap[table.name];
|
|
45
|
+
if (!tableWatcherMap) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const tableWatchers = tableWatcherMap.afterInsert;
|
|
50
|
+
if (tableWatchers.length === 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
this.logger.info(`(${table.name}) Running after-insert table watchers`);
|
|
55
|
+
for (const tableWatcher of tableWatchers) {
|
|
56
|
+
this.logger.info(`(${table.name}) Running ${tableWatcher.name()}.afterInsert`);
|
|
57
|
+
await tableWatcher.afterInsert(record);
|
|
58
|
+
this.logger.info(`(${table.name}) Finished running ${tableWatcher.name()}.afterInsert`);
|
|
59
|
+
}
|
|
60
|
+
this.logger.info(`(${table.name}) Finished running after-insert table watchers`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async runBeforeUpdateTableWatchers<T extends R>(
|
|
64
|
+
table: Table<T>,
|
|
65
|
+
record: Partial<T>,
|
|
66
|
+
qb: QueryBuilder<T>
|
|
67
|
+
): Promise<Partial<T>> {
|
|
68
|
+
const tableWatcherMap = TableWatcherRunner.tableWatcherMap[table.name];
|
|
69
|
+
if (!tableWatcherMap) {
|
|
70
|
+
return record;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const tableWatchers = tableWatcherMap.beforeUpdate;
|
|
74
|
+
if (tableWatchers.length === 0) {
|
|
75
|
+
return record;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
this.logger.info(`(${table.name}) Running before-update table watchers`);
|
|
79
|
+
const qbCopy = QueryBuilder.fromQueryBuilder(qb, table.name);
|
|
80
|
+
let updatedRecord: any = record;
|
|
81
|
+
for (const tableWatcher of tableWatchers) {
|
|
82
|
+
this.logger.info(`(${table.name}) Running ${tableWatcher.name()}.beforeUpdate`);
|
|
83
|
+
updatedRecord = await tableWatcher.beforeUpdate(updatedRecord, qbCopy);
|
|
84
|
+
this.logger.info(`(${table.name}) Finished running ${tableWatcher.name()}.beforeUpdate`);
|
|
85
|
+
}
|
|
86
|
+
this.logger.info(`(${table.name}) Finished running before-update table watchers`);
|
|
87
|
+
|
|
88
|
+
return updatedRecord;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async runAfterUpdateTableWatchers<T extends R>(
|
|
92
|
+
table: Table<T>,
|
|
93
|
+
recordUpdateCount: number,
|
|
94
|
+
record: Partial<T>,
|
|
95
|
+
qb: QueryBuilder<T>
|
|
96
|
+
): Promise<void> {
|
|
97
|
+
const tableWatcherMap = TableWatcherRunner.tableWatcherMap[table.name];
|
|
98
|
+
if (!tableWatcherMap) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const tableWatchers = tableWatcherMap.afterUpdate;
|
|
103
|
+
if (tableWatchers.length === 0) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
this.logger.info(`(${table.name}) Running after-update table watchers`);
|
|
108
|
+
const qbCopy = QueryBuilder.fromQueryBuilder(qb, table.name);
|
|
109
|
+
for (const tableWatcher of tableWatchers) {
|
|
110
|
+
this.logger.info(`(${table.name}) Running ${tableWatcher.name()}.afterUpdate`);
|
|
111
|
+
await tableWatcher.afterUpdate(recordUpdateCount, record, qbCopy);
|
|
112
|
+
this.logger.info(`(${table.name}) Finished running ${tableWatcher.name()}.afterUpdate`);
|
|
113
|
+
}
|
|
114
|
+
this.logger.info(`(${table.name}) Finished running after-update table watchers`);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async runBeforeDeleteTableWatchers<T extends R>(
|
|
118
|
+
table: Table<T>,
|
|
119
|
+
recordsToDelete: T[],
|
|
120
|
+
qb: QueryBuilder<T>
|
|
121
|
+
): Promise<void> {
|
|
122
|
+
const tableWatcherMap = TableWatcherRunner.tableWatcherMap[table.name];
|
|
123
|
+
if (!tableWatcherMap) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const tableWatchers = tableWatcherMap.beforeDelete;
|
|
128
|
+
if (tableWatchers.length === 0) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
this.logger.info(`(${table.name}) Running before-delete table watchers`);
|
|
133
|
+
const qbCopy = QueryBuilder.fromQueryBuilder(qb, table.name);
|
|
134
|
+
for (const tableWatcher of tableWatchers) {
|
|
135
|
+
this.logger.info(`(${table.name}) Running ${tableWatcher.name()}.beforeDelete`);
|
|
136
|
+
await tableWatcher.beforeDelete(recordsToDelete, qbCopy);
|
|
137
|
+
this.logger.info(`(${table.name}) Finished running ${tableWatcher.name()}.beforeDelete`);
|
|
138
|
+
}
|
|
139
|
+
this.logger.info(`(${table.name}) Finished running before-delete table watchers`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async runAfterDeleteTableWatchers<T extends R>(
|
|
143
|
+
table: Table<T>,
|
|
144
|
+
recordDeleteCount: number,
|
|
145
|
+
deletedRecords: T[],
|
|
146
|
+
qb: QueryBuilder<T>
|
|
147
|
+
): Promise<void> {
|
|
148
|
+
const tableWatcherMap = TableWatcherRunner.tableWatcherMap[table.name];
|
|
149
|
+
if (!tableWatcherMap) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const tableWatchers = tableWatcherMap.afterDelete;
|
|
154
|
+
if (tableWatchers.length === 0) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
this.logger.info(`(${table.name}) Running after-delete table watchers`);
|
|
159
|
+
const qbCopy = QueryBuilder.fromQueryBuilder(qb, table.name);
|
|
160
|
+
for (const tableWatcher of tableWatchers) {
|
|
161
|
+
this.logger.info(`(${table.name}) Running ${tableWatcher.name()}.afterDelete`);
|
|
162
|
+
await tableWatcher.afterDelete(recordDeleteCount, deletedRecords, qbCopy);
|
|
163
|
+
this.logger.info(`(${table.name}) Finished running ${tableWatcher.name()}.afterDelete`);
|
|
164
|
+
}
|
|
165
|
+
this.logger.info(`(${table.name}) Finished running after-delete table watchers`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -26,24 +26,65 @@ export class ReferenceArray<T extends Record> implements CustomSerializableObjec
|
|
|
26
26
|
public _table: string,
|
|
27
27
|
public _ids: string[],
|
|
28
28
|
public _objects?: T[]
|
|
29
|
-
) {
|
|
29
|
+
) {
|
|
30
|
+
if (this._objects) {
|
|
31
|
+
this._objects = this.createProxy(this._objects);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
30
34
|
|
|
31
35
|
static fromObjects<T extends Record>(table: string, objects: (T | (Partial<T> & { id: string }))[]) {
|
|
32
36
|
const ids = objects.map((object) => object.id);
|
|
33
37
|
return new ReferenceArray<T>(table, ids, objects as T[]);
|
|
34
38
|
}
|
|
35
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Used to keep `_ids` in sync with `_objects`
|
|
42
|
+
*/
|
|
43
|
+
private createProxy(objects: T[]): T[] {
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
45
|
+
const referenceArray = this;
|
|
46
|
+
const handler: ProxyHandler<T[]> = {
|
|
47
|
+
get(target: T[], property: string | symbol, receiver: any) {
|
|
48
|
+
const value = Reflect.get(target, property, receiver);
|
|
49
|
+
if (typeof value === 'function' && ['push', 'pop', 'splice'].includes(property as string)) {
|
|
50
|
+
return function (...args: any[]) {
|
|
51
|
+
const result = (target as any)[property](...args);
|
|
52
|
+
referenceArray._ids = target.map((obj: T) => obj.id);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
},
|
|
58
|
+
set(target: T[], property: string | symbol, value: any, receiver: any) {
|
|
59
|
+
const result = Reflect.set(target, property, value, receiver);
|
|
60
|
+
if (typeof property === 'number' || !isNaN(Number(property))) {
|
|
61
|
+
referenceArray._ids = target.map((obj: T) => obj.id);
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
},
|
|
65
|
+
deleteProperty(target: T[], property: string | symbol) {
|
|
66
|
+
if (typeof property === 'number' || !isNaN(Number(property))) {
|
|
67
|
+
target.splice(Number(property), 1);
|
|
68
|
+
}
|
|
69
|
+
referenceArray._ids = target.map((obj: T) => obj.id);
|
|
70
|
+
return true;
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
return new Proxy(objects, handler);
|
|
74
|
+
}
|
|
75
|
+
|
|
36
76
|
async get(): Promise<T[]> {
|
|
37
77
|
if (!this._objects) {
|
|
38
78
|
if (this._ids.length < 1) {
|
|
39
|
-
this._objects = [];
|
|
79
|
+
this._objects = this.createProxy([]);
|
|
40
80
|
} else {
|
|
41
81
|
const table = tableByName(this._table);
|
|
42
82
|
const db = getDb();
|
|
43
83
|
const qb = new QueryBuilderFactory().getQueryBuilder(table);
|
|
44
84
|
qb.condition({ field: 'id', operator: 'IN', value: this._ids });
|
|
45
85
|
qb.sort([{ field: 'id', byValues: this._ids }]);
|
|
46
|
-
|
|
86
|
+
const objects = await db.query(table, qb);
|
|
87
|
+
this._objects = this.createProxy(objects);
|
|
47
88
|
}
|
|
48
89
|
}
|
|
49
90
|
|
|
@@ -51,6 +92,7 @@ export class ReferenceArray<T extends Record> implements CustomSerializableObjec
|
|
|
51
92
|
}
|
|
52
93
|
|
|
53
94
|
set(objects: T[]) {
|
|
54
|
-
this._objects = objects;
|
|
95
|
+
this._objects = this.createProxy(objects);
|
|
96
|
+
this._ids = objects.map((object) => object.id);
|
|
55
97
|
}
|
|
56
98
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { moment } from '../src/opt/moment';
|
|
2
|
+
import { ReferenceArray } from '../src/reference/ReferenceArray';
|
|
3
|
+
import { Record } from '../src/Record';
|
|
4
|
+
|
|
5
|
+
class MockRecord implements Record {
|
|
6
|
+
constructor(
|
|
7
|
+
public id: string,
|
|
8
|
+
public created: moment.Moment,
|
|
9
|
+
public updated: moment.Moment
|
|
10
|
+
) {}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe('ReferenceArray', () => {
|
|
14
|
+
const createMockRecord = (id: string) => new MockRecord(id, moment(), moment());
|
|
15
|
+
|
|
16
|
+
it('should initialize with correct ids and objects', () => {
|
|
17
|
+
const objects = [createMockRecord('1'), createMockRecord('2')];
|
|
18
|
+
const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
|
|
19
|
+
|
|
20
|
+
expect(refArray._ids).toEqual(['1', '2']);
|
|
21
|
+
expect(refArray._objects).toEqual(objects);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should update ids when objects are modified', async () => {
|
|
25
|
+
const objects = [createMockRecord('1'), createMockRecord('2')];
|
|
26
|
+
const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
|
|
27
|
+
|
|
28
|
+
// Push a new object
|
|
29
|
+
const refArrayObjects = await refArray.get();
|
|
30
|
+
if (refArrayObjects) {
|
|
31
|
+
refArrayObjects.push(createMockRecord('3'));
|
|
32
|
+
expect(refArray._ids).toEqual(['1', '2', '3']);
|
|
33
|
+
|
|
34
|
+
// Modify an object
|
|
35
|
+
refArrayObjects[1] = createMockRecord('4');
|
|
36
|
+
expect(refArray._ids).toEqual(['1', '4', '3']);
|
|
37
|
+
|
|
38
|
+
// Delete an object using pop
|
|
39
|
+
refArrayObjects.pop();
|
|
40
|
+
expect(refArray._ids).toEqual(['1', '4']);
|
|
41
|
+
|
|
42
|
+
// Delete an object using splice
|
|
43
|
+
refArrayObjects.splice(0, 1);
|
|
44
|
+
expect(refArray._ids).toEqual(['4']);
|
|
45
|
+
} else {
|
|
46
|
+
fail('refArrayObjects is undefined');
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('should update ids when objects are set', () => {
|
|
51
|
+
const objects = [createMockRecord('1'), createMockRecord('2')];
|
|
52
|
+
const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
|
|
53
|
+
|
|
54
|
+
const newObjects = [createMockRecord('5'), createMockRecord('6')];
|
|
55
|
+
refArray.set(newObjects);
|
|
56
|
+
expect(refArray._ids).toEqual(['5', '6']);
|
|
57
|
+
expect(refArray._objects).toEqual(newObjects);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should not leave null or undefined entries in ids array when objects are deleted', () => {
|
|
61
|
+
const objects = [createMockRecord('1'), createMockRecord('2'), createMockRecord('3')];
|
|
62
|
+
const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2', '3'], objects);
|
|
63
|
+
|
|
64
|
+
if (refArray._objects) {
|
|
65
|
+
// Delete the second object using splice
|
|
66
|
+
refArray._objects.splice(1, 1);
|
|
67
|
+
expect(refArray._ids).toEqual(['1', '3']);
|
|
68
|
+
|
|
69
|
+
// Delete the first object using splice
|
|
70
|
+
refArray._objects.splice(0, 1);
|
|
71
|
+
expect(refArray._ids).toEqual(['3']);
|
|
72
|
+
|
|
73
|
+
// Delete the remaining object
|
|
74
|
+
refArray._objects.pop();
|
|
75
|
+
expect(refArray._ids).toEqual([]);
|
|
76
|
+
} else {
|
|
77
|
+
fail('refArray._objects is undefined');
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('should handle initializing with an empty array', async () => {
|
|
82
|
+
const refArray = new ReferenceArray<MockRecord>('mock_table', []);
|
|
83
|
+
|
|
84
|
+
expect(refArray._ids).toEqual([]);
|
|
85
|
+
|
|
86
|
+
const refArrayObjects = await refArray.get();
|
|
87
|
+
expect(refArrayObjects).toEqual([]);
|
|
88
|
+
|
|
89
|
+
refArrayObjects.push(createMockRecord('1'));
|
|
90
|
+
expect(refArray._ids).toEqual(['1']);
|
|
91
|
+
expect(refArrayObjects.length).toEqual(1);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { moment } from '../src/opt/moment';
|
|
2
|
+
import { ReferenceArray } from '../src/reference/ReferenceArray';
|
|
3
|
+
import { Record } from '../src/Record';
|
|
4
|
+
import { ReferenceArraySerializer } from '../src/serializers/ReferenceArraySerializer';
|
|
5
|
+
|
|
6
|
+
class MockRecord implements Record {
|
|
7
|
+
constructor(
|
|
8
|
+
public id: string,
|
|
9
|
+
public created: moment.Moment,
|
|
10
|
+
public updated: moment.Moment
|
|
11
|
+
) {}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
describe('ReferenceArraySerializer', () => {
|
|
15
|
+
const createMockRecord = (id: string) => new MockRecord(id, moment(), moment());
|
|
16
|
+
|
|
17
|
+
it('should serialize and deserialize correctly', () => {
|
|
18
|
+
const objects = [createMockRecord('1'), createMockRecord('2')];
|
|
19
|
+
const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
|
|
20
|
+
const serializer = new ReferenceArraySerializer();
|
|
21
|
+
|
|
22
|
+
const serialized = serializer.serialize(refArray);
|
|
23
|
+
expect(serialized).toEqual({
|
|
24
|
+
_table: 'mock_table',
|
|
25
|
+
_ids: ['1', '2'],
|
|
26
|
+
_objects: objects,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const deserialized = serializer.deserialize(serialized);
|
|
30
|
+
expect(deserialized._table).toEqual('mock_table');
|
|
31
|
+
expect(deserialized._ids).toEqual(['1', '2']);
|
|
32
|
+
expect(deserialized._objects).toEqual(objects);
|
|
33
|
+
|
|
34
|
+
// Test if the proxy is correctly applied
|
|
35
|
+
if (deserialized._objects) {
|
|
36
|
+
deserialized._objects.push(createMockRecord('3'));
|
|
37
|
+
expect(deserialized._ids).toEqual(['1', '2', '3']);
|
|
38
|
+
} else {
|
|
39
|
+
fail('deserialized._objects is undefined');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Db, DbDriver } from '
|
|
1
|
+
import { Db, DbDriver } from '../../src/Db';
|
|
2
2
|
import { Moment } from 'moment';
|
|
3
|
-
import { ReferenceArray } from '
|
|
4
|
-
import { Reference } from '
|
|
3
|
+
import { ReferenceArray } from '../../src/reference/ReferenceArray';
|
|
4
|
+
import { Reference } from '../../src/reference/Reference';
|
|
5
5
|
import {
|
|
6
6
|
IntegerColumn,
|
|
7
7
|
StringColumn,
|
|
@@ -17,9 +17,9 @@ import {
|
|
|
17
17
|
ArrayColumn,
|
|
18
18
|
ReferenceArrayColumn,
|
|
19
19
|
ReferenceColumn,
|
|
20
|
-
} from '
|
|
21
|
-
import { withRecordColumns, Record } from '
|
|
22
|
-
import { Table } from '
|
|
20
|
+
} from '../../src/Columns';
|
|
21
|
+
import { withRecordColumns, Record } from '../../src/Record';
|
|
22
|
+
import { Table } from '../../src/Table';
|
|
23
23
|
|
|
24
24
|
export interface TestRecord extends Record {
|
|
25
25
|
integerColumn?: number | null;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { QueryBuilder } from '@proteinjs/db-query';
|
|
2
|
-
import { DbDriver, Db } from '
|
|
3
|
-
import { withRecordColumns, Record } from '
|
|
4
|
-
import { BooleanColumn, DateColumn, StringColumn } from '
|
|
5
|
-
import { Table } from '
|
|
2
|
+
import { DbDriver, Db } from '../../src/Db';
|
|
3
|
+
import { withRecordColumns, Record } from '../../src/Record';
|
|
4
|
+
import { BooleanColumn, DateColumn, StringColumn } from '../../src/Columns';
|
|
5
|
+
import { Table } from '../../src/Table';
|
|
6
6
|
|
|
7
7
|
export interface Employee extends Record {
|
|
8
8
|
name: string;
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
ObjectColumn,
|
|
10
10
|
StringColumn,
|
|
11
11
|
UuidColumn,
|
|
12
|
-
} from '
|
|
13
|
-
import { DbDriver } from '
|
|
14
|
-
import { Record, withRecordColumns } from '
|
|
15
|
-
import { Column, Table } from '
|
|
12
|
+
} from '../../src/Columns';
|
|
13
|
+
import { DbDriver } from '../../src/Db';
|
|
14
|
+
import { Record, withRecordColumns } from '../../src/Record';
|
|
15
|
+
import { Column, Table } from '../../src/Table';
|
|
16
16
|
|
|
17
17
|
interface User extends Record {
|
|
18
18
|
name: string;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { DbDriver } from '../src/Db';
|
|
2
|
-
import { Moment } from 'moment';
|
|
3
|
-
import { ReferenceArray } from '../src/reference/ReferenceArray';
|
|
4
|
-
import { Reference } from '../src/reference/Reference';
|
|
5
|
-
import { Record } from '../src/Record';
|
|
6
|
-
import { Table } from '../src/Table';
|
|
7
|
-
export interface TestRecord extends Record {
|
|
8
|
-
integerColumn?: number | null;
|
|
9
|
-
stringColumn?: string | null;
|
|
10
|
-
floatColumn?: number | null;
|
|
11
|
-
decimalColumn?: number | null;
|
|
12
|
-
booleanColumn?: boolean | null;
|
|
13
|
-
dateColumn?: Date | null;
|
|
14
|
-
dateTimeColumn?: Moment | null;
|
|
15
|
-
binaryColumn?: number | null;
|
|
16
|
-
uuidColumn?: string | null;
|
|
17
|
-
passwordColumn?: string | null;
|
|
18
|
-
objectColumn?: any | null;
|
|
19
|
-
arrayColumn?: any[] | null;
|
|
20
|
-
referenceArrayColumn?: ReferenceArray<any> | null;
|
|
21
|
-
referenceColumn?: Reference<any> | null;
|
|
22
|
-
}
|
|
23
|
-
export declare class TestTable extends Table<TestRecord> {
|
|
24
|
-
name: string;
|
|
25
|
-
columns: {
|
|
26
|
-
id: import("../src/Table").Column<string, any>;
|
|
27
|
-
created: import("../src/Table").Column<Moment, any>;
|
|
28
|
-
updated: import("../src/Table").Column<Moment, any>;
|
|
29
|
-
} & {} & {
|
|
30
|
-
integerColumn: import("../src/Table").Column<number | null | undefined, any>;
|
|
31
|
-
stringColumn: import("../src/Table").Column<string | null | undefined, any>;
|
|
32
|
-
floatColumn: import("../src/Table").Column<number | null | undefined, any>;
|
|
33
|
-
decimalColumn: import("../src/Table").Column<number | null | undefined, any>;
|
|
34
|
-
booleanColumn: import("../src/Table").Column<boolean | null | undefined, any>;
|
|
35
|
-
dateColumn: import("../src/Table").Column<Date | null | undefined, any>;
|
|
36
|
-
dateTimeColumn: import("../src/Table").Column<Moment | null | undefined, any>;
|
|
37
|
-
binaryColumn: import("../src/Table").Column<number | null | undefined, any>;
|
|
38
|
-
uuidColumn: import("../src/Table").Column<string | null | undefined, any>;
|
|
39
|
-
passwordColumn: import("../src/Table").Column<string | null | undefined, any>;
|
|
40
|
-
objectColumn: import("../src/Table").Column<any, any>;
|
|
41
|
-
arrayColumn: import("../src/Table").Column<any[] | null | undefined, any>;
|
|
42
|
-
referenceArrayColumn: import("../src/Table").Column<ReferenceArray<any> | null | undefined, any>;
|
|
43
|
-
referenceColumn: import("../src/Table").Column<Reference<any> | null | undefined, any>;
|
|
44
|
-
} & {
|
|
45
|
-
objectColumn?: import("../src/Table").Column<any, any> | undefined;
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Used for testing purposes only.
|
|
50
|
-
* */
|
|
51
|
-
export declare const getColTypeTestTable: (tableName: string) => TestTable;
|
|
52
|
-
export declare const columnTypeTests: (driver: DbDriver, dropTable: (table: Table<any>) => Promise<void>) => () => void;
|
|
53
|
-
//# sourceMappingURL=ColumnTypesTests.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnTypesTests.d.ts","sourceRoot":"","sources":["../../test/ColumnTypesTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,QAAQ,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAiBvD,OAAO,EAAqB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,oBAAoB,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,qBAAa,SAAU,SAAQ,KAAK,CAAC,UAAU,CAAC;IACvC,IAAI,SAAmB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;MAeX;CACJ;AAED;;MAEM;AACN,eAAO,MAAM,mBAAmB,cAAe,MAAM,cAMpD,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,QAAQ,qBAAqB,MAAM,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,eAiFhG,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnTypesTests.js","sourceRoot":"","sources":["../../test/ColumnTypesTests.ts"],"names":[],"mappings":"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"}
|
package/dist/test/CrudTests.d.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { DbDriver } from '../src/Db';
|
|
2
|
-
import { Record } from '../src/Record';
|
|
3
|
-
import { Table } from '../src/Table';
|
|
4
|
-
export interface Employee extends Record {
|
|
5
|
-
name: string;
|
|
6
|
-
department?: string;
|
|
7
|
-
jobTitle?: string | null;
|
|
8
|
-
isRemote?: boolean;
|
|
9
|
-
startDate?: Date;
|
|
10
|
-
object?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class EmployeeTestTable extends Table<Employee> {
|
|
13
|
-
name: string;
|
|
14
|
-
columns: {
|
|
15
|
-
id: import("../src/Table").Column<string, any>;
|
|
16
|
-
created: import("../src/Table").Column<import("moment").Moment, any>;
|
|
17
|
-
updated: import("../src/Table").Column<import("moment").Moment, any>;
|
|
18
|
-
} & {} & {
|
|
19
|
-
object: import("../src/Table").Column<string | undefined, any>;
|
|
20
|
-
name: import("../src/Table").Column<string, any>;
|
|
21
|
-
department: import("../src/Table").Column<string | undefined, any>;
|
|
22
|
-
jobTitle: import("../src/Table").Column<string | null | undefined, any>;
|
|
23
|
-
isRemote: import("../src/Table").Column<boolean | undefined, any>;
|
|
24
|
-
startDate: import("../src/Table").Column<Date | undefined, any>;
|
|
25
|
-
} & {};
|
|
26
|
-
}
|
|
27
|
-
export interface ReservedWordTest extends Record {
|
|
28
|
-
name: string;
|
|
29
|
-
order?: string;
|
|
30
|
-
select?: string;
|
|
31
|
-
join?: string;
|
|
32
|
-
}
|
|
33
|
-
export declare class ReservedWordTestTable extends Table<ReservedWordTest> {
|
|
34
|
-
name: string;
|
|
35
|
-
columns: {
|
|
36
|
-
id: import("../src/Table").Column<string, any>;
|
|
37
|
-
created: import("../src/Table").Column<import("moment").Moment, any>;
|
|
38
|
-
updated: import("../src/Table").Column<import("moment").Moment, any>;
|
|
39
|
-
} & {} & {
|
|
40
|
-
select: import("../src/Table").Column<string | undefined, any>;
|
|
41
|
-
name: import("../src/Table").Column<string, any>;
|
|
42
|
-
order: import("../src/Table").Column<string | undefined, any>;
|
|
43
|
-
join: import("../src/Table").Column<string | undefined, any>;
|
|
44
|
-
} & {};
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Used for testing purposes only.
|
|
48
|
-
* */
|
|
49
|
-
export declare const getCrudTestTable: (tableName: string) => EmployeeTestTable | ReservedWordTestTable;
|
|
50
|
-
export declare const crudTests: (driver: DbDriver, dropTable: (table: Table<any>) => Promise<void>) => () => void;
|
|
51
|
-
//# sourceMappingURL=CrudTests.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CrudTests.d.ts","sourceRoot":"","sources":["../../test/CrudTests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAM,MAAM,WAAW,CAAC;AACzC,OAAO,EAAqB,MAAM,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,WAAW,QAAS,SAAQ,MAAM;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,QAAQ,CAAC;IACpD,IAAI,SAAsB;IAC1B,OAAO;;;;;;;;;;;WAOJ;CACJ;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,qBAAsB,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IAChE,IAAI,SAA2B;IAC/B,OAAO;;;;;;;;;WAKJ;CACJ;AAED;;MAEM;AACN,eAAO,MAAM,gBAAgB,cAAe,MAAM,8CAYjD,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,QAAQ,qBAAqB,MAAM,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,eA2c1F,CAAC"}
|