@webiny/db 0.0.0-unstable.da99e0b846 → 0.0.0-unstable.de38392959

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