@subsquid/openreader 0.0.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/README.md +34 -0
- package/dist/gql/opencrud.d.ts +4 -0
- package/dist/gql/opencrud.js +301 -0
- package/dist/gql/opencrud.js.map +1 -0
- package/dist/gql/schema.d.ts +4 -0
- package/dist/gql/schema.js +271 -0
- package/dist/gql/schema.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.js +97 -0
- package/dist/main.js.map +1 -0
- package/dist/model.d.ts +70 -0
- package/dist/model.js +3 -0
- package/dist/model.js.map +1 -0
- package/dist/model.tools.d.ts +9 -0
- package/dist/model.tools.js +120 -0
- package/dist/model.tools.js.map +1 -0
- package/dist/orderBy.d.ts +16 -0
- package/dist/orderBy.js +80 -0
- package/dist/orderBy.js.map +1 -0
- package/dist/queryBuilder.d.ts +52 -0
- package/dist/queryBuilder.js +605 -0
- package/dist/queryBuilder.js.map +1 -0
- package/dist/relayConnection.d.ts +36 -0
- package/dist/relayConnection.js +43 -0
- package/dist/relayConnection.js.map +1 -0
- package/dist/requestedFields.d.ts +32 -0
- package/dist/requestedFields.js +172 -0
- package/dist/requestedFields.js.map +1 -0
- package/dist/resolver.d.ts +8 -0
- package/dist/resolver.js +142 -0
- package/dist/resolver.js.map +1 -0
- package/dist/scalars.d.ts +33 -0
- package/dist/scalars.js +239 -0
- package/dist/scalars.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.js +119 -0
- package/dist/server.js.map +1 -0
- package/dist/util.d.ts +19 -0
- package/dist/util.js +89 -0
- package/dist/util.js.map +1 -0
- package/dist/where.d.ts +8 -0
- package/dist/where.js +96 -0
- package/dist/where.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { UserInputError } from "apollo-server-core";
|
|
2
|
+
export interface PageInfo {
|
|
3
|
+
hasNextPage: boolean;
|
|
4
|
+
hasPreviousPage: boolean;
|
|
5
|
+
startCursor: string;
|
|
6
|
+
endCursor: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ConnectionEdge<T> {
|
|
9
|
+
node?: T;
|
|
10
|
+
cursor?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConnectionResponse<T> {
|
|
13
|
+
edges?: ConnectionEdge<T>[];
|
|
14
|
+
pageInfo?: PageInfo;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Offset value for SQL query
|
|
18
|
+
*/
|
|
19
|
+
export declare type Cursor = number;
|
|
20
|
+
export declare function encodeCursor(cursor: Cursor): string;
|
|
21
|
+
export declare function decodeCursor(value: string): Cursor;
|
|
22
|
+
export declare class InvalidCursorValue extends UserInputError {
|
|
23
|
+
constructor(value: string);
|
|
24
|
+
}
|
|
25
|
+
export interface ConnectionArgs {
|
|
26
|
+
first?: number;
|
|
27
|
+
after?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ConnectionParams {
|
|
30
|
+
offset: number;
|
|
31
|
+
limit: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* https://relay.dev/assets/files/connections-932f4f2cdffd79724ac76373deb30dc8.htm#sec-Pagination-algorithm
|
|
35
|
+
*/
|
|
36
|
+
export declare function decodeConnectionArgs(args: ConnectionArgs): ConnectionParams;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeConnectionArgs = exports.InvalidCursorValue = exports.decodeCursor = exports.encodeCursor = void 0;
|
|
4
|
+
const apollo_server_core_1 = require("apollo-server-core");
|
|
5
|
+
function encodeCursor(cursor) {
|
|
6
|
+
return '' + cursor;
|
|
7
|
+
}
|
|
8
|
+
exports.encodeCursor = encodeCursor;
|
|
9
|
+
function decodeCursor(value) {
|
|
10
|
+
let cursor = parseInt(value);
|
|
11
|
+
if (isFinite(cursor) && cursor >= 0) {
|
|
12
|
+
return cursor;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
throw new InvalidCursorValue(value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.decodeCursor = decodeCursor;
|
|
19
|
+
class InvalidCursorValue extends apollo_server_core_1.UserInputError {
|
|
20
|
+
constructor(value) {
|
|
21
|
+
super(`invalid cursor value: ${value}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.InvalidCursorValue = InvalidCursorValue;
|
|
25
|
+
/**
|
|
26
|
+
* https://relay.dev/assets/files/connections-932f4f2cdffd79724ac76373deb30dc8.htm#sec-Pagination-algorithm
|
|
27
|
+
*/
|
|
28
|
+
function decodeConnectionArgs(args) {
|
|
29
|
+
let offset = 0;
|
|
30
|
+
let limit = 100;
|
|
31
|
+
if (args.after) {
|
|
32
|
+
offset = decodeCursor(args.after);
|
|
33
|
+
}
|
|
34
|
+
if (args.first != null) {
|
|
35
|
+
if (args.first < 0) {
|
|
36
|
+
throw new apollo_server_core_1.UserInputError("'first' argument of connection can't be less than 0");
|
|
37
|
+
}
|
|
38
|
+
limit = args.first;
|
|
39
|
+
}
|
|
40
|
+
return { offset, limit };
|
|
41
|
+
}
|
|
42
|
+
exports.decodeConnectionArgs = decodeConnectionArgs;
|
|
43
|
+
//# sourceMappingURL=relayConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relayConnection.js","sourceRoot":"","sources":["../src/relayConnection.ts"],"names":[],"mappings":";;;AAAA,2DAAiD;AA6BjD,SAAgB,YAAY,CAAC,MAAc;IACvC,OAAO,EAAE,GAAC,MAAM,CAAA;AACpB,CAAC;AAFD,oCAEC;AAGD,SAAgB,YAAY,CAAC,KAAa;IACtC,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;QACjC,OAAO,MAAM,CAAA;KAChB;SAAM;QACH,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA;KACtC;AACL,CAAC;AAPD,oCAOC;AAGD,MAAa,kBAAmB,SAAQ,mCAAc;IAClD,YAAY,KAAa;QACrB,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAA;IAC3C,CAAC;CACJ;AAJD,gDAIC;AAeD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,IAAoB;IACrD,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,KAAK,GAAG,GAAG,CAAA;IACf,IAAI,IAAI,CAAC,KAAK,EAAE;QACZ,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACpC;IACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;QACpB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YAChB,MAAM,IAAI,mCAAc,CAAC,qDAAqD,CAAC,CAAA;SAClF;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;KACrB;IACD,OAAO,EAAC,MAAM,EAAE,KAAK,EAAC,CAAA;AAC1B,CAAC;AAbD,oDAaC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { GraphQLResolveInfo } from "graphql";
|
|
2
|
+
import { Model, PropType } from "./model";
|
|
3
|
+
export interface RequestedFields {
|
|
4
|
+
[name: string]: RequestedField;
|
|
5
|
+
}
|
|
6
|
+
export interface RequestedField {
|
|
7
|
+
propType: PropType;
|
|
8
|
+
requests: FieldRequest[];
|
|
9
|
+
}
|
|
10
|
+
export interface FieldRequest {
|
|
11
|
+
alias: string;
|
|
12
|
+
children?: RequestedFields;
|
|
13
|
+
args?: any;
|
|
14
|
+
ifType?: string;
|
|
15
|
+
index: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function requestedFields(model: Model, entityName: string, info: GraphQLResolveInfo): RequestedFields;
|
|
18
|
+
export interface ConnectionRequestedFields {
|
|
19
|
+
totalCount?: boolean;
|
|
20
|
+
pageInfo?: boolean;
|
|
21
|
+
edges?: {
|
|
22
|
+
node?: RequestedFields;
|
|
23
|
+
cursor?: boolean;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function connectionRequestedFields(model: Model, entityName: string, info: GraphQLResolveInfo): ConnectionRequestedFields;
|
|
27
|
+
export interface FtsRequestedFields {
|
|
28
|
+
item?: Record<string, RequestedFields>;
|
|
29
|
+
highlight?: boolean;
|
|
30
|
+
rank?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function ftsRequestedFields(model: Model, queryName: string, info: GraphQLResolveInfo): FtsRequestedFields;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ftsRequestedFields = exports.connectionRequestedFields = exports.requestedFields = void 0;
|
|
7
|
+
const apollo_server_core_1 = require("apollo-server-core");
|
|
8
|
+
const assert_1 = __importDefault(require("assert"));
|
|
9
|
+
const graphql_parse_resolve_info_1 = require("graphql-parse-resolve-info");
|
|
10
|
+
const util_1 = require("./util");
|
|
11
|
+
function requestedFields(model, entityName, info) {
|
|
12
|
+
let tree = getResolveTree(info);
|
|
13
|
+
return collectRequestedFields(model, entityName, info.schema, tree);
|
|
14
|
+
}
|
|
15
|
+
exports.requestedFields = requestedFields;
|
|
16
|
+
function collectRequestedFields(model, objectName, schema, tree) {
|
|
17
|
+
let requested = {};
|
|
18
|
+
let object = model[objectName];
|
|
19
|
+
(0, assert_1.default)(object.kind == 'entity' || object.kind == 'object');
|
|
20
|
+
let fields = simplifyResolveTree(schema, tree, objectName).fields;
|
|
21
|
+
for (let alias in fields) {
|
|
22
|
+
let f = fields[alias];
|
|
23
|
+
let prop = object.properties[f.name];
|
|
24
|
+
let propType = prop.type;
|
|
25
|
+
switch (propType.kind) {
|
|
26
|
+
case 'scalar':
|
|
27
|
+
case 'enum':
|
|
28
|
+
case 'list':
|
|
29
|
+
requested[f.name] = {
|
|
30
|
+
propType,
|
|
31
|
+
requests: [{ alias: f.name, index: 0 }]
|
|
32
|
+
};
|
|
33
|
+
break;
|
|
34
|
+
case 'object':
|
|
35
|
+
addRequest(requested, f.name, propType, {
|
|
36
|
+
alias,
|
|
37
|
+
children: collectRequestedFields(model, propType.name, schema, f),
|
|
38
|
+
index: 0
|
|
39
|
+
});
|
|
40
|
+
break;
|
|
41
|
+
case 'fk':
|
|
42
|
+
addRequest(requested, f.name, propType, {
|
|
43
|
+
alias,
|
|
44
|
+
children: collectRequestedFields(model, propType.foreignEntity, schema, f),
|
|
45
|
+
index: 0
|
|
46
|
+
});
|
|
47
|
+
break;
|
|
48
|
+
case 'list-relation':
|
|
49
|
+
addRequest(requested, f.name, propType, {
|
|
50
|
+
alias,
|
|
51
|
+
args: f.args,
|
|
52
|
+
children: collectRequestedFields(model, propType.entity, schema, f),
|
|
53
|
+
index: 0
|
|
54
|
+
});
|
|
55
|
+
break;
|
|
56
|
+
case 'union': {
|
|
57
|
+
let union = model[propType.name];
|
|
58
|
+
(0, assert_1.default)(union.kind == 'union');
|
|
59
|
+
let children = {};
|
|
60
|
+
union.variants.forEach(name => {
|
|
61
|
+
let variantFields = collectRequestedFields(model, name, schema, f);
|
|
62
|
+
for (let key in variantFields) {
|
|
63
|
+
let field = variantFields[key];
|
|
64
|
+
field.requests.forEach(req => {
|
|
65
|
+
addRequest(children, key, field.propType, { ...req, ifType: name });
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
addRequest(requested, f.name, propType, {
|
|
70
|
+
alias,
|
|
71
|
+
children,
|
|
72
|
+
index: 0
|
|
73
|
+
});
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
default:
|
|
77
|
+
throw new Error(`Field ${objectName}.${f.name} has unsupported type and can't be requested`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return requested;
|
|
81
|
+
}
|
|
82
|
+
function addRequest(requested, name, propType, req) {
|
|
83
|
+
let field = requested[name];
|
|
84
|
+
if (field == null) {
|
|
85
|
+
requested[name] = {
|
|
86
|
+
propType,
|
|
87
|
+
requests: [req]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
field.requests.push(req);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function connectionRequestedFields(model, entityName, info) {
|
|
95
|
+
let requested = {};
|
|
96
|
+
let tree = getResolveTree(info, (0, util_1.pluralize)(entityName) + 'Connection');
|
|
97
|
+
requested.totalCount = hasTreeRequest(tree.fields, 'totalCount');
|
|
98
|
+
requested.pageInfo = hasTreeRequest(tree.fields, 'pageInfo');
|
|
99
|
+
let edgesTree = getTreeRequest(tree.fields, 'edges');
|
|
100
|
+
if (edgesTree) {
|
|
101
|
+
let edgeFields = simplifyResolveTree(info.schema, edgesTree, entityName + 'Edge').fields;
|
|
102
|
+
requested.edges = {};
|
|
103
|
+
requested.edges.cursor = hasTreeRequest(edgeFields, 'cursor');
|
|
104
|
+
let nodeTree = getTreeRequest(edgeFields, 'node');
|
|
105
|
+
if (nodeTree) {
|
|
106
|
+
requested.edges.node = collectRequestedFields(model, entityName, info.schema, nodeTree);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return requested;
|
|
110
|
+
}
|
|
111
|
+
exports.connectionRequestedFields = connectionRequestedFields;
|
|
112
|
+
function ftsRequestedFields(model, queryName, info) {
|
|
113
|
+
let query = model[queryName];
|
|
114
|
+
(0, assert_1.default)(query.kind == 'fts');
|
|
115
|
+
let requested = {};
|
|
116
|
+
let tree = getResolveTree(info, (0, util_1.upperCaseFirst)(queryName) + 'Output');
|
|
117
|
+
requested.rank = hasTreeRequest(tree.fields, 'rank');
|
|
118
|
+
requested.highlight = hasTreeRequest(tree.fields, 'highlight');
|
|
119
|
+
let itemTree = getTreeRequest(tree.fields, 'item');
|
|
120
|
+
if (itemTree) {
|
|
121
|
+
requested.item = {};
|
|
122
|
+
for (let i = 0; i < query.sources.length; i++) {
|
|
123
|
+
let entity = query.sources[i].entity;
|
|
124
|
+
let fields = collectRequestedFields(model, entity, info.schema, itemTree);
|
|
125
|
+
for (let key in fields) {
|
|
126
|
+
requested.item[entity] = fields;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return requested;
|
|
132
|
+
}
|
|
133
|
+
exports.ftsRequestedFields = ftsRequestedFields;
|
|
134
|
+
function getTreeRequest(treeFields, fieldName) {
|
|
135
|
+
let req;
|
|
136
|
+
for (let alias in treeFields) {
|
|
137
|
+
let e = treeFields[alias];
|
|
138
|
+
if (e.name != fieldName)
|
|
139
|
+
continue;
|
|
140
|
+
if (req != null)
|
|
141
|
+
throw new apollo_server_core_1.UserInputError(`multiple aliases for field '${fieldName}' are not supported`);
|
|
142
|
+
req = e;
|
|
143
|
+
}
|
|
144
|
+
return req;
|
|
145
|
+
}
|
|
146
|
+
function hasTreeRequest(treeFields, fieldName) {
|
|
147
|
+
for (let alias in treeFields) {
|
|
148
|
+
let e = treeFields[alias];
|
|
149
|
+
if (e.name == fieldName)
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
function getResolveTree(info, typeName) {
|
|
155
|
+
let tree = (0, graphql_parse_resolve_info_1.parseResolveInfo)(info);
|
|
156
|
+
(0, assert_1.default)(isResolveTree(tree));
|
|
157
|
+
if (typeName) {
|
|
158
|
+
return simplifyResolveTree(info.schema, tree, typeName);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return tree;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function simplifyResolveTree(schema, tree, typeName) {
|
|
165
|
+
let type = schema.getType(typeName);
|
|
166
|
+
(0, assert_1.default)(type != null);
|
|
167
|
+
return (0, graphql_parse_resolve_info_1.simplifyParsedResolveInfoFragmentWithType)(tree, type);
|
|
168
|
+
}
|
|
169
|
+
function isResolveTree(resolveInfo) {
|
|
170
|
+
return resolveInfo != null && resolveInfo.fieldsByTypeName != null;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=requestedFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestedFields.js","sourceRoot":"","sources":["../src/requestedFields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IResolvers } from "@graphql-tools/utils";
|
|
2
|
+
import type { ClientBase } from "pg";
|
|
3
|
+
import type { Model } from "./model";
|
|
4
|
+
export interface ResolverContext {
|
|
5
|
+
db: ClientBase;
|
|
6
|
+
model: Model;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildResolvers(model: Model): IResolvers;
|
package/dist/resolver.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildResolvers = void 0;
|
|
7
|
+
const apollo_server_core_1 = require("apollo-server-core");
|
|
8
|
+
const assert_1 = __importDefault(require("assert"));
|
|
9
|
+
const queryBuilder_1 = require("./queryBuilder");
|
|
10
|
+
const relayConnection_1 = require("./relayConnection");
|
|
11
|
+
const requestedFields_1 = require("./requestedFields");
|
|
12
|
+
const scalars_1 = require("./scalars");
|
|
13
|
+
const util_1 = require("./util");
|
|
14
|
+
function buildResolvers(model) {
|
|
15
|
+
let Query = {};
|
|
16
|
+
let resolvers = { Query, ...(0, scalars_1.getScalarResolvers)() };
|
|
17
|
+
for (let name in model) {
|
|
18
|
+
let item = model[name];
|
|
19
|
+
switch (item.kind) {
|
|
20
|
+
case 'entity':
|
|
21
|
+
Query[(0, util_1.toQueryListField)(name)] = (source, args, context, info) => {
|
|
22
|
+
let fields = (0, requestedFields_1.requestedFields)(model, name, info);
|
|
23
|
+
return new queryBuilder_1.QueryBuilder(context).executeSelect(name, args, fields);
|
|
24
|
+
};
|
|
25
|
+
Query[`${(0, util_1.lowerCaseFirst)(name)}ById`] = async (source, args, context, info) => {
|
|
26
|
+
let fields = (0, requestedFields_1.requestedFields)(model, name, info);
|
|
27
|
+
let result = await new queryBuilder_1.QueryBuilder(context).executeSelect(name, { where: { id_eq: args.id } }, fields);
|
|
28
|
+
(0, assert_1.default)(result.length < 2);
|
|
29
|
+
return result[0];
|
|
30
|
+
};
|
|
31
|
+
Query[`${(0, util_1.lowerCaseFirst)(name)}ByUniqueInput`] = async (source, args, context, info) => {
|
|
32
|
+
let fields = (0, requestedFields_1.requestedFields)(model, name, info);
|
|
33
|
+
let result = await new queryBuilder_1.QueryBuilder(context).executeSelect(name, { where: { id_eq: args.where.id } }, fields);
|
|
34
|
+
(0, assert_1.default)(result.length < 2);
|
|
35
|
+
return result[0];
|
|
36
|
+
};
|
|
37
|
+
Query[(0, util_1.toQueryListField)(name) + 'Connection'] = (source, args, context, info) => {
|
|
38
|
+
return resolveEntityConnection(name, args, context, info);
|
|
39
|
+
};
|
|
40
|
+
installFieldResolvers(name, item);
|
|
41
|
+
break;
|
|
42
|
+
case 'object':
|
|
43
|
+
installFieldResolvers(name, item);
|
|
44
|
+
break;
|
|
45
|
+
case 'union':
|
|
46
|
+
resolvers[name] = {
|
|
47
|
+
__resolveType: resolveUnionType
|
|
48
|
+
};
|
|
49
|
+
break;
|
|
50
|
+
case 'fts':
|
|
51
|
+
Query[name] = (source, args, context, info) => {
|
|
52
|
+
let fields = (0, requestedFields_1.ftsRequestedFields)(model, name, info);
|
|
53
|
+
return new queryBuilder_1.QueryBuilder(context).executeFulltextSearch(name, args, fields);
|
|
54
|
+
};
|
|
55
|
+
resolvers[`${(0, util_1.upperCaseFirst)(name)}_Item`] = {
|
|
56
|
+
__resolveType: resolveUnionType
|
|
57
|
+
};
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function installFieldResolvers(name, object) {
|
|
62
|
+
let fields = {};
|
|
63
|
+
for (let key in object.properties) {
|
|
64
|
+
switch (object.properties[key].type.kind) {
|
|
65
|
+
case 'object':
|
|
66
|
+
case 'union':
|
|
67
|
+
case 'fk':
|
|
68
|
+
case 'list-relation':
|
|
69
|
+
fields[key] = aliasResolver;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
resolvers[name] = fields;
|
|
74
|
+
}
|
|
75
|
+
return resolvers;
|
|
76
|
+
}
|
|
77
|
+
exports.buildResolvers = buildResolvers;
|
|
78
|
+
function resolveUnionType(source) {
|
|
79
|
+
return source.isTypeOf;
|
|
80
|
+
}
|
|
81
|
+
function aliasResolver(source, args, ctx, info) {
|
|
82
|
+
return source[info.path.key];
|
|
83
|
+
}
|
|
84
|
+
async function resolveEntityConnection(entityName, args, context, info) {
|
|
85
|
+
let response = {};
|
|
86
|
+
let orderBy = args.orderBy && (0, util_1.ensureArray)(args.orderBy);
|
|
87
|
+
if (!orderBy?.length) {
|
|
88
|
+
throw new apollo_server_core_1.UserInputError('orderBy argument is required for connection');
|
|
89
|
+
}
|
|
90
|
+
let { offset, limit } = (0, relayConnection_1.decodeConnectionArgs)(args);
|
|
91
|
+
let listArgs = {
|
|
92
|
+
where: args.where,
|
|
93
|
+
orderBy,
|
|
94
|
+
offset,
|
|
95
|
+
limit: limit + 1
|
|
96
|
+
};
|
|
97
|
+
// https://relay.dev/assets/files/connections-932f4f2cdffd79724ac76373deb30dc8.htm#sec-undefined.PageInfo.Fields
|
|
98
|
+
function pageInfo(listLength) {
|
|
99
|
+
return {
|
|
100
|
+
hasNextPage: listLength > limit,
|
|
101
|
+
hasPreviousPage: listLength > 0 && offset > 0,
|
|
102
|
+
startCursor: listLength > 0 ? (0, relayConnection_1.encodeCursor)(offset + 1) : '',
|
|
103
|
+
endCursor: listLength > 0 ? (0, relayConnection_1.encodeCursor)(offset + Math.min(limit, listLength)) : ''
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
let fields = (0, requestedFields_1.connectionRequestedFields)(context.model, entityName, info);
|
|
107
|
+
if (fields.edges?.node) {
|
|
108
|
+
let nodes = await new queryBuilder_1.QueryBuilder(context).executeSelect(entityName, listArgs, fields.edges.node);
|
|
109
|
+
let edges = new Array(Math.min(limit, nodes.length));
|
|
110
|
+
for (let i = 0; i < edges.length; i++) {
|
|
111
|
+
edges[i] = {
|
|
112
|
+
node: nodes[i],
|
|
113
|
+
cursor: (0, relayConnection_1.encodeCursor)(offset + i + 1)
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
response.edges = edges;
|
|
117
|
+
response.pageInfo = pageInfo(nodes.length);
|
|
118
|
+
if (nodes.length > 0 && nodes.length <= limit) {
|
|
119
|
+
response.totalCount = offset + nodes.length;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (fields.edges?.cursor || fields.pageInfo) {
|
|
123
|
+
let listLength = await new queryBuilder_1.QueryBuilder(context).executeListCount(entityName, listArgs);
|
|
124
|
+
response.pageInfo = pageInfo(listLength);
|
|
125
|
+
if (fields.edges?.cursor) {
|
|
126
|
+
response.edges = [];
|
|
127
|
+
for (let i = 0; i < Math.min(limit, listLength); i++) {
|
|
128
|
+
response.edges.push({
|
|
129
|
+
cursor: (0, relayConnection_1.encodeCursor)(offset + i + 1)
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (listLength > 0 && listLength <= limit) {
|
|
134
|
+
response.totalCount = offset + listLength;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (fields.totalCount && response.totalCount == null) {
|
|
138
|
+
response.totalCount = await new queryBuilder_1.QueryBuilder(context).executeSelectCount(entityName, listArgs.where);
|
|
139
|
+
}
|
|
140
|
+
return response;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The current concept of custom scalars is as follows:
|
|
3
|
+
*
|
|
4
|
+
* Each custom scalar type has canonical string representation which is used every where:
|
|
5
|
+
* in JSON requests/responses
|
|
6
|
+
* in graphql schemas
|
|
7
|
+
* for database io
|
|
8
|
+
* for intermediate resolver values
|
|
9
|
+
*
|
|
10
|
+
* Because our canonical representations are used in SQL query parameters and results,
|
|
11
|
+
* database must support 2 way coercions between those and underlying database types.
|
|
12
|
+
*
|
|
13
|
+
* One exception is DateTime. We receive it from database in native format (getting Date objects from driver),
|
|
14
|
+
* then convert it to string with gql resolver.
|
|
15
|
+
*/
|
|
16
|
+
import { IResolvers } from "@graphql-tools/utils";
|
|
17
|
+
import { GraphQLScalarType } from "graphql";
|
|
18
|
+
export interface Scalar {
|
|
19
|
+
gql: GraphQLScalarType;
|
|
20
|
+
fromStringCast: (sqlExp: string) => string;
|
|
21
|
+
toStringCast: (sqlExp: string) => string;
|
|
22
|
+
fromStringArrayCast: (sqlExp: string) => string;
|
|
23
|
+
toStringArrayCast: (sqlExp: string) => string;
|
|
24
|
+
}
|
|
25
|
+
export declare const scalars: Record<string, Scalar>;
|
|
26
|
+
export declare const scalars_list: string[];
|
|
27
|
+
export declare function getScalarResolvers(): IResolvers;
|
|
28
|
+
export declare function toTransportCast(scalarType: string, sqlExp: string): string;
|
|
29
|
+
export declare function fromTransportCast(scalarType: string, sqlExp: string): string;
|
|
30
|
+
export declare function toTransportArrayCast(scalarType: string, sqlExp: string): string;
|
|
31
|
+
export declare function fromTransportArrayCast(scalarType: string, sqlExp: string): string;
|
|
32
|
+
export declare function fromJsonCast(scalarType: string, objSqlExp: string, prop: string): string;
|
|
33
|
+
export declare function fromJsonToTransportCast(scalarType: string, objSqlExp: string, prop: string): string;
|