@akanjs/server 0.0.97 → 0.0.99

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/src/processor.mjs DELETED
@@ -1,73 +0,0 @@
1
- import { lowerlize } from "@akanjs/common";
2
- import { isServiceEnabled } from "@akanjs/service";
3
- import {
4
- deserializeArg,
5
- getArgMetas,
6
- getGqlMetas,
7
- getSigMeta
8
- } from "@akanjs/signal";
9
- import { Process, Processor } from "@nestjs/bull";
10
- import { Inject } from "@nestjs/common";
11
- const convertProcessFunction = (gqlMeta, argMetas, internalArgMetas, fn) => {
12
- return async function(job, done) {
13
- const args = [];
14
- argMetas.forEach((argMeta) => {
15
- if (argMeta.type === "Msg")
16
- args[argMeta.idx] = deserializeArg(argMeta, job.data[argMeta.idx]);
17
- else
18
- throw new Error(`Invalid ArgMeta Type ${argMeta.type}`);
19
- });
20
- internalArgMetas.forEach((internalArgMeta) => {
21
- if (internalArgMeta.type === "Job")
22
- args[internalArgMeta.idx] = job;
23
- else
24
- throw new Error(`Invalid InternalArgMeta Type ${internalArgMeta.type}`);
25
- });
26
- this.logger?.log(`Process-${gqlMeta.key} started`);
27
- const result = await fn.apply(this, args);
28
- this.logger?.log(`Process-${gqlMeta.key} finished`);
29
- done(null, result);
30
- };
31
- };
32
- const processorOf = (sigRef, allSrvs) => {
33
- const sigMeta = getSigMeta(sigRef);
34
- const serverMode = process.env.SERVER_MODE ?? "federation";
35
- const gqlMetas = getGqlMetas(sigRef).filter((gqlMeta) => gqlMeta.type === "Process").filter(
36
- (gqlMeta) => gqlMeta.signalOption.serverType === "all" || serverMode === "all" || gqlMeta.signalOption.serverType === serverMode
37
- );
38
- class QueueProcessor {
39
- }
40
- Object.keys(allSrvs).forEach((srv) => {
41
- if (!isServiceEnabled(allSrvs[srv]))
42
- return;
43
- Inject(allSrvs[srv])(QueueProcessor.prototype, lowerlize(srv));
44
- });
45
- for (const gqlMeta of gqlMetas) {
46
- const [argMetas, internalArgMetas] = getArgMetas(sigRef, gqlMeta.key);
47
- const descriptor = { ...Object.getOwnPropertyDescriptor(sigRef.prototype, gqlMeta.key) ?? {} };
48
- descriptor.value = convertProcessFunction(
49
- gqlMeta,
50
- argMetas,
51
- internalArgMetas,
52
- descriptor.value
53
- );
54
- Object.defineProperty(QueueProcessor.prototype, gqlMeta.key, descriptor);
55
- Process(gqlMeta.key)(QueueProcessor.prototype, gqlMeta.key, descriptor);
56
- }
57
- Processor(sigMeta.refName)(QueueProcessor);
58
- return QueueProcessor;
59
- };
60
- const queueOf = (sigRef, queue) => {
61
- const sigMeta = getSigMeta(sigRef);
62
- const gqlMetas = getGqlMetas(sigRef).filter((gqlMeta) => gqlMeta.type === "Process");
63
- for (const gqlMeta of gqlMetas) {
64
- if (queue[gqlMeta.key])
65
- throw new Error(`Queue already has ${gqlMeta.key} in ${sigMeta.refName}`);
66
- queue[gqlMeta.key] = (...args) => queue.add(gqlMeta.key, args);
67
- }
68
- return queue;
69
- };
70
- export {
71
- processorOf,
72
- queueOf
73
- };
package/src/resolver.mjs DELETED
@@ -1,118 +0,0 @@
1
- import { arraiedModel, Float, getNonArrayModel, ID, Int, JSON, Upload } from "@akanjs/base";
2
- import { capitalize, lowerlize } from "@akanjs/common";
3
- import { getClassMeta, getFieldMetas } from "@akanjs/constant";
4
- import { Access, Account, guards, Me, Req, Res, Self, UserIp } from "@akanjs/nest";
5
- import { isServiceEnabled } from "@akanjs/service";
6
- import {
7
- copySignal,
8
- getArgMetas,
9
- getGqlMetas,
10
- getResolveFieldMetas,
11
- getSigMeta
12
- } from "@akanjs/signal";
13
- import { Inject, UseGuards } from "@nestjs/common";
14
- import * as Nest from "@nestjs/graphql";
15
- import GraphQLJson from "graphql-type-json";
16
- import { GraphQLUpload } from "graphql-upload";
17
- import { generateGql, generateGqlInput } from "./gql";
18
- const scalarNestReturnMap = /* @__PURE__ */ new Map([
19
- [Upload, GraphQLUpload],
20
- [ID, Nest.ID],
21
- [Int, Nest.Int],
22
- [Float, Nest.Float],
23
- [JSON, GraphQLJson],
24
- [Boolean, Boolean],
25
- [Date, Date],
26
- [String, String],
27
- [Map, GraphQLJson]
28
- ]);
29
- const getNestReturn = (returns, type = "object") => {
30
- const [model, arrDepth] = getNonArrayModel(returns());
31
- const modelRef = scalarNestReturnMap.get(model) ?? (type === "object" ? generateGql(model) : generateGqlInput(model));
32
- return () => arraiedModel(modelRef, arrDepth);
33
- };
34
- const internalArgMap = {
35
- Parent: Nest.Parent,
36
- Account,
37
- UserIp,
38
- Access,
39
- Self,
40
- Me,
41
- Req,
42
- Res
43
- };
44
- const resolverOf = (sigRef, allSrvs) => {
45
- const Rsv = copySignal(sigRef);
46
- const sigMeta = getSigMeta(Rsv);
47
- const gqlMetas = getGqlMetas(Rsv);
48
- Object.keys(allSrvs).forEach((srv) => {
49
- if (!isServiceEnabled(allSrvs[srv]))
50
- return;
51
- Inject(allSrvs[srv])(Rsv.prototype, lowerlize(srv));
52
- });
53
- for (const gqlMeta of gqlMetas) {
54
- if (gqlMeta.guards.some((guard) => guard === "None") || gqlMeta.signalOption.onlyFor === "restapi" || !["Query", "Mutation"].includes(gqlMeta.type))
55
- continue;
56
- else if (gqlMeta.signalOption.sso)
57
- continue;
58
- const [argMetas, internalArgMetas] = getArgMetas(Rsv, gqlMeta.key);
59
- const descriptor = Object.getOwnPropertyDescriptor(Rsv.prototype, gqlMeta.key) ?? {};
60
- for (const argMeta of argMetas) {
61
- Nest.Args({
62
- name: argMeta.name,
63
- type: getNestReturn(argMeta.returns, "input"),
64
- ...argMeta.argsOption
65
- })(Rsv.prototype, gqlMeta.key, argMeta.idx);
66
- }
67
- for (const internalArgMeta of internalArgMetas) {
68
- const decorate = internalArgMap[internalArgMeta.type];
69
- decorate(internalArgMeta.option ?? {})(Rsv.prototype, gqlMeta.key, internalArgMeta.idx);
70
- }
71
- UseGuards(...gqlMeta.guards.map((guard) => guards[guard]))(Rsv.prototype, gqlMeta.key, descriptor);
72
- if (gqlMeta.type === "Query")
73
- Nest.Query(getNestReturn(gqlMeta.returns), gqlMeta.signalOption)(Rsv.prototype, gqlMeta.key, descriptor);
74
- else if (gqlMeta.type === "Mutation")
75
- Nest.Mutation(getNestReturn(gqlMeta.returns), gqlMeta.signalOption)(Rsv.prototype, gqlMeta.key, descriptor);
76
- }
77
- const resolveFieldMetas = getResolveFieldMetas(Rsv);
78
- if (sigMeta.returns) {
79
- const modelRef = sigMeta.returns();
80
- const fieldMetas = getFieldMetas(modelRef);
81
- fieldMetas.filter((fieldMeta) => fieldMeta.isClass && !fieldMeta.isScalar).forEach((fieldMeta) => {
82
- const classMeta = getClassMeta(fieldMeta.modelRef);
83
- const modelName = lowerlize(classMeta.type === "light" ? classMeta.refName.slice(5) : classMeta.refName);
84
- const className = capitalize(modelName);
85
- const serviceName = `${modelName}Service`;
86
- Rsv.prototype[fieldMeta.key] = async function(parent) {
87
- const service = this[serviceName];
88
- return fieldMeta.arrDepth ? await service[`load${className}Many`](parent[fieldMeta.key]) : await service[`load${className}`](parent[fieldMeta.key]);
89
- };
90
- Nest.Parent()(Rsv.prototype, fieldMeta.key, 0);
91
- Nest.ResolveField(getNestReturn(() => arraiedModel(fieldMeta.modelRef, fieldMeta.arrDepth)))(
92
- Rsv.prototype,
93
- fieldMeta.key,
94
- Object.getOwnPropertyDescriptor(Rsv.prototype, fieldMeta.key) ?? {}
95
- );
96
- });
97
- }
98
- for (const resolveFieldMeta of resolveFieldMetas) {
99
- const [, internalArgMetas] = getArgMetas(Rsv, resolveFieldMeta.key);
100
- for (const internalArgMeta of internalArgMetas) {
101
- const decorate = internalArgMap[internalArgMeta.type];
102
- decorate(internalArgMeta.option ?? {})(Rsv.prototype, resolveFieldMeta.key, internalArgMeta.idx);
103
- }
104
- Nest.ResolveField(getNestReturn(resolveFieldMeta.returns))(
105
- Rsv.prototype,
106
- resolveFieldMeta.key,
107
- Object.getOwnPropertyDescriptor(Rsv.prototype, resolveFieldMeta.key) ?? {}
108
- );
109
- }
110
- if (sigMeta.returns)
111
- Nest.Resolver(getNestReturn(sigMeta.returns))(Rsv);
112
- else
113
- Nest.Resolver()(Rsv);
114
- return Rsv;
115
- };
116
- export {
117
- resolverOf
118
- };
package/src/types.mjs DELETED
File without changes
package/src/websocket.mjs DELETED
@@ -1,124 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result)
9
- __defProp(target, key, result);
10
- return result;
11
- };
12
- import { lowerlize } from "@akanjs/common";
13
- import { Access, Account, getBodyPipes, Me, Self, UserIp, Ws } from "@akanjs/nest";
14
- import { isServiceEnabled } from "@akanjs/service";
15
- import { getArgMetas, getGqlMetas, getSigMeta } from "@akanjs/signal";
16
- import { Inject, Injectable, UseInterceptors } from "@nestjs/common";
17
- import { MessageBody, SubscribeMessage, WebSocketGateway, WebSocketServer } from "@nestjs/websockets";
18
- import { map } from "rxjs/operators";
19
- const internalArgMap = { Account, UserIp, Access, Self, Me, Ws };
20
- let TransformInterceptor = class {
21
- intercept(context, next) {
22
- const [, gqlKey] = [context.getArgByIndex(1), context.getArgByIndex(3)];
23
- return next.handle().pipe(map((data) => ({ event: gqlKey, data })));
24
- }
25
- };
26
- TransformInterceptor = __decorateClass([
27
- Injectable()
28
- ], TransformInterceptor);
29
- const makeRoomId = (gqlKey, argValues) => `${gqlKey}-${argValues.join("-")}`;
30
- const getPubsubInterceptor = (argMetas) => {
31
- let PubsubInterceptor = class {
32
- async intercept(context, next) {
33
- const [socket, { __subscribe__, ...body }, gqlKey] = [context.getArgByIndex(0), context.getArgByIndex(1), context.getArgByIndex(3)];
34
- const roomId = makeRoomId(
35
- gqlKey,
36
- argMetas.map((argMeta) => body[argMeta.name])
37
- );
38
- if (__subscribe__)
39
- await socket.join(roomId);
40
- else
41
- await socket.leave(roomId);
42
- return next.handle().pipe(map(() => ({ event: gqlKey, data: { roomId, __subscribe__ } })));
43
- }
44
- };
45
- PubsubInterceptor = __decorateClass([
46
- Injectable()
47
- ], PubsubInterceptor);
48
- return PubsubInterceptor;
49
- };
50
- const websocketOf = (sigRef, allSrvs) => {
51
- const sigMeta = getSigMeta(sigRef);
52
- class WsGateway {
53
- __sigRef__ = sigRef;
54
- }
55
- Object.keys(allSrvs).forEach((srv) => {
56
- if (!isServiceEnabled(allSrvs[srv]))
57
- return;
58
- Inject(allSrvs[srv])(WsGateway.prototype, lowerlize(srv));
59
- });
60
- const messageGqlMetas = getGqlMetas(sigRef).filter((gqlMeta) => gqlMeta.type === "Message");
61
- for (const gqlMeta of messageGqlMetas) {
62
- const descriptor = { ...Object.getOwnPropertyDescriptor(sigRef.prototype, gqlMeta.key) ?? {} };
63
- Object.defineProperty(WsGateway.prototype, gqlMeta.key, descriptor);
64
- const [argMetas, internalArgMetas] = getArgMetas(sigRef, gqlMeta.key);
65
- argMetas.forEach((argMeta) => {
66
- if (argMeta.type !== "Msg")
67
- throw new Error(`Argument of Message should be Msg ${sigMeta.refName}-${gqlMeta.key}-${argMeta.name}`);
68
- MessageBody(argMeta.name, ...getBodyPipes(argMeta))(WsGateway.prototype, gqlMeta.key, argMeta.idx);
69
- });
70
- internalArgMetas.forEach((internalArgMeta) => {
71
- const internalDecorator = internalArgMap[internalArgMeta.type];
72
- internalDecorator(internalArgMeta.option ?? {})(WsGateway.prototype, gqlMeta.key, internalArgMeta.idx);
73
- });
74
- UseInterceptors(TransformInterceptor)(WsGateway.prototype, gqlMeta.key, gqlMeta.descriptor);
75
- SubscribeMessage(gqlMeta.key)(WsGateway.prototype, gqlMeta.key, descriptor);
76
- }
77
- const pubsubGqlMetas = getGqlMetas(sigRef).filter((gqlMeta) => gqlMeta.type === "Pubsub");
78
- for (const gqlMeta of pubsubGqlMetas) {
79
- const descriptor = { ...Object.getOwnPropertyDescriptor(sigRef.prototype, gqlMeta.key) ?? {} };
80
- Object.defineProperty(WsGateway.prototype, gqlMeta.key, descriptor);
81
- const [argMetas, internalArgMetas] = getArgMetas(sigRef, gqlMeta.key);
82
- argMetas.forEach((argMeta) => {
83
- if (argMeta.type !== "Room")
84
- throw new Error(`Argument of Message should be Room ${sigMeta.refName}-${gqlMeta.key}-${argMeta.name}`);
85
- MessageBody(argMeta.name, ...getBodyPipes(argMeta))(WsGateway.prototype, gqlMeta.key, argMeta.idx);
86
- });
87
- internalArgMetas.forEach((internalArgMeta) => {
88
- const internalDecorator = internalArgMap[internalArgMeta.type];
89
- internalDecorator(internalArgMeta.option ?? {})(WsGateway.prototype, gqlMeta.key, internalArgMeta.idx);
90
- });
91
- UseInterceptors(getPubsubInterceptor(argMetas))(WsGateway.prototype, gqlMeta.key, gqlMeta.descriptor);
92
- SubscribeMessage(gqlMeta.key)(WsGateway.prototype, gqlMeta.key, descriptor);
93
- }
94
- WebSocketGateway({ cors: { origin: "*" }, transports: ["websocket"] })(WsGateway);
95
- return WsGateway;
96
- };
97
- const websocketServerOf = (sigRef) => {
98
- const pubsubGqlMetas = getGqlMetas(sigRef).filter((gqlMeta) => gqlMeta.type === "Pubsub");
99
- let Websocket = class {
100
- server;
101
- };
102
- __decorateClass([
103
- WebSocketServer()
104
- ], Websocket.prototype, "server", 2);
105
- Websocket = __decorateClass([
106
- Injectable(),
107
- WebSocketGateway({ cors: { origin: "*" }, transports: ["websocket"] })
108
- ], Websocket);
109
- for (const gqlMeta of pubsubGqlMetas) {
110
- const [argMetas] = getArgMetas(sigRef, gqlMeta.key);
111
- Websocket.prototype[gqlMeta.key] = function(...args) {
112
- const roomId = makeRoomId(
113
- gqlMeta.key,
114
- argMetas.map((argMeta) => args[argMeta.idx])
115
- );
116
- this.server.to(roomId).emit(roomId, args.at(-1));
117
- };
118
- }
119
- return Websocket;
120
- };
121
- export {
122
- websocketOf,
123
- websocketServerOf
124
- };