@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.
Files changed (44) hide show
  1. package/README.md +34 -0
  2. package/dist/gql/opencrud.d.ts +4 -0
  3. package/dist/gql/opencrud.js +301 -0
  4. package/dist/gql/opencrud.js.map +1 -0
  5. package/dist/gql/schema.d.ts +4 -0
  6. package/dist/gql/schema.js +271 -0
  7. package/dist/gql/schema.js.map +1 -0
  8. package/dist/main.d.ts +3 -0
  9. package/dist/main.js +97 -0
  10. package/dist/main.js.map +1 -0
  11. package/dist/model.d.ts +70 -0
  12. package/dist/model.js +3 -0
  13. package/dist/model.js.map +1 -0
  14. package/dist/model.tools.d.ts +9 -0
  15. package/dist/model.tools.js +120 -0
  16. package/dist/model.tools.js.map +1 -0
  17. package/dist/orderBy.d.ts +16 -0
  18. package/dist/orderBy.js +80 -0
  19. package/dist/orderBy.js.map +1 -0
  20. package/dist/queryBuilder.d.ts +52 -0
  21. package/dist/queryBuilder.js +605 -0
  22. package/dist/queryBuilder.js.map +1 -0
  23. package/dist/relayConnection.d.ts +36 -0
  24. package/dist/relayConnection.js +43 -0
  25. package/dist/relayConnection.js.map +1 -0
  26. package/dist/requestedFields.d.ts +32 -0
  27. package/dist/requestedFields.js +172 -0
  28. package/dist/requestedFields.js.map +1 -0
  29. package/dist/resolver.d.ts +8 -0
  30. package/dist/resolver.js +142 -0
  31. package/dist/resolver.js.map +1 -0
  32. package/dist/scalars.d.ts +33 -0
  33. package/dist/scalars.js +239 -0
  34. package/dist/scalars.js.map +1 -0
  35. package/dist/server.d.ts +25 -0
  36. package/dist/server.js +119 -0
  37. package/dist/server.js.map +1 -0
  38. package/dist/util.d.ts +19 -0
  39. package/dist/util.js +89 -0
  40. package/dist/util.js.map +1 -0
  41. package/dist/where.d.ts +8 -0
  42. package/dist/where.js +96 -0
  43. package/dist/where.js.map +1 -0
  44. package/package.json +39 -0
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # OpenReader
2
+
3
+ GraphQL server for Hydra. Given [hydra schema](https://docs.subsquid.io/schema-spec)
4
+ and compatible database it serves "read part" of [OpenCRUD spec](https://www.opencrud.org).
5
+
6
+ ## Usage
7
+
8
+ ```bash
9
+ openreader schema.graphql
10
+ ```
11
+
12
+ Database connection and server port are configured via environment variables:
13
+
14
+ ```
15
+ DB_NAME
16
+ DB_USER
17
+ DB_PASS
18
+ DB_HOST
19
+ DB_PORT
20
+ GRAPHQL_SERVER_PORT
21
+ ```
22
+
23
+ ## Compatibility
24
+
25
+ OpenReader is mostly compatible with previous warthog based implementation.
26
+ Below is possibly incomplete list of edge cases where it differs.
27
+
28
+ 1. If two object types participate in a same union,
29
+ then their properties must have either different names or have a same type (modulo nullability).
30
+ 2. Only camel case names of types and properties are allowed.
31
+ 3. Filtering on typed json fields works without `_json` operator.
32
+ 4. `orderBy` argument of relay connection is required, only forward pagination is supported.
33
+ 5. `RelayConnection.edges`, `RelayConnection.edges.node` and `FulltextSearch.item` fields
34
+ do not support multiple aliases in GraphQL queries.
@@ -0,0 +1,4 @@
1
+ import { DocumentNode } from "graphql";
2
+ import { Model } from "../model";
3
+ export declare function generateOpenCrudQueries(model: Model): string;
4
+ export declare function buildServerSchema(model: Model): DocumentNode;
@@ -0,0 +1,301 @@
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.buildServerSchema = exports.generateOpenCrudQueries = void 0;
7
+ const apollo_server_core_1 = require("apollo-server-core");
8
+ const assert_1 = __importDefault(require("assert"));
9
+ const graphql_1 = require("graphql");
10
+ const orderBy_1 = require("../orderBy");
11
+ const scalars_1 = require("../scalars");
12
+ const util_1 = require("../util");
13
+ function generateOpenCrudQueries(model) {
14
+ let out = new util_1.Output();
15
+ generatePageInfoType();
16
+ for (let name in model) {
17
+ let item = model[name];
18
+ switch (item.kind) {
19
+ case 'entity':
20
+ generateOrderByInput(name);
21
+ generateWhereUniqueInput(name);
22
+ generateWhereInput(name, item);
23
+ generateObjectType(name, item);
24
+ generateEntityConnection(name);
25
+ break;
26
+ case 'object':
27
+ if (hasFilters(item)) {
28
+ generateWhereInput(name, item);
29
+ }
30
+ generateObjectType(name, item);
31
+ break;
32
+ case 'interface':
33
+ generateObjectType(name, item);
34
+ break;
35
+ case 'union':
36
+ generateUnionWhereInput(name, item);
37
+ generateUnionType(name, item);
38
+ break;
39
+ case 'enum':
40
+ generateEnumType(name, item);
41
+ break;
42
+ case 'fts':
43
+ generateFtsTypes(name, item);
44
+ break;
45
+ }
46
+ }
47
+ out.block('type Query', () => {
48
+ for (let name in model) {
49
+ let item = model[name];
50
+ if (item.kind == 'entity') {
51
+ out.line(`${(0, util_1.lowerCaseFirst)(name)}ById(id: ID!): ${name}`);
52
+ out.line(`${(0, util_1.lowerCaseFirst)(name)}ByUniqueInput(where: ${name}WhereUniqueInput!): ${name} @deprecated(reason: "Use \`${(0, util_1.lowerCaseFirst)(name)}ById\`")`);
53
+ out.line(`${(0, util_1.lowerCaseFirst)((0, util_1.pluralize)(name))}${manyArguments(name)}: [${name}!]!`);
54
+ out.line(`${(0, util_1.lowerCaseFirst)((0, util_1.pluralize)(name))}Connection${connectionArguments(name)}: ${(0, util_1.pluralize)(name)}Connection!`);
55
+ }
56
+ if (item.kind == 'fts') {
57
+ generateFtsQuery(name, item);
58
+ }
59
+ }
60
+ });
61
+ function generateObjectType(name, object) {
62
+ let head;
63
+ if (object.kind == 'interface') {
64
+ head = `interface ${name}`;
65
+ }
66
+ else {
67
+ head = `type ${name}`;
68
+ if (object.interfaces?.length) {
69
+ head += ` implements ${object.interfaces.join(' & ')}`;
70
+ }
71
+ }
72
+ generateDescription(object.description);
73
+ out.block(head, () => {
74
+ for (let key in object.properties) {
75
+ let prop = object.properties[key];
76
+ let gqlType = renderPropType(prop);
77
+ generateDescription(prop.description);
78
+ if (prop.type.kind == 'list-relation') {
79
+ out.line(`${key}${manyArguments(prop.type.entity)}: ${gqlType}`);
80
+ }
81
+ else {
82
+ out.line(`${key}: ${gqlType}`);
83
+ }
84
+ }
85
+ });
86
+ out.line();
87
+ }
88
+ function renderPropType(prop) {
89
+ switch (prop.type.kind) {
90
+ case "list":
91
+ return `[${renderPropType(prop.type.item)}]${prop.nullable ? '' : '!'}`;
92
+ case 'fk':
93
+ return `${prop.type.foreignEntity}${prop.nullable ? '' : '!'}`;
94
+ case "list-relation":
95
+ return `[${prop.type.entity}!]!`;
96
+ default:
97
+ return prop.type.name + (prop.nullable ? '' : '!');
98
+ }
99
+ }
100
+ function manyArguments(entityName) {
101
+ return `(where: ${entityName}WhereInput orderBy: [${entityName}OrderByInput] offset: Int limit: Int)`;
102
+ }
103
+ function connectionArguments(entityName) {
104
+ return `(orderBy: [${entityName}OrderByInput!]! after: String first: Int where: ${entityName}WhereInput)`;
105
+ }
106
+ function generateOrderByInput(entityName) {
107
+ out.block(`enum ${entityName}OrderByInput`, () => {
108
+ let mapping = (0, orderBy_1.getOrderByMapping)(model, entityName);
109
+ for (let key of mapping.keys()) {
110
+ out.line(key);
111
+ }
112
+ });
113
+ out.line();
114
+ }
115
+ function generateWhereUniqueInput(entityName) {
116
+ out.block(`input ${entityName}WhereUniqueInput`, () => {
117
+ out.line('id: ID!');
118
+ });
119
+ }
120
+ function generateWhereInput(name, object) {
121
+ out.block(`input ${name}WhereInput`, () => {
122
+ generatePropsFilters(object.properties);
123
+ if (object.kind == 'entity') {
124
+ out.line(`AND: [${name}WhereInput!]`);
125
+ out.line(`OR: [${name}WhereInput!]`);
126
+ }
127
+ });
128
+ out.line();
129
+ }
130
+ function generatePropsFilters(props) {
131
+ for (let key in props) {
132
+ let prop = props[key];
133
+ switch (prop.type.kind) {
134
+ case 'scalar':
135
+ case 'enum':
136
+ generateScalarFilters(key, prop.type.name);
137
+ break;
138
+ case 'list':
139
+ if (prop.type.item.type.kind == 'scalar' || prop.type.item.type.kind == 'enum') {
140
+ let item = prop.type.item.type.name;
141
+ out.line(`${key}_containsAll: [${item}!]`);
142
+ out.line(`${key}_containsAny: [${item}!]`);
143
+ out.line(`${key}_containsNone: [${item}!]`);
144
+ }
145
+ break;
146
+ case 'object':
147
+ if (hasFilters(getObject(prop.type.name))) {
148
+ out.line(`${key}: ${prop.type.name}WhereInput`);
149
+ }
150
+ break;
151
+ case 'union':
152
+ out.line(`${key}: ${prop.type.name}WhereInput`);
153
+ break;
154
+ case 'fk':
155
+ out.line(`${key}: ${prop.type.foreignEntity}WhereInput`);
156
+ break;
157
+ case 'list-relation':
158
+ out.line(`${key}_every: ${prop.type.entity}WhereInput`);
159
+ out.line(`${key}_some: ${prop.type.entity}WhereInput`);
160
+ out.line(`${key}_none: ${prop.type.entity}WhereInput`);
161
+ break;
162
+ }
163
+ }
164
+ }
165
+ function hasFilters(obj) {
166
+ for (let key in obj.properties) {
167
+ let propType = obj.properties[key].type;
168
+ switch (propType.kind) {
169
+ case 'scalar':
170
+ case 'enum':
171
+ case 'union':
172
+ return true;
173
+ case 'object':
174
+ if (hasFilters(getObject(propType.name))) {
175
+ return true;
176
+ }
177
+ }
178
+ }
179
+ return false;
180
+ }
181
+ function getObject(name) {
182
+ let obj = model[name];
183
+ (0, assert_1.default)(obj.kind == 'object');
184
+ return obj;
185
+ }
186
+ function generateUnionWhereInput(name, union) {
187
+ out.block(`input ${name}WhereInput`, () => {
188
+ // TODO: unify and use enum
189
+ out.line('isTypeOf_eq: String');
190
+ out.line('isTypeOf_not_eq: String');
191
+ out.line('isTypeOf_in: [String!]');
192
+ out.line('isTypeOf_not_in: [String!]');
193
+ let props = {};
194
+ union.variants.forEach(variant => {
195
+ let obj = getObject(variant);
196
+ Object.assign(props, obj.properties);
197
+ });
198
+ generatePropsFilters(props);
199
+ });
200
+ }
201
+ function generateScalarFilters(fieldName, graphqlType) {
202
+ out.line(`${fieldName}_eq: ${graphqlType}`);
203
+ out.line(`${fieldName}_not_eq: ${graphqlType}`);
204
+ switch (graphqlType) {
205
+ case 'ID':
206
+ case 'String':
207
+ case 'Int':
208
+ case 'Float':
209
+ case 'DateTime':
210
+ case 'BigInt':
211
+ out.line(`${fieldName}_gt: ${graphqlType}`);
212
+ out.line(`${fieldName}_gte: ${graphqlType}`);
213
+ out.line(`${fieldName}_lt: ${graphqlType}`);
214
+ out.line(`${fieldName}_lte: ${graphqlType}`);
215
+ out.line(`${fieldName}_in: [${graphqlType}!]`);
216
+ out.line(`${fieldName}_not_in: [${graphqlType}!]`);
217
+ break;
218
+ }
219
+ if (graphqlType == 'String' || graphqlType == 'ID') {
220
+ out.line(`${fieldName}_contains: ${graphqlType}`);
221
+ out.line(`${fieldName}_not_contains: ${graphqlType}`);
222
+ out.line(`${fieldName}_startsWith: ${graphqlType}`);
223
+ out.line(`${fieldName}_not_startsWith: ${graphqlType}`);
224
+ out.line(`${fieldName}_endsWith: ${graphqlType}`);
225
+ out.line(`${fieldName}_not_endsWith: ${graphqlType}`);
226
+ }
227
+ if (model[graphqlType]?.kind == 'enum') {
228
+ out.line(`${fieldName}_in: [${graphqlType}!]`);
229
+ out.line(`${fieldName}_not_in: [${graphqlType}!]`);
230
+ }
231
+ }
232
+ function generateUnionType(name, union) {
233
+ generateDescription(union.description);
234
+ out.line(`union ${name} = ${union.variants.join(' | ')}`);
235
+ out.line();
236
+ }
237
+ function generateEnumType(name, e) {
238
+ generateDescription(e.description);
239
+ out.block(`enum ${name}`, () => {
240
+ for (let key in e.values) {
241
+ out.line(key);
242
+ }
243
+ });
244
+ }
245
+ function generatePageInfoType() {
246
+ out.block(`type PageInfo`, () => {
247
+ out.line('hasNextPage: Boolean!');
248
+ out.line('hasPreviousPage: Boolean!');
249
+ out.line('startCursor: String!');
250
+ out.line('endCursor: String!');
251
+ });
252
+ out.line();
253
+ }
254
+ function generateEntityConnection(name) {
255
+ out.block(`type ${name}Edge`, () => {
256
+ out.line(`node: ${name}!`);
257
+ out.line(`cursor: String!`);
258
+ });
259
+ out.line();
260
+ out.block(`type ${(0, util_1.pluralize)(name)}Connection`, () => {
261
+ out.line(`edges: [${name}Edge!]!`);
262
+ out.line(`pageInfo: PageInfo!`);
263
+ out.line(`totalCount: Int!`);
264
+ });
265
+ out.line();
266
+ }
267
+ function generateFtsTypes(name, query) {
268
+ let itemType = (0, util_1.upperCaseFirst)(name) + '_Item';
269
+ out.line(`union ${itemType} = ${query.sources.map(s => s.entity).join(' | ')}`);
270
+ out.line();
271
+ out.block(`type ${(0, util_1.upperCaseFirst)(name)}Output`, () => {
272
+ out.line(`item: ${itemType}!`);
273
+ out.line(`rank: Float!`);
274
+ out.line(`highlight: String!`);
275
+ });
276
+ out.line();
277
+ }
278
+ function generateFtsQuery(name, query) {
279
+ let where = query.sources.map(src => {
280
+ return `where${src.entity}: ${src.entity}WhereInput`;
281
+ });
282
+ out.line(`${name}(text: String! ${where.join(' ')} limit: Int offset: Int): [${(0, util_1.upperCaseFirst)(name)}Output!]!`);
283
+ }
284
+ function generateDescription(description) {
285
+ if (description) {
286
+ out.line((0, graphql_1.print)({
287
+ kind: 'StringValue',
288
+ value: description
289
+ }));
290
+ }
291
+ }
292
+ return out.toString();
293
+ }
294
+ exports.generateOpenCrudQueries = generateOpenCrudQueries;
295
+ function buildServerSchema(model) {
296
+ let scalars = scalars_1.scalars_list.map(name => 'scalar ' + name).join('\n');
297
+ let queries = generateOpenCrudQueries(model);
298
+ return (0, apollo_server_core_1.gql)(scalars + '\n\n' + queries);
299
+ }
300
+ exports.buildServerSchema = buildServerSchema;
301
+ //# sourceMappingURL=opencrud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencrud.js","sourceRoot":"","sources":["../../src/gql/opencrud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DocumentNode, GraphQLSchema } from "graphql";
2
+ import { Model } from "../model";
3
+ export declare function buildSchema(doc: DocumentNode): GraphQLSchema;
4
+ export declare function buildModel(schema: GraphQLSchema): Model;
@@ -0,0 +1,271 @@
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.buildModel = exports.buildSchema = void 0;
7
+ const apollo_server_core_1 = require("apollo-server-core");
8
+ const assert_1 = __importDefault(require("assert"));
9
+ const graphql_1 = require("graphql");
10
+ const model_tools_1 = require("../model.tools");
11
+ const scalars_1 = require("../scalars");
12
+ const baseSchema = (0, graphql_1.buildASTSchema)((0, apollo_server_core_1.gql)(`
13
+ directive @entity on OBJECT
14
+ directive @derivedFrom(field: String!) on FIELD_DEFINITION
15
+ directive @unique on FIELD_DEFINITION
16
+ directive @fulltext(query: String!) on FIELD_DEFINITION
17
+ directive @variant on OBJECT # legacy
18
+ directive @jsonField on OBJECT # legacy
19
+ ${scalars_1.scalars_list.map(name => 'scalar ' + name).join('\n')}
20
+ `));
21
+ function buildSchema(doc) {
22
+ return (0, graphql_1.extendSchema)(baseSchema, doc);
23
+ }
24
+ exports.buildSchema = buildSchema;
25
+ function buildModel(schema) {
26
+ let types = schema.getTypeMap();
27
+ let model = {};
28
+ for (let key in types) {
29
+ let type = types[key];
30
+ if (isEntityType(type)) {
31
+ addEntityOrJsonObjectOrInterface(model, type);
32
+ }
33
+ }
34
+ (0, model_tools_1.validateModel)(model);
35
+ return model;
36
+ }
37
+ exports.buildModel = buildModel;
38
+ function isEntityType(type) {
39
+ return type instanceof graphql_1.GraphQLObjectType && !!type.astNode?.directives?.some(d => d.name.value == 'entity');
40
+ }
41
+ function addEntityOrJsonObjectOrInterface(model, type) {
42
+ if (model[type.name])
43
+ return;
44
+ let kind = isEntityType(type)
45
+ ? 'entity'
46
+ : type instanceof graphql_1.GraphQLInterfaceType ? 'interface' : 'object';
47
+ let properties = {};
48
+ let interfaces = [];
49
+ let description = type.description || undefined;
50
+ if (kind != 'interface') {
51
+ model[type.name] = { kind, properties, interfaces, description };
52
+ }
53
+ else {
54
+ model[type.name] = { kind, properties, description };
55
+ }
56
+ let fields = type.getFields();
57
+ if (kind == 'entity') {
58
+ if (fields.id == null) {
59
+ properties.id = {
60
+ type: { kind: 'scalar', name: 'ID' },
61
+ nullable: false
62
+ };
63
+ }
64
+ else {
65
+ let correctIdType = fields.id.type instanceof graphql_1.GraphQLNonNull
66
+ && fields.id.type.ofType instanceof graphql_1.GraphQLScalarType
67
+ && fields.id.type.ofType.name === 'ID';
68
+ if (!correctIdType) {
69
+ throw unsupportedFieldTypeError(type.name, 'id');
70
+ }
71
+ }
72
+ }
73
+ for (let key in fields) {
74
+ let f = fields[key];
75
+ let fieldType = f.type;
76
+ let nullable = true;
77
+ let description = f.description || undefined;
78
+ handleFulltextDirective(model, type, f);
79
+ if (fieldType instanceof graphql_1.GraphQLNonNull) {
80
+ nullable = false;
81
+ fieldType = fieldType.ofType;
82
+ }
83
+ let list = unwrapList(fieldType);
84
+ fieldType = list.item;
85
+ if (fieldType instanceof graphql_1.GraphQLScalarType) {
86
+ properties[key] = {
87
+ type: wrapWithList(list.nulls, {
88
+ kind: 'scalar',
89
+ name: fieldType.name
90
+ }),
91
+ nullable,
92
+ description
93
+ };
94
+ }
95
+ else if (fieldType instanceof graphql_1.GraphQLEnumType) {
96
+ addEnum(model, fieldType);
97
+ properties[key] = {
98
+ type: wrapWithList(list.nulls, {
99
+ kind: 'enum',
100
+ name: fieldType.name
101
+ }),
102
+ nullable,
103
+ description
104
+ };
105
+ }
106
+ else if (fieldType instanceof graphql_1.GraphQLUnionType) {
107
+ addUnion(model, fieldType);
108
+ properties[key] = {
109
+ type: wrapWithList(list.nulls, {
110
+ kind: 'union',
111
+ name: fieldType.name
112
+ }),
113
+ nullable,
114
+ description
115
+ };
116
+ }
117
+ else if (fieldType instanceof graphql_1.GraphQLObjectType) {
118
+ if (isEntityType(fieldType)) {
119
+ switch (list.nulls.length) {
120
+ case 0:
121
+ properties[key] = {
122
+ type: {
123
+ kind: 'fk',
124
+ foreignEntity: fieldType.name
125
+ },
126
+ nullable,
127
+ description
128
+ };
129
+ break;
130
+ case 1:
131
+ let derivedFrom = f.astNode?.directives?.find(d => d.name.value == 'derivedFrom');
132
+ if (derivedFrom == null) {
133
+ throw new Error(`@derivedFrom directive is required on ${type.name}.${key} declaration`);
134
+ }
135
+ let derivedFromValueNode = derivedFrom.arguments?.[0].value;
136
+ (0, assert_1.default)(derivedFromValueNode != null);
137
+ (0, assert_1.default)(derivedFromValueNode.kind == 'StringValue');
138
+ properties[key] = {
139
+ type: {
140
+ kind: 'list-relation',
141
+ entity: fieldType.name,
142
+ field: derivedFromValueNode.value
143
+ },
144
+ nullable: false,
145
+ description
146
+ };
147
+ break;
148
+ default:
149
+ throw unsupportedFieldTypeError(type.name, key);
150
+ }
151
+ }
152
+ else {
153
+ addEntityOrJsonObjectOrInterface(model, fieldType);
154
+ properties[key] = {
155
+ type: wrapWithList(list.nulls, {
156
+ kind: 'object',
157
+ name: fieldType.name
158
+ }),
159
+ nullable,
160
+ description
161
+ };
162
+ }
163
+ }
164
+ else {
165
+ throw unsupportedFieldTypeError(type.name, key);
166
+ }
167
+ }
168
+ if (kind != 'interface') {
169
+ type.getInterfaces().forEach(i => {
170
+ addEntityOrJsonObjectOrInterface(model, i);
171
+ interfaces.push(i.name);
172
+ });
173
+ }
174
+ }
175
+ function addUnion(model, type) {
176
+ if (model[type.name])
177
+ return;
178
+ let variants = [];
179
+ model[type.name] = {
180
+ kind: 'union',
181
+ variants,
182
+ description: type.description || undefined
183
+ };
184
+ type.getTypes().forEach(obj => {
185
+ if (isEntityType(obj)) {
186
+ throw new Error(`union ${type.name} has entity ${obj.name} as a variant. Entities in union types are not supported`);
187
+ }
188
+ addEntityOrJsonObjectOrInterface(model, obj);
189
+ variants.push(obj.name);
190
+ });
191
+ }
192
+ function addEnum(model, type) {
193
+ if (model[type.name])
194
+ return;
195
+ let values = {};
196
+ model[type.name] = {
197
+ kind: 'enum',
198
+ values,
199
+ description: type.description || undefined
200
+ };
201
+ type.getValues().forEach(item => {
202
+ values[item.name] = {};
203
+ });
204
+ }
205
+ function handleFulltextDirective(model, object, f) {
206
+ f.astNode?.directives?.forEach(d => {
207
+ if (d.name.value != 'fulltext')
208
+ return;
209
+ if (!isEntityType(object) || !isStringField(f)) {
210
+ throw new Error(`@fulltext directive can be only applied to String entity fields, but was applied to ${object.name}.${f.name}`);
211
+ }
212
+ let queryArgument = d.arguments?.find(arg => arg.name.value == 'query');
213
+ (0, assert_1.default)(queryArgument != null);
214
+ (0, assert_1.default)(queryArgument.value.kind == 'StringValue');
215
+ let queryName = queryArgument.value.value;
216
+ let query = model[queryName];
217
+ if (query == null) {
218
+ query = model[queryName] = {
219
+ kind: 'fts',
220
+ sources: []
221
+ };
222
+ }
223
+ (0, assert_1.default)(query.kind == 'fts');
224
+ let src = query.sources.find(s => s.entity == object.name);
225
+ if (src == null) {
226
+ query.sources.push({
227
+ entity: object.name,
228
+ fields: [f.name]
229
+ });
230
+ }
231
+ else {
232
+ src.fields.push(f.name);
233
+ }
234
+ });
235
+ }
236
+ function isStringField(f) {
237
+ let type = f.type;
238
+ if (type instanceof graphql_1.GraphQLNonNull) {
239
+ type = type.ofType;
240
+ }
241
+ return type instanceof graphql_1.GraphQLScalarType && type.name == 'String';
242
+ }
243
+ function unwrapList(type) {
244
+ let nulls = [];
245
+ while (type instanceof graphql_1.GraphQLList) {
246
+ type = type.ofType;
247
+ if (type instanceof graphql_1.GraphQLNonNull) {
248
+ nulls.push(false);
249
+ type = type.ofType;
250
+ }
251
+ else {
252
+ nulls.push(true);
253
+ }
254
+ }
255
+ return { item: type, nulls };
256
+ }
257
+ function wrapWithList(nulls, dataType) {
258
+ if (nulls.length == 0)
259
+ return dataType;
260
+ return {
261
+ kind: 'list',
262
+ item: {
263
+ type: wrapWithList(nulls.slice(1), dataType),
264
+ nullable: nulls[0]
265
+ }
266
+ };
267
+ }
268
+ function unsupportedFieldTypeError(type, field) {
269
+ return new Error(`Property ${type}.${field} has unsupported type`);
270
+ }
271
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/gql/schema.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { PoolConfig } from "pg";
3
+ export declare function readDbConfig(): PoolConfig;