@snowtop/ent 0.1.0-alpha99 → 0.1.0
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 +8 -1
- package/action/executor.d.ts +16 -3
- package/action/executor.js +83 -27
- package/action/index.d.ts +2 -1
- package/action/operations.d.ts +126 -0
- package/action/operations.js +686 -0
- package/action/orchestrator.d.ts +22 -8
- package/action/orchestrator.js +278 -67
- package/core/base.d.ts +34 -24
- package/core/clause.d.ts +62 -79
- package/core/clause.js +77 -5
- package/core/config.d.ts +5 -1
- package/core/config.js +3 -0
- package/core/const.d.ts +3 -0
- package/core/const.js +6 -0
- package/core/context.d.ts +4 -3
- package/core/context.js +2 -1
- package/core/db.d.ts +1 -0
- package/core/db.js +7 -7
- package/core/ent.d.ts +53 -105
- package/core/ent.js +104 -599
- package/core/global_schema.d.ts +7 -0
- package/core/global_schema.js +51 -0
- package/core/loaders/assoc_count_loader.d.ts +4 -2
- package/core/loaders/assoc_count_loader.js +10 -2
- package/core/loaders/assoc_edge_loader.d.ts +2 -3
- package/core/loaders/assoc_edge_loader.js +16 -7
- package/core/loaders/index.d.ts +0 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/loader.d.ts +3 -3
- package/core/loaders/loader.js +3 -20
- package/core/loaders/object_loader.d.ts +30 -10
- package/core/loaders/object_loader.js +179 -40
- package/core/loaders/query_loader.d.ts +4 -4
- package/core/loaders/query_loader.js +14 -19
- package/core/loaders/raw_count_loader.d.ts +1 -0
- package/core/loaders/raw_count_loader.js +3 -2
- package/core/privacy.d.ts +19 -10
- package/core/privacy.js +47 -26
- package/core/query/assoc_query.js +1 -1
- package/core/query/custom_clause_query.d.ts +6 -3
- package/core/query/custom_clause_query.js +36 -9
- package/core/query/custom_query.d.ts +3 -1
- package/core/query/custom_query.js +29 -6
- package/core/query/query.d.ts +12 -2
- package/core/query/query.js +67 -38
- package/core/query/shared_assoc_test.js +151 -10
- package/core/query/shared_test.d.ts +2 -2
- package/core/query/shared_test.js +90 -30
- package/core/query_impl.d.ts +8 -0
- package/core/query_impl.js +28 -0
- package/core/viewer.d.ts +2 -0
- package/core/viewer.js +2 -0
- package/graphql/graphql.d.ts +103 -19
- package/graphql/graphql.js +169 -134
- package/graphql/graphql_field_helpers.d.ts +9 -3
- package/graphql/graphql_field_helpers.js +22 -2
- package/graphql/index.d.ts +2 -1
- package/graphql/index.js +5 -2
- 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 +1 -1
- package/imports/index.js +2 -2
- package/index.d.ts +12 -1
- package/index.js +18 -6
- package/package.json +20 -17
- package/parse_schema/parse.d.ts +10 -4
- package/parse_schema/parse.js +70 -24
- package/schema/base_schema.d.ts +8 -0
- package/schema/base_schema.js +11 -0
- package/schema/field.d.ts +6 -3
- package/schema/field.js +72 -17
- package/schema/index.d.ts +1 -1
- package/schema/index.js +2 -1
- package/schema/json_field.d.ts +3 -3
- package/schema/json_field.js +4 -1
- package/schema/schema.d.ts +42 -5
- package/schema/schema.js +35 -41
- package/schema/struct_field.d.ts +8 -6
- package/schema/struct_field.js +67 -8
- package/schema/union_field.d.ts +1 -1
- package/scripts/custom_compiler.js +4 -4
- package/scripts/custom_graphql.js +105 -75
- package/scripts/move_types.js +4 -1
- package/scripts/read_schema.js +2 -2
- package/testutils/action/complex_schemas.d.ts +1 -1
- package/testutils/action/complex_schemas.js +10 -3
- package/testutils/builder.d.ts +3 -0
- package/testutils/builder.js +6 -0
- package/testutils/db/temp_db.d.ts +9 -1
- package/testutils/db/temp_db.js +82 -14
- package/testutils/db_mock.js +1 -3
- package/testutils/ent-graphql-tests/index.d.ts +1 -1
- package/testutils/ent-graphql-tests/index.js +30 -19
- package/testutils/fake_comms.js +1 -1
- package/testutils/fake_data/fake_contact.d.ts +1 -1
- package/testutils/fake_data/fake_tag.d.ts +1 -1
- package/testutils/fake_data/fake_user.d.ts +3 -3
- package/testutils/fake_data/fake_user.js +15 -4
- package/testutils/fake_data/tag_query.js +8 -3
- package/testutils/fake_data/test_helpers.d.ts +3 -2
- package/testutils/fake_data/test_helpers.js +4 -4
- package/testutils/fake_data/user_query.d.ts +5 -2
- package/testutils/fake_data/user_query.js +19 -2
- package/testutils/fake_log.js +1 -1
- package/tsc/ast.js +2 -1
- package/tsc/move_generated.js +2 -2
- package/tsc/transform.d.ts +2 -2
- package/tsc/transform.js +4 -3
- package/tsc/transform_ent.js +2 -1
- package/tsc/transform_schema.js +4 -3
- package/core/loaders/index_loader.d.ts +0 -14
- package/core/loaders/index_loader.js +0 -27
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Field, GlobalSchema } from "../schema/schema";
|
|
2
|
+
export declare function setGlobalSchema(val: GlobalSchema): void;
|
|
3
|
+
export declare function clearGlobalSchema(): void;
|
|
4
|
+
export declare function __hasGlobalSchema(): boolean;
|
|
5
|
+
export declare function __getGlobalSchema(): GlobalSchema | undefined;
|
|
6
|
+
export declare function __getGlobalSchemaFields(): Map<string, Field>;
|
|
7
|
+
export declare function __getGlobalSchemaField(type: string): Field | undefined;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.__getGlobalSchemaField = exports.__getGlobalSchemaFields = exports.__getGlobalSchema = exports.__hasGlobalSchema = exports.clearGlobalSchema = exports.setGlobalSchema = void 0;
|
|
4
|
+
const schema_1 = require("../schema/schema");
|
|
5
|
+
let globalSchema;
|
|
6
|
+
let globalSchemaFields = new Map();
|
|
7
|
+
function isGlobalSchemaField(f) {
|
|
8
|
+
switch (f.type.dbType) {
|
|
9
|
+
case schema_1.DBType.Enum:
|
|
10
|
+
case schema_1.DBType.StringEnum:
|
|
11
|
+
case schema_1.DBType.IntEnum:
|
|
12
|
+
case schema_1.DBType.JSON:
|
|
13
|
+
case schema_1.DBType.JSONB:
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
function setGlobalSchema(val) {
|
|
19
|
+
globalSchema = val;
|
|
20
|
+
if (val.fields) {
|
|
21
|
+
for (const [k, v] of Object.entries(val.fields)) {
|
|
22
|
+
if (isGlobalSchemaField(v) && v.type.type) {
|
|
23
|
+
globalSchemaFields.set(v.type.type, v);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.setGlobalSchema = setGlobalSchema;
|
|
29
|
+
function clearGlobalSchema() {
|
|
30
|
+
globalSchema = undefined;
|
|
31
|
+
globalSchemaFields.clear();
|
|
32
|
+
}
|
|
33
|
+
exports.clearGlobalSchema = clearGlobalSchema;
|
|
34
|
+
// used by tests. no guarantee will always exist
|
|
35
|
+
function __hasGlobalSchema() {
|
|
36
|
+
return globalSchema !== undefined;
|
|
37
|
+
}
|
|
38
|
+
exports.__hasGlobalSchema = __hasGlobalSchema;
|
|
39
|
+
// used by tests. no guarantee will always exist
|
|
40
|
+
function __getGlobalSchema() {
|
|
41
|
+
return globalSchema;
|
|
42
|
+
}
|
|
43
|
+
exports.__getGlobalSchema = __getGlobalSchema;
|
|
44
|
+
function __getGlobalSchemaFields() {
|
|
45
|
+
return globalSchemaFields;
|
|
46
|
+
}
|
|
47
|
+
exports.__getGlobalSchemaFields = __getGlobalSchemaFields;
|
|
48
|
+
function __getGlobalSchemaField(type) {
|
|
49
|
+
return globalSchemaFields.get(type);
|
|
50
|
+
}
|
|
51
|
+
exports.__getGlobalSchemaField = __getGlobalSchemaField;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ID, Context, Loader, LoaderFactory } from "../base";
|
|
1
|
+
import { ID, Context, Loader, LoaderFactory, EdgeQueryableDataOptionsConfigureLoader } from "../base";
|
|
2
2
|
export declare class AssocEdgeCountLoader implements Loader<ID, number> {
|
|
3
3
|
private edgeType;
|
|
4
4
|
context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined;
|
|
5
|
+
private options?;
|
|
5
6
|
private loaderFn;
|
|
6
7
|
private loader;
|
|
7
|
-
constructor(edgeType: string, context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined);
|
|
8
|
+
constructor(edgeType: string, context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined, options?: EdgeQueryableDataOptionsConfigureLoader | undefined);
|
|
8
9
|
private getLoader;
|
|
9
10
|
load(id: ID): Promise<number>;
|
|
10
11
|
clearAll(): void;
|
|
@@ -15,4 +16,5 @@ export declare class AssocEdgeCountLoaderFactory implements LoaderFactory<ID, nu
|
|
|
15
16
|
constructor(edgeType: string);
|
|
16
17
|
getEdgeType(): string;
|
|
17
18
|
createLoader(context?: Context): AssocEdgeCountLoader;
|
|
19
|
+
createConfigurableLoader(options: EdgeQueryableDataOptionsConfigureLoader, context?: Context): AssocEdgeCountLoader;
|
|
18
20
|
}
|
|
@@ -33,9 +33,10 @@ const loader_1 = require("./loader");
|
|
|
33
33
|
const raw_count_loader_1 = require("./raw_count_loader");
|
|
34
34
|
const memoizee_1 = __importDefault(require("memoizee"));
|
|
35
35
|
class AssocEdgeCountLoader {
|
|
36
|
-
constructor(edgeType, context) {
|
|
36
|
+
constructor(edgeType, context, options) {
|
|
37
37
|
this.edgeType = edgeType;
|
|
38
38
|
this.context = context;
|
|
39
|
+
this.options = options;
|
|
39
40
|
if (context) {
|
|
40
41
|
this.loaderFn = (0, memoizee_1.default)(this.getLoader);
|
|
41
42
|
}
|
|
@@ -45,7 +46,9 @@ class AssocEdgeCountLoader {
|
|
|
45
46
|
if (!edgeData) {
|
|
46
47
|
throw new Error(`error loading edge data for ${this.edgeType}`);
|
|
47
48
|
}
|
|
48
|
-
const { cls } = (0, ent_1.getEdgeClauseAndFields)(clause.Eq("edge_type", this.edgeType), {
|
|
49
|
+
const { cls } = (0, ent_1.getEdgeClauseAndFields)(clause.Eq("edge_type", this.edgeType), {
|
|
50
|
+
queryOptions: this.options,
|
|
51
|
+
});
|
|
49
52
|
this.loader = (0, raw_count_loader_1.createCountDataLoader)({
|
|
50
53
|
tableName: edgeData.edgeTable,
|
|
51
54
|
groupCol: "id1",
|
|
@@ -58,6 +61,7 @@ class AssocEdgeCountLoader {
|
|
|
58
61
|
return (0, ent_1.loadRawEdgeCountX)({
|
|
59
62
|
id1: id,
|
|
60
63
|
edgeType: this.edgeType,
|
|
64
|
+
queryOptions: this.options,
|
|
61
65
|
});
|
|
62
66
|
}
|
|
63
67
|
const loader = await this.loaderFn();
|
|
@@ -79,5 +83,9 @@ class AssocEdgeCountLoaderFactory {
|
|
|
79
83
|
createLoader(context) {
|
|
80
84
|
return (0, loader_1.getLoader)(this, () => new AssocEdgeCountLoader(this.edgeType, context), context);
|
|
81
85
|
}
|
|
86
|
+
createConfigurableLoader(options, context) {
|
|
87
|
+
const key = `${this.name}:disableTransformations:${options.disableTransformations}`;
|
|
88
|
+
return (0, loader_1.getCustomLoader)(key, () => new AssocEdgeCountLoader(this.edgeType, context, options), context);
|
|
89
|
+
}
|
|
82
90
|
}
|
|
83
91
|
exports.AssocEdgeCountLoaderFactory = AssocEdgeCountLoaderFactory;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, ID, EdgeQueryableDataOptions, Loader, LoaderFactory } from "../base";
|
|
2
2
|
import { AssocEdge, AssocEdgeConstructor } from "../ent";
|
|
3
|
-
interface AssocLoader<T extends AssocEdge> extends Loader<ID, T[]> {
|
|
3
|
+
export interface AssocLoader<T extends AssocEdge> extends Loader<ID, T[]> {
|
|
4
4
|
loadEdgeForID2(id: ID, id2: ID): Promise<T | undefined>;
|
|
5
5
|
}
|
|
6
6
|
export declare class AssocEdgeLoader<T extends AssocEdge> implements Loader<ID, T[]> {
|
|
@@ -21,7 +21,7 @@ export declare class AssocDirectEdgeLoader<T extends AssocEdge> implements Loade
|
|
|
21
21
|
private edgeCtr;
|
|
22
22
|
private options?;
|
|
23
23
|
context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined;
|
|
24
|
-
constructor(edgeType: string, edgeCtr: AssocEdgeConstructor<T>, options?: Partial<Pick<import("../base").QueryableDataOptions, "limit" | "orderby" | "
|
|
24
|
+
constructor(edgeType: string, edgeCtr: AssocEdgeConstructor<T>, options?: Partial<Pick<import("../base").QueryableDataOptions, "clause" | "limit" | "orderby" | "disableTransformations">> | undefined, context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined);
|
|
25
25
|
load(id: ID): Promise<T[]>;
|
|
26
26
|
loadEdgeForID2(id: ID, id2: ID): Promise<T | undefined>;
|
|
27
27
|
clearAll(): void;
|
|
@@ -35,4 +35,3 @@ export declare class AssocEdgeLoaderFactory<T extends AssocEdge> implements Load
|
|
|
35
35
|
private isConstructor;
|
|
36
36
|
createConfigurableLoader(options: EdgeQueryableDataOptions, context?: Context): AssocLoader<T>;
|
|
37
37
|
}
|
|
38
|
-
export {};
|
|
@@ -36,7 +36,7 @@ const memoizee_1 = __importDefault(require("memoizee"));
|
|
|
36
36
|
function createLoader(options, edgeType, edgeCtr, edgeData) {
|
|
37
37
|
const loaderOptions = {};
|
|
38
38
|
if ((0, logger_1.logEnabled)("query")) {
|
|
39
|
-
loaderOptions.cacheMap = new loader_1.
|
|
39
|
+
loaderOptions.cacheMap = new loader_1.CacheMap({
|
|
40
40
|
tableName: edgeData.edgeTable,
|
|
41
41
|
});
|
|
42
42
|
}
|
|
@@ -59,17 +59,24 @@ function createLoader(options, edgeType, edgeCtr, edgeData) {
|
|
|
59
59
|
// store the index....
|
|
60
60
|
m.set(keys[i], i);
|
|
61
61
|
}
|
|
62
|
-
options.orderby = options.orderby ||
|
|
62
|
+
options.orderby = options.orderby || [
|
|
63
|
+
{
|
|
64
|
+
column: "time",
|
|
65
|
+
direction: "DESC",
|
|
66
|
+
},
|
|
67
|
+
];
|
|
63
68
|
// TODO defaultEdgeQueryOptions
|
|
64
|
-
options.limit = options.limit || ent_1.
|
|
69
|
+
options.limit = options.limit || (0, ent_1.getDefaultLimit)();
|
|
65
70
|
const tableName = edgeData.edgeTable;
|
|
66
|
-
const { cls: cls1, fields } = (0, ent_1.getEdgeClauseAndFields)(clause.Eq("edge_type", edgeType), {
|
|
71
|
+
const { cls: cls1, fields } = (0, ent_1.getEdgeClauseAndFields)(clause.Eq("edge_type", edgeType), {
|
|
72
|
+
queryOptions: options,
|
|
73
|
+
});
|
|
67
74
|
const [query, cls] = (0, ent_1.buildGroupQuery)({
|
|
68
75
|
tableName: tableName,
|
|
69
76
|
fields,
|
|
70
77
|
values: keys,
|
|
71
78
|
orderby: options.orderby,
|
|
72
|
-
limit: options.limit || ent_1.
|
|
79
|
+
limit: options.limit || (0, ent_1.getDefaultLimit)(),
|
|
73
80
|
groupColumn: "id1",
|
|
74
81
|
clause: cls1,
|
|
75
82
|
});
|
|
@@ -114,6 +121,7 @@ class AssocEdgeLoader {
|
|
|
114
121
|
id2,
|
|
115
122
|
context: this.context,
|
|
116
123
|
ctr: this.edgeCtr,
|
|
124
|
+
queryOptions: this.options,
|
|
117
125
|
});
|
|
118
126
|
}
|
|
119
127
|
clearAll() {
|
|
@@ -129,7 +137,7 @@ class AssocDirectEdgeLoader {
|
|
|
129
137
|
this.context = context;
|
|
130
138
|
}
|
|
131
139
|
async load(id) {
|
|
132
|
-
return
|
|
140
|
+
return (0, ent_1.loadCustomEdges)({
|
|
133
141
|
id1: id,
|
|
134
142
|
edgeType: this.edgeType,
|
|
135
143
|
context: this.context,
|
|
@@ -143,6 +151,7 @@ class AssocDirectEdgeLoader {
|
|
|
143
151
|
edgeType: this.edgeType,
|
|
144
152
|
id2,
|
|
145
153
|
context: this.context,
|
|
154
|
+
queryOptions: this.options,
|
|
146
155
|
ctr: this.edgeCtr,
|
|
147
156
|
});
|
|
148
157
|
}
|
|
@@ -181,7 +190,7 @@ class AssocEdgeLoaderFactory {
|
|
|
181
190
|
return new AssocDirectEdgeLoader(this.edgeType, edgeCtr, options, context);
|
|
182
191
|
}
|
|
183
192
|
// we create a loader which can combine first X queries in the same fetch
|
|
184
|
-
const key = `${this.name}:limit:${options.limit}:orderby:${options.orderby}`;
|
|
193
|
+
const key = `${this.name}:limit:${options.limit}:orderby:${options.orderby}:disableTransformations:${options.disableTransformations}`;
|
|
185
194
|
return (0, loader_1.getCustomLoader)(key, () => new AssocEdgeLoader(this.edgeType, ctr, options, context), context);
|
|
186
195
|
}
|
|
187
196
|
}
|
package/core/loaders/index.d.ts
CHANGED
|
@@ -2,5 +2,4 @@ export { ObjectLoader, ObjectLoaderFactory } from "./object_loader";
|
|
|
2
2
|
export { RawCountLoader, RawCountLoaderFactory } from "./raw_count_loader";
|
|
3
3
|
export { AssocEdgeCountLoader, AssocEdgeCountLoaderFactory, } from "./assoc_count_loader";
|
|
4
4
|
export { AssocDirectEdgeLoader, AssocEdgeLoader, AssocEdgeLoaderFactory, } from "./assoc_edge_loader";
|
|
5
|
-
export { IndexLoaderFactory } from "./index_loader";
|
|
6
5
|
export { QueryLoaderFactory } from "./query_loader";
|
package/core/loaders/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QueryLoaderFactory = exports.
|
|
3
|
+
exports.QueryLoaderFactory = exports.AssocEdgeLoaderFactory = exports.AssocEdgeLoader = exports.AssocDirectEdgeLoader = exports.AssocEdgeCountLoaderFactory = exports.AssocEdgeCountLoader = exports.RawCountLoaderFactory = exports.RawCountLoader = exports.ObjectLoaderFactory = exports.ObjectLoader = void 0;
|
|
4
4
|
var object_loader_1 = require("./object_loader");
|
|
5
5
|
Object.defineProperty(exports, "ObjectLoader", { enumerable: true, get: function () { return object_loader_1.ObjectLoader; } });
|
|
6
6
|
Object.defineProperty(exports, "ObjectLoaderFactory", { enumerable: true, get: function () { return object_loader_1.ObjectLoaderFactory; } });
|
|
@@ -14,7 +14,5 @@ var assoc_edge_loader_1 = require("./assoc_edge_loader");
|
|
|
14
14
|
Object.defineProperty(exports, "AssocDirectEdgeLoader", { enumerable: true, get: function () { return assoc_edge_loader_1.AssocDirectEdgeLoader; } });
|
|
15
15
|
Object.defineProperty(exports, "AssocEdgeLoader", { enumerable: true, get: function () { return assoc_edge_loader_1.AssocEdgeLoader; } });
|
|
16
16
|
Object.defineProperty(exports, "AssocEdgeLoaderFactory", { enumerable: true, get: function () { return assoc_edge_loader_1.AssocEdgeLoaderFactory; } });
|
|
17
|
-
var index_loader_1 = require("./index_loader");
|
|
18
|
-
Object.defineProperty(exports, "IndexLoaderFactory", { enumerable: true, get: function () { return index_loader_1.IndexLoaderFactory; } });
|
|
19
17
|
var query_loader_1 = require("./query_loader");
|
|
20
18
|
Object.defineProperty(exports, "QueryLoaderFactory", { enumerable: true, get: function () { return query_loader_1.QueryLoaderFactory; } });
|
package/core/loaders/loader.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Loader, LoaderFactory, Context, DataOptions } from "../base";
|
|
2
|
-
export declare function getLoader<
|
|
3
|
-
export declare function getCustomLoader<
|
|
4
|
-
export declare class
|
|
2
|
+
export declare function getLoader<K, V>(factory: LoaderFactory<K, V>, create: () => Loader<K, V>, context?: Context): Loader<K, V>;
|
|
3
|
+
export declare function getCustomLoader<K, V>(key: string, create: () => Loader<K, V>, context?: Context): Loader<K, V>;
|
|
4
|
+
export declare class CacheMap {
|
|
5
5
|
private options;
|
|
6
6
|
private m;
|
|
7
7
|
constructor(options: DataOptions);
|
package/core/loaders/loader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.CacheMap = exports.getCustomLoader = exports.getLoader = void 0;
|
|
4
4
|
const logger_1 = require("../logger");
|
|
5
5
|
// this is like factory factory FML
|
|
6
6
|
// helper function to handle context vs not
|
|
@@ -25,7 +25,7 @@ function getCustomLoader(key, create, context) {
|
|
|
25
25
|
return context.cache.getLoader(key, create);
|
|
26
26
|
}
|
|
27
27
|
exports.getCustomLoader = getCustomLoader;
|
|
28
|
-
class
|
|
28
|
+
class CacheMap {
|
|
29
29
|
constructor(options) {
|
|
30
30
|
this.options = options;
|
|
31
31
|
this.m = new Map();
|
|
@@ -41,34 +41,17 @@ class cacheMap {
|
|
|
41
41
|
"dataloader-cache-hit": key,
|
|
42
42
|
"tableName": this.options.tableName,
|
|
43
43
|
});
|
|
44
|
-
// } else {
|
|
45
|
-
// log("cache", {
|
|
46
|
-
// "dataloader-cache-miss": key,
|
|
47
|
-
// "tableName": options.tableName,
|
|
48
|
-
// });
|
|
49
44
|
}
|
|
50
45
|
return ret;
|
|
51
46
|
}
|
|
52
47
|
set(key, value) {
|
|
53
|
-
// log("cache", {
|
|
54
|
-
// "dataloader-cache-set": key,
|
|
55
|
-
// "tableName": options.tableName,
|
|
56
|
-
// });
|
|
57
48
|
return this.m.set(key, value);
|
|
58
49
|
}
|
|
59
50
|
delete(key) {
|
|
60
|
-
// log("cache", {
|
|
61
|
-
// "dataloader-cache-delete": key,
|
|
62
|
-
// "tableName": options.tableName,
|
|
63
|
-
// });
|
|
64
51
|
return this.m.delete(key);
|
|
65
52
|
}
|
|
66
53
|
clear() {
|
|
67
|
-
// log("cache", {
|
|
68
|
-
// "dataloader-cache-clear": true,
|
|
69
|
-
// "tableName": options.tableName,
|
|
70
|
-
// });
|
|
71
54
|
return this.m.clear();
|
|
72
55
|
}
|
|
73
56
|
}
|
|
74
|
-
exports.
|
|
57
|
+
exports.CacheMap = CacheMap;
|
|
@@ -1,29 +1,49 @@
|
|
|
1
1
|
import { ID, Data, SelectDataOptions, Context, Loader, LoaderFactory } from "../base";
|
|
2
|
-
|
|
2
|
+
import * as clause from "../clause";
|
|
3
|
+
export declare class ObjectLoader<TQueryData extends Data = Data, TResultData extends Data = TQueryData, K = keyof TQueryData> implements Loader<ID, TResultData | null>, Loader<clause.Clause<TQueryData, K>, TResultData[] | null> {
|
|
3
4
|
private options;
|
|
4
5
|
context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined;
|
|
5
6
|
private toPrime?;
|
|
6
|
-
private
|
|
7
|
+
private idLoader;
|
|
8
|
+
private clauseLoader;
|
|
7
9
|
private primedLoaders;
|
|
8
10
|
private memoizedInitPrime;
|
|
9
|
-
constructor(options: SelectDataOptions, context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined, toPrime?: ObjectLoaderFactory<
|
|
11
|
+
constructor(options: SelectDataOptions, context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined, toPrime?: ObjectLoaderFactory<TResultData>[] | undefined);
|
|
10
12
|
getOptions(): SelectDataOptions;
|
|
11
13
|
private initPrime;
|
|
12
|
-
load(key:
|
|
14
|
+
load(key: ID): Promise<TResultData | null>;
|
|
15
|
+
load(key: clause.Clause<TQueryData, K>): Promise<TResultData[] | null>;
|
|
16
|
+
private loadID;
|
|
17
|
+
private loadClause;
|
|
18
|
+
clearAll(): void;
|
|
19
|
+
loadMany(keys: ID[]): Promise<Array<TResultData | null>>;
|
|
20
|
+
loadMany(keys: clause.Clause<TQueryData, K>[]): Promise<Array<TResultData[] | null>>;
|
|
21
|
+
private loadIDMany;
|
|
22
|
+
private loadClauseMany;
|
|
23
|
+
prime(data: TResultData): void;
|
|
24
|
+
primeAll(data: TResultData): void;
|
|
25
|
+
}
|
|
26
|
+
export declare class ObjectCountLoader<V extends Data = Data, K = keyof V> implements Loader<clause.Clause<V, K>, number> {
|
|
27
|
+
private options;
|
|
28
|
+
context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined;
|
|
29
|
+
private loader;
|
|
30
|
+
constructor(options: SelectDataOptions, context?: Context<import("../base").Viewer<import("../base").Ent<any> | null, ID | null>> | undefined);
|
|
31
|
+
getOptions(): SelectDataOptions;
|
|
32
|
+
load(key: clause.Clause<V, K>): Promise<number>;
|
|
13
33
|
clearAll(): void;
|
|
14
|
-
loadMany(keys:
|
|
15
|
-
prime(data: Data): void;
|
|
16
|
-
primeAll(data: Data): void;
|
|
34
|
+
loadMany(keys: clause.Clause<V, K>[]): Promise<Array<number>>;
|
|
17
35
|
}
|
|
18
36
|
interface ObjectLoaderOptions extends SelectDataOptions {
|
|
19
37
|
instanceKey?: string;
|
|
20
38
|
}
|
|
21
|
-
export declare class ObjectLoaderFactory<
|
|
39
|
+
export declare class ObjectLoaderFactory<V extends Data = Data> implements LoaderFactory<ID, V | null>, LoaderFactory<clause.Clause<V>, V[] | null> {
|
|
22
40
|
options: ObjectLoaderOptions;
|
|
23
41
|
name: string;
|
|
24
42
|
private toPrime;
|
|
25
43
|
constructor(options: ObjectLoaderOptions);
|
|
26
|
-
createLoader(context?: Context): ObjectLoader<
|
|
27
|
-
|
|
44
|
+
createLoader(context?: Context): ObjectLoader<V>;
|
|
45
|
+
createTypedLoader<TQueryData extends Data = Data, TResultData extends Data = Data, K = keyof TQueryData>(context?: Context): ObjectLoader<TQueryData, TResultData, K>;
|
|
46
|
+
createCountLoader<K = keyof V>(context?: Context): ObjectCountLoader<V, K>;
|
|
47
|
+
addToPrime(factory: ObjectLoaderFactory<V>): this;
|
|
28
48
|
}
|
|
29
49
|
export {};
|