@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.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./src";
|
package/src/dataLoader.mjs
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
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;
|
|
7
|
-
const createLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
8
|
-
return new DataLoader(
|
|
9
|
-
(fields) => {
|
|
10
|
-
const query = { ...defaultQuery };
|
|
11
|
-
query[fieldName] = { $in: fields };
|
|
12
|
-
const data = model.find(query).then((list) => {
|
|
13
|
-
const listByKey = keyBy(list, fieldName);
|
|
14
|
-
return fields.map((id) => get(listByKey, id, null));
|
|
15
|
-
});
|
|
16
|
-
return data;
|
|
17
|
-
},
|
|
18
|
-
{ name: "dataloader", cache: false }
|
|
19
|
-
);
|
|
20
|
-
};
|
|
21
|
-
const createArrayLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
22
|
-
return new DataLoader((fields) => {
|
|
23
|
-
const query = { ...defaultQuery };
|
|
24
|
-
query[fieldName] = { $in: fields };
|
|
25
|
-
const data = model.find(query).then((list) => {
|
|
26
|
-
return fields.map((field) => list.filter((item) => field === item[fieldName]));
|
|
27
|
-
});
|
|
28
|
-
return data;
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
const createArrayElementLoader = (model, fieldName = "_id", defaultQuery = {}) => {
|
|
32
|
-
return new DataLoader(
|
|
33
|
-
(fields) => {
|
|
34
|
-
const query = { ...defaultQuery };
|
|
35
|
-
query[fieldName] = { $in: fields };
|
|
36
|
-
const data = model.find(query).then((list) => {
|
|
37
|
-
const flat = flatMap(
|
|
38
|
-
list,
|
|
39
|
-
(dat) => dat[fieldName].map((datField) => ({
|
|
40
|
-
...dat.toObject(),
|
|
41
|
-
key: datField
|
|
42
|
-
}))
|
|
43
|
-
);
|
|
44
|
-
const listByKey = groupBy(flat, (dat) => dat.key);
|
|
45
|
-
return fields.map((id) => get(listByKey, id, null));
|
|
46
|
-
});
|
|
47
|
-
return data;
|
|
48
|
-
},
|
|
49
|
-
{ name: "dataloader", cache: false }
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
const createQueryLoader = (model, queryKeys, defaultQuery = {}) => {
|
|
53
|
-
return new DataLoader(
|
|
54
|
-
(queries) => {
|
|
55
|
-
const query = {
|
|
56
|
-
$and: [{ $or: queries }, defaultQuery]
|
|
57
|
-
};
|
|
58
|
-
const getQueryKey = (query2) => queryKeys.map((key) => query2[key].toString()).join("");
|
|
59
|
-
const data = model.find(query).then((list) => {
|
|
60
|
-
const listByKey = keyBy(list, getQueryKey);
|
|
61
|
-
return queries.map((query2) => get(listByKey, getQueryKey(query2), null));
|
|
62
|
-
});
|
|
63
|
-
return data;
|
|
64
|
-
},
|
|
65
|
-
{ name: "dataloader", cache: false }
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
const getLoaderMetaMapByPrototype = (prototype) => {
|
|
69
|
-
const loaderMetaMap = Reflect.getOwnMetadata("loaders", prototype) ?? /* @__PURE__ */ new Map();
|
|
70
|
-
return loaderMetaMap;
|
|
71
|
-
};
|
|
72
|
-
const getLoaderMetas = (target) => {
|
|
73
|
-
const metas = [...getLoaderMetaMapByPrototype(target.prototype).values()];
|
|
74
|
-
return metas;
|
|
75
|
-
};
|
|
76
|
-
const Loader = {
|
|
77
|
-
ByField: (fieldName, defaultQuery = {}) => {
|
|
78
|
-
return function(target, key) {
|
|
79
|
-
const loaderMetaMap = getLoaderMetaMapByPrototype(target);
|
|
80
|
-
loaderMetaMap.set(key, { key, type: "Field", fieldName, defaultQuery });
|
|
81
|
-
Reflect.defineMetadata("loaders", loaderMetaMap, target);
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
ByArrayField: (fieldName, defaultQuery = {}) => {
|
|
85
|
-
return function(target, key) {
|
|
86
|
-
const loaderMetaMap = getLoaderMetaMapByPrototype(target);
|
|
87
|
-
loaderMetaMap.set(key, { key, type: "ArrayField", fieldName, defaultQuery });
|
|
88
|
-
Reflect.defineMetadata("loaders", loaderMetaMap, target);
|
|
89
|
-
};
|
|
90
|
-
},
|
|
91
|
-
ByQuery: (queryKeys, defaultQuery = {}) => {
|
|
92
|
-
return function(target, key) {
|
|
93
|
-
const loaderMetaMap = getLoaderMetaMapByPrototype(target);
|
|
94
|
-
loaderMetaMap.set(key, { key, type: "Query", queryKeys, defaultQuery });
|
|
95
|
-
Reflect.defineMetadata("loaders", loaderMetaMap, target);
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
export {
|
|
100
|
-
DataLoader,
|
|
101
|
-
Id,
|
|
102
|
-
Loader,
|
|
103
|
-
Mixed,
|
|
104
|
-
ObjectId,
|
|
105
|
-
createArrayElementLoader,
|
|
106
|
-
createArrayLoader,
|
|
107
|
-
createLoader,
|
|
108
|
-
createQueryLoader,
|
|
109
|
-
getLoaderMetas
|
|
110
|
-
};
|
package/src/index.mjs
DELETED
package/src/types.mjs
DELETED
|
File without changes
|