@webiny/db 5.41.1 → 5.41.2-beta.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/DbRegistry.d.ts +8 -0
- package/DbRegistry.js +45 -0
- package/DbRegistry.js.map +1 -0
- package/index.d.ts +12 -73
- package/index.js +19 -156
- package/index.js.map +1 -1
- package/package.json +7 -4
- package/types.d.ts +23 -0
- package/types.js +7 -0
- package/types.js.map +1 -0
package/DbRegistry.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IRegistry, IRegistryItem, IRegistryRegisterParams } from "./types";
|
|
2
|
+
export declare class DbRegistry implements IRegistry {
|
|
3
|
+
private readonly items;
|
|
4
|
+
register<T = unknown>(input: IRegistryRegisterParams<T>): void;
|
|
5
|
+
getOneItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>;
|
|
6
|
+
getItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T> | null;
|
|
7
|
+
getItems<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>[];
|
|
8
|
+
}
|
package/DbRegistry.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DbRegistry = void 0;
|
|
7
|
+
class DbRegistry {
|
|
8
|
+
items = {};
|
|
9
|
+
register(input) {
|
|
10
|
+
const key = `${input.app}-${input.tags.sort().join("-")}`;
|
|
11
|
+
if (this.items[key]) {
|
|
12
|
+
throw new Error(`Item with app "${input.app}" and tags "${input.tags.join(", ")}" is already registered.`);
|
|
13
|
+
}
|
|
14
|
+
this.items[key] = input;
|
|
15
|
+
}
|
|
16
|
+
getOneItem(cb) {
|
|
17
|
+
const item = this.getItem(cb);
|
|
18
|
+
if (!item) {
|
|
19
|
+
throw new Error("Item not found.");
|
|
20
|
+
}
|
|
21
|
+
return item;
|
|
22
|
+
}
|
|
23
|
+
getItem(cb) {
|
|
24
|
+
const items = this.getItems(cb);
|
|
25
|
+
if (items.length === 0) {
|
|
26
|
+
return null;
|
|
27
|
+
} else if (items.length > 1) {
|
|
28
|
+
throw new Error("More than one item found with the provided criteria.");
|
|
29
|
+
}
|
|
30
|
+
return items[0];
|
|
31
|
+
}
|
|
32
|
+
getItems(cb) {
|
|
33
|
+
const results = [];
|
|
34
|
+
for (const key in this.items) {
|
|
35
|
+
const item = this.items[key];
|
|
36
|
+
if (cb(item)) {
|
|
37
|
+
results.push(item);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return results;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.DbRegistry = DbRegistry;
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=DbRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DbRegistry","items","register","input","key","app","tags","sort","join","Error","getOneItem","cb","item","getItem","getItems","length","results","push","exports"],"sources":["DbRegistry.ts"],"sourcesContent":["import { IRegistry, IRegistryItem, IRegistryRegisterParams } from \"./types\";\nimport { GenericRecord } from \"@webiny/api/types\";\n\nexport class DbRegistry implements IRegistry {\n private readonly items: GenericRecord<string, IRegistryItem> = {};\n\n public register<T = unknown>(input: IRegistryRegisterParams<T>): void {\n const key = `${input.app}-${input.tags.sort().join(\"-\")}`;\n\n if (this.items[key]) {\n throw new Error(\n `Item with app \"${input.app}\" and tags \"${input.tags.join(\n \", \"\n )}\" is already registered.`\n );\n }\n this.items[key] = input;\n }\n\n public getOneItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T> {\n const item = this.getItem(cb);\n if (!item) {\n throw new Error(\"Item not found.\");\n }\n return item;\n }\n\n public getItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T> | null {\n const items = this.getItems(cb);\n if (items.length === 0) {\n return null;\n } else if (items.length > 1) {\n throw new Error(\"More than one item found with the provided criteria.\");\n }\n return items[0];\n }\n\n public getItems<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>[] {\n const results: IRegistryItem<T>[] = [];\n for (const key in this.items) {\n const item = this.items[key] as IRegistryItem<T>;\n if (cb(item)) {\n results.push(item);\n }\n }\n\n return results;\n }\n}\n"],"mappings":";;;;;;AAGO,MAAMA,UAAU,CAAsB;EACxBC,KAAK,GAAyC,CAAC,CAAC;EAE1DC,QAAQA,CAAcC,KAAiC,EAAQ;IAClE,MAAMC,GAAG,GAAI,GAAED,KAAK,CAACE,GAAI,IAAGF,KAAK,CAACG,IAAI,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAAE,EAAC;IAEzD,IAAI,IAAI,CAACP,KAAK,CAACG,GAAG,CAAC,EAAE;MACjB,MAAM,IAAIK,KAAK,CACV,kBAAiBN,KAAK,CAACE,GAAI,eAAcF,KAAK,CAACG,IAAI,CAACE,IAAI,CACrD,IACJ,CAAE,0BACN,CAAC;IACL;IACA,IAAI,CAACP,KAAK,CAACG,GAAG,CAAC,GAAGD,KAAK;EAC3B;EAEOO,UAAUA,CAAcC,EAAuC,EAAoB;IACtF,MAAMC,IAAI,GAAG,IAAI,CAACC,OAAO,CAACF,EAAE,CAAC;IAC7B,IAAI,CAACC,IAAI,EAAE;MACP,MAAM,IAAIH,KAAK,CAAC,iBAAiB,CAAC;IACtC;IACA,OAAOG,IAAI;EACf;EAEOC,OAAOA,CAAcF,EAAuC,EAA2B;IAC1F,MAAMV,KAAK,GAAG,IAAI,CAACa,QAAQ,CAACH,EAAE,CAAC;IAC/B,IAAIV,KAAK,CAACc,MAAM,KAAK,CAAC,EAAE;MACpB,OAAO,IAAI;IACf,CAAC,MAAM,IAAId,KAAK,CAACc,MAAM,GAAG,CAAC,EAAE;MACzB,MAAM,IAAIN,KAAK,CAAC,sDAAsD,CAAC;IAC3E;IACA,OAAOR,KAAK,CAAC,CAAC,CAAC;EACnB;EAEOa,QAAQA,CAAcH,EAAuC,EAAsB;IACtF,MAAMK,OAA2B,GAAG,EAAE;IACtC,KAAK,MAAMZ,GAAG,IAAI,IAAI,CAACH,KAAK,EAAE;MAC1B,MAAMW,IAAI,GAAG,IAAI,CAACX,KAAK,CAACG,GAAG,CAAqB;MAChD,IAAIO,EAAE,CAACC,IAAI,CAAC,EAAE;QACVI,OAAO,CAACC,IAAI,CAACL,IAAI,CAAC;MACtB;IACJ;IAEA,OAAOI,OAAO;EAClB;AACJ;AAACE,OAAA,CAAAlB,UAAA,GAAAA,UAAA","ignoreList":[]}
|
package/index.d.ts
CHANGED
|
@@ -1,77 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
name: string;
|
|
1
|
+
import { DbRegistry } from "./DbRegistry";
|
|
2
|
+
export * from "./types";
|
|
3
|
+
export interface DbDriver<T> {
|
|
4
|
+
getClient(): T;
|
|
6
5
|
}
|
|
7
|
-
export interface
|
|
8
|
-
|
|
9
|
-
unique?: boolean;
|
|
10
|
-
name: string;
|
|
11
|
-
fields: KeyField[];
|
|
12
|
-
}
|
|
13
|
-
export interface ArgsBatch {
|
|
14
|
-
instance: Batch;
|
|
15
|
-
operation: Operation;
|
|
16
|
-
}
|
|
17
|
-
export interface Args {
|
|
18
|
-
__batch?: ArgsBatch;
|
|
19
|
-
table?: string;
|
|
20
|
-
meta?: boolean;
|
|
21
|
-
limit?: number;
|
|
22
|
-
sort?: Record<string, 1 | -1>;
|
|
23
|
-
data?: Record<string, any>;
|
|
24
|
-
query?: Record<string, any>;
|
|
25
|
-
keys?: Key[];
|
|
26
|
-
}
|
|
27
|
-
export type Result<T = any> = [T, Record<string, any>];
|
|
28
|
-
export interface DbDriver {
|
|
29
|
-
create: (args: Args) => Promise<Result<true>>;
|
|
30
|
-
read: <T = Record<string, any>>(args: Args) => Promise<Result<T[]>>;
|
|
31
|
-
update: (args: Args) => Promise<Result<true>>;
|
|
32
|
-
delete: (args: Args) => Promise<Result<true>>;
|
|
33
|
-
createLog: (args: {
|
|
34
|
-
operation: string;
|
|
35
|
-
data: Args;
|
|
36
|
-
table: string;
|
|
37
|
-
id: string;
|
|
38
|
-
}) => Promise<Result<true>>;
|
|
39
|
-
readLogs: <T = Record<string, any>>(args: {
|
|
40
|
-
table: string;
|
|
41
|
-
}) => Promise<Result<T[]>>;
|
|
42
|
-
}
|
|
43
|
-
export type OperationType = "create" | "read" | "update" | "delete";
|
|
44
|
-
export type Operation = [OperationType, Args];
|
|
45
|
-
export type ConstructorArgs = {
|
|
46
|
-
driver: DbDriver;
|
|
6
|
+
export interface ConstructorArgs<T> {
|
|
7
|
+
driver: DbDriver<T>;
|
|
47
8
|
table?: string;
|
|
48
|
-
logTable?: string;
|
|
49
|
-
};
|
|
50
|
-
declare class Db {
|
|
51
|
-
driver: DbDriver;
|
|
52
|
-
table: string;
|
|
53
|
-
logTable?: string;
|
|
54
|
-
constructor({ driver, table, logTable }: ConstructorArgs);
|
|
55
|
-
create(args: Args): Promise<Result<true>>;
|
|
56
|
-
read<T = Record<string, any>>(args: Args): Promise<Result<T[]>>;
|
|
57
|
-
update(args: Args): Promise<Result<true>>;
|
|
58
|
-
delete(args: Args): Promise<Result<true>>;
|
|
59
|
-
createLog(operation: string, args: Args): Promise<Result<true> | null>;
|
|
60
|
-
readLogs<T = Record<string, any>>(): Promise<Result<T[]> | null>;
|
|
61
|
-
batch<T0 = any, T1 = any, T2 = any, T3 = any, T4 = any, T5 = any, T6 = any, T7 = any, T8 = any, T9 = any>(): Batch;
|
|
62
9
|
}
|
|
63
|
-
declare class
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
operations: Operation[];
|
|
69
|
-
constructor(db: Db);
|
|
70
|
-
push(...operations: Operation[]): this;
|
|
71
|
-
create(...args: Args[]): this;
|
|
72
|
-
read(...args: Args[]): this;
|
|
73
|
-
update(...args: Args[]): this;
|
|
74
|
-
delete(...args: Args[]): this;
|
|
75
|
-
execute(): Promise<[T0?, T1?, T2?, T3?, T4?, T5?, T6?, T7?, T8?, T9?]>;
|
|
10
|
+
declare class Db<T> {
|
|
11
|
+
driver: DbDriver<T>;
|
|
12
|
+
readonly table?: string;
|
|
13
|
+
readonly registry: DbRegistry;
|
|
14
|
+
constructor({ driver, table }: ConstructorArgs<T>);
|
|
76
15
|
}
|
|
77
|
-
export {
|
|
16
|
+
export { Db };
|
package/index.js
CHANGED
|
@@ -3,170 +3,33 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* TODO Remove when moved all packages to standalone storage opts.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// Generates a short and sortable ID, e.g. "1607677774994.tfz58m".
|
|
12
|
-
const shortId = () => {
|
|
13
|
-
const time = new Date().getTime();
|
|
14
|
-
const uniqueId = Math.random().toString(36).slice(-6);
|
|
15
|
-
return `${time}.${uniqueId}`;
|
|
16
|
-
};
|
|
17
|
-
// Picks necessary data from received args, ready to be stored in the log table.
|
|
18
|
-
const getCreateLogData = args => {
|
|
19
|
-
const {
|
|
20
|
-
table,
|
|
21
|
-
meta,
|
|
22
|
-
limit,
|
|
23
|
-
sort,
|
|
24
|
-
data,
|
|
25
|
-
query,
|
|
26
|
-
keys
|
|
27
|
-
} = args;
|
|
28
|
-
return {
|
|
29
|
-
table,
|
|
30
|
-
meta,
|
|
31
|
-
limit,
|
|
32
|
-
sort,
|
|
33
|
-
data,
|
|
34
|
-
query,
|
|
35
|
-
keys,
|
|
36
|
-
batch: args.__batch ? {
|
|
37
|
-
id: args.__batch.instance.id,
|
|
38
|
-
type: args.__batch.instance.type
|
|
39
|
-
} : null
|
|
40
|
-
};
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
Db: true
|
|
41
8
|
};
|
|
9
|
+
exports.Db = void 0;
|
|
10
|
+
var _DbRegistry = require("./DbRegistry");
|
|
11
|
+
var _types = require("./types");
|
|
12
|
+
Object.keys(_types).forEach(function (key) {
|
|
13
|
+
if (key === "default" || key === "__esModule") return;
|
|
14
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
15
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
16
|
+
Object.defineProperty(exports, key, {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _types[key];
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
});
|
|
42
23
|
class Db {
|
|
24
|
+
registry = new _DbRegistry.DbRegistry();
|
|
43
25
|
constructor({
|
|
44
26
|
driver,
|
|
45
|
-
table
|
|
46
|
-
logTable
|
|
27
|
+
table
|
|
47
28
|
}) {
|
|
48
|
-
this.driver = driver;
|
|
49
|
-
// @ts-expect-error
|
|
50
29
|
this.table = table;
|
|
51
|
-
this.
|
|
52
|
-
}
|
|
53
|
-
async create(args) {
|
|
54
|
-
const createArgs = {
|
|
55
|
-
...args,
|
|
56
|
-
table: args.table || this.table
|
|
57
|
-
};
|
|
58
|
-
await this.createLog("create", createArgs);
|
|
59
|
-
return this.driver.create(createArgs);
|
|
60
|
-
}
|
|
61
|
-
async read(args) {
|
|
62
|
-
const readArgs = {
|
|
63
|
-
...args,
|
|
64
|
-
table: args.table || this.table
|
|
65
|
-
};
|
|
66
|
-
await this.createLog("read", readArgs);
|
|
67
|
-
return this.driver.read(readArgs);
|
|
68
|
-
}
|
|
69
|
-
async update(args) {
|
|
70
|
-
const updateArgs = {
|
|
71
|
-
...args,
|
|
72
|
-
table: args.table || this.table
|
|
73
|
-
};
|
|
74
|
-
await this.createLog("update", updateArgs);
|
|
75
|
-
return this.driver.update(updateArgs);
|
|
76
|
-
}
|
|
77
|
-
async delete(args) {
|
|
78
|
-
const deleteArgs = {
|
|
79
|
-
...args,
|
|
80
|
-
table: args.table || this.table
|
|
81
|
-
};
|
|
82
|
-
await this.createLog("delete", deleteArgs);
|
|
83
|
-
return this.driver.delete(deleteArgs);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Logging functions.
|
|
87
|
-
async createLog(operation, args) {
|
|
88
|
-
if (!this.logTable) {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
const data = getCreateLogData(args);
|
|
92
|
-
return this.driver.createLog({
|
|
93
|
-
operation,
|
|
94
|
-
data,
|
|
95
|
-
table: this.logTable,
|
|
96
|
-
id: shortId()
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
async readLogs() {
|
|
100
|
-
if (!this.logTable) {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
return this.driver.readLogs({
|
|
104
|
-
table: this.logTable
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
batch() {
|
|
108
|
-
return new Batch(this);
|
|
30
|
+
this.driver = driver;
|
|
109
31
|
}
|
|
110
32
|
}
|
|
111
33
|
exports.Db = Db;
|
|
112
|
-
class Batch {
|
|
113
|
-
constructor(db) {
|
|
114
|
-
this.db = db;
|
|
115
|
-
this.type = "batch";
|
|
116
|
-
this.id = shortId();
|
|
117
|
-
this.meta = {};
|
|
118
|
-
this.operations = [];
|
|
119
|
-
}
|
|
120
|
-
push(...operations) {
|
|
121
|
-
for (let i = 0; i < operations.length; i++) {
|
|
122
|
-
const item = operations[i];
|
|
123
|
-
this.operations.push(item);
|
|
124
|
-
}
|
|
125
|
-
return this;
|
|
126
|
-
}
|
|
127
|
-
create(...args) {
|
|
128
|
-
for (let i = 0; i < args.length; i++) {
|
|
129
|
-
this.push(["create", args[i]]);
|
|
130
|
-
}
|
|
131
|
-
return this;
|
|
132
|
-
}
|
|
133
|
-
read(...args) {
|
|
134
|
-
for (let i = 0; i < args.length; i++) {
|
|
135
|
-
this.push(["read", args[i]]);
|
|
136
|
-
}
|
|
137
|
-
return this;
|
|
138
|
-
}
|
|
139
|
-
update(...args) {
|
|
140
|
-
for (let i = 0; i < args.length; i++) {
|
|
141
|
-
this.push(["update", args[i]]);
|
|
142
|
-
}
|
|
143
|
-
return this;
|
|
144
|
-
}
|
|
145
|
-
delete(...args) {
|
|
146
|
-
for (let i = 0; i < args.length; i++) {
|
|
147
|
-
this.push(["delete", args[i]]);
|
|
148
|
-
}
|
|
149
|
-
return this;
|
|
150
|
-
}
|
|
151
|
-
async execute() {
|
|
152
|
-
/**
|
|
153
|
-
* TODO: figure out which exact type to use instead of any.
|
|
154
|
-
*/
|
|
155
|
-
const promises = [];
|
|
156
|
-
for (let i = 0; i < this.operations.length; i++) {
|
|
157
|
-
const [operation, args] = this.operations[i];
|
|
158
|
-
promises.push(this.db[operation]({
|
|
159
|
-
...args,
|
|
160
|
-
__batch: {
|
|
161
|
-
instance: this,
|
|
162
|
-
operation: this.operations[i]
|
|
163
|
-
}
|
|
164
|
-
}));
|
|
165
|
-
}
|
|
166
|
-
const result = Promise.all(promises);
|
|
167
|
-
return result;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
exports.Batch = Batch;
|
|
171
34
|
|
|
172
35
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["shortId","time","Date","getTime","uniqueId","Math","random","toString","slice","getCreateLogData","args","table","meta","limit","sort","data","query","keys","batch","__batch","id","instance","type","Db","constructor","driver","logTable","create","createArgs","createLog","read","readArgs","update","updateArgs","delete","deleteArgs","operation","readLogs","Batch","exports","db","operations","push","i","length","item","execute","promises","result","Promise","all"],"sources":["index.ts"],"sourcesContent":["/**\n * TODO Remove when moved all packages to standalone storage opts.\n */\ninterface KeyField {\n name: string;\n}\n\nexport interface Key {\n primary?: boolean;\n unique?: boolean;\n name: string;\n fields: KeyField[];\n}\n\nexport interface ArgsBatch {\n instance: Batch;\n operation: Operation;\n}\nexport interface Args {\n __batch?: ArgsBatch;\n table?: string;\n meta?: boolean;\n limit?: number;\n sort?: Record<string, 1 | -1>;\n data?: Record<string, any>;\n query?: Record<string, any>;\n keys?: Key[];\n}\n\nexport type Result<T = any> = [T, Record<string, any>];\n\nexport interface DbDriver {\n create: (args: Args) => Promise<Result<true>>;\n read: <T = Record<string, any>>(args: Args) => Promise<Result<T[]>>;\n update: (args: Args) => Promise<Result<true>>;\n delete: (args: Args) => Promise<Result<true>>;\n\n // Logging functions.\n createLog: (args: {\n operation: string;\n data: Args;\n table: string;\n id: string;\n }) => Promise<Result<true>>;\n readLogs: <T = Record<string, any>>(args: { table: string }) => Promise<Result<T[]>>;\n}\n\nexport type OperationType = \"create\" | \"read\" | \"update\" | \"delete\";\nexport type Operation = [OperationType, Args];\n\nexport type ConstructorArgs = {\n driver: DbDriver;\n table?: string;\n logTable?: string;\n};\n\n// Generates a short and sortable ID, e.g. \"1607677774994.tfz58m\".\nconst shortId = () => {\n const time = new Date().getTime();\n const uniqueId = Math.random().toString(36).slice(-6);\n\n return `${time}.${uniqueId}`;\n};\n\ninterface LogDataBatch {\n id: string;\n type: string;\n}\ninterface LogData\n extends Pick<Args, \"table\" | \"meta\" | \"limit\" | \"sort\" | \"data\" | \"query\" | \"keys\"> {\n batch: LogDataBatch | null;\n}\n\n// Picks necessary data from received args, ready to be stored in the log table.\nconst getCreateLogData = (args: Args): LogData => {\n const { table, meta, limit, sort, data, query, keys } = args;\n\n return {\n table,\n meta,\n limit,\n sort,\n data,\n query,\n keys,\n batch: args.__batch\n ? {\n id: args.__batch.instance.id,\n type: args.__batch.instance.type\n }\n : null\n };\n};\n\nclass Db {\n public driver: DbDriver;\n public table: string;\n public logTable?: string;\n\n constructor({ driver, table, logTable }: ConstructorArgs) {\n this.driver = driver;\n // @ts-expect-error\n this.table = table;\n this.logTable = logTable;\n }\n\n public async create(args: Args): Promise<Result<true>> {\n const createArgs = { ...args, table: args.table || this.table };\n await this.createLog(\"create\", createArgs);\n return this.driver.create(createArgs);\n }\n\n public async read<T = Record<string, any>>(args: Args): Promise<Result<T[]>> {\n const readArgs = { ...args, table: args.table || this.table };\n await this.createLog(\"read\", readArgs);\n return this.driver.read(readArgs);\n }\n\n public async update(args: Args): Promise<Result<true>> {\n const updateArgs = { ...args, table: args.table || this.table };\n await this.createLog(\"update\", updateArgs);\n return this.driver.update(updateArgs);\n }\n\n public async delete(args: Args): Promise<Result<true>> {\n const deleteArgs = { ...args, table: args.table || this.table };\n await this.createLog(\"delete\", deleteArgs);\n return this.driver.delete(deleteArgs);\n }\n\n // Logging functions.\n public async createLog(operation: string, args: Args): Promise<Result<true> | null> {\n if (!this.logTable) {\n return null;\n }\n\n const data = getCreateLogData(args);\n return this.driver.createLog({ operation, data, table: this.logTable, id: shortId() });\n }\n\n public async readLogs<T = Record<string, any>>(): Promise<Result<T[]> | null> {\n if (!this.logTable) {\n return null;\n }\n\n return this.driver.readLogs({\n table: this.logTable\n });\n }\n\n public batch<\n T0 = any,\n T1 = any,\n T2 = any,\n T3 = any,\n T4 = any,\n T5 = any,\n T6 = any,\n T7 = any,\n T8 = any,\n T9 = any\n >(): Batch {\n return new Batch<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>(this);\n }\n}\n\nclass Batch<\n T0 = any,\n T1 = any,\n T2 = any,\n T3 = any,\n T4 = any,\n T5 = any,\n T6 = any,\n T7 = any,\n T8 = any,\n T9 = any\n> {\n db: Db;\n type: \"batch\" | \"transaction\";\n id: string;\n meta: Record<string, any>;\n operations: Operation[];\n\n constructor(db: Db) {\n this.db = db;\n this.type = \"batch\";\n this.id = shortId();\n\n this.meta = {};\n this.operations = [];\n }\n\n push(...operations: Operation[]) {\n for (let i = 0; i < operations.length; i++) {\n const item = operations[i];\n this.operations.push(item);\n }\n return this;\n }\n\n create(...args: Args[]) {\n for (let i = 0; i < args.length; i++) {\n this.push([\"create\", args[i]]);\n }\n return this;\n }\n\n read(...args: Args[]) {\n for (let i = 0; i < args.length; i++) {\n this.push([\"read\", args[i]]);\n }\n return this;\n }\n\n update(...args: Args[]) {\n for (let i = 0; i < args.length; i++) {\n this.push([\"update\", args[i]]);\n }\n return this;\n }\n\n delete(...args: Args[]) {\n for (let i = 0; i < args.length; i++) {\n this.push([\"delete\", args[i]]);\n }\n return this;\n }\n\n async execute(): Promise<[T0?, T1?, T2?, T3?, T4?, T5?, T6?, T7?, T8?, T9?]> {\n /**\n * TODO: figure out which exact type to use instead of any.\n */\n const promises: Promise<any>[] = [];\n for (let i = 0; i < this.operations.length; i++) {\n const [operation, args] = this.operations[i];\n promises.push(\n this.db[operation]({\n ...args,\n __batch: {\n instance: this,\n operation: this.operations[i]\n }\n })\n );\n }\n\n const result = Promise.all(promises);\n\n return result as Promise<[T0?, T1?, T2?, T3?, T4?, T5?, T6?, T7?, T8?, T9?]>;\n }\n}\n\nexport { Batch, Db };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_DbRegistry","require","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","Db","registry","DbRegistry","constructor","driver","table"],"sources":["index.ts"],"sourcesContent":["import { DbRegistry } from \"~/DbRegistry\";\n\nexport * from \"./types\";\n\nexport interface DbDriver<T> {\n getClient(): T;\n}\n\nexport interface ConstructorArgs<T> {\n driver: DbDriver<T>;\n table?: string;\n}\n\nclass Db<T> {\n public driver: DbDriver<T>;\n public readonly table?: string;\n\n public readonly registry = new DbRegistry();\n\n constructor({ driver, table }: ConstructorArgs<T>) {\n this.table = table;\n this.driver = driver;\n }\n}\n\nexport { Db };\n"],"mappings":";;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAWA,MAAMS,EAAE,CAAI;EAIQC,QAAQ,GAAG,IAAIC,sBAAU,CAAC,CAAC;EAE3CC,WAAWA,CAAC;IAAEC,MAAM;IAAEC;EAA0B,CAAC,EAAE;IAC/C,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACD,MAAM,GAAGA,MAAM;EACxB;AACJ;AAACR,OAAA,CAAAI,EAAA,GAAAA,EAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/db",
|
|
3
|
-
"version": "5.41.
|
|
3
|
+
"version": "5.41.2-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,11 +12,14 @@
|
|
|
12
12
|
"access": "public",
|
|
13
13
|
"directory": "dist"
|
|
14
14
|
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@webiny/api": "5.41.2-beta.0"
|
|
17
|
+
},
|
|
15
18
|
"devDependencies": {
|
|
16
19
|
"@babel/cli": "7.24.1",
|
|
17
20
|
"@babel/core": "7.24.3",
|
|
18
|
-
"@webiny/cli": "5.41.
|
|
19
|
-
"@webiny/project-utils": "5.41.
|
|
21
|
+
"@webiny/cli": "5.41.2-beta.0",
|
|
22
|
+
"@webiny/project-utils": "5.41.2-beta.0",
|
|
20
23
|
"rimraf": "5.0.5",
|
|
21
24
|
"typescript": "4.9.5"
|
|
22
25
|
},
|
|
@@ -24,5 +27,5 @@
|
|
|
24
27
|
"build": "yarn webiny run build",
|
|
25
28
|
"watch": "yarn webiny run watch"
|
|
26
29
|
},
|
|
27
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "a259e2af938ceb1e2d35b2bef9edcee4459352de"
|
|
28
31
|
}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NonEmptyArray } from "@webiny/api/types";
|
|
2
|
+
export interface IRegistryRegisterParams<T = unknown> {
|
|
3
|
+
item: T;
|
|
4
|
+
app: string;
|
|
5
|
+
tags: NonEmptyArray<string>;
|
|
6
|
+
}
|
|
7
|
+
export interface IRegistryItem<T = unknown> {
|
|
8
|
+
item: T;
|
|
9
|
+
app: string;
|
|
10
|
+
tags: NonEmptyArray<string>;
|
|
11
|
+
}
|
|
12
|
+
export interface IRegistry {
|
|
13
|
+
register<T = unknown>(params: IRegistryRegisterParams<T>): void;
|
|
14
|
+
/**
|
|
15
|
+
* Throws an error if more than one item is found or there is no item found.
|
|
16
|
+
*/
|
|
17
|
+
getOneItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>;
|
|
18
|
+
/**
|
|
19
|
+
* Throws an error if more than one item is found.
|
|
20
|
+
*/
|
|
21
|
+
getItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T> | null;
|
|
22
|
+
getItems<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>[];
|
|
23
|
+
}
|
package/types.js
ADDED
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { NonEmptyArray } from \"@webiny/api/types\";\n\nexport interface IRegistryRegisterParams<T = unknown> {\n item: T;\n app: string;\n tags: NonEmptyArray<string>;\n}\n\nexport interface IRegistryItem<T = unknown> {\n item: T;\n app: string;\n tags: NonEmptyArray<string>;\n}\n\nexport interface IRegistry {\n register<T = unknown>(params: IRegistryRegisterParams<T>): void;\n /**\n * Throws an error if more than one item is found or there is no item found.\n */\n getOneItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>;\n /**\n * Throws an error if more than one item is found.\n */\n getItem<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T> | null;\n getItems<T = unknown>(cb: (item: IRegistryItem<T>) => boolean): IRegistryItem<T>[];\n}\n"],"mappings":"","ignoreList":[]}
|