@things-factory/shell 8.0.2 → 9.0.0-beta.12
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/_index.html +0 -1
- package/bin/things-factory-migration +6 -3
- package/client/themes/calendar-theme.css +3 -1
- package/client/themes/index.css +2 -1
- package/dist-server/index.d.ts +12 -12
- package/dist-server/index.js +12 -12
- package/dist-server/index.js.map +1 -1
- package/dist-server/initializers/database.js +4 -10
- package/dist-server/initializers/database.js.map +1 -1
- package/dist-server/initializers/ormconfig.d.ts +2 -0
- package/dist-server/initializers/ormconfig.js +30 -0
- package/dist-server/initializers/ormconfig.js.map +1 -0
- package/dist-server/middlewares/domain-middleware.js +2 -2
- package/dist-server/middlewares/domain-middleware.js.map +1 -1
- package/dist-server/middlewares/index.d.ts +1 -1
- package/dist-server/middlewares/index.js +3 -3
- package/dist-server/middlewares/index.js.map +1 -1
- package/dist-server/migrations/1000000000000-SeedDomain.js +4 -4
- package/dist-server/migrations/1000000000000-SeedDomain.js.map +1 -1
- package/dist-server/migrations/index.js.map +1 -1
- package/dist-server/process-cleaner.d.ts +1 -0
- package/dist-server/process-cleaner.js +92 -0
- package/dist-server/process-cleaner.js.map +1 -0
- package/dist-server/routers/domain-router.js +3 -3
- package/dist-server/routers/domain-router.js.map +1 -1
- package/dist-server/routers/global-router.js +6 -6
- package/dist-server/routers/global-router.js.map +1 -1
- package/dist-server/routers/index.d.ts +3 -3
- package/dist-server/routers/index.js +3 -3
- package/dist-server/routers/index.js.map +1 -1
- package/dist-server/schema.js +5 -4
- package/dist-server/schema.js.map +1 -1
- package/dist-server/server-dev.js +37 -39
- package/dist-server/server-dev.js.map +1 -1
- package/dist-server/server.js +33 -35
- package/dist-server/server.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-item-type.js +3 -3
- package/dist-server/service/attribute-set/attribute-set-item-type.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-mutation.d.ts +2 -2
- package/dist-server/service/attribute-set/attribute-set-mutation.js +16 -16
- package/dist-server/service/attribute-set/attribute-set-mutation.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-query.d.ts +3 -3
- package/dist-server/service/attribute-set/attribute-set-query.js +15 -15
- package/dist-server/service/attribute-set/attribute-set-query.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set-type.d.ts +2 -2
- package/dist-server/service/attribute-set/attribute-set-type.js +5 -5
- package/dist-server/service/attribute-set/attribute-set-type.js.map +1 -1
- package/dist-server/service/attribute-set/attribute-set.d.ts +1 -1
- package/dist-server/service/attribute-set/attribute-set.js +2 -2
- package/dist-server/service/attribute-set/attribute-set.js.map +1 -1
- package/dist-server/service/attribute-set/index.d.ts +3 -3
- package/dist-server/service/attribute-set/index.js +5 -5
- package/dist-server/service/attribute-set/index.js.map +1 -1
- package/dist-server/service/common-types/index.d.ts +6 -6
- package/dist-server/service/common-types/index.js +6 -6
- package/dist-server/service/common-types/index.js.map +1 -1
- package/dist-server/service/common-types/list-param.js +2 -2
- package/dist-server/service/common-types/list-param.js.map +1 -1
- package/dist-server/service/common-types/log.js +2 -2
- package/dist-server/service/common-types/log.js.map +1 -1
- package/dist-server/service/common-types/scalar-object.d.ts +2 -1
- package/dist-server/service/common-types/scalar-object.js +2 -2
- package/dist-server/service/common-types/scalar-object.js.map +1 -1
- package/dist-server/service/directive-transaction/index.d.ts +1 -1
- package/dist-server/service/directive-transaction/index.js +1 -1
- package/dist-server/service/directive-transaction/index.js.map +1 -1
- package/dist-server/service/directive-transaction/transaction.js +2 -2
- package/dist-server/service/directive-transaction/transaction.js.map +1 -1
- package/dist-server/service/domain/domain-mutation.d.ts +2 -2
- package/dist-server/service/domain/domain-mutation.js +21 -21
- package/dist-server/service/domain/domain-mutation.js.map +1 -1
- package/dist-server/service/domain/domain-query.d.ts +3 -3
- package/dist-server/service/domain/domain-query.js +18 -18
- package/dist-server/service/domain/domain-query.js.map +1 -1
- package/dist-server/service/domain/domain-types.d.ts +2 -2
- package/dist-server/service/domain/domain-types.js +6 -6
- package/dist-server/service/domain/domain-types.js.map +1 -1
- package/dist-server/service/domain/domain.js +3 -3
- package/dist-server/service/domain/domain.js.map +1 -1
- package/dist-server/service/domain/index.d.ts +3 -3
- package/dist-server/service/domain/index.js +5 -5
- package/dist-server/service/domain/index.js.map +1 -1
- package/dist-server/service/index.d.ts +7 -7
- package/dist-server/service/index.js +16 -16
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/subscription-data/data-resolver.d.ts +1 -1
- package/dist-server/service/subscription-data/data-resolver.js +4 -4
- package/dist-server/service/subscription-data/data-resolver.js.map +1 -1
- package/dist-server/service/subscription-data/data-types.d.ts +1 -1
- package/dist-server/service/subscription-data/data-types.js +5 -5
- package/dist-server/service/subscription-data/data-types.js.map +1 -1
- package/dist-server/service/subscription-data/index.d.ts +1 -1
- package/dist-server/service/subscription-data/index.js +2 -2
- package/dist-server/service/subscription-data/index.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/typeorm/encrypt-transform.js +3 -3
- package/dist-server/typeorm/encrypt-transform.js.map +1 -1
- package/dist-server/utils/get-query-builder-from-list-params.d.ts +2 -2
- package/dist-server/utils/get-query-builder-from-list-params.js +5 -5
- package/dist-server/utils/get-query-builder-from-list-params.js.map +1 -1
- package/dist-server/utils/index.d.ts +8 -8
- package/dist-server/utils/index.js +8 -8
- package/dist-server/utils/index.js.map +1 -1
- package/dist-server/utils/list-param-adjuster.d.ts +1 -1
- package/dist-server/utils/list-param-adjuster.js.map +1 -1
- package/dist-server/utils/list-params-converter.d.ts +2 -2
- package/dist-server/utils/list-params-converter.js +2 -2
- package/dist-server/utils/list-params-converter.js.map +1 -1
- package/dist-server/utils/list-query-builder.d.ts +1 -1
- package/dist-server/utils/list-query-builder.js +7 -7
- package/dist-server/utils/list-query-builder.js.map +1 -1
- package/dist-server/utils/publish-progress.js +2 -2
- package/dist-server/utils/publish-progress.js.map +1 -1
- package/package.json +16 -19
- package/views/public/home.html +0 -1
- package/client/hot-client/hot.js +0 -140
- package/client/hot-client/index.js +0 -103
- package/client/hot-client/log.js +0 -44
- package/client/hot-client/socket.js +0 -63
- package/ormconfig.js +0 -31
- package/server/graphql-local-client.ts +0 -59
- package/server/index.ts +0 -13
- package/server/initializers/database.ts +0 -96
- package/server/initializers/naming-strategy.ts +0 -14
- package/server/middlewares/domain-middleware.ts +0 -60
- package/server/middlewares/index.ts +0 -43
- package/server/migrations/1000000000000-SeedDomain.ts +0 -37
- package/server/migrations/index.ts +0 -9
- package/server/pubsub-log-transport.ts +0 -59
- package/server/pubsub.ts +0 -84
- package/server/routers/domain-router.ts +0 -13
- package/server/routers/global-router.ts +0 -76
- package/server/routers/graphql-router.ts +0 -3
- package/server/routers/index.ts +0 -3
- package/server/schema.ts +0 -163
- package/server/server-dev.ts +0 -305
- package/server/server.ts +0 -296
- package/server/service/attribute-set/attribute-set-item-type.ts +0 -65
- package/server/service/attribute-set/attribute-set-mutation.ts +0 -125
- package/server/service/attribute-set/attribute-set-query.ts +0 -36
- package/server/service/attribute-set/attribute-set-type.ts +0 -46
- package/server/service/attribute-set/attribute-set.ts +0 -35
- package/server/service/attribute-set/index.ts +0 -6
- package/server/service/common-types/index.ts +0 -6
- package/server/service/common-types/list-param.ts +0 -61
- package/server/service/common-types/log.ts +0 -17
- package/server/service/common-types/object-ref.ts +0 -13
- package/server/service/common-types/scalar-any.ts +0 -44
- package/server/service/common-types/scalar-date.ts +0 -22
- package/server/service/common-types/scalar-object.ts +0 -15
- package/server/service/directive-transaction/index.ts +0 -1
- package/server/service/directive-transaction/transaction.ts +0 -40
- package/server/service/domain/domain-mutation.ts +0 -120
- package/server/service/domain/domain-query.ts +0 -48
- package/server/service/domain/domain-types.ts +0 -63
- package/server/service/domain/domain.ts +0 -147
- package/server/service/domain/index.ts +0 -6
- package/server/service/index.ts +0 -32
- package/server/service/subscription-data/data-resolver.ts +0 -37
- package/server/service/subscription-data/data-types.ts +0 -16
- package/server/service/subscription-data/index.ts +0 -4
- package/server/typeorm/encrypt-transform.ts +0 -70
- package/server/typeorm/get-data-encryption-key.ts +0 -13
- package/server/typeorm/json5-transform.ts +0 -26
- package/server/typeorm/round-transform.ts +0 -20
- package/server/utils/condition-builder.ts +0 -145
- package/server/utils/get-domain.ts +0 -226
- package/server/utils/get-query-builder-from-list-params.ts +0 -469
- package/server/utils/get-times-for-period.ts +0 -60
- package/server/utils/index.ts +0 -8
- package/server/utils/list-param-adjuster.ts +0 -21
- package/server/utils/list-params-converter.ts +0 -200
- package/server/utils/list-query-builder.ts +0 -120
- package/server/utils/publish-progress.ts +0 -23
@@ -1,37 +0,0 @@
|
|
1
|
-
import { MigrationInterface, QueryRunner } from 'typeorm'
|
2
|
-
|
3
|
-
import { getRepository } from '../initializers/database'
|
4
|
-
import { Domain } from '../service/domain/domain'
|
5
|
-
|
6
|
-
const SEED_DOMAINS = [
|
7
|
-
{
|
8
|
-
name: 'SYSTEM',
|
9
|
-
subdomain: 'system',
|
10
|
-
systemFlag: true
|
11
|
-
}
|
12
|
-
]
|
13
|
-
|
14
|
-
export class SeedDomain1000000000000 implements MigrationInterface {
|
15
|
-
public async up(queryRunner: QueryRunner): Promise<any> {
|
16
|
-
const repository = getRepository(Domain)
|
17
|
-
|
18
|
-
return await Promise.all(
|
19
|
-
SEED_DOMAINS.map(async domain => {
|
20
|
-
await repository.save({
|
21
|
-
...domain
|
22
|
-
})
|
23
|
-
})
|
24
|
-
)
|
25
|
-
}
|
26
|
-
|
27
|
-
public async down(queryRunner: QueryRunner): Promise<any> {
|
28
|
-
const repository = getRepository(Domain)
|
29
|
-
|
30
|
-
return await Promise.all(
|
31
|
-
SEED_DOMAINS.reverse().map(async domain => {
|
32
|
-
let recode = await repository.findOneBy({ subdomain: domain.subdomain })
|
33
|
-
await repository.remove(recode)
|
34
|
-
})
|
35
|
-
)
|
36
|
-
}
|
37
|
-
}
|
@@ -1,9 +0,0 @@
|
|
1
|
-
const glob = require('glob')
|
2
|
-
const path = require('path')
|
3
|
-
|
4
|
-
export var migrations = []
|
5
|
-
|
6
|
-
glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
|
7
|
-
if (file.indexOf('index.js') !== -1) return
|
8
|
-
migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
|
9
|
-
})
|
@@ -1,59 +0,0 @@
|
|
1
|
-
import camelCase from 'lodash/camelCase'
|
2
|
-
import Transport from 'winston-transport'
|
3
|
-
import { pubsub } from './pubsub'
|
4
|
-
|
5
|
-
/**
|
6
|
-
* PubSubLogTransport is a custom Winston transport that publishes log messages to a GraphQL Pub/Sub topic.
|
7
|
-
*/
|
8
|
-
export class PubSubLogTransport extends Transport {
|
9
|
-
/**
|
10
|
-
* The source object providing the log messages.
|
11
|
-
* @type {object}
|
12
|
-
*/
|
13
|
-
source: object
|
14
|
-
|
15
|
-
/**
|
16
|
-
* The Pub/Sub topic to which log messages will be published.
|
17
|
-
* @type {string}
|
18
|
-
*/
|
19
|
-
topic: string
|
20
|
-
|
21
|
-
/**
|
22
|
-
* The name of the field resolver for log messages.
|
23
|
-
* @type {string}
|
24
|
-
*/
|
25
|
-
resolver: string /* field resolver name */
|
26
|
-
|
27
|
-
/**
|
28
|
-
* Creates an instance of PubSubLogTransport.
|
29
|
-
* @param {object} opts - Options for configuring the transport.
|
30
|
-
* @param {string} opts.topic - The Pub/Sub topic to which log messages will be published.
|
31
|
-
* @param {object} opts.source - The source object providing the log messages.
|
32
|
-
* @param {string} opts.resolver - The name of the field resolver for log messages (default: derived from the topic).
|
33
|
-
*/
|
34
|
-
constructor(opts) {
|
35
|
-
super(opts)
|
36
|
-
|
37
|
-
this.topic = opts.topic
|
38
|
-
this.source = opts.source
|
39
|
-
this.resolver = opts.resolver || camelCase(this.topic)
|
40
|
-
}
|
41
|
-
|
42
|
-
/**
|
43
|
-
* Publishes a log message to the configured Pub/Sub topic.
|
44
|
-
* @param {object} info - The log message information.
|
45
|
-
* @param {Function} callback - The callback function to be called after publishing the message.
|
46
|
-
*/
|
47
|
-
log(info, callback) {
|
48
|
-
setImmediate(() => {
|
49
|
-
pubsub.publish(this.topic, {
|
50
|
-
[this.resolver]: {
|
51
|
-
source: this.source,
|
52
|
-
...info
|
53
|
-
}
|
54
|
-
})
|
55
|
-
})
|
56
|
-
|
57
|
-
callback()
|
58
|
-
}
|
59
|
-
}
|
package/server/pubsub.ts
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @module pubsub
|
3
|
-
* @description
|
4
|
-
* This module provides a Pub/Sub (Publish/Subscribe) mechanism for handling messages and events.
|
5
|
-
* Developers can use various middleware options such as Redis, Redis Cluster
|
6
|
-
* to implement Pub/Sub functionality.
|
7
|
-
*/
|
8
|
-
|
9
|
-
import { createPubSub } from 'graphql-yoga'
|
10
|
-
import { createRedisEventTarget } from '@graphql-yoga/redis-event-target'
|
11
|
-
import Redis from 'ioredis'
|
12
|
-
|
13
|
-
import { config, logger } from '@things-factory/env'
|
14
|
-
import { PubSub } from 'type-graphql'
|
15
|
-
|
16
|
-
const { middleware, host, port, nodes, options } = config.get('pubsub', {})
|
17
|
-
|
18
|
-
let pubsub: PubSub
|
19
|
-
|
20
|
-
switch (middleware) {
|
21
|
-
case 'redis':
|
22
|
-
const redisOption = {
|
23
|
-
host,
|
24
|
-
port,
|
25
|
-
retryStrategy: times => {
|
26
|
-
// reconnect after
|
27
|
-
return Math.min(times * 50, 2000)
|
28
|
-
},
|
29
|
-
...options
|
30
|
-
}
|
31
|
-
//@ts-ignore
|
32
|
-
pubsub = createPubSub({
|
33
|
-
eventTarget: createRedisEventTarget({
|
34
|
-
publishClient: new Redis(redisOption),
|
35
|
-
subscribeClient: new Redis(redisOption)
|
36
|
-
})
|
37
|
-
})
|
38
|
-
break
|
39
|
-
case 'redisCluster':
|
40
|
-
const cluster = new Redis.Cluster(nodes, options)
|
41
|
-
//@ts-ignore
|
42
|
-
pubsub = createPubSub({
|
43
|
-
eventTarget: createRedisEventTarget({
|
44
|
-
publishClient: cluster,
|
45
|
-
subscribeClient: cluster
|
46
|
-
})
|
47
|
-
})
|
48
|
-
break
|
49
|
-
default:
|
50
|
-
pubsub = createPubSub()
|
51
|
-
break
|
52
|
-
}
|
53
|
-
|
54
|
-
// kafka pubsub keeps connection and app port with 'ctrl+c' termination.
|
55
|
-
const exitHandler = async evt => {
|
56
|
-
//@ts-ignore
|
57
|
-
if (pubsub.close) {
|
58
|
-
try {
|
59
|
-
//@ts-ignore
|
60
|
-
await pubsub.close()
|
61
|
-
} catch (err) {
|
62
|
-
logger.error(err)
|
63
|
-
}
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
|
-
/*
|
68
|
-
* exit events hint from https://stackoverflow.com/a/14032965/14539284
|
69
|
-
*/
|
70
|
-
|
71
|
-
//do something when app is closing
|
72
|
-
process.on('exit', exitHandler.bind(null, { name: 'exit', exit: true }))
|
73
|
-
|
74
|
-
//catches ctrl+c event
|
75
|
-
process.on('SIGINT', exitHandler.bind(null, { name: 'SIGINT', exit: true }))
|
76
|
-
|
77
|
-
// catches "kill pid" (for example: nodemon restart)
|
78
|
-
process.on('SIGUSR1', exitHandler.bind(null, { name: 'SIGUSR1', exit: true }))
|
79
|
-
process.on('SIGUSR2', exitHandler.bind(null, { name: 'SIGUSR2', exit: true }))
|
80
|
-
|
81
|
-
//catches uncaught exceptions
|
82
|
-
// process.on('uncaughtException', exitHandler.bind(null, { name: 'uncaughtException', exit: true }))
|
83
|
-
|
84
|
-
export { pubsub }
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import Router from 'koa-router'
|
2
|
-
|
3
|
-
import { domainMiddleware } from '../middlewares/domain-middleware'
|
4
|
-
|
5
|
-
export const domainPublicRouter = new Router()
|
6
|
-
domainPublicRouter.use(async (context, next) => {
|
7
|
-
await next()
|
8
|
-
}, domainMiddleware)
|
9
|
-
|
10
|
-
export const domainPrivateRouter = new Router()
|
11
|
-
domainPrivateRouter.use(async (context, next) => {
|
12
|
-
await next()
|
13
|
-
}, domainMiddleware)
|
@@ -1,76 +0,0 @@
|
|
1
|
-
import Router from 'koa-router'
|
2
|
-
import requestIp from 'request-ip'
|
3
|
-
|
4
|
-
import { getLicenseInfo } from '@things-factory/operato-license-checker'
|
5
|
-
import { domainMiddleware } from '../middlewares/domain-middleware'
|
6
|
-
|
7
|
-
var crawler = require('npm-license-crawler')
|
8
|
-
|
9
|
-
export const globalPublicRouter = new Router()
|
10
|
-
export const globalPrivateRouter = new Router()
|
11
|
-
|
12
|
-
/* even though global private router, catch domain for information */
|
13
|
-
globalPrivateRouter.use(domainMiddleware)
|
14
|
-
|
15
|
-
if (process.env.NODE_ENV != 'production') {
|
16
|
-
globalPublicRouter.get('/graphql', async (context, next) => {
|
17
|
-
const initialEndpoint = context.request.href
|
18
|
-
|
19
|
-
await context.render('graphql', { initialEndpoint })
|
20
|
-
})
|
21
|
-
}
|
22
|
-
|
23
|
-
globalPublicRouter.get('/dependencies', async (context, next) => {
|
24
|
-
const { dependencyGraph } = require('@things-factory/env')
|
25
|
-
|
26
|
-
await context.render('dependencies-view-graphviz', { model: dependencyGraph })
|
27
|
-
})
|
28
|
-
|
29
|
-
globalPublicRouter.get('/license-info', (context, next) => {
|
30
|
-
context.type = 'application/json'
|
31
|
-
context.body = getLicenseInfo()
|
32
|
-
})
|
33
|
-
|
34
|
-
globalPublicRouter.get('/opensource-licenses', (context, next) => {
|
35
|
-
return new Promise(function (resolve, reject) {
|
36
|
-
var options = {
|
37
|
-
start: ['.'],
|
38
|
-
exclude: [],
|
39
|
-
noColor: true,
|
40
|
-
production: true,
|
41
|
-
unknown: false
|
42
|
-
}
|
43
|
-
|
44
|
-
crawler.dumpLicenses(options, function (error, res) {
|
45
|
-
if (error) {
|
46
|
-
console.error('get:/opensource-licenses', error)
|
47
|
-
reject(error)
|
48
|
-
} else {
|
49
|
-
context.type = 'application/json'
|
50
|
-
context.body = res
|
51
|
-
resolve(res)
|
52
|
-
}
|
53
|
-
})
|
54
|
-
})
|
55
|
-
})
|
56
|
-
|
57
|
-
globalPublicRouter.get('/request-info', context => {
|
58
|
-
context.body = `
|
59
|
-
Client info. from "requestIp": ${requestIp.getClientIp(context.req)}
|
60
|
-
|
61
|
-
Client info. from "context.ip": ${context.ip}
|
62
|
-
Client info. from "context.protocol": ${context.protocol}
|
63
|
-
Client info. from "context.host": ${context.host}
|
64
|
-
|
65
|
-
Client info. from "x-forwarded-for": ${context.headers['x-forwarded-for']}
|
66
|
-
Client info. from "x-forwarded-proto": ${context.headers['x-forwarded-proto']}
|
67
|
-
Client info. from "x-forwarded-host": ${context.headers['x-forwarded-host']}
|
68
|
-
Client info. from "x-forwarded-port": ${context.headers['x-forwarded-port']}
|
69
|
-
`
|
70
|
-
})
|
71
|
-
|
72
|
-
/* Paths starting with /public are assumed to use the koa-view renderer. */
|
73
|
-
globalPublicRouter.get('/public/(.[^.]*)', async (context, next) => {
|
74
|
-
const { path } = context
|
75
|
-
await context.render(path.substr(1))
|
76
|
-
})
|
package/server/routers/index.ts
DELETED
package/server/schema.ts
DELETED
@@ -1,163 +0,0 @@
|
|
1
|
-
import { GraphQLSchema } from 'graphql'
|
2
|
-
import { GraphQLUpload } from 'graphql-upload/GraphQLUpload.js'
|
3
|
-
import { buildSchema } from 'type-graphql'
|
4
|
-
import { typeDefs as scalarTypeDefs, resolvers as scalarResolvers } from 'graphql-scalars'
|
5
|
-
|
6
|
-
import { mergeSchemas } from '@graphql-tools/schema'
|
7
|
-
import { loader, orderedModuleNames } from '@things-factory/env'
|
8
|
-
import { deepMerge } from '@things-factory/utils'
|
9
|
-
import { pubsub } from './pubsub'
|
10
|
-
|
11
|
-
const path = require('path')
|
12
|
-
|
13
|
-
/**
|
14
|
-
* Generates and returns a GraphQL schema by merging schemas and resolvers from various modules.
|
15
|
-
* @returns {GraphQLSchema} The merged GraphQL schema.
|
16
|
-
*/
|
17
|
-
export async function schema() {
|
18
|
-
const schemas = orderedModuleNames
|
19
|
-
.map(dep => loader(dep).schema)
|
20
|
-
.filter(schema => schema)
|
21
|
-
.reduce(
|
22
|
-
(sum, schema) => {
|
23
|
-
const { typeDefs, resolvers, resolverClasses, directives } = sum
|
24
|
-
let { typeDefs: sTypeDefs = {}, resolvers: sResolvers = {}, resolverClasses: sResolverClasses = [], directives: sDirectives = {} } = schema
|
25
|
-
|
26
|
-
return {
|
27
|
-
typeDefs: deepMerge(typeDefs, sTypeDefs),
|
28
|
-
resolvers: deepMerge(resolvers, sResolvers),
|
29
|
-
resolverClasses: [...resolverClasses, ...(sResolverClasses || [])],
|
30
|
-
directives: deepMerge(directives, sDirectives)
|
31
|
-
}
|
32
|
-
},
|
33
|
-
{
|
34
|
-
typeDefs: {},
|
35
|
-
resolvers: {},
|
36
|
-
resolverClasses: [],
|
37
|
-
directives: {}
|
38
|
-
}
|
39
|
-
)
|
40
|
-
|
41
|
-
/* for typeDefs */
|
42
|
-
var typeDefs = schemas.typeDefs
|
43
|
-
var { queries = [], mutations = [], subscriptions = [], directives = [], types = [] } = typeDefs
|
44
|
-
|
45
|
-
queries = [...queries, ...(typeDefs.Query || [])]
|
46
|
-
mutations = [...mutations, ...(typeDefs.Mutation || [])]
|
47
|
-
subscriptions = [...subscriptions, ...(typeDefs.Subscription || [])]
|
48
|
-
directives = [...directives, ...(typeDefs.Directive || [])]
|
49
|
-
|
50
|
-
delete typeDefs.Query
|
51
|
-
delete typeDefs.Mutation
|
52
|
-
delete typeDefs.Subscription
|
53
|
-
delete typeDefs.Directive
|
54
|
-
|
55
|
-
delete typeDefs.queries
|
56
|
-
delete typeDefs.mutations
|
57
|
-
delete typeDefs.subscriptions
|
58
|
-
delete typeDefs.directives
|
59
|
-
delete typeDefs.types
|
60
|
-
|
61
|
-
const defs = {
|
62
|
-
query: queries.length > 0 ? ['type Query {', ...queries, '}'].join('\n') : 'type Query { _ : Boolean }',
|
63
|
-
mutation: mutations.length > 0 ? ['type Mutation {', ...mutations, '}'].join('\n') : 'type Mutation { _ : Boolean }',
|
64
|
-
subscription: subscriptions.length > 0 ? ['type Subscription {', ...subscriptions, '}'].join('\n') : 'type Subscription { _ : Boolean }'
|
65
|
-
}
|
66
|
-
|
67
|
-
typeDefs = [
|
68
|
-
...scalarTypeDefs,
|
69
|
-
`
|
70
|
-
scalar Upload
|
71
|
-
`,
|
72
|
-
defs.query,
|
73
|
-
defs.mutation,
|
74
|
-
defs.subscription,
|
75
|
-
...directives,
|
76
|
-
...types,
|
77
|
-
...Object.values(typeDefs)
|
78
|
-
].filter(type => !!type)
|
79
|
-
|
80
|
-
/* for resolvers */
|
81
|
-
var { resolvers } = schemas
|
82
|
-
var { queries = [], mutations = [], subscriptions = [], directives = [] } = resolvers
|
83
|
-
|
84
|
-
var queryResolvers =
|
85
|
-
queries.length > 0 &&
|
86
|
-
queries.reduce((sum, query) => {
|
87
|
-
return {
|
88
|
-
...sum,
|
89
|
-
...query
|
90
|
-
}
|
91
|
-
}, {})
|
92
|
-
|
93
|
-
var mutationResolvers =
|
94
|
-
mutations.length > 0 &&
|
95
|
-
mutations.reduce((sum, mutation) => {
|
96
|
-
return {
|
97
|
-
...sum,
|
98
|
-
...mutation
|
99
|
-
}
|
100
|
-
}, {})
|
101
|
-
|
102
|
-
var subscriptionResolvers =
|
103
|
-
subscriptions.length > 0 &&
|
104
|
-
subscriptions.reduce((sum, subscription) => {
|
105
|
-
return {
|
106
|
-
...sum,
|
107
|
-
...subscription
|
108
|
-
}
|
109
|
-
}, {})
|
110
|
-
|
111
|
-
var directiveResolvers = directives.reduce((sum, directive) => {
|
112
|
-
return {
|
113
|
-
...sum,
|
114
|
-
...directive
|
115
|
-
}
|
116
|
-
}, {})
|
117
|
-
|
118
|
-
delete resolvers.queries
|
119
|
-
delete resolvers.mutations
|
120
|
-
delete resolvers.subscriptions
|
121
|
-
delete resolvers.directives
|
122
|
-
|
123
|
-
var Query = resolvers.Query || {}
|
124
|
-
var Mutation = resolvers.Mutation || {}
|
125
|
-
var Subscription = resolvers.Subscription || {}
|
126
|
-
var Directive = resolvers.Directive || {}
|
127
|
-
|
128
|
-
delete resolvers.Query
|
129
|
-
delete resolvers.Mutation
|
130
|
-
delete resolvers.Subscription
|
131
|
-
delete resolvers.Directive
|
132
|
-
|
133
|
-
resolvers = {
|
134
|
-
Upload: GraphQLUpload as any,
|
135
|
-
Query: deepMerge(Query, queryResolvers),
|
136
|
-
Mutation: deepMerge(Mutation, mutationResolvers),
|
137
|
-
Subscription: deepMerge(Subscription, subscriptionResolvers),
|
138
|
-
...scalarResolvers,
|
139
|
-
...resolvers
|
140
|
-
}
|
141
|
-
|
142
|
-
var merged = mergeSchemas({
|
143
|
-
schemas: [
|
144
|
-
await buildSchema({
|
145
|
-
pubSub: pubsub,
|
146
|
-
resolvers: schemas.resolverClasses,
|
147
|
-
// automatically create `schema.gql` file with schema definition
|
148
|
-
// in project's working directory
|
149
|
-
// or create the file with schema in selected path
|
150
|
-
emitSchemaFile: process.env.NODE_ENV == 'development'
|
151
|
-
// emitSchemaFile: path.resolve(__dirname, 'snapshots/schema', 'schema.gql')
|
152
|
-
})
|
153
|
-
],
|
154
|
-
typeDefs,
|
155
|
-
resolvers
|
156
|
-
})
|
157
|
-
|
158
|
-
Object.values(schemas.directives).map((directive: (schema: GraphQLSchema) => {}) => {
|
159
|
-
merged = directive(merged) as any
|
160
|
-
})
|
161
|
-
|
162
|
-
return merged
|
163
|
-
}
|