@snowtop/ent 0.1.0-alpha154 → 0.1.0-alpha156
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/executor.d.ts +2 -2
- package/action/executor.js +24 -30
- package/action/orchestrator.js +8 -3
- package/core/clause.d.ts +8 -0
- package/core/clause.js +31 -3
- package/core/config.d.ts +1 -0
- package/core/ent.js +5 -29
- package/core/loaders/assoc_edge_loader.js +1 -2
- package/core/loaders/index.d.ts +0 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/loader.d.ts +1 -1
- package/core/loaders/loader.js +3 -20
- package/core/loaders/object_loader.js +1 -1
- package/core/loaders/query_loader.js +1 -1
- package/core/loaders/raw_count_loader.js +1 -1
- package/core/query/query.js +0 -3
- package/graphql/graphql.d.ts +11 -5
- package/graphql/graphql.js +13 -5
- package/graphql/graphql_field_helpers.d.ts +2 -2
- package/graphql/graphql_field_helpers.js +1 -1
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/package.json +1 -1
- package/parse_schema/parse.d.ts +3 -2
- package/parse_schema/parse.js +2 -1
- package/scripts/custom_graphql.js +31 -39
- package/core/loaders/index_loader.d.ts +0 -15
- package/core/loaders/index_loader.js +0 -27
package/action/executor.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare class ListBasedExecutor<T extends Ent> implements Executor {
|
|
|
15
15
|
constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], options?: OrchestratorOptions<T, Data, Viewer<Ent<any> | null, ID | null>, T | null> | undefined, complexOptions?: ComplexExecutorOptions | undefined);
|
|
16
16
|
private lastOp;
|
|
17
17
|
private createdEnt;
|
|
18
|
-
private
|
|
18
|
+
private changedOps;
|
|
19
19
|
resolveValue(val: ID): Ent | null;
|
|
20
20
|
builderOpChanged(builder: Builder<any>): boolean;
|
|
21
21
|
[Symbol.iterator](): this;
|
|
@@ -38,7 +38,7 @@ export declare class ComplexExecutor<T extends Ent> implements Executor {
|
|
|
38
38
|
private lastOp;
|
|
39
39
|
private allOperations;
|
|
40
40
|
private executors;
|
|
41
|
-
private
|
|
41
|
+
private changedOps;
|
|
42
42
|
builder?: Builder<Ent> | undefined;
|
|
43
43
|
constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation[], dependencies: Map<ID, Builder<T>>, changesets: Changeset[], options?: OrchestratorOptions<T, Data, Viewer>, complexOptions?: ComplexExecutorOptions | undefined);
|
|
44
44
|
[Symbol.iterator](): this;
|
package/action/executor.js
CHANGED
|
@@ -19,7 +19,7 @@ class ListBasedExecutor {
|
|
|
19
19
|
this.complexOptions = complexOptions;
|
|
20
20
|
this.idx = 0;
|
|
21
21
|
this.createdEnt = null;
|
|
22
|
-
this.
|
|
22
|
+
this.changedOps = new Map();
|
|
23
23
|
this.builder = options?.builder;
|
|
24
24
|
}
|
|
25
25
|
resolveValue(val) {
|
|
@@ -29,7 +29,7 @@ class ListBasedExecutor {
|
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
31
|
builderOpChanged(builder) {
|
|
32
|
-
const v = this.
|
|
32
|
+
const v = this.changedOps.get(builder.placeholderID);
|
|
33
33
|
return v !== undefined && v !== builder.operation;
|
|
34
34
|
}
|
|
35
35
|
[Symbol.iterator]() {
|
|
@@ -41,19 +41,19 @@ class ListBasedExecutor {
|
|
|
41
41
|
if (createdEnt) {
|
|
42
42
|
this.createdEnt = createdEnt;
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
const done = this.idx
|
|
46
|
-
const op =
|
|
44
|
+
maybeFlagOpOperationAsChanged(this.lastOp, this.changedOps);
|
|
45
|
+
const done = this.idx >= this.operations.length;
|
|
46
|
+
const op = maybeChangeOp(this.operations[this.idx], this.complexOptions);
|
|
47
47
|
this.idx++;
|
|
48
48
|
this.lastOp = op;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
if (done || op === undefined) {
|
|
50
|
+
return {
|
|
51
|
+
value: op,
|
|
52
|
+
done: true,
|
|
53
|
+
};
|
|
53
54
|
}
|
|
54
55
|
return {
|
|
55
56
|
value: op,
|
|
56
|
-
done: done,
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
async executeObservers() {
|
|
@@ -101,7 +101,7 @@ function getCreatedEnt(viewer, op) {
|
|
|
101
101
|
}
|
|
102
102
|
return null;
|
|
103
103
|
}
|
|
104
|
-
function
|
|
104
|
+
function maybeFlagOpOperationAsChanged(op, changedOps) {
|
|
105
105
|
if (!op || !op.updatedOperation) {
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
@@ -109,8 +109,7 @@ function maybeUpdateOperationForOp(op, updatedOps) {
|
|
|
109
109
|
if (!r || r.builder.operation === r.operation) {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
|
-
|
|
113
|
-
// console.debug(updatedOps);
|
|
112
|
+
changedOps.set(r.builder.placeholderID, r.operation);
|
|
114
113
|
}
|
|
115
114
|
class ComplexExecutor {
|
|
116
115
|
constructor(viewer, placeholderID, operations, dependencies, changesets, options, complexOptions) {
|
|
@@ -121,7 +120,7 @@ class ComplexExecutor {
|
|
|
121
120
|
this.mapper = new Map();
|
|
122
121
|
this.allOperations = [];
|
|
123
122
|
this.executors = [];
|
|
124
|
-
this.
|
|
123
|
+
this.changedOps = new Map();
|
|
125
124
|
this.builder = options?.builder;
|
|
126
125
|
let graph = (0, graph_data_structure_1.Graph)();
|
|
127
126
|
const changesetMap = new Map();
|
|
@@ -171,11 +170,6 @@ class ComplexExecutor {
|
|
|
171
170
|
// get ordered list of ops
|
|
172
171
|
let executor = c.executor();
|
|
173
172
|
for (let op of executor) {
|
|
174
|
-
if (!op) {
|
|
175
|
-
// TODO what is happening...
|
|
176
|
-
// change in behavior in next() leading to needing to do this
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
173
|
if (op.createdEnt) {
|
|
180
174
|
nodeOps.add(op);
|
|
181
175
|
}
|
|
@@ -212,17 +206,18 @@ class ComplexExecutor {
|
|
|
212
206
|
}
|
|
213
207
|
next() {
|
|
214
208
|
this.handleCreatedEnt();
|
|
215
|
-
|
|
216
|
-
const done = this.idx
|
|
217
|
-
const op =
|
|
209
|
+
maybeFlagOpOperationAsChanged(this.lastOp, this.changedOps);
|
|
210
|
+
const done = this.idx >= this.allOperations.length;
|
|
211
|
+
const op = maybeChangeOp(this.allOperations[this.idx], this.complexOptions);
|
|
218
212
|
this.idx++;
|
|
219
213
|
this.lastOp = op;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
214
|
+
if (done || op === undefined) {
|
|
215
|
+
return {
|
|
216
|
+
value: op,
|
|
217
|
+
done: true,
|
|
218
|
+
};
|
|
224
219
|
}
|
|
225
|
-
return { value: op
|
|
220
|
+
return { value: op };
|
|
226
221
|
}
|
|
227
222
|
resolveValue(val) {
|
|
228
223
|
let ent = this.mapper.get(val);
|
|
@@ -238,8 +233,7 @@ class ComplexExecutor {
|
|
|
238
233
|
return null;
|
|
239
234
|
}
|
|
240
235
|
builderOpChanged(builder) {
|
|
241
|
-
const v = this.
|
|
242
|
-
// console.debug(this.updatedOps, builder.placeholderID, v, builder.operation);
|
|
236
|
+
const v = this.changedOps.get(builder.placeholderID);
|
|
243
237
|
return v !== undefined && v !== builder.operation;
|
|
244
238
|
}
|
|
245
239
|
async executeObservers() {
|
|
@@ -345,7 +339,7 @@ async function executeOperations(executor, context, trackOps) {
|
|
|
345
339
|
return operations;
|
|
346
340
|
}
|
|
347
341
|
exports.executeOperations = executeOperations;
|
|
348
|
-
function
|
|
342
|
+
function maybeChangeOp(op, complexOptions) {
|
|
349
343
|
if (!op ||
|
|
350
344
|
!complexOptions?.conditionalOverride ||
|
|
351
345
|
op instanceof operations_1.ConditionalNodeOperation) {
|
package/action/orchestrator.js
CHANGED
|
@@ -740,7 +740,10 @@ class Orchestrator {
|
|
|
740
740
|
}
|
|
741
741
|
else if (this.isBuilder(value)) {
|
|
742
742
|
if (field.valid) {
|
|
743
|
-
|
|
743
|
+
let valid = field.valid(value);
|
|
744
|
+
if (util_1.types.isPromise(valid)) {
|
|
745
|
+
valid = await valid;
|
|
746
|
+
}
|
|
744
747
|
if (!valid) {
|
|
745
748
|
return new Error(`invalid field ${fieldName} with value ${value}`);
|
|
746
749
|
}
|
|
@@ -752,8 +755,10 @@ class Orchestrator {
|
|
|
752
755
|
}
|
|
753
756
|
else {
|
|
754
757
|
if (field.valid) {
|
|
755
|
-
|
|
756
|
-
|
|
758
|
+
let valid = field.valid(value);
|
|
759
|
+
if (util_1.types.isPromise(valid)) {
|
|
760
|
+
valid = await valid;
|
|
761
|
+
}
|
|
757
762
|
if (!valid) {
|
|
758
763
|
return new Error(`invalid field ${fieldName} with value ${value}`);
|
|
759
764
|
}
|
package/core/clause.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare class inClause<T extends Data, K = keyof T> implements Clause<T,
|
|
|
15
15
|
private col;
|
|
16
16
|
private value;
|
|
17
17
|
private type;
|
|
18
|
+
protected op: string;
|
|
18
19
|
static getPostgresInClauseValuesThreshold(): number;
|
|
19
20
|
constructor(col: K, value: any[], type?: string);
|
|
20
21
|
clause(idx: number): string;
|
|
@@ -23,6 +24,9 @@ export declare class inClause<T extends Data, K = keyof T> implements Clause<T,
|
|
|
23
24
|
logValues(): any[];
|
|
24
25
|
instanceKey(): string;
|
|
25
26
|
}
|
|
27
|
+
export declare class notInClause<T extends Data, K = keyof T> extends inClause<T, K> {
|
|
28
|
+
protected op: string;
|
|
29
|
+
}
|
|
26
30
|
/**
|
|
27
31
|
* creates a clause to determine if the given value is contained in the array stored in the column in the db
|
|
28
32
|
* only works with postgres gin indexes
|
|
@@ -89,6 +93,10 @@ export declare function UuidIn<T extends Data, K = keyof T>(col: K, values: ID[]
|
|
|
89
93
|
export declare function IntegerIn<T extends Data, K = keyof T>(col: K, values: number[]): Clause<T, K>;
|
|
90
94
|
export declare function TextIn<T extends Data, K = keyof T>(col: K, values: any[]): Clause<T, K>;
|
|
91
95
|
export declare function DBTypeIn<T extends Data, K = keyof T>(col: K, values: any[], typ: string): Clause<T, K>;
|
|
96
|
+
export declare function UuidNotIn<T extends Data, K = keyof T>(col: K, values: ID[]): Clause<T, K>;
|
|
97
|
+
export declare function IntegerNotIn<T extends Data, K = keyof T>(col: K, values: number[]): Clause<T, K>;
|
|
98
|
+
export declare function TextNotIn<T extends Data, K = keyof T>(col: K, values: any[]): Clause<T, K>;
|
|
99
|
+
export declare function DBTypeNotIn<T extends Data, K = keyof T>(col: K, values: any[], typ: string): Clause<T, K>;
|
|
92
100
|
interface TsQuery {
|
|
93
101
|
language: "english" | "french" | "german" | "simple";
|
|
94
102
|
value: string;
|
package/core/clause.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.getCombinedClause = exports.Modulo = exports.Divide = exports.Multiply = exports.Subtract = exports.Add = exports.PaginationMultipleColsSubQuery = exports.JSONPathValuePredicate = exports.JSONObjectFieldKeyAsText = exports.JSONObjectFieldKeyASJSON = exports.sensitiveValue = exports.TsVectorWebsearchToTsQuery = exports.TsVectorPhraseToTsQuery = exports.TsVectorPlainToTsQuery = exports.TsVectorColTsQuery = exports.WebsearchToTsQuery = exports.PhraseToTsQuery = exports.PlainToTsQuery = exports.TsQuery = exports.DBTypeIn = exports.TextIn = exports.IntegerIn = exports.UuidIn = exports.In = exports.OrOptional = exports.Or = exports.AndOptional = exports.And = exports.LessEq = exports.GreaterEq = exports.Less = exports.Greater = exports.NotEq = exports.Eq = exports.ArrayNotEq = exports.ArrayEq = exports.PostgresArrayNotOverlaps = exports.PostgresArrayOverlaps = exports.PostgresArrayNotContains = exports.PostgresArrayNotContainsValue = exports.PostgresArrayContains = exports.PostgresArrayContainsValue = exports.inClause = void 0;
|
|
26
|
+
exports.getCombinedClause = exports.Modulo = exports.Divide = exports.Multiply = exports.Subtract = exports.Add = exports.PaginationMultipleColsSubQuery = exports.JSONPathValuePredicate = exports.JSONObjectFieldKeyAsText = exports.JSONObjectFieldKeyASJSON = exports.sensitiveValue = exports.TsVectorWebsearchToTsQuery = exports.TsVectorPhraseToTsQuery = exports.TsVectorPlainToTsQuery = exports.TsVectorColTsQuery = exports.WebsearchToTsQuery = exports.PhraseToTsQuery = exports.PlainToTsQuery = exports.TsQuery = exports.DBTypeNotIn = exports.TextNotIn = exports.IntegerNotIn = exports.UuidNotIn = exports.DBTypeIn = exports.TextIn = exports.IntegerIn = exports.UuidIn = exports.In = exports.OrOptional = exports.Or = exports.AndOptional = exports.And = exports.LessEq = exports.GreaterEq = exports.Less = exports.Greater = exports.NotEq = exports.Eq = exports.ArrayNotEq = exports.ArrayEq = exports.PostgresArrayNotOverlaps = exports.PostgresArrayOverlaps = exports.PostgresArrayNotContains = exports.PostgresArrayNotContainsValue = exports.PostgresArrayContains = exports.PostgresArrayContainsValue = exports.notInClause = exports.inClause = void 0;
|
|
27
27
|
const db_1 = __importStar(require("./db"));
|
|
28
28
|
function isSensitive(val) {
|
|
29
29
|
return (val !== null &&
|
|
@@ -236,6 +236,7 @@ class inClause {
|
|
|
236
236
|
this.col = col;
|
|
237
237
|
this.value = value;
|
|
238
238
|
this.type = type;
|
|
239
|
+
this.op = "IN";
|
|
239
240
|
}
|
|
240
241
|
clause(idx) {
|
|
241
242
|
// do a simple = when only one item
|
|
@@ -272,7 +273,7 @@ class inClause {
|
|
|
272
273
|
if (postgresValuesList) {
|
|
273
274
|
inValue = `VALUES${inValue}`;
|
|
274
275
|
}
|
|
275
|
-
return `${this.col}
|
|
276
|
+
return `${this.col} ${this.op} (${inValue})`;
|
|
276
277
|
// TODO we need to return idx at end to query builder...
|
|
277
278
|
// or anything that's doing a composite query so next clause knows where to start
|
|
278
279
|
// or change to a sqlx.Rebind format
|
|
@@ -296,10 +297,17 @@ class inClause {
|
|
|
296
297
|
return result;
|
|
297
298
|
}
|
|
298
299
|
instanceKey() {
|
|
299
|
-
return
|
|
300
|
+
return `${this.op.toLowerCase()}:${this.col}:${this.values().join(",")}`;
|
|
300
301
|
}
|
|
301
302
|
}
|
|
302
303
|
exports.inClause = inClause;
|
|
304
|
+
class notInClause extends inClause {
|
|
305
|
+
constructor() {
|
|
306
|
+
super(...arguments);
|
|
307
|
+
this.op = "NOT IN";
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.notInClause = notInClause;
|
|
303
311
|
class compositeClause {
|
|
304
312
|
constructor(clauses, sep) {
|
|
305
313
|
this.clauses = clauses;
|
|
@@ -570,6 +578,26 @@ function DBTypeIn(col, values, typ) {
|
|
|
570
578
|
return new inClause(col, values, typ);
|
|
571
579
|
}
|
|
572
580
|
exports.DBTypeIn = DBTypeIn;
|
|
581
|
+
function UuidNotIn(col, values) {
|
|
582
|
+
return new notInClause(col, values, "uuid");
|
|
583
|
+
}
|
|
584
|
+
exports.UuidNotIn = UuidNotIn;
|
|
585
|
+
function IntegerNotIn(col, values) {
|
|
586
|
+
return new notInClause(col, values, "integer");
|
|
587
|
+
}
|
|
588
|
+
exports.IntegerNotIn = IntegerNotIn;
|
|
589
|
+
function TextNotIn(col, values) {
|
|
590
|
+
return new notInClause(col, values, "text");
|
|
591
|
+
}
|
|
592
|
+
exports.TextNotIn = TextNotIn;
|
|
593
|
+
/*
|
|
594
|
+
* if not uuid or text, pass the db type that can be used to cast this query
|
|
595
|
+
* if we end up with a large list of ids
|
|
596
|
+
*/
|
|
597
|
+
function DBTypeNotIn(col, values, typ) {
|
|
598
|
+
return new notInClause(col, values, typ);
|
|
599
|
+
}
|
|
600
|
+
exports.DBTypeNotIn = DBTypeNotIn;
|
|
573
601
|
// if string defaults to english
|
|
574
602
|
// https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES
|
|
575
603
|
// to_tsquery
|
package/core/config.d.ts
CHANGED
package/core/ent.js
CHANGED
|
@@ -34,32 +34,7 @@ const logger_1 = require("./logger");
|
|
|
34
34
|
const dataloader_1 = __importDefault(require("dataloader"));
|
|
35
35
|
const global_schema_1 = require("./global_schema");
|
|
36
36
|
const query_impl_1 = require("./query_impl");
|
|
37
|
-
|
|
38
|
-
class cacheMap {
|
|
39
|
-
constructor(options) {
|
|
40
|
-
this.options = options;
|
|
41
|
-
this.m = new Map();
|
|
42
|
-
}
|
|
43
|
-
get(key) {
|
|
44
|
-
const ret = this.m.get(key);
|
|
45
|
-
if (ret) {
|
|
46
|
-
(0, logger_1.log)("cache", {
|
|
47
|
-
"dataloader-cache-hit": key,
|
|
48
|
-
"tableName": this.options.tableName,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
return ret;
|
|
52
|
-
}
|
|
53
|
-
set(key, value) {
|
|
54
|
-
return this.m.set(key, value);
|
|
55
|
-
}
|
|
56
|
-
delete(key) {
|
|
57
|
-
return this.m.delete(key);
|
|
58
|
-
}
|
|
59
|
-
clear() {
|
|
60
|
-
return this.m.clear();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
37
|
+
const loader_1 = require("./loaders/loader");
|
|
63
38
|
class entCacheMap {
|
|
64
39
|
constructor(viewer, options) {
|
|
65
40
|
this.viewer = viewer;
|
|
@@ -88,11 +63,11 @@ class entCacheMap {
|
|
|
88
63
|
return this.m.clear();
|
|
89
64
|
}
|
|
90
65
|
}
|
|
91
|
-
function
|
|
66
|
+
function createAssocEdgeConfigLoader(options) {
|
|
92
67
|
const loaderOptions = {};
|
|
93
68
|
// if query logging is enabled, we should log what's happening with loader
|
|
94
69
|
if ((0, logger_1.logEnabled)("query")) {
|
|
95
|
-
loaderOptions.cacheMap = new
|
|
70
|
+
loaderOptions.cacheMap = new loader_1.CacheMap(options);
|
|
96
71
|
}
|
|
97
72
|
// something here brokwn with strict:true
|
|
98
73
|
return new dataloader_1.default(async (ids) => {
|
|
@@ -918,10 +893,11 @@ const assocEdgeFields = [
|
|
|
918
893
|
"inverse_edge_type",
|
|
919
894
|
"edge_table",
|
|
920
895
|
];
|
|
921
|
-
exports.assocEdgeLoader =
|
|
896
|
+
exports.assocEdgeLoader = createAssocEdgeConfigLoader({
|
|
922
897
|
tableName: "assoc_edge_config",
|
|
923
898
|
fields: assocEdgeFields,
|
|
924
899
|
key: "edge_type",
|
|
900
|
+
keyType: "uuid",
|
|
925
901
|
});
|
|
926
902
|
// we don't expect assoc_edge_config information to change
|
|
927
903
|
// so not using ContextCache but just caching it as needed once per server
|
|
@@ -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
|
}
|
|
@@ -145,7 +145,6 @@ class AssocDirectEdgeLoader {
|
|
|
145
145
|
ctr: this.edgeCtr,
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
|
-
// TODO should this have a disableTransformations flag to get these rows
|
|
149
148
|
async loadEdgeForID2(id, id2) {
|
|
150
149
|
return (0, ent_1.loadEdgeForID2)({
|
|
151
150
|
id1: id,
|
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
2
|
export declare function getLoader<K, V>(factory: LoaderFactory<K, V>, create: () => Loader<K, V>, context?: Context): Loader<K, V>;
|
|
3
3
|
export declare function getCustomLoader<K, V>(key: string, create: () => Loader<K, V>, context?: Context): Loader<K, V>;
|
|
4
|
-
export declare class
|
|
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;
|
|
@@ -93,7 +93,7 @@ function createDataLoader(options) {
|
|
|
93
93
|
const loaderOptions = {};
|
|
94
94
|
// if query logging is enabled, we should log what's happening with loader
|
|
95
95
|
if ((0, logger_1.logEnabled)("query")) {
|
|
96
|
-
loaderOptions.cacheMap = new loader_1.
|
|
96
|
+
loaderOptions.cacheMap = new loader_1.CacheMap(options);
|
|
97
97
|
}
|
|
98
98
|
return new dataloader_1.default(async (ids) => {
|
|
99
99
|
if (!ids.length) {
|
|
@@ -70,7 +70,7 @@ function createLoader(options, queryOptions) {
|
|
|
70
70
|
const loaderOptions = {};
|
|
71
71
|
// if query logging is enabled, we should log what's happening with loader
|
|
72
72
|
if ((0, logger_1.logEnabled)("query")) {
|
|
73
|
-
loaderOptions.cacheMap = new loader_1.
|
|
73
|
+
loaderOptions.cacheMap = new loader_1.CacheMap(options);
|
|
74
74
|
}
|
|
75
75
|
return new dataloader_1.default(async (keys) => {
|
|
76
76
|
if (!keys.length) {
|
|
@@ -59,7 +59,7 @@ function createCountDataLoader(options) {
|
|
|
59
59
|
const loaderOptions = {};
|
|
60
60
|
// if query logging is enabled, we should log what's happening with loader
|
|
61
61
|
if ((0, logger_1.logEnabled)("query")) {
|
|
62
|
-
loaderOptions.cacheMap = new loader_1.
|
|
62
|
+
loaderOptions.cacheMap = new loader_1.CacheMap(options);
|
|
63
63
|
}
|
|
64
64
|
return new dataloader_1.default(async (keys) => {
|
|
65
65
|
if (!keys.length) {
|
package/core/query/query.js
CHANGED
|
@@ -130,7 +130,6 @@ class FirstFilter {
|
|
|
130
130
|
return this.pageMap.get(id);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
|
-
// TODO need some last tests to test all these cases. clearly don't have the tests
|
|
134
133
|
class LastFilter {
|
|
135
134
|
constructor(options) {
|
|
136
135
|
this.options = options;
|
|
@@ -172,8 +171,6 @@ class LastFilter {
|
|
|
172
171
|
async query(options) {
|
|
173
172
|
const orderby = (0, query_impl_1.reverseOrderBy)(this.options.orderby);
|
|
174
173
|
const greater = orderby[0].direction === "ASC";
|
|
175
|
-
// TODO verify that this greater still makes sense. tests pass
|
|
176
|
-
// but wanna confirm
|
|
177
174
|
options.limit = this.options.limit + 1; // fetch an extra so we know if previous pag
|
|
178
175
|
if (this.options.cursorCol !== this.sortCol) {
|
|
179
176
|
const res = this.edgeQuery.getTableName();
|
package/graphql/graphql.d.ts
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { GraphQLScalarType } from "graphql";
|
|
2
|
+
import { FieldMap } from "src/schema";
|
|
3
|
+
import { ProcessedField as ParsedProcessedField } from "../parse_schema/parse";
|
|
2
4
|
interface ClassType<T = any> {
|
|
3
5
|
new (...args: any[]): T;
|
|
4
6
|
}
|
|
5
7
|
declare type StringToStringMap = {
|
|
6
8
|
[key: string]: string;
|
|
7
9
|
};
|
|
8
|
-
export interface
|
|
10
|
+
export interface CustomTypeInput {
|
|
9
11
|
type: string;
|
|
10
12
|
importPath: string;
|
|
11
13
|
tsType?: string;
|
|
12
14
|
tsImportPath?: string;
|
|
13
15
|
enumMap?: StringToStringMap;
|
|
16
|
+
structFields?: FieldMap;
|
|
14
17
|
inputType?: boolean;
|
|
15
18
|
[x: string]: any;
|
|
16
19
|
}
|
|
17
|
-
type
|
|
20
|
+
export type CustomType = Omit<CustomTypeInput, "structFields"> & {
|
|
21
|
+
structFields?: ParsedProcessedField[];
|
|
22
|
+
};
|
|
23
|
+
type Type = GraphQLScalarType | ClassType | string | CustomTypeInput;
|
|
18
24
|
export type GraphQLConnection<T> = {
|
|
19
25
|
node: T;
|
|
20
26
|
};
|
|
@@ -113,8 +119,8 @@ declare enum NullableResult {
|
|
|
113
119
|
export declare const knownAllowedNames: Map<string, string>;
|
|
114
120
|
export declare const knownDisAllowedNames: Map<string, boolean>;
|
|
115
121
|
export declare const knownInterfaces: Map<string, boolean>;
|
|
116
|
-
export declare const isCustomType: (type: Type) => type is
|
|
117
|
-
export declare const addCustomType: (type:
|
|
122
|
+
export declare const isCustomType: (type: Type) => type is CustomTypeInput;
|
|
123
|
+
export declare const addCustomType: (type: CustomTypeInput, gqlCapture: typeof GQLCapture) => Promise<void>;
|
|
118
124
|
export declare class GQLCapture {
|
|
119
125
|
private static enabled;
|
|
120
126
|
static enable(enabled: boolean): void;
|
|
@@ -168,5 +174,5 @@ export declare const gqlQuery: typeof GQLCapture.gqlQuery;
|
|
|
168
174
|
export declare const gqlMutation: typeof GQLCapture.gqlMutation;
|
|
169
175
|
export declare const gqlContextType: typeof GQLCapture.gqlContextType;
|
|
170
176
|
export declare const gqlConnection: typeof GQLCapture.gqlConnection;
|
|
171
|
-
declare const gqlFileUpload:
|
|
177
|
+
declare const gqlFileUpload: CustomTypeInput;
|
|
172
178
|
export { gqlFileUpload };
|
package/graphql/graphql.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.gqlFileUpload = exports.gqlConnection = exports.gqlContextType = exports.gqlMutation = exports.gqlQuery = exports.gqlUnionType = exports.gqlInterfaceType = exports.gqlObjectType = exports.gqlInputObjectType = exports.gqlArgType = exports.gqlField = exports.GQLCapture = exports.addCustomType = exports.isCustomType = exports.knownInterfaces = exports.knownDisAllowedNames = exports.knownAllowedNames = exports.CustomFieldType = void 0;
|
|
4
|
+
const parse_1 = require("../parse_schema/parse");
|
|
4
5
|
var CustomFieldType;
|
|
5
6
|
(function (CustomFieldType) {
|
|
6
7
|
CustomFieldType["Accessor"] = "ACCESSOR";
|
|
@@ -62,16 +63,23 @@ exports.isCustomType = isCustomType;
|
|
|
62
63
|
const isGraphQLScalarType = (type) => {
|
|
63
64
|
return type.serialize !== undefined;
|
|
64
65
|
};
|
|
65
|
-
const addCustomType = (type, gqlCapture) => {
|
|
66
|
+
const addCustomType = async (type, gqlCapture) => {
|
|
66
67
|
// TODO these should return ReadOnly objects...
|
|
67
68
|
const customTypes = gqlCapture.getCustomTypes();
|
|
68
69
|
const customType = customTypes.get(type.type);
|
|
69
70
|
if (customType && customType === type) {
|
|
70
71
|
return;
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
const addType = async (type) => {
|
|
74
|
+
// @ts-expect-error
|
|
75
|
+
const typ2 = { ...type };
|
|
76
|
+
if (type.structFields) {
|
|
77
|
+
typ2.structFields = await (0, parse_1.processFields)(type.structFields);
|
|
78
|
+
}
|
|
79
|
+
customTypes.set(type.type, typ2);
|
|
80
|
+
};
|
|
81
|
+
if (type.enumMap || type.structFields) {
|
|
82
|
+
await addType(type);
|
|
75
83
|
}
|
|
76
84
|
try {
|
|
77
85
|
const r = require(type.importPath);
|
|
@@ -102,7 +110,7 @@ const addCustomType = (type, gqlCapture) => {
|
|
|
102
110
|
}
|
|
103
111
|
return;
|
|
104
112
|
}
|
|
105
|
-
|
|
113
|
+
await addType(type);
|
|
106
114
|
};
|
|
107
115
|
exports.addCustomType = addCustomType;
|
|
108
116
|
const getType = (typ, result) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CustomField, Field, CustomObject, CustomMutation, CustomQuery,
|
|
1
|
+
import { CustomField, Field, CustomObject, CustomMutation, CustomQuery, CustomTypeInput } from "./graphql";
|
|
2
2
|
export declare function validateOneCustomField(expected: CustomField): void;
|
|
3
3
|
export declare function validateCustomFields(expected: CustomField[]): void;
|
|
4
4
|
export declare function validateCustomMutations(expected: CustomMutation[]): void;
|
|
@@ -30,4 +30,4 @@ export declare enum CustomObjectTypes {
|
|
|
30
30
|
Union = 256
|
|
31
31
|
}
|
|
32
32
|
export declare function validateNoCustom(...exceptions: number[]): void;
|
|
33
|
-
export declare function validateCustomTypes(expected:
|
|
33
|
+
export declare function validateCustomTypes(expected: CustomTypeInput[]): void;
|
|
@@ -153,7 +153,7 @@ var CustomObjectTypes;
|
|
|
153
153
|
CustomObjectTypes[CustomObjectTypes["Interface"] = 128] = "Interface";
|
|
154
154
|
CustomObjectTypes[CustomObjectTypes["Union"] = 256] = "Union";
|
|
155
155
|
})(CustomObjectTypes = exports.CustomObjectTypes || (exports.CustomObjectTypes = {}));
|
|
156
|
-
//
|
|
156
|
+
// what's a good name for this instead?
|
|
157
157
|
function validateNoCustom(...exceptions) {
|
|
158
158
|
let bit = 0;
|
|
159
159
|
exceptions.forEach((exp) => (bit = bit | exp));
|
package/index.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ declare const query: {
|
|
|
23
23
|
IntegerIn: typeof q.IntegerIn;
|
|
24
24
|
TextIn: typeof q.TextIn;
|
|
25
25
|
DBTypeIn: typeof q.DBTypeIn;
|
|
26
|
+
UuidNotIn: typeof q.UuidNotIn;
|
|
27
|
+
IntegerNotIn: typeof q.IntegerNotIn;
|
|
28
|
+
TextNotIn: typeof q.TextNotIn;
|
|
29
|
+
DBTypeNotIn: typeof q.DBTypeNotIn;
|
|
26
30
|
Greater: typeof q.Greater;
|
|
27
31
|
Less: typeof q.Less;
|
|
28
32
|
GreaterEq: typeof q.GreaterEq;
|
package/index.js
CHANGED
|
@@ -126,6 +126,10 @@ const query = {
|
|
|
126
126
|
IntegerIn: q.IntegerIn,
|
|
127
127
|
TextIn: q.TextIn,
|
|
128
128
|
DBTypeIn: q.DBTypeIn,
|
|
129
|
+
UuidNotIn: q.UuidNotIn,
|
|
130
|
+
IntegerNotIn: q.IntegerNotIn,
|
|
131
|
+
TextNotIn: q.TextNotIn,
|
|
132
|
+
DBTypeNotIn: q.DBTypeNotIn,
|
|
129
133
|
Greater: q.Greater,
|
|
130
134
|
Less: q.Less,
|
|
131
135
|
GreaterEq: q.GreaterEq,
|
package/package.json
CHANGED
package/parse_schema/parse.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Schema, Field, AssocEdge, AssocEdgeGroup, Action } from "../schema";
|
|
2
|
-
import { ActionField, Type, GlobalSchema, TransformReadBetaResult, CanViewerDo } from "../schema/schema";
|
|
2
|
+
import { ActionField, Type, FieldMap, GlobalSchema, TransformReadBetaResult, CanViewerDo } from "../schema/schema";
|
|
3
|
+
export declare function processFields(src: FieldMap | Field[], patternName?: string): Promise<ProcessedField[]>;
|
|
3
4
|
declare enum NullableResult {
|
|
4
5
|
CONTENTS = "contents",
|
|
5
6
|
CONTENTS_AND_LIST = "contentsAndList",
|
|
@@ -48,7 +49,7 @@ type ProcessedType = Omit<Type, "subFields" | "listElemType" | "unionFields"> &
|
|
|
48
49
|
listElemType?: ProcessedType;
|
|
49
50
|
unionFields?: ProcessedField[];
|
|
50
51
|
};
|
|
51
|
-
type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOnCreate" | "privacyPolicy" | "type" | "serverDefault"> & {
|
|
52
|
+
export type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOnCreate" | "privacyPolicy" | "type" | "serverDefault"> & {
|
|
52
53
|
name: string;
|
|
53
54
|
hasDefaultValueOnCreate?: boolean;
|
|
54
55
|
hasDefaultValueOnEdit?: boolean;
|
package/parse_schema/parse.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseSchema = void 0;
|
|
3
|
+
exports.parseSchema = exports.processFields = void 0;
|
|
4
4
|
const cosmiconfig_1 = require("cosmiconfig");
|
|
5
5
|
const const_1 = require("../core/const");
|
|
6
6
|
const global_schema_1 = require("../core/global_schema");
|
|
@@ -87,6 +87,7 @@ async function processFields(src, patternName) {
|
|
|
87
87
|
}
|
|
88
88
|
return ret;
|
|
89
89
|
}
|
|
90
|
+
exports.processFields = processFields;
|
|
90
91
|
async function transformServerDefault(name, f, value) {
|
|
91
92
|
if (f.valid) {
|
|
92
93
|
if (!(await f.valid(value))) {
|
|
@@ -182,51 +182,39 @@ async function captureDynamic(filePath, gqlCapture) {
|
|
|
182
182
|
return;
|
|
183
183
|
}
|
|
184
184
|
let json = json5_1.default.parse(datas.join(""));
|
|
185
|
-
|
|
186
|
-
const v = json[k];
|
|
187
|
-
switch (k) {
|
|
188
|
-
case "queries":
|
|
189
|
-
processTopLevel(v, gqlCapture.getCustomQueries(), gqlCapture);
|
|
190
|
-
break;
|
|
191
|
-
case "mutations":
|
|
192
|
-
processTopLevel(v, gqlCapture.getCustomMutations(), gqlCapture);
|
|
193
|
-
break;
|
|
194
|
-
case "customTypes":
|
|
195
|
-
processCustomTypes(v, gqlCapture);
|
|
196
|
-
break;
|
|
197
|
-
default:
|
|
198
|
-
reject(new Error(`key ${k} is unsupported in dynamic custom graphql. only queries and mutations are supported`));
|
|
199
|
-
}
|
|
200
|
-
}
|
|
185
|
+
processJSON(gqlCapture, json);
|
|
201
186
|
resolve(undefined);
|
|
202
187
|
});
|
|
203
188
|
});
|
|
204
189
|
}
|
|
190
|
+
async function processJSON(gqlCapture, json) {
|
|
191
|
+
if (json.fields) {
|
|
192
|
+
for (const k in json.fields) {
|
|
193
|
+
processCustomFields(json.fields[k], gqlCapture, k);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (json.inputs) {
|
|
197
|
+
processCustomObjects(json.inputs, gqlCapture, true);
|
|
198
|
+
}
|
|
199
|
+
if (json.objects) {
|
|
200
|
+
processCustomObjects(json.objects, gqlCapture);
|
|
201
|
+
}
|
|
202
|
+
if (json.queries) {
|
|
203
|
+
processTopLevel(json.queries, gqlCapture.getCustomQueries(), gqlCapture);
|
|
204
|
+
}
|
|
205
|
+
if (json.mutations) {
|
|
206
|
+
processTopLevel(json.mutations, gqlCapture.getCustomMutations(), gqlCapture);
|
|
207
|
+
}
|
|
208
|
+
if (json.customTypes) {
|
|
209
|
+
processCustomTypes(json.customTypes, gqlCapture);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
205
212
|
async function captureCustom(filePath, filesCsv, jsonPath, gqlCapture) {
|
|
206
213
|
if (jsonPath !== undefined) {
|
|
207
214
|
let json = json5_1.default.parse(fs.readFileSync(jsonPath, {
|
|
208
215
|
encoding: "utf8",
|
|
209
216
|
}));
|
|
210
|
-
|
|
211
|
-
for (const k in json.fields) {
|
|
212
|
-
processCustomFields(json.fields[k], gqlCapture, k);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (json.inputs) {
|
|
216
|
-
processCustomObjects(json.inputs, gqlCapture, true);
|
|
217
|
-
}
|
|
218
|
-
if (json.objects) {
|
|
219
|
-
processCustomObjects(json.objects, gqlCapture);
|
|
220
|
-
}
|
|
221
|
-
if (json.queries) {
|
|
222
|
-
processTopLevel(json.queries, gqlCapture.getCustomQueries(), gqlCapture);
|
|
223
|
-
}
|
|
224
|
-
if (json.mutations) {
|
|
225
|
-
processTopLevel(json.mutations, gqlCapture.getCustomMutations(), gqlCapture);
|
|
226
|
-
}
|
|
227
|
-
if (json.customTypes) {
|
|
228
|
-
processCustomTypes(json.customTypes, gqlCapture);
|
|
229
|
-
}
|
|
217
|
+
processJSON(gqlCapture, json);
|
|
230
218
|
return;
|
|
231
219
|
}
|
|
232
220
|
if (filesCsv !== undefined) {
|
|
@@ -431,9 +419,13 @@ async function main() {
|
|
|
431
419
|
const buildClasses = (fields) => {
|
|
432
420
|
fields.forEach((field) => {
|
|
433
421
|
if (field.nodeName && !nodesMap.has(field.nodeName)) {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
422
|
+
// TODO don't necessarily wanna do this
|
|
423
|
+
try {
|
|
424
|
+
let info = imports.getInfoForClass(field.nodeName);
|
|
425
|
+
classes[field.nodeName] = { ...info.class, path: info.file.path };
|
|
426
|
+
buildFiles(info.file);
|
|
427
|
+
}
|
|
428
|
+
catch (err) { }
|
|
437
429
|
}
|
|
438
430
|
buildClasses2(field.args);
|
|
439
431
|
buildClasses2(field.results);
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ID, SelectBaseDataOptions, Context, Data, LoaderFactory, EdgeQueryableDataOptions, Loader } from "../base";
|
|
2
|
-
import * as clause from "../clause";
|
|
3
|
-
import { OrderBy } from "../query_impl";
|
|
4
|
-
import { ObjectLoaderFactory } from "./object_loader";
|
|
5
|
-
export declare class IndexLoaderFactory implements LoaderFactory<ID, Data[]> {
|
|
6
|
-
name: string;
|
|
7
|
-
private factory;
|
|
8
|
-
constructor(options: SelectBaseDataOptions, col: string, opts?: {
|
|
9
|
-
extraClause?: clause.Clause;
|
|
10
|
-
orderby?: OrderBy;
|
|
11
|
-
toPrime?: ObjectLoaderFactory<Data>[];
|
|
12
|
-
});
|
|
13
|
-
createLoader(context?: Context): any;
|
|
14
|
-
createConfigurableLoader(options: EdgeQueryableDataOptions, context?: Context): Loader<ID, Data[]>;
|
|
15
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.IndexLoaderFactory = void 0;
|
|
4
|
-
const query_loader_1 = require("./query_loader");
|
|
5
|
-
// we're keeping this for legacy reasons so as to not break existing callers
|
|
6
|
-
// and to decouple the change here but all callers can safely be changed here to use QueryLoaderFactory
|
|
7
|
-
// @deprecated use QueryLoaderFactory
|
|
8
|
-
class IndexLoaderFactory {
|
|
9
|
-
constructor(options, col, opts) {
|
|
10
|
-
this.factory = new query_loader_1.QueryLoaderFactory({
|
|
11
|
-
fields: options.fields,
|
|
12
|
-
tableName: options.tableName,
|
|
13
|
-
groupCol: col,
|
|
14
|
-
clause: opts?.extraClause,
|
|
15
|
-
orderby: opts?.orderby,
|
|
16
|
-
toPrime: opts?.toPrime,
|
|
17
|
-
});
|
|
18
|
-
this.name = `indexLoader:${options.tableName}:${col}`;
|
|
19
|
-
}
|
|
20
|
-
createLoader(context) {
|
|
21
|
-
return this.factory.createLoader(context);
|
|
22
|
-
}
|
|
23
|
-
createConfigurableLoader(options, context) {
|
|
24
|
-
return this.factory.createConfigurableLoader(options, context);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.IndexLoaderFactory = IndexLoaderFactory;
|