@verdant-web/server 3.1.0 → 3.1.2
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/bin/server.mjs +133 -0
- package/dist/esm/Server.d.ts +3 -3
- package/dist/esm/Server.js +8 -8
- package/dist/esm/Server.js.map +1 -1
- package/dist/esm/storage/sqlShard/_testData/unifiedData.d.ts +4 -4
- package/dist/esm/storage/sqlShard/_testData/unifiedData.js +8 -8
- package/dist/esm/storage/sqlShard/_testData/unifiedData.js.map +1 -1
- package/dist/esm/storage/sqlShard/sqlShardStorage.js +1 -1
- package/dist/esm/storage/sqlShard/sqlShardStorage.js.map +1 -1
- package/dist/esm/storage/sqlShard/transfer.d.ts +2 -1
- package/dist/esm/storage/sqlShard/transfer.js +21 -7
- package/dist/esm/storage/sqlShard/transfer.js.map +1 -1
- package/dist/esm/storage/sqlShard/transfer.test.js +35 -20
- package/dist/esm/storage/sqlShard/transfer.test.js.map +1 -1
- package/package.json +3 -2
- package/src/Server.ts +8 -11
- package/src/storage/sqlShard/_testData/unifiedData.ts +8 -15
- package/src/storage/sqlShard/sqlShardStorage.ts +1 -1
- package/src/storage/sqlShard/transfer.test.ts +39 -20
- package/src/storage/sqlShard/transfer.ts +27 -11
package/bin/server.mjs
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import { createReadStream } from 'fs';
|
|
4
|
+
import { parse, URLSearchParams } from 'url';
|
|
5
|
+
import {
|
|
6
|
+
LocalFileStorage,
|
|
7
|
+
Server,
|
|
8
|
+
TokenProvider,
|
|
9
|
+
ReplicaType,
|
|
10
|
+
} from '../dist/esm/index.js';
|
|
11
|
+
import { sqlStorage } from '../dist/esm/storage/index.js';
|
|
12
|
+
import minimist from 'minimist';
|
|
13
|
+
|
|
14
|
+
const argv = minimist(process.argv.slice(1));
|
|
15
|
+
|
|
16
|
+
const PORT = argv.port || argv.p || process.env.VERDANT_PORT || 3242;
|
|
17
|
+
const SECRET =
|
|
18
|
+
argv.secret || process.env.VERDANT_SECRET || 'notsecretnotsecretnotsecret';
|
|
19
|
+
|
|
20
|
+
const tokenProvider = new TokenProvider({ secret: SECRET });
|
|
21
|
+
|
|
22
|
+
const http = createServer((req, res) => {
|
|
23
|
+
const url = parse(req.url);
|
|
24
|
+
// write cors headers for incoming host
|
|
25
|
+
const origin = req.headers.origin;
|
|
26
|
+
res.setHeader('Access-Control-Allow-Origin', origin ?? '*');
|
|
27
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
28
|
+
res.setHeader(
|
|
29
|
+
'Access-Control-Allow-Headers',
|
|
30
|
+
'Content-Type, Authorization, X-Request-Id',
|
|
31
|
+
);
|
|
32
|
+
res.setHeader('Access-Control-Allow-Credentials', 'true');
|
|
33
|
+
res.setHeader('Access-Control-Max-Age', '86400');
|
|
34
|
+
if (req.method === 'OPTIONS') {
|
|
35
|
+
res.writeHead(200);
|
|
36
|
+
res.end();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// serve files on the /files path
|
|
41
|
+
if (url.pathname.startsWith('/files/')) {
|
|
42
|
+
const fileStream = createReadStream(`files/${url.pathname.slice(7)}`);
|
|
43
|
+
fileStream.pipe(res);
|
|
44
|
+
fileStream.on('error', (err) => {
|
|
45
|
+
res.writeHead(404);
|
|
46
|
+
res.end();
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// provide tokens on the /auth path
|
|
52
|
+
if (url.pathname.startsWith('/auth/')) {
|
|
53
|
+
// userId is provided as a query param
|
|
54
|
+
const params = new URLSearchParams(url.search);
|
|
55
|
+
const userId = params.get('userId');
|
|
56
|
+
|
|
57
|
+
// library ID is in path
|
|
58
|
+
const libraryId = url.pathname.slice(6);
|
|
59
|
+
|
|
60
|
+
const token = tokenProvider.getToken({
|
|
61
|
+
userId,
|
|
62
|
+
libraryId,
|
|
63
|
+
syncEndpoint: `http://localhost:${PORT}/sync`,
|
|
64
|
+
role: 'user',
|
|
65
|
+
type: ReplicaType.Realtime,
|
|
66
|
+
});
|
|
67
|
+
res.writeHead(200, {
|
|
68
|
+
'Content-Type': 'application/json',
|
|
69
|
+
});
|
|
70
|
+
res.end(JSON.stringify({ accessToken: token }));
|
|
71
|
+
return;
|
|
72
|
+
} else if (url.pathname.startsWith('/sync')) {
|
|
73
|
+
if (url.pathname.startsWith('/sync/files/')) {
|
|
74
|
+
return verdant.handleFileRequest(req, res);
|
|
75
|
+
}
|
|
76
|
+
return verdant.handleRequest(req, res);
|
|
77
|
+
} else {
|
|
78
|
+
res.writeHead(404);
|
|
79
|
+
res.end();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
const verdant = new Server({
|
|
84
|
+
storage: sqlStorage({
|
|
85
|
+
databaseFile: 'verdant.sqlite',
|
|
86
|
+
}),
|
|
87
|
+
tokenSecret: SECRET,
|
|
88
|
+
fileStorage: new LocalFileStorage({
|
|
89
|
+
rootDirectory: 'files',
|
|
90
|
+
host: `http://localhost:${3242}/files`,
|
|
91
|
+
}),
|
|
92
|
+
profiles: {
|
|
93
|
+
get: (userId) => ({
|
|
94
|
+
id: userId,
|
|
95
|
+
}),
|
|
96
|
+
},
|
|
97
|
+
httpServer: http,
|
|
98
|
+
log: (level, ...rest) => {
|
|
99
|
+
if (process.env.VERDANT_LOG === 'false') {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (level === 'debug' && process.env.VERDANT_DEBUG !== 'true') {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log(level, ...rest);
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
verdant.on('error', (err) => {
|
|
110
|
+
console.error(err);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
export default new Promise((resolve) => {
|
|
114
|
+
http.listen(PORT, () => {
|
|
115
|
+
console.log(`🌿 Verdant standalone server listening on port ${PORT}`);
|
|
116
|
+
console.log(``);
|
|
117
|
+
console.log(
|
|
118
|
+
`It's not recommended you use this server in production. It's a convenient way to test syncing locally, but has no authorization.`,
|
|
119
|
+
);
|
|
120
|
+
console.log(``);
|
|
121
|
+
console.log(
|
|
122
|
+
`To connect your client, supply "http://localhost:${PORT}/auth/<libraryId>?userId=<userId>" to sync.authEndpoint.`,
|
|
123
|
+
);
|
|
124
|
+
console.log(
|
|
125
|
+
`<libraryId> and <userId> are up to you and your app. Clients on the same library ID will sync data.`,
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
resolve({
|
|
129
|
+
httpServer: http,
|
|
130
|
+
verdant,
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
package/dist/esm/Server.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
4
|
/// <reference types="node" resolution-mode="require"/>
|
|
5
5
|
/// <reference types="node" resolution-mode="require"/>
|
|
6
|
-
import { DocumentBaseline, Operation, ServerMessage } from '@verdant-web/common';
|
|
6
|
+
import { DocumentBaseline, FileData, Operation, ServerMessage } from '@verdant-web/common';
|
|
7
7
|
import EventEmitter from 'events';
|
|
8
8
|
import { Server as HttpServer, IncomingMessage, ServerResponse } from 'http';
|
|
9
9
|
import internal from 'stream';
|
|
@@ -130,7 +130,7 @@ export declare class Server extends EventEmitter implements MessageSender {
|
|
|
130
130
|
handleFileFetch: (req: Request) => Promise<Response>;
|
|
131
131
|
private getFileStorageOrThrow;
|
|
132
132
|
private streamIncomingFile;
|
|
133
|
-
|
|
133
|
+
getFileData: (library: string, fileId: string) => Promise<FileData>;
|
|
134
134
|
broadcast: (libraryId: string, message: ServerMessage, omitKeys?: string[]) => void;
|
|
135
135
|
send: (libraryId: string, key: string, message: ServerMessage) => void;
|
|
136
136
|
private handleMessage;
|
|
@@ -145,7 +145,7 @@ export declare class Server extends EventEmitter implements MessageSender {
|
|
|
145
145
|
* any replica connects, it will repopulate the library. But
|
|
146
146
|
* you should still be careful.
|
|
147
147
|
*/
|
|
148
|
-
evictLibrary: (libraryId: string) => void
|
|
148
|
+
evictLibrary: (libraryId: string) => Promise<void>;
|
|
149
149
|
/**
|
|
150
150
|
* Returns currently connected replica info for a library
|
|
151
151
|
*/
|
package/dist/esm/Server.js
CHANGED
|
@@ -218,7 +218,7 @@ export class Server extends EventEmitter {
|
|
|
218
218
|
res.end();
|
|
219
219
|
}
|
|
220
220
|
else if (req.method === 'GET') {
|
|
221
|
-
const data = await this.getFileData(info, id);
|
|
221
|
+
const data = await this.getFileData(info.libraryId, id);
|
|
222
222
|
res.writeHead(200, {
|
|
223
223
|
'Content-Type': 'application/json',
|
|
224
224
|
});
|
|
@@ -270,7 +270,7 @@ export class Server extends EventEmitter {
|
|
|
270
270
|
});
|
|
271
271
|
}
|
|
272
272
|
else if (req.method === 'GET') {
|
|
273
|
-
const data = await this.getFileData(info, id);
|
|
273
|
+
const data = await this.getFileData(info.libraryId, id);
|
|
274
274
|
return new Response(JSON.stringify(data), {
|
|
275
275
|
status: 200,
|
|
276
276
|
headers: {
|
|
@@ -340,17 +340,17 @@ export class Server extends EventEmitter {
|
|
|
340
340
|
bb.on('error', reject);
|
|
341
341
|
});
|
|
342
342
|
};
|
|
343
|
-
this.getFileData = async (
|
|
343
|
+
this.getFileData = async (library, fileId) => {
|
|
344
344
|
const fs = this.getFileStorageOrThrow();
|
|
345
345
|
await this.storage.ready;
|
|
346
|
-
const fileInfo = await this.storage.fileMetadata.get(
|
|
346
|
+
const fileInfo = await this.storage.fileMetadata.get(library, fileId);
|
|
347
347
|
if (!fileInfo) {
|
|
348
|
-
throw new VerdantError(VerdantError.Code.NotFound, undefined, `File ${
|
|
348
|
+
throw new VerdantError(VerdantError.Code.NotFound, undefined, `File ${fileId} not found`);
|
|
349
349
|
}
|
|
350
350
|
const url = await fs.getUrl({
|
|
351
351
|
fileName: fileInfo.name,
|
|
352
352
|
id: fileInfo.fileId,
|
|
353
|
-
libraryId:
|
|
353
|
+
libraryId: library,
|
|
354
354
|
type: fileInfo.type,
|
|
355
355
|
});
|
|
356
356
|
return {
|
|
@@ -429,10 +429,10 @@ export class Server extends EventEmitter {
|
|
|
429
429
|
* any replica connects, it will repopulate the library. But
|
|
430
430
|
* you should still be careful.
|
|
431
431
|
*/
|
|
432
|
-
this.evictLibrary = (libraryId) => {
|
|
432
|
+
this.evictLibrary = async (libraryId) => {
|
|
433
433
|
// disconnect all clients
|
|
434
434
|
this.clientConnections.disconnectAll(libraryId);
|
|
435
|
-
this.library.destroy(libraryId);
|
|
435
|
+
await this.library.destroy(libraryId);
|
|
436
436
|
this.log('info', 'Evicted library', libraryId);
|
|
437
437
|
};
|
|
438
438
|
/**
|
package/dist/esm/Server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACN,MAAM,EAEN,SAAS,EAGT,UAAU,EAGV,YAAY,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAmC,MAAM,MAAM,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAiB,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAa,eAAe,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAgB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmD9D,MAAM,eAAe;IAArB;QACC,QAAG,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC;IACH,CAAC;CAAA;AA8BD,MAAM,OAAO,MAAO,SAAQ,YAAY;IAkBvC,YAAY,OAAsB;;QACjC,KAAK,EAAE,CAAC;QAZD,sBAAiB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAClD,eAAU,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAI1C,6BAAwB,GAAG,IAAI,OAAO,EAAqB,CAAC;QAE5D,QAAG,GAA6B,GAAG,EAAE,GAAE,CAAC,CAAC;QAEzC,eAAU,GAAG,KAAK,CAAC;QAsD3B;;;;;;;WAOG;QACH,WAAM,GAAG,CACR,MAAkB,EAClB,UAAyC,EAAE,EAC1C,EAAE;YACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAElD,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,EAAE,CACjB,SAAS,EACT,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CACnD,CAAC;YACH,CAAC;QACF,CAAC,CAAC;QAEF;;WAEG;QACH,kBAAa,GAAG,KAAK,EACpB,GAAoB,EACpB,MAAuB,EACvB,IAAY,EACX,EAAE;YACH,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;oBAChD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,YAAY,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBACvD,MAAM,CAAC,KAAK,CACX,+BAA+B;wBAC9B,uBAAuB;wBACvB,uBAAuB;wBACvB,MAAM,CACP,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;QACF,CAAC,CAAC;QAEM,qBAAgB,GAAG,CAAC,GAA8B,EAAE,EAAE;YAC7D,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC;QAEM,oBAAe,GAAG,CAAC,GAA8B,EAAE,EAAE;YAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACpD,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;gBACxC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YAED,IAAI,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBAC3C,0DAA0D;gBAC1D,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;gBACrB,CAAC;YACF,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QAEM,iCAA4B,GAAG,CAAC,UAAU,GAAG,OAAO,EAAE,EAAE;YAC/D,MAAM,aAAa,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;gBACnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;gBACvD,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrC,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;wBAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;wBACpD,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACzC,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACX,CAAC;YACF,CAAC,CAAC;YACF,OAAO,aAAa,CAAC;QACtB,CAAC,CAAC;QAEF;;WAEG;QACH,kBAAa,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;;YACnE,IAAI,CAAC;gBACJ,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAExC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;oBAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAC/C,IAAI,CAAC,SAAS,EACd,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,CACJ,CAAC;oBAEF,yDAAyD;oBACzD,aAAa;oBACb,MAAM,IAAI,GAGT,MAAC,GAAW,CAAC,IAAI,mCACjB,CAAC,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;wBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;4BACxB,IAAI,IAAI,KAAK,CAAC;wBACf,CAAC,CAAC,CAAC;wBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;4BAClB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC3B,CAAC,CAAC,CAAC;wBACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACrB,MAAM,CAAC,CAAC,CAAC,CAAC;wBACX,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC,CAAC;oBAEL,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAE9C,MAAM,EAAE,CAAC;oBAET,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;QACF,CAAC,CAAC;QAEF;;;WAGG;QACH,gBAAW,GAAG,KAAK,EAAE,GAAY,EAAqB,EAAE;YACvD,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;gBAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAC7C,IAAI,CAAC,SAAS,EACd,GAAG,EACH,GAAG,EACH,IAAI,CACJ,CAAC;gBAEF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAGlB,CAAC;gBAEb,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;gBAErB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAE3B,OAAO,GAAG,CAAC;YACZ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;QACF,CAAC,CAAC;QAEM,sBAAiB,GAAG,KAAK,EAChC,GAAW,EACX,IAAe,EACf,IAAmC,EAClC,EAAE;YACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;YAED,sDAAsD;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACjE,CAAC;QACF,CAAC,CAAC;QAgDF;;;;WAIG;QACH,sBAAiB,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACvE,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAExC,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAW,CAAC,WAAW,IAAK,GAAW,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,EACjE,kBAAkB,CAClB,CAAC;gBAEF,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAEzC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC3B,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC;wBAC7B,GAAG;wBACH,IAAI;wBACJ,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,EAAE;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;oBAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC7C,GAAG,CAAC,GAAG,EAAE,CAAC;gBACX,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;wBAClB,cAAc,EAAE,kBAAkB;qBAClC,CAAC,CAAC;oBACH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACX,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;QACF,CAAC,CAAC;QAEF;;;WAGG;QACH,oBAAe,GAAG,KAAK,EAAE,GAAY,EAAqB,EAAE;YAC3D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAExC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBAEjD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAEzC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC3B,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wBACf,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC1D,CAAC;oBAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAC/D,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;wBACjB,OAAO,GAAG,CAAC;oBACZ,CAAC,EACD,EAAmD,CACnD,CAAC;oBAEF,iDAAiD;oBACjD,+BAA+B;oBAC/B,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;oBAC3C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAEvC,MAAM,IAAI,CAAC,kBAAkB,CAAC;wBAC7B,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;wBAC5C,IAAI;wBACJ,OAAO,EAAE,eAAe;wBACxB,EAAE;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;oBAC7C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;wBACtD,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE;4BACR,cAAc,EAAE,kBAAkB;yBAClC;qBACD,CAAC,CAAC;gBACJ,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBACzC,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE;4BACR,cAAc,EAAE,kBAAkB;yBAClC;qBACD,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC1D,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;QACF,CAAC,CAAC;QAEM,0BAAqB,GAAG,GAAG,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvB,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC;QACzB,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,EAC7B,EAAE,EACF,GAAG,EACH,OAAO,EACP,IAAI,GAMJ,EAAE,EAAE;YACJ,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAExC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACtC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBAE/B,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;oBACnD,uBAAuB;oBACvB,MAAM,YAAY,GAAa;wBAC9B,EAAE;wBACF,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,IAAI,EAAE,QAAQ,CAAC,QAAQ;qBACvB,CAAC;oBACF,4BAA4B;oBAC5B,IAAI,CAAC;wBACJ,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;wBACzB,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;wBAClE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC9B,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,MAAM,CAAC,CAAC,CAAC,CAAC;oBACX,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;oBACnC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBAC1B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,0DAA0D;4BAC1D,iCAAiC;4BACjC,wDAAwD;4BACxD,qBAAqB;4BACrB,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;4BAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAClB,MAAM,QAAQ,GAAG;gCAChB,QAAQ,EAAE,UAAU;gCACpB,QAAQ,EAAE,YAAY;6BACtB,CAAC;4BACF,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;wBAC9C,CAAC;6BAAM,CAAC;4BACP,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBACxC,CAAC;oBACF,CAAC;gBACF,CAAC,CAAC,CAAC;gBAEH,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACb,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEM,gBAAW,GAAG,KAAK,EAC1B,IAAe,EACf,EAAU,EACU,EAAE;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAExC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,YAAY,CACrB,YAAY,CAAC,IAAI,CAAC,QAAQ,EAC1B,SAAS,EACT,QAAQ,EAAE,YAAY,CACtB,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,EAAE,EAAE,QAAQ,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO;gBACN,EAAE,EAAE,QAAQ,CAAC,MAAM;gBACnB,GAAG;gBACH,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACnB,CAAC;QACH,CAAC,CAAC;QAEF,cAAS,GAAG,CACX,SAAiB,EACjB,OAAsB,EACtB,WAAqB,EAAE,EACtB,EAAE;YACH,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC,CAAC;QAEF,SAAI,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAE,OAAsB,EAAE,EAAE;YACjE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC;QAEM,kBAAa,GAAG,CACvB,SAAiB,EACjB,IAAe,EACf,OAAsB,EACrB,EAAE;YACH,IAAI,CAAC,GAAG,CACP,OAAO,EACP,uBAAuB,EACvB,IAAI,CAAC,MAAM,EACX,WAAW,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACvB,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC;QAEM,qBAAgB,GAAG,CAC1B,EAAa,EACb,GAAoB,EACpB,IAAe,EACd,EAAE;YACH,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YAEzB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAEhE,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAY,EAAE,EAAE;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAkB,CAAC;gBAE7D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBACtD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzD,CAAC;gBAED,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC;oBACzD,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAE/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,WAAM,GAAG,CAAC,GAAG,MAAwC,EAAE,EAAE;YACxD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC;QAEF,UAAK,GAAG,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC7B,UAAU,CAAC,GAAG,EAAE;wBACf,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;wBAChD,OAAO,EAAE,CAAC;oBACX,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBACb,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC1B,OAAO,EAAE,CAAC;wBACV,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;oBACxC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC;gBACF,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC7B,UAAU,CAAC,GAAG,EAAE;wBACf,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;wBAClD,OAAO,EAAE,CAAC;oBACX,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;wBACnB,OAAO,EAAE,CAAC;wBACV,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC;aACF,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC,CAAC;QAEF;;;;;;;WAOG;QACH,iBAAY,GAAG,CAAC,SAAiB,EAAE,EAAE;YACpC,yBAAyB;YACzB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF;;WAEG;QACH,uBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE;YAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF;;;;WAIG;QACH,mBAAc,GAAG,CAAC,SAAiB,EAAE,EAAE;YACtC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF;;;;WAIG;QACH,cAAS,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC;QAEF;;;;WAIG;QACH,wBAAmB,GAAG,CACrB,SAAiB,EACjB,UAAkB,EAClB,UAAkB,EACjB,EAAE;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CACtC,SAAS,EACT,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CACjC,CAAC;QACH,CAAC,CAAC;QAlpBD,IAAI,CAAC,UAAU;YACd,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;QAElE,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAEnC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC;YACtC,MAAM,EAAE,OAAO,CAAC,WAAW;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC9B,wBAAwB,EAAE,MAAA,MAAA,OAAO,CAAC,UAAU,0CAAE,oBAAoB,mCAAI,EAAE;YACxE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,iBAAiB,CAC9B,OAAO,CAAC,QAAQ,IAAI,IAAI,eAAe,EAAE,CACzC;YACD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,SAAS,CACrB,SAAS,EACT,CAAC,EAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;gBAA7C,EAAE,KAAK,OAAW,EAAN,IAAI,cAAhB,SAAkB,CAAF;YAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC,CACD,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC;YAC9B,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,+EAA+E;YAC/E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAkNO,kBAAkB,CAAC,CAAU,EAAE,GAAmB;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;YAC/B,+BAA+B;YAC/B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC5B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,KAAK,CACR,IAAI,CAAC,SAAS,CACb,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAC3D,CACD,CAAC;QACH,CAAC;QACD,GAAG,CAAC,GAAG,EAAE,CAAC;IACX,CAAC;IAED,kBAAkB;IACV,gBAAgB,CAAC,CAAU;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE;gBACnD,MAAM,EAAE,CAAC,CAAC,UAAU;gBACpB,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;iBAClC;aACD,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,QAAQ,CAClB,IAAI,CAAC,SAAS,CACb,IAAI,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAC3D,EACD;gBACC,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;iBAClC;aACD,CACD,CAAC;QACH,CAAC;IACF,CAAC;CAsWD;AAED,SAAS,OAAO,CAAC,OAAkC;IAClD,OAAO,MAAM,IAAI,OAAO,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function randomOperations(libraryId: string): {
|
|
1
|
+
export declare function randomOperations(libraryId: string, count?: number): {
|
|
2
2
|
oid: string;
|
|
3
3
|
timestamp: string;
|
|
4
4
|
data: string;
|
|
@@ -6,20 +6,20 @@ export declare function randomOperations(libraryId: string): {
|
|
|
6
6
|
replicaId: string;
|
|
7
7
|
libraryId: string;
|
|
8
8
|
}[];
|
|
9
|
-
export declare function randomBaselines(libraryId: string): {
|
|
9
|
+
export declare function randomBaselines(libraryId: string, count?: number): {
|
|
10
10
|
oid: string;
|
|
11
11
|
snapshot: string;
|
|
12
12
|
timestamp: string;
|
|
13
13
|
libraryId: string;
|
|
14
14
|
}[];
|
|
15
|
-
export declare function randomFileMetadata(libraryId: string): {
|
|
15
|
+
export declare function randomFileMetadata(libraryId: string, count?: number): {
|
|
16
16
|
libraryId: string;
|
|
17
17
|
fileId: string;
|
|
18
18
|
name: string;
|
|
19
19
|
type: string;
|
|
20
20
|
pendingDeleteAt: number;
|
|
21
21
|
}[];
|
|
22
|
-
export declare function randomReplicaInfo(libraryId: string): {
|
|
22
|
+
export declare function randomReplicaInfo(libraryId: string, count?: number): {
|
|
23
23
|
libraryId: string;
|
|
24
24
|
id: string;
|
|
25
25
|
clientId: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
function random() {
|
|
2
2
|
return Math.random().toString(36).substring(7);
|
|
3
3
|
}
|
|
4
|
-
export function randomOperations(libraryId) {
|
|
5
|
-
return Array.from({ length:
|
|
4
|
+
export function randomOperations(libraryId, count = 10) {
|
|
5
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
6
6
|
oid: `oid-${i}-${random()}`,
|
|
7
7
|
timestamp: `timestamp-${i}-${random()}`,
|
|
8
8
|
data: `data-${i}-${random()}`,
|
|
@@ -11,16 +11,16 @@ export function randomOperations(libraryId) {
|
|
|
11
11
|
libraryId,
|
|
12
12
|
}));
|
|
13
13
|
}
|
|
14
|
-
export function randomBaselines(libraryId) {
|
|
15
|
-
return Array.from({ length:
|
|
14
|
+
export function randomBaselines(libraryId, count = 10) {
|
|
15
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
16
16
|
oid: `oid-${i}-${random()}`,
|
|
17
17
|
snapshot: `snapshot-${i}-${random()}`,
|
|
18
18
|
timestamp: `timestamp-${i}-${random()}`,
|
|
19
19
|
libraryId,
|
|
20
20
|
}));
|
|
21
21
|
}
|
|
22
|
-
export function randomFileMetadata(libraryId) {
|
|
23
|
-
return Array.from({ length:
|
|
22
|
+
export function randomFileMetadata(libraryId, count = 10) {
|
|
23
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
24
24
|
libraryId,
|
|
25
25
|
fileId: `fileId-${i}-${random()}`,
|
|
26
26
|
name: `name-${i}-${random()}`,
|
|
@@ -28,8 +28,8 @@ export function randomFileMetadata(libraryId) {
|
|
|
28
28
|
pendingDeleteAt: i,
|
|
29
29
|
}));
|
|
30
30
|
}
|
|
31
|
-
export function randomReplicaInfo(libraryId) {
|
|
32
|
-
return Array.from({ length:
|
|
31
|
+
export function randomReplicaInfo(libraryId, count = 10) {
|
|
32
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
33
33
|
libraryId,
|
|
34
34
|
id: `replicaId-${i}`,
|
|
35
35
|
clientId: `clientId-${i}-${random()}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unifiedData.js","sourceRoot":"","sources":["../../../../../src/storage/sqlShard/_testData/unifiedData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unifiedData.js","sourceRoot":"","sources":["../../../../../src/storage/sqlShard/_testData/unifiedData.ts"],"names":[],"mappings":"AAAA,SAAS,MAAM;IACd,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,EAAE;QAC3B,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,EAAE,EAAE;QACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,EAAE;QAC7B,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,aAAa,CAAC,EAAE;QAC3B,SAAS;KACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,EAAE;QAC3B,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,EAAE,EAAE;QACrC,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,EAAE,EAAE;QACvC,SAAS;KACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,SAAS;QACT,MAAM,EAAE,UAAU,CAAC,IAAI,MAAM,EAAE,EAAE;QACjC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,EAAE;QAC7B,IAAI,EAAE,QAAQ,CAAC,EAAE;QACjB,eAAe,EAAE,CAAC;KAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,SAAS;QACT,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,EAAE,EAAE;QACrC,qBAAqB,EAAE,CAAC;QACxB,gBAAgB,EAAE,oBAAoB,CAAC,IAAI,MAAM,EAAE,EAAE;QACrD,IAAI,EAAE,CAAC;QACP,gBAAgB,EAAE,CAAC;KACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { transferToShards } from './transfer.js';
|
|
|
7
7
|
import { existsSync, mkdirSync, readdirSync } from 'fs';
|
|
8
8
|
export const sqlShardStorage = ({ databasesDirectory, transferFromUnifiedDatabaseFile, disableWal, closeTimeout, }) => {
|
|
9
9
|
let ready = Promise.resolve(undefined);
|
|
10
|
-
if (!existsSync(databasesDirectory)) {
|
|
10
|
+
if (databasesDirectory !== ':memory:' && !existsSync(databasesDirectory)) {
|
|
11
11
|
mkdirSync(databasesDirectory);
|
|
12
12
|
console.info(`Created databases directory: ${databasesDirectory}`);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlShardStorage.js","sourceRoot":"","sources":["../../../../src/storage/sqlShard/sqlShardStorage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC/B,kBAAkB,EAClB,+BAA+B,EAC/B,UAAU,EACV,YAAY,GAMZ,EAAkB,EAAE;IACpB,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAO,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlShardStorage.js","sourceRoot":"","sources":["../../../../src/storage/sqlShard/sqlShardStorage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC/B,kBAAkB,EAClB,+BAA+B,EAC/B,UAAU,EACV,YAAY,GAMZ,EAAkB,EAAE;IACpB,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAO,SAAS,CAAC,CAAC;IAC7C,IAAI,kBAAkB,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1E,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,gCAAgC,kBAAkB,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,+BAA+B,EAAE,CAAC;QACrC,8BAA8B;QAC9B,MAAM,KAAK,GACV,kBAAkB,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CACZ,iEAAiE,kBAAkB,6HAA6H,CAChN,CAAC;QACH,CAAC;aAAM,CAAC;YACP,KAAK,GAAG,gBAAgB,CAAC;gBACxB,IAAI,EAAE,+BAA+B;gBACrC,SAAS,EAAE,kBAAkB;aAC7B,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;QACzB,SAAS,EAAE,kBAAkB;QAC7B,UAAU;QACV,YAAY;KACZ,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAC/B,GAAG,EACH,OAAO,CAAC,qBAAqB,EAC7B,QAAQ,CACR,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,eAAe,CACvC,GAAG,EACH,OAAO,CAAC,wBAAwB,EAChC,QAAQ,CACR,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;YACrB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG;YACf,SAAS;YACT,UAAU;YACV,QAAQ;YACR,YAAY;YACZ,KAAK;YACL,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC,CAAC;SACF,CAAC;QACF,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Kysely } from 'kysely';
|
|
2
2
|
import { Database } from './tables.js';
|
|
3
|
-
export declare function transferToShards({ file, directory, }: {
|
|
3
|
+
export declare function transferToShards({ file, directory, batchSize, }: {
|
|
4
4
|
file: string;
|
|
5
5
|
directory: string;
|
|
6
|
+
batchSize?: number;
|
|
6
7
|
}): Promise<Record<string, Kysely<Database>>>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { openDatabase as openUnifiedDatabase } from '../sql/database.js';
|
|
2
2
|
import { openDatabase } from './database.js';
|
|
3
|
-
|
|
3
|
+
const DEFAULT_BATCH_SIZE = 1000;
|
|
4
|
+
export async function transferToShards({ file, directory, batchSize = DEFAULT_BATCH_SIZE, }) {
|
|
4
5
|
console.info(`Transferring from unified database (${file}) to shards (${directory})...`);
|
|
5
6
|
const { db: unifiedDb, ready } = openUnifiedDatabase(file);
|
|
6
7
|
await ready;
|
|
@@ -11,7 +12,7 @@ export async function transferToShards({ file, directory, }) {
|
|
|
11
12
|
.execute();
|
|
12
13
|
const dbs = await Promise.all(libraries.map(async ({ libraryId }) => {
|
|
13
14
|
const db = await openDatabase(directory, libraryId);
|
|
14
|
-
await copyLibrary(libraryId, unifiedDb, db);
|
|
15
|
+
await copyLibrary(libraryId, unifiedDb, db, batchSize);
|
|
15
16
|
return db;
|
|
16
17
|
}));
|
|
17
18
|
return libraries.reduce((acc, { libraryId }, i) => {
|
|
@@ -19,7 +20,7 @@ export async function transferToShards({ file, directory, }) {
|
|
|
19
20
|
return acc;
|
|
20
21
|
}, {});
|
|
21
22
|
}
|
|
22
|
-
async function copyLibrary(libraryId, source, dest) {
|
|
23
|
+
async function copyLibrary(libraryId, source, dest, batchSize) {
|
|
23
24
|
const operations = await source
|
|
24
25
|
.selectFrom('OperationHistory')
|
|
25
26
|
.where('libraryId', '=', libraryId)
|
|
@@ -58,17 +59,30 @@ async function copyLibrary(libraryId, source, dest) {
|
|
|
58
59
|
}
|
|
59
60
|
await dest.transaction().execute(async (trx) => {
|
|
60
61
|
const actions = [];
|
|
62
|
+
// batch insert data to avoid maximum vars limits
|
|
61
63
|
if (operations.length) {
|
|
62
|
-
|
|
64
|
+
for (let i = 0; i < operations.length; i += batchSize) {
|
|
65
|
+
const toInsert = operations.slice(i, i + batchSize);
|
|
66
|
+
actions.push(trx.insertInto('OperationHistory').values(toInsert).execute());
|
|
67
|
+
}
|
|
63
68
|
}
|
|
64
69
|
if (baselines.length) {
|
|
65
|
-
|
|
70
|
+
for (let i = 0; i < baselines.length; i += batchSize) {
|
|
71
|
+
const toInsert = baselines.slice(i, i + batchSize);
|
|
72
|
+
actions.push(trx.insertInto('DocumentBaseline').values(toInsert).execute());
|
|
73
|
+
}
|
|
66
74
|
}
|
|
67
75
|
if (replicas.length) {
|
|
68
|
-
|
|
76
|
+
for (let i = 0; i < replicas.length; i += batchSize) {
|
|
77
|
+
const toInsert = replicas.slice(i, i + batchSize);
|
|
78
|
+
actions.push(trx.insertInto('ReplicaInfo').values(toInsert).execute());
|
|
79
|
+
}
|
|
69
80
|
}
|
|
70
81
|
if (fileMetadata.length) {
|
|
71
|
-
|
|
82
|
+
for (let i = 0; i < fileMetadata.length; i += batchSize) {
|
|
83
|
+
const toInsert = fileMetadata.slice(i, i + batchSize);
|
|
84
|
+
actions.push(trx.insertInto('FileMetadata').values(toInsert).execute());
|
|
85
|
+
}
|
|
72
86
|
}
|
|
73
87
|
await Promise.all(actions);
|
|
74
88
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../../src/storage/sqlShard/transfer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACtC,IAAI,EACJ,SAAS,
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../../src/storage/sqlShard/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,15 @@ describe('sql-shard storage transfer utility', () => {
|
|
|
17
17
|
await mkdir(testTempDir, { recursive: true });
|
|
18
18
|
});
|
|
19
19
|
afterAll(async () => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
try {
|
|
21
|
+
await Promise.all(databases.map((db) => db.destroy()));
|
|
22
|
+
// empty the temp dir
|
|
23
|
+
await rm(testTempDir, { recursive: true });
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
// what can you do...
|
|
27
|
+
console.error(err);
|
|
28
|
+
}
|
|
23
29
|
});
|
|
24
30
|
it('should transfer data from unified database to shards', async () => {
|
|
25
31
|
const unifiedFile = join(testTempDir, 'unified.sqlite');
|
|
@@ -30,27 +36,36 @@ describe('sql-shard storage transfer utility', () => {
|
|
|
30
36
|
const randomData = {};
|
|
31
37
|
for (const libraryId of libraryIds) {
|
|
32
38
|
randomData[libraryId] = {
|
|
33
|
-
|
|
39
|
+
// test a lot of them - more than max sqlite var count.
|
|
40
|
+
// only doing operations here to reduce test time.
|
|
41
|
+
operations: randomOperations(libraryId, 6000),
|
|
34
42
|
baselines: randomBaselines(libraryId),
|
|
35
43
|
replicas: randomReplicaInfo(libraryId),
|
|
36
44
|
fileMetadata: randomFileMetadata(libraryId),
|
|
37
45
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
// have to batch these...
|
|
47
|
+
for (let i = 0; i < randomData[libraryId].operations.length; i += 1000) {
|
|
48
|
+
const toInsert = randomData[libraryId].operations.slice(i, i + 1000);
|
|
49
|
+
await unifiedDb
|
|
50
|
+
.insertInto('OperationHistory')
|
|
51
|
+
.values(toInsert)
|
|
52
|
+
.execute();
|
|
53
|
+
}
|
|
54
|
+
for (let i = 0; i < randomData[libraryId].baselines.length; i += 1000) {
|
|
55
|
+
const toInsert = randomData[libraryId].baselines.slice(i, i + 1000);
|
|
56
|
+
await unifiedDb
|
|
57
|
+
.insertInto('DocumentBaseline')
|
|
58
|
+
.values(toInsert)
|
|
59
|
+
.execute();
|
|
60
|
+
}
|
|
61
|
+
for (let i = 0; i < randomData[libraryId].fileMetadata.length; i += 1000) {
|
|
62
|
+
const toInsert = randomData[libraryId].fileMetadata.slice(i, i + 1000);
|
|
63
|
+
await unifiedDb.insertInto('FileMetadata').values(toInsert).execute();
|
|
64
|
+
}
|
|
65
|
+
for (let i = 0; i < randomData[libraryId].replicas.length; i += 1000) {
|
|
66
|
+
const toInsert = randomData[libraryId].replicas.slice(i, i + 1000);
|
|
67
|
+
await unifiedDb.insertInto('ReplicaInfo').values(toInsert).execute();
|
|
68
|
+
}
|
|
54
69
|
}
|
|
55
70
|
const shards = await transferToShards({
|
|
56
71
|
directory: testTempDir,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.test.js","sourceRoot":"","sources":["../../../../src/storage/sqlShard/transfer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AASpC,MAAM,WAAW,GAAG,IAAI,CACvB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC,WAAW,EACX,KAAK,CACL,CAAC;AAEF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACnD,MAAM,SAAS,GAAG,IAAI,KAAK,EAAe,CAAC;IAC3C,SAAS,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC,CAAA,CAAC;QAChB,oBAAoB;QACpB,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"transfer.test.js","sourceRoot":"","sources":["../../../../src/storage/sqlShard/transfer.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdant-web/server",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"access": "public",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist/",
|
|
24
|
-
"src/"
|
|
24
|
+
"src/",
|
|
25
|
+
"bin/"
|
|
25
26
|
],
|
|
26
27
|
"dependencies": {
|
|
27
28
|
"@a-type/kysely": "^1.0.1",
|
package/src/Server.ts
CHANGED
|
@@ -463,7 +463,7 @@ export class Server extends EventEmitter implements MessageSender {
|
|
|
463
463
|
res.write(JSON.stringify({ success: true }));
|
|
464
464
|
res.end();
|
|
465
465
|
} else if (req.method === 'GET') {
|
|
466
|
-
const data = await this.getFileData(info, id);
|
|
466
|
+
const data = await this.getFileData(info.libraryId, id);
|
|
467
467
|
res.writeHead(200, {
|
|
468
468
|
'Content-Type': 'application/json',
|
|
469
469
|
});
|
|
@@ -524,7 +524,7 @@ export class Server extends EventEmitter implements MessageSender {
|
|
|
524
524
|
},
|
|
525
525
|
});
|
|
526
526
|
} else if (req.method === 'GET') {
|
|
527
|
-
const data = await this.getFileData(info, id);
|
|
527
|
+
const data = await this.getFileData(info.libraryId, id);
|
|
528
528
|
return new Response(JSON.stringify(data), {
|
|
529
529
|
status: 200,
|
|
530
530
|
headers: {
|
|
@@ -606,26 +606,23 @@ export class Server extends EventEmitter implements MessageSender {
|
|
|
606
606
|
});
|
|
607
607
|
};
|
|
608
608
|
|
|
609
|
-
|
|
610
|
-
info: TokenInfo,
|
|
611
|
-
id: string,
|
|
612
|
-
): Promise<FileData> => {
|
|
609
|
+
getFileData = async (library: string, fileId: string): Promise<FileData> => {
|
|
613
610
|
const fs = this.getFileStorageOrThrow();
|
|
614
611
|
|
|
615
612
|
await this.storage.ready;
|
|
616
|
-
const fileInfo = await this.storage.fileMetadata.get(
|
|
613
|
+
const fileInfo = await this.storage.fileMetadata.get(library, fileId);
|
|
617
614
|
if (!fileInfo) {
|
|
618
615
|
throw new VerdantError(
|
|
619
616
|
VerdantError.Code.NotFound,
|
|
620
617
|
undefined,
|
|
621
|
-
`File ${
|
|
618
|
+
`File ${fileId} not found`,
|
|
622
619
|
);
|
|
623
620
|
}
|
|
624
621
|
|
|
625
622
|
const url = await fs.getUrl({
|
|
626
623
|
fileName: fileInfo.name,
|
|
627
624
|
id: fileInfo.fileId,
|
|
628
|
-
libraryId:
|
|
625
|
+
libraryId: library,
|
|
629
626
|
type: fileInfo.type,
|
|
630
627
|
});
|
|
631
628
|
|
|
@@ -739,10 +736,10 @@ export class Server extends EventEmitter implements MessageSender {
|
|
|
739
736
|
* any replica connects, it will repopulate the library. But
|
|
740
737
|
* you should still be careful.
|
|
741
738
|
*/
|
|
742
|
-
evictLibrary = (libraryId: string) => {
|
|
739
|
+
evictLibrary = async (libraryId: string) => {
|
|
743
740
|
// disconnect all clients
|
|
744
741
|
this.clientConnections.disconnectAll(libraryId);
|
|
745
|
-
this.library.destroy(libraryId);
|
|
742
|
+
await this.library.destroy(libraryId);
|
|
746
743
|
this.log('info', 'Evicted library', libraryId);
|
|
747
744
|
};
|
|
748
745
|
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
OperationHistoryRow,
|
|
3
|
-
DocumentBaselineRow,
|
|
4
|
-
FileMetadataRow,
|
|
5
|
-
ReplicaInfoRow,
|
|
6
|
-
} from '../../sql/tables.js';
|
|
7
|
-
|
|
8
1
|
function random() {
|
|
9
2
|
return Math.random().toString(36).substring(7);
|
|
10
3
|
}
|
|
11
4
|
|
|
12
|
-
export function randomOperations(libraryId: string) {
|
|
13
|
-
return Array.from({ length:
|
|
5
|
+
export function randomOperations(libraryId: string, count = 10) {
|
|
6
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
14
7
|
oid: `oid-${i}-${random()}`,
|
|
15
8
|
timestamp: `timestamp-${i}-${random()}`,
|
|
16
9
|
data: `data-${i}-${random()}`,
|
|
@@ -20,8 +13,8 @@ export function randomOperations(libraryId: string) {
|
|
|
20
13
|
}));
|
|
21
14
|
}
|
|
22
15
|
|
|
23
|
-
export function randomBaselines(libraryId: string) {
|
|
24
|
-
return Array.from({ length:
|
|
16
|
+
export function randomBaselines(libraryId: string, count = 10) {
|
|
17
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
25
18
|
oid: `oid-${i}-${random()}`,
|
|
26
19
|
snapshot: `snapshot-${i}-${random()}`,
|
|
27
20
|
timestamp: `timestamp-${i}-${random()}`,
|
|
@@ -29,8 +22,8 @@ export function randomBaselines(libraryId: string) {
|
|
|
29
22
|
}));
|
|
30
23
|
}
|
|
31
24
|
|
|
32
|
-
export function randomFileMetadata(libraryId: string) {
|
|
33
|
-
return Array.from({ length:
|
|
25
|
+
export function randomFileMetadata(libraryId: string, count = 10) {
|
|
26
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
34
27
|
libraryId,
|
|
35
28
|
fileId: `fileId-${i}-${random()}`,
|
|
36
29
|
name: `name-${i}-${random()}`,
|
|
@@ -39,8 +32,8 @@ export function randomFileMetadata(libraryId: string) {
|
|
|
39
32
|
}));
|
|
40
33
|
}
|
|
41
34
|
|
|
42
|
-
export function randomReplicaInfo(libraryId: string) {
|
|
43
|
-
return Array.from({ length:
|
|
35
|
+
export function randomReplicaInfo(libraryId: string, count = 10) {
|
|
36
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
44
37
|
libraryId,
|
|
45
38
|
id: `replicaId-${i}`,
|
|
46
39
|
clientId: `clientId-${i}-${random()}`,
|
|
@@ -24,7 +24,7 @@ export const sqlShardStorage = ({
|
|
|
24
24
|
closeTimeout?: number;
|
|
25
25
|
}): StorageFactory => {
|
|
26
26
|
let ready = Promise.resolve<void>(undefined);
|
|
27
|
-
if (!existsSync(databasesDirectory)) {
|
|
27
|
+
if (databasesDirectory !== ':memory:' && !existsSync(databasesDirectory)) {
|
|
28
28
|
mkdirSync(databasesDirectory);
|
|
29
29
|
console.info(`Created databases directory: ${databasesDirectory}`);
|
|
30
30
|
}
|
|
@@ -34,9 +34,14 @@ describe('sql-shard storage transfer utility', () => {
|
|
|
34
34
|
await mkdir(testTempDir, { recursive: true });
|
|
35
35
|
});
|
|
36
36
|
afterAll(async () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
try {
|
|
38
|
+
await Promise.all(databases.map((db) => db.destroy()));
|
|
39
|
+
// empty the temp dir
|
|
40
|
+
await rm(testTempDir, { recursive: true });
|
|
41
|
+
} catch (err) {
|
|
42
|
+
// what can you do...
|
|
43
|
+
console.error(err);
|
|
44
|
+
}
|
|
40
45
|
});
|
|
41
46
|
|
|
42
47
|
it('should transfer data from unified database to shards', async () => {
|
|
@@ -56,27 +61,41 @@ describe('sql-shard storage transfer utility', () => {
|
|
|
56
61
|
>;
|
|
57
62
|
for (const libraryId of libraryIds) {
|
|
58
63
|
randomData[libraryId] = {
|
|
59
|
-
|
|
64
|
+
// test a lot of them - more than max sqlite var count.
|
|
65
|
+
// only doing operations here to reduce test time.
|
|
66
|
+
operations: randomOperations(libraryId, 6000),
|
|
60
67
|
baselines: randomBaselines(libraryId),
|
|
61
68
|
replicas: randomReplicaInfo(libraryId),
|
|
62
69
|
fileMetadata: randomFileMetadata(libraryId),
|
|
63
70
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
|
|
72
|
+
// have to batch these...
|
|
73
|
+
for (let i = 0; i < randomData[libraryId].operations.length; i += 1000) {
|
|
74
|
+
const toInsert = randomData[libraryId].operations.slice(i, i + 1000);
|
|
75
|
+
await unifiedDb
|
|
76
|
+
.insertInto('OperationHistory')
|
|
77
|
+
.values(toInsert)
|
|
78
|
+
.execute();
|
|
79
|
+
}
|
|
80
|
+
for (let i = 0; i < randomData[libraryId].baselines.length; i += 1000) {
|
|
81
|
+
const toInsert = randomData[libraryId].baselines.slice(i, i + 1000);
|
|
82
|
+
await unifiedDb
|
|
83
|
+
.insertInto('DocumentBaseline')
|
|
84
|
+
.values(toInsert)
|
|
85
|
+
.execute();
|
|
86
|
+
}
|
|
87
|
+
for (
|
|
88
|
+
let i = 0;
|
|
89
|
+
i < randomData[libraryId].fileMetadata.length;
|
|
90
|
+
i += 1000
|
|
91
|
+
) {
|
|
92
|
+
const toInsert = randomData[libraryId].fileMetadata.slice(i, i + 1000);
|
|
93
|
+
await unifiedDb.insertInto('FileMetadata').values(toInsert).execute();
|
|
94
|
+
}
|
|
95
|
+
for (let i = 0; i < randomData[libraryId].replicas.length; i += 1000) {
|
|
96
|
+
const toInsert = randomData[libraryId].replicas.slice(i, i + 1000);
|
|
97
|
+
await unifiedDb.insertInto('ReplicaInfo').values(toInsert).execute();
|
|
98
|
+
}
|
|
80
99
|
}
|
|
81
100
|
|
|
82
101
|
const shards = await transferToShards({
|
|
@@ -4,12 +4,16 @@ import { Database as UnifiedDatabase } from '../sql/tables.js';
|
|
|
4
4
|
import { Database } from './tables.js';
|
|
5
5
|
import { openDatabase } from './database.js';
|
|
6
6
|
|
|
7
|
+
const DEFAULT_BATCH_SIZE = 1000;
|
|
8
|
+
|
|
7
9
|
export async function transferToShards({
|
|
8
10
|
file,
|
|
9
11
|
directory,
|
|
12
|
+
batchSize = DEFAULT_BATCH_SIZE,
|
|
10
13
|
}: {
|
|
11
14
|
file: string;
|
|
12
15
|
directory: string;
|
|
16
|
+
batchSize?: number;
|
|
13
17
|
}) {
|
|
14
18
|
console.info(
|
|
15
19
|
`Transferring from unified database (${file}) to shards (${directory})...`,
|
|
@@ -25,7 +29,7 @@ export async function transferToShards({
|
|
|
25
29
|
const dbs = await Promise.all(
|
|
26
30
|
libraries.map(async ({ libraryId }) => {
|
|
27
31
|
const db = await openDatabase(directory, libraryId);
|
|
28
|
-
await copyLibrary(libraryId, unifiedDb, db);
|
|
32
|
+
await copyLibrary(libraryId, unifiedDb, db, batchSize);
|
|
29
33
|
return db;
|
|
30
34
|
}),
|
|
31
35
|
);
|
|
@@ -43,6 +47,7 @@ async function copyLibrary(
|
|
|
43
47
|
libraryId: string,
|
|
44
48
|
source: Kysely<UnifiedDatabase>,
|
|
45
49
|
dest: Kysely<Database>,
|
|
50
|
+
batchSize: number,
|
|
46
51
|
) {
|
|
47
52
|
const operations = await source
|
|
48
53
|
.selectFrom('OperationHistory')
|
|
@@ -84,23 +89,34 @@ async function copyLibrary(
|
|
|
84
89
|
|
|
85
90
|
await dest.transaction().execute(async (trx) => {
|
|
86
91
|
const actions: Promise<any>[] = [];
|
|
92
|
+
// batch insert data to avoid maximum vars limits
|
|
87
93
|
if (operations.length) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
94
|
+
for (let i = 0; i < operations.length; i += batchSize) {
|
|
95
|
+
const toInsert = operations.slice(i, i + batchSize);
|
|
96
|
+
actions.push(
|
|
97
|
+
trx.insertInto('OperationHistory').values(toInsert).execute(),
|
|
98
|
+
);
|
|
99
|
+
}
|
|
91
100
|
}
|
|
92
101
|
if (baselines.length) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
for (let i = 0; i < baselines.length; i += batchSize) {
|
|
103
|
+
const toInsert = baselines.slice(i, i + batchSize);
|
|
104
|
+
actions.push(
|
|
105
|
+
trx.insertInto('DocumentBaseline').values(toInsert).execute(),
|
|
106
|
+
);
|
|
107
|
+
}
|
|
96
108
|
}
|
|
97
109
|
if (replicas.length) {
|
|
98
|
-
|
|
110
|
+
for (let i = 0; i < replicas.length; i += batchSize) {
|
|
111
|
+
const toInsert = replicas.slice(i, i + batchSize);
|
|
112
|
+
actions.push(trx.insertInto('ReplicaInfo').values(toInsert).execute());
|
|
113
|
+
}
|
|
99
114
|
}
|
|
100
115
|
if (fileMetadata.length) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
116
|
+
for (let i = 0; i < fileMetadata.length; i += batchSize) {
|
|
117
|
+
const toInsert = fileMetadata.slice(i, i + batchSize);
|
|
118
|
+
actions.push(trx.insertInto('FileMetadata').values(toInsert).execute());
|
|
119
|
+
}
|
|
104
120
|
}
|
|
105
121
|
await Promise.all(actions);
|
|
106
122
|
});
|