@steedos/service-object-graphql 2.5.3-beta.13 → 2.5.3-beta.15
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 +162 -135
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.15",
|
|
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": "60922001047bf7270aaca51702a3f3541a6b0516",
|
|
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.15",
|
|
21
|
+
"@steedos/i18n": "2.5.3-beta.15",
|
|
22
|
+
"@steedos/objectql": "2.5.3-beta.15",
|
|
23
|
+
"@steedos/service-object-mixin": "2.5.3-beta.15",
|
|
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: sunhaolin@hotoa.com
|
|
5
|
+
* @LastEditTime: 2023-06-06 11:03:12
|
|
6
6
|
* @Description:
|
|
7
7
|
*/
|
|
8
8
|
|
|
@@ -14,6 +14,7 @@ const {
|
|
|
14
14
|
getGraphqlActions,
|
|
15
15
|
getQueryFields
|
|
16
16
|
} = require('./lib');
|
|
17
|
+
const open = require('open');
|
|
17
18
|
|
|
18
19
|
const { formatFiltersToODataQuery } = require("@steedos/filters");
|
|
19
20
|
|
|
@@ -21,8 +22,6 @@ const serviceObjectMixin = require('@steedos/service-object-mixin');
|
|
|
21
22
|
|
|
22
23
|
const { QUERY_DOCS_TOP } = require('./lib/consts');
|
|
23
24
|
|
|
24
|
-
const { Register } = require('@steedos/metadata-registrar')
|
|
25
|
-
|
|
26
25
|
/**
|
|
27
26
|
* @typedef {import('moleculer').Context} Context Moleculer's Context
|
|
28
27
|
*/
|
|
@@ -34,6 +33,8 @@ module.exports = {
|
|
|
34
33
|
globalGraphQLSettings: {}, // service-api 里generateGraphQLSchema使用
|
|
35
34
|
getGraphqlFields: getQueryFields,
|
|
36
35
|
|
|
36
|
+
projectStarted: false,
|
|
37
|
+
|
|
37
38
|
/**
|
|
38
39
|
* Settings
|
|
39
40
|
*/
|
|
@@ -228,66 +229,70 @@ module.exports = {
|
|
|
228
229
|
* Events
|
|
229
230
|
*/
|
|
230
231
|
events: {
|
|
231
|
-
"graphql.schema.changed": {
|
|
232
|
-
params: {},
|
|
233
|
-
async handler(ctx) {
|
|
234
|
-
await this.ChangeGlobalGraphQLSettings()
|
|
235
|
-
}
|
|
236
|
-
},
|
|
237
232
|
// 此事件表示软件包发生变化(包括加载、卸载、对象发生变化),接收到此事件后重新生成graphql schema
|
|
238
233
|
"$packages.changed": {
|
|
239
234
|
params: {},
|
|
240
235
|
async handler(ctx) {
|
|
241
|
-
|
|
242
|
-
|
|
236
|
+
// console.log("Payload:", ctx.params);
|
|
237
|
+
// console.log("Sender:", ctx.nodeID);
|
|
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
|
+
}
|
|
243
260
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
261
|
+
|
|
262
|
+
this.globalGraphQLSettings = {
|
|
263
|
+
type: type,
|
|
264
|
+
query: query,
|
|
265
|
+
mutation: mutation,
|
|
266
|
+
resolvers: {
|
|
267
|
+
...resolvers,
|
|
268
|
+
Query: resolversQuery,
|
|
269
|
+
Mutation: resolversMutation
|
|
270
|
+
}
|
|
247
271
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
let resolvers = {}
|
|
261
|
-
let resolversQuery = {}
|
|
262
|
-
let resolversMutation = {}
|
|
263
|
-
|
|
264
|
-
for (const objectName in objGraphqlMap) {
|
|
265
|
-
if (Object.hasOwnProperty.call(objGraphqlMap, objectName)) {
|
|
266
|
-
const gMap = objGraphqlMap[objectName];
|
|
267
|
-
type.push(gMap.type)
|
|
268
|
-
query = query.concat(gMap.query)
|
|
269
|
-
mutation = mutation.concat(gMap.mutation)
|
|
270
|
-
resolvers = Object.assign(resolvers, gMap.resolvers)
|
|
271
|
-
resolversQuery = Object.assign(resolversQuery, gMap.resolversQuery)
|
|
272
|
-
resolversMutation = Object.assign(resolversMutation, gMap.resolversMutation)
|
|
273
|
-
}
|
|
272
|
+
|
|
273
|
+
// console.log('graphql:', new Date())
|
|
274
|
+
// console.log(JSON.stringify(query, null, 2))
|
|
275
|
+
|
|
276
|
+
// 发送事件,通知ApolloService重新加载graphql schema
|
|
277
|
+
ctx.emit('$services.changed');
|
|
278
|
+
|
|
279
|
+
if (!this.projectStarted) {
|
|
280
|
+
this.projectStarted = true
|
|
281
|
+
// 开发环境, 显示耗时
|
|
282
|
+
if(process.env.NODE_ENV == 'development' && global.__startDate){
|
|
283
|
+
console.log('耗时: ' + (new Date().getTime() - global.__startDate.getTime()) + ' ms');
|
|
274
284
|
}
|
|
275
|
-
console.log(`
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
Mutation: resolversMutation
|
|
285
|
+
console.log(`Project is running at ${process.env.ROOT_URL}`);
|
|
286
|
+
console.log('');
|
|
287
|
+
if (process.env.STEEDOS_AUTO_OPEN_BROWSER != 'false') { // 默认打开,如果不想打开,设置STEEDOS_AUTO_OPEN_BROWSER=false
|
|
288
|
+
try {
|
|
289
|
+
open(process.env.ROOT_URL);
|
|
290
|
+
} catch (error) {
|
|
291
|
+
console.error(error);
|
|
292
|
+
console.error('auto open browser failed.');
|
|
284
293
|
}
|
|
285
294
|
}
|
|
286
|
-
|
|
287
|
-
await Register.add(ctx.broker, {key: 'globalGraphQLSettings', data: globalGraphQLSettings}, {})
|
|
288
|
-
ctx.broker.broadcast("graphql.schema.changed")
|
|
289
|
-
|
|
290
|
-
}, 1000 * 3)
|
|
295
|
+
}
|
|
291
296
|
}
|
|
292
297
|
}
|
|
293
298
|
},
|
|
@@ -296,14 +301,7 @@ module.exports = {
|
|
|
296
301
|
* Methods
|
|
297
302
|
*/
|
|
298
303
|
methods: {
|
|
299
|
-
|
|
300
|
-
const result = await Register.get(this.broker, 'globalGraphQLSettings');
|
|
301
|
-
if(result){
|
|
302
|
-
this.globalGraphQLSettings = result.metadata;
|
|
303
|
-
// 发送事件,通知ApolloService重新加载graphql schema; api 服务和graphql服务在同一个节点上.
|
|
304
|
-
this.broker.broadcastLocal('$services.changed');
|
|
305
|
-
}
|
|
306
|
-
},
|
|
304
|
+
|
|
307
305
|
find: {
|
|
308
306
|
async handler(objectName, query, userSession) {
|
|
309
307
|
const obj = this.getObject(objectName)
|
|
@@ -349,90 +347,84 @@ module.exports = {
|
|
|
349
347
|
|
|
350
348
|
async generateObjGraphqlMap(graphqlServiceName) {
|
|
351
349
|
const objGraphqlMap = {}
|
|
352
|
-
console.time('generateObjGraphqlMap===>objects.getAll')
|
|
353
350
|
const objectConfigs = await this.broker.call("objects.getAll");
|
|
354
|
-
console.timeEnd('generateObjGraphqlMap===>objects.getAll')
|
|
355
351
|
for (const object of objectConfigs) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
[
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
[`${RELATED_PREFIX}_approvals`]: {}
|
|
382
|
-
}
|
|
383
|
-
},
|
|
384
|
-
query: [],
|
|
385
|
-
resolversQuery: {
|
|
386
|
-
[objectName]: { action: 'find' },
|
|
387
|
-
[`${objectName}__count`]: { action: 'count' },
|
|
388
|
-
[`${objectName}__findOne`]: { action: 'findOne' }
|
|
389
|
-
},
|
|
390
|
-
mutation: [],
|
|
391
|
-
resolversMutation: {
|
|
392
|
-
[`${objectName}__insert`]: { action: 'insert' },
|
|
393
|
-
[`${objectName}__update`]: { action: 'update' },
|
|
394
|
-
[`${objectName}__delete`]: { action: 'delete' }
|
|
352
|
+
// console.log('===>object.metadata.name: ', object.metadata.name)
|
|
353
|
+
const objectConfig = object.metadata
|
|
354
|
+
const objectName = objectConfig.name
|
|
355
|
+
// 排除 __MONGO_BASE_OBJECT __SQL_BASE_OBJECT
|
|
356
|
+
if (['__MONGO_BASE_OBJECT', '__SQL_BASE_OBJECT'].includes(objectName)) {
|
|
357
|
+
continue
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* objGraphqlMap[objectName] 结构
|
|
361
|
+
{
|
|
362
|
+
type: "",
|
|
363
|
+
resolvers: {
|
|
364
|
+
[objectName]: {
|
|
365
|
+
[`${name}${EXPAND_SUFFIX}`]: {},
|
|
366
|
+
[relatedFieldName]: {},
|
|
367
|
+
[DISPLAY_PREFIX]: {},
|
|
368
|
+
[UI_PREFIX]: {},
|
|
369
|
+
[PERMISSIONS_PREFIX]: {},
|
|
370
|
+
[`${RELATED_PREFIX}_files`]: {},
|
|
371
|
+
[`${RELATED_PREFIX}_tasks`]: {},
|
|
372
|
+
[`${RELATED_PREFIX}_notes`]: {},
|
|
373
|
+
[`${RELATED_PREFIX}_events`]: {},
|
|
374
|
+
[`${RELATED_PREFIX}_audit_records`]: {},
|
|
375
|
+
[`${RELATED_PREFIX}_instances`]: {},
|
|
376
|
+
[`${RELATED_PREFIX}_approvals`]: {}
|
|
395
377
|
}
|
|
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' }
|
|
396
390
|
}
|
|
397
|
-
|
|
398
|
-
|
|
391
|
+
}
|
|
392
|
+
*/
|
|
393
|
+
const gMap = {}
|
|
399
394
|
|
|
400
|
-
|
|
395
|
+
const typeAndResolves = await generateSettingsGraphql(objectConfig, graphqlServiceName)
|
|
401
396
|
|
|
402
|
-
|
|
403
|
-
|
|
397
|
+
gMap.type = typeAndResolves.type
|
|
398
|
+
gMap.resolvers = typeAndResolves.resolvers
|
|
404
399
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
400
|
+
if (objectName == 'users') {
|
|
401
|
+
objGraphqlMap[objectName] = gMap
|
|
402
|
+
continue
|
|
403
|
+
}
|
|
404
|
+
gMap.query = []
|
|
405
|
+
gMap.resolversQuery = {}
|
|
406
|
+
gMap.mutation = []
|
|
407
|
+
gMap.resolversMutation = {}
|
|
413
408
|
|
|
414
|
-
|
|
415
|
-
|
|
409
|
+
gMap.query.push(generateActionGraphqlProp('find', objectConfig))
|
|
410
|
+
gMap.resolversQuery[objectName] = { action: 'find' }
|
|
416
411
|
|
|
417
|
-
|
|
418
|
-
|
|
412
|
+
gMap.query.push(generateActionGraphqlProp('count', objectConfig))
|
|
413
|
+
gMap.resolversQuery[`${objectName}__count`] = { action: 'count' }
|
|
419
414
|
|
|
420
|
-
|
|
421
|
-
|
|
415
|
+
gMap.query.push(generateActionGraphqlProp('findOne', objectConfig))
|
|
416
|
+
gMap.resolversQuery[`${objectName}__findOne`] = { action: 'findOne' }
|
|
422
417
|
|
|
423
|
-
|
|
424
|
-
|
|
418
|
+
gMap.mutation.push(generateActionGraphqlProp('insert', objectConfig))
|
|
419
|
+
gMap.resolversMutation[`${objectName}__insert`] = { action: 'insert' }
|
|
425
420
|
|
|
426
|
-
|
|
427
|
-
|
|
421
|
+
gMap.mutation.push(generateActionGraphqlProp('update', objectConfig))
|
|
422
|
+
gMap.resolversMutation[`${objectName}__update`] = { action: 'update' }
|
|
428
423
|
|
|
429
|
-
|
|
430
|
-
|
|
424
|
+
gMap.mutation.push(generateActionGraphqlProp('delete', objectConfig))
|
|
425
|
+
gMap.resolversMutation[`${objectName}__delete`] = { action: 'delete' }
|
|
431
426
|
|
|
432
|
-
|
|
433
|
-
} catch (error) {
|
|
434
|
-
console.error(`error`, error)
|
|
435
|
-
}
|
|
427
|
+
objGraphqlMap[objectName] = gMap
|
|
436
428
|
};
|
|
437
429
|
|
|
438
430
|
return objGraphqlMap
|
|
@@ -477,8 +469,43 @@ module.exports = {
|
|
|
477
469
|
* Service started lifecycle event handler
|
|
478
470
|
*/
|
|
479
471
|
async started() {
|
|
480
|
-
|
|
481
|
-
|
|
472
|
+
// const that = this;
|
|
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)
|
|
482
509
|
},
|
|
483
510
|
|
|
484
511
|
/**
|