@akanjs/server 0.9.58-canary.0 → 0.9.58-canary.2

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/cjs/src/boot.js CHANGED
@@ -52,7 +52,6 @@ var import_mongoose = require("@nestjs/mongoose");
52
52
  var import_schedule = require("@nestjs/schedule");
53
53
  var import_body_parser = require("body-parser");
54
54
  var import_cookie_parser = __toESM(require("cookie-parser"));
55
- var import_dgram = __toESM(require("dgram"));
56
55
  var import_events = __toESM(require("events"));
57
56
  var import_graphql_upload = require("graphql-upload");
58
57
  var import_meilisearch = require("meilisearch");
@@ -149,8 +148,6 @@ const createNestApp = async ({
149
148
  const redisIoAdapter = new import_nest.RedisIoAdapter(app, { jwtSecret });
150
149
  await redisIoAdapter.connectToRedis(redisUri);
151
150
  app.enableShutdownHooks();
152
- const udp = import_dgram.default.createSocket("udp4");
153
- import_signal.client.setUdp(udp);
154
151
  if (env.operationMode !== "local" && process.env.USE_REDIS_IO_ADAPTER !== "false")
155
152
  app.useWebSocketAdapter(redisIoAdapter);
156
153
  if (["federation", "all"].includes(serverMode)) {
@@ -0,0 +1,256 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var compressor_exports = {};
29
+ __export(compressor_exports, {
30
+ decode: () => decode,
31
+ encode: () => encode
32
+ });
33
+ module.exports = __toCommonJS(compressor_exports);
34
+ var import_base = require("@akanjs/base");
35
+ var import_common = require("@akanjs/common");
36
+ var import_constant = require("@akanjs/constant");
37
+ var proto = __toESM(require("protobufjs"));
38
+ class ProtoModelStorage {
39
+ }
40
+ const protobufTypeMap = /* @__PURE__ */ new Map([
41
+ [String, "string"],
42
+ [import_base.Int, "int32"],
43
+ [import_base.Float, "float"],
44
+ [Boolean, "bool"],
45
+ [Date, "double"]
46
+ ]);
47
+ const getPredefinedProtoModel = (modelRef) => {
48
+ const protoModel = Reflect.getMetadata(modelRef, ProtoModelStorage.prototype);
49
+ return protoModel;
50
+ };
51
+ const setPredefinedProtoModel = (modelRef, protoModel) => {
52
+ Reflect.defineMetadata(modelRef, protoModel, ProtoModelStorage.prototype);
53
+ };
54
+ const getProtoModel = (modelRef) => {
55
+ const refName = import_constant.constantInfo.getRefName(modelRef);
56
+ const predefinedProtoModel = getPredefinedProtoModel(modelRef);
57
+ if (predefinedProtoModel)
58
+ return predefinedProtoModel;
59
+ const namespace = refName.toLowerCase();
60
+ const childModelRefs = (0, import_constant.getChildClassRefs)(modelRef);
61
+ const allModelRefs = [modelRef, ...childModelRefs];
62
+ const modelDatas = allModelRefs.map((modelRef2) => {
63
+ const refName2 = import_constant.constantInfo.getRefName(modelRef2);
64
+ const fieldMetas = (0, import_constant.getFieldMetas)(modelRef2);
65
+ return [
66
+ refName2,
67
+ {
68
+ fields: Object.fromEntries(
69
+ fieldMetas.map((fieldMeta, id) => {
70
+ const rule = fieldMeta.isArray ? "repeated" : fieldMeta.nullable ? "optional" : "required";
71
+ const type = fieldMeta.isClass ? import_constant.constantInfo.getRefName(fieldMeta.modelRef) : fieldMeta.enum ? `${refName2}${(0, import_common.capitalize)(fieldMeta.key)}Enum` : protobufTypeMap.get(fieldMeta.modelRef) ?? "string";
72
+ return [fieldMeta.key, { type, id, rule }];
73
+ })
74
+ )
75
+ }
76
+ ];
77
+ });
78
+ const modelJson = Object.fromEntries(modelDatas);
79
+ const enumDatas = allModelRefs.map((modelRef2) => {
80
+ const refName2 = import_constant.constantInfo.getRefName(modelRef2);
81
+ const enumMetas = (0, import_constant.getFieldEnumMetas)(modelRef2);
82
+ const enumJsons = enumMetas.map((enumMeta) => {
83
+ const enumName = `${refName2}${(0, import_common.capitalize)(enumMeta.key)}Enum`;
84
+ const enumData = {
85
+ values: Object.fromEntries(enumMeta.enum.values.map((value, idx) => [value, idx]))
86
+ };
87
+ return [enumName, enumData];
88
+ });
89
+ return enumJsons;
90
+ }).flat();
91
+ const enumJson = Object.fromEntries(enumDatas);
92
+ const protoJson = {
93
+ nested: {
94
+ [namespace]: {
95
+ nested: {
96
+ ...modelJson,
97
+ ...enumJson
98
+ }
99
+ }
100
+ }
101
+ };
102
+ const root = proto.Root.fromJSON(protoJson);
103
+ const protoModel = root.lookupType(`${namespace}.${refName}`);
104
+ setPredefinedProtoModel(modelRef, protoModel);
105
+ return protoModel;
106
+ };
107
+ class ProtoEncodeStorage {
108
+ }
109
+ const scalarProtoEncodeMap = /* @__PURE__ */ new Map([
110
+ [Date, (value) => (0, import_base.dayjs)(value).toDate().getTime()],
111
+ [String, (value) => value],
112
+ [import_base.ID, (value) => value],
113
+ [Boolean, (value) => value],
114
+ [import_base.Int, (value) => value],
115
+ [import_base.Float, (value) => value],
116
+ [import_base.JSON, (value) => JSON.stringify(value)]
117
+ ]);
118
+ const getProtoEncodeFn = (modelRef) => {
119
+ const [valueRef] = (0, import_base.getNonArrayModel)(modelRef);
120
+ return scalarProtoEncodeMap.get(valueRef) ?? ((value) => value);
121
+ };
122
+ const protoEncode = (metadata, value) => {
123
+ if (metadata.nullable && (value === null || value === void 0))
124
+ return null;
125
+ if (metadata.isArray && Array.isArray(value)) {
126
+ return value.map((v) => protoEncode(metadata, v));
127
+ }
128
+ if (metadata.isMap && metadata.of) {
129
+ const protoEncodeFn = getProtoEncodeFn(metadata.of);
130
+ return Object.fromEntries(
131
+ [...value.entries()].map(([key, val]) => [key, (0, import_base.applyFnToArrayObjects)(val, protoEncodeFn)])
132
+ );
133
+ }
134
+ if (metadata.isClass)
135
+ return makeProtoEncode(metadata.modelRef)(value);
136
+ if (metadata.enum)
137
+ return metadata.enum.indexOf(value);
138
+ return getProtoEncodeFn(metadata.modelRef)(value);
139
+ };
140
+ const getPredefinedProtoEncodeFn = (refName) => {
141
+ const protoEncode2 = Reflect.getMetadata(refName, ProtoEncodeStorage.prototype);
142
+ return protoEncode2;
143
+ };
144
+ const setPredefinedProtoEncodeFn = (refName, protoEncode2) => {
145
+ Reflect.defineMetadata(refName, protoEncode2, ProtoEncodeStorage.prototype);
146
+ };
147
+ const makeProtoEncode = (modelRef) => {
148
+ const refName = import_constant.constantInfo.getRefName(modelRef);
149
+ const predefinedProtoEncode = getPredefinedProtoEncodeFn(refName);
150
+ if (predefinedProtoEncode)
151
+ return predefinedProtoEncode;
152
+ const fieldMetas = (0, import_constant.getFieldMetas)(modelRef);
153
+ const protoEncodeFn = (value) => {
154
+ const result = {};
155
+ fieldMetas.forEach((fieldMeta) => {
156
+ result[fieldMeta.key] = protoEncode(fieldMeta, value[fieldMeta.key]);
157
+ });
158
+ return result;
159
+ };
160
+ setPredefinedProtoEncodeFn(refName, protoEncodeFn);
161
+ return protoEncodeFn;
162
+ };
163
+ const encode = (modelRef, value) => {
164
+ try {
165
+ const protoModel = getProtoModel(modelRef);
166
+ const protoEncode2 = makeProtoEncode(modelRef);
167
+ const data = protoEncode2(value);
168
+ const errMsg = protoModel.verify(data);
169
+ if (errMsg) {
170
+ throw new Error(errMsg);
171
+ }
172
+ const message = protoModel.create(data);
173
+ const buffer = protoModel.encode(message).finish();
174
+ return buffer;
175
+ } catch (error) {
176
+ const errMsg = error instanceof Error ? error.message : String(error);
177
+ import_common.Logger.error(`Failed to encode ${modelRef.name}: ${errMsg}`);
178
+ return null;
179
+ }
180
+ };
181
+ class ProtoDecodeStorage {
182
+ }
183
+ const scalarProtoDecodeMap = /* @__PURE__ */ new Map([
184
+ [Date, (value) => (0, import_base.dayjs)(value)],
185
+ [String, (value) => value],
186
+ [import_base.ID, (value) => value],
187
+ [Boolean, (value) => value],
188
+ [import_base.Int, (value) => value],
189
+ [import_base.Float, (value) => value],
190
+ [import_base.JSON, (value) => JSON.parse(value)]
191
+ ]);
192
+ const getProtoDecodeFn = (modelRef) => {
193
+ const [valueRef] = (0, import_base.getNonArrayModel)(modelRef);
194
+ return scalarProtoDecodeMap.get(valueRef) ?? ((value) => value);
195
+ };
196
+ const protoDecode = (metadata, value) => {
197
+ if (metadata.nullable && (value === null || value === void 0))
198
+ return null;
199
+ if (metadata.isArray) {
200
+ if (value === void 0)
201
+ return [];
202
+ if (Array.isArray(value))
203
+ return value.map((v) => protoDecode(metadata, v));
204
+ }
205
+ if (metadata.isMap && metadata.of) {
206
+ const protoDecodeFn = getProtoDecodeFn(metadata.of);
207
+ return new Map(
208
+ Object.entries(value).map(([key, val]) => [
209
+ key,
210
+ (0, import_base.applyFnToArrayObjects)(val, protoDecodeFn)
211
+ ])
212
+ );
213
+ }
214
+ if (metadata.isClass)
215
+ return makeProtoDecode(metadata.modelRef)(value);
216
+ if (metadata.enum)
217
+ return metadata.enum.values.at(value);
218
+ return getProtoDecodeFn(metadata.modelRef)(value);
219
+ };
220
+ const getPredefinedProtoDecodeFn = (refName) => {
221
+ const protoDecode2 = Reflect.getMetadata(refName, ProtoDecodeStorage.prototype);
222
+ return protoDecode2;
223
+ };
224
+ const setPredefinedProtoDecodeFn = (refName, protoDecode2) => {
225
+ Reflect.defineMetadata(refName, protoDecode2, ProtoDecodeStorage.prototype);
226
+ };
227
+ const makeProtoDecode = (modelRef) => {
228
+ const refName = import_constant.constantInfo.getRefName(modelRef);
229
+ const predefinedProtoDecode = getPredefinedProtoDecodeFn(refName);
230
+ if (predefinedProtoDecode)
231
+ return predefinedProtoDecode;
232
+ const fieldMetas = (0, import_constant.getFieldMetas)(modelRef);
233
+ const protoDecodeFn = (value) => {
234
+ const result = {};
235
+ fieldMetas.forEach((fieldMeta) => {
236
+ result[fieldMeta.key] = protoDecode(fieldMeta, value[fieldMeta.key]);
237
+ });
238
+ return result;
239
+ };
240
+ setPredefinedProtoDecodeFn(refName, protoDecodeFn);
241
+ return protoDecodeFn;
242
+ };
243
+ const decode = (modelRef, buffer) => {
244
+ const protoModel = getProtoModel(modelRef);
245
+ const message = protoModel.decode(Buffer.from(buffer));
246
+ const data = protoModel.toObject(message);
247
+ const protoDecode2 = makeProtoDecode(modelRef);
248
+ const crystalize = (0, import_constant.makeCrystalize)(modelRef);
249
+ const result = crystalize(protoDecode2(data));
250
+ return result;
251
+ };
252
+ // Annotate the CommonJS export names for ESM import in node:
253
+ 0 && (module.exports = {
254
+ decode,
255
+ encode
256
+ });
package/cjs/src/gql.js CHANGED
@@ -109,7 +109,8 @@ const applyNestField = (model, fieldMeta, type = "object") => {
109
109
  };
110
110
  const generateGqlInput = (inputRef) => {
111
111
  const refName = import_constant.constantInfo.getRefName(inputRef);
112
- const gqlName = `${(0, import_common.capitalize)(refName)}Input`;
112
+ const modelType = import_constant.constantInfo.getModelType(inputRef);
113
+ const gqlName = `${(0, import_common.capitalize)(refName)}${modelType === "object" ? "Object" : "Input"}`;
113
114
  const predefinedInputGql = getPredefinedInqutGql(gqlName);
114
115
  if (predefinedInputGql)
115
116
  return predefinedInputGql;
package/cjs/src/index.js CHANGED
@@ -24,6 +24,7 @@ __reExport(src_exports, require("./websocket"), module.exports);
24
24
  __reExport(src_exports, require("./boot"), module.exports);
25
25
  __reExport(src_exports, require("./searchDaemon"), module.exports);
26
26
  __reExport(src_exports, require("./schema"), module.exports);
27
+ __reExport(src_exports, require("./compressor"), module.exports);
27
28
  // Annotate the CommonJS export names for ESM import in node:
28
29
  0 && (module.exports = {
29
30
  ...require("./gql"),
@@ -35,5 +36,6 @@ __reExport(src_exports, require("./schema"), module.exports);
35
36
  ...require("./websocket"),
36
37
  ...require("./boot"),
37
38
  ...require("./searchDaemon"),
38
- ...require("./schema")
39
+ ...require("./schema"),
40
+ ...require("./compressor")
39
41
  });
package/esm/src/boot.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  SearchClient,
28
28
  TimeoutInterceptor
29
29
  } from "@akanjs/nest";
30
- import { client, signalInfo } from "@akanjs/signal";
30
+ import { signalInfo } from "@akanjs/signal";
31
31
  import { ApolloDriver } from "@nestjs/apollo";
32
32
  import { BullModule } from "@nestjs/bull";
33
33
  import { Global, Module } from "@nestjs/common";
@@ -37,7 +37,6 @@ import { MongooseModule } from "@nestjs/mongoose";
37
37
  import { ScheduleModule } from "@nestjs/schedule";
38
38
  import { json, urlencoded } from "body-parser";
39
39
  import cookieParser from "cookie-parser";
40
- import dgram from "dgram";
41
40
  import events from "events";
42
41
  import { graphqlUploadExpress } from "graphql-upload";
43
42
  import { MeiliSearch } from "meilisearch";
@@ -134,8 +133,6 @@ const createNestApp = async ({
134
133
  const redisIoAdapter = new RedisIoAdapter(app, { jwtSecret });
135
134
  await redisIoAdapter.connectToRedis(redisUri);
136
135
  app.enableShutdownHooks();
137
- const udp = dgram.createSocket("udp4");
138
- client.setUdp(udp);
139
136
  if (env.operationMode !== "local" && process.env.USE_REDIS_IO_ADAPTER !== "false")
140
137
  app.useWebSocketAdapter(redisIoAdapter);
141
138
  if (["federation", "all"].includes(serverMode)) {
@@ -0,0 +1,236 @@
1
+ import {
2
+ applyFnToArrayObjects,
3
+ dayjs,
4
+ Float,
5
+ getNonArrayModel,
6
+ ID,
7
+ Int,
8
+ JSON as GqlJSON
9
+ } from "@akanjs/base";
10
+ import { capitalize, Logger } from "@akanjs/common";
11
+ import {
12
+ constantInfo,
13
+ getChildClassRefs,
14
+ getFieldEnumMetas,
15
+ getFieldMetas,
16
+ makeCrystalize
17
+ } from "@akanjs/constant";
18
+ import * as proto from "protobufjs";
19
+ class ProtoModelStorage {
20
+ }
21
+ const protobufTypeMap = /* @__PURE__ */ new Map([
22
+ [String, "string"],
23
+ [Int, "int32"],
24
+ [Float, "float"],
25
+ [Boolean, "bool"],
26
+ [Date, "double"]
27
+ ]);
28
+ const getPredefinedProtoModel = (modelRef) => {
29
+ const protoModel = Reflect.getMetadata(modelRef, ProtoModelStorage.prototype);
30
+ return protoModel;
31
+ };
32
+ const setPredefinedProtoModel = (modelRef, protoModel) => {
33
+ Reflect.defineMetadata(modelRef, protoModel, ProtoModelStorage.prototype);
34
+ };
35
+ const getProtoModel = (modelRef) => {
36
+ const refName = constantInfo.getRefName(modelRef);
37
+ const predefinedProtoModel = getPredefinedProtoModel(modelRef);
38
+ if (predefinedProtoModel)
39
+ return predefinedProtoModel;
40
+ const namespace = refName.toLowerCase();
41
+ const childModelRefs = getChildClassRefs(modelRef);
42
+ const allModelRefs = [modelRef, ...childModelRefs];
43
+ const modelDatas = allModelRefs.map((modelRef2) => {
44
+ const refName2 = constantInfo.getRefName(modelRef2);
45
+ const fieldMetas = getFieldMetas(modelRef2);
46
+ return [
47
+ refName2,
48
+ {
49
+ fields: Object.fromEntries(
50
+ fieldMetas.map((fieldMeta, id) => {
51
+ const rule = fieldMeta.isArray ? "repeated" : fieldMeta.nullable ? "optional" : "required";
52
+ const type = fieldMeta.isClass ? constantInfo.getRefName(fieldMeta.modelRef) : fieldMeta.enum ? `${refName2}${capitalize(fieldMeta.key)}Enum` : protobufTypeMap.get(fieldMeta.modelRef) ?? "string";
53
+ return [fieldMeta.key, { type, id, rule }];
54
+ })
55
+ )
56
+ }
57
+ ];
58
+ });
59
+ const modelJson = Object.fromEntries(modelDatas);
60
+ const enumDatas = allModelRefs.map((modelRef2) => {
61
+ const refName2 = constantInfo.getRefName(modelRef2);
62
+ const enumMetas = getFieldEnumMetas(modelRef2);
63
+ const enumJsons = enumMetas.map((enumMeta) => {
64
+ const enumName = `${refName2}${capitalize(enumMeta.key)}Enum`;
65
+ const enumData = {
66
+ values: Object.fromEntries(enumMeta.enum.values.map((value, idx) => [value, idx]))
67
+ };
68
+ return [enumName, enumData];
69
+ });
70
+ return enumJsons;
71
+ }).flat();
72
+ const enumJson = Object.fromEntries(enumDatas);
73
+ const protoJson = {
74
+ nested: {
75
+ [namespace]: {
76
+ nested: {
77
+ ...modelJson,
78
+ ...enumJson
79
+ }
80
+ }
81
+ }
82
+ };
83
+ const root = proto.Root.fromJSON(protoJson);
84
+ const protoModel = root.lookupType(`${namespace}.${refName}`);
85
+ setPredefinedProtoModel(modelRef, protoModel);
86
+ return protoModel;
87
+ };
88
+ class ProtoEncodeStorage {
89
+ }
90
+ const scalarProtoEncodeMap = /* @__PURE__ */ new Map([
91
+ [Date, (value) => dayjs(value).toDate().getTime()],
92
+ [String, (value) => value],
93
+ [ID, (value) => value],
94
+ [Boolean, (value) => value],
95
+ [Int, (value) => value],
96
+ [Float, (value) => value],
97
+ [GqlJSON, (value) => JSON.stringify(value)]
98
+ ]);
99
+ const getProtoEncodeFn = (modelRef) => {
100
+ const [valueRef] = getNonArrayModel(modelRef);
101
+ return scalarProtoEncodeMap.get(valueRef) ?? ((value) => value);
102
+ };
103
+ const protoEncode = (metadata, value) => {
104
+ if (metadata.nullable && (value === null || value === void 0))
105
+ return null;
106
+ if (metadata.isArray && Array.isArray(value)) {
107
+ return value.map((v) => protoEncode(metadata, v));
108
+ }
109
+ if (metadata.isMap && metadata.of) {
110
+ const protoEncodeFn = getProtoEncodeFn(metadata.of);
111
+ return Object.fromEntries(
112
+ [...value.entries()].map(([key, val]) => [key, applyFnToArrayObjects(val, protoEncodeFn)])
113
+ );
114
+ }
115
+ if (metadata.isClass)
116
+ return makeProtoEncode(metadata.modelRef)(value);
117
+ if (metadata.enum)
118
+ return metadata.enum.indexOf(value);
119
+ return getProtoEncodeFn(metadata.modelRef)(value);
120
+ };
121
+ const getPredefinedProtoEncodeFn = (refName) => {
122
+ const protoEncode2 = Reflect.getMetadata(refName, ProtoEncodeStorage.prototype);
123
+ return protoEncode2;
124
+ };
125
+ const setPredefinedProtoEncodeFn = (refName, protoEncode2) => {
126
+ Reflect.defineMetadata(refName, protoEncode2, ProtoEncodeStorage.prototype);
127
+ };
128
+ const makeProtoEncode = (modelRef) => {
129
+ const refName = constantInfo.getRefName(modelRef);
130
+ const predefinedProtoEncode = getPredefinedProtoEncodeFn(refName);
131
+ if (predefinedProtoEncode)
132
+ return predefinedProtoEncode;
133
+ const fieldMetas = getFieldMetas(modelRef);
134
+ const protoEncodeFn = (value) => {
135
+ const result = {};
136
+ fieldMetas.forEach((fieldMeta) => {
137
+ result[fieldMeta.key] = protoEncode(fieldMeta, value[fieldMeta.key]);
138
+ });
139
+ return result;
140
+ };
141
+ setPredefinedProtoEncodeFn(refName, protoEncodeFn);
142
+ return protoEncodeFn;
143
+ };
144
+ const encode = (modelRef, value) => {
145
+ try {
146
+ const protoModel = getProtoModel(modelRef);
147
+ const protoEncode2 = makeProtoEncode(modelRef);
148
+ const data = protoEncode2(value);
149
+ const errMsg = protoModel.verify(data);
150
+ if (errMsg) {
151
+ throw new Error(errMsg);
152
+ }
153
+ const message = protoModel.create(data);
154
+ const buffer = protoModel.encode(message).finish();
155
+ return buffer;
156
+ } catch (error) {
157
+ const errMsg = error instanceof Error ? error.message : String(error);
158
+ Logger.error(`Failed to encode ${modelRef.name}: ${errMsg}`);
159
+ return null;
160
+ }
161
+ };
162
+ class ProtoDecodeStorage {
163
+ }
164
+ const scalarProtoDecodeMap = /* @__PURE__ */ new Map([
165
+ [Date, (value) => dayjs(value)],
166
+ [String, (value) => value],
167
+ [ID, (value) => value],
168
+ [Boolean, (value) => value],
169
+ [Int, (value) => value],
170
+ [Float, (value) => value],
171
+ [GqlJSON, (value) => JSON.parse(value)]
172
+ ]);
173
+ const getProtoDecodeFn = (modelRef) => {
174
+ const [valueRef] = getNonArrayModel(modelRef);
175
+ return scalarProtoDecodeMap.get(valueRef) ?? ((value) => value);
176
+ };
177
+ const protoDecode = (metadata, value) => {
178
+ if (metadata.nullable && (value === null || value === void 0))
179
+ return null;
180
+ if (metadata.isArray) {
181
+ if (value === void 0)
182
+ return [];
183
+ if (Array.isArray(value))
184
+ return value.map((v) => protoDecode(metadata, v));
185
+ }
186
+ if (metadata.isMap && metadata.of) {
187
+ const protoDecodeFn = getProtoDecodeFn(metadata.of);
188
+ return new Map(
189
+ Object.entries(value).map(([key, val]) => [
190
+ key,
191
+ applyFnToArrayObjects(val, protoDecodeFn)
192
+ ])
193
+ );
194
+ }
195
+ if (metadata.isClass)
196
+ return makeProtoDecode(metadata.modelRef)(value);
197
+ if (metadata.enum)
198
+ return metadata.enum.values.at(value);
199
+ return getProtoDecodeFn(metadata.modelRef)(value);
200
+ };
201
+ const getPredefinedProtoDecodeFn = (refName) => {
202
+ const protoDecode2 = Reflect.getMetadata(refName, ProtoDecodeStorage.prototype);
203
+ return protoDecode2;
204
+ };
205
+ const setPredefinedProtoDecodeFn = (refName, protoDecode2) => {
206
+ Reflect.defineMetadata(refName, protoDecode2, ProtoDecodeStorage.prototype);
207
+ };
208
+ const makeProtoDecode = (modelRef) => {
209
+ const refName = constantInfo.getRefName(modelRef);
210
+ const predefinedProtoDecode = getPredefinedProtoDecodeFn(refName);
211
+ if (predefinedProtoDecode)
212
+ return predefinedProtoDecode;
213
+ const fieldMetas = getFieldMetas(modelRef);
214
+ const protoDecodeFn = (value) => {
215
+ const result = {};
216
+ fieldMetas.forEach((fieldMeta) => {
217
+ result[fieldMeta.key] = protoDecode(fieldMeta, value[fieldMeta.key]);
218
+ });
219
+ return result;
220
+ };
221
+ setPredefinedProtoDecodeFn(refName, protoDecodeFn);
222
+ return protoDecodeFn;
223
+ };
224
+ const decode = (modelRef, buffer) => {
225
+ const protoModel = getProtoModel(modelRef);
226
+ const message = protoModel.decode(Buffer.from(buffer));
227
+ const data = protoModel.toObject(message);
228
+ const protoDecode2 = makeProtoDecode(modelRef);
229
+ const crystalize = makeCrystalize(modelRef);
230
+ const result = crystalize(protoDecode2(data));
231
+ return result;
232
+ };
233
+ export {
234
+ decode,
235
+ encode
236
+ };
package/esm/src/gql.js CHANGED
@@ -76,7 +76,8 @@ const applyNestField = (model, fieldMeta, type = "object") => {
76
76
  };
77
77
  const generateGqlInput = (inputRef) => {
78
78
  const refName = constantInfo.getRefName(inputRef);
79
- const gqlName = `${capitalize(refName)}Input`;
79
+ const modelType = constantInfo.getModelType(inputRef);
80
+ const gqlName = `${capitalize(refName)}${modelType === "object" ? "Object" : "Input"}`;
80
81
  const predefinedInputGql = getPredefinedInqutGql(gqlName);
81
82
  if (predefinedInputGql)
82
83
  return predefinedInputGql;
package/esm/src/index.js CHANGED
@@ -8,3 +8,4 @@ export * from "./websocket";
8
8
  export * from "./boot";
9
9
  export * from "./searchDaemon";
10
10
  export * from "./schema";
11
+ export * from "./compressor";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/server",
3
- "version": "0.9.58-canary.0",
3
+ "version": "0.9.58-canary.2",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -37,6 +37,7 @@
37
37
  "graphql-upload": "12.0.0",
38
38
  "meilisearch": "^0.47.0",
39
39
  "mongoose": "^8.9.3",
40
+ "protobufjs": "^7.5.4",
40
41
  "redis": "^4.7.0",
41
42
  "rxjs": "^7.8.2"
42
43
  },
@@ -0,0 +1,3 @@
1
+ import { type Type } from "@akanjs/base";
2
+ export declare const encode: <T>(modelRef: Type<T>, value: object) => Buffer<ArrayBufferLike> | null;
3
+ export declare const decode: <T>(modelRef: Type<T>, buffer: Buffer) => T;
package/src/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export * from "./websocket";
8
8
  export * from "./boot";
9
9
  export * from "./searchDaemon";
10
10
  export * from "./schema";
11
+ export * from "./compressor";
package/src/module.d.ts CHANGED
@@ -4,7 +4,7 @@ import { Database } from "@akanjs/document";
4
4
  import { DynamicModule } from "@nestjs/common";
5
5
  import type { NextFunction, Request, Response } from "express";
6
6
  interface DatabaseModuleCreateOptions {
7
- constant: ConstantModel<string, any, any, any, any>;
7
+ constant: ConstantModel<string, any, any, any, any, any>;
8
8
  database: Database<string, any, any, any, any, any, any, any>;
9
9
  signal: Type;
10
10
  service: Type;