@webiny/db 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.a9593f74dd
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 +22 -57
- package/index.js.map +1 -1
- 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
|
-
|
|
57
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
}
|
|
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](
|
|
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
|
-
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
2
|
+
"name": "@webiny/db",
|
|
3
|
+
"version": "0.0.0-unstable.a9593f74dd",
|
|
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.a9593f74dd",
|
|
19
|
+
"@webiny/project-utils": "0.0.0-unstable.a9593f74dd",
|
|
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": "a9593f74ddf9ce93263eadb0ddc0807ed343f5ee"
|
|
28
28
|
}
|