@snowtop/ent 0.1.0-alpha15 → 0.1.0-alpha151
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 +27 -16
- package/action/action.js +22 -7
- package/action/executor.d.ts +16 -3
- package/action/executor.js +90 -23
- package/action/experimental_action.d.ts +25 -16
- package/action/experimental_action.js +35 -9
- package/action/index.d.ts +3 -1
- package/action/index.js +7 -1
- package/action/operations.d.ts +125 -0
- package/action/operations.js +684 -0
- package/action/orchestrator.d.ts +38 -12
- package/action/orchestrator.js +427 -102
- package/action/relative_value.d.ts +47 -0
- package/action/relative_value.js +125 -0
- package/action/transaction.d.ts +10 -0
- package/action/transaction.js +23 -0
- package/auth/auth.d.ts +1 -1
- package/core/base.d.ts +52 -21
- package/core/base.js +7 -1
- package/core/clause.d.ts +95 -40
- package/core/clause.js +395 -64
- package/core/config.d.ts +15 -1
- package/core/config.js +10 -1
- package/core/const.d.ts +3 -0
- package/core/const.js +6 -0
- package/core/context.d.ts +4 -2
- package/core/context.js +20 -2
- package/core/convert.d.ts +1 -1
- package/core/date.js +1 -5
- package/core/db.d.ts +12 -8
- package/core/db.js +18 -8
- package/core/ent.d.ts +68 -94
- package/core/ent.js +538 -587
- package/core/global_schema.d.ts +7 -0
- package/core/global_schema.js +51 -0
- package/core/loaders/assoc_count_loader.d.ts +1 -0
- package/core/loaders/assoc_count_loader.js +10 -2
- package/core/loaders/assoc_edge_loader.d.ts +1 -1
- package/core/loaders/assoc_edge_loader.js +10 -13
- package/core/loaders/index.d.ts +1 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/index_loader.d.ts +3 -3
- package/core/loaders/loader.d.ts +2 -2
- package/core/loaders/loader.js +5 -5
- package/core/loaders/object_loader.d.ts +30 -9
- package/core/loaders/object_loader.js +225 -78
- package/core/loaders/query_loader.d.ts +6 -12
- package/core/loaders/query_loader.js +54 -13
- package/core/loaders/raw_count_loader.d.ts +1 -0
- package/core/loaders/raw_count_loader.js +7 -2
- package/core/logger.d.ts +1 -1
- package/core/logger.js +1 -0
- package/core/privacy.d.ts +7 -6
- package/core/privacy.js +21 -25
- package/core/query/assoc_query.d.ts +3 -2
- package/core/query/assoc_query.js +9 -1
- package/core/query/custom_clause_query.d.ts +27 -0
- package/core/query/custom_clause_query.js +88 -0
- package/core/query/custom_query.d.ts +17 -2
- package/core/query/custom_query.js +88 -13
- package/core/query/index.d.ts +1 -0
- package/core/query/index.js +3 -1
- package/core/query/query.d.ts +15 -3
- package/core/query/query.js +128 -53
- package/core/query/shared_assoc_test.d.ts +2 -1
- package/core/query/shared_assoc_test.js +44 -54
- package/core/query/shared_test.d.ts +8 -1
- package/core/query/shared_test.js +532 -236
- package/core/viewer.d.ts +2 -0
- package/core/viewer.js +3 -1
- package/graphql/graphql.d.ts +52 -19
- package/graphql/graphql.js +174 -136
- package/graphql/graphql_field_helpers.d.ts +7 -1
- package/graphql/graphql_field_helpers.js +21 -1
- package/graphql/index.d.ts +2 -2
- package/graphql/index.js +3 -5
- package/graphql/query/connection_type.d.ts +9 -9
- package/graphql/query/shared_assoc_test.js +1 -1
- package/graphql/query/shared_edge_connection.js +1 -19
- package/graphql/scalars/orderby_direction.d.ts +2 -0
- package/graphql/scalars/orderby_direction.js +15 -0
- package/imports/dataz/example1/_auth.js +128 -47
- package/imports/dataz/example1/_viewer.js +87 -39
- package/imports/index.d.ts +7 -2
- package/imports/index.js +20 -5
- package/index.d.ts +18 -5
- package/index.js +30 -10
- package/package.json +18 -17
- package/parse_schema/parse.d.ts +31 -9
- package/parse_schema/parse.js +179 -32
- package/schema/base_schema.d.ts +13 -3
- package/schema/base_schema.js +13 -0
- package/schema/field.d.ts +78 -21
- package/schema/field.js +231 -71
- package/schema/index.d.ts +2 -2
- package/schema/index.js +7 -2
- package/schema/json_field.d.ts +16 -4
- package/schema/json_field.js +32 -2
- package/schema/schema.d.ts +109 -20
- package/schema/schema.js +42 -53
- package/schema/struct_field.d.ts +15 -3
- package/schema/struct_field.js +117 -22
- package/schema/union_field.d.ts +1 -1
- package/scripts/custom_compiler.js +12 -8
- package/scripts/custom_graphql.js +145 -34
- package/scripts/migrate_v0.1.js +36 -0
- package/scripts/move_types.js +120 -0
- package/scripts/read_schema.js +22 -7
- package/testutils/action/complex_schemas.d.ts +69 -0
- package/testutils/action/complex_schemas.js +405 -0
- package/testutils/builder.d.ts +39 -43
- package/testutils/builder.js +75 -49
- package/testutils/db/fixture.d.ts +10 -0
- package/testutils/db/fixture.js +26 -0
- package/testutils/db/{test_db.d.ts → temp_db.d.ts} +32 -8
- package/testutils/db/{test_db.js → temp_db.js} +244 -48
- package/testutils/db/value.d.ts +7 -0
- package/testutils/db/value.js +251 -0
- package/testutils/db_mock.d.ts +16 -4
- package/testutils/db_mock.js +52 -9
- package/testutils/db_time_zone.d.ts +4 -0
- package/testutils/db_time_zone.js +41 -0
- package/testutils/ent-graphql-tests/index.d.ts +7 -1
- package/testutils/ent-graphql-tests/index.js +56 -26
- package/testutils/fake_comms.js +1 -1
- package/testutils/fake_data/const.d.ts +2 -1
- package/testutils/fake_data/const.js +3 -0
- package/testutils/fake_data/fake_contact.d.ts +7 -3
- package/testutils/fake_data/fake_contact.js +13 -7
- package/testutils/fake_data/fake_event.d.ts +4 -1
- package/testutils/fake_data/fake_event.js +7 -6
- package/testutils/fake_data/fake_tag.d.ts +36 -0
- package/testutils/fake_data/fake_tag.js +89 -0
- package/testutils/fake_data/fake_user.d.ts +8 -5
- package/testutils/fake_data/fake_user.js +16 -15
- package/testutils/fake_data/index.js +5 -1
- package/testutils/fake_data/internal.d.ts +2 -0
- package/testutils/fake_data/internal.js +7 -1
- package/testutils/fake_data/tag_query.d.ts +13 -0
- package/testutils/fake_data/tag_query.js +43 -0
- package/testutils/fake_data/test_helpers.d.ts +11 -4
- package/testutils/fake_data/test_helpers.js +29 -13
- package/testutils/fake_data/user_query.d.ts +11 -4
- package/testutils/fake_data/user_query.js +54 -22
- package/testutils/fake_log.js +1 -1
- 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 +62 -0
- package/testutils/write.d.ts +2 -2
- package/testutils/write.js +33 -7
- package/tsc/ast.d.ts +25 -2
- package/tsc/ast.js +141 -17
- package/tsc/compilerOptions.js +5 -1
- package/tsc/move_generated.d.ts +1 -0
- package/tsc/move_generated.js +164 -0
- package/tsc/transform.d.ts +22 -0
- package/tsc/transform.js +182 -0
- package/tsc/transform_action.d.ts +22 -0
- package/tsc/transform_action.js +183 -0
- package/tsc/transform_ent.d.ts +17 -0
- package/tsc/transform_ent.js +60 -0
- package/tsc/transform_schema.d.ts +27 -0
- package/{scripts → tsc}/transform_schema.js +146 -117
- package/graphql/enums.d.ts +0 -3
- package/graphql/enums.js +0 -25
- package/scripts/move_generated.js +0 -142
- package/scripts/transform_code.js +0 -113
- package/scripts/transform_schema.d.ts +0 -1
- /package/scripts/{move_generated.d.ts → migrate_v0.1.d.ts} +0 -0
- /package/scripts/{transform_code.d.ts → move_types.d.ts} +0 -0
package/core/const.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SCHEMA_PATH = exports.GRAPHQL_PATH = exports.PACKAGE = void 0;
|
|
4
|
+
exports.PACKAGE = "@snowtop/ent";
|
|
5
|
+
exports.GRAPHQL_PATH = "@snowtop/ent/graphql";
|
|
6
|
+
exports.SCHEMA_PATH = "@snowtop/ent/schema";
|
package/core/context.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { Viewer, Data, Loader } from "./base";
|
|
2
|
+
import { Viewer, Data, Loader, LoaderWithLoadMany } from "./base";
|
|
3
3
|
import { IncomingMessage, ServerResponse } from "http";
|
|
4
4
|
import * as clause from "./clause";
|
|
5
5
|
import { Context } from "./base";
|
|
@@ -11,7 +11,9 @@ export interface RequestContext<TViewer extends Viewer = Viewer> extends Context
|
|
|
11
11
|
}
|
|
12
12
|
export declare class ContextCache {
|
|
13
13
|
loaders: Map<string, Loader<any, any>>;
|
|
14
|
-
|
|
14
|
+
loaderWithLoadMany: Map<string, LoaderWithLoadMany<any, any>>;
|
|
15
|
+
getLoader<K, V>(name: string, create: () => Loader<K, V>): Loader<K, V>;
|
|
16
|
+
getLoaderWithLoadMany<K, V>(name: string, create: () => LoaderWithLoadMany<K, V>): LoaderWithLoadMany<K, V>;
|
|
15
17
|
private itemMap;
|
|
16
18
|
private listMap;
|
|
17
19
|
private getkey;
|
package/core/context.js
CHANGED
|
@@ -5,6 +5,8 @@ const logger_1 = require("./logger");
|
|
|
5
5
|
class ContextCache {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.loaders = new Map();
|
|
8
|
+
// we should eventually combine the two but better for typing to be separate for now
|
|
9
|
+
this.loaderWithLoadMany = new Map();
|
|
8
10
|
// we have a per-table map to make it easier to purge and have less things to compare with
|
|
9
11
|
this.itemMap = new Map();
|
|
10
12
|
this.listMap = new Map();
|
|
@@ -19,6 +21,16 @@ class ContextCache {
|
|
|
19
21
|
this.loaders.set(name, l);
|
|
20
22
|
return l;
|
|
21
23
|
}
|
|
24
|
+
getLoaderWithLoadMany(name, create) {
|
|
25
|
+
let l = this.loaderWithLoadMany.get(name);
|
|
26
|
+
if (l) {
|
|
27
|
+
return l;
|
|
28
|
+
}
|
|
29
|
+
(0, logger_1.log)("debug", `new context-aware loader created for ${name}`);
|
|
30
|
+
l = create();
|
|
31
|
+
this.loaderWithLoadMany.set(name, l);
|
|
32
|
+
return l;
|
|
33
|
+
}
|
|
22
34
|
// tableName is ignored bcos already indexed on that
|
|
23
35
|
// maybe we just want to store sql queries???
|
|
24
36
|
getkey(options) {
|
|
@@ -39,7 +51,7 @@ class ContextCache {
|
|
|
39
51
|
const key = this.getkey(options);
|
|
40
52
|
let rows = m.get(key);
|
|
41
53
|
if (rows) {
|
|
42
|
-
(0, logger_1.log)("
|
|
54
|
+
(0, logger_1.log)("cache", {
|
|
43
55
|
"cache-hit": key,
|
|
44
56
|
"tableName": options.tableName,
|
|
45
57
|
});
|
|
@@ -54,7 +66,7 @@ class ContextCache {
|
|
|
54
66
|
const key = this.getkey(options);
|
|
55
67
|
let row = m.get(key);
|
|
56
68
|
if (row) {
|
|
57
|
-
(0, logger_1.log)("
|
|
69
|
+
(0, logger_1.log)("cache", {
|
|
58
70
|
"cache-hit": key,
|
|
59
71
|
"tableName": options.tableName,
|
|
60
72
|
});
|
|
@@ -79,7 +91,13 @@ class ContextCache {
|
|
|
79
91
|
// but may have some benefits by explicitily doing so?
|
|
80
92
|
loader.clearAll();
|
|
81
93
|
}
|
|
94
|
+
for (const [_key, loader] of this.loaderWithLoadMany) {
|
|
95
|
+
// may not need this since we're clearing the loaders themselves...
|
|
96
|
+
// but may have some benefits by explicitily doing so?
|
|
97
|
+
loader.clearAll();
|
|
98
|
+
}
|
|
82
99
|
this.loaders.clear();
|
|
100
|
+
this.loaderWithLoadMany.clear();
|
|
83
101
|
this.itemMap.clear();
|
|
84
102
|
this.listMap.clear();
|
|
85
103
|
}
|
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/date.js
CHANGED
|
@@ -10,11 +10,7 @@ function parseDate(val, throwErr) {
|
|
|
10
10
|
else if (typeof val === "string") {
|
|
11
11
|
dt = luxon_1.DateTime.fromISO(val);
|
|
12
12
|
if (!dt.isValid) {
|
|
13
|
-
|
|
14
|
-
if (ms === NaN) {
|
|
15
|
-
throw throwErr(`invalid input for type Time ${val}`);
|
|
16
|
-
}
|
|
17
|
-
dt = luxon_1.DateTime.fromMillis(ms);
|
|
13
|
+
dt = luxon_1.DateTime.fromMillis(Date.parse(val));
|
|
18
14
|
}
|
|
19
15
|
}
|
|
20
16
|
else if (val instanceof Date) {
|
package/core/db.d.ts
CHANGED
|
@@ -5,10 +5,9 @@ export interface Database extends PoolConfig {
|
|
|
5
5
|
password?: string;
|
|
6
6
|
host?: string;
|
|
7
7
|
port?: number;
|
|
8
|
-
ssl?: boolean;
|
|
9
8
|
sslmode?: string;
|
|
10
9
|
}
|
|
11
|
-
export
|
|
10
|
+
export type env = "production" | "test" | "development";
|
|
12
11
|
export declare type DBDict = Partial<Record<env, Database>>;
|
|
13
12
|
export declare enum Dialect {
|
|
14
13
|
Postgres = "postgres",
|
|
@@ -19,6 +18,12 @@ interface DatabaseInfo {
|
|
|
19
18
|
config: PoolConfig;
|
|
20
19
|
filePath?: string;
|
|
21
20
|
}
|
|
21
|
+
interface clientConfigArgs {
|
|
22
|
+
connectionString?: string;
|
|
23
|
+
dbFile?: string;
|
|
24
|
+
db?: Database | DBDict;
|
|
25
|
+
cfg?: PoolConfig;
|
|
26
|
+
}
|
|
22
27
|
export default class DB {
|
|
23
28
|
db: DatabaseInfo;
|
|
24
29
|
static instance: DB;
|
|
@@ -29,15 +34,12 @@ export default class DB {
|
|
|
29
34
|
getConnection(): Connection;
|
|
30
35
|
getPool(): Queryer;
|
|
31
36
|
getNewClient(): Promise<Client>;
|
|
32
|
-
getSQLiteClient():
|
|
37
|
+
getSQLiteClient(): Sqlite;
|
|
33
38
|
endPool(): Promise<void>;
|
|
39
|
+
emitsExplicitTransactionStatements(): boolean;
|
|
34
40
|
static getInstance(): DB;
|
|
35
41
|
static getDialect(): Dialect;
|
|
36
|
-
static initDB(args?:
|
|
37
|
-
connectionString?: string;
|
|
38
|
-
dbFile?: string;
|
|
39
|
-
db?: Database | DBDict;
|
|
40
|
-
}): void;
|
|
42
|
+
static initDB(args?: clientConfigArgs): void;
|
|
41
43
|
}
|
|
42
44
|
export declare const defaultTimestampParser: any;
|
|
43
45
|
export interface Queryer {
|
|
@@ -54,6 +56,7 @@ export interface Connection extends Queryer {
|
|
|
54
56
|
self(): Queryer;
|
|
55
57
|
newClient(): Promise<Client>;
|
|
56
58
|
close(): Promise<void>;
|
|
59
|
+
runInTransaction?(cb: () => void | Promise<void>): any;
|
|
57
60
|
}
|
|
58
61
|
export interface QueryResultRow {
|
|
59
62
|
[column: string]: any;
|
|
@@ -78,6 +81,7 @@ interface SqliteRunResult {
|
|
|
78
81
|
}
|
|
79
82
|
interface SqliteDatabase {
|
|
80
83
|
memory: boolean;
|
|
84
|
+
exec(query: string): SqliteStatement;
|
|
81
85
|
prepare(query: string): SqliteStatement;
|
|
82
86
|
close(): void;
|
|
83
87
|
transaction(fn: (...params: any[]) => any): SqliteTransaction;
|
package/core/db.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -35,13 +39,14 @@ var Dialect;
|
|
|
35
39
|
Dialect["Postgres"] = "postgres";
|
|
36
40
|
Dialect["SQLite"] = "sqlite";
|
|
37
41
|
})(Dialect = exports.Dialect || (exports.Dialect = {}));
|
|
38
|
-
function parseConnectionString(str) {
|
|
42
|
+
function parseConnectionString(str, args) {
|
|
39
43
|
if (str.startsWith("sqlite:///")) {
|
|
40
44
|
let filePath = str.substr(10);
|
|
41
45
|
return {
|
|
42
46
|
dialect: Dialect.SQLite,
|
|
43
47
|
config: {
|
|
44
48
|
connectionString: str,
|
|
49
|
+
...args?.cfg,
|
|
45
50
|
},
|
|
46
51
|
filePath,
|
|
47
52
|
};
|
|
@@ -49,6 +54,7 @@ function parseConnectionString(str) {
|
|
|
49
54
|
return {
|
|
50
55
|
dialect: Dialect.Postgres,
|
|
51
56
|
config: {
|
|
57
|
+
...args?.cfg,
|
|
52
58
|
connectionString: str,
|
|
53
59
|
},
|
|
54
60
|
};
|
|
@@ -63,12 +69,12 @@ function getClientConfig(args) {
|
|
|
63
69
|
// if there's a db connection string, use that first
|
|
64
70
|
const str = process.env.DB_CONNECTION_STRING;
|
|
65
71
|
if (str) {
|
|
66
|
-
return parseConnectionString(str);
|
|
72
|
+
return parseConnectionString(str, args);
|
|
67
73
|
}
|
|
68
74
|
let file = "config/database.yml";
|
|
69
75
|
if (args) {
|
|
70
76
|
if (args.connectionString) {
|
|
71
|
-
return parseConnectionString(args.connectionString);
|
|
77
|
+
return parseConnectionString(args.connectionString, args);
|
|
72
78
|
}
|
|
73
79
|
if (args.db) {
|
|
74
80
|
let db;
|
|
@@ -148,7 +154,7 @@ class DB {
|
|
|
148
154
|
async getNewClient() {
|
|
149
155
|
return this.q.newClient();
|
|
150
156
|
}
|
|
151
|
-
|
|
157
|
+
getSQLiteClient() {
|
|
152
158
|
if (this.db.dialect == Dialect.Postgres) {
|
|
153
159
|
throw new Error(`can't call getSQLiteClient when dialect is postgres`);
|
|
154
160
|
}
|
|
@@ -158,6 +164,10 @@ class DB {
|
|
|
158
164
|
async endPool() {
|
|
159
165
|
return this.q.close();
|
|
160
166
|
}
|
|
167
|
+
emitsExplicitTransactionStatements() {
|
|
168
|
+
const instance = DB.getInstance();
|
|
169
|
+
return instance.q.runInTransaction === undefined;
|
|
170
|
+
}
|
|
161
171
|
// throws if invalid
|
|
162
172
|
static getInstance() {
|
|
163
173
|
if (DB.instance) {
|
|
@@ -192,8 +202,6 @@ exports.defaultTimestampParser = pg_1.default.types.getTypeParser(pg_1.default.t
|
|
|
192
202
|
// it's parsed as UTC time as opposed to the local time
|
|
193
203
|
pg_1.default.types.setTypeParser(pg_1.default.types.builtins.TIMESTAMP, function (val) {
|
|
194
204
|
return luxon_1.DateTime.fromSQL(val + "Z").toJSDate();
|
|
195
|
-
// let d = new Date(val + "Z");
|
|
196
|
-
// return d;
|
|
197
205
|
});
|
|
198
206
|
class Sqlite {
|
|
199
207
|
constructor(db) {
|
|
@@ -230,6 +238,8 @@ class Sqlite {
|
|
|
230
238
|
r = this.db.prepare(query).get(this.convertValues(values));
|
|
231
239
|
}
|
|
232
240
|
else {
|
|
241
|
+
// TODO querySync() with no values seems to do the wrong thing...
|
|
242
|
+
// e.g. querySync('select count(*) as count from table') returns nonsense
|
|
233
243
|
r = this.db.prepare(query).run();
|
|
234
244
|
}
|
|
235
245
|
return {
|
|
@@ -312,7 +322,7 @@ class Postgres {
|
|
|
312
322
|
};
|
|
313
323
|
}
|
|
314
324
|
async close() {
|
|
315
|
-
return this.pool.end();
|
|
325
|
+
return await this.pool.end();
|
|
316
326
|
}
|
|
317
327
|
}
|
|
318
328
|
exports.Postgres = Postgres;
|
package/core/ent.d.ts
CHANGED
|
@@ -1,113 +1,92 @@
|
|
|
1
1
|
import { Queryer, SyncQueryer } from "./db";
|
|
2
|
-
import { Viewer, Ent, ID, LoadRowsOptions, LoadRowOptions, Data, DataOptions, QueryableDataOptions, EditRowOptions, LoadEntOptions, LoadCustomEntOptions, EdgeQueryableDataOptions, Context,
|
|
3
|
-
import { Executor } from "../action/action";
|
|
2
|
+
import { Viewer, Ent, ID, LoadRowsOptions, LoadRowOptions, Data, DataOptions, QueryableDataOptions, EditRowOptions, LoadEntOptions, LoadCustomEntOptions, EdgeQueryableDataOptions, Context, CreateRowOptions, QueryDataOptions, SelectCustomDataOptions } from "./base";
|
|
4
3
|
import * as clause from "./clause";
|
|
5
|
-
import { Builder } from "../action";
|
|
6
4
|
import DataLoader from "dataloader";
|
|
5
|
+
export declare function getEntKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): string;
|
|
7
6
|
export declare function loadEnt<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
|
|
8
7
|
export declare function loadEntViaKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, key: any, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
|
|
9
8
|
export declare function loadEntX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt>;
|
|
10
9
|
export declare function loadEntXViaKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, key: any, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt>;
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated use loadCustomEnts
|
|
12
|
+
*/
|
|
11
13
|
export declare function loadEntFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, clause: clause.Clause): Promise<TEnt | null>;
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated use loadCustomEnts
|
|
16
|
+
*/
|
|
12
17
|
export declare function loadEntXFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, clause: clause.Clause): Promise<TEnt>;
|
|
13
18
|
export declare function loadEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, ...ids: ID[]): Promise<Map<ID, TEnt>>;
|
|
14
19
|
export declare function loadEntsList<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, ...ids: ID[]): Promise<TEnt[]>;
|
|
20
|
+
/**
|
|
21
|
+
* @deperecated use loadCustomEnts
|
|
22
|
+
*/
|
|
15
23
|
export declare function loadEntsFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, clause: clause.Clause, options: LoadEntOptions<TEnt, TViewer>): Promise<Map<ID, TEnt>>;
|
|
16
|
-
export declare function loadCustomEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadCustomEntOptions<TEnt, TViewer>, query: CustomQuery): Promise<TEnt[]>;
|
|
17
|
-
interface
|
|
24
|
+
export declare function loadCustomEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer, TQueryData extends Data = Data, TResultData extends Data = TQueryData, TKey = keyof TQueryData>(viewer: TViewer, options: LoadCustomEntOptions<TEnt, TViewer, TResultData>, query: CustomQuery<TQueryData, TKey>): Promise<TEnt[]>;
|
|
25
|
+
export interface parameterizedQueryOptions {
|
|
18
26
|
query: string;
|
|
19
27
|
values?: any[];
|
|
20
28
|
logValues?: any[];
|
|
21
29
|
}
|
|
22
|
-
export
|
|
23
|
-
|
|
30
|
+
export type CustomQuery<T extends Data = Data, K = keyof T> = string | parameterizedQueryOptions | clause.Clause<T, K> | QueryDataOptions<T, K>;
|
|
31
|
+
/**
|
|
32
|
+
* Note that if there's default read transformations (e.g. soft delete) and a clause is passed in
|
|
33
|
+
* either as Clause or QueryDataOptions without {disableTransformations: true}, the default transformation
|
|
34
|
+
* (e.g. soft delete) is applied.
|
|
35
|
+
*
|
|
36
|
+
* Passing a full SQL string or Paramterized SQL string doesn't apply it and the given string is sent to the
|
|
37
|
+
* database as written.
|
|
38
|
+
*
|
|
39
|
+
* e.g.
|
|
40
|
+
* Foo.loadCustom(opts, 'SELECT * FROM foo') // doesn't change the query
|
|
41
|
+
* Foo.loadCustom(opts, { query: 'SELECT * FROM foo WHERE id = ?', values: [1]}) // doesn't change the query
|
|
42
|
+
* Foo.loadCustom(opts, query.Eq('time', Date.now())) // changes the query
|
|
43
|
+
* Foo.loadCustom(opts, {
|
|
44
|
+
* clause: query.LessEq('time', Date.now()),
|
|
45
|
+
* limit: 100,
|
|
46
|
+
* orderby: 'time',
|
|
47
|
+
* }) // changes the query
|
|
48
|
+
* Foo.loadCustom(opts, {
|
|
49
|
+
* clause: query.LessEq('time', Date.now()),
|
|
50
|
+
* limit: 100,
|
|
51
|
+
* orderby: 'time',
|
|
52
|
+
* disableTransformations: false
|
|
53
|
+
* }) // doesn't change the query
|
|
54
|
+
*
|
|
55
|
+
* For queries that pass in a clause, we batch them with an underlying dataloader so that multiple queries with the same clause
|
|
56
|
+
* or parallel queries with the same clause are batched together.
|
|
57
|
+
*
|
|
58
|
+
* If a raw or parameterized query is passed in, we don't attempt to batch them together and they're executed as is.
|
|
59
|
+
* If you end up with a scenario where you may need to coalesce or batch (non-clause) queries here, you should use some kind of memoization here.
|
|
60
|
+
*/
|
|
61
|
+
export declare function loadCustomData<TQueryData extends Data = Data, TResultData extends Data = TQueryData, K = keyof TQueryData>(options: SelectCustomDataOptions<TResultData>, query: CustomQuery<TQueryData, K>, context: Context | undefined): Promise<TResultData[]>;
|
|
62
|
+
export declare function loadCustomCount<T extends Data = Data, K = keyof T>(options: SelectCustomDataOptions<T>, query: CustomQuery<T, K>, context: Context | undefined): Promise<number>;
|
|
24
63
|
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>;
|
|
25
64
|
export declare function loadDerivedEntX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, data: Data, loader: new (viewer: TViewer, data: Data) => TEnt): Promise<TEnt>;
|
|
65
|
+
export declare function logQuery(query: string, logValues: any[]): void;
|
|
26
66
|
export declare function loadRowX(options: LoadRowOptions): Promise<Data>;
|
|
27
67
|
export declare function loadRow(options: LoadRowOptions): Promise<Data | null>;
|
|
68
|
+
export declare function ___setLogQueryErrorWithError(val: boolean | undefined): void;
|
|
28
69
|
export declare function performRawQuery(query: string, values: any[], logValues?: any[]): Promise<Data[]>;
|
|
29
70
|
export declare function loadRows(options: LoadRowsOptions): Promise<Data[]>;
|
|
30
71
|
export declare function buildQuery(options: QueryableDataOptions): string;
|
|
31
|
-
interface GroupQueryOptions {
|
|
72
|
+
interface GroupQueryOptions<T extends Data, K = keyof T> {
|
|
32
73
|
tableName: string;
|
|
33
|
-
clause?: clause.Clause
|
|
34
|
-
groupColumn:
|
|
35
|
-
fields:
|
|
74
|
+
clause?: clause.Clause<T, K>;
|
|
75
|
+
groupColumn: K;
|
|
76
|
+
fields: K[];
|
|
36
77
|
values: any[];
|
|
37
78
|
orderby?: string;
|
|
38
79
|
limit: number;
|
|
39
80
|
}
|
|
40
|
-
export declare function buildGroupQuery(options: GroupQueryOptions): [string, clause.Clause];
|
|
41
|
-
export interface DataOperation<T extends Ent = Ent> {
|
|
42
|
-
preFetch?(queryer: Queryer, context?: Context): Promise<void>;
|
|
43
|
-
performWriteSync(queryer: SyncQueryer, context?: Context): void;
|
|
44
|
-
performWrite(queryer: Queryer, context?: Context): Promise<void>;
|
|
45
|
-
placeholderID?: ID;
|
|
46
|
-
returnedRow?(): Data | null;
|
|
47
|
-
createdEnt?(viewer: Viewer): T | null;
|
|
48
|
-
resolve?(executor: Executor): void;
|
|
49
|
-
postFetch?(queryer: Queryer, context?: Context): Promise<void>;
|
|
50
|
-
}
|
|
51
|
-
export interface EditNodeOptions<T extends Ent> extends EditRowOptions {
|
|
52
|
-
fieldsToResolve: string[];
|
|
53
|
-
loadEntOptions: LoadEntOptions<T>;
|
|
54
|
-
placeholderID?: ID;
|
|
55
|
-
}
|
|
56
|
-
export declare class EditNodeOperation<T extends Ent> implements DataOperation {
|
|
57
|
-
options: EditNodeOptions<T>;
|
|
58
|
-
private existingEnt;
|
|
59
|
-
row: Data | null;
|
|
60
|
-
placeholderID?: ID | undefined;
|
|
61
|
-
constructor(options: EditNodeOptions<T>, existingEnt?: Ent | null);
|
|
62
|
-
resolve<T extends Ent>(executor: Executor): void;
|
|
63
|
-
private hasData;
|
|
64
|
-
performWrite(queryer: Queryer, context?: Context): Promise<void>;
|
|
65
|
-
private reloadRow;
|
|
66
|
-
performWriteSync(queryer: SyncQueryer, context?: Context): void;
|
|
67
|
-
returnedRow(): Data | null;
|
|
68
|
-
createdEnt(viewer: Viewer): T | null;
|
|
69
|
-
}
|
|
70
|
-
export declare class EdgeOperation implements DataOperation {
|
|
71
|
-
edgeInput: AssocEdgeInput;
|
|
72
|
-
private options;
|
|
73
|
-
private edgeData;
|
|
74
|
-
private constructor();
|
|
75
|
-
preFetch(queryer: Queryer, context?: Context): Promise<void>;
|
|
76
|
-
performWrite(queryer: Queryer, context?: Context): Promise<void>;
|
|
77
|
-
performWriteSync(queryer: SyncQueryer, context?: Context): void;
|
|
78
|
-
private getDeleteRowParams;
|
|
79
|
-
private performDeleteWrite;
|
|
80
|
-
private performDeleteWriteSync;
|
|
81
|
-
private getInsertRowParams;
|
|
82
|
-
private performInsertWrite;
|
|
83
|
-
private performInsertWriteSync;
|
|
84
|
-
private resolveImpl;
|
|
85
|
-
resolve(executor: Executor): void;
|
|
86
|
-
symmetricEdge(): EdgeOperation;
|
|
87
|
-
inverseEdge(edgeData: AssocEdgeData): EdgeOperation;
|
|
88
|
-
private static resolveIDs;
|
|
89
|
-
private static isBuilder;
|
|
90
|
-
private static resolveData;
|
|
91
|
-
static inboundEdge<T extends Ent, T2 extends Ent>(builder: Builder<T>, edgeType: string, id1: Builder<T2> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation;
|
|
92
|
-
static outboundEdge<T extends Ent, T2 extends Ent>(builder: Builder<T>, edgeType: string, id2: Builder<T2> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation;
|
|
93
|
-
static removeInboundEdge<T extends Ent>(builder: Builder<T>, edgeType: string, id1: ID): EdgeOperation;
|
|
94
|
-
static removeOutboundEdge<T extends Ent>(builder: Builder<T>, edgeType: string, id2: ID): EdgeOperation;
|
|
95
|
-
}
|
|
81
|
+
export declare function buildGroupQuery<T extends Data = Data, K = keyof T>(options: GroupQueryOptions<T, K>): [string, clause.Clause<T, K>];
|
|
96
82
|
export declare function buildInsertQuery(options: CreateRowOptions, suffix?: string): [string, string[], string[]];
|
|
97
83
|
export declare function createRow(queryer: Queryer, options: CreateRowOptions, suffix: string): Promise<Data | null>;
|
|
98
84
|
export declare function createRowSync(queryer: SyncQueryer, options: CreateRowOptions, suffix: string): Data | null;
|
|
99
|
-
export declare function buildUpdateQuery(options: EditRowOptions,
|
|
100
|
-
export declare function editRow(queryer: Queryer, options: EditRowOptions,
|
|
101
|
-
export declare function editRowSync(queryer: SyncQueryer, options: EditRowOptions,
|
|
85
|
+
export declare function buildUpdateQuery(options: EditRowOptions, suffix?: string): [string, any[], any[]];
|
|
86
|
+
export declare function editRow(queryer: Queryer, options: EditRowOptions, suffix?: string): Promise<Data | null>;
|
|
87
|
+
export declare function editRowSync(queryer: SyncQueryer, options: EditRowOptions, suffix?: string): Data | null;
|
|
102
88
|
export declare function deleteRows(queryer: Queryer, options: DataOptions, cls: clause.Clause): Promise<void>;
|
|
103
89
|
export declare function deleteRowsSync(queryer: SyncQueryer, options: DataOptions, cls: clause.Clause): void;
|
|
104
|
-
export declare class DeleteNodeOperation implements DataOperation {
|
|
105
|
-
private id;
|
|
106
|
-
private options;
|
|
107
|
-
constructor(id: ID, options: DataOptions);
|
|
108
|
-
performWrite(queryer: Queryer, context?: Context): Promise<void>;
|
|
109
|
-
performWriteSync(queryer: SyncQueryer, context?: Context): void;
|
|
110
|
-
}
|
|
111
90
|
export declare class AssocEdge {
|
|
112
91
|
id1: ID;
|
|
113
92
|
id1Type: string;
|
|
@@ -116,7 +95,9 @@ export declare class AssocEdge {
|
|
|
116
95
|
id2Type: string;
|
|
117
96
|
time: Date;
|
|
118
97
|
data?: string | null;
|
|
98
|
+
private rawData;
|
|
119
99
|
constructor(data: Data);
|
|
100
|
+
__getRawData(): Data;
|
|
120
101
|
getCursor(): string;
|
|
121
102
|
}
|
|
122
103
|
interface cursorOptions {
|
|
@@ -126,17 +107,6 @@ interface cursorOptions {
|
|
|
126
107
|
conv?: (any: any) => any;
|
|
127
108
|
}
|
|
128
109
|
export declare function getCursor(opts: cursorOptions): string;
|
|
129
|
-
export interface AssocEdgeInputOptions {
|
|
130
|
-
time?: Date;
|
|
131
|
-
data?: string | Builder<Ent>;
|
|
132
|
-
}
|
|
133
|
-
export interface AssocEdgeInput extends AssocEdgeInputOptions {
|
|
134
|
-
id1: ID;
|
|
135
|
-
id1Type: string;
|
|
136
|
-
edgeType: string;
|
|
137
|
-
id2: ID;
|
|
138
|
-
id2Type: string;
|
|
139
|
-
}
|
|
140
110
|
export declare class AssocEdgeData {
|
|
141
111
|
edgeType: string;
|
|
142
112
|
edgeName: string;
|
|
@@ -145,7 +115,7 @@ export declare class AssocEdgeData {
|
|
|
145
115
|
edgeTable: string;
|
|
146
116
|
constructor(data: Data);
|
|
147
117
|
}
|
|
148
|
-
export declare const assocEdgeLoader: DataLoader<
|
|
118
|
+
export declare const assocEdgeLoader: DataLoader<ID, Data | null, ID>;
|
|
149
119
|
export declare function loadEdgeData(edgeType: string): Promise<AssocEdgeData | null>;
|
|
150
120
|
export declare function loadEdgeDatas(...edgeTypes: string[]): Promise<Map<string, AssocEdgeData>>;
|
|
151
121
|
export interface AssocEdgeConstructor<T extends AssocEdge> {
|
|
@@ -156,13 +126,18 @@ interface loadEdgesOptions {
|
|
|
156
126
|
edgeType: string;
|
|
157
127
|
context?: Context;
|
|
158
128
|
queryOptions?: EdgeQueryableDataOptions;
|
|
129
|
+
disableTransformations?: boolean;
|
|
159
130
|
}
|
|
160
131
|
interface loadCustomEdgesOptions<T extends AssocEdge> extends loadEdgesOptions {
|
|
161
132
|
ctr: AssocEdgeConstructor<T>;
|
|
162
133
|
}
|
|
163
|
-
export declare
|
|
164
|
-
export declare function
|
|
134
|
+
export declare function setDefaultLimit(limit: number): void;
|
|
135
|
+
export declare function getDefaultLimit(): number;
|
|
165
136
|
export declare function loadEdges(options: loadEdgesOptions): Promise<AssocEdge[]>;
|
|
137
|
+
export declare function getEdgeClauseAndFields(cls: clause.Clause, options: Pick<loadEdgesOptions, "disableTransformations">): {
|
|
138
|
+
cls: clause.Clause<Data, string | number>;
|
|
139
|
+
fields: string[];
|
|
140
|
+
};
|
|
166
141
|
export declare function loadCustomEdges<T extends AssocEdge>(options: loadCustomEdgesOptions<T>): Promise<T[]>;
|
|
167
142
|
export declare function loadUniqueEdge(options: loadEdgesOptions): Promise<AssocEdge | null>;
|
|
168
143
|
export declare function loadUniqueNode<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id1: ID, edgeType: string, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
|
|
@@ -172,8 +147,7 @@ interface loadEdgeForIDOptions<T extends AssocEdge> extends loadCustomEdgesOptio
|
|
|
172
147
|
}
|
|
173
148
|
export declare function loadEdgeForID2<T extends AssocEdge>(options: loadEdgeForIDOptions<T>): Promise<T | undefined>;
|
|
174
149
|
export declare function loadNodesByEdge<T extends Ent>(viewer: Viewer, id1: ID, edgeType: string, options: LoadEntOptions<T>): Promise<T[]>;
|
|
175
|
-
export declare function applyPrivacyPolicyForRow<
|
|
176
|
-
export declare function
|
|
177
|
-
export declare function applyPrivacyPolicyForRows<T extends Ent>(viewer: Viewer, rows: Data[], options: LoadEntOptions<T>): Promise<Map<ID, T>>;
|
|
150
|
+
export declare function applyPrivacyPolicyForRow<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>, row: Data): Promise<TEnt | null>;
|
|
151
|
+
export declare function applyPrivacyPolicyForRows<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, rows: Data[], options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt[]>;
|
|
178
152
|
export declare function getEdgeTypeInGroup<T extends string>(viewer: Viewer, id1: ID, id2: ID, m: Map<T, string>): Promise<[T, AssocEdge] | undefined>;
|
|
179
153
|
export {};
|