@akanjs/document 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/index.cjs +21 -0
- package/index.js +1 -21
- package/package.json +4 -4
- package/src/dataLoader.cjs +152 -0
- package/src/dataLoader.js +19 -61
- package/src/{database.mjs → database.cjs} +64 -47
- package/src/database.js +47 -64
- package/src/{dbDecorators.mjs → dbDecorators.cjs} +43 -14
- package/src/dbDecorators.js +14 -43
- package/src/index.cjs +29 -0
- package/src/index.js +5 -29
- package/src/{schema.mjs → schema.cjs} +33 -9
- package/src/schema.js +9 -33
- package/src/types.cjs +15 -0
- package/src/types.js +0 -15
- package/index.mjs +0 -1
- package/src/dataLoader.mjs +0 -110
- package/src/index.mjs +0 -5
- package/src/types.mjs +0 -0
package/index.cjs
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var document_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(document_exports);
|
|
17
|
+
__reExport(document_exports, require("./src"), module.exports);
|
|
18
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
19
|
+
0 && (module.exports = {
|
|
20
|
+
...require("./src")
|
|
21
|
+
});
|
package/index.js
CHANGED
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __copyProps = (to, from, except, desc) => {
|
|
6
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
-
for (let key of __getOwnPropNames(from))
|
|
8
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
-
}
|
|
11
|
-
return to;
|
|
12
|
-
};
|
|
13
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
-
var document_exports = {};
|
|
16
|
-
module.exports = __toCommonJS(document_exports);
|
|
17
|
-
__reExport(document_exports, require("./src"), module.exports);
|
|
18
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
19
|
-
0 && (module.exports = {
|
|
20
|
-
...require("./src")
|
|
21
|
-
});
|
|
1
|
+
export * from "./src";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akanjs/document",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"type": "
|
|
3
|
+
"version": "0.0.99",
|
|
4
|
+
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
},
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
24
|
-
"require": "./index.
|
|
25
|
-
"import": "./index.
|
|
24
|
+
"require": "./index.cjs",
|
|
25
|
+
"import": "./index.js"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"esbuild": {
|
|
@@ -0,0 +1,152 @@
|
|
|
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"), 1);
|
|
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
|
+
});
|
package/src/dataLoader.js
CHANGED
|
@@ -1,58 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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;
|
|
1
|
+
import DataLoader from "dataloader";
|
|
2
|
+
import { flatMap, get, groupBy, keyBy } from "lodash";
|
|
3
|
+
import { Schema, Types } from "mongoose";
|
|
4
|
+
const Id = Types.ObjectId;
|
|
5
|
+
const ObjectId = Schema.Types.ObjectId;
|
|
6
|
+
const Mixed = Schema.Types.Mixed;
|
|
48
7
|
const createLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
49
|
-
return new
|
|
8
|
+
return new DataLoader(
|
|
50
9
|
(fields) => {
|
|
51
10
|
const query = { ...defaultQuery };
|
|
52
11
|
query[fieldName] = { $in: fields };
|
|
53
12
|
const data = model.find(query).then((list) => {
|
|
54
|
-
const listByKey =
|
|
55
|
-
return fields.map((id) =>
|
|
13
|
+
const listByKey = keyBy(list, fieldName);
|
|
14
|
+
return fields.map((id) => get(listByKey, id, null));
|
|
56
15
|
});
|
|
57
16
|
return data;
|
|
58
17
|
},
|
|
@@ -60,7 +19,7 @@ const createLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
|
60
19
|
);
|
|
61
20
|
};
|
|
62
21
|
const createArrayLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
63
|
-
return new
|
|
22
|
+
return new DataLoader((fields) => {
|
|
64
23
|
const query = { ...defaultQuery };
|
|
65
24
|
query[fieldName] = { $in: fields };
|
|
66
25
|
const data = model.find(query).then((list) => {
|
|
@@ -70,20 +29,20 @@ const createArrayLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
|
70
29
|
});
|
|
71
30
|
};
|
|
72
31
|
const createArrayElementLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
73
|
-
return new
|
|
32
|
+
return new DataLoader(
|
|
74
33
|
(fields) => {
|
|
75
34
|
const query = { ...defaultQuery };
|
|
76
35
|
query[fieldName] = { $in: fields };
|
|
77
36
|
const data = model.find(query).then((list) => {
|
|
78
|
-
const flat =
|
|
37
|
+
const flat = flatMap(
|
|
79
38
|
list,
|
|
80
39
|
(dat) => dat[fieldName].map((datField) => ({
|
|
81
40
|
...dat.toObject(),
|
|
82
41
|
key: datField
|
|
83
42
|
}))
|
|
84
43
|
);
|
|
85
|
-
const listByKey =
|
|
86
|
-
return fields.map((id) =>
|
|
44
|
+
const listByKey = groupBy(flat, (dat) => dat.key);
|
|
45
|
+
return fields.map((id) => get(listByKey, id, null));
|
|
87
46
|
});
|
|
88
47
|
return data;
|
|
89
48
|
},
|
|
@@ -91,15 +50,15 @@ const createArrayElementLoader = (model, fieldName = "_id", defaultQuery = {}) =
|
|
|
91
50
|
);
|
|
92
51
|
};
|
|
93
52
|
const createQueryLoader = (model, queryKeys, defaultQuery = {}) => {
|
|
94
|
-
return new
|
|
53
|
+
return new DataLoader(
|
|
95
54
|
(queries) => {
|
|
96
55
|
const query = {
|
|
97
56
|
$and: [{ $or: queries }, defaultQuery]
|
|
98
57
|
};
|
|
99
58
|
const getQueryKey = (query2) => queryKeys.map((key) => query2[key].toString()).join("");
|
|
100
59
|
const data = model.find(query).then((list) => {
|
|
101
|
-
const listByKey =
|
|
102
|
-
return queries.map((query2) =>
|
|
60
|
+
const listByKey = keyBy(list, getQueryKey);
|
|
61
|
+
return queries.map((query2) => get(listByKey, getQueryKey(query2), null));
|
|
103
62
|
});
|
|
104
63
|
return data;
|
|
105
64
|
},
|
|
@@ -137,8 +96,7 @@ const Loader = {
|
|
|
137
96
|
};
|
|
138
97
|
}
|
|
139
98
|
};
|
|
140
|
-
|
|
141
|
-
0 && (module.exports = {
|
|
99
|
+
export {
|
|
142
100
|
DataLoader,
|
|
143
101
|
Id,
|
|
144
102
|
Loader,
|
|
@@ -149,4 +107,4 @@ const Loader = {
|
|
|
149
107
|
createLoader,
|
|
150
108
|
createQueryLoader,
|
|
151
109
|
getLoaderMetas
|
|
152
|
-
}
|
|
110
|
+
};
|
|
@@ -1,20 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var database_exports = {};
|
|
19
|
+
__export(database_exports, {
|
|
20
|
+
databaseModelOf: () => databaseModelOf
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(database_exports);
|
|
23
|
+
var import_base = require("@akanjs/base");
|
|
24
|
+
var import_common = require("@akanjs/common");
|
|
25
|
+
var import_constant = require("@akanjs/constant");
|
|
26
|
+
var import_nest = require("@akanjs/nest");
|
|
27
|
+
var import_dataLoader = require("./dataLoader");
|
|
28
|
+
var import_schema = require("./schema");
|
|
13
29
|
class CacheDatabase {
|
|
14
30
|
constructor(refName, redis) {
|
|
15
31
|
this.refName = refName;
|
|
16
32
|
this.redis = redis;
|
|
17
|
-
this.logger = new Logger(`${refName}Cache`);
|
|
33
|
+
this.logger = new import_common.Logger(`${refName}Cache`);
|
|
18
34
|
}
|
|
19
35
|
logger;
|
|
20
36
|
async set(topic, key, value, option = {}) {
|
|
@@ -33,13 +49,13 @@ class SearchDatabase {
|
|
|
33
49
|
constructor(refName, meili) {
|
|
34
50
|
this.refName = refName;
|
|
35
51
|
this.meili = meili;
|
|
36
|
-
this.logger = new Logger(`${refName}Search`);
|
|
37
|
-
this.index = meili.index(lowerlize(refName));
|
|
52
|
+
this.logger = new import_common.Logger(`${refName}Search`);
|
|
53
|
+
this.index = meili.index((0, import_common.lowerlize)(refName));
|
|
38
54
|
}
|
|
39
55
|
logger;
|
|
40
56
|
index;
|
|
41
57
|
async searchIds(searchText, option = {}) {
|
|
42
|
-
const { skip = 0, limit = DEFAULT_PAGE_SIZE, sort } = option;
|
|
58
|
+
const { skip = 0, limit = import_constant.DEFAULT_PAGE_SIZE, sort } = option;
|
|
43
59
|
if (!searchText) {
|
|
44
60
|
const { results, total } = await this.index.getDocuments({ offset: skip ?? 0, limit: limit ?? 0 });
|
|
45
61
|
return { ids: results.map((result) => result.id), total };
|
|
@@ -54,7 +70,7 @@ class SearchDatabase {
|
|
|
54
70
|
return { ids: hits.map((hit) => hit.id), total: estimatedTotalHits };
|
|
55
71
|
}
|
|
56
72
|
async count(searchText, option = {}) {
|
|
57
|
-
const { skip = 0, limit = DEFAULT_PAGE_SIZE, sort = "" } = option;
|
|
73
|
+
const { skip = 0, limit = import_constant.DEFAULT_PAGE_SIZE, sort = "" } = option;
|
|
58
74
|
if (!searchText) {
|
|
59
75
|
const { results, total } = await this.index.getDocuments({ offset: skip ?? 0, limit: limit ?? 0 });
|
|
60
76
|
return total;
|
|
@@ -73,40 +89,40 @@ class DatabaseModelStorage {
|
|
|
73
89
|
}
|
|
74
90
|
const databaseModelOf = (database, model, redis, meili) => {
|
|
75
91
|
//! 잘되는지 확인 필요
|
|
76
|
-
const [modelName, className] = [database.refName, capitalize(database.refName)];
|
|
77
|
-
const insightFieldMetas = getFieldMetas(database.Insight);
|
|
92
|
+
const [modelName, className] = [database.refName, (0, import_common.capitalize)(database.refName)];
|
|
93
|
+
const insightFieldMetas = (0, import_constant.getFieldMetas)(database.Insight);
|
|
78
94
|
const accumulator = Object.fromEntries(insightFieldMetas.map((fieldMeta) => [fieldMeta.key, fieldMeta.accumulate]));
|
|
79
95
|
const defaultInsight = Object.fromEntries(insightFieldMetas.map((fieldMeta) => [fieldMeta.key, fieldMeta.default]));
|
|
80
96
|
const makeSafeQuery = (query) => ({ removedAt: { $exists: false }, ...query ?? {} });
|
|
81
97
|
const makeSafeMatchStage = (query) => ({
|
|
82
|
-
$match: { removedAt: { $exists: false }, ...convertAggregateMatch(query) }
|
|
98
|
+
$match: { removedAt: { $exists: false }, ...(0, import_schema.convertAggregateMatch)(query) }
|
|
83
99
|
});
|
|
84
100
|
const getListQuery = (query, queryOption) => {
|
|
85
101
|
const find = makeSafeQuery(query);
|
|
86
|
-
const sort = getFilterSort(database.Filter, queryOption?.sort ?? "latest");
|
|
102
|
+
const sort = (0, import_constant.getFilterSort)(database.Filter, queryOption?.sort ?? "latest");
|
|
87
103
|
const skip = queryOption?.skip ?? 0;
|
|
88
|
-
const limit = queryOption?.limit === null ? DEFAULT_PAGE_SIZE : queryOption?.limit ?? 0;
|
|
104
|
+
const limit = queryOption?.limit === null ? import_constant.DEFAULT_PAGE_SIZE : queryOption?.limit ?? 0;
|
|
89
105
|
const select = queryOption?.select;
|
|
90
106
|
const sample = queryOption?.sample;
|
|
91
107
|
return { find, sort, skip, limit, select, sample };
|
|
92
108
|
};
|
|
93
109
|
const getFindQuery = (query, queryOption) => {
|
|
94
110
|
const find = makeSafeQuery(query);
|
|
95
|
-
const sort = getFilterSort(database.Filter, queryOption?.sort ?? "latest");
|
|
111
|
+
const sort = (0, import_constant.getFilterSort)(database.Filter, queryOption?.sort ?? "latest");
|
|
96
112
|
const skip = queryOption?.skip ?? 0;
|
|
97
113
|
const select = queryOption?.select;
|
|
98
114
|
const sample = queryOption?.sample ?? false;
|
|
99
115
|
return { find, sort, skip, select, sample };
|
|
100
116
|
};
|
|
101
117
|
const getSearchSort = (sortKey) => {
|
|
102
|
-
const sort = getFilterSort(database.Filter, sortKey ?? "latest");
|
|
118
|
+
const sort = (0, import_constant.getFilterSort)(database.Filter, sortKey ?? "latest");
|
|
103
119
|
return Object.entries(sort).map(([key, value]) => `${key}:${value === 1 ? "asc" : "desc"}`);
|
|
104
120
|
};
|
|
105
|
-
const loader = createLoader(model);
|
|
121
|
+
const loader = (0, import_dataLoader.createLoader)(model);
|
|
106
122
|
const cacheDatabase = new CacheDatabase(database.refName, redis);
|
|
107
123
|
const searchDatabase = new SearchDatabase(database.refName, meili);
|
|
108
124
|
const DatabaseModel = Reflect.getMetadata(database.refName, DatabaseModelStorage.prototype) ?? class DatabaseModel {
|
|
109
|
-
logger = new Logger(`${modelName}Model`);
|
|
125
|
+
logger = new import_common.Logger(`${modelName}Model`);
|
|
110
126
|
__model = model;
|
|
111
127
|
__cache = cacheDatabase;
|
|
112
128
|
__search = searchDatabase;
|
|
@@ -169,7 +185,7 @@ const databaseModelOf = (database, model, redis, meili) => {
|
|
|
169
185
|
async getDefaultSummary(addQuery = {}) {
|
|
170
186
|
if (!database.Summary)
|
|
171
187
|
return {};
|
|
172
|
-
const fieldMetas = getFieldMetas(database.Summary);
|
|
188
|
+
const fieldMetas = (0, import_constant.getFieldMetas)(database.Summary);
|
|
173
189
|
const summary = {};
|
|
174
190
|
await Promise.all(
|
|
175
191
|
fieldMetas.filter((fieldMeta) => !!fieldMeta.query).map(async (fieldMeta) => {
|
|
@@ -200,7 +216,7 @@ const databaseModelOf = (database, model, redis, meili) => {
|
|
|
200
216
|
}
|
|
201
217
|
async [`remove${className}`](id) {
|
|
202
218
|
const doc = await this.__model.pickById(id);
|
|
203
|
-
return await doc.set({ removedAt: dayjs() }).save();
|
|
219
|
+
return await doc.set({ removedAt: (0, import_base.dayjs)() }).save();
|
|
204
220
|
}
|
|
205
221
|
async [`search${className}`](searchText, queryOption = {}) {
|
|
206
222
|
const { skip, limit, sort } = queryOption;
|
|
@@ -224,55 +240,55 @@ const databaseModelOf = (database, model, redis, meili) => {
|
|
|
224
240
|
const getQueryDataFromKey = (queryKey, args) => {
|
|
225
241
|
const lastArg = args.at(-1);
|
|
226
242
|
const hasQueryOption = lastArg && typeof lastArg === "object" && (typeof lastArg.select === "object" || typeof lastArg.skip === "number" || typeof lastArg.limit === "number" || typeof lastArg.sort === "string");
|
|
227
|
-
const queryFn = getFilterQuery(database.Filter, queryKey);
|
|
243
|
+
const queryFn = (0, import_constant.getFilterQuery)(database.Filter, queryKey);
|
|
228
244
|
const query = queryFn(...hasQueryOption ? args.slice(0, -1) : args);
|
|
229
245
|
const queryOption = hasQueryOption ? lastArg : {};
|
|
230
246
|
return { query, queryOption };
|
|
231
247
|
};
|
|
232
|
-
const filterKeyMetaMap = getFilterKeyMetaMapOnPrototype(database.Filter.prototype);
|
|
248
|
+
const filterKeyMetaMap = (0, import_constant.getFilterKeyMetaMapOnPrototype)(database.Filter.prototype);
|
|
233
249
|
const queryKeys = [...filterKeyMetaMap.keys()];
|
|
234
250
|
queryKeys.forEach((queryKey) => {
|
|
235
|
-
const queryFn = getFilterQuery(database.Filter, queryKey);
|
|
236
|
-
DatabaseModel.prototype[`list${capitalize(queryKey)}`] = async function(...args) {
|
|
251
|
+
const queryFn = (0, import_constant.getFilterQuery)(database.Filter, queryKey);
|
|
252
|
+
DatabaseModel.prototype[`list${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
237
253
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
238
254
|
return this.__list(query, queryOption);
|
|
239
255
|
};
|
|
240
|
-
DatabaseModel.prototype[`listIds${capitalize(queryKey)}`] = async function(...args) {
|
|
256
|
+
DatabaseModel.prototype[`listIds${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
241
257
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
242
258
|
return this.__listIds(query, queryOption);
|
|
243
259
|
};
|
|
244
|
-
DatabaseModel.prototype[`find${capitalize(queryKey)}`] = async function(...args) {
|
|
260
|
+
DatabaseModel.prototype[`find${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
245
261
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
246
262
|
return this.__find(query, queryOption);
|
|
247
263
|
};
|
|
248
|
-
DatabaseModel.prototype[`findId${capitalize(queryKey)}`] = async function(...args) {
|
|
264
|
+
DatabaseModel.prototype[`findId${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
249
265
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
250
266
|
return this.__findId(query, queryOption);
|
|
251
267
|
};
|
|
252
|
-
DatabaseModel.prototype[`pick${capitalize(queryKey)}`] = async function(...args) {
|
|
268
|
+
DatabaseModel.prototype[`pick${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
253
269
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
254
270
|
return this.__pick(query, queryOption);
|
|
255
271
|
};
|
|
256
|
-
DatabaseModel.prototype[`pickId${capitalize(queryKey)}`] = async function(...args) {
|
|
272
|
+
DatabaseModel.prototype[`pickId${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
257
273
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
258
274
|
return this.__pickId(query, queryOption);
|
|
259
275
|
};
|
|
260
|
-
DatabaseModel.prototype[`exists${capitalize(queryKey)}`] = async function(...args) {
|
|
276
|
+
DatabaseModel.prototype[`exists${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
261
277
|
const query = queryFn(...args);
|
|
262
278
|
return this.__exists(query);
|
|
263
279
|
};
|
|
264
|
-
DatabaseModel.prototype[`count${capitalize(queryKey)}`] = async function(...args) {
|
|
280
|
+
DatabaseModel.prototype[`count${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
265
281
|
const query = queryFn(...args);
|
|
266
282
|
return this.__count(query);
|
|
267
283
|
};
|
|
268
|
-
DatabaseModel.prototype[`insight${capitalize(queryKey)}`] = async function(...args) {
|
|
284
|
+
DatabaseModel.prototype[`insight${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
269
285
|
const query = queryFn(...args);
|
|
270
286
|
return this.__insight(query);
|
|
271
287
|
};
|
|
272
288
|
});
|
|
273
|
-
const loaderMetas = getLoaderMetas(database.Model);
|
|
289
|
+
const loaderMetas = (0, import_dataLoader.getLoaderMetas)(database.Model);
|
|
274
290
|
loaderMetas.forEach((loaderMeta) => {
|
|
275
|
-
const loader2 = loaderMeta.type === "Field" ? createLoader(model, loaderMeta.fieldName) : loaderMeta.type === "ArrayField" ? createArrayLoader(model, loaderMeta.fieldName) : loaderMeta.type === "Query" ? createQueryLoader(model, loaderMeta.queryKeys ?? []) : null;
|
|
291
|
+
const loader2 = loaderMeta.type === "Field" ? (0, import_dataLoader.createLoader)(model, loaderMeta.fieldName) : loaderMeta.type === "ArrayField" ? (0, import_dataLoader.createArrayLoader)(model, loaderMeta.fieldName) : loaderMeta.type === "Query" ? (0, import_dataLoader.createQueryLoader)(model, loaderMeta.queryKeys ?? []) : null;
|
|
276
292
|
DatabaseModel.prototype[loaderMeta.key] = loader2;
|
|
277
293
|
});
|
|
278
294
|
Object.getOwnPropertyNames(database.Model.prototype).forEach((key) => {
|
|
@@ -280,16 +296,17 @@ const databaseModelOf = (database, model, redis, meili) => {
|
|
|
280
296
|
});
|
|
281
297
|
const createDescriptor = Object.getOwnPropertyDescriptor(DatabaseModel.prototype, `create${className}`);
|
|
282
298
|
if (createDescriptor)
|
|
283
|
-
Transaction()(DatabaseModel.prototype, `create${className}`, createDescriptor);
|
|
299
|
+
(0, import_nest.Transaction)()(DatabaseModel.prototype, `create${className}`, createDescriptor);
|
|
284
300
|
const updateDescriptor = Object.getOwnPropertyDescriptor(DatabaseModel.prototype, `update${className}`);
|
|
285
301
|
if (updateDescriptor)
|
|
286
|
-
Transaction()(DatabaseModel.prototype, `update${className}`, updateDescriptor);
|
|
302
|
+
(0, import_nest.Transaction)()(DatabaseModel.prototype, `update${className}`, updateDescriptor);
|
|
287
303
|
const removeDescriptor = Object.getOwnPropertyDescriptor(DatabaseModel.prototype, `remove${className}`);
|
|
288
304
|
if (removeDescriptor)
|
|
289
|
-
Transaction()(DatabaseModel.prototype, `remove${className}`, removeDescriptor);
|
|
305
|
+
(0, import_nest.Transaction)()(DatabaseModel.prototype, `remove${className}`, removeDescriptor);
|
|
290
306
|
Reflect.defineMetadata(database.refName, DatabaseModel, DatabaseModelStorage.prototype);
|
|
291
307
|
return new DatabaseModel();
|
|
292
308
|
};
|
|
293
|
-
export
|
|
309
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
310
|
+
0 && (module.exports = {
|
|
294
311
|
databaseModelOf
|
|
295
|
-
};
|
|
312
|
+
});
|