@webda/graphql 3.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 +3 -0
- package/lib/graphql.d.ts +101 -0
- package/lib/graphql.js +399 -0
- package/lib/graphql.js.map +1 -0
- package/package.json +72 -0
- package/webda.module.json +87 -0
package/README.md
ADDED
package/lib/graphql.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Application, CoreModelDefinition, DeepPartial, DomainServiceParameters, ModelGraph, Service, ServiceParameters, WebContext } from "@webda/core";
|
|
2
|
+
import { FieldNode, GraphQLSchema } from "graphql";
|
|
3
|
+
import { Handler } from "graphql-http";
|
|
4
|
+
import { JSONSchema7 } from "json-schema";
|
|
5
|
+
export interface GraphQLContextExtension {
|
|
6
|
+
/**
|
|
7
|
+
* Get the current count of operation for this request
|
|
8
|
+
*/
|
|
9
|
+
count?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parameters for the GraphQL service
|
|
13
|
+
*/
|
|
14
|
+
export declare class GraphQLParameters extends DomainServiceParameters {
|
|
15
|
+
/**
|
|
16
|
+
* Max number of requests allowed within a graphql query or mutation
|
|
17
|
+
*
|
|
18
|
+
* @default 10
|
|
19
|
+
*/
|
|
20
|
+
maxOperationsPerRequest: number;
|
|
21
|
+
/**
|
|
22
|
+
* User model to expose
|
|
23
|
+
* @default User
|
|
24
|
+
*/
|
|
25
|
+
userModel: string;
|
|
26
|
+
/**
|
|
27
|
+
* Expose current user in the context with me
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
exposeMe: boolean;
|
|
31
|
+
constructor(params: any);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Implement a GraphQL service
|
|
35
|
+
*
|
|
36
|
+
* It will expose all your exposed models as GraphQL types
|
|
37
|
+
* Dynamically generate the schema
|
|
38
|
+
*
|
|
39
|
+
* @WebdaModda
|
|
40
|
+
*/
|
|
41
|
+
export declare class GraphQLService<T extends GraphQLParameters = GraphQLParameters> extends Service<T> {
|
|
42
|
+
schema: GraphQLSchema;
|
|
43
|
+
handler: Handler;
|
|
44
|
+
modelsMap: {};
|
|
45
|
+
app: Application;
|
|
46
|
+
loadParameters(params: DeepPartial<T>): ServiceParameters;
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @param prop
|
|
50
|
+
* @param definitions
|
|
51
|
+
* @returns
|
|
52
|
+
*/
|
|
53
|
+
getJsonSchemaDefinition(prop: JSONSchema7, definitions: any): JSONSchema7;
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @param schema
|
|
57
|
+
* @param defaultName
|
|
58
|
+
* @returns
|
|
59
|
+
*/
|
|
60
|
+
getGraphQLSchemaFromSchema(schema: JSONSchema7, defaultName: string): any;
|
|
61
|
+
/**
|
|
62
|
+
* Add the GraphQL schema results
|
|
63
|
+
* @param type
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
getGraphQLQueryResult(type: any): any;
|
|
67
|
+
/**
|
|
68
|
+
*
|
|
69
|
+
* @param schema
|
|
70
|
+
* @param defaultName
|
|
71
|
+
* @param webdaGraph
|
|
72
|
+
* @returns
|
|
73
|
+
*/
|
|
74
|
+
getGraphQLFieldsFromSchema(schema: JSONSchema7, defaultName: string, webdaGraph?: ModelGraph): any;
|
|
75
|
+
loadModelInstance(knownFieldsOrId: string | {
|
|
76
|
+
uuid: string;
|
|
77
|
+
[key: string]: any;
|
|
78
|
+
}, model: CoreModelDefinition, context: WebContext, info?: FieldNode): Promise<import("@webda/core/lib/models/coremodel").CoreModel | {
|
|
79
|
+
[key: string]: any;
|
|
80
|
+
uuid: string;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Count the number of operations done with graphql
|
|
84
|
+
* @param context
|
|
85
|
+
*/
|
|
86
|
+
countOperation(context: WebContext, increment?: number): void;
|
|
87
|
+
/**
|
|
88
|
+
* Generate GraphQL schema
|
|
89
|
+
*/
|
|
90
|
+
generateSchema(): void;
|
|
91
|
+
/**
|
|
92
|
+
* @override
|
|
93
|
+
*/
|
|
94
|
+
init(): Promise<this>;
|
|
95
|
+
/**
|
|
96
|
+
* Endpoint for the GraphQL schema
|
|
97
|
+
* @param ctx
|
|
98
|
+
* @returns
|
|
99
|
+
*/
|
|
100
|
+
endpoint(ctx: WebContext<any>): Promise<void>;
|
|
101
|
+
}
|
package/lib/graphql.js
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { DomainServiceParameters, Route, Service } from "@webda/core";
|
|
8
|
+
import { GraphQLBoolean, GraphQLError, GraphQLInt, GraphQLList, GraphQLObjectType, GraphQLSchema, GraphQLString, printSchema } from "graphql";
|
|
9
|
+
import { createHandler } from "graphql-http";
|
|
10
|
+
/**
|
|
11
|
+
* Parameters for the GraphQL service
|
|
12
|
+
*/
|
|
13
|
+
export class GraphQLParameters extends DomainServiceParameters {
|
|
14
|
+
constructor(params) {
|
|
15
|
+
super(params);
|
|
16
|
+
this.url ?? (this.url = "/graphql");
|
|
17
|
+
this.maxOperationsPerRequest ?? (this.maxOperationsPerRequest = 10);
|
|
18
|
+
this.userModel ?? (this.userModel = "User");
|
|
19
|
+
this.exposeMe ?? (this.exposeMe = true);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Implement a GraphQL service
|
|
24
|
+
*
|
|
25
|
+
* It will expose all your exposed models as GraphQL types
|
|
26
|
+
* Dynamically generate the schema
|
|
27
|
+
*
|
|
28
|
+
* @WebdaModda
|
|
29
|
+
*/
|
|
30
|
+
export class GraphQLService extends Service {
|
|
31
|
+
loadParameters(params) {
|
|
32
|
+
return new GraphQLParameters(params);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
* @param prop
|
|
37
|
+
* @param definitions
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
getJsonSchemaDefinition(prop, definitions) {
|
|
41
|
+
if (prop.type) {
|
|
42
|
+
if (prop.type === "array" && prop.items["$ref"]) {
|
|
43
|
+
prop.items = this.getJsonSchemaDefinition(prop.items, definitions);
|
|
44
|
+
}
|
|
45
|
+
return prop;
|
|
46
|
+
}
|
|
47
|
+
while (prop && prop.$ref) {
|
|
48
|
+
prop = definitions[decodeURIComponent(prop.$ref.replace("#/definitions/", ""))];
|
|
49
|
+
}
|
|
50
|
+
return prop || { type: "null" };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* @param schema
|
|
55
|
+
* @param defaultName
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
getGraphQLSchemaFromSchema(schema, defaultName) {
|
|
59
|
+
let type;
|
|
60
|
+
if (!schema.type) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
else if (schema.type === "string") {
|
|
64
|
+
type = GraphQLString;
|
|
65
|
+
}
|
|
66
|
+
else if (schema.type === "boolean") {
|
|
67
|
+
type = GraphQLBoolean;
|
|
68
|
+
}
|
|
69
|
+
else if (schema.type === "array") {
|
|
70
|
+
type = new GraphQLList(this.getGraphQLSchemaFromSchema(schema.items, schema.title || defaultName).type);
|
|
71
|
+
}
|
|
72
|
+
else if (schema.type === "integer" || schema.type === "number") {
|
|
73
|
+
type = GraphQLInt;
|
|
74
|
+
}
|
|
75
|
+
else if (schema.type === "null") {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
else if (schema.type === "object") {
|
|
79
|
+
const fields = {};
|
|
80
|
+
for (let i in schema.properties) {
|
|
81
|
+
let res = this.getGraphQLSchemaFromSchema(this.getJsonSchemaDefinition(schema.properties[i], schema.definitions), `${schema.title || defaultName}_${i}`);
|
|
82
|
+
if (!res)
|
|
83
|
+
continue;
|
|
84
|
+
fields[i] = res;
|
|
85
|
+
}
|
|
86
|
+
if (Object.keys(fields).length === 0) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
type = new GraphQLObjectType({
|
|
90
|
+
fields,
|
|
91
|
+
name: schema.title || defaultName
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return { type, description: schema.description };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Add the GraphQL schema results
|
|
98
|
+
* @param type
|
|
99
|
+
* @returns
|
|
100
|
+
*/
|
|
101
|
+
getGraphQLQueryResult(type) {
|
|
102
|
+
var _a;
|
|
103
|
+
const name = `${type.name}QueryResult`;
|
|
104
|
+
(_a = this.modelsMap)[name] ?? (_a[name] = new GraphQLObjectType({
|
|
105
|
+
fields: {
|
|
106
|
+
results: {
|
|
107
|
+
type: new GraphQLList(type)
|
|
108
|
+
},
|
|
109
|
+
continuationToken: {
|
|
110
|
+
type: GraphQLString
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
name
|
|
114
|
+
}));
|
|
115
|
+
return this.modelsMap[name];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
*
|
|
119
|
+
* @param schema
|
|
120
|
+
* @param defaultName
|
|
121
|
+
* @param webdaGraph
|
|
122
|
+
* @returns
|
|
123
|
+
*/
|
|
124
|
+
getGraphQLFieldsFromSchema(schema, defaultName, webdaGraph) {
|
|
125
|
+
const fields = {};
|
|
126
|
+
const skipFields = [];
|
|
127
|
+
const attributeFilter = (skip = false) => info => {
|
|
128
|
+
if (!this.modelsMap[info.model] && skip) {
|
|
129
|
+
skipFields.push(info.attribute);
|
|
130
|
+
this.log("INFO", `Skipping field ${info.attribute} as model ${info.model} is not exposed`);
|
|
131
|
+
}
|
|
132
|
+
return this.modelsMap[info.model];
|
|
133
|
+
};
|
|
134
|
+
if (webdaGraph) {
|
|
135
|
+
// In graphql parent should not be displayed
|
|
136
|
+
if (webdaGraph.parent) {
|
|
137
|
+
fields[webdaGraph.parent.attribute] = {
|
|
138
|
+
type: this.modelsMap[webdaGraph.parent.model],
|
|
139
|
+
resolve: async (source, _args, context, info) => {
|
|
140
|
+
this.countOperation(context);
|
|
141
|
+
// Check permission and model exists
|
|
142
|
+
return this.loadModelInstance(source[webdaGraph.parent.attribute] || "", this.app.getModel(webdaGraph.parent.model), context, info.fieldNodes?.find(node => node.name.value === webdaGraph.parent.attribute));
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// Links should probably not be displayed
|
|
147
|
+
(webdaGraph.links || []).filter(attributeFilter()).forEach(link => {
|
|
148
|
+
if (link.type === "LINK") {
|
|
149
|
+
fields[link.attribute] = {
|
|
150
|
+
type: this.modelsMap[link.model],
|
|
151
|
+
resolve: async (source, _, context, info) => {
|
|
152
|
+
// Check permission and model exists
|
|
153
|
+
return this.loadModelInstance(source[link.attribute] || "", this.app.getModel(link.model), context, info.fieldNodes.find(node => node.name.value === link.attribute));
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
fields[link.attribute] = {
|
|
159
|
+
type: new GraphQLList(this.modelsMap[link.model]),
|
|
160
|
+
args: {
|
|
161
|
+
filter: {
|
|
162
|
+
type: GraphQLString
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
resolve: async (source, args, context, info) => {
|
|
166
|
+
return Promise.all(source[link.attribute].map(i => this.loadModelInstance(i, source[link.attribute].model, context, info.fieldNodes.find(node => node.name.value === link.attribute))));
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
(webdaGraph.maps || []).filter(attributeFilter()).forEach(map => {
|
|
172
|
+
fields[map.attribute] = {
|
|
173
|
+
type: new GraphQLList(this.modelsMap[map.model]),
|
|
174
|
+
args: {
|
|
175
|
+
filter: {
|
|
176
|
+
type: GraphQLString
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
resolve: async (source, args, context, info) => {
|
|
180
|
+
let modelDefinition = this.app.getModel(map.model);
|
|
181
|
+
return Promise.all(source[map.attribute].map(i => this.loadModelInstance(i, modelDefinition, context, info.fieldNodes.find(node => node.name.value === map.attribute))));
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
});
|
|
185
|
+
(webdaGraph.queries || []).filter(attributeFilter(true)).forEach(query => {
|
|
186
|
+
fields[query.attribute] = {
|
|
187
|
+
type: this.getGraphQLQueryResult(this.modelsMap[query.model]),
|
|
188
|
+
args: {
|
|
189
|
+
query: {
|
|
190
|
+
type: GraphQLString
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
resolve: async (source, args, context, info) => {
|
|
194
|
+
let res = await source[query.attribute].query(args.query, context);
|
|
195
|
+
this.countOperation(context, res.results.length);
|
|
196
|
+
return res;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
for (let i in schema.properties) {
|
|
202
|
+
// Was initiated by the known graph
|
|
203
|
+
if (fields[i] || skipFields.includes(i)) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
let prop = this.getGraphQLSchemaFromSchema(this.getJsonSchemaDefinition(schema.properties[i], schema.definitions), `${defaultName}_${i}`);
|
|
207
|
+
if (!prop) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
fields[i] = prop;
|
|
211
|
+
}
|
|
212
|
+
return fields;
|
|
213
|
+
}
|
|
214
|
+
async loadModelInstance(knownFieldsOrId, model, context, info) {
|
|
215
|
+
let res = typeof knownFieldsOrId === "string" ? { uuid: knownFieldsOrId } : knownFieldsOrId;
|
|
216
|
+
let operation =
|
|
217
|
+
// Check if we have a valid selection set
|
|
218
|
+
info === undefined ||
|
|
219
|
+
info.selectionSet === undefined ||
|
|
220
|
+
info.selectionSet.selections === undefined ||
|
|
221
|
+
info.selectionSet.selections.filter(node => node.kind === "Field").length === 0;
|
|
222
|
+
// Check if know all fields already
|
|
223
|
+
for (let field of (info?.selectionSet?.selections || []).filter(node => node.kind === "Field")) {
|
|
224
|
+
if (res[field.name.value] === undefined) {
|
|
225
|
+
operation = true;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// We already know the whole answer so no more request needed
|
|
230
|
+
if (!operation) {
|
|
231
|
+
return res;
|
|
232
|
+
}
|
|
233
|
+
// Count the operation then and retrieve the model
|
|
234
|
+
this.countOperation(context);
|
|
235
|
+
let modelInstance = await model.store().get(res.uuid || "");
|
|
236
|
+
if (!modelInstance) {
|
|
237
|
+
throw new GraphQLError("Object not found", {
|
|
238
|
+
extensions: {
|
|
239
|
+
code: "NOT_FOUND"
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if ((await modelInstance.canAct(context, "get")) !== true) {
|
|
244
|
+
throw new GraphQLError("Permission denied", {
|
|
245
|
+
extensions: {
|
|
246
|
+
code: "PERMISSION_DENIED"
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return modelInstance;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Count the number of operations done with graphql
|
|
254
|
+
* @param context
|
|
255
|
+
*/
|
|
256
|
+
countOperation(context, increment = 1) {
|
|
257
|
+
let ext = context.getExtension("graphql");
|
|
258
|
+
if (ext.count === this.parameters.maxOperationsPerRequest) {
|
|
259
|
+
throw new GraphQLError("Too many operations", {
|
|
260
|
+
extensions: {
|
|
261
|
+
code: "TOO_MANY_OPERATIONS"
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
ext.count += increment;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Generate GraphQL schema
|
|
269
|
+
*/
|
|
270
|
+
generateSchema() {
|
|
271
|
+
const rootFields = {
|
|
272
|
+
ping: {
|
|
273
|
+
type: GraphQLString,
|
|
274
|
+
resolve: async () => `pong:${Date.now()}`
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
const models = this.app.getModels();
|
|
278
|
+
const graph = this.app.getGraph();
|
|
279
|
+
const roots = this.app.getRootExposedModels();
|
|
280
|
+
this.modelsMap = {};
|
|
281
|
+
for (let i in models) {
|
|
282
|
+
const model = models[i];
|
|
283
|
+
// Not exposed
|
|
284
|
+
if (!model.Expose) {
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
const schema = model.getSchema();
|
|
288
|
+
if (!schema) {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
let name = this.app.getShortId(i).replace("/", "_");
|
|
292
|
+
this.log("INFO", "Add GraphQL type", name);
|
|
293
|
+
this.modelsMap[i] = new GraphQLObjectType({
|
|
294
|
+
fields: () => this.getGraphQLFieldsFromSchema(schema, name, graph[i]),
|
|
295
|
+
name
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
for (let i of roots) {
|
|
299
|
+
this.log("INFO", "Add GraphQL root query", i);
|
|
300
|
+
const model = models[i];
|
|
301
|
+
const schema = model?.getSchema();
|
|
302
|
+
if (!schema) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
rootFields[this.app.getModelPlural(i).split("/").pop()] = {
|
|
306
|
+
type: this.getGraphQLQueryResult(this.modelsMap[i]),
|
|
307
|
+
args: {
|
|
308
|
+
query: {
|
|
309
|
+
type: GraphQLString
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
resolve: async (_, args, context) => {
|
|
313
|
+
return await model.query(args.query || "", true, context);
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
rootFields[i.split("/")[1]] = {
|
|
317
|
+
type: this.modelsMap[i],
|
|
318
|
+
args: {
|
|
319
|
+
[model.getUuidField()]: {
|
|
320
|
+
type: GraphQLString
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
resolve: async (_, args, context, info) => {
|
|
324
|
+
this.countOperation(context);
|
|
325
|
+
return this.loadModelInstance(args.uuid || "", model, context);
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
// Expose the current user under me
|
|
330
|
+
if (this.parameters.exposeMe) {
|
|
331
|
+
const userGraph = this.app.completeNamespace(this.parameters.userModel);
|
|
332
|
+
let model = this.app.getModel(this.parameters.userModel);
|
|
333
|
+
if (this.modelsMap[userGraph] && model.Expose && model.Expose.restrict.get !== true) {
|
|
334
|
+
rootFields.Me = {
|
|
335
|
+
type: this.modelsMap[userGraph],
|
|
336
|
+
resolve: async (_, _args, context) => {
|
|
337
|
+
this.countOperation(context);
|
|
338
|
+
return context.getCurrentUser();
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
this.log("WARN", "Cannot expose me, user model is not exposed or get is restricted or type is not unavailable");
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
this.schema = new GraphQLSchema({
|
|
347
|
+
query: new GraphQLObjectType({
|
|
348
|
+
name: "Query",
|
|
349
|
+
fields: rootFields
|
|
350
|
+
}),
|
|
351
|
+
types: Object.values(this.modelsMap),
|
|
352
|
+
mutation: null
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* @override
|
|
357
|
+
*/
|
|
358
|
+
async init() {
|
|
359
|
+
await super.init();
|
|
360
|
+
this.app = this.getWebda().getApplication();
|
|
361
|
+
this.generateSchema();
|
|
362
|
+
// Generate GraphQL schema
|
|
363
|
+
this.handler = createHandler({
|
|
364
|
+
schema: this.schema,
|
|
365
|
+
context: (req, _) => {
|
|
366
|
+
return req.context;
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
return this;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Endpoint for the GraphQL schema
|
|
373
|
+
* @param ctx
|
|
374
|
+
* @returns
|
|
375
|
+
*/
|
|
376
|
+
async endpoint(ctx) {
|
|
377
|
+
const httpContext = ctx.getHttpContext();
|
|
378
|
+
if (httpContext.getMethod() === "GET") {
|
|
379
|
+
ctx.writeHead(200, { "Content-Type": "application/graphql" });
|
|
380
|
+
ctx.write(printSchema(this.schema));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
ctx.setExtension("graphql", { count: 0 });
|
|
384
|
+
const [body, init] = await this.handler({
|
|
385
|
+
url: httpContext.getUrl(),
|
|
386
|
+
method: httpContext.getMethod(),
|
|
387
|
+
headers: httpContext.getHeaders(),
|
|
388
|
+
body: await ctx.getInput(),
|
|
389
|
+
raw: ctx,
|
|
390
|
+
context: ctx
|
|
391
|
+
});
|
|
392
|
+
ctx.writeHead(init.status, init.headers);
|
|
393
|
+
ctx.write(body);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
__decorate([
|
|
397
|
+
Route(".", ["POST", "GET"])
|
|
398
|
+
], GraphQLService.prototype, "endpoint", null);
|
|
399
|
+
//# sourceMappingURL=graphql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webda/graphql",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "GraphQL endpoint for your Webda Application",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "webda build",
|
|
9
|
+
"pretest": "npm run build",
|
|
10
|
+
"test": "c8 mocha --recursive --exit --timeout=100000 -r ../../node_modules/ts-node/register src/**/*.spec.ts",
|
|
11
|
+
"test:debug": "mocha --recursive --exit --timeout=100000 src/**/*.spec.ts src/*.spec.ts",
|
|
12
|
+
"new-model": "webda init webda:model",
|
|
13
|
+
"new-service": "webda init webda:service",
|
|
14
|
+
"lint": "lerna run lint --parallel",
|
|
15
|
+
"lint:fix": "lerna run lint:fix --parallel"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"webda-module"
|
|
19
|
+
],
|
|
20
|
+
"files": [
|
|
21
|
+
"lib",
|
|
22
|
+
"webda.module.json",
|
|
23
|
+
"package.json"
|
|
24
|
+
],
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@types/node": "^18.15.3",
|
|
27
|
+
"@webda/core": "^3.0.0",
|
|
28
|
+
"graphql": "^16.6.0",
|
|
29
|
+
"graphql-http": "^1.16.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^18.15.3",
|
|
33
|
+
"@webda/shell": "^2.4.3",
|
|
34
|
+
"c8": "^7.13.0",
|
|
35
|
+
"glob": "^10.0.0",
|
|
36
|
+
"js-beautify": "^1.14.7",
|
|
37
|
+
"mocha": "^10.2.0",
|
|
38
|
+
"prettier": "^2.8.4",
|
|
39
|
+
"source-map-support": "^0.5.21",
|
|
40
|
+
"ts-node": "^10.9.1",
|
|
41
|
+
"typescript": "^5.0.2"
|
|
42
|
+
},
|
|
43
|
+
"c8": {
|
|
44
|
+
"extends": "@istanbuljs/nyc-config-typescript",
|
|
45
|
+
"report-dir": "./reports",
|
|
46
|
+
"reporter": [
|
|
47
|
+
"html",
|
|
48
|
+
"lcov",
|
|
49
|
+
"json",
|
|
50
|
+
"text"
|
|
51
|
+
],
|
|
52
|
+
"exclude": [
|
|
53
|
+
"**/*.spec.ts",
|
|
54
|
+
"test/**/*"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"webda": {
|
|
58
|
+
"namespace": "Webda"
|
|
59
|
+
},
|
|
60
|
+
"bugs": {
|
|
61
|
+
"url": "https://github.com/loopingz/webda.io/issues"
|
|
62
|
+
},
|
|
63
|
+
"homepage": "https://github.com/loopingz/webda.io#readme",
|
|
64
|
+
"repository": "git://github.com/loopingz/webda.io.git",
|
|
65
|
+
"license": "MIT",
|
|
66
|
+
"nx": {
|
|
67
|
+
"implicitDependencies": [
|
|
68
|
+
"@webda/core",
|
|
69
|
+
"@webda/shell"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"moddas": {
|
|
3
|
+
"Webda/GraphQLService": "lib/graphql:GraphQLService"
|
|
4
|
+
},
|
|
5
|
+
"beans": {},
|
|
6
|
+
"models": {},
|
|
7
|
+
"deployers": {},
|
|
8
|
+
"schemas": {
|
|
9
|
+
"Webda/GraphQLService": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"type": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "Type of the service"
|
|
15
|
+
},
|
|
16
|
+
"url": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "URL on which to serve the content"
|
|
19
|
+
},
|
|
20
|
+
"operations": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Expose objects as operations too"
|
|
23
|
+
},
|
|
24
|
+
"nameTransfomer": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"enum": [
|
|
27
|
+
"camelCase",
|
|
28
|
+
"lowercase",
|
|
29
|
+
"none"
|
|
30
|
+
],
|
|
31
|
+
"description": "Transform the name of the model to be used in the URL"
|
|
32
|
+
},
|
|
33
|
+
"queryMethod": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"enum": [
|
|
36
|
+
"PUT",
|
|
37
|
+
"GET"
|
|
38
|
+
],
|
|
39
|
+
"description": "Method used for query objects",
|
|
40
|
+
"default": "PUT"
|
|
41
|
+
},
|
|
42
|
+
"models": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"items": {
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"description": "List of models to include\n\nIf model is prefixed with a ! it will be excluded",
|
|
48
|
+
"default": [
|
|
49
|
+
"*"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"maxOperationsPerRequest": {
|
|
53
|
+
"type": "number",
|
|
54
|
+
"description": "Max number of requests allowed within a graphql query or mutation",
|
|
55
|
+
"default": 10
|
|
56
|
+
},
|
|
57
|
+
"userModel": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "User model to expose",
|
|
60
|
+
"default": "User"
|
|
61
|
+
},
|
|
62
|
+
"exposeMe": {
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"description": "Expose current user in the context with me",
|
|
65
|
+
"default": true
|
|
66
|
+
},
|
|
67
|
+
"openapi": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"additionalProperties": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"required": [
|
|
73
|
+
"exposeMe",
|
|
74
|
+
"maxOperationsPerRequest",
|
|
75
|
+
"models",
|
|
76
|
+
"nameTransfomer",
|
|
77
|
+
"operations",
|
|
78
|
+
"queryMethod",
|
|
79
|
+
"type",
|
|
80
|
+
"userModel"
|
|
81
|
+
],
|
|
82
|
+
"description": "Parameters for the GraphQL service",
|
|
83
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
84
|
+
"title": "GraphQLService"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|