@live-change/db-server 0.9.83 → 0.9.85
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/Dockerfile +13 -5
- package/build-docker-and-upload.sh +2 -2
- package/dist/bin/server.d.ts +2 -0
- package/dist/bin/server.js +181 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/lib/Replicator.d.ts +13 -0
- package/dist/lib/Replicator.js +370 -0
- package/dist/lib/Server.d.ts +68 -0
- package/dist/lib/Server.js +423 -0
- package/dist/lib/backend.d.ts +142 -0
- package/dist/lib/backend.js +202 -0
- package/dist/lib/dbDao.d.ts +180 -0
- package/dist/lib/dbDao.js +1071 -0
- package/dist/lib/profileOutput.d.ts +2 -0
- package/dist/lib/profileOutput.js +21 -0
- package/dist/lib/storeDao.d.ts +14 -0
- package/dist/lib/storeDao.js +67 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/link-deps-4-build.sh +5 -0
- package/package.json +20 -17
|
@@ -0,0 +1,1071 @@
|
|
|
1
|
+
import ReactiveDao from "@live-change/dao";
|
|
2
|
+
function localRequests(server, scriptContext) {
|
|
3
|
+
return {
|
|
4
|
+
createDatabase: async (dbName, options = {}) => {
|
|
5
|
+
if (dbName === 'system')
|
|
6
|
+
throw new Error("system database is not writable");
|
|
7
|
+
if (server.metadata.databases[dbName])
|
|
8
|
+
throw new Error("databaseAlreadyExists");
|
|
9
|
+
server.metadata.databases[dbName] = options;
|
|
10
|
+
const database = await server.initDatabase(dbName, options);
|
|
11
|
+
server.databases.set(dbName, database);
|
|
12
|
+
server.databasesListObservable.push(dbName);
|
|
13
|
+
await Promise.all([
|
|
14
|
+
server.databases.get('system').createTable(dbName + "_tables"),
|
|
15
|
+
server.databases.get('system').createTable(dbName + "_logs"),
|
|
16
|
+
server.databases.get('system').createTable(dbName + "_indexes")
|
|
17
|
+
]);
|
|
18
|
+
await server.saveMetadata();
|
|
19
|
+
return 'ok';
|
|
20
|
+
},
|
|
21
|
+
deleteDatabase: async (dbName) => {
|
|
22
|
+
if (dbName === 'system')
|
|
23
|
+
throw new Error("system database is not writable");
|
|
24
|
+
if (!server.metadata.databases[dbName])
|
|
25
|
+
throw new Error("databaseNotFound");
|
|
26
|
+
delete server.metadata.databases[dbName];
|
|
27
|
+
const database = server.databases.get(dbName);
|
|
28
|
+
database.onAutoRemoveIndex = null;
|
|
29
|
+
server.databases.delete(dbName);
|
|
30
|
+
const dbStore = server.databaseStores.get(dbName);
|
|
31
|
+
server.databaseStores.delete(dbName);
|
|
32
|
+
server.databasesListObservable.remove(dbName);
|
|
33
|
+
await Promise.all([
|
|
34
|
+
server.databases.get('system').deleteTable(dbName + "_tables"),
|
|
35
|
+
server.databases.get('system').deleteTable(dbName + "_logs"),
|
|
36
|
+
server.databases.get('system').deleteTable(dbName + "_indexes")
|
|
37
|
+
]);
|
|
38
|
+
await server.saveMetadata();
|
|
39
|
+
await dbStore.delete();
|
|
40
|
+
return 'ok';
|
|
41
|
+
},
|
|
42
|
+
clearDatabaseOpLogs: async (dbName, lastTimestamp, limit) => {
|
|
43
|
+
const db = server.databases.get(dbName);
|
|
44
|
+
if (!db)
|
|
45
|
+
throw new Error('databaseNotFound');
|
|
46
|
+
return db.clearOpLogs(lastTimestamp || Date.now() - 60 * 1000, limit);
|
|
47
|
+
},
|
|
48
|
+
clearTableOpLog: async (dbName, tableName, lastTimestamp, limit) => {
|
|
49
|
+
const db = server.databases.get(dbName);
|
|
50
|
+
if (!db)
|
|
51
|
+
throw new Error('databaseNotFound');
|
|
52
|
+
const table = db.table(tableName);
|
|
53
|
+
if (!table)
|
|
54
|
+
throw new Error("tableNotFound");
|
|
55
|
+
return table.clearOpLog(lastTimestamp || Date.now() - 60 * 1000, limit);
|
|
56
|
+
},
|
|
57
|
+
clearIndexOpLog: async (dbName, indexName, lastTimestamp, limit) => {
|
|
58
|
+
const db = server.databases.get(dbName);
|
|
59
|
+
if (!db)
|
|
60
|
+
throw new Error('databaseNotFound');
|
|
61
|
+
const index = db.table(indexName);
|
|
62
|
+
if (!index)
|
|
63
|
+
throw new Error("indexNotFound");
|
|
64
|
+
return index.clearOpLog(lastTimestamp || Date.now() - 60 * 1000, limit);
|
|
65
|
+
},
|
|
66
|
+
createTable: async (dbName, tableName, options = {}) => {
|
|
67
|
+
if (dbName === 'system')
|
|
68
|
+
throw new Error("system database is not writable");
|
|
69
|
+
const db = server.databases.get(dbName);
|
|
70
|
+
if (!db)
|
|
71
|
+
throw new Error('databaseNotFound');
|
|
72
|
+
const table = await db.createTable(tableName, options);
|
|
73
|
+
await server.databases.get('system').table(dbName + '_tables').put({
|
|
74
|
+
id: table.configObservable.value.uid,
|
|
75
|
+
name: table.name,
|
|
76
|
+
config: table.configObservable.value
|
|
77
|
+
});
|
|
78
|
+
return 'ok';
|
|
79
|
+
},
|
|
80
|
+
deleteTable: async (dbName, tableName) => {
|
|
81
|
+
if (dbName === 'system')
|
|
82
|
+
throw new Error("system database is not writable");
|
|
83
|
+
const db = server.databases.get(dbName);
|
|
84
|
+
if (!db)
|
|
85
|
+
throw new Error('databaseNotFound');
|
|
86
|
+
if (tableName[tableName.length - 1] === "*") {
|
|
87
|
+
const list = db.tablesListObservable.list.slice();
|
|
88
|
+
for (const foundTableName of list) {
|
|
89
|
+
const base = tableName.slice(0, -1);
|
|
90
|
+
if (foundTableName.slice(0, base.length) !== base)
|
|
91
|
+
continue;
|
|
92
|
+
const table = db.table(foundTableName);
|
|
93
|
+
if (!table)
|
|
94
|
+
throw new Error("tableNotFound");
|
|
95
|
+
const uid = table.configObservable.value.uid;
|
|
96
|
+
await db.deleteTable(foundTableName);
|
|
97
|
+
await server.databases.get('system').table(dbName + '_tables').delete(uid);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const table = db.table(tableName);
|
|
102
|
+
if (!table)
|
|
103
|
+
throw new Error("tableNotFound");
|
|
104
|
+
const uid = table.configObservable.value.uid;
|
|
105
|
+
await db.deleteTable(tableName);
|
|
106
|
+
await server.databases.get('system').table(dbName + '_tables').delete(uid);
|
|
107
|
+
}
|
|
108
|
+
return 'ok';
|
|
109
|
+
},
|
|
110
|
+
renameTable: async (dbName, tableName, newTableName) => {
|
|
111
|
+
if (dbName === 'system')
|
|
112
|
+
throw new Error("system database is not writable");
|
|
113
|
+
const db = server.databases.get(dbName);
|
|
114
|
+
if (!db)
|
|
115
|
+
throw new Error('databaseNotFound');
|
|
116
|
+
const table = db.table(tableName);
|
|
117
|
+
if (!table)
|
|
118
|
+
throw new Error("tableNotFound");
|
|
119
|
+
const uid = table.configObservable.value.uid;
|
|
120
|
+
await server.databases.get('system').table(dbName + '_tables').update(uid, [
|
|
121
|
+
{ op: 'merge', property: 'name', value: newTableName }
|
|
122
|
+
]);
|
|
123
|
+
return db.renameTable(tableName, newTableName);
|
|
124
|
+
},
|
|
125
|
+
createIndex: async (dbName, indexName, code, params, options = {}) => {
|
|
126
|
+
if (dbName === 'system')
|
|
127
|
+
throw new Error("system database is not writable");
|
|
128
|
+
const db = server.databases.get(dbName);
|
|
129
|
+
if (!db)
|
|
130
|
+
throw new Error('databaseNotFound');
|
|
131
|
+
const index = await db.createIndex(indexName, code, params, options);
|
|
132
|
+
await server.databases.get('system').table(dbName + '_indexes').put({
|
|
133
|
+
id: index.configObservable.value.uid,
|
|
134
|
+
name: index.name,
|
|
135
|
+
config: index.configObservable.value
|
|
136
|
+
});
|
|
137
|
+
return 'ok';
|
|
138
|
+
},
|
|
139
|
+
deleteIndex: async (dbName, indexName) => {
|
|
140
|
+
if (dbName === 'system')
|
|
141
|
+
throw new Error("system database is not writable");
|
|
142
|
+
const db = server.databases.get(dbName);
|
|
143
|
+
if (!db)
|
|
144
|
+
throw new Error('databaseNotFound');
|
|
145
|
+
if (indexName[indexName.length - 1] === "*") {
|
|
146
|
+
const base = indexName.slice(0, -1);
|
|
147
|
+
const list = db.indexesListObservable.list.slice();
|
|
148
|
+
for (const foundIndexName of list) {
|
|
149
|
+
if (foundIndexName.slice(0, base.length) !== base)
|
|
150
|
+
continue;
|
|
151
|
+
const index = await db.index(foundIndexName);
|
|
152
|
+
if (!index)
|
|
153
|
+
throw new Error("indexNotFound");
|
|
154
|
+
const uid = index.configObservable.value.uid;
|
|
155
|
+
await db.deleteIndex(foundIndexName);
|
|
156
|
+
await server.databases.get('system').table(dbName + '_indexes').delete(uid);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const index = await db.index(indexName);
|
|
161
|
+
if (!index)
|
|
162
|
+
throw new Error("indexNotFound");
|
|
163
|
+
const uid = index.configObservable.value.uid;
|
|
164
|
+
await db.deleteIndex(indexName);
|
|
165
|
+
await server.databases.get('system').table(dbName + '_indexes').delete(uid);
|
|
166
|
+
}
|
|
167
|
+
return 'ok';
|
|
168
|
+
},
|
|
169
|
+
renameIndex: async (dbName, indexName, newIndexName) => {
|
|
170
|
+
if (dbName === 'system')
|
|
171
|
+
throw new Error("system database is not writable");
|
|
172
|
+
const db = server.databases.get(dbName);
|
|
173
|
+
if (!db)
|
|
174
|
+
throw await new Error('databaseNotFound');
|
|
175
|
+
const index = await db.index(indexName);
|
|
176
|
+
if (!index)
|
|
177
|
+
throw new Error("indexNotFound");
|
|
178
|
+
const uid = index.configObservable.value.uid;
|
|
179
|
+
await server.databases.get('system').table(dbName + '_indexes').update(uid, [
|
|
180
|
+
{ op: 'merge', property: 'name', value: newIndexName }
|
|
181
|
+
]);
|
|
182
|
+
return db.renameIndex(indexName, newIndexName);
|
|
183
|
+
},
|
|
184
|
+
createLog: async (dbName, logName, options = {}) => {
|
|
185
|
+
if (dbName === 'system')
|
|
186
|
+
throw new Error("system database is not writable");
|
|
187
|
+
const db = server.databases.get(dbName);
|
|
188
|
+
if (!db)
|
|
189
|
+
throw new Error('databaseNotFound');
|
|
190
|
+
const log = await db.createLog(logName, options);
|
|
191
|
+
await server.databases.get('system').table(dbName + '_logs').put({
|
|
192
|
+
id: log.configObservable.value.uid,
|
|
193
|
+
name: log.name,
|
|
194
|
+
config: log.configObservable.value
|
|
195
|
+
});
|
|
196
|
+
return 'ok';
|
|
197
|
+
},
|
|
198
|
+
deleteLog: async (dbName, logName) => {
|
|
199
|
+
if (dbName === 'system')
|
|
200
|
+
throw new Error("system database is not writable");
|
|
201
|
+
const db = server.databases.get(dbName);
|
|
202
|
+
if (!db)
|
|
203
|
+
throw new Error('databaseNotFound');
|
|
204
|
+
const log = db.log(logName);
|
|
205
|
+
if (!log)
|
|
206
|
+
throw new Error("logNotFound");
|
|
207
|
+
const uid = log.configObservable.value.uid;
|
|
208
|
+
await db.deleteLog(logName);
|
|
209
|
+
await server.databases.get('system').table(dbName + '_logs').delete(uid);
|
|
210
|
+
return 'ok';
|
|
211
|
+
},
|
|
212
|
+
renameLog: async (dbName, logName, newLogName) => {
|
|
213
|
+
if (dbName === 'system')
|
|
214
|
+
throw new Error("system database is not writable");
|
|
215
|
+
const db = server.databases.get(dbName);
|
|
216
|
+
if (!db)
|
|
217
|
+
throw new Error('databaseNotFound');
|
|
218
|
+
const log = db.log(logName);
|
|
219
|
+
if (!log)
|
|
220
|
+
throw new Error("logNotFound");
|
|
221
|
+
const uid = log.configObservable.value.uid;
|
|
222
|
+
await server.databases.get('system').table(dbName + '_logs').update(uid, [
|
|
223
|
+
{ op: 'merge', property: 'name', value: newLogName }
|
|
224
|
+
]);
|
|
225
|
+
return db.renameLog(logName, newLogName);
|
|
226
|
+
},
|
|
227
|
+
put: (dbName, tableName, object) => {
|
|
228
|
+
if (dbName === 'system')
|
|
229
|
+
throw new Error("system database is not writable");
|
|
230
|
+
const db = server.databases.get(dbName);
|
|
231
|
+
if (!db)
|
|
232
|
+
throw new Error('databaseNotFound');
|
|
233
|
+
const table = db.table(tableName);
|
|
234
|
+
if (!table)
|
|
235
|
+
throw new Error("tableNotFound");
|
|
236
|
+
return table.put(object);
|
|
237
|
+
},
|
|
238
|
+
delete: (dbName, tableName, id) => {
|
|
239
|
+
if (dbName === 'system')
|
|
240
|
+
throw new Error("system database is not writable");
|
|
241
|
+
const db = server.databases.get(dbName);
|
|
242
|
+
if (!db)
|
|
243
|
+
throw new Error('databaseNotFound');
|
|
244
|
+
const table = db.table(tableName);
|
|
245
|
+
if (!table)
|
|
246
|
+
throw new Error("tableNotFound");
|
|
247
|
+
return table.delete(id);
|
|
248
|
+
},
|
|
249
|
+
update: (dbName, tableName, id, operations, options) => {
|
|
250
|
+
if (dbName === 'system')
|
|
251
|
+
throw new Error("system database is not writable");
|
|
252
|
+
const db = server.databases.get(dbName);
|
|
253
|
+
if (!db)
|
|
254
|
+
throw new Error('databaseNotFound');
|
|
255
|
+
const table = db.table(tableName);
|
|
256
|
+
if (!table)
|
|
257
|
+
throw new Error("tableNotFound");
|
|
258
|
+
//console.log("DAO UPDATE OPS", operations, "OPTIONS", options)
|
|
259
|
+
return table.update(id, operations, options);
|
|
260
|
+
},
|
|
261
|
+
putLog: (dbName, logName, object) => {
|
|
262
|
+
if (dbName === 'system')
|
|
263
|
+
throw new Error("system database is not writable");
|
|
264
|
+
const db = server.databases.get(dbName);
|
|
265
|
+
if (!db)
|
|
266
|
+
throw new Error('databaseNotFound');
|
|
267
|
+
const log = db.log(logName);
|
|
268
|
+
if (!log)
|
|
269
|
+
throw new Error("logNotFound");
|
|
270
|
+
return log.put(object);
|
|
271
|
+
},
|
|
272
|
+
putOldLog: (dbName, logName, object) => {
|
|
273
|
+
if (dbName === 'system')
|
|
274
|
+
throw new Error("system database is not writable");
|
|
275
|
+
const db = server.databases.get(dbName);
|
|
276
|
+
if (!db)
|
|
277
|
+
throw new Error('databaseNotFound');
|
|
278
|
+
const log = db.log(logName);
|
|
279
|
+
if (!log)
|
|
280
|
+
throw new Error("logNotFound");
|
|
281
|
+
return log.putOld(object);
|
|
282
|
+
},
|
|
283
|
+
clearLog: (dbName, logName, before) => {
|
|
284
|
+
if (dbName === 'system')
|
|
285
|
+
throw new Error("system database is not writable");
|
|
286
|
+
const db = server.databases.get(dbName);
|
|
287
|
+
if (!db)
|
|
288
|
+
throw new Error('databaseNotFound ' + dbName);
|
|
289
|
+
const log = db.log(logName);
|
|
290
|
+
if (!log)
|
|
291
|
+
throw new Error("logNotFound");
|
|
292
|
+
return log.clear(before);
|
|
293
|
+
},
|
|
294
|
+
query: (dbName, code, params) => {
|
|
295
|
+
if (dbName === 'system')
|
|
296
|
+
throw new Error("system database is not writable");
|
|
297
|
+
if (!dbName)
|
|
298
|
+
throw new Error("databaseNameRequired");
|
|
299
|
+
const db = server.databases.get(dbName);
|
|
300
|
+
if (!db)
|
|
301
|
+
throw new Error('databaseNotFound');
|
|
302
|
+
const queryFunction = scriptContext.getOrCreateFunction(code, 'query');
|
|
303
|
+
return db.queryUpdate((input, output) => queryFunction(input, output, params));
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
function remoteRequests(server) {
|
|
308
|
+
return {
|
|
309
|
+
createDatabase: async (dbName, options = {}) => {
|
|
310
|
+
if (server.metadata.databases[dbName])
|
|
311
|
+
throw new Error("databaseAlreadyExists");
|
|
312
|
+
return server.masterDao.request(['database', 'createDatabase'], dbName, options);
|
|
313
|
+
},
|
|
314
|
+
deleteDatabase: async (dbName) => {
|
|
315
|
+
if (!server.metadata.databases[dbName])
|
|
316
|
+
throw new Error("databaseNotFound");
|
|
317
|
+
return server.masterDao.request(['database', 'deleteDatabase'], dbName, options);
|
|
318
|
+
},
|
|
319
|
+
clearDatabaseOpLogs: async (dbName, lastTimestamp, limit) => {
|
|
320
|
+
const db = server.databases.get(dbName);
|
|
321
|
+
if (!db)
|
|
322
|
+
throw new Error('databaseNotFound');
|
|
323
|
+
if (typeof lastTimestamp == 'string')
|
|
324
|
+
lastTimestamp = new Date(lastTimestamp);
|
|
325
|
+
return server.masterDao.request(['database', 'clearDatabaseOpLogs'], dbName, lastTimestamp, limit);
|
|
326
|
+
},
|
|
327
|
+
clearTableOpLog: async (dbName, tableName, lastTimestamp, limit) => {
|
|
328
|
+
const db = server.databases.get(dbName);
|
|
329
|
+
if (!db)
|
|
330
|
+
throw new Error('databaseNotFound');
|
|
331
|
+
const table = db.table(tableName);
|
|
332
|
+
if (!table)
|
|
333
|
+
throw new Error("tableNotFound");
|
|
334
|
+
if (typeof lastTimestamp == 'string')
|
|
335
|
+
lastTimestamp = new Date(lastTimestamp);
|
|
336
|
+
return server.masterDao.request(['database', 'clearTableOpLog'], dbName, tableName, lastTimestamp, limit);
|
|
337
|
+
},
|
|
338
|
+
clearIndexOpLog: async (dbName, indexName, lastTimestamp, limit) => {
|
|
339
|
+
const db = server.databases.get(dbName);
|
|
340
|
+
if (!db)
|
|
341
|
+
throw new Error('databaseNotFound');
|
|
342
|
+
const index = db.table(indexName);
|
|
343
|
+
if (!index)
|
|
344
|
+
throw new Error("indexNotFound");
|
|
345
|
+
if (typeof lastTimestamp == 'string')
|
|
346
|
+
lastTimestamp = new Date(lastTimestamp);
|
|
347
|
+
return server.masterDao.request(['database', 'clearIndexOpLog'], dbName, indexName, lastTimestamp, limit);
|
|
348
|
+
},
|
|
349
|
+
createTable: async (dbName, tableName, options = {}) => {
|
|
350
|
+
const db = server.databases.get(dbName);
|
|
351
|
+
if (!db)
|
|
352
|
+
throw new Error('databaseNotFound');
|
|
353
|
+
return server.masterDao.request(['database', 'createTable'], dbName, tableName, options);
|
|
354
|
+
},
|
|
355
|
+
deleteTable: async (dbName, tableName, options) => {
|
|
356
|
+
const db = server.databases.get(dbName);
|
|
357
|
+
if (!db)
|
|
358
|
+
throw new Error('databaseNotFound');
|
|
359
|
+
return server.masterDao.request(['database', 'deleteTable'], dbName, tableName, options);
|
|
360
|
+
},
|
|
361
|
+
renameTable: async (dbName, tableName, newTableName) => {
|
|
362
|
+
const db = server.databases.get(dbName);
|
|
363
|
+
if (!db)
|
|
364
|
+
throw new Error('databaseNotFound');
|
|
365
|
+
const table = db.table(tableName);
|
|
366
|
+
if (!table)
|
|
367
|
+
throw new Error("tableNotFound");
|
|
368
|
+
return server.masterDao.request(['database', 'renameTable'], dbName, tableName, newTableName);
|
|
369
|
+
},
|
|
370
|
+
createIndex: async (dbName, indexName, code, params, options = {}) => {
|
|
371
|
+
const db = server.databases.get(dbName);
|
|
372
|
+
if (!db)
|
|
373
|
+
throw new Error('databaseNotFound');
|
|
374
|
+
return server.masterDao.request(['database', 'createIndex'], dbName, indexName, code, params, options);
|
|
375
|
+
},
|
|
376
|
+
deleteIndex: async (dbName, indexName, options) => {
|
|
377
|
+
const db = server.databases.get(dbName);
|
|
378
|
+
if (!db)
|
|
379
|
+
throw new Error('databaseNotFound');
|
|
380
|
+
return server.masterDao.request(['database', 'deleteIndex'], dbName, indexName, options);
|
|
381
|
+
},
|
|
382
|
+
renameIndex: async (dbName, indexName, newIndexName) => {
|
|
383
|
+
const db = server.databases.get(dbName);
|
|
384
|
+
if (!db)
|
|
385
|
+
throw new Error('databaseNotFound');
|
|
386
|
+
const index = db.index(indexName);
|
|
387
|
+
if (!index)
|
|
388
|
+
throw new Error("indexNotFound");
|
|
389
|
+
return server.masterDao.request(['database', 'renameIndex'], dbName, indexName, newIndexName);
|
|
390
|
+
},
|
|
391
|
+
createLog: async (dbName, logName, options = {}) => {
|
|
392
|
+
const db = server.databases.get(dbName);
|
|
393
|
+
if (!db)
|
|
394
|
+
throw new Error('databaseNotFound');
|
|
395
|
+
return server.masterDao.request(['database', 'createLog'], dbName, logName, options);
|
|
396
|
+
},
|
|
397
|
+
deleteLog: async (dbName, logName, options) => {
|
|
398
|
+
const db = server.databases.get(dbName);
|
|
399
|
+
if (!db)
|
|
400
|
+
throw new Error('databaseNotFound');
|
|
401
|
+
await db.deleteLog(logName);
|
|
402
|
+
return server.masterDao.request(['database', 'deleteLog'], dbName, logName, options);
|
|
403
|
+
},
|
|
404
|
+
renameLog: async (dbName, logName, newLogName) => {
|
|
405
|
+
const db = server.databases.get(dbName);
|
|
406
|
+
if (!db)
|
|
407
|
+
throw new Error('databaseNotFound');
|
|
408
|
+
const log = db.log(logName);
|
|
409
|
+
if (!log)
|
|
410
|
+
throw new Error("logNotFound");
|
|
411
|
+
return server.masterDao.request(['database', 'renameLog'], dbName, logName, newLogName);
|
|
412
|
+
},
|
|
413
|
+
put: (dbName, tableName, object) => {
|
|
414
|
+
const db = server.databases.get(dbName);
|
|
415
|
+
if (!db)
|
|
416
|
+
throw new Error('databaseNotFound');
|
|
417
|
+
const table = db.table(tableName);
|
|
418
|
+
if (!table)
|
|
419
|
+
throw new Error("tableNotFound");
|
|
420
|
+
return server.masterDao.request(['database', 'put'], dbName, tableName, object);
|
|
421
|
+
},
|
|
422
|
+
delete: (dbName, tableName, id) => {
|
|
423
|
+
const db = server.databases.get(dbName);
|
|
424
|
+
if (!db)
|
|
425
|
+
throw new Error('databaseNotFound');
|
|
426
|
+
const table = db.table(tableName);
|
|
427
|
+
if (!table)
|
|
428
|
+
throw new Error("tableNotFound");
|
|
429
|
+
return server.masterDao.request(['database', 'delete'], dbName, tableName, id);
|
|
430
|
+
},
|
|
431
|
+
update: (dbName, tableName, id, operations, options) => {
|
|
432
|
+
const db = server.databases.get(dbName);
|
|
433
|
+
if (!db)
|
|
434
|
+
throw new Error('databaseNotFound');
|
|
435
|
+
const table = db.table(tableName);
|
|
436
|
+
if (!table)
|
|
437
|
+
throw new Error("tableNotFound");
|
|
438
|
+
return server.masterDao.request(['database', 'update'], dbName, tableName, id, operations, options);
|
|
439
|
+
},
|
|
440
|
+
putLog: (dbName, logName, object) => {
|
|
441
|
+
const db = server.databases.get(dbName);
|
|
442
|
+
if (!db)
|
|
443
|
+
throw new Error('databaseNotFound');
|
|
444
|
+
const log = db.log(logName);
|
|
445
|
+
if (!log)
|
|
446
|
+
throw new Error("logNotFound");
|
|
447
|
+
return server.masterDao.request(['database', 'putLog'], dbName, logName, object);
|
|
448
|
+
},
|
|
449
|
+
putOldLog: (dbName, logName, object) => {
|
|
450
|
+
const db = server.databases.get(dbName);
|
|
451
|
+
if (!db)
|
|
452
|
+
throw new Error('databaseNotFound');
|
|
453
|
+
const log = db.log(logName);
|
|
454
|
+
if (!log)
|
|
455
|
+
throw new Error("logNotFound");
|
|
456
|
+
return server.masterDao.request(['database', 'putOldLog'], dbName, logName, object);
|
|
457
|
+
},
|
|
458
|
+
clearLog: (dbName, logName, before) => {
|
|
459
|
+
if (dbName === 'system')
|
|
460
|
+
throw new Error("system database is not writable");
|
|
461
|
+
const db = server.databases.get(dbName);
|
|
462
|
+
if (!db)
|
|
463
|
+
throw new Error('databaseNotFound');
|
|
464
|
+
const log = db.log(logName);
|
|
465
|
+
if (!log)
|
|
466
|
+
throw new Error("logNotFound");
|
|
467
|
+
return server.masterDao.request(['database', 'clearLog'], dbName, logName, before);
|
|
468
|
+
},
|
|
469
|
+
query: (dbName, code, params) => {
|
|
470
|
+
if (!dbName)
|
|
471
|
+
throw new Error("databaseNameRequired");
|
|
472
|
+
const db = server.databases.get(dbName);
|
|
473
|
+
if (!db)
|
|
474
|
+
throw new Error('databaseNotFound');
|
|
475
|
+
return server.masterDao.request(['database', 'query'], dbName, code, params);
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
function localReads(server, scriptContext) {
|
|
480
|
+
return {
|
|
481
|
+
databasesList: {
|
|
482
|
+
observable: () => server.databasesListObservable,
|
|
483
|
+
get: async () => server.databasesListObservable.list
|
|
484
|
+
},
|
|
485
|
+
databases: {
|
|
486
|
+
observable: () => server.databasesListObservable.next(list => list.map(dbName => ({ id: dbName }))),
|
|
487
|
+
get: async () => server.databasesListObservable.list.map(dbName => ({ id: dbName }))
|
|
488
|
+
},
|
|
489
|
+
databaseConfig: {
|
|
490
|
+
observable: (dbName) => {
|
|
491
|
+
const db = server.databases.get(dbName);
|
|
492
|
+
if (!db)
|
|
493
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
494
|
+
return db.configObservable;
|
|
495
|
+
},
|
|
496
|
+
get: async (dbName) => {
|
|
497
|
+
const db = server.databases.get(dbName);
|
|
498
|
+
if (!db)
|
|
499
|
+
throw new Error('databaseNotFound');
|
|
500
|
+
return db.configObservable.value;
|
|
501
|
+
}
|
|
502
|
+
},
|
|
503
|
+
tablesList: {
|
|
504
|
+
observable: (dbName) => {
|
|
505
|
+
const db = server.databases.get(dbName);
|
|
506
|
+
if (!db)
|
|
507
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
508
|
+
return db.tablesListObservable;
|
|
509
|
+
},
|
|
510
|
+
get: async (dbName) => {
|
|
511
|
+
const db = server.databases.get(dbName);
|
|
512
|
+
if (!db)
|
|
513
|
+
throw new Error('databaseNotFound');
|
|
514
|
+
return db.tablesListObservable.list;
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
indexesList: {
|
|
518
|
+
observable: (dbName) => {
|
|
519
|
+
const db = server.databases.get(dbName);
|
|
520
|
+
if (!db)
|
|
521
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
522
|
+
return db.indexesListObservable;
|
|
523
|
+
},
|
|
524
|
+
get: async (dbName) => {
|
|
525
|
+
const db = server.databases.get(dbName);
|
|
526
|
+
if (!db)
|
|
527
|
+
throw new Error('databaseNotFound');
|
|
528
|
+
return db.indexesListObservable.list;
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
logsList: {
|
|
532
|
+
observable: (dbName) => {
|
|
533
|
+
const db = server.databases.get(dbName);
|
|
534
|
+
if (!db)
|
|
535
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
536
|
+
return db.logsListObservable;
|
|
537
|
+
},
|
|
538
|
+
get: async (dbName) => {
|
|
539
|
+
const db = server.databases.get(dbName);
|
|
540
|
+
if (!db)
|
|
541
|
+
throw new Error('databaseNotFound');
|
|
542
|
+
return db.logsListObservable.list;
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
tablesCount: {
|
|
546
|
+
observable: (dbName) => {
|
|
547
|
+
const db = server.databases.get(dbName);
|
|
548
|
+
if (!db)
|
|
549
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
550
|
+
return db.tablesListObservable.next(tables => tables.length ?? 0);
|
|
551
|
+
},
|
|
552
|
+
get: async (dbName) => {
|
|
553
|
+
const db = server.databases.get(dbName);
|
|
554
|
+
if (!db)
|
|
555
|
+
throw new Error('databaseNotFound');
|
|
556
|
+
return db.tablesListObservable.list.length;
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
indexesCount: {
|
|
560
|
+
observable: (dbName) => {
|
|
561
|
+
const db = server.databases.get(dbName);
|
|
562
|
+
if (!db)
|
|
563
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
564
|
+
return db.indexesListObservable.next(tables => tables.length ?? 0);
|
|
565
|
+
},
|
|
566
|
+
get: async (dbName) => {
|
|
567
|
+
const db = server.databases.get(dbName);
|
|
568
|
+
if (!db)
|
|
569
|
+
throw new Error('databaseNotFound');
|
|
570
|
+
return db.indexesListObservable.list.length;
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
logsCount: {
|
|
574
|
+
observable: (dbName) => {
|
|
575
|
+
const db = server.databases.get(dbName);
|
|
576
|
+
if (!db)
|
|
577
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
578
|
+
return db.logsListObservable.next(tables => tables.length ?? 0);
|
|
579
|
+
},
|
|
580
|
+
get: async (dbName) => {
|
|
581
|
+
const db = server.databases.get(dbName);
|
|
582
|
+
if (!db)
|
|
583
|
+
throw new Error('databaseNotFound');
|
|
584
|
+
return db.logsListObservable.list.length;
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
tables: {
|
|
588
|
+
observable: (dbName) => {
|
|
589
|
+
const db = server.databases.get(dbName);
|
|
590
|
+
if (!db)
|
|
591
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
592
|
+
return db.tablesListObservable.next(list => list.map(dbName => ({ id: dbName })));
|
|
593
|
+
},
|
|
594
|
+
get: async (dbName) => {
|
|
595
|
+
const db = server.databases.get(dbName);
|
|
596
|
+
if (!db)
|
|
597
|
+
throw new Error('databaseNotFound');
|
|
598
|
+
return db.tablesListObservable.list.map(dbName => ({ id: dbName }));
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
indexes: {
|
|
602
|
+
observable: (dbName) => {
|
|
603
|
+
const db = server.databases.get(dbName);
|
|
604
|
+
if (!db)
|
|
605
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
606
|
+
return db.indexesListObservable.next(list => list.map(dbName => ({ id: dbName })));
|
|
607
|
+
},
|
|
608
|
+
get: async (dbName) => {
|
|
609
|
+
const db = server.databases.get(dbName);
|
|
610
|
+
if (!db)
|
|
611
|
+
throw new Error('databaseNotFound');
|
|
612
|
+
return db.indexesListObservable.list.map(dbName => ({ id: dbName }));
|
|
613
|
+
}
|
|
614
|
+
},
|
|
615
|
+
logs: {
|
|
616
|
+
observable: (dbName) => {
|
|
617
|
+
const db = server.databases.get(dbName);
|
|
618
|
+
if (!db)
|
|
619
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
620
|
+
return db.logsListObservable.next(list => list.map(dbName => ({ id: dbName })));
|
|
621
|
+
},
|
|
622
|
+
get: async (dbName) => {
|
|
623
|
+
const db = server.databases.get(dbName);
|
|
624
|
+
if (!db)
|
|
625
|
+
throw new Error('databaseNotFound');
|
|
626
|
+
return db.logsListObservable.list.map(dbName => ({ id: dbName }));
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
tableConfig: {
|
|
630
|
+
observable: (dbName, tableName) => {
|
|
631
|
+
const db = server.databases.get(dbName);
|
|
632
|
+
if (!db)
|
|
633
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
634
|
+
const table = db.table(tableName);
|
|
635
|
+
if (!table)
|
|
636
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
637
|
+
return table.configObservable;
|
|
638
|
+
},
|
|
639
|
+
get: async (dbName, tableName) => {
|
|
640
|
+
const db = server.databases.get(dbName);
|
|
641
|
+
if (!db)
|
|
642
|
+
throw new Error('databaseNotFound');
|
|
643
|
+
const table = db.table(tableName);
|
|
644
|
+
if (!table)
|
|
645
|
+
throw new Error("tableNotFound");
|
|
646
|
+
return table.configObservable.value;
|
|
647
|
+
}
|
|
648
|
+
},
|
|
649
|
+
indexConfig: {
|
|
650
|
+
observable: async (dbName, indexName) => {
|
|
651
|
+
const db = server.databases.get(dbName);
|
|
652
|
+
if (!db)
|
|
653
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
654
|
+
const index = await db.index(indexName);
|
|
655
|
+
if (!index)
|
|
656
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
657
|
+
return index.configObservable;
|
|
658
|
+
},
|
|
659
|
+
get: async (dbName, indexName) => {
|
|
660
|
+
const db = server.databases.get(dbName);
|
|
661
|
+
if (!db)
|
|
662
|
+
throw new Error('databaseNotFound');
|
|
663
|
+
const index = await db.index(indexName);
|
|
664
|
+
if (!index)
|
|
665
|
+
throw new Error("indexNotFound");
|
|
666
|
+
return index.configObservable.value;
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
indexCode: {
|
|
670
|
+
observable: async (dbName, indexName) => {
|
|
671
|
+
const db = server.databases.get(dbName);
|
|
672
|
+
if (!db)
|
|
673
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
674
|
+
const index = await db.index(indexName);
|
|
675
|
+
if (!index)
|
|
676
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
677
|
+
return index.codeObservable;
|
|
678
|
+
},
|
|
679
|
+
get: async (dbName, indexName) => {
|
|
680
|
+
const db = server.databases.get(dbName);
|
|
681
|
+
if (!db)
|
|
682
|
+
throw new Error('databaseNotFound');
|
|
683
|
+
const index = await db.index(indexName);
|
|
684
|
+
if (!index)
|
|
685
|
+
throw new Error("indexNotFound");
|
|
686
|
+
return index.codeObservable.value;
|
|
687
|
+
}
|
|
688
|
+
},
|
|
689
|
+
logConfig: {
|
|
690
|
+
observable: (dbName, logName) => {
|
|
691
|
+
const db = server.databases.get(dbName);
|
|
692
|
+
if (!db)
|
|
693
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
694
|
+
const log = db.log(logName);
|
|
695
|
+
if (!log)
|
|
696
|
+
return new ReactiveDao.ObservableError('logNotFound');
|
|
697
|
+
return log.configObservable;
|
|
698
|
+
},
|
|
699
|
+
get: async (dbName, logName) => {
|
|
700
|
+
const db = server.databases.get(dbName);
|
|
701
|
+
if (!db)
|
|
702
|
+
throw new Error('databaseNotFound');
|
|
703
|
+
const log = db.log(logName);
|
|
704
|
+
if (!log)
|
|
705
|
+
throw new Error("logNotFound");
|
|
706
|
+
return log.configObservable.value;
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
tableObject: {
|
|
710
|
+
observable: (dbName, tableName, id) => {
|
|
711
|
+
if (!id)
|
|
712
|
+
return new ReactiveDao.ObservableValue(null);
|
|
713
|
+
const db = server.databases.get(dbName);
|
|
714
|
+
if (!db)
|
|
715
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
716
|
+
const table = db.table(tableName);
|
|
717
|
+
if (!table)
|
|
718
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
719
|
+
return table.objectObservable(id);
|
|
720
|
+
},
|
|
721
|
+
get: async (dbName, tableName, id) => {
|
|
722
|
+
if (!id)
|
|
723
|
+
return null;
|
|
724
|
+
const db = server.databases.get(dbName);
|
|
725
|
+
if (!db)
|
|
726
|
+
throw new Error('databaseNotFound');
|
|
727
|
+
const table = db.table(tableName);
|
|
728
|
+
if (!table)
|
|
729
|
+
throw new Error("tableNotFound");
|
|
730
|
+
return table.objectGet(id);
|
|
731
|
+
}
|
|
732
|
+
},
|
|
733
|
+
tableRange: {
|
|
734
|
+
observable: (dbName, tableName, range) => {
|
|
735
|
+
const db = server.databases.get(dbName);
|
|
736
|
+
if (!db)
|
|
737
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
738
|
+
const table = db.table(tableName);
|
|
739
|
+
if (!table)
|
|
740
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
741
|
+
return table.rangeObservable(range);
|
|
742
|
+
},
|
|
743
|
+
get: async (dbName, tableName, range) => {
|
|
744
|
+
const db = server.databases.get(dbName);
|
|
745
|
+
if (!db)
|
|
746
|
+
throw new Error('databaseNotFound');
|
|
747
|
+
const table = db.table(tableName);
|
|
748
|
+
if (!table)
|
|
749
|
+
throw new Error("tableNotFound");
|
|
750
|
+
return table.rangeGet(range);
|
|
751
|
+
}
|
|
752
|
+
},
|
|
753
|
+
tableCount: {
|
|
754
|
+
observable: (dbName, tableName, range) => {
|
|
755
|
+
const db = server.databases.get(dbName);
|
|
756
|
+
if (!db)
|
|
757
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
758
|
+
const table = db.table(tableName);
|
|
759
|
+
if (!table)
|
|
760
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
761
|
+
return table.countObservable(range);
|
|
762
|
+
},
|
|
763
|
+
get: async (dbName, tableName, range) => {
|
|
764
|
+
const db = server.databases.get(dbName);
|
|
765
|
+
if (!db)
|
|
766
|
+
throw new Error('databaseNotFound');
|
|
767
|
+
const table = db.table(tableName);
|
|
768
|
+
if (!table)
|
|
769
|
+
throw new Error("tableNotFound");
|
|
770
|
+
return table.countGet(range);
|
|
771
|
+
}
|
|
772
|
+
},
|
|
773
|
+
tableOpLogObject: {
|
|
774
|
+
observable: (dbName, tableName, id) => {
|
|
775
|
+
const db = server.databases.get(dbName);
|
|
776
|
+
if (!db)
|
|
777
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
778
|
+
const table = db.table(tableName);
|
|
779
|
+
if (!table)
|
|
780
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
781
|
+
return table.opLog.objectObservable(id);
|
|
782
|
+
},
|
|
783
|
+
get: async (dbName, tableName, id) => {
|
|
784
|
+
const db = server.databases.get(dbName);
|
|
785
|
+
if (!db)
|
|
786
|
+
throw new Error('databaseNotFound');
|
|
787
|
+
const table = db.table(tableName);
|
|
788
|
+
if (!table)
|
|
789
|
+
throw new Error("tableNotFound");
|
|
790
|
+
return table.opLog.objectGet(id);
|
|
791
|
+
}
|
|
792
|
+
},
|
|
793
|
+
tableOpLogRange: {
|
|
794
|
+
observable: (dbName, tableName, range) => {
|
|
795
|
+
const db = server.databases.get(dbName);
|
|
796
|
+
if (!db)
|
|
797
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
798
|
+
const table = db.table(tableName);
|
|
799
|
+
if (!table)
|
|
800
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
801
|
+
return table.opLog.rangeObservable(range);
|
|
802
|
+
},
|
|
803
|
+
get: async (dbName, tableName, range) => {
|
|
804
|
+
const db = server.databases.get(dbName);
|
|
805
|
+
if (!db)
|
|
806
|
+
throw new Error('databaseNotFound');
|
|
807
|
+
const table = db.table(tableName);
|
|
808
|
+
if (!table)
|
|
809
|
+
throw new Error("tableNotFound");
|
|
810
|
+
return table.opLog.rangeGet(range);
|
|
811
|
+
}
|
|
812
|
+
},
|
|
813
|
+
tableOpLogCount: {
|
|
814
|
+
observable: (dbName, tableName, range) => {
|
|
815
|
+
const db = server.databases.get(dbName);
|
|
816
|
+
if (!db)
|
|
817
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
818
|
+
const table = db.table(tableName);
|
|
819
|
+
if (!table)
|
|
820
|
+
return new ReactiveDao.ObservableError('tableNotFound');
|
|
821
|
+
return table.opLog.countObservable(range);
|
|
822
|
+
},
|
|
823
|
+
get: async (dbName, tableName, range) => {
|
|
824
|
+
const db = server.databases.get(dbName);
|
|
825
|
+
if (!db)
|
|
826
|
+
throw new Error('databaseNotFound');
|
|
827
|
+
const table = db.table(tableName);
|
|
828
|
+
if (!table)
|
|
829
|
+
throw new Error("tableNotFound");
|
|
830
|
+
return table.opLog.countGet(range);
|
|
831
|
+
}
|
|
832
|
+
},
|
|
833
|
+
indexObject: {
|
|
834
|
+
observable: async (dbName, indexName, id) => {
|
|
835
|
+
if (!id)
|
|
836
|
+
return new ReactiveDao.ObservableError("id is required");
|
|
837
|
+
const db = server.databases.get(dbName);
|
|
838
|
+
if (!db)
|
|
839
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
840
|
+
const index = await db.index(indexName);
|
|
841
|
+
if (!index)
|
|
842
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
843
|
+
return index.objectObservable(id);
|
|
844
|
+
},
|
|
845
|
+
get: async (dbName, indexName, id) => {
|
|
846
|
+
if (!id)
|
|
847
|
+
throw new Error("id is required");
|
|
848
|
+
const db = server.databases.get(dbName);
|
|
849
|
+
if (!db)
|
|
850
|
+
throw new Error('databaseNotFound');
|
|
851
|
+
const index = await db.index(indexName);
|
|
852
|
+
if (!index)
|
|
853
|
+
throw new Error("indexNotFound");
|
|
854
|
+
return index.objectGet(id);
|
|
855
|
+
}
|
|
856
|
+
},
|
|
857
|
+
indexRange: {
|
|
858
|
+
observable: async (dbName, indexName, range) => {
|
|
859
|
+
const db = server.databases.get(dbName);
|
|
860
|
+
if (!db)
|
|
861
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
862
|
+
const index = await db.index(indexName);
|
|
863
|
+
if (!index)
|
|
864
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
865
|
+
return index.rangeObservable(range);
|
|
866
|
+
},
|
|
867
|
+
get: async (dbName, indexName, range) => {
|
|
868
|
+
const db = server.databases.get(dbName);
|
|
869
|
+
if (!db)
|
|
870
|
+
throw new Error('databaseNotFound');
|
|
871
|
+
const index = await db.index(indexName);
|
|
872
|
+
if (!index)
|
|
873
|
+
throw new Error("indexNotFound");
|
|
874
|
+
return index.rangeGet(range);
|
|
875
|
+
}
|
|
876
|
+
},
|
|
877
|
+
indexCount: {
|
|
878
|
+
observable: async (dbName, indexName, range) => {
|
|
879
|
+
const db = server.databases.get(dbName);
|
|
880
|
+
if (!db)
|
|
881
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
882
|
+
const index = await db.index(indexName);
|
|
883
|
+
if (!index)
|
|
884
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
885
|
+
return index.countObservable(range);
|
|
886
|
+
},
|
|
887
|
+
get: async (dbName, indexName, range) => {
|
|
888
|
+
const db = server.databases.get(dbName);
|
|
889
|
+
if (!db)
|
|
890
|
+
throw new Error('databaseNotFound');
|
|
891
|
+
const index = await db.index(indexName);
|
|
892
|
+
if (!index)
|
|
893
|
+
throw new Error("indexNotFound");
|
|
894
|
+
return index.countGet(range);
|
|
895
|
+
}
|
|
896
|
+
},
|
|
897
|
+
indexOpLogObject: {
|
|
898
|
+
observable: (dbName, indexName, id) => {
|
|
899
|
+
const db = server.databases.get(dbName);
|
|
900
|
+
if (!db)
|
|
901
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
902
|
+
const index = db.index(indexName);
|
|
903
|
+
if (!index)
|
|
904
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
905
|
+
return index.opLog.objectObservable(id);
|
|
906
|
+
},
|
|
907
|
+
get: async (dbName, indexName, id) => {
|
|
908
|
+
const db = server.databases.get(dbName);
|
|
909
|
+
if (!db)
|
|
910
|
+
throw new Error('databaseNotFound');
|
|
911
|
+
const index = db.index(indexName);
|
|
912
|
+
if (!index)
|
|
913
|
+
throw new Error("indexNotFound");
|
|
914
|
+
return index.opLog.objectGet(id);
|
|
915
|
+
}
|
|
916
|
+
},
|
|
917
|
+
indexOpLogRange: {
|
|
918
|
+
observable: (dbName, indexName, range) => {
|
|
919
|
+
if (!id)
|
|
920
|
+
return new ReactiveDao.ObservableError("id is required");
|
|
921
|
+
const db = server.databases.get(dbName);
|
|
922
|
+
if (!db)
|
|
923
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
924
|
+
const index = db.index(indexName);
|
|
925
|
+
if (!index)
|
|
926
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
927
|
+
return index.opLog.rangeObservable(range);
|
|
928
|
+
},
|
|
929
|
+
get: async (dbName, indexName, range) => {
|
|
930
|
+
if (!id)
|
|
931
|
+
throw new Error("id is required");
|
|
932
|
+
const db = server.databases.get(dbName);
|
|
933
|
+
if (!db)
|
|
934
|
+
throw new Error('databaseNotFound');
|
|
935
|
+
const index = db.index(indexName);
|
|
936
|
+
if (!index)
|
|
937
|
+
throw new Error("indexNotFound");
|
|
938
|
+
return index.opLog.rangeGet(range);
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
indexOpLogCount: {
|
|
942
|
+
observable: (dbName, indexName, range) => {
|
|
943
|
+
if (!id)
|
|
944
|
+
return new ReactiveDao.ObservableError("id is required");
|
|
945
|
+
const db = server.databases.get(dbName);
|
|
946
|
+
if (!db)
|
|
947
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
948
|
+
const index = db.index(indexName);
|
|
949
|
+
if (!index)
|
|
950
|
+
return new ReactiveDao.ObservableError('indexNotFound');
|
|
951
|
+
return index.opLog.countObservable(range);
|
|
952
|
+
},
|
|
953
|
+
get: async (dbName, indexName, range) => {
|
|
954
|
+
if (!id)
|
|
955
|
+
throw new Error("id is required");
|
|
956
|
+
const db = server.databases.get(dbName);
|
|
957
|
+
if (!db)
|
|
958
|
+
throw new Error('databaseNotFound');
|
|
959
|
+
const index = db.index(indexName);
|
|
960
|
+
if (!index)
|
|
961
|
+
throw new Error("indexNotFound");
|
|
962
|
+
return index.opLog.countGet(range);
|
|
963
|
+
}
|
|
964
|
+
},
|
|
965
|
+
logObject: {
|
|
966
|
+
observable: (dbName, logName, id) => {
|
|
967
|
+
const db = server.databases.get(dbName);
|
|
968
|
+
if (!db)
|
|
969
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
970
|
+
const log = db.log(logName);
|
|
971
|
+
if (!log)
|
|
972
|
+
return new ReactiveDao.ObservableError('logNotFound');
|
|
973
|
+
return log.objectObservable(id);
|
|
974
|
+
},
|
|
975
|
+
get: (dbName, logName, id) => {
|
|
976
|
+
const db = server.databases.get(dbName);
|
|
977
|
+
if (!db)
|
|
978
|
+
throw new Error('databaseNotFound');
|
|
979
|
+
const log = db.log(logName);
|
|
980
|
+
if (!log)
|
|
981
|
+
throw new Error("logNotFound");
|
|
982
|
+
return log.objectGet(id);
|
|
983
|
+
}
|
|
984
|
+
},
|
|
985
|
+
logRange: {
|
|
986
|
+
observable: (dbName, logName, range) => {
|
|
987
|
+
const db = server.databases.get(dbName);
|
|
988
|
+
if (!db)
|
|
989
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
990
|
+
const log = db.log(logName);
|
|
991
|
+
if (!log)
|
|
992
|
+
return new ReactiveDao.ObservableError('logNotFound');
|
|
993
|
+
return log.rangeObservable(range);
|
|
994
|
+
},
|
|
995
|
+
get: async (dbName, logName, range) => {
|
|
996
|
+
const db = server.databases.get(dbName);
|
|
997
|
+
if (!db)
|
|
998
|
+
throw new Error('databaseNotFound');
|
|
999
|
+
const log = db.log(logName);
|
|
1000
|
+
if (!log)
|
|
1001
|
+
throw new Error("logNotFound");
|
|
1002
|
+
return log.rangeGet(range);
|
|
1003
|
+
}
|
|
1004
|
+
},
|
|
1005
|
+
logCount: {
|
|
1006
|
+
observable: (dbName, logName, range) => {
|
|
1007
|
+
const db = server.databases.get(dbName);
|
|
1008
|
+
if (!db)
|
|
1009
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
1010
|
+
const log = db.log(logName);
|
|
1011
|
+
if (!log)
|
|
1012
|
+
return new ReactiveDao.ObservableError('logNotFound');
|
|
1013
|
+
return log.countObservable(range);
|
|
1014
|
+
},
|
|
1015
|
+
get: async (dbName, logName, range) => {
|
|
1016
|
+
const db = server.databases.get(dbName);
|
|
1017
|
+
if (!db)
|
|
1018
|
+
throw new Error('databaseNotFound');
|
|
1019
|
+
const log = db.log(logName);
|
|
1020
|
+
if (!log)
|
|
1021
|
+
throw new Error("logNotFound");
|
|
1022
|
+
return log.countGet(range);
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
1025
|
+
query: {
|
|
1026
|
+
observable: (dbName, code, params = {}, sourceName = 'query/query.js') => {
|
|
1027
|
+
if (!dbName)
|
|
1028
|
+
return new ReactiveDao.ObservableError("databaseNameRequired");
|
|
1029
|
+
const db = server.databases.get(dbName);
|
|
1030
|
+
if (!db)
|
|
1031
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
1032
|
+
const queryFunction = scriptContext.getOrCreateFunction(code, 'queryCode:' + sourceName);
|
|
1033
|
+
return db.queryObservable(async (input, output) => {
|
|
1034
|
+
return queryFunction(input, output, params);
|
|
1035
|
+
});
|
|
1036
|
+
},
|
|
1037
|
+
get: async (dbName, code, params = {}, sourceName = 'query/query.js') => {
|
|
1038
|
+
if (!dbName)
|
|
1039
|
+
throw new Error("databaseNameRequired");
|
|
1040
|
+
const db = server.databases.get(dbName);
|
|
1041
|
+
if (!db)
|
|
1042
|
+
throw new Error('databaseNotFound');
|
|
1043
|
+
const queryFunction = scriptContext.getOrCreateFunction(code, 'queryCode:' + sourceName);
|
|
1044
|
+
return db.queryGet((input, output) => queryFunction(input, output, params));
|
|
1045
|
+
}
|
|
1046
|
+
},
|
|
1047
|
+
queryObject: {
|
|
1048
|
+
observable: (dbName, code, params = {}, sourceName = 'queryObject/query.js') => {
|
|
1049
|
+
if (!dbName)
|
|
1050
|
+
return new ReactiveDao.ObservableError("databaseNameRequired");
|
|
1051
|
+
const db = server.databases.get(dbName);
|
|
1052
|
+
if (!db)
|
|
1053
|
+
return new ReactiveDao.ObservableError('databaseNotFound');
|
|
1054
|
+
const queryFunction = scriptContext.getOrCreateFunction(code, 'queryCode:' + sourceName);
|
|
1055
|
+
return db.queryObjectObservable(async (input, output) => {
|
|
1056
|
+
return queryFunction(input, output, params);
|
|
1057
|
+
});
|
|
1058
|
+
},
|
|
1059
|
+
get: async (dbName, code, params = {}, sourceName = 'queryObject/query.js') => {
|
|
1060
|
+
if (!dbName)
|
|
1061
|
+
throw new Error("databaseNameRequired");
|
|
1062
|
+
const db = server.databases.get(dbName);
|
|
1063
|
+
if (!db)
|
|
1064
|
+
throw new Error('databaseNotFound');
|
|
1065
|
+
const queryFunction = scriptContext.getOrCreateFunction(code, 'queryCode:' + sourceName);
|
|
1066
|
+
return db.queryObjectGet((input, output) => queryFunction(input, output, params));
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
};
|
|
1070
|
+
}
|
|
1071
|
+
export { localRequests, remoteRequests, localReads };
|