@snowtop/ent 0.1.0-alpha7 → 0.1.0-alpha75
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/action/action.d.ts +28 -24
- package/action/executor.d.ts +4 -4
- package/action/executor.js +2 -2
- package/action/experimental_action.d.ts +29 -22
- package/action/experimental_action.js +29 -6
- package/action/orchestrator.d.ts +44 -16
- package/action/orchestrator.js +287 -73
- package/action/privacy.d.ts +2 -2
- package/core/base.d.ts +43 -23
- package/core/base.js +16 -0
- package/core/clause.d.ts +82 -3
- package/core/clause.js +463 -27
- package/core/config.d.ts +26 -0
- package/core/config.js +17 -0
- package/core/context.d.ts +5 -3
- package/core/context.js +7 -2
- package/core/convert.d.ts +1 -1
- package/core/db.d.ts +3 -4
- package/core/db.js +2 -0
- package/core/ent.d.ts +71 -27
- package/core/ent.js +458 -97
- package/core/loaders/assoc_count_loader.d.ts +2 -2
- package/core/loaders/assoc_count_loader.js +6 -1
- package/core/loaders/assoc_edge_loader.d.ts +3 -3
- package/core/loaders/assoc_edge_loader.js +5 -4
- package/core/loaders/index_loader.js +1 -0
- package/core/loaders/loader.js +5 -5
- package/core/loaders/object_loader.d.ts +11 -5
- package/core/loaders/object_loader.js +70 -4
- package/core/loaders/query_loader.d.ts +2 -2
- package/core/loaders/raw_count_loader.d.ts +2 -2
- package/core/logger.d.ts +1 -1
- package/core/logger.js +1 -0
- package/core/privacy.d.ts +26 -25
- package/core/privacy.js +23 -24
- package/core/query/assoc_query.d.ts +6 -6
- package/core/query/custom_query.d.ts +5 -5
- package/core/query/query.d.ts +1 -1
- package/core/query/shared_assoc_test.d.ts +1 -1
- package/core/query/shared_assoc_test.js +17 -5
- package/core/query/shared_test.d.ts +3 -0
- package/core/query/shared_test.js +95 -17
- package/core/viewer.d.ts +4 -3
- package/core/viewer.js +5 -1
- package/graphql/builtins/connection.js +3 -3
- package/graphql/builtins/edge.js +2 -2
- package/graphql/builtins/node.js +1 -1
- package/graphql/graphql.d.ts +3 -2
- package/graphql/graphql.js +30 -23
- package/graphql/node_resolver.d.ts +0 -1
- package/graphql/query/connection_type.js +6 -6
- package/graphql/query/edge_connection.d.ts +9 -9
- package/graphql/query/page_info.d.ts +1 -1
- package/graphql/query/page_info.js +4 -4
- package/graphql/query/shared_assoc_test.js +2 -2
- package/graphql/scalars/time.d.ts +1 -1
- package/index.d.ts +21 -1
- package/index.js +24 -5
- package/package.json +3 -3
- package/parse_schema/parse.d.ts +24 -5
- package/parse_schema/parse.js +90 -8
- package/schema/base_schema.d.ts +36 -1
- package/schema/base_schema.js +51 -2
- package/schema/field.d.ts +34 -6
- package/schema/field.js +67 -2
- package/schema/index.d.ts +2 -2
- package/schema/index.js +8 -1
- package/schema/json_field.d.ts +13 -1
- package/schema/json_field.js +28 -1
- package/schema/schema.d.ts +101 -2
- package/schema/schema.js +127 -5
- package/schema/struct_field.d.ts +11 -1
- package/schema/struct_field.js +43 -4
- package/scripts/custom_graphql.js +127 -16
- package/scripts/{transform_schema.d.ts → migrate_v0.1.d.ts} +0 -0
- package/scripts/migrate_v0.1.js +36 -0
- package/scripts/read_schema.js +25 -2
- package/testutils/builder.d.ts +36 -22
- package/testutils/builder.js +110 -13
- package/testutils/context/test_context.d.ts +2 -2
- package/testutils/context/test_context.js +7 -1
- package/testutils/db/{test_db.d.ts → temp_db.d.ts} +17 -4
- package/testutils/db/{test_db.js → temp_db.js} +76 -19
- package/testutils/ent-graphql-tests/index.d.ts +2 -0
- package/testutils/ent-graphql-tests/index.js +26 -17
- package/testutils/fake_data/fake_contact.d.ts +5 -9
- package/testutils/fake_data/fake_contact.js +17 -21
- package/testutils/fake_data/fake_event.d.ts +5 -9
- package/testutils/fake_data/fake_event.js +24 -28
- package/testutils/fake_data/fake_user.d.ts +6 -10
- package/testutils/fake_data/fake_user.js +25 -29
- package/testutils/fake_data/test_helpers.d.ts +2 -2
- package/testutils/fake_data/test_helpers.js +6 -6
- package/testutils/fake_data/user_query.d.ts +2 -2
- package/testutils/fake_log.d.ts +3 -3
- package/testutils/parse_sql.d.ts +6 -0
- package/testutils/parse_sql.js +16 -2
- package/testutils/test_edge_global_schema.d.ts +15 -0
- package/testutils/test_edge_global_schema.js +58 -0
- package/testutils/write.d.ts +2 -2
- package/testutils/write.js +3 -3
- package/tsc/ast.d.ts +44 -0
- package/tsc/ast.js +267 -0
- package/tsc/compilerOptions.d.ts +6 -0
- package/tsc/compilerOptions.js +40 -1
- package/tsc/move_generated.d.ts +1 -0
- package/tsc/move_generated.js +160 -0
- package/tsc/transform.d.ts +21 -0
- package/tsc/transform.js +167 -0
- package/tsc/transform_action.d.ts +22 -0
- package/tsc/transform_action.js +179 -0
- package/tsc/transform_ent.d.ts +17 -0
- package/tsc/transform_ent.js +59 -0
- package/tsc/transform_schema.d.ts +27 -0
- package/tsc/transform_schema.js +379 -0
- package/scripts/transform_schema.js +0 -288
package/core/context.js
CHANGED
|
@@ -8,6 +8,7 @@ class ContextCache {
|
|
|
8
8
|
// we have a per-table map to make it easier to purge and have less things to compare with
|
|
9
9
|
this.itemMap = new Map();
|
|
10
10
|
this.listMap = new Map();
|
|
11
|
+
this.entCache = new Map();
|
|
11
12
|
}
|
|
12
13
|
getLoader(name, create) {
|
|
13
14
|
let l = this.loaders.get(name);
|
|
@@ -39,7 +40,7 @@ class ContextCache {
|
|
|
39
40
|
const key = this.getkey(options);
|
|
40
41
|
let rows = m.get(key);
|
|
41
42
|
if (rows) {
|
|
42
|
-
(0, logger_1.log)("
|
|
43
|
+
(0, logger_1.log)("cache", {
|
|
43
44
|
"cache-hit": key,
|
|
44
45
|
"tableName": options.tableName,
|
|
45
46
|
});
|
|
@@ -54,7 +55,7 @@ class ContextCache {
|
|
|
54
55
|
const key = this.getkey(options);
|
|
55
56
|
let row = m.get(key);
|
|
56
57
|
if (row) {
|
|
57
|
-
(0, logger_1.log)("
|
|
58
|
+
(0, logger_1.log)("cache", {
|
|
58
59
|
"cache-hit": key,
|
|
59
60
|
"tableName": options.tableName,
|
|
60
61
|
});
|
|
@@ -82,6 +83,10 @@ class ContextCache {
|
|
|
82
83
|
this.loaders.clear();
|
|
83
84
|
this.itemMap.clear();
|
|
84
85
|
this.listMap.clear();
|
|
86
|
+
this.entCache.clear();
|
|
87
|
+
}
|
|
88
|
+
getEntCache() {
|
|
89
|
+
return this.entCache;
|
|
85
90
|
}
|
|
86
91
|
}
|
|
87
92
|
exports.ContextCache = ContextCache;
|
package/core/convert.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ export declare function convertBoolList(val: any): boolean[];
|
|
|
10
10
|
export declare function convertNullableBoolList(val: any): boolean[] | null;
|
|
11
11
|
export declare function convertJSON(val: any): any;
|
|
12
12
|
export declare function convertNullableJSON(val: any): any | null;
|
|
13
|
-
export declare function convertJSONList(val: any):
|
|
13
|
+
export declare function convertJSONList(val: any): any[];
|
|
14
14
|
export declare function convertNullableJSONList(val: any): any[] | null;
|
package/core/db.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Pool,
|
|
2
|
-
export interface Database {
|
|
1
|
+
import { Pool, PoolClient, PoolConfig } from "pg";
|
|
2
|
+
export interface Database extends PoolConfig {
|
|
3
3
|
database?: string;
|
|
4
4
|
user?: string;
|
|
5
5
|
password?: string;
|
|
6
6
|
host?: string;
|
|
7
7
|
port?: number;
|
|
8
|
-
ssl?: boolean;
|
|
9
8
|
sslmode?: string;
|
|
10
9
|
}
|
|
11
10
|
export declare type env = "production" | "test" | "development";
|
|
@@ -16,7 +15,7 @@ export declare enum Dialect {
|
|
|
16
15
|
}
|
|
17
16
|
interface DatabaseInfo {
|
|
18
17
|
dialect: Dialect;
|
|
19
|
-
config:
|
|
18
|
+
config: PoolConfig;
|
|
20
19
|
filePath?: string;
|
|
21
20
|
}
|
|
22
21
|
export default class DB {
|
package/core/db.js
CHANGED
package/core/ent.d.ts
CHANGED
|
@@ -1,30 +1,63 @@
|
|
|
1
1
|
import { Queryer, SyncQueryer } from "./db";
|
|
2
|
-
import { Viewer, Ent, ID, LoadRowsOptions, LoadRowOptions, Data, DataOptions, QueryableDataOptions, EditRowOptions, LoadEntOptions, LoadCustomEntOptions, EdgeQueryableDataOptions, Context,
|
|
2
|
+
import { Viewer, Ent, ID, LoadRowsOptions, LoadRowOptions, Data, DataOptions, QueryableDataOptions, EditRowOptions, LoadEntOptions, LoadCustomEntOptions, EdgeQueryableDataOptions, Context, CreateRowOptions, QueryDataOptions, SelectCustomDataOptions } from "./base";
|
|
3
3
|
import { Executor } from "../action/action";
|
|
4
4
|
import * as clause from "./clause";
|
|
5
5
|
import { Builder } from "../action";
|
|
6
6
|
import DataLoader from "dataloader";
|
|
7
|
-
|
|
8
|
-
export declare function
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function
|
|
11
|
-
export declare function
|
|
12
|
-
export declare function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export declare function
|
|
17
|
-
|
|
7
|
+
import { GlobalSchema } from "../schema/";
|
|
8
|
+
export declare function getEntKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): string;
|
|
9
|
+
export declare function loadEnt<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
|
|
10
|
+
export declare function loadEntViaKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, key: any, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
|
|
11
|
+
export declare function loadEntX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt>;
|
|
12
|
+
export declare function loadEntXViaKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, key: any, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt>;
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated use loadCustomEnts
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadEntFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, clause: clause.Clause): Promise<TEnt | null>;
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated use loadCustomEnts
|
|
19
|
+
*/
|
|
20
|
+
export declare function loadEntXFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, clause: clause.Clause): Promise<TEnt>;
|
|
21
|
+
export declare function loadEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, ...ids: ID[]): Promise<Map<ID, TEnt>>;
|
|
22
|
+
export declare function loadEntsList<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, ...ids: ID[]): Promise<TEnt[]>;
|
|
23
|
+
/**
|
|
24
|
+
* @deperecated use loadCustomEnts
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadEntsFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, clause: clause.Clause, options: LoadEntOptions<TEnt, TViewer>): Promise<Map<ID, TEnt>>;
|
|
27
|
+
export declare function loadCustomEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadCustomEntOptions<TEnt, TViewer>, query: CustomQuery): Promise<TEnt[]>;
|
|
28
|
+
interface parameterizedQueryOptions {
|
|
18
29
|
query: string;
|
|
19
30
|
values?: any[];
|
|
20
31
|
logValues?: any[];
|
|
21
32
|
}
|
|
22
|
-
export declare type CustomQuery = string |
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
export declare type CustomQuery = string | parameterizedQueryOptions | clause.Clause | QueryDataOptions;
|
|
34
|
+
/**
|
|
35
|
+
* Note that if there's default read transformations (e.g. soft delete) and a clause is passed in
|
|
36
|
+
* either as Clause or QueryDataOptions without {disableTransformations: true}, the default transformation
|
|
37
|
+
* (e.g. soft delete) is applied.
|
|
38
|
+
*
|
|
39
|
+
* Passing a full SQL string or Paramterized SQL string doesn't apply it and the given string is sent to the
|
|
40
|
+
* database as written.
|
|
41
|
+
*
|
|
42
|
+
* e.g.
|
|
43
|
+
* Foo.loadCustom(opts, 'SELECT * FROM foo') // doesn't change the query
|
|
44
|
+
* Foo.loadCustom(opts, { query: 'SELECT * FROM foo WHERE id = ?', values: [1]}) // doesn't change the query
|
|
45
|
+
* Foo.loadCustom(opts, query.Eq('time', Date.now())) // changes the query
|
|
46
|
+
* Foo.loadCustom(opts, {
|
|
47
|
+
* clause: query.LessEq('time', Date.now()),
|
|
48
|
+
* limit: 100,
|
|
49
|
+
* orderby: 'time',
|
|
50
|
+
* }) // changes the query
|
|
51
|
+
* Foo.loadCustom(opts, {
|
|
52
|
+
* clause: query.LessEq('time', Date.now()),
|
|
53
|
+
* limit: 100,
|
|
54
|
+
* orderby: 'time',
|
|
55
|
+
* disableTransformations: false
|
|
56
|
+
* }) // doesn't change the query
|
|
57
|
+
*/
|
|
58
|
+
export declare function loadCustomData(options: SelectCustomDataOptions, query: CustomQuery, context: Context | undefined): Promise<Data[]>;
|
|
59
|
+
export declare function loadDerivedEnt<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, data: Data, loader: new (viewer: TViewer, data: Data) => TEnt): Promise<TEnt | null>;
|
|
60
|
+
export declare function loadDerivedEntX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, data: Data, loader: new (viewer: TViewer, data: Data) => TEnt): Promise<TEnt>;
|
|
28
61
|
export declare function loadRowX(options: LoadRowOptions): Promise<Data>;
|
|
29
62
|
export declare function loadRow(options: LoadRowOptions): Promise<Data | null>;
|
|
30
63
|
export declare function performRawQuery(query: string, values: any[], logValues?: any[]): Promise<Data[]>;
|
|
@@ -52,8 +85,9 @@ export interface DataOperation<T extends Ent = Ent> {
|
|
|
52
85
|
}
|
|
53
86
|
export interface EditNodeOptions<T extends Ent> extends EditRowOptions {
|
|
54
87
|
fieldsToResolve: string[];
|
|
55
|
-
|
|
88
|
+
loadEntOptions: LoadEntOptions<T>;
|
|
56
89
|
placeholderID?: ID;
|
|
90
|
+
key: string;
|
|
57
91
|
}
|
|
58
92
|
export declare class EditNodeOperation<T extends Ent> implements DataOperation {
|
|
59
93
|
options: EditNodeOptions<T>;
|
|
@@ -69,7 +103,11 @@ export declare class EditNodeOperation<T extends Ent> implements DataOperation {
|
|
|
69
103
|
returnedRow(): Data | null;
|
|
70
104
|
createdEnt(viewer: Viewer): T | null;
|
|
71
105
|
}
|
|
106
|
+
export declare function setGlobalSchema(val: GlobalSchema): void;
|
|
107
|
+
export declare function clearGlobalSchema(): void;
|
|
108
|
+
export declare function __hasGlobalSchema(): boolean;
|
|
72
109
|
export declare class EdgeOperation implements DataOperation {
|
|
110
|
+
private builder;
|
|
73
111
|
edgeInput: AssocEdgeInput;
|
|
74
112
|
private options;
|
|
75
113
|
private edgeData;
|
|
@@ -98,9 +136,9 @@ export declare class EdgeOperation implements DataOperation {
|
|
|
98
136
|
export declare function buildInsertQuery(options: CreateRowOptions, suffix?: string): [string, string[], string[]];
|
|
99
137
|
export declare function createRow(queryer: Queryer, options: CreateRowOptions, suffix: string): Promise<Data | null>;
|
|
100
138
|
export declare function createRowSync(queryer: SyncQueryer, options: CreateRowOptions, suffix: string): Data | null;
|
|
101
|
-
export declare function buildUpdateQuery(options: EditRowOptions,
|
|
102
|
-
export declare function editRow(queryer: Queryer, options: EditRowOptions,
|
|
103
|
-
export declare function editRowSync(queryer: SyncQueryer, options: EditRowOptions,
|
|
139
|
+
export declare function buildUpdateQuery(options: EditRowOptions, suffix?: string): [string, any[], any[]];
|
|
140
|
+
export declare function editRow(queryer: Queryer, options: EditRowOptions, suffix?: string): Promise<Data | null>;
|
|
141
|
+
export declare function editRowSync(queryer: SyncQueryer, options: EditRowOptions, suffix?: string): Data | null;
|
|
104
142
|
export declare function deleteRows(queryer: Queryer, options: DataOptions, cls: clause.Clause): Promise<void>;
|
|
105
143
|
export declare function deleteRowsSync(queryer: SyncQueryer, options: DataOptions, cls: clause.Clause): void;
|
|
106
144
|
export declare class DeleteNodeOperation implements DataOperation {
|
|
@@ -118,7 +156,9 @@ export declare class AssocEdge {
|
|
|
118
156
|
id2Type: string;
|
|
119
157
|
time: Date;
|
|
120
158
|
data?: string | null;
|
|
159
|
+
private rawData;
|
|
121
160
|
constructor(data: Data);
|
|
161
|
+
__getRawData(): Data;
|
|
122
162
|
getCursor(): string;
|
|
123
163
|
}
|
|
124
164
|
interface cursorOptions {
|
|
@@ -147,7 +187,7 @@ export declare class AssocEdgeData {
|
|
|
147
187
|
edgeTable: string;
|
|
148
188
|
constructor(data: Data);
|
|
149
189
|
}
|
|
150
|
-
export declare const assocEdgeLoader: DataLoader<
|
|
190
|
+
export declare const assocEdgeLoader: DataLoader<ID, Data | null, ID>;
|
|
151
191
|
export declare function loadEdgeData(edgeType: string): Promise<AssocEdgeData | null>;
|
|
152
192
|
export declare function loadEdgeDatas(...edgeTypes: string[]): Promise<Map<string, AssocEdgeData>>;
|
|
153
193
|
export interface AssocEdgeConstructor<T extends AssocEdge> {
|
|
@@ -158,6 +198,7 @@ interface loadEdgesOptions {
|
|
|
158
198
|
edgeType: string;
|
|
159
199
|
context?: Context;
|
|
160
200
|
queryOptions?: EdgeQueryableDataOptions;
|
|
201
|
+
disableTransformations?: boolean;
|
|
161
202
|
}
|
|
162
203
|
interface loadCustomEdgesOptions<T extends AssocEdge> extends loadEdgesOptions {
|
|
163
204
|
ctr: AssocEdgeConstructor<T>;
|
|
@@ -165,17 +206,20 @@ interface loadCustomEdgesOptions<T extends AssocEdge> extends loadEdgesOptions {
|
|
|
165
206
|
export declare const DefaultLimit = 1000;
|
|
166
207
|
export declare function defaultEdgeQueryOptions(id1: ID, edgeType: string): EdgeQueryableDataOptions;
|
|
167
208
|
export declare function loadEdges(options: loadEdgesOptions): Promise<AssocEdge[]>;
|
|
209
|
+
export declare function getEdgeClauseAndFields(cls: clause.Clause, options: loadEdgesOptions): {
|
|
210
|
+
cls: clause.Clause;
|
|
211
|
+
fields: string[];
|
|
212
|
+
};
|
|
168
213
|
export declare function loadCustomEdges<T extends AssocEdge>(options: loadCustomEdgesOptions<T>): Promise<T[]>;
|
|
169
214
|
export declare function loadUniqueEdge(options: loadEdgesOptions): Promise<AssocEdge | null>;
|
|
170
|
-
export declare function loadUniqueNode<
|
|
215
|
+
export declare function loadUniqueNode<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id1: ID, edgeType: string, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
|
|
171
216
|
export declare function loadRawEdgeCountX(options: loadEdgesOptions): Promise<number>;
|
|
172
217
|
interface loadEdgeForIDOptions<T extends AssocEdge> extends loadCustomEdgesOptions<T> {
|
|
173
218
|
id2: ID;
|
|
174
219
|
}
|
|
175
220
|
export declare function loadEdgeForID2<T extends AssocEdge>(options: loadEdgeForIDOptions<T>): Promise<T | undefined>;
|
|
176
221
|
export declare function loadNodesByEdge<T extends Ent>(viewer: Viewer, id1: ID, edgeType: string, options: LoadEntOptions<T>): Promise<T[]>;
|
|
177
|
-
export declare function applyPrivacyPolicyForRow<
|
|
178
|
-
export declare function
|
|
179
|
-
export declare function applyPrivacyPolicyForRows<T extends Ent>(viewer: Viewer, rows: Data[], options: LoadEntOptions<T>): Promise<Map<ID, T>>;
|
|
222
|
+
export declare function applyPrivacyPolicyForRow<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, row: Data | null): Promise<TEnt | null>;
|
|
223
|
+
export declare function applyPrivacyPolicyForRows<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, rows: Data[], options: LoadEntOptions<TEnt, TViewer>): Promise<Map<ID, TEnt>>;
|
|
180
224
|
export declare function getEdgeTypeInGroup<T extends string>(viewer: Viewer, id1: ID, id2: ID, m: Map<T, string>): Promise<[T, AssocEdge] | undefined>;
|
|
181
225
|
export {};
|