dbgate-tools 6.8.2 → 7.0.0-alpha.12
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/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/nameTools.js +1 -0
- package/lib/redisKeysLoader.d.ts +80 -0
- package/lib/{dbKeysLoader.js → redisKeysLoader.js} +78 -106
- package/lib/stringTools.js +1 -0
- package/package.json +3 -3
- package/lib/dbKeysLoader.d.ts +0 -60
package/lib/index.d.ts
CHANGED
|
@@ -24,6 +24,6 @@ export * from './getConnectionLabel';
|
|
|
24
24
|
export * from './detectSqlFilterBehaviour';
|
|
25
25
|
export * from './filterBehaviours';
|
|
26
26
|
export * from './schemaInfoTools';
|
|
27
|
-
export * from './
|
|
27
|
+
export * from './redisKeysLoader';
|
|
28
28
|
export * from './rowProgressReporter';
|
|
29
29
|
export * from './diagramTools';
|
package/lib/index.js
CHANGED
|
@@ -40,6 +40,6 @@ __exportStar(require("./getConnectionLabel"), exports);
|
|
|
40
40
|
__exportStar(require("./detectSqlFilterBehaviour"), exports);
|
|
41
41
|
__exportStar(require("./filterBehaviours"), exports);
|
|
42
42
|
__exportStar(require("./schemaInfoTools"), exports);
|
|
43
|
-
__exportStar(require("./
|
|
43
|
+
__exportStar(require("./redisKeysLoader"), exports);
|
|
44
44
|
__exportStar(require("./rowProgressReporter"), exports);
|
|
45
45
|
__exportStar(require("./diagramTools"), exports);
|
package/lib/nameTools.js
CHANGED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export declare const DB_KEYS_SHOW_INCREMENT = 100;
|
|
2
|
+
export interface RedisNodeModelBase {
|
|
3
|
+
text?: string;
|
|
4
|
+
sortKey: string;
|
|
5
|
+
key: string;
|
|
6
|
+
count?: number;
|
|
7
|
+
level: number;
|
|
8
|
+
keyPath: string[];
|
|
9
|
+
parentKey: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RedisLeafNodeModel extends RedisNodeModelBase {
|
|
12
|
+
type: 'string' | 'hash' | 'set' | 'list' | 'zset' | 'stream' | 'binary' | 'ReJSON-RL';
|
|
13
|
+
}
|
|
14
|
+
export interface RedisFolderNodeModel extends RedisNodeModelBase {
|
|
15
|
+
type: 'dir';
|
|
16
|
+
}
|
|
17
|
+
export interface RedisFolderStateMode {
|
|
18
|
+
key: string;
|
|
19
|
+
visibleCount?: number;
|
|
20
|
+
isExpanded?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface RedisTreeModel {
|
|
23
|
+
treeKeySeparator: string;
|
|
24
|
+
root: RedisFolderNodeModel;
|
|
25
|
+
dirsByKey: {
|
|
26
|
+
[key: string]: RedisFolderNodeModel;
|
|
27
|
+
};
|
|
28
|
+
dirStateByKey: {
|
|
29
|
+
[key: string]: RedisFolderStateMode;
|
|
30
|
+
};
|
|
31
|
+
childrenByKey: {
|
|
32
|
+
[key: string]: RedisNodeModel[];
|
|
33
|
+
};
|
|
34
|
+
keyObjectsByKey: {
|
|
35
|
+
[key: string]: RedisNodeModel;
|
|
36
|
+
};
|
|
37
|
+
scannedKeys: number;
|
|
38
|
+
loadCount: number;
|
|
39
|
+
dbsize: number;
|
|
40
|
+
cursor: string;
|
|
41
|
+
loadedAll: boolean;
|
|
42
|
+
}
|
|
43
|
+
export type RedisNodeModel = RedisLeafNodeModel | RedisFolderNodeModel;
|
|
44
|
+
export interface RedisLoadedModel {
|
|
45
|
+
key: string;
|
|
46
|
+
type: 'string' | 'hash' | 'set' | 'list' | 'zset' | 'stream' | 'binary' | 'ReJSON-RL';
|
|
47
|
+
count?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface RedisLoadResult {
|
|
50
|
+
nextCursor: string;
|
|
51
|
+
keys: RedisLoadedModel[];
|
|
52
|
+
dbsize: number;
|
|
53
|
+
}
|
|
54
|
+
export type RedisChangeModelFunction = (func: (model: RedisTreeModel) => RedisTreeModel, loadNextPage: boolean) => void;
|
|
55
|
+
export declare function redis_mergeNextPage(tree: RedisTreeModel, nextPage: RedisLoadResult): RedisTreeModel;
|
|
56
|
+
export declare function redis_markNodeExpanded(tree: RedisTreeModel, root: string, isExpanded: boolean): RedisTreeModel;
|
|
57
|
+
export declare function redis_showNextItems(tree: RedisTreeModel, root: string): RedisTreeModel;
|
|
58
|
+
export declare function redis_createNewModel(treeKeySeparator: string): RedisTreeModel;
|
|
59
|
+
export declare function redis_clearLoadedData(tree: RedisTreeModel): RedisTreeModel;
|
|
60
|
+
export declare function redis_getFlatList(tree: RedisTreeModel): RedisNodeModel[];
|
|
61
|
+
export interface SupportedRedisKeyType {
|
|
62
|
+
name: string;
|
|
63
|
+
label: string;
|
|
64
|
+
dbKeyFields: {
|
|
65
|
+
name: string;
|
|
66
|
+
cols?: number;
|
|
67
|
+
label?: string;
|
|
68
|
+
placeholder?: string;
|
|
69
|
+
}[];
|
|
70
|
+
dbKeyFieldsForGrid?: {
|
|
71
|
+
name: string;
|
|
72
|
+
cols?: number;
|
|
73
|
+
label?: string;
|
|
74
|
+
}[];
|
|
75
|
+
keyColumn?: string;
|
|
76
|
+
showItemList?: boolean;
|
|
77
|
+
showGeneratedId?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export declare const supportedRedisKeyTypes: SupportedRedisKeyType[];
|
|
80
|
+
export declare function findSupportedRedisKeyType(type: string): SupportedRedisKeyType | undefined;
|
|
@@ -3,89 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.findSupportedRedisKeyType = exports.supportedRedisKeyTypes = exports.redis_getFlatList = exports.redis_clearLoadedData = exports.redis_createNewModel = exports.redis_showNextItems = exports.redis_markNodeExpanded = exports.redis_mergeNextPage = exports.DB_KEYS_SHOW_INCREMENT = void 0;
|
|
7
7
|
const sortBy_1 = __importDefault(require("lodash/sortBy"));
|
|
8
8
|
exports.DB_KEYS_SHOW_INCREMENT = 100;
|
|
9
|
-
|
|
10
|
-
// if (node.type != 'dir') {
|
|
11
|
-
// return null;
|
|
12
|
-
// }
|
|
13
|
-
// if (node.root === root) {
|
|
14
|
-
// return node;
|
|
15
|
-
// }
|
|
16
|
-
// for (const child of node.children ?? []) {
|
|
17
|
-
// const res = dbKeys_findFolderNode(child, root);
|
|
18
|
-
// if (res) {
|
|
19
|
-
// return res;
|
|
20
|
-
// }
|
|
21
|
-
// }
|
|
22
|
-
// return null;
|
|
23
|
-
// }
|
|
24
|
-
// export async function dbKeys_loadKeysFromNode(
|
|
25
|
-
// tree: DbKeysTreeModel,
|
|
26
|
-
// callingRoot: string,
|
|
27
|
-
// separator: string,
|
|
28
|
-
// loader: DbKeysLoadFunction
|
|
29
|
-
// ): Promise<DbKeysTreeModel> {
|
|
30
|
-
// const callingRootNode = tree.dirsByKey[callingRoot];
|
|
31
|
-
// if (!callingRootNode) {
|
|
32
|
-
// return tree;
|
|
33
|
-
// }
|
|
34
|
-
// const newItems = await loader(callingRoot, callingRootNode.maxShowCount ?? SHOW_INCREMENT);
|
|
35
|
-
// return {
|
|
36
|
-
// ...tree,
|
|
37
|
-
// childrenByKey: {
|
|
38
|
-
// ...tree.childrenByKey,
|
|
39
|
-
// [callingRoot]: newItems,
|
|
40
|
-
// },
|
|
41
|
-
// };
|
|
42
|
-
// }
|
|
43
|
-
// export async function dbKeys_loadMissing(tree: DbKeysTreeModel, loader: DbKeysLoadFunction): Promise<DbKeysTreeModel> {
|
|
44
|
-
// const childrenByKey = { ...tree.childrenByKey };
|
|
45
|
-
// const dirsByKey = { ...tree.dirsByKey };
|
|
46
|
-
// for (const root in tree.dirsByKey) {
|
|
47
|
-
// const dir = tree.dirsByKey[root];
|
|
48
|
-
// if (dir.isExpanded && dir.shouldLoadNext) {
|
|
49
|
-
// if (!tree.childrenByKey[root] || dir.hasNext) {
|
|
50
|
-
// const loadCount = dir.maxShowCount && dir.shouldLoadNext ? dir.maxShowCount + SHOW_INCREMENT : SHOW_INCREMENT;
|
|
51
|
-
// const items = await loader(root, loadCount + 1);
|
|
52
|
-
// childrenByKey[root] = items.slice(0, loadCount);
|
|
53
|
-
// dirsByKey[root] = {
|
|
54
|
-
// ...dir,
|
|
55
|
-
// shouldLoadNext: false,
|
|
56
|
-
// maxShowCount: loadCount,
|
|
57
|
-
// hasNext: items.length > loadCount,
|
|
58
|
-
// };
|
|
59
|
-
// for (const child of items.slice(0, loadCount)) {
|
|
60
|
-
// if (child.type == 'dir' && !dirsByKey[child.root]) {
|
|
61
|
-
// dirsByKey[child.root] = {
|
|
62
|
-
// shouldLoadNext: false,
|
|
63
|
-
// maxShowCount: null,
|
|
64
|
-
// hasNext: false,
|
|
65
|
-
// isExpanded: false,
|
|
66
|
-
// type: 'dir',
|
|
67
|
-
// level: dir.level + 1,
|
|
68
|
-
// root: child.root,
|
|
69
|
-
// text: child.text,
|
|
70
|
-
// };
|
|
71
|
-
// }
|
|
72
|
-
// }
|
|
73
|
-
// } else {
|
|
74
|
-
// dirsByKey[root] = {
|
|
75
|
-
// ...dir,
|
|
76
|
-
// shouldLoadNext: false,
|
|
77
|
-
// };
|
|
78
|
-
// }
|
|
79
|
-
// }
|
|
80
|
-
// }
|
|
81
|
-
// return {
|
|
82
|
-
// ...tree,
|
|
83
|
-
// dirsByKey,
|
|
84
|
-
// childrenByKey,
|
|
85
|
-
// refreshAll: false,
|
|
86
|
-
// };
|
|
87
|
-
// }
|
|
88
|
-
function dbKeys_mergeNextPage(tree, nextPage) {
|
|
9
|
+
function redis_mergeNextPage(tree, nextPage) {
|
|
89
10
|
const keyObjectsByKey = { ...tree.keyObjectsByKey };
|
|
90
11
|
for (const keyObj of nextPage.keys) {
|
|
91
12
|
const keyPath = keyObj.key.split(tree.treeKeySeparator);
|
|
@@ -151,8 +72,8 @@ function dbKeys_mergeNextPage(tree, nextPage) {
|
|
|
151
72
|
dbsize: nextPage.dbsize,
|
|
152
73
|
};
|
|
153
74
|
}
|
|
154
|
-
exports.
|
|
155
|
-
function
|
|
75
|
+
exports.redis_mergeNextPage = redis_mergeNextPage;
|
|
76
|
+
function redis_markNodeExpanded(tree, root, isExpanded) {
|
|
156
77
|
const node = tree.dirStateByKey[root];
|
|
157
78
|
return {
|
|
158
79
|
...tree,
|
|
@@ -165,8 +86,8 @@ function dbKeys_markNodeExpanded(tree, root, isExpanded) {
|
|
|
165
86
|
},
|
|
166
87
|
};
|
|
167
88
|
}
|
|
168
|
-
exports.
|
|
169
|
-
function
|
|
89
|
+
exports.redis_markNodeExpanded = redis_markNodeExpanded;
|
|
90
|
+
function redis_showNextItems(tree, root) {
|
|
170
91
|
var _a;
|
|
171
92
|
const node = tree.dirStateByKey[root];
|
|
172
93
|
return {
|
|
@@ -180,8 +101,8 @@ function dbKeys_showNextItems(tree, root) {
|
|
|
180
101
|
},
|
|
181
102
|
};
|
|
182
103
|
}
|
|
183
|
-
exports.
|
|
184
|
-
function
|
|
104
|
+
exports.redis_showNextItems = redis_showNextItems;
|
|
105
|
+
function redis_createNewModel(treeKeySeparator) {
|
|
185
106
|
const root = {
|
|
186
107
|
level: 0,
|
|
187
108
|
type: 'dir',
|
|
@@ -212,8 +133,8 @@ function dbKeys_createNewModel(treeKeySeparator) {
|
|
|
212
133
|
loadedAll: false,
|
|
213
134
|
};
|
|
214
135
|
}
|
|
215
|
-
exports.
|
|
216
|
-
function
|
|
136
|
+
exports.redis_createNewModel = redis_createNewModel;
|
|
137
|
+
function redis_clearLoadedData(tree) {
|
|
217
138
|
return {
|
|
218
139
|
...tree,
|
|
219
140
|
childrenByKey: {},
|
|
@@ -227,21 +148,7 @@ function dbKeys_clearLoadedData(tree) {
|
|
|
227
148
|
loadedAll: false,
|
|
228
149
|
};
|
|
229
150
|
}
|
|
230
|
-
exports.
|
|
231
|
-
// export function dbKeys_reloadFolder(tree: DbKeysTreeModel, root: string): DbKeysTreeModel {
|
|
232
|
-
// return {
|
|
233
|
-
// ...tree,
|
|
234
|
-
// childrenByKey: _omit(tree.childrenByKey, root),
|
|
235
|
-
// dirsByKey: {
|
|
236
|
-
// ...tree.dirsByKey,
|
|
237
|
-
// [root]: {
|
|
238
|
-
// ...tree.dirsByKey[root],
|
|
239
|
-
// shouldLoadNext: true,
|
|
240
|
-
// hasNext: undefined,
|
|
241
|
-
// },
|
|
242
|
-
// },
|
|
243
|
-
// };
|
|
244
|
-
// }
|
|
151
|
+
exports.redis_clearLoadedData = redis_clearLoadedData;
|
|
245
152
|
function addFlatItems(tree, root, res, visitedRoots = []) {
|
|
246
153
|
const item = tree.dirStateByKey[root];
|
|
247
154
|
if (!(item === null || item === void 0 ? void 0 : item.isExpanded)) {
|
|
@@ -259,9 +166,74 @@ function addFlatItems(tree, root, res, visitedRoots = []) {
|
|
|
259
166
|
}
|
|
260
167
|
}
|
|
261
168
|
}
|
|
262
|
-
function
|
|
169
|
+
function redis_getFlatList(tree) {
|
|
263
170
|
const res = [];
|
|
264
171
|
addFlatItems(tree, '', res);
|
|
265
172
|
return res;
|
|
266
173
|
}
|
|
267
|
-
exports.
|
|
174
|
+
exports.redis_getFlatList = redis_getFlatList;
|
|
175
|
+
exports.supportedRedisKeyTypes = [
|
|
176
|
+
{
|
|
177
|
+
name: 'string',
|
|
178
|
+
label: 'String',
|
|
179
|
+
dbKeyFields: [{ name: 'value' }],
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'list',
|
|
183
|
+
label: 'List',
|
|
184
|
+
dbKeyFields: [{ name: 'value', cols: 12 }],
|
|
185
|
+
showItemList: true,
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: 'set',
|
|
189
|
+
label: 'Set',
|
|
190
|
+
dbKeyFields: [{ name: 'value', cols: 12 }],
|
|
191
|
+
keyColumn: 'value',
|
|
192
|
+
showItemList: true,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: 'zset',
|
|
196
|
+
label: 'Sorted Set',
|
|
197
|
+
dbKeyFields: [
|
|
198
|
+
{ name: 'member', cols: 8 },
|
|
199
|
+
{ name: 'score', cols: 4 },
|
|
200
|
+
],
|
|
201
|
+
keyColumn: 'member',
|
|
202
|
+
showItemList: true,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: 'hash',
|
|
206
|
+
label: 'Hash',
|
|
207
|
+
dbKeyFields: [
|
|
208
|
+
{ name: 'key', cols: 3, label: 'Field' },
|
|
209
|
+
{ name: 'value', cols: 7 },
|
|
210
|
+
{ name: 'ttl', cols: 2, label: 'TTL' },
|
|
211
|
+
],
|
|
212
|
+
keyColumn: 'key',
|
|
213
|
+
showItemList: true,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'stream',
|
|
217
|
+
label: 'Stream',
|
|
218
|
+
dbKeyFields: [
|
|
219
|
+
{ name: 'field', cols: 6 },
|
|
220
|
+
{ name: 'value', cols: 6 },
|
|
221
|
+
],
|
|
222
|
+
dbKeyFieldsForGrid: [
|
|
223
|
+
{ name: 'id', cols: 6 },
|
|
224
|
+
{ name: 'value', cols: 6 },
|
|
225
|
+
],
|
|
226
|
+
keyColumn: 'id',
|
|
227
|
+
showItemList: true,
|
|
228
|
+
showGeneratedId: true,
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: 'json',
|
|
232
|
+
label: 'JSON',
|
|
233
|
+
dbKeyFields: [{ name: 'value' }],
|
|
234
|
+
},
|
|
235
|
+
];
|
|
236
|
+
function findSupportedRedisKeyType(type) {
|
|
237
|
+
return exports.supportedRedisKeyTypes.find(t => t.name === type);
|
|
238
|
+
}
|
|
239
|
+
exports.findSupportedRedisKeyType = findSupportedRedisKeyType;
|
package/lib/stringTools.js
CHANGED
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "7.0.0-alpha.12",
|
|
3
3
|
"name": "dbgate-tools",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"typings": "lib/index.d.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
],
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^13.7.0",
|
|
29
|
-
"dbgate-types": "^
|
|
29
|
+
"dbgate-types": "^7.0.0-alpha.12",
|
|
30
30
|
"jest": "^28.1.3",
|
|
31
31
|
"ts-jest": "^28.0.7",
|
|
32
32
|
"typescript": "^4.4.3"
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"blueimp-md5": "^2.19.0",
|
|
36
36
|
"dbgate-query-splitter": "^4.11.9",
|
|
37
|
-
"dbgate-sqltree": "^
|
|
37
|
+
"dbgate-sqltree": "^7.0.0-alpha.12",
|
|
38
38
|
"debug": "^4.3.4",
|
|
39
39
|
"json-stable-stringify": "^1.0.1",
|
|
40
40
|
"lodash": "^4.17.21",
|
package/lib/dbKeysLoader.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
export declare const DB_KEYS_SHOW_INCREMENT = 100;
|
|
2
|
-
export interface DbKeysNodeModelBase {
|
|
3
|
-
text?: string;
|
|
4
|
-
sortKey: string;
|
|
5
|
-
key: string;
|
|
6
|
-
count?: number;
|
|
7
|
-
level: number;
|
|
8
|
-
keyPath: string[];
|
|
9
|
-
parentKey: string;
|
|
10
|
-
}
|
|
11
|
-
export interface DbKeysLeafNodeModel extends DbKeysNodeModelBase {
|
|
12
|
-
type: 'string' | 'hash' | 'set' | 'list' | 'zset' | 'stream' | 'binary' | 'ReJSON-RL';
|
|
13
|
-
}
|
|
14
|
-
export interface DbKeysFolderNodeModel extends DbKeysNodeModelBase {
|
|
15
|
-
type: 'dir';
|
|
16
|
-
}
|
|
17
|
-
export interface DbKeysFolderStateMode {
|
|
18
|
-
key: string;
|
|
19
|
-
visibleCount?: number;
|
|
20
|
-
isExpanded?: boolean;
|
|
21
|
-
}
|
|
22
|
-
export interface DbKeysTreeModel {
|
|
23
|
-
treeKeySeparator: string;
|
|
24
|
-
root: DbKeysFolderNodeModel;
|
|
25
|
-
dirsByKey: {
|
|
26
|
-
[key: string]: DbKeysFolderNodeModel;
|
|
27
|
-
};
|
|
28
|
-
dirStateByKey: {
|
|
29
|
-
[key: string]: DbKeysFolderStateMode;
|
|
30
|
-
};
|
|
31
|
-
childrenByKey: {
|
|
32
|
-
[key: string]: DbKeysNodeModel[];
|
|
33
|
-
};
|
|
34
|
-
keyObjectsByKey: {
|
|
35
|
-
[key: string]: DbKeysNodeModel;
|
|
36
|
-
};
|
|
37
|
-
scannedKeys: number;
|
|
38
|
-
loadCount: number;
|
|
39
|
-
dbsize: number;
|
|
40
|
-
cursor: string;
|
|
41
|
-
loadedAll: boolean;
|
|
42
|
-
}
|
|
43
|
-
export type DbKeysNodeModel = DbKeysLeafNodeModel | DbKeysFolderNodeModel;
|
|
44
|
-
export interface DbKeyLoadedModel {
|
|
45
|
-
key: string;
|
|
46
|
-
type: 'string' | 'hash' | 'set' | 'list' | 'zset' | 'stream' | 'binary' | 'ReJSON-RL';
|
|
47
|
-
count?: number;
|
|
48
|
-
}
|
|
49
|
-
export interface DbKeysLoadResult {
|
|
50
|
-
nextCursor: string;
|
|
51
|
-
keys: DbKeyLoadedModel[];
|
|
52
|
-
dbsize: number;
|
|
53
|
-
}
|
|
54
|
-
export type DbKeysChangeModelFunction = (func: (model: DbKeysTreeModel) => DbKeysTreeModel, loadNextPage: boolean) => void;
|
|
55
|
-
export declare function dbKeys_mergeNextPage(tree: DbKeysTreeModel, nextPage: DbKeysLoadResult): DbKeysTreeModel;
|
|
56
|
-
export declare function dbKeys_markNodeExpanded(tree: DbKeysTreeModel, root: string, isExpanded: boolean): DbKeysTreeModel;
|
|
57
|
-
export declare function dbKeys_showNextItems(tree: DbKeysTreeModel, root: string): DbKeysTreeModel;
|
|
58
|
-
export declare function dbKeys_createNewModel(treeKeySeparator: string): DbKeysTreeModel;
|
|
59
|
-
export declare function dbKeys_clearLoadedData(tree: DbKeysTreeModel): DbKeysTreeModel;
|
|
60
|
-
export declare function dbKeys_getFlatList(tree: DbKeysTreeModel): DbKeysNodeModel[];
|