@webiny/db 5.35.0-beta.1 → 5.35.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/index.js +5 -36
- package/index.js.map +1 -1
- package/package.json +4 -4
package/index.js
CHANGED
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.Db = exports.Batch = void 0;
|
|
9
|
-
|
|
10
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
|
|
14
10
|
/**
|
|
15
11
|
* TODO Remove when moved all packages to standalone storage opts.
|
|
16
12
|
*/
|
|
13
|
+
|
|
17
14
|
// Generates a short and sortable ID, e.g. "1607677774994.tfz58m".
|
|
18
15
|
const shortId = () => {
|
|
19
16
|
const time = new Date().getTime();
|
|
20
17
|
const uniqueId = Math.random().toString(36).slice(-6);
|
|
21
18
|
return `${time}.${uniqueId}`;
|
|
22
19
|
};
|
|
23
|
-
|
|
24
20
|
// Picks necessary data from received args, ready to be stored in the log table.
|
|
25
21
|
const getCreateLogData = args => {
|
|
26
22
|
const {
|
|
@@ -46,7 +42,6 @@ const getCreateLogData = args => {
|
|
|
46
42
|
} : null
|
|
47
43
|
};
|
|
48
44
|
};
|
|
49
|
-
|
|
50
45
|
class Db {
|
|
51
46
|
constructor({
|
|
52
47
|
driver,
|
|
@@ -56,12 +51,11 @@ class Db {
|
|
|
56
51
|
(0, _defineProperty2.default)(this, "driver", void 0);
|
|
57
52
|
(0, _defineProperty2.default)(this, "table", void 0);
|
|
58
53
|
(0, _defineProperty2.default)(this, "logTable", void 0);
|
|
59
|
-
this.driver = driver;
|
|
60
|
-
|
|
54
|
+
this.driver = driver;
|
|
55
|
+
// @ts-ignore
|
|
61
56
|
this.table = table;
|
|
62
57
|
this.logTable = logTable;
|
|
63
58
|
}
|
|
64
|
-
|
|
65
59
|
async create(args) {
|
|
66
60
|
const createArgs = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, args), {}, {
|
|
67
61
|
table: args.table || this.table
|
|
@@ -69,7 +63,6 @@ class Db {
|
|
|
69
63
|
await this.createLog("create", createArgs);
|
|
70
64
|
return this.driver.create(createArgs);
|
|
71
65
|
}
|
|
72
|
-
|
|
73
66
|
async read(args) {
|
|
74
67
|
const readArgs = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, args), {}, {
|
|
75
68
|
table: args.table || this.table
|
|
@@ -77,7 +70,6 @@ class Db {
|
|
|
77
70
|
await this.createLog("read", readArgs);
|
|
78
71
|
return this.driver.read(readArgs);
|
|
79
72
|
}
|
|
80
|
-
|
|
81
73
|
async update(args) {
|
|
82
74
|
const updateArgs = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, args), {}, {
|
|
83
75
|
table: args.table || this.table
|
|
@@ -85,21 +77,19 @@ class Db {
|
|
|
85
77
|
await this.createLog("update", updateArgs);
|
|
86
78
|
return this.driver.update(updateArgs);
|
|
87
79
|
}
|
|
88
|
-
|
|
89
80
|
async delete(args) {
|
|
90
81
|
const deleteArgs = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, args), {}, {
|
|
91
82
|
table: args.table || this.table
|
|
92
83
|
});
|
|
93
84
|
await this.createLog("delete", deleteArgs);
|
|
94
85
|
return this.driver.delete(deleteArgs);
|
|
95
|
-
}
|
|
96
|
-
|
|
86
|
+
}
|
|
97
87
|
|
|
88
|
+
// Logging functions.
|
|
98
89
|
async createLog(operation, args) {
|
|
99
90
|
if (!this.logTable) {
|
|
100
91
|
return null;
|
|
101
92
|
}
|
|
102
|
-
|
|
103
93
|
const data = getCreateLogData(args);
|
|
104
94
|
return this.driver.createLog({
|
|
105
95
|
operation,
|
|
@@ -108,25 +98,19 @@ class Db {
|
|
|
108
98
|
id: shortId()
|
|
109
99
|
});
|
|
110
100
|
}
|
|
111
|
-
|
|
112
101
|
async readLogs() {
|
|
113
102
|
if (!this.logTable) {
|
|
114
103
|
return null;
|
|
115
104
|
}
|
|
116
|
-
|
|
117
105
|
return this.driver.readLogs({
|
|
118
106
|
table: this.logTable
|
|
119
107
|
});
|
|
120
108
|
}
|
|
121
|
-
|
|
122
109
|
batch() {
|
|
123
110
|
return new Batch(this);
|
|
124
111
|
}
|
|
125
|
-
|
|
126
112
|
}
|
|
127
|
-
|
|
128
113
|
exports.Db = Db;
|
|
129
|
-
|
|
130
114
|
class Batch {
|
|
131
115
|
constructor(db) {
|
|
132
116
|
(0, _defineProperty2.default)(this, "db", void 0);
|
|
@@ -140,54 +124,42 @@ class Batch {
|
|
|
140
124
|
this.meta = {};
|
|
141
125
|
this.operations = [];
|
|
142
126
|
}
|
|
143
|
-
|
|
144
127
|
push(...operations) {
|
|
145
128
|
for (let i = 0; i < operations.length; i++) {
|
|
146
129
|
const item = operations[i];
|
|
147
130
|
this.operations.push(item);
|
|
148
131
|
}
|
|
149
|
-
|
|
150
132
|
return this;
|
|
151
133
|
}
|
|
152
|
-
|
|
153
134
|
create(...args) {
|
|
154
135
|
for (let i = 0; i < args.length; i++) {
|
|
155
136
|
this.push(["create", args[i]]);
|
|
156
137
|
}
|
|
157
|
-
|
|
158
138
|
return this;
|
|
159
139
|
}
|
|
160
|
-
|
|
161
140
|
read(...args) {
|
|
162
141
|
for (let i = 0; i < args.length; i++) {
|
|
163
142
|
this.push(["read", args[i]]);
|
|
164
143
|
}
|
|
165
|
-
|
|
166
144
|
return this;
|
|
167
145
|
}
|
|
168
|
-
|
|
169
146
|
update(...args) {
|
|
170
147
|
for (let i = 0; i < args.length; i++) {
|
|
171
148
|
this.push(["update", args[i]]);
|
|
172
149
|
}
|
|
173
|
-
|
|
174
150
|
return this;
|
|
175
151
|
}
|
|
176
|
-
|
|
177
152
|
delete(...args) {
|
|
178
153
|
for (let i = 0; i < args.length; i++) {
|
|
179
154
|
this.push(["delete", args[i]]);
|
|
180
155
|
}
|
|
181
|
-
|
|
182
156
|
return this;
|
|
183
157
|
}
|
|
184
|
-
|
|
185
158
|
async execute() {
|
|
186
159
|
/**
|
|
187
160
|
* TODO: figure out which exact type to use instead of any.
|
|
188
161
|
*/
|
|
189
162
|
const promises = [];
|
|
190
|
-
|
|
191
163
|
for (let i = 0; i < this.operations.length; i++) {
|
|
192
164
|
const [operation, args] = this.operations[i];
|
|
193
165
|
promises.push(this.db[operation]((0, _objectSpread2.default)((0, _objectSpread2.default)({}, args), {}, {
|
|
@@ -197,11 +169,8 @@ class Batch {
|
|
|
197
169
|
}
|
|
198
170
|
})));
|
|
199
171
|
}
|
|
200
|
-
|
|
201
172
|
const result = Promise.all(promises);
|
|
202
173
|
return result;
|
|
203
174
|
}
|
|
204
|
-
|
|
205
175
|
}
|
|
206
|
-
|
|
207
176
|
exports.Batch = Batch;
|
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","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-ignore\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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"}
|
|
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","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-ignore\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/db",
|
|
3
|
-
"version": "5.35.0
|
|
3
|
+
"version": "5.35.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@babel/cli": "^7.19.3",
|
|
17
17
|
"@babel/core": "^7.19.3",
|
|
18
|
-
"@webiny/cli": "^5.35.0
|
|
19
|
-
"@webiny/project-utils": "^5.35.0
|
|
18
|
+
"@webiny/cli": "^5.35.0",
|
|
19
|
+
"@webiny/project-utils": "^5.35.0",
|
|
20
20
|
"rimraf": "^3.0.2",
|
|
21
21
|
"typescript": "4.7.4"
|
|
22
22
|
},
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"build": "yarn webiny run build",
|
|
25
25
|
"watch": "yarn webiny run watch"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "948cd1e05978e0ed25137ace7dd6c15ed0bf2cca"
|
|
28
28
|
}
|