@steedos/service-object-graphql 2.5.3-beta.19 → 2.5.3-beta.20
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/package.json +6 -6
- package/package.service.js +127 -162
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-object-graphql",
|
|
3
|
-
"version": "2.5.3-beta.
|
|
3
|
+
"version": "2.5.3-beta.20",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"description": "steedos package",
|
|
16
16
|
"repository": {},
|
|
17
17
|
"license": "MIT",
|
|
18
|
-
"gitHead": "
|
|
18
|
+
"gitHead": "32606d2d07b6e53a4d6c8ba079e6356f5a2dbb75",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@steedos/filters": "2.5.3-beta.
|
|
21
|
-
"@steedos/i18n": "2.5.3-beta.
|
|
22
|
-
"@steedos/objectql": "2.5.3-beta.
|
|
23
|
-
"@steedos/service-object-mixin": "2.5.3-beta.
|
|
20
|
+
"@steedos/filters": "2.5.3-beta.20",
|
|
21
|
+
"@steedos/i18n": "2.5.3-beta.20",
|
|
22
|
+
"@steedos/objectql": "2.5.3-beta.20",
|
|
23
|
+
"@steedos/service-object-mixin": "2.5.3-beta.20",
|
|
24
24
|
"graphql": "^15.8.0",
|
|
25
25
|
"graphql-parse-resolve-info": "^4.12.3",
|
|
26
26
|
"moleculer": "^0.14.25",
|
package/package.service.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* @Author: sunhaolin@hotoa.com
|
|
3
3
|
* @Date: 2023-03-23 15:12:14
|
|
4
|
-
* @LastEditors:
|
|
5
|
-
* @LastEditTime: 2023-06-
|
|
4
|
+
* @LastEditors: baozhoutao@steedos.com
|
|
5
|
+
* @LastEditTime: 2023-06-13 17:57:34
|
|
6
6
|
* @Description:
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -14,7 +14,6 @@ const {
|
|
|
14
14
|
getGraphqlActions,
|
|
15
15
|
getQueryFields
|
|
16
16
|
} = require('./lib');
|
|
17
|
-
const open = require('open');
|
|
18
17
|
|
|
19
18
|
const { formatFiltersToODataQuery } = require("@steedos/filters");
|
|
20
19
|
|
|
@@ -22,6 +21,8 @@ const serviceObjectMixin = require('@steedos/service-object-mixin');
|
|
|
22
21
|
|
|
23
22
|
const { QUERY_DOCS_TOP } = require('./lib/consts');
|
|
24
23
|
|
|
24
|
+
const { Register } = require('@steedos/metadata-registrar')
|
|
25
|
+
|
|
25
26
|
/**
|
|
26
27
|
* @typedef {import('moleculer').Context} Context Moleculer's Context
|
|
27
28
|
*/
|
|
@@ -33,8 +34,6 @@ module.exports = {
|
|
|
33
34
|
globalGraphQLSettings: {}, // service-api 里generateGraphQLSchema使用
|
|
34
35
|
getGraphqlFields: getQueryFields,
|
|
35
36
|
|
|
36
|
-
projectStarted: false,
|
|
37
|
-
|
|
38
37
|
/**
|
|
39
38
|
* Settings
|
|
40
39
|
*/
|
|
@@ -229,70 +228,61 @@ module.exports = {
|
|
|
229
228
|
* Events
|
|
230
229
|
*/
|
|
231
230
|
events: {
|
|
231
|
+
"graphql.schema.changed": {
|
|
232
|
+
params: {},
|
|
233
|
+
async handler(ctx) {
|
|
234
|
+
await this.ChangeGlobalGraphQLSettings()
|
|
235
|
+
}
|
|
236
|
+
},
|
|
232
237
|
// 此事件表示软件包发生变化(包括加载、卸载、对象发生变化),接收到此事件后重新生成graphql schema
|
|
233
238
|
"$packages.changed": {
|
|
234
239
|
params: {},
|
|
235
240
|
async handler(ctx) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
// console.log("Metadata:", ctx.meta);
|
|
239
|
-
// console.log("The called event name:", ctx.eventName);
|
|
240
|
-
|
|
241
|
-
const objGraphqlMap = await this.generateObjGraphqlMap(this.name)
|
|
242
|
-
|
|
243
|
-
let type = []
|
|
244
|
-
let query = []
|
|
245
|
-
let mutation = []
|
|
246
|
-
let resolvers = {}
|
|
247
|
-
let resolversQuery = {}
|
|
248
|
-
let resolversMutation = {}
|
|
249
|
-
|
|
250
|
-
for (const objectName in objGraphqlMap) {
|
|
251
|
-
if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
252
|
-
const gMap = objGraphqlMap[objectName];
|
|
253
|
-
type.push(gMap.type)
|
|
254
|
-
query = query.concat(gMap.query)
|
|
255
|
-
mutation = mutation.concat(gMap.mutation)
|
|
256
|
-
resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
257
|
-
resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
258
|
-
resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
259
|
-
}
|
|
241
|
+
if(broker.nodeID != 'steedos-primary'){
|
|
242
|
+
return ;
|
|
260
243
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
query: query,
|
|
265
|
-
mutation: mutation,
|
|
266
|
-
resolvers: {
|
|
267
|
-
...resolvers,
|
|
268
|
-
Query: resolversQuery,
|
|
269
|
-
Mutation: resolversMutation
|
|
270
|
-
}
|
|
244
|
+
if(this.setTimeoutId){
|
|
245
|
+
clearTimeout(this.setTimeoutId);
|
|
246
|
+
this.setTimeoutId = null;
|
|
271
247
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
248
|
+
this.setTimeoutId = setTimeout(async ()=>{
|
|
249
|
+
// console.log("Payload:", ctx.params);
|
|
250
|
+
// console.log("Sender:", ctx.nodeID);
|
|
251
|
+
// console.log("Metadata:", ctx.meta);
|
|
252
|
+
// console.log("The called event name:", ctx.eventName);
|
|
253
|
+
const objGraphqlMap = await this.generateObjGraphqlMap(this.name)
|
|
254
|
+
let type = []
|
|
255
|
+
let query = []
|
|
256
|
+
let mutation = []
|
|
257
|
+
let resolvers = {}
|
|
258
|
+
let resolversQuery = {}
|
|
259
|
+
let resolversMutation = {}
|
|
260
|
+
|
|
261
|
+
for (const objectName in objGraphqlMap) {
|
|
262
|
+
if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
263
|
+
const gMap = objGraphqlMap[objectName];
|
|
264
|
+
type.push(gMap.type)
|
|
265
|
+
query = query.concat(gMap.query)
|
|
266
|
+
mutation = mutation.concat(gMap.mutation)
|
|
267
|
+
resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
268
|
+
resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
269
|
+
resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
270
|
+
}
|
|
284
271
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
272
|
+
const globalGraphQLSettings = {
|
|
273
|
+
type: type,
|
|
274
|
+
query: query,
|
|
275
|
+
mutation: mutation,
|
|
276
|
+
resolvers: {
|
|
277
|
+
...resolvers,
|
|
278
|
+
Query: resolversQuery,
|
|
279
|
+
Mutation: resolversMutation
|
|
293
280
|
}
|
|
294
281
|
}
|
|
295
|
-
|
|
282
|
+
await Register.add(ctx.broker, {key: 'globalGraphQLSettings', data: globalGraphQLSettings}, {})
|
|
283
|
+
ctx.broker.broadcast("graphql.schema.changed")
|
|
284
|
+
|
|
285
|
+
}, 1000 * 2)
|
|
296
286
|
}
|
|
297
287
|
}
|
|
298
288
|
},
|
|
@@ -301,7 +291,14 @@ module.exports = {
|
|
|
301
291
|
* Methods
|
|
302
292
|
*/
|
|
303
293
|
methods: {
|
|
304
|
-
|
|
294
|
+
async ChangeGlobalGraphQLSettings() {
|
|
295
|
+
const result = await Register.get(this.broker, 'globalGraphQLSettings');
|
|
296
|
+
if(result){
|
|
297
|
+
this.globalGraphQLSettings = result.metadata;
|
|
298
|
+
// 发送事件,通知ApolloService重新加载graphql schema; api 服务和graphql服务在同一个节点上.
|
|
299
|
+
this.broker.broadcastLocal('$services.changed');
|
|
300
|
+
}
|
|
301
|
+
},
|
|
305
302
|
find: {
|
|
306
303
|
async handler(objectName, query, userSession) {
|
|
307
304
|
const obj = this.getObject(objectName)
|
|
@@ -349,82 +346,86 @@ module.exports = {
|
|
|
349
346
|
const objGraphqlMap = {}
|
|
350
347
|
const objectConfigs = await this.broker.call("objects.getAll");
|
|
351
348
|
for (const object of objectConfigs) {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
[
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
349
|
+
try {
|
|
350
|
+
// console.log('===>object.metadata.name: ', object.metadata.name)
|
|
351
|
+
const objectConfig = object.metadata
|
|
352
|
+
const objectName = objectConfig.name
|
|
353
|
+
// 排除 __MONGO_BASE_OBJECT __SQL_BASE_OBJECT
|
|
354
|
+
if (['__MONGO_BASE_OBJECT', '__SQL_BASE_OBJECT'].includes(objectName)) {
|
|
355
|
+
continue
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* objGraphqlMap[objectName] 结构
|
|
359
|
+
{
|
|
360
|
+
type: "",
|
|
361
|
+
resolvers: {
|
|
362
|
+
[objectName]: {
|
|
363
|
+
[`${name}${EXPAND_SUFFIX}`]: {},
|
|
364
|
+
[relatedFieldName]: {},
|
|
365
|
+
[DISPLAY_PREFIX]: {},
|
|
366
|
+
[UI_PREFIX]: {},
|
|
367
|
+
[PERMISSIONS_PREFIX]: {},
|
|
368
|
+
[`${RELATED_PREFIX}_files`]: {},
|
|
369
|
+
[`${RELATED_PREFIX}_tasks`]: {},
|
|
370
|
+
[`${RELATED_PREFIX}_notes`]: {},
|
|
371
|
+
[`${RELATED_PREFIX}_events`]: {},
|
|
372
|
+
[`${RELATED_PREFIX}_audit_records`]: {},
|
|
373
|
+
[`${RELATED_PREFIX}_instances`]: {},
|
|
374
|
+
[`${RELATED_PREFIX}_approvals`]: {}
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
query: [],
|
|
378
|
+
resolversQuery: {
|
|
379
|
+
[objectName]: { action: 'find' },
|
|
380
|
+
[`${objectName}__count`]: { action: 'count' },
|
|
381
|
+
[`${objectName}__findOne`]: { action: 'findOne' }
|
|
382
|
+
},
|
|
383
|
+
mutation: [],
|
|
384
|
+
resolversMutation: {
|
|
385
|
+
[`${objectName}__insert`]: { action: 'insert' },
|
|
386
|
+
[`${objectName}__update`]: { action: 'update' },
|
|
387
|
+
[`${objectName}__delete`]: { action: 'delete' }
|
|
377
388
|
}
|
|
378
|
-
},
|
|
379
|
-
query: [],
|
|
380
|
-
resolversQuery: {
|
|
381
|
-
[objectName]: { action: 'find' },
|
|
382
|
-
[`${objectName}__count`]: { action: 'count' },
|
|
383
|
-
[`${objectName}__findOne`]: { action: 'findOne' }
|
|
384
|
-
},
|
|
385
|
-
mutation: [],
|
|
386
|
-
resolversMutation: {
|
|
387
|
-
[`${objectName}__insert`]: { action: 'insert' },
|
|
388
|
-
[`${objectName}__update`]: { action: 'update' },
|
|
389
|
-
[`${objectName}__delete`]: { action: 'delete' }
|
|
390
389
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
const gMap = {}
|
|
390
|
+
*/
|
|
391
|
+
const gMap = {}
|
|
394
392
|
|
|
395
|
-
|
|
393
|
+
const typeAndResolves = await generateSettingsGraphql(objectConfig, graphqlServiceName)
|
|
396
394
|
|
|
397
|
-
|
|
398
|
-
|
|
395
|
+
gMap.type = typeAndResolves.type
|
|
396
|
+
gMap.resolvers = typeAndResolves.resolvers
|
|
399
397
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
398
|
+
if (objectName == 'users') {
|
|
399
|
+
objGraphqlMap[objectName] = gMap
|
|
400
|
+
continue
|
|
401
|
+
}
|
|
402
|
+
gMap.query = []
|
|
403
|
+
gMap.resolversQuery = {}
|
|
404
|
+
gMap.mutation = []
|
|
405
|
+
gMap.resolversMutation = {}
|
|
408
406
|
|
|
409
|
-
|
|
410
|
-
|
|
407
|
+
gMap.query.push(generateActionGraphqlProp('find', objectConfig))
|
|
408
|
+
gMap.resolversQuery[objectName] = { action: 'find' }
|
|
411
409
|
|
|
412
|
-
|
|
413
|
-
|
|
410
|
+
gMap.query.push(generateActionGraphqlProp('count', objectConfig))
|
|
411
|
+
gMap.resolversQuery[`${objectName}__count`] = { action: 'count' }
|
|
414
412
|
|
|
415
|
-
|
|
416
|
-
|
|
413
|
+
gMap.query.push(generateActionGraphqlProp('findOne', objectConfig))
|
|
414
|
+
gMap.resolversQuery[`${objectName}__findOne`] = { action: 'findOne' }
|
|
417
415
|
|
|
418
|
-
|
|
419
|
-
|
|
416
|
+
gMap.mutation.push(generateActionGraphqlProp('insert', objectConfig))
|
|
417
|
+
gMap.resolversMutation[`${objectName}__insert`] = { action: 'insert' }
|
|
420
418
|
|
|
421
|
-
|
|
422
|
-
|
|
419
|
+
gMap.mutation.push(generateActionGraphqlProp('update', objectConfig))
|
|
420
|
+
gMap.resolversMutation[`${objectName}__update`] = { action: 'update' }
|
|
423
421
|
|
|
424
|
-
|
|
425
|
-
|
|
422
|
+
gMap.mutation.push(generateActionGraphqlProp('delete', objectConfig))
|
|
423
|
+
gMap.resolversMutation[`${objectName}__delete`] = { action: 'delete' }
|
|
426
424
|
|
|
427
|
-
|
|
425
|
+
objGraphqlMap[objectName] = gMap
|
|
426
|
+
} catch (error) {
|
|
427
|
+
console.error(`error`, error)
|
|
428
|
+
}
|
|
428
429
|
};
|
|
429
430
|
|
|
430
431
|
return objGraphqlMap
|
|
@@ -469,43 +470,7 @@ module.exports = {
|
|
|
469
470
|
* Service started lifecycle event handler
|
|
470
471
|
*/
|
|
471
472
|
async started() {
|
|
472
|
-
|
|
473
|
-
// setTimeout(async function () {
|
|
474
|
-
// const objGraphqlMap = await that.generateObjGraphqlMap(that.name)
|
|
475
|
-
|
|
476
|
-
// let globalTypeDefs = []
|
|
477
|
-
// let query = []
|
|
478
|
-
// let mutation = []
|
|
479
|
-
// let resolvers = {}
|
|
480
|
-
// let resolversQuery = {}
|
|
481
|
-
// let resolversMutation = {}
|
|
482
|
-
|
|
483
|
-
// for (const objectName in objGraphqlMap) {
|
|
484
|
-
// if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
485
|
-
// const gMap = objGraphqlMap[objectName];
|
|
486
|
-
// globalTypeDefs.push(gMap.type)
|
|
487
|
-
// query = query.concat(gMap.query)
|
|
488
|
-
// mutation = mutation.concat(gMap.mutation)
|
|
489
|
-
// resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
490
|
-
// resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
491
|
-
// resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
492
|
-
// }
|
|
493
|
-
// }
|
|
494
|
-
|
|
495
|
-
// that.globalTypeDefs = globalTypeDefs
|
|
496
|
-
|
|
497
|
-
// that.settings.graphql = {
|
|
498
|
-
// query: query,
|
|
499
|
-
// mutation: mutation,
|
|
500
|
-
// resolvers: {
|
|
501
|
-
// ...resolvers,
|
|
502
|
-
// Query: resolversQuery,
|
|
503
|
-
// Mutation: resolversMutation
|
|
504
|
-
// }
|
|
505
|
-
// }
|
|
506
|
-
|
|
507
|
-
// console.log('graphql:', new Date())
|
|
508
|
-
// }, 20000)
|
|
473
|
+
await this.ChangeGlobalGraphQLSettings()
|
|
509
474
|
},
|
|
510
475
|
|
|
511
476
|
/**
|