@live-change/db-server 0.9.83 → 0.9.84

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.
@@ -0,0 +1,202 @@
1
+ import fs from 'fs';
2
+ import { rimraf } from "rimraf";
3
+ import lmdb from 'node-lmdb';
4
+ import lmdbStore from '@live-change/db-store-lmdb';
5
+ import rbTreeStore from '@live-change/db-store-rbtree';
6
+ function createBackend({ name, url, maxDbs, mapSize }) {
7
+ if (name == 'leveldb') {
8
+ return {
9
+ levelup: require('levelup'),
10
+ leveldown: require('leveldown'),
11
+ subleveldown: require('subleveldown'),
12
+ encoding: require('encoding-down'),
13
+ Store: require('@live-change/db-store-level'),
14
+ createDb(path, options) {
15
+ const db = this.levelup(this.leveldown(path, options), options);
16
+ db.path = path;
17
+ return db;
18
+ },
19
+ closeDb(db) {
20
+ db.close();
21
+ },
22
+ async deleteDb(db) {
23
+ db.close();
24
+ await rimraf(db.path);
25
+ },
26
+ createStore(db, name, options) {
27
+ return new this.Store(this.subleveldown(db, name, { ...options, keyEncoding: 'ascii', valueEncoding: 'json' }));
28
+ },
29
+ closeStore(store) {
30
+ },
31
+ async deleteStore(store) {
32
+ await store.clear();
33
+ }
34
+ };
35
+ }
36
+ else if (name == 'rocksdb') {
37
+ return {
38
+ levelup: require('levelup'),
39
+ rocksdb: require('level-rocksdb'),
40
+ subleveldown: require('subleveldown'),
41
+ encoding: require('encoding-down'),
42
+ Store: require('@live-change/db-store-level'),
43
+ createDb(path, options) {
44
+ const db = this.levelup(this.rocksdb(path, options), options);
45
+ db.path = path;
46
+ return db;
47
+ },
48
+ closeDb(db) {
49
+ db.close();
50
+ },
51
+ async deleteDb(db) {
52
+ db.close();
53
+ await rimraf(db.path);
54
+ },
55
+ createStore(db, name, options) {
56
+ return new this.Store(this.subleveldown(db, name, { ...options, keyEncoding: 'ascii', valueEncoding: 'json' }));
57
+ },
58
+ closeStore(store) {
59
+ },
60
+ async deleteStore(store) {
61
+ await store.clear();
62
+ }
63
+ };
64
+ }
65
+ else if (name == 'memdown') {
66
+ return {
67
+ levelup: require('levelup'),
68
+ memdown: require('memdown'),
69
+ subleveldown: require('subleveldown'),
70
+ encoding: require('encoding-down'),
71
+ Store: require('@live-change/db-store-level'),
72
+ createDb(path, options) {
73
+ const db = this.levelup(this.memdown(path, options), options);
74
+ db.path = path;
75
+ return db;
76
+ },
77
+ closeDb(db) {
78
+ db.close();
79
+ },
80
+ async deleteDb(db) {
81
+ db.close();
82
+ await rimraf(db.path);
83
+ },
84
+ createStore(db, name, options) {
85
+ return new this.Store(this.subleveldown(db, name, { ...options, keyEncoding: 'ascii', valueEncoding: 'json' }));
86
+ },
87
+ closeStore(store) {
88
+ },
89
+ async deleteStore(store) {
90
+ await store.clear();
91
+ }
92
+ };
93
+ }
94
+ else if (name == 'mem' || name == 'memory') {
95
+ return {
96
+ Store: rbTreeStore,
97
+ createDb(path, options) {
98
+ const db = {};
99
+ db.path = path;
100
+ return db;
101
+ },
102
+ closeDb(db) {
103
+ },
104
+ async deleteDb(db) {
105
+ },
106
+ createStore(db, name, options) {
107
+ return new this.Store(options);
108
+ },
109
+ closeStore(store) {
110
+ },
111
+ async deleteStore(store) {
112
+ }
113
+ };
114
+ }
115
+ else if (name == 'lmdb') {
116
+ return {
117
+ lmdb,
118
+ Store: lmdbStore,
119
+ createDb(path, options) {
120
+ fs.mkdirSync(path, { recursive: true });
121
+ const env = new this.lmdb.Env();
122
+ const envConfig = {
123
+ path: path,
124
+ maxDbs: maxDbs || 1024,
125
+ mapSize: mapSize || (200 * 1024 * 1024 * 1024),
126
+ ...options
127
+ };
128
+ env.open(envConfig);
129
+ env.path = path;
130
+ return env;
131
+ },
132
+ closeDb(db) {
133
+ db.close();
134
+ },
135
+ async deleteDb(db) {
136
+ db.close();
137
+ await rimraf(db.path);
138
+ },
139
+ createStore(db, name, options) {
140
+ return new this.Store(db, db.openDbi({
141
+ name,
142
+ create: true
143
+ }), options);
144
+ },
145
+ closeStore(store) {
146
+ store.lmdb.close();
147
+ },
148
+ async deleteStore(store) {
149
+ store.lmdb.drop();
150
+ }
151
+ };
152
+ }
153
+ else if (name == 'observabledb') {
154
+ const Store = require('@live-change/db-store-observable-db');
155
+ const connection = new Store.Connection(url || 'ws://localhost:3530/api/ws');
156
+ return {
157
+ Store,
158
+ connection,
159
+ createDb(path, options) {
160
+ const pathSep = path.lastIndexOf('/');
161
+ const dbName = path.slice(pathSep > 0 ? pathSep + 1 : 0);
162
+ console.log("CREATE DATABASE!", dbName, options);
163
+ const openPromise = connection.createDatabase(dbName, options || {}).then(ok => {
164
+ console.log("database", dbName, "created");
165
+ }).catch(err => {
166
+ if (err == 'exists')
167
+ console.log("database", dbName, "already exists");
168
+ else
169
+ console.error("CREATE DB ERROR", err);
170
+ });
171
+ return dbName;
172
+ },
173
+ closeDb(db) {
174
+ /// remote database - ignore
175
+ },
176
+ async deleteDb(db) {
177
+ return connection.deleteDatabase(db);
178
+ },
179
+ createStore(db, name, options) {
180
+ console.log("CREATE STORE", db, name);
181
+ connection.createStore(db, name, options || {}).then(ok => {
182
+ console.log("database", db, "store", name, "created");
183
+ }).catch(err => {
184
+ if (err == 'exists')
185
+ console.log("database", db, "store", name, "already exists");
186
+ else
187
+ console.error("CREATE STORE ERROR", err);
188
+ });
189
+ return new Store(connection, db, name, options);
190
+ },
191
+ closeStore(store) {
192
+ return store.close();
193
+ },
194
+ deleteStore(store) {
195
+ return connection.deleteStore(store.databaseName, store.storeName);
196
+ }
197
+ };
198
+ }
199
+ else
200
+ throw new Error("Unknown backend " + name);
201
+ }
202
+ export default createBackend;
@@ -0,0 +1,180 @@
1
+ export function localRequests(server: any, scriptContext: any): {
2
+ createDatabase: (dbName: any, options?: {}) => Promise<string>;
3
+ deleteDatabase: (dbName: any) => Promise<string>;
4
+ clearDatabaseOpLogs: (dbName: any, lastTimestamp: any, limit: any) => Promise<any>;
5
+ clearTableOpLog: (dbName: any, tableName: any, lastTimestamp: any, limit: any) => Promise<any>;
6
+ clearIndexOpLog: (dbName: any, indexName: any, lastTimestamp: any, limit: any) => Promise<any>;
7
+ createTable: (dbName: any, tableName: any, options?: {}) => Promise<string>;
8
+ deleteTable: (dbName: any, tableName: any) => Promise<string>;
9
+ renameTable: (dbName: any, tableName: any, newTableName: any) => Promise<any>;
10
+ createIndex: (dbName: any, indexName: any, code: any, params: any, options?: {}) => Promise<string>;
11
+ deleteIndex: (dbName: any, indexName: any) => Promise<string>;
12
+ renameIndex: (dbName: any, indexName: any, newIndexName: any) => Promise<any>;
13
+ createLog: (dbName: any, logName: any, options?: {}) => Promise<string>;
14
+ deleteLog: (dbName: any, logName: any) => Promise<string>;
15
+ renameLog: (dbName: any, logName: any, newLogName: any) => Promise<any>;
16
+ put: (dbName: any, tableName: any, object: any) => any;
17
+ delete: (dbName: any, tableName: any, id: any) => any;
18
+ update: (dbName: any, tableName: any, id: any, operations: any, options: any) => any;
19
+ putLog: (dbName: any, logName: any, object: any) => any;
20
+ putOldLog: (dbName: any, logName: any, object: any) => any;
21
+ clearLog: (dbName: any, logName: any, before: any) => any;
22
+ query: (dbName: any, code: any, params: any) => any;
23
+ };
24
+ export function remoteRequests(server: any): {
25
+ createDatabase: (dbName: any, options?: {}) => Promise<any>;
26
+ deleteDatabase: (dbName: any) => Promise<any>;
27
+ clearDatabaseOpLogs: (dbName: any, lastTimestamp: any, limit: any) => Promise<any>;
28
+ clearTableOpLog: (dbName: any, tableName: any, lastTimestamp: any, limit: any) => Promise<any>;
29
+ clearIndexOpLog: (dbName: any, indexName: any, lastTimestamp: any, limit: any) => Promise<any>;
30
+ createTable: (dbName: any, tableName: any, options?: {}) => Promise<any>;
31
+ deleteTable: (dbName: any, tableName: any, options: any) => Promise<any>;
32
+ renameTable: (dbName: any, tableName: any, newTableName: any) => Promise<any>;
33
+ createIndex: (dbName: any, indexName: any, code: any, params: any, options?: {}) => Promise<any>;
34
+ deleteIndex: (dbName: any, indexName: any, options: any) => Promise<any>;
35
+ renameIndex: (dbName: any, indexName: any, newIndexName: any) => Promise<any>;
36
+ createLog: (dbName: any, logName: any, options?: {}) => Promise<any>;
37
+ deleteLog: (dbName: any, logName: any, options: any) => Promise<any>;
38
+ renameLog: (dbName: any, logName: any, newLogName: any) => Promise<any>;
39
+ put: (dbName: any, tableName: any, object: any) => any;
40
+ delete: (dbName: any, tableName: any, id: any) => any;
41
+ update: (dbName: any, tableName: any, id: any, operations: any, options: any) => any;
42
+ putLog: (dbName: any, logName: any, object: any) => any;
43
+ putOldLog: (dbName: any, logName: any, object: any) => any;
44
+ clearLog: (dbName: any, logName: any, before: any) => any;
45
+ query: (dbName: any, code: any, params: any) => any;
46
+ };
47
+ export function localReads(server: any, scriptContext: any): {
48
+ databasesList: {
49
+ observable: () => any;
50
+ get: () => Promise<any>;
51
+ };
52
+ databases: {
53
+ observable: () => any;
54
+ get: () => Promise<any>;
55
+ };
56
+ databaseConfig: {
57
+ observable: (dbName: any) => any;
58
+ get: (dbName: any) => Promise<any>;
59
+ };
60
+ tablesList: {
61
+ observable: (dbName: any) => any;
62
+ get: (dbName: any) => Promise<any>;
63
+ };
64
+ indexesList: {
65
+ observable: (dbName: any) => any;
66
+ get: (dbName: any) => Promise<any>;
67
+ };
68
+ logsList: {
69
+ observable: (dbName: any) => any;
70
+ get: (dbName: any) => Promise<any>;
71
+ };
72
+ tablesCount: {
73
+ observable: (dbName: any) => any;
74
+ get: (dbName: any) => Promise<any>;
75
+ };
76
+ indexesCount: {
77
+ observable: (dbName: any) => any;
78
+ get: (dbName: any) => Promise<any>;
79
+ };
80
+ logsCount: {
81
+ observable: (dbName: any) => any;
82
+ get: (dbName: any) => Promise<any>;
83
+ };
84
+ tables: {
85
+ observable: (dbName: any) => any;
86
+ get: (dbName: any) => Promise<any>;
87
+ };
88
+ indexes: {
89
+ observable: (dbName: any) => any;
90
+ get: (dbName: any) => Promise<any>;
91
+ };
92
+ logs: {
93
+ observable: (dbName: any) => any;
94
+ get: (dbName: any) => Promise<any>;
95
+ };
96
+ tableConfig: {
97
+ observable: (dbName: any, tableName: any) => any;
98
+ get: (dbName: any, tableName: any) => Promise<any>;
99
+ };
100
+ indexConfig: {
101
+ observable: (dbName: any, indexName: any) => Promise<any>;
102
+ get: (dbName: any, indexName: any) => Promise<any>;
103
+ };
104
+ indexCode: {
105
+ observable: (dbName: any, indexName: any) => Promise<any>;
106
+ get: (dbName: any, indexName: any) => Promise<any>;
107
+ };
108
+ logConfig: {
109
+ observable: (dbName: any, logName: any) => any;
110
+ get: (dbName: any, logName: any) => Promise<any>;
111
+ };
112
+ tableObject: {
113
+ observable: (dbName: any, tableName: any, id: any) => any;
114
+ get: (dbName: any, tableName: any, id: any) => Promise<any>;
115
+ };
116
+ tableRange: {
117
+ observable: (dbName: any, tableName: any, range: any) => any;
118
+ get: (dbName: any, tableName: any, range: any) => Promise<any>;
119
+ };
120
+ tableCount: {
121
+ observable: (dbName: any, tableName: any, range: any) => any;
122
+ get: (dbName: any, tableName: any, range: any) => Promise<any>;
123
+ };
124
+ tableOpLogObject: {
125
+ observable: (dbName: any, tableName: any, id: any) => any;
126
+ get: (dbName: any, tableName: any, id: any) => Promise<any>;
127
+ };
128
+ tableOpLogRange: {
129
+ observable: (dbName: any, tableName: any, range: any) => any;
130
+ get: (dbName: any, tableName: any, range: any) => Promise<any>;
131
+ };
132
+ tableOpLogCount: {
133
+ observable: (dbName: any, tableName: any, range: any) => any;
134
+ get: (dbName: any, tableName: any, range: any) => Promise<any>;
135
+ };
136
+ indexObject: {
137
+ observable: (dbName: any, indexName: any, id: any) => Promise<any>;
138
+ get: (dbName: any, indexName: any, id: any) => Promise<any>;
139
+ };
140
+ indexRange: {
141
+ observable: (dbName: any, indexName: any, range: any) => Promise<any>;
142
+ get: (dbName: any, indexName: any, range: any) => Promise<any>;
143
+ };
144
+ indexCount: {
145
+ observable: (dbName: any, indexName: any, range: any) => Promise<any>;
146
+ get: (dbName: any, indexName: any, range: any) => Promise<any>;
147
+ };
148
+ indexOpLogObject: {
149
+ observable: (dbName: any, indexName: any, id: any) => any;
150
+ get: (dbName: any, indexName: any, id: any) => Promise<any>;
151
+ };
152
+ indexOpLogRange: {
153
+ observable: (dbName: any, indexName: any, range: any) => any;
154
+ get: (dbName: any, indexName: any, range: any) => Promise<any>;
155
+ };
156
+ indexOpLogCount: {
157
+ observable: (dbName: any, indexName: any, range: any) => any;
158
+ get: (dbName: any, indexName: any, range: any) => Promise<any>;
159
+ };
160
+ logObject: {
161
+ observable: (dbName: any, logName: any, id: any) => any;
162
+ get: (dbName: any, logName: any, id: any) => any;
163
+ };
164
+ logRange: {
165
+ observable: (dbName: any, logName: any, range: any) => any;
166
+ get: (dbName: any, logName: any, range: any) => Promise<any>;
167
+ };
168
+ logCount: {
169
+ observable: (dbName: any, logName: any, range: any) => any;
170
+ get: (dbName: any, logName: any, range: any) => Promise<any>;
171
+ };
172
+ query: {
173
+ observable: (dbName: any, code: any, params?: {}, sourceName?: string) => any;
174
+ get: (dbName: any, code: any, params?: {}, sourceName?: string) => Promise<any>;
175
+ };
176
+ queryObject: {
177
+ observable: (dbName: any, code: any, params?: {}, sourceName?: string) => any;
178
+ get: (dbName: any, code: any, params?: {}, sourceName?: string) => Promise<any>;
179
+ };
180
+ };