@webiny/db 0.0.0-unstable.990c3ab1b6 → 0.0.0-unstable.d16f688daf

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