@teambit/graphql 0.0.572 → 0.0.576
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.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Harmony, SlotRegistry } from '@teambit/harmony';
|
|
3
3
|
import { Logger, LoggerMain } from '@teambit/logger';
|
|
4
4
|
import { Express } from 'express';
|
|
5
|
-
import {
|
|
5
|
+
import { PubSubEngine } from 'graphql-subscriptions';
|
|
6
6
|
import { Server } from 'http';
|
|
7
7
|
import { GraphQLServer } from './graphql-server';
|
|
8
8
|
import { Schema } from './schema';
|
|
@@ -17,6 +17,7 @@ export declare type GraphQLConfig = {
|
|
|
17
17
|
};
|
|
18
18
|
export declare type GraphQLServerSlot = SlotRegistry<GraphQLServer>;
|
|
19
19
|
export declare type SchemaSlot = SlotRegistry<Schema>;
|
|
20
|
+
export declare type PubSubSlot = SlotRegistry<PubSubEngine>;
|
|
20
21
|
export declare type GraphQLServerOptions = {
|
|
21
22
|
schemaSlot?: SchemaSlot;
|
|
22
23
|
app?: Express;
|
|
@@ -38,15 +39,15 @@ export declare class GraphqlMain {
|
|
|
38
39
|
* harmony context.
|
|
39
40
|
*/
|
|
40
41
|
private context;
|
|
41
|
-
/**
|
|
42
|
-
* graphql pubsub. allows to emit events to clients.
|
|
43
|
-
*/
|
|
44
|
-
readonly pubsub: PubSub;
|
|
45
42
|
/**
|
|
46
43
|
* logger extension.
|
|
47
44
|
*/
|
|
48
45
|
readonly logger: Logger;
|
|
49
46
|
private graphQLServerSlot;
|
|
47
|
+
/**
|
|
48
|
+
* graphql pubsub. allows to emit events to clients.
|
|
49
|
+
*/
|
|
50
|
+
private pubSubSlot;
|
|
50
51
|
constructor(
|
|
51
52
|
/**
|
|
52
53
|
* extension config
|
|
@@ -61,19 +62,24 @@ export declare class GraphqlMain {
|
|
|
61
62
|
*/
|
|
62
63
|
context: Harmony,
|
|
63
64
|
/**
|
|
64
|
-
*
|
|
65
|
+
* logger extension.
|
|
65
66
|
*/
|
|
66
|
-
|
|
67
|
+
logger: Logger, graphQLServerSlot: GraphQLServerSlot,
|
|
67
68
|
/**
|
|
68
|
-
*
|
|
69
|
+
* graphql pubsub. allows to emit events to clients.
|
|
69
70
|
*/
|
|
70
|
-
|
|
71
|
+
pubSubSlot: PubSubSlot);
|
|
72
|
+
get pubsub(): PubSubEngine;
|
|
71
73
|
private modules;
|
|
72
74
|
createServer(options: GraphQLServerOptions): Promise<Server>;
|
|
73
75
|
/**
|
|
74
76
|
* register a new graphql server.
|
|
75
77
|
*/
|
|
76
78
|
registerServer(server: GraphQLServer): this;
|
|
79
|
+
/**
|
|
80
|
+
* register a pubsub client
|
|
81
|
+
*/
|
|
82
|
+
registerPubSub(pubsub: PubSubEngine): this;
|
|
77
83
|
/**
|
|
78
84
|
* start a graphql server.
|
|
79
85
|
*/
|
|
@@ -90,7 +96,7 @@ export declare class GraphqlMain {
|
|
|
90
96
|
private createRootModule;
|
|
91
97
|
private buildModules;
|
|
92
98
|
private getModuleDependencies;
|
|
93
|
-
static slots: (((registerFn: () => string) => SlotRegistry<Schema>) | ((registerFn: () => string) => SlotRegistry<GraphQLServer>))[];
|
|
99
|
+
static slots: (((registerFn: () => string) => SlotRegistry<Schema>) | ((registerFn: () => string) => SlotRegistry<GraphQLServer>) | ((registerFn: () => string) => SlotRegistry<PubSubSlot>))[];
|
|
94
100
|
static defaultConfig: {
|
|
95
101
|
port: number;
|
|
96
102
|
subscriptionsPortRange: number[];
|
|
@@ -98,5 +104,5 @@ export declare class GraphqlMain {
|
|
|
98
104
|
};
|
|
99
105
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
100
106
|
static dependencies: import("@teambit/harmony").Aspect[];
|
|
101
|
-
static provider([loggerFactory]: [LoggerMain], config: GraphQLConfig, [moduleSlot, graphQLServerSlot]: [SchemaSlot, GraphQLServerSlot], context: Harmony): Promise<GraphqlMain>;
|
|
107
|
+
static provider([loggerFactory]: [LoggerMain], config: GraphQLConfig, [moduleSlot, graphQLServerSlot, pubSubSlot]: [SchemaSlot, GraphQLServerSlot, PubSubSlot], context: Harmony): Promise<GraphqlMain>;
|
|
102
108
|
}
|
|
@@ -208,22 +208,28 @@ class GraphqlMain {
|
|
|
208
208
|
*/
|
|
209
209
|
context,
|
|
210
210
|
/**
|
|
211
|
-
*
|
|
211
|
+
* logger extension.
|
|
212
212
|
*/
|
|
213
|
-
|
|
213
|
+
logger, graphQLServerSlot,
|
|
214
214
|
/**
|
|
215
|
-
*
|
|
215
|
+
* graphql pubsub. allows to emit events to clients.
|
|
216
216
|
*/
|
|
217
|
-
|
|
217
|
+
pubSubSlot) {
|
|
218
218
|
this.config = config;
|
|
219
219
|
this.moduleSlot = moduleSlot;
|
|
220
220
|
this.context = context;
|
|
221
|
-
this.pubsub = pubsub;
|
|
222
221
|
this.logger = logger;
|
|
223
222
|
this.graphQLServerSlot = graphQLServerSlot;
|
|
223
|
+
this.pubSubSlot = pubSubSlot;
|
|
224
224
|
(0, _defineProperty2().default)(this, "modules", new Map());
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
get pubsub() {
|
|
228
|
+
const pubSubSlots = this.pubSubSlot.values();
|
|
229
|
+
if (pubSubSlots.length) return pubSubSlots[0];
|
|
230
|
+
return new (_graphqlSubscriptions().PubSub)();
|
|
231
|
+
}
|
|
232
|
+
|
|
227
233
|
async createServer(options) {
|
|
228
234
|
const {
|
|
229
235
|
graphiql = true
|
|
@@ -280,6 +286,17 @@ class GraphqlMain {
|
|
|
280
286
|
this.graphQLServerSlot.register(server);
|
|
281
287
|
return this;
|
|
282
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* register a pubsub client
|
|
291
|
+
*/
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
registerPubSub(pubsub) {
|
|
295
|
+
const pubSubSlots = this.pubSubSlot.toArray();
|
|
296
|
+
if (pubSubSlots.length) throw new Error('can not register more then one pubsub provider');
|
|
297
|
+
this.pubSubSlot.register(pubsub);
|
|
298
|
+
return this;
|
|
299
|
+
}
|
|
283
300
|
/**
|
|
284
301
|
* start a graphql server.
|
|
285
302
|
*/
|
|
@@ -404,15 +421,16 @@ class GraphqlMain {
|
|
|
404
421
|
}).filter(module => !!module);
|
|
405
422
|
}
|
|
406
423
|
|
|
407
|
-
static async provider([loggerFactory], config, [moduleSlot, graphQLServerSlot], context) {
|
|
424
|
+
static async provider([loggerFactory], config, [moduleSlot, graphQLServerSlot, pubSubSlot], context) {
|
|
408
425
|
const logger = loggerFactory.createLogger(_graphql2().GraphqlAspect.id);
|
|
409
|
-
|
|
426
|
+
const graphqlMain = new GraphqlMain(config, moduleSlot, context, logger, graphQLServerSlot, pubSubSlot);
|
|
427
|
+
return graphqlMain;
|
|
410
428
|
}
|
|
411
429
|
|
|
412
430
|
}
|
|
413
431
|
|
|
414
432
|
exports.GraphqlMain = GraphqlMain;
|
|
415
|
-
(0, _defineProperty2().default)(GraphqlMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
|
|
433
|
+
(0, _defineProperty2().default)(GraphqlMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
|
|
416
434
|
(0, _defineProperty2().default)(GraphqlMain, "defaultConfig", {
|
|
417
435
|
port: 4000,
|
|
418
436
|
subscriptionsPortRange: [2000, 2100],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["graphql.main.runtime.ts"],"names":["Verb","GraphqlMain","constructor","config","moduleSlot","context","pubsub","logger","graphQLServerSlot","Map","createServer","options","graphiql","localSchema","createRootModule","schemaSlot","remoteSchemas","values","schemas","schema","concat","filter","x","app","use","origin","callback","credentials","request","res","params","customFormatErrorFn","err","error","Object","assign","ERR_CODE","originalError","errors","name","HTTP_CODE","code","rootValue","server","subscriptionsPort","subscriptionsPortRange","subscriptionServerPort","getPort","port","createSubscription","proxySubscription","registerServer","register","listen","serverPort","subServer","info","subscriptionsPath","range","from","to","Port","websocketServer","response","writeHead","end","debug","SubscriptionServer","execute","subscribe","onConnect","onWsConnect","path","proxServer","httpProxy","createProxyServer","on","req","socket","head","url","ws","target","host","modules","buildModules","GraphQLModule","imports","schemaSlots","toArray","map","extensionId","moduleDeps","getModuleDependencies","module","typeDefs","resolvers","session","verb","headers","READ","set","extension","extensions","get","Error","deps","getDependencies","ids","dep","id","Array","entries","depId","includes","undefined","provider","loggerFactory","createLogger","GraphqlAspect","PubSub","Slot","withType","MainRuntime","LoggerAspect","addRuntime"],"mappings":"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","sourcesContent":["import { mergeSchemas } from 'graphql-tools';\nimport { GraphQLModule } from '@graphql-modules/core';\nimport { MainRuntime } from '@teambit/cli';\nimport { Harmony, Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport express, { Express } from 'express';\nimport { graphqlHTTP } from 'express-graphql';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport { execute, subscribe } from 'graphql';\nimport { PubSub } from 'graphql-subscriptions';\nimport { createServer, Server } from 'http';\nimport httpProxy from 'http-proxy';\nimport { SubscriptionServer } from 'subscriptions-transport-ws';\nimport cors from 'cors';\nimport { GraphQLServer } from './graphql-server';\nimport { createRemoteSchemas } from './create-remote-schemas';\nimport { GraphqlAspect } from './graphql.aspect';\nimport { Schema } from './schema';\n\nexport enum Verb {\n WRITE = 'write',\n READ = 'read',\n}\n\nexport type GraphQLConfig = {\n port: number;\n subscriptionsPortRange: number[];\n subscriptionsPath: string;\n};\n\nexport type GraphQLServerSlot = SlotRegistry<GraphQLServer>;\n\nexport type SchemaSlot = SlotRegistry<Schema>;\n\nexport type GraphQLServerOptions = {\n schemaSlot?: SchemaSlot;\n app?: Express;\n graphiql?: boolean;\n remoteSchemas?: GraphQLServer[];\n subscriptionsPortRange?: number[];\n onWsConnect?: Function;\n};\n\nexport class GraphqlMain {\n constructor(\n /**\n * extension config\n */\n readonly config: GraphQLConfig,\n\n /**\n * slot for registering graphql modules\n */\n private moduleSlot: SchemaSlot,\n\n /**\n * harmony context.\n */\n private context: Harmony,\n\n /**\n * graphql pubsub. allows to emit events to clients.\n */\n readonly pubsub: PubSub,\n\n /**\n * logger extension.\n */\n readonly logger: Logger,\n\n private graphQLServerSlot: GraphQLServerSlot\n ) {}\n\n private modules = new Map<string, GraphQLModule>();\n\n async createServer(options: GraphQLServerOptions) {\n const { graphiql = true } = options;\n const localSchema = this.createRootModule(options.schemaSlot);\n const remoteSchemas = await createRemoteSchemas(options.remoteSchemas || this.graphQLServerSlot.values());\n const schemas = [localSchema.schema].concat(remoteSchemas).filter((x) => x);\n const schema = mergeSchemas({\n schemas,\n });\n\n // TODO: @guy please consider to refactor to express extension.\n const app = options.app || express();\n app.use(\n // @ts-ignore todo: it's not clear what's the issue.\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n\n app.use(\n '/graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n graphqlHTTP((request, res, params) => ({\n customFormatErrorFn: (err) => {\n this.logger.error('graphql got an error during running the following query:', params);\n this.logger.error('graphql error ', err);\n return Object.assign(err, {\n // @ts-ignore\n ERR_CODE: err?.originalError?.errors?.[0].ERR_CODE || err.originalError?.constructor?.name,\n // @ts-ignore\n HTTP_CODE: err?.originalError?.errors?.[0].HTTP_CODE || err.originalError?.code,\n });\n },\n schema,\n rootValue: request,\n graphiql,\n }))\n );\n\n const server = createServer(app);\n const subscriptionsPort = options.subscriptionsPortRange || this.config.subscriptionsPortRange;\n const subscriptionServerPort = await this.getPort(subscriptionsPort);\n const { port } = await this.createSubscription(options, subscriptionServerPort);\n this.proxySubscription(server, port);\n\n return server;\n }\n\n /**\n * register a new graphql server.\n */\n registerServer(server: GraphQLServer) {\n this.graphQLServerSlot.register(server);\n return this;\n }\n\n /**\n * start a graphql server.\n */\n async listen(port?: number, server?: Server, app?: Express) {\n const serverPort = port || this.config.port;\n const subServer = server || (await this.createServer({ app }));\n\n subServer.listen(serverPort, () => {\n this.logger.info(`API Server over HTTP is now running on http://localhost:${serverPort}`);\n this.logger.info(\n `API Server over web socket with subscriptions is now running on ws://localhost:${serverPort}/${this.config.subscriptionsPath}`\n );\n });\n }\n\n /**\n * register a new graphql module.\n */\n register(schema: Schema) {\n // const module = new GraphQLModule(schema);\n this.moduleSlot.register(schema);\n return this;\n }\n\n private async getPort(range: number[]) {\n const [from, to] = range;\n return Port.getPort(from, to);\n }\n\n /** create Subscription server with different port */\n\n private async createSubscription(options: GraphQLServerOptions, port: number) {\n // Create WebSocket listener server\n const websocketServer = createServer((request, response) => {\n response.writeHead(404);\n response.end();\n });\n\n // Bind it to port and start listening\n websocketServer.listen(port, () =>\n this.logger.debug(`Websocket Server is now running on http://localhost:${port}`)\n );\n\n const localSchema = this.createRootModule(options.schemaSlot);\n const remoteSchemas = await createRemoteSchemas(options.remoteSchemas || this.graphQLServerSlot.values());\n const schemas = [localSchema.schema].concat(remoteSchemas).filter((x) => x);\n const schema = mergeSchemas({\n schemas,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const subServer = new SubscriptionServer(\n {\n execute,\n subscribe,\n schema,\n onConnect: options.onWsConnect,\n },\n {\n server: websocketServer,\n path: this.config.subscriptionsPath,\n }\n );\n return { subServer, port };\n }\n /** proxy ws Subscription server to avoid conflict with different websocket connections */\n\n private proxySubscription(server: Server, port: number) {\n const proxServer = httpProxy.createProxyServer();\n const subscriptionsPath = this.config.subscriptionsPath;\n const logger = this.logger;\n server.on('upgrade', function (req, socket, head) {\n if (req.url === subscriptionsPath) {\n logger.debug(`proxy from ${req.url} to ${port}`);\n proxServer.ws(req, socket, head, { target: { host: 'localhost', port } });\n }\n });\n }\n\n private createRootModule(schemaSlot?: SchemaSlot) {\n const modules = this.buildModules(schemaSlot);\n\n return new GraphQLModule({\n imports: modules,\n });\n }\n\n private buildModules(schemaSlot?: SchemaSlot) {\n const schemaSlots = schemaSlot ? schemaSlot.toArray() : this.moduleSlot.toArray();\n return schemaSlots.map(([extensionId, schema]) => {\n const moduleDeps = this.getModuleDependencies(extensionId);\n\n const module = new GraphQLModule({\n typeDefs: schema.typeDefs,\n resolvers: schema.resolvers,\n imports: moduleDeps,\n context: (session) => {\n return {\n ...session,\n verb: session?.headers?.['x-verb'] || Verb.READ,\n };\n },\n });\n\n this.modules.set(extensionId, module);\n\n return module;\n });\n }\n\n private getModuleDependencies(extensionId: string): GraphQLModule[] {\n const extension = this.context.extensions.get(extensionId);\n if (!extension) throw new Error(`aspect ${extensionId} was not found`);\n const deps = this.context.getDependencies(extension);\n const ids = deps.map((dep) => dep.id);\n\n // @ts-ignore check :TODO why types are breaking here.\n return Array.from(this.modules.entries())\n .map(([depId, module]) => {\n const dep = ids.includes(depId);\n if (!dep) return undefined;\n return module;\n })\n .filter((module) => !!module);\n }\n\n static slots = [Slot.withType<Schema>(), Slot.withType<GraphQLServer>()];\n\n static defaultConfig = {\n port: 4000,\n subscriptionsPortRange: [2000, 2100],\n subscriptionsPath: '/subscriptions',\n };\n\n static runtime = MainRuntime;\n static dependencies = [LoggerAspect];\n\n static async provider(\n [loggerFactory]: [LoggerMain],\n config: GraphQLConfig,\n [moduleSlot, graphQLServerSlot]: [SchemaSlot, GraphQLServerSlot],\n context: Harmony\n ) {\n const logger = loggerFactory.createLogger(GraphqlAspect.id);\n return new GraphqlMain(config, moduleSlot, context, new PubSub(), logger, graphQLServerSlot);\n }\n}\n\nGraphqlAspect.addRuntime(GraphqlMain);\n"]}
|
|
1
|
+
{"version":3,"sources":["graphql.main.runtime.ts"],"names":["Verb","GraphqlMain","constructor","config","moduleSlot","context","logger","graphQLServerSlot","pubSubSlot","Map","pubsub","pubSubSlots","values","length","PubSub","createServer","options","graphiql","localSchema","createRootModule","schemaSlot","remoteSchemas","schemas","schema","concat","filter","x","app","use","origin","callback","credentials","request","res","params","customFormatErrorFn","err","error","Object","assign","ERR_CODE","originalError","errors","name","HTTP_CODE","code","rootValue","server","subscriptionsPort","subscriptionsPortRange","subscriptionServerPort","getPort","port","createSubscription","proxySubscription","registerServer","register","registerPubSub","toArray","Error","listen","serverPort","subServer","info","subscriptionsPath","range","from","to","Port","websocketServer","response","writeHead","end","debug","SubscriptionServer","execute","subscribe","onConnect","onWsConnect","path","proxServer","httpProxy","createProxyServer","on","req","socket","head","url","ws","target","host","modules","buildModules","GraphQLModule","imports","schemaSlots","map","extensionId","moduleDeps","getModuleDependencies","module","typeDefs","resolvers","session","verb","headers","READ","set","extension","extensions","get","deps","getDependencies","ids","dep","id","Array","entries","depId","includes","undefined","provider","loggerFactory","createLogger","GraphqlAspect","graphqlMain","Slot","withType","MainRuntime","LoggerAspect","addRuntime"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;IAGYA,I;;;WAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;GAAAA,I,oBAAAA,I;;AA0BL,MAAMC,WAAN,CAAkB;AACvBC,EAAAA,WAAW;AACT;AACJ;AACA;AACaC,EAAAA,MAJA;AAMT;AACJ;AACA;AACYC,EAAAA,UATC;AAWT;AACJ;AACA;AACYC,EAAAA,OAdC;AAgBT;AACJ;AACA;AACaC,EAAAA,MAnBA,EAqBDC,iBArBC;AAuBT;AACJ;AACA;AACYC,EAAAA,UA1BC,EA2BT;AAAA,SAvBSL,MAuBT,GAvBSA,MAuBT;AAAA,SAlBQC,UAkBR,GAlBQA,UAkBR;AAAA,SAbQC,OAaR,GAbQA,OAaR;AAAA,SARSC,MAQT,GARSA,MAQT;AAAA,SANQC,iBAMR,GANQA,iBAMR;AAAA,SADQC,UACR,GADQA,UACR;AAAA,qDAQgB,IAAIC,GAAJ,EARhB;AAAE;;AAEM,MAANC,MAAM,GAAiB;AACzB,UAAMC,WAAW,GAAG,KAAKH,UAAL,CAAgBI,MAAhB,EAApB;AACA,QAAID,WAAW,CAACE,MAAhB,EAAwB,OAAOF,WAAW,CAAC,CAAD,CAAlB;AACxB,WAAO,KAAIG,8BAAJ,GAAP;AACD;;AAIiB,QAAZC,YAAY,CAACC,OAAD,EAAgC;AAChD,UAAM;AAAEC,MAAAA,QAAQ,GAAG;AAAb,QAAsBD,OAA5B;AACA,UAAME,WAAW,GAAG,KAAKC,gBAAL,CAAsBH,OAAO,CAACI,UAA9B,CAApB;AACA,UAAMC,aAAa,GAAG,MAAM,gDAAoBL,OAAO,CAACK,aAAR,IAAyB,KAAKd,iBAAL,CAAuBK,MAAvB,EAA7C,CAA5B;AACA,UAAMU,OAAO,GAAG,CAACJ,WAAW,CAACK,MAAb,EAAqBC,MAArB,CAA4BH,aAA5B,EAA2CI,MAA3C,CAAmDC,CAAD,IAAOA,CAAzD,CAAhB;AACA,UAAMH,MAAM,GAAG,kCAAa;AAC1BD,MAAAA;AAD0B,KAAb,CAAf,CALgD,CAShD;;AACA,UAAMK,GAAG,GAAGX,OAAO,CAACW,GAAR,IAAe,yBAA3B;AACAA,IAAAA,GAAG,CAACC,GAAJ,EACE;AACA,yBAAK;AACHC,MAAAA,MAAM,CAACA,MAAD,EAASC,QAAT,EAAmB;AACvBA,QAAAA,QAAQ,CAAC,IAAD,EAAO,IAAP,CAAR;AACD,OAHE;;AAIHC,MAAAA,WAAW,EAAE;AAJV,KAAL,CAFF;AAUAJ,IAAAA,GAAG,CAACC,GAAJ,CACE,UADF,EAEE;AACA,uCAAY,CAACI,OAAD,EAAUC,GAAV,EAAeC,MAAf,MAA2B;AACrCC,MAAAA,mBAAmB,EAAGC,GAAD,IAAS;AAAA;;AAC5B,aAAK9B,MAAL,CAAY+B,KAAZ,CAAkB,0DAAlB,EAA8EH,MAA9E;AACA,aAAK5B,MAAL,CAAY+B,KAAZ,CAAkB,gBAAlB,EAAoCD,GAApC;AACA,eAAOE,MAAM,CAACC,MAAP,CAAcH,GAAd,EAAmB;AACxB;AACAI,UAAAA,QAAQ,EAAE,CAAAJ,GAAG,SAAH,IAAAA,GAAG,WAAH,kCAAAA,GAAG,CAAEK,aAAL,mGAAoBC,MAApB,gFAA6B,CAA7B,EAAgCF,QAAhC,6BAA4CJ,GAAG,CAACK,aAAhD,iFAA4C,oBAAmBvC,WAA/D,0DAA4C,sBAAgCyC,IAA5E,CAFc;AAGxB;AACAC,UAAAA,SAAS,EAAE,CAAAR,GAAG,SAAH,IAAAA,GAAG,WAAH,mCAAAA,GAAG,CAAEK,aAAL,qGAAoBC,MAApB,gFAA6B,CAA7B,EAAgCE,SAAhC,6BAA6CR,GAAG,CAACK,aAAjD,wDAA6C,oBAAmBI,IAAhE;AAJa,SAAnB,CAAP;AAMD,OAVoC;AAWrCtB,MAAAA,MAXqC;AAYrCuB,MAAAA,SAAS,EAAEd,OAZ0B;AAarCf,MAAAA;AAbqC,KAA3B,CAAZ,CAHF;AAoBA,UAAM8B,MAAM,GAAG,0BAAapB,GAAb,CAAf;AACA,UAAMqB,iBAAiB,GAAGhC,OAAO,CAACiC,sBAAR,IAAkC,KAAK9C,MAAL,CAAY8C,sBAAxE;AACA,UAAMC,sBAAsB,GAAG,MAAM,KAAKC,OAAL,CAAaH,iBAAb,CAArC;AACA,UAAM;AAAEI,MAAAA;AAAF,QAAW,MAAM,KAAKC,kBAAL,CAAwBrC,OAAxB,EAAiCkC,sBAAjC,CAAvB;AACA,SAAKI,iBAAL,CAAuBP,MAAvB,EAA+BK,IAA/B;AAEA,WAAOL,MAAP;AACD;AAED;AACF;AACA;;;AACEQ,EAAAA,cAAc,CAACR,MAAD,EAAwB;AACpC,SAAKxC,iBAAL,CAAuBiD,QAAvB,CAAgCT,MAAhC;AACA,WAAO,IAAP;AACD;AAED;AACF;AACA;;;AACEU,EAAAA,cAAc,CAAC/C,MAAD,EAAuB;AACnC,UAAMC,WAAW,GAAG,KAAKH,UAAL,CAAgBkD,OAAhB,EAApB;AACA,QAAI/C,WAAW,CAACE,MAAhB,EAAwB,MAAM,IAAI8C,KAAJ,CAAU,gDAAV,CAAN;AACxB,SAAKnD,UAAL,CAAgBgD,QAAhB,CAAyB9C,MAAzB;AACA,WAAO,IAAP;AACD;AAED;AACF;AACA;;;AACc,QAANkD,MAAM,CAACR,IAAD,EAAgBL,MAAhB,EAAiCpB,GAAjC,EAAgD;AAC1D,UAAMkC,UAAU,GAAGT,IAAI,IAAI,KAAKjD,MAAL,CAAYiD,IAAvC;AACA,UAAMU,SAAS,GAAGf,MAAM,KAAK,MAAM,KAAKhC,YAAL,CAAkB;AAAEY,MAAAA;AAAF,KAAlB,CAAX,CAAxB;AAEAmC,IAAAA,SAAS,CAACF,MAAV,CAAiBC,UAAjB,EAA6B,MAAM;AACjC,WAAKvD,MAAL,CAAYyD,IAAZ,CAAkB,2DAA0DF,UAAW,EAAvF;AACA,WAAKvD,MAAL,CAAYyD,IAAZ,CACG,kFAAiFF,UAAW,IAAG,KAAK1D,MAAL,CAAY6D,iBAAkB,EADhI;AAGD,KALD;AAMD;AAED;AACF;AACA;;;AACER,EAAAA,QAAQ,CAACjC,MAAD,EAAiB;AACvB;AACA,SAAKnB,UAAL,CAAgBoD,QAAhB,CAAyBjC,MAAzB;AACA,WAAO,IAAP;AACD;;AAEoB,QAAP4B,OAAO,CAACc,KAAD,EAAkB;AACrC,UAAM,CAACC,IAAD,EAAOC,EAAP,IAAaF,KAAnB;AACA,WAAOG,uBAAKjB,OAAL,CAAae,IAAb,EAAmBC,EAAnB,CAAP;AACD;AAED;;;AAEgC,QAAlBd,kBAAkB,CAACrC,OAAD,EAAgCoC,IAAhC,EAA8C;AAC5E;AACA,UAAMiB,eAAe,GAAG,0BAAa,CAACrC,OAAD,EAAUsC,QAAV,KAAuB;AAC1DA,MAAAA,QAAQ,CAACC,SAAT,CAAmB,GAAnB;AACAD,MAAAA,QAAQ,CAACE,GAAT;AACD,KAHuB,CAAxB,CAF4E,CAO5E;;AACAH,IAAAA,eAAe,CAACT,MAAhB,CAAuBR,IAAvB,EAA6B,MAC3B,KAAK9C,MAAL,CAAYmE,KAAZ,CAAmB,uDAAsDrB,IAAK,EAA9E,CADF;AAIA,UAAMlC,WAAW,GAAG,KAAKC,gBAAL,CAAsBH,OAAO,CAACI,UAA9B,CAApB;AACA,UAAMC,aAAa,GAAG,MAAM,gDAAoBL,OAAO,CAACK,aAAR,IAAyB,KAAKd,iBAAL,CAAuBK,MAAvB,EAA7C,CAA5B;AACA,UAAMU,OAAO,GAAG,CAACJ,WAAW,CAACK,MAAb,EAAqBC,MAArB,CAA4BH,aAA5B,EAA2CI,MAA3C,CAAmDC,CAAD,IAAOA,CAAzD,CAAhB;AACA,UAAMH,MAAM,GAAG,kCAAa;AAC1BD,MAAAA;AAD0B,KAAb,CAAf,CAf4E,CAmB5E;;AACA,UAAMwC,SAAS,GAAG,KAAIY,8CAAJ,EAChB;AACEC,MAAAA,OAAO,EAAPA,kBADF;AAEEC,MAAAA,SAAS,EAATA,oBAFF;AAGErD,MAAAA,MAHF;AAIEsD,MAAAA,SAAS,EAAE7D,OAAO,CAAC8D;AAJrB,KADgB,EAOhB;AACE/B,MAAAA,MAAM,EAAEsB,eADV;AAEEU,MAAAA,IAAI,EAAE,KAAK5E,MAAL,CAAY6D;AAFpB,KAPgB,CAAlB;AAYA,WAAO;AAAEF,MAAAA,SAAF;AAAaV,MAAAA;AAAb,KAAP;AACD;AACD;;;AAEQE,EAAAA,iBAAiB,CAACP,MAAD,EAAiBK,IAAjB,EAA+B;AACtD,UAAM4B,UAAU,GAAGC,qBAAUC,iBAAV,EAAnB;;AACA,UAAMlB,iBAAiB,GAAG,KAAK7D,MAAL,CAAY6D,iBAAtC;AACA,UAAM1D,MAAM,GAAG,KAAKA,MAApB;AACAyC,IAAAA,MAAM,CAACoC,EAAP,CAAU,SAAV,EAAqB,UAAUC,GAAV,EAAeC,MAAf,EAAuBC,IAAvB,EAA6B;AAChD,UAAIF,GAAG,CAACG,GAAJ,KAAYvB,iBAAhB,EAAmC;AACjC1D,QAAAA,MAAM,CAACmE,KAAP,CAAc,cAAaW,GAAG,CAACG,GAAI,OAAMnC,IAAK,EAA9C;AACA4B,QAAAA,UAAU,CAACQ,EAAX,CAAcJ,GAAd,EAAmBC,MAAnB,EAA2BC,IAA3B,EAAiC;AAAEG,UAAAA,MAAM,EAAE;AAAEC,YAAAA,IAAI,EAAE,WAAR;AAAqBtC,YAAAA;AAArB;AAAV,SAAjC;AACD;AACF,KALD;AAMD;;AAEOjC,EAAAA,gBAAgB,CAACC,UAAD,EAA0B;AAChD,UAAMuE,OAAO,GAAG,KAAKC,YAAL,CAAkBxE,UAAlB,CAAhB;AAEA,WAAO,KAAIyE,qBAAJ,EAAkB;AACvBC,MAAAA,OAAO,EAAEH;AADc,KAAlB,CAAP;AAGD;;AAEOC,EAAAA,YAAY,CAACxE,UAAD,EAA0B;AAC5C,UAAM2E,WAAW,GAAG3E,UAAU,GAAGA,UAAU,CAACsC,OAAX,EAAH,GAA0B,KAAKtD,UAAL,CAAgBsD,OAAhB,EAAxD;AACA,WAAOqC,WAAW,CAACC,GAAZ,CAAgB,CAAC,CAACC,WAAD,EAAc1E,MAAd,CAAD,KAA2B;AAChD,YAAM2E,UAAU,GAAG,KAAKC,qBAAL,CAA2BF,WAA3B,CAAnB;AAEA,YAAMG,MAAM,GAAG,KAAIP,qBAAJ,EAAkB;AAC/BQ,QAAAA,QAAQ,EAAE9E,MAAM,CAAC8E,QADc;AAE/BC,QAAAA,SAAS,EAAE/E,MAAM,CAAC+E,SAFa;AAG/BR,QAAAA,OAAO,EAAEI,UAHsB;AAI/B7F,QAAAA,OAAO,EAAGkG,OAAD,IAAa;AAAA;;AACpB,iDACKA,OADL;AAEEC,YAAAA,IAAI,EAAE,CAAAD,OAAO,SAAP,IAAAA,OAAO,WAAP,gCAAAA,OAAO,CAAEE,OAAT,sEAAmB,QAAnB,MAAgCzG,IAAI,CAAC0G;AAF7C;AAID;AAT8B,OAAlB,CAAf;AAYA,WAAKf,OAAL,CAAagB,GAAb,CAAiBV,WAAjB,EAA8BG,MAA9B;AAEA,aAAOA,MAAP;AACD,KAlBM,CAAP;AAmBD;;AAEOD,EAAAA,qBAAqB,CAACF,WAAD,EAAuC;AAClE,UAAMW,SAAS,GAAG,KAAKvG,OAAL,CAAawG,UAAb,CAAwBC,GAAxB,CAA4Bb,WAA5B,CAAlB;AACA,QAAI,CAACW,SAAL,EAAgB,MAAM,IAAIjD,KAAJ,CAAW,UAASsC,WAAY,gBAAhC,CAAN;AAChB,UAAMc,IAAI,GAAG,KAAK1G,OAAL,CAAa2G,eAAb,CAA6BJ,SAA7B,CAAb;AACA,UAAMK,GAAG,GAAGF,IAAI,CAACf,GAAL,CAAUkB,GAAD,IAASA,GAAG,CAACC,EAAtB,CAAZ,CAJkE,CAMlE;;AACA,WAAOC,KAAK,CAAClD,IAAN,CAAW,KAAKyB,OAAL,CAAa0B,OAAb,EAAX,EACJrB,GADI,CACA,CAAC,CAACsB,KAAD,EAAQlB,MAAR,CAAD,KAAqB;AACxB,YAAMc,GAAG,GAAGD,GAAG,CAACM,QAAJ,CAAaD,KAAb,CAAZ;AACA,UAAI,CAACJ,GAAL,EAAU,OAAOM,SAAP;AACV,aAAOpB,MAAP;AACD,KALI,EAMJ3E,MANI,CAMI2E,MAAD,IAAY,CAAC,CAACA,MANjB,CAAP;AAOD;;AAaoB,eAARqB,QAAQ,CACnB,CAACC,aAAD,CADmB,EAEnBvH,MAFmB,EAGnB,CAACC,UAAD,EAAaG,iBAAb,EAAgCC,UAAhC,CAHmB,EAInBH,OAJmB,EAKnB;AACA,UAAMC,MAAM,GAAGoH,aAAa,CAACC,YAAd,CAA2BC,0BAAcT,EAAzC,CAAf;AACA,UAAMU,WAAW,GAAG,IAAI5H,WAAJ,CAAgBE,MAAhB,EAAwBC,UAAxB,EAAoCC,OAApC,EAA6CC,MAA7C,EAAqDC,iBAArD,EAAwEC,UAAxE,CAApB;AACA,WAAOqH,WAAP;AACD;;AA5PsB;;;gCAAZ5H,W,WAwOI,CAAC6H,gBAAKC,QAAL,EAAD,EAA0BD,gBAAKC,QAAL,EAA1B,EAA0DD,gBAAKC,QAAL,EAA1D,C;gCAxOJ9H,W,mBA0OY;AACrBmD,EAAAA,IAAI,EAAE,IADe;AAErBH,EAAAA,sBAAsB,EAAE,CAAC,IAAD,EAAO,IAAP,CAFH;AAGrBe,EAAAA,iBAAiB,EAAE;AAHE,C;gCA1OZ/D,W,aAgPM+H,kB;gCAhPN/H,W,kBAiPW,CAACgI,sBAAD,C;;AAcxBL,0BAAcM,UAAd,CAAyBjI,WAAzB","sourcesContent":["import { mergeSchemas } from 'graphql-tools';\nimport { GraphQLModule } from '@graphql-modules/core';\nimport { MainRuntime } from '@teambit/cli';\nimport { Harmony, Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport express, { Express } from 'express';\nimport { graphqlHTTP } from 'express-graphql';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport { execute, subscribe } from 'graphql';\nimport { PubSubEngine, PubSub } from 'graphql-subscriptions';\nimport { createServer, Server } from 'http';\nimport httpProxy from 'http-proxy';\nimport { SubscriptionServer } from 'subscriptions-transport-ws';\nimport cors from 'cors';\nimport { GraphQLServer } from './graphql-server';\nimport { createRemoteSchemas } from './create-remote-schemas';\nimport { GraphqlAspect } from './graphql.aspect';\nimport { Schema } from './schema';\n\nexport enum Verb {\n WRITE = 'write',\n READ = 'read',\n}\n\nexport type GraphQLConfig = {\n port: number;\n subscriptionsPortRange: number[];\n subscriptionsPath: string;\n};\n\nexport type GraphQLServerSlot = SlotRegistry<GraphQLServer>;\n\nexport type SchemaSlot = SlotRegistry<Schema>;\n\nexport type PubSubSlot = SlotRegistry<PubSubEngine>;\n\nexport type GraphQLServerOptions = {\n schemaSlot?: SchemaSlot;\n app?: Express;\n graphiql?: boolean;\n remoteSchemas?: GraphQLServer[];\n subscriptionsPortRange?: number[];\n onWsConnect?: Function;\n};\n\nexport class GraphqlMain {\n constructor(\n /**\n * extension config\n */\n readonly config: GraphQLConfig,\n\n /**\n * slot for registering graphql modules\n */\n private moduleSlot: SchemaSlot,\n\n /**\n * harmony context.\n */\n private context: Harmony,\n\n /**\n * logger extension.\n */\n readonly logger: Logger,\n\n private graphQLServerSlot: GraphQLServerSlot,\n\n /**\n * graphql pubsub. allows to emit events to clients.\n */\n private pubSubSlot: PubSubSlot\n ) {}\n\n get pubsub(): PubSubEngine {\n const pubSubSlots = this.pubSubSlot.values();\n if (pubSubSlots.length) return pubSubSlots[0];\n return new PubSub();\n }\n\n private modules = new Map<string, GraphQLModule>();\n\n async createServer(options: GraphQLServerOptions) {\n const { graphiql = true } = options;\n const localSchema = this.createRootModule(options.schemaSlot);\n const remoteSchemas = await createRemoteSchemas(options.remoteSchemas || this.graphQLServerSlot.values());\n const schemas = [localSchema.schema].concat(remoteSchemas).filter((x) => x);\n const schema = mergeSchemas({\n schemas,\n });\n\n // TODO: @guy please consider to refactor to express extension.\n const app = options.app || express();\n app.use(\n // @ts-ignore todo: it's not clear what's the issue.\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n\n app.use(\n '/graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n graphqlHTTP((request, res, params) => ({\n customFormatErrorFn: (err) => {\n this.logger.error('graphql got an error during running the following query:', params);\n this.logger.error('graphql error ', err);\n return Object.assign(err, {\n // @ts-ignore\n ERR_CODE: err?.originalError?.errors?.[0].ERR_CODE || err.originalError?.constructor?.name,\n // @ts-ignore\n HTTP_CODE: err?.originalError?.errors?.[0].HTTP_CODE || err.originalError?.code,\n });\n },\n schema,\n rootValue: request,\n graphiql,\n }))\n );\n\n const server = createServer(app);\n const subscriptionsPort = options.subscriptionsPortRange || this.config.subscriptionsPortRange;\n const subscriptionServerPort = await this.getPort(subscriptionsPort);\n const { port } = await this.createSubscription(options, subscriptionServerPort);\n this.proxySubscription(server, port);\n\n return server;\n }\n\n /**\n * register a new graphql server.\n */\n registerServer(server: GraphQLServer) {\n this.graphQLServerSlot.register(server);\n return this;\n }\n\n /**\n * register a pubsub client\n */\n registerPubSub(pubsub: PubSubEngine) {\n const pubSubSlots = this.pubSubSlot.toArray();\n if (pubSubSlots.length) throw new Error('can not register more then one pubsub provider');\n this.pubSubSlot.register(pubsub);\n return this;\n }\n\n /**\n * start a graphql server.\n */\n async listen(port?: number, server?: Server, app?: Express) {\n const serverPort = port || this.config.port;\n const subServer = server || (await this.createServer({ app }));\n\n subServer.listen(serverPort, () => {\n this.logger.info(`API Server over HTTP is now running on http://localhost:${serverPort}`);\n this.logger.info(\n `API Server over web socket with subscriptions is now running on ws://localhost:${serverPort}/${this.config.subscriptionsPath}`\n );\n });\n }\n\n /**\n * register a new graphql module.\n */\n register(schema: Schema) {\n // const module = new GraphQLModule(schema);\n this.moduleSlot.register(schema);\n return this;\n }\n\n private async getPort(range: number[]) {\n const [from, to] = range;\n return Port.getPort(from, to);\n }\n\n /** create Subscription server with different port */\n\n private async createSubscription(options: GraphQLServerOptions, port: number) {\n // Create WebSocket listener server\n const websocketServer = createServer((request, response) => {\n response.writeHead(404);\n response.end();\n });\n\n // Bind it to port and start listening\n websocketServer.listen(port, () =>\n this.logger.debug(`Websocket Server is now running on http://localhost:${port}`)\n );\n\n const localSchema = this.createRootModule(options.schemaSlot);\n const remoteSchemas = await createRemoteSchemas(options.remoteSchemas || this.graphQLServerSlot.values());\n const schemas = [localSchema.schema].concat(remoteSchemas).filter((x) => x);\n const schema = mergeSchemas({\n schemas,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const subServer = new SubscriptionServer(\n {\n execute,\n subscribe,\n schema,\n onConnect: options.onWsConnect,\n },\n {\n server: websocketServer,\n path: this.config.subscriptionsPath,\n }\n );\n return { subServer, port };\n }\n /** proxy ws Subscription server to avoid conflict with different websocket connections */\n\n private proxySubscription(server: Server, port: number) {\n const proxServer = httpProxy.createProxyServer();\n const subscriptionsPath = this.config.subscriptionsPath;\n const logger = this.logger;\n server.on('upgrade', function (req, socket, head) {\n if (req.url === subscriptionsPath) {\n logger.debug(`proxy from ${req.url} to ${port}`);\n proxServer.ws(req, socket, head, { target: { host: 'localhost', port } });\n }\n });\n }\n\n private createRootModule(schemaSlot?: SchemaSlot) {\n const modules = this.buildModules(schemaSlot);\n\n return new GraphQLModule({\n imports: modules,\n });\n }\n\n private buildModules(schemaSlot?: SchemaSlot) {\n const schemaSlots = schemaSlot ? schemaSlot.toArray() : this.moduleSlot.toArray();\n return schemaSlots.map(([extensionId, schema]) => {\n const moduleDeps = this.getModuleDependencies(extensionId);\n\n const module = new GraphQLModule({\n typeDefs: schema.typeDefs,\n resolvers: schema.resolvers,\n imports: moduleDeps,\n context: (session) => {\n return {\n ...session,\n verb: session?.headers?.['x-verb'] || Verb.READ,\n };\n },\n });\n\n this.modules.set(extensionId, module);\n\n return module;\n });\n }\n\n private getModuleDependencies(extensionId: string): GraphQLModule[] {\n const extension = this.context.extensions.get(extensionId);\n if (!extension) throw new Error(`aspect ${extensionId} was not found`);\n const deps = this.context.getDependencies(extension);\n const ids = deps.map((dep) => dep.id);\n\n // @ts-ignore check :TODO why types are breaking here.\n return Array.from(this.modules.entries())\n .map(([depId, module]) => {\n const dep = ids.includes(depId);\n if (!dep) return undefined;\n return module;\n })\n .filter((module) => !!module);\n }\n\n static slots = [Slot.withType<Schema>(), Slot.withType<GraphQLServer>(), Slot.withType<PubSubSlot>()];\n\n static defaultConfig = {\n port: 4000,\n subscriptionsPortRange: [2000, 2100],\n subscriptionsPath: '/subscriptions',\n };\n\n static runtime = MainRuntime;\n static dependencies = [LoggerAspect];\n\n static async provider(\n [loggerFactory]: [LoggerMain],\n config: GraphQLConfig,\n [moduleSlot, graphQLServerSlot, pubSubSlot]: [SchemaSlot, GraphQLServerSlot, PubSubSlot],\n context: Harmony\n ) {\n const logger = loggerFactory.createLogger(GraphqlAspect.id);\n const graphqlMain = new GraphqlMain(config, moduleSlot, context, logger, graphQLServerSlot, pubSubSlot);\n return graphqlMain;\n }\n}\n\nGraphqlAspect.addRuntime(GraphqlMain);\n"]}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/graphql",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.576",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/harmony/graphql",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.harmony",
|
|
8
8
|
"name": "graphql",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.576"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@teambit/harmony": "0.2.11",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"bufferutil": "4.0.3",
|
|
33
33
|
"@babel/runtime": "7.12.18",
|
|
34
34
|
"core-js": "^3.0.0",
|
|
35
|
-
"@teambit/cli": "0.0.
|
|
36
|
-
"@teambit/logger": "0.0.
|
|
37
|
-
"@teambit/toolbox.network.get-port": "0.0.
|
|
38
|
-
"@teambit/preview": "0.0.
|
|
39
|
-
"@teambit/ui": "0.0.
|
|
40
|
-
"@teambit/ui-foundation.ui.is-browser": "0.0.
|
|
35
|
+
"@teambit/cli": "0.0.398",
|
|
36
|
+
"@teambit/logger": "0.0.486",
|
|
37
|
+
"@teambit/toolbox.network.get-port": "0.0.102",
|
|
38
|
+
"@teambit/preview": "0.0.576",
|
|
39
|
+
"@teambit/ui": "0.0.576",
|
|
40
|
+
"@teambit/ui-foundation.ui.is-browser": "0.0.475"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/cors": "2.8.10",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"@apollo/client": "^3.0.0",
|
|
56
56
|
"graphql": "14.7.0",
|
|
57
|
-
"@teambit/legacy": "1.0.
|
|
57
|
+
"@teambit/legacy": "1.0.184",
|
|
58
58
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
59
59
|
"react": "^16.8.0 || ^17.0.0"
|
|
60
60
|
},
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"react": "-"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"@teambit/legacy": "1.0.
|
|
87
|
+
"@teambit/legacy": "1.0.184",
|
|
88
88
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
89
89
|
"react": "^16.8.0 || ^17.0.0"
|
|
90
90
|
}
|
|
Binary file
|