@akanjs/server 0.0.28 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/server",
3
- "version": "0.0.28",
3
+ "version": "0.0.29",
4
4
  "type": "commonjs",
5
5
  "scripts": {
6
6
  "postinstall": "pnpm install @nestjs/mongoose@^10.1.0"
package/src/boot.js CHANGED
@@ -42,6 +42,7 @@ module.exports = __toCommonJS(boot_exports);
42
42
  var import_base = require("@akanjs/base");
43
43
  var import_common = require("@akanjs/common");
44
44
  var import_nest = require("@akanjs/nest");
45
+ var import_signal = require("@akanjs/signal");
45
46
  var import_apollo = require("@nestjs/apollo");
46
47
  var import_bull = require("@nestjs/bull");
47
48
  var import_common2 = require("@nestjs/common");
@@ -51,6 +52,7 @@ var import_mongoose = require("@nestjs/mongoose");
51
52
  var import_schedule = require("@nestjs/schedule");
52
53
  var import_body_parser = require("body-parser");
53
54
  var import_cookie_parser = __toESM(require("cookie-parser"));
55
+ var import_dgram = __toESM(require("dgram"));
54
56
  var import_events = __toESM(require("events"));
55
57
  var import_graphql_upload = require("graphql-upload");
56
58
  var import_meilisearch = require("meilisearch");
@@ -158,6 +160,8 @@ const createNestApp = async ({
158
160
  const redisIoAdapter = new import_nest.RedisIoAdapter(app, { jwtSecret });
159
161
  await redisIoAdapter.connectToRedis(redisUri);
160
162
  app.enableShutdownHooks();
163
+ const udp = import_dgram.default.createSocket("udp4");
164
+ import_signal.client.setUdp(udp);
161
165
  if (["federation", "all"].includes(serverMode)) {
162
166
  app.setGlobalPrefix(process.env.GLOBAL_PREFIX ?? "/backend");
163
167
  app.enableCors({
package/src/gql.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { BaseObject, Dayjs, Type } from "@akanjs/base";
2
2
  import { ConstantFieldMeta, DocumentModel } from "@akanjs/constant";
3
+ import type { Doc } from "@akanjs/document";
3
4
  import * as Nest from "@nestjs/graphql";
4
5
  import { ValueNode } from "graphql";
5
- import { Doc } from "./dbDecorators";
6
6
  export declare class DateScalar implements Nest.CustomScalar<Date, Dayjs> {
7
7
  description: string;
8
8
  parseValue(value: number): Dayjs;
package/src/index.d.ts CHANGED
@@ -1,14 +1,10 @@
1
- export * from "./dataLoader";
2
- export * from "./serviceDecorators";
3
1
  export * from "./gql";
4
2
  export * from "./resolver";
5
- export * from "./schema";
6
3
  export * from "./controller";
7
4
  export * from "./processor";
8
5
  export * from "./module";
9
- export * from "./database";
10
- export * from "./dbDecorators";
11
6
  export * from "./types";
12
7
  export * from "./websocket";
13
8
  export * from "./boot";
14
9
  export * from "./searchDaemon";
10
+ export * from "./schema";
package/src/index.js CHANGED
@@ -14,34 +14,26 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
14
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
15
  var src_exports = {};
16
16
  module.exports = __toCommonJS(src_exports);
17
- __reExport(src_exports, require("./dataLoader"), module.exports);
18
- __reExport(src_exports, require("./serviceDecorators"), module.exports);
19
17
  __reExport(src_exports, require("./gql"), module.exports);
20
18
  __reExport(src_exports, require("./resolver"), module.exports);
21
- __reExport(src_exports, require("./schema"), module.exports);
22
19
  __reExport(src_exports, require("./controller"), module.exports);
23
20
  __reExport(src_exports, require("./processor"), module.exports);
24
21
  __reExport(src_exports, require("./module"), module.exports);
25
- __reExport(src_exports, require("./database"), module.exports);
26
- __reExport(src_exports, require("./dbDecorators"), module.exports);
27
22
  __reExport(src_exports, require("./types"), module.exports);
28
23
  __reExport(src_exports, require("./websocket"), module.exports);
29
24
  __reExport(src_exports, require("./boot"), module.exports);
30
25
  __reExport(src_exports, require("./searchDaemon"), module.exports);
26
+ __reExport(src_exports, require("./schema"), module.exports);
31
27
  // Annotate the CommonJS export names for ESM import in node:
32
28
  0 && (module.exports = {
33
- ...require("./dataLoader"),
34
- ...require("./serviceDecorators"),
35
29
  ...require("./gql"),
36
30
  ...require("./resolver"),
37
- ...require("./schema"),
38
31
  ...require("./controller"),
39
32
  ...require("./processor"),
40
33
  ...require("./module"),
41
- ...require("./database"),
42
- ...require("./dbDecorators"),
43
34
  ...require("./types"),
44
35
  ...require("./websocket"),
45
36
  ...require("./boot"),
46
- ...require("./searchDaemon")
37
+ ...require("./searchDaemon"),
38
+ ...require("./schema")
47
39
  });
package/src/module.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Type } from "@akanjs/base";
2
2
  import { type ConstantModel } from "@akanjs/constant";
3
+ import { Database } from "@akanjs/document";
3
4
  import { DynamicModule } from "@nestjs/common";
4
- import type { Database } from "./dbDecorators";
5
5
  interface DatabaseModuleCreateOptions {
6
6
  constant: ConstantModel<string, any, any, any, any, any>;
7
7
  database: Database<string, any, any, any, any, any, any, any, any>;
package/src/module.js CHANGED
@@ -34,16 +34,16 @@ __export(module_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(module_exports);
36
36
  var import_common = require("@akanjs/common");
37
+ var import_document = require("@akanjs/document");
38
+ var import_service = require("@akanjs/service");
37
39
  var import_signal = require("@akanjs/signal");
38
40
  var import_bull = require("@nestjs/bull");
39
41
  var import_common2 = require("@nestjs/common");
40
42
  var import_mongoose = require("@nestjs/mongoose");
41
43
  var import_controller = require("./controller");
42
- var import_database = require("./database");
43
44
  var import_processor = require("./processor");
44
45
  var import_resolver = require("./resolver");
45
46
  var import_schema = require("./schema");
46
- var import_serviceDecorators = require("./serviceDecorators");
47
47
  var import_websocket = require("./websocket");
48
48
  const hasWebsocket = (signal) => (0, import_signal.getGqlMetas)(signal).some((gqlMeta) => ["Message", "Pubsub"].includes(gqlMeta.type));
49
49
  const hasProcessor = (signal) => (0, import_signal.getGqlMetas)(signal).some((gqlMeta) => gqlMeta.type === "Process");
@@ -80,7 +80,7 @@ const databaseModuleOf = ({
80
80
  ] : []
81
81
  ],
82
82
  providers: [
83
- (0, import_serviceDecorators.serviceOf)(service),
83
+ (0, import_service.serviceOf)(service),
84
84
  (0, import_resolver.resolverOf)(signal, filterSrvs(allSrvs)),
85
85
  ...hasProcessor(signal) ? [
86
86
  (0, import_processor.processorOf)(signal, filterSrvs(allSrvs)),
@@ -92,7 +92,7 @@ const databaseModuleOf = ({
92
92
  {
93
93
  provide: `${modelName}Model`,
94
94
  useFactory: (model, redis, meili) => {
95
- return (0, import_database.databaseModelOf)(database, model, redis, meili);
95
+ return (0, import_document.databaseModelOf)(database, model, redis, meili);
96
96
  },
97
97
  inject: [mongoToken, "REDIS_CLIENT", "MEILI_CLIENT"]
98
98
  },
@@ -121,7 +121,7 @@ const serviceModuleOf = ({ signal, service, uses = {}, useAsyncs = {}, providers
121
121
  ] : []
122
122
  ],
123
123
  providers: [
124
- (0, import_serviceDecorators.serviceOf)(service),
124
+ (0, import_service.serviceOf)(service),
125
125
  (0, import_resolver.resolverOf)(signal, filterSrvs(allSrvs)),
126
126
  ...hasWebsocket(signal) ? [(0, import_websocket.websocketOf)(signal, filterSrvs(allSrvs)), { provide: "Websocket", useClass: (0, import_websocket.websocketServerOf)(signal) }] : [],
127
127
  ...hasProcessor(signal) ? [
@@ -173,7 +173,7 @@ const batchModuleOf = ({
173
173
  (0, import_common2.Module)({
174
174
  imports: [],
175
175
  providers: [
176
- (0, import_serviceDecorators.serviceOf)(service),
176
+ (0, import_service.serviceOf)(service),
177
177
  ...Object.entries(uses).map(([key, useValue]) => ({ provide: (0, import_common.capitalize)(key), useValue })),
178
178
  ...Object.entries(useAsyncs).map(([key, useFactory]) => ({ provide: (0, import_common.capitalize)(key), useFactory })),
179
179
  ...providers
package/src/schema.d.ts CHANGED
@@ -1,33 +1,5 @@
1
1
  import { Type } from "@akanjs/base";
2
- import { FilterQuery, PipelineStage, type ProjectionType, Schema } from "mongoose";
3
- import { type BaseMiddleware } from ".";
4
- export declare const getDefaultSchemaOptions: <TSchema, TDocument>() => {
5
- toJSON: {
6
- getters: boolean;
7
- virtuals: boolean;
8
- };
9
- toObject: {
10
- getters: boolean;
11
- virtuals: boolean;
12
- };
13
- _id: boolean;
14
- id: boolean;
15
- timestamps: boolean;
16
- methods: {
17
- refresh: () => Promise<any>;
18
- };
19
- statics: {
20
- pickOne: (query: FilterQuery<TSchema>, projection?: ProjectionType<TSchema>) => Promise<TDocument>;
21
- pickById: (docId: string | undefined, projection?: ProjectionType<TSchema>) => Promise<TDocument>;
22
- sample: (query: FilterQuery<TSchema>, size?: number, aggregations?: PipelineStage[]) => Promise<TDocument[]>;
23
- sampleOne: (query: FilterQuery<TSchema>, aggregations?: PipelineStage[]) => Promise<TDocument | null>;
24
- addSummary: (prefix?: string, num?: number) => Promise<void>;
25
- moveSummary: (prev: string, next: string, num?: number) => Promise<void>;
26
- subSummary: (prefix?: string, num?: number) => Promise<void>;
27
- };
28
- };
2
+ import { BaseMiddleware } from "@akanjs/document";
3
+ import { Schema } from "mongoose";
29
4
  export declare const schemaOf: <Mdl, Doc, Middleware extends BaseMiddleware>(modelRef: Type<Mdl>, docRef: Type<Doc>, middleware: Type<Middleware>) => Schema<null, Mdl, Doc, undefined, null, Mdl>;
30
5
  export declare const addSchema: <Mdl, Doc, Input, Middleware extends BaseMiddleware>(modelRef: Type<Mdl>, docRef: Type<Doc>, inputRef: Type<Input>, middleware: Type<Middleware>) => Schema<null, Mdl, Doc, undefined, null, Mdl>;
31
- export declare const convertAggregateMatch: (query: any) => {
32
- [k: string]: any;
33
- };
package/src/schema.js CHANGED
@@ -18,14 +18,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
18
18
  var schema_exports = {};
19
19
  __export(schema_exports, {
20
20
  addSchema: () => addSchema,
21
- convertAggregateMatch: () => convertAggregateMatch,
22
- getDefaultSchemaOptions: () => getDefaultSchemaOptions,
23
21
  schemaOf: () => schemaOf
24
22
  });
25
23
  module.exports = __toCommonJS(schema_exports);
26
24
  var import_base = require("@akanjs/base");
27
25
  var import_common = require("@akanjs/common");
28
26
  var import_constant = require("@akanjs/constant");
27
+ var import_document = require("@akanjs/document");
29
28
  var import_signal = require("@akanjs/signal");
30
29
  var import_mongoose = require("mongoose");
31
30
  var import__ = require(".");
@@ -33,80 +32,8 @@ class ScalarSchemaStorage {
33
32
  }
34
33
  class SchemaStorage {
35
34
  }
36
- const getDefaultSchemaOptions = () => ({
37
- toJSON: { getters: false, virtuals: true },
38
- toObject: { getters: false, virtuals: true },
39
- _id: true,
40
- id: true,
41
- timestamps: true,
42
- methods: {
43
- refresh: async function() {
44
- Object.assign(this, await this.constructor.findById(this._id));
45
- return this;
46
- }
47
- },
48
- statics: {
49
- pickOne: async function(query, projection) {
50
- const doc = await this.findOne(query, projection);
51
- if (!doc)
52
- throw new Error("No Document");
53
- return doc;
54
- },
55
- pickById: async function(docId, projection) {
56
- if (!docId)
57
- throw new Error("No Document ID");
58
- const doc = await this.findById(docId, projection);
59
- if (!doc)
60
- throw new Error("No Document");
61
- return doc;
62
- },
63
- sample: async function(query, size = 1, aggregations = []) {
64
- const objs = await this.aggregate([
65
- { $match: convertAggregateMatch(query) },
66
- { $sample: { size } },
67
- ...aggregations
68
- ]);
69
- return objs.map((obj) => new this(obj));
70
- },
71
- sampleOne: async function(query, aggregations = []) {
72
- const obj = await this.aggregate([
73
- { $match: convertAggregateMatch(query) },
74
- { $sample: { size: 1 } },
75
- ...aggregations
76
- ]);
77
- return obj.length ? new this(obj[0]) : null;
78
- },
79
- addSummary: async function(prefix = "total", num = 1) {
80
- const update = Array.isArray(prefix) ? {
81
- $inc: {
82
- ...prefix.reduce((acc, cur) => ({ ...acc, [`${cur}${this.modelName}`]: num }), {})
83
- }
84
- } : { $inc: { [`${prefix}${this.modelName}`]: num } };
85
- await this.db.collection("summaries").updateOne({ status: "active" }, update);
86
- },
87
- moveSummary: async function(prev, next, num = 1) {
88
- await this.db.collection("summaries").updateOne(
89
- { status: "active" },
90
- {
91
- $inc: {
92
- [`${prev}${this.modelName}`]: -num,
93
- [`${next}${this.modelName}`]: num
94
- }
95
- }
96
- );
97
- },
98
- subSummary: async function(prefix = "total", num = 1) {
99
- const update = Array.isArray(prefix) ? {
100
- $inc: {
101
- ...prefix.reduce((acc, cur) => ({ ...acc, [`${cur}${this.modelName}`]: -num }), {})
102
- }
103
- } : { $inc: { [`${prefix}${this.modelName}`]: -num } };
104
- await this.db.collection("summaries").updateOne({ status: "active" }, update);
105
- }
106
- }
107
- });
108
35
  const scalarMongoTypeMap = /* @__PURE__ */ new Map([
109
- [import_base.ID, import__.ObjectId],
36
+ [import_base.ID, import_document.ObjectId],
110
37
  [import_base.Int, Number],
111
38
  [import_base.Float, Number],
112
39
  [import_base.JSON, import_mongoose.Schema.Types.Mixed],
@@ -118,7 +45,7 @@ const scalarMongoTypeMap = /* @__PURE__ */ new Map([
118
45
  const applyMongoProp = (schemaProps, fieldMeta) => {
119
46
  if (["id", "createdAt", "updatedAt"].includes(fieldMeta.key) || fieldMeta.fieldType === "resolve")
120
47
  return;
121
- const type = fieldMeta.isClass ? fieldMeta.isScalar ? createSchema(fieldMeta.modelRef) : import__.ObjectId : scalarMongoTypeMap.get(fieldMeta.modelRef) ?? fieldMeta.modelRef;
48
+ const type = fieldMeta.isClass ? fieldMeta.isScalar ? createSchema(fieldMeta.modelRef) : import_document.ObjectId : scalarMongoTypeMap.get(fieldMeta.modelRef) ?? fieldMeta.modelRef;
122
49
  let prop = {};
123
50
  if (fieldMeta.optArrDepth) {
124
51
  prop.type = type;
@@ -244,7 +171,7 @@ const schemaOf = (modelRef, docRef, middleware) => {
244
171
  fieldMetas.forEach((fieldMeta) => {
245
172
  applyMongoProp(schemaProps, fieldMeta);
246
173
  });
247
- const schema = new import_mongoose.Schema(schemaProps, getDefaultSchemaOptions());
174
+ const schema = new import_mongoose.Schema(schemaProps, (0, import_document.getDefaultSchemaOptions)());
248
175
  schema.methods.refresh = async function() {
249
176
  Object.assign(this, await this.constructor.findById(this._id));
250
177
  return this;
@@ -298,7 +225,7 @@ const addSchema = (modelRef, docRef, inputRef, middleware) => {
298
225
  inputFieldMetas.forEach((fieldMeta) => {
299
226
  (0, import__.applyNestField)(originInput, fieldMeta, "input");
300
227
  });
301
- const schema = new import_mongoose.Schema(schemaProps, getDefaultSchemaOptions());
228
+ const schema = new import_mongoose.Schema(schemaProps, (0, import_document.getDefaultSchemaOptions)());
302
229
  modelSchema.add(schema);
303
230
  Object.getOwnPropertyNames(docRef.prototype).forEach((name) => {
304
231
  if (name === "constructor")
@@ -309,35 +236,8 @@ const addSchema = (modelRef, docRef, inputRef, middleware) => {
309
236
  onSchema?.(modelSchema);
310
237
  return modelSchema;
311
238
  };
312
- const convertOperatorValue = (value) => {
313
- if (Array.isArray(value))
314
- return value.map((v) => convertOperatorValue(v));
315
- else if (!value)
316
- return value;
317
- else if ((0, import_mongoose.isValidObjectId)(value))
318
- return new import_mongoose.Types.ObjectId(value);
319
- else if ((0, import_common.isValidDate)(value))
320
- return (0, import_base.dayjs)(value).toDate();
321
- else if (value.constructor !== Object)
322
- return value;
323
- else if (typeof value !== "object")
324
- return value;
325
- else
326
- return Object.fromEntries(
327
- Object.entries(value).map(([key, value2]) => [key, convertOperatorValue(value2)])
328
- );
329
- };
330
- const convertAggregateMatch = (query) => {
331
- return Object.fromEntries(
332
- Object.entries(query).map(([key, value]) => {
333
- return [key, convertOperatorValue(value)];
334
- })
335
- );
336
- };
337
239
  // Annotate the CommonJS export names for ESM import in node:
338
240
  0 && (module.exports = {
339
241
  addSchema,
340
- convertAggregateMatch,
341
- getDefaultSchemaOptions,
342
242
  schemaOf
343
243
  });
@@ -33,9 +33,9 @@ __export(searchDaemon_exports, {
33
33
  module.exports = __toCommonJS(searchDaemon_exports);
34
34
  var import_common = require("@akanjs/common");
35
35
  var import_constant = require("@akanjs/constant");
36
+ var import_document = require("@akanjs/document");
36
37
  var import_common2 = require("@nestjs/common");
37
38
  var import_mongoose = require("@nestjs/mongoose");
38
- var import_dbDecorators = require("./dbDecorators");
39
39
  const hasTextField = (modelRef) => {
40
40
  const fieldMetas = (0, import_constant.getFieldMetas)(modelRef);
41
41
  return fieldMetas.some(
@@ -114,7 +114,7 @@ let SearchDaemon = class {
114
114
  }
115
115
  logger = new import_common.Logger("SearchDaemon");
116
116
  async onModuleInit() {
117
- const databaseModelNames = (0, import_dbDecorators.getAllDatabaseModelNames)();
117
+ const databaseModelNames = (0, import_document.getAllDatabaseModelNames)();
118
118
  const indexes = (await this.meili.getIndexes({ limit: 1e3 })).results;
119
119
  const indexMap = new Map(indexes.map((index) => [index.uid, index]));
120
120
  const indexCreationNames = [];
@@ -1,26 +0,0 @@
1
- import type { Type } from "@akanjs/base";
2
- import DataLoader from "dataloader";
3
- import type { FilterQuery, Model } from "mongoose";
4
- import { Schema, Types } from "mongoose";
5
- export declare const Id: typeof Types.ObjectId;
6
- export declare const ObjectId: typeof Schema.Types.ObjectId;
7
- export declare const Mixed: typeof Schema.Types.Mixed;
8
- export { DataLoader };
9
- export declare const createLoader: <Key, Value>(model: Model<any>, fieldName?: string, defaultQuery?: FilterQuery<unknown>) => DataLoader<Key, Value, Key>;
10
- export declare const createArrayLoader: <K, V>(model: Model<unknown, unknown, unknown, unknown>, fieldName?: string, defaultQuery?: FilterQuery<unknown>) => DataLoader<K, V, K>;
11
- export declare const createArrayElementLoader: <K, V>(model: Model<unknown>, fieldName?: string, defaultQuery?: FilterQuery<unknown>) => DataLoader<K, V, K>;
12
- export declare const createQueryLoader: <Key, Value>(model: Model<any>, queryKeys: string[], defaultQuery?: FilterQuery<unknown>) => DataLoader<Key, Value, Key>;
13
- export interface LoaderMeta {
14
- key: string;
15
- type: "Field" | "ArrayField" | "Query";
16
- fieldName?: string;
17
- queryKeys?: string[];
18
- defaultQuery: FilterQuery<unknown>;
19
- }
20
- export declare const getLoaderMetas: (target: Type) => LoaderMeta[];
21
- export type Loader<Field, Value> = DataLoader<Field, Value | null>;
22
- export declare const Loader: {
23
- ByField: (fieldName: string, defaultQuery?: FilterQuery<unknown>) => (target: object, key: string) => void;
24
- ByArrayField: (fieldName: string, defaultQuery?: FilterQuery<unknown>) => (target: object, key: string) => void;
25
- ByQuery: (queryKeys: string[], defaultQuery?: FilterQuery<unknown>) => (target: object, key: string) => void;
26
- };
package/src/dataLoader.js DELETED
@@ -1,152 +0,0 @@
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 dataLoader_exports = {};
29
- __export(dataLoader_exports, {
30
- DataLoader: () => import_dataloader.default,
31
- Id: () => Id,
32
- Loader: () => Loader,
33
- Mixed: () => Mixed,
34
- ObjectId: () => ObjectId,
35
- createArrayElementLoader: () => createArrayElementLoader,
36
- createArrayLoader: () => createArrayLoader,
37
- createLoader: () => createLoader,
38
- createQueryLoader: () => createQueryLoader,
39
- getLoaderMetas: () => getLoaderMetas
40
- });
41
- module.exports = __toCommonJS(dataLoader_exports);
42
- var import_dataloader = __toESM(require("dataloader"));
43
- var import_lodash = require("lodash");
44
- var import_mongoose = require("mongoose");
45
- const Id = import_mongoose.Types.ObjectId;
46
- const ObjectId = import_mongoose.Schema.Types.ObjectId;
47
- const Mixed = import_mongoose.Schema.Types.Mixed;
48
- const createLoader = (model, fieldName = "_id", defaultQuery = {}) => {
49
- return new import_dataloader.default(
50
- (fields) => {
51
- const query = { ...defaultQuery };
52
- query[fieldName] = { $in: fields };
53
- const data = model.find(query).then((list) => {
54
- const listByKey = (0, import_lodash.keyBy)(list, fieldName);
55
- return fields.map((id) => (0, import_lodash.get)(listByKey, id, null));
56
- });
57
- return data;
58
- },
59
- { name: "dataloader", cache: false }
60
- );
61
- };
62
- const createArrayLoader = (model, fieldName = "_id", defaultQuery = {}) => {
63
- return new import_dataloader.default((fields) => {
64
- const query = { ...defaultQuery };
65
- query[fieldName] = { $in: fields };
66
- const data = model.find(query).then((list) => {
67
- return fields.map((field) => list.filter((item) => field === item[fieldName]));
68
- });
69
- return data;
70
- });
71
- };
72
- const createArrayElementLoader = (model, fieldName = "_id", defaultQuery = {}) => {
73
- return new import_dataloader.default(
74
- (fields) => {
75
- const query = { ...defaultQuery };
76
- query[fieldName] = { $in: fields };
77
- const data = model.find(query).then((list) => {
78
- const flat = (0, import_lodash.flatMap)(
79
- list,
80
- (dat) => dat[fieldName].map((datField) => ({
81
- ...dat.toObject(),
82
- key: datField
83
- }))
84
- );
85
- const listByKey = (0, import_lodash.groupBy)(flat, (dat) => dat.key);
86
- return fields.map((id) => (0, import_lodash.get)(listByKey, id, null));
87
- });
88
- return data;
89
- },
90
- { name: "dataloader", cache: false }
91
- );
92
- };
93
- const createQueryLoader = (model, queryKeys, defaultQuery = {}) => {
94
- return new import_dataloader.default(
95
- (queries) => {
96
- const query = {
97
- $and: [{ $or: queries }, defaultQuery]
98
- };
99
- const getQueryKey = (query2) => queryKeys.map((key) => query2[key].toString()).join("");
100
- const data = model.find(query).then((list) => {
101
- const listByKey = (0, import_lodash.keyBy)(list, getQueryKey);
102
- return queries.map((query2) => (0, import_lodash.get)(listByKey, getQueryKey(query2), null));
103
- });
104
- return data;
105
- },
106
- { name: "dataloader", cache: false }
107
- );
108
- };
109
- const getLoaderMetaMapByPrototype = (prototype) => {
110
- const loaderMetaMap = Reflect.getOwnMetadata("loaders", prototype) ?? /* @__PURE__ */ new Map();
111
- return loaderMetaMap;
112
- };
113
- const getLoaderMetas = (target) => {
114
- const metas = [...getLoaderMetaMapByPrototype(target.prototype).values()];
115
- return metas;
116
- };
117
- const Loader = {
118
- ByField: (fieldName, defaultQuery = {}) => {
119
- return function(target, key) {
120
- const loaderMetaMap = getLoaderMetaMapByPrototype(target);
121
- loaderMetaMap.set(key, { key, type: "Field", fieldName, defaultQuery });
122
- Reflect.defineMetadata("loaders", loaderMetaMap, target);
123
- };
124
- },
125
- ByArrayField: (fieldName, defaultQuery = {}) => {
126
- return function(target, key) {
127
- const loaderMetaMap = getLoaderMetaMapByPrototype(target);
128
- loaderMetaMap.set(key, { key, type: "ArrayField", fieldName, defaultQuery });
129
- Reflect.defineMetadata("loaders", loaderMetaMap, target);
130
- };
131
- },
132
- ByQuery: (queryKeys, defaultQuery = {}) => {
133
- return function(target, key) {
134
- const loaderMetaMap = getLoaderMetaMapByPrototype(target);
135
- loaderMetaMap.set(key, { key, type: "Query", queryKeys, defaultQuery });
136
- Reflect.defineMetadata("loaders", loaderMetaMap, target);
137
- };
138
- }
139
- };
140
- // Annotate the CommonJS export names for ESM import in node:
141
- 0 && (module.exports = {
142
- DataLoader,
143
- Id,
144
- Loader,
145
- Mixed,
146
- ObjectId,
147
- createArrayElementLoader,
148
- createArrayLoader,
149
- createLoader,
150
- createQueryLoader,
151
- getLoaderMetas
152
- });