@web-ts-toolkit/access-router 0.28.0 → 0.29.0
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.js +27 -15
- package/index.mjs +27 -15
- package/package.json +3 -3
package/index.js
CHANGED
|
@@ -90,9 +90,6 @@ var filterCollection = (collection, predicate) => {
|
|
|
90
90
|
var findElement = (collection, predicate) => {
|
|
91
91
|
return (0, import_utils.find)(collection, (0, import_sift.default)(predicate));
|
|
92
92
|
};
|
|
93
|
-
var matchElement = (element, predicate) => {
|
|
94
|
-
return (0, import_sift.default)(predicate)(element);
|
|
95
|
-
};
|
|
96
93
|
var findElementById = (collection, id) => {
|
|
97
94
|
return findElement(collection, { _id: id });
|
|
98
95
|
};
|
|
@@ -1195,16 +1192,33 @@ var Base = class {
|
|
|
1195
1192
|
return docs;
|
|
1196
1193
|
}
|
|
1197
1194
|
async includeDocsCount(docs, include) {
|
|
1198
|
-
const { model, path, localField, foreignField, filter: _filters } = include;
|
|
1195
|
+
const { model, path, localField, foreignField, filter: _filters, args = {}, options = {} } = include;
|
|
1199
1196
|
const svc = this.req.macl.getPublicService(model);
|
|
1200
1197
|
if (!svc) return docs;
|
|
1198
|
+
const includeLocalValues = [];
|
|
1199
|
+
(0, import_utils11.forEach)(docs, (doc) => {
|
|
1200
|
+
includeLocalValues.push((0, import_utils11.get)(doc, localField));
|
|
1201
|
+
});
|
|
1202
|
+
const filter2 = { ..._filters ?? {}, [foreignField]: { $in: (0, import_utils11.flatten)(includeLocalValues) } };
|
|
1203
|
+
const result = await svc.find(
|
|
1204
|
+
filter2,
|
|
1205
|
+
{
|
|
1206
|
+
...args,
|
|
1207
|
+
select: [foreignField]
|
|
1208
|
+
},
|
|
1209
|
+
{
|
|
1210
|
+
...options,
|
|
1211
|
+
lean: true,
|
|
1212
|
+
includePermissions: false,
|
|
1213
|
+
includeCount: false
|
|
1214
|
+
}
|
|
1215
|
+
);
|
|
1216
|
+
if (!result.success) return docs;
|
|
1201
1217
|
for (let y = 0; y < docs.length; y++) {
|
|
1202
1218
|
const doc = docs[y];
|
|
1203
1219
|
const localValue = (0, import_utils11.get)(doc, localField);
|
|
1204
|
-
const
|
|
1205
|
-
|
|
1206
|
-
if (!result.success) continue;
|
|
1207
|
-
setDocValue(doc, path, result.data);
|
|
1220
|
+
const filterFn = (row) => (0, import_utils11.intersectionBy)((0, import_utils11.castArray)(localValue), (0, import_utils11.castArray)((0, import_utils11.get)(row, foreignField)), String).length > 0;
|
|
1221
|
+
setDocValue(doc, path, result.data.filter(filterFn).length);
|
|
1208
1222
|
}
|
|
1209
1223
|
return docs;
|
|
1210
1224
|
}
|
|
@@ -1946,14 +1960,12 @@ var Service = class extends Base {
|
|
|
1946
1960
|
const { populate, overrides } = this.resolveUpsertArgs(args);
|
|
1947
1961
|
const { skim, includePermissions, populateAccess } = this.resolveUpsertOptions(options);
|
|
1948
1962
|
const { filter: overrideFilter, populate: overridePopulate } = overrides ?? {};
|
|
1949
|
-
const
|
|
1963
|
+
const _filter = await (overrideFilter || this.genFilter("update", filter2));
|
|
1964
|
+
const query = { filter: _filter };
|
|
1965
|
+
logger.debug(JSON.stringify({ op: "upsert", query }));
|
|
1966
|
+
if (_filter === false) return { success: false, code: "forbidden" /* Forbidden */, query };
|
|
1967
|
+
const theone = await this.model.findOne({ filter: _filter });
|
|
1950
1968
|
if (theone) {
|
|
1951
|
-
const _filter = await (overrideFilter || this.genFilter("update", filter2));
|
|
1952
|
-
const query = { filter: _filter };
|
|
1953
|
-
logger.debug(JSON.stringify({ op: "upsert", query }));
|
|
1954
|
-
if (_filter === false) return { success: false, code: "forbidden" /* Forbidden */, query };
|
|
1955
|
-
const matched = matchElement(theone, _filter);
|
|
1956
|
-
if (!matched) return { success: false, code: "forbidden" /* Forbidden */, query };
|
|
1957
1969
|
return this.updateOne(
|
|
1958
1970
|
null,
|
|
1959
1971
|
data,
|
package/index.mjs
CHANGED
|
@@ -43,9 +43,6 @@ var filterCollection = (collection, predicate) => {
|
|
|
43
43
|
var findElement = (collection, predicate) => {
|
|
44
44
|
return find(collection, sift(predicate));
|
|
45
45
|
};
|
|
46
|
-
var matchElement = (element, predicate) => {
|
|
47
|
-
return sift(predicate)(element);
|
|
48
|
-
};
|
|
49
46
|
var findElementById = (collection, id) => {
|
|
50
47
|
return findElement(collection, { _id: id });
|
|
51
48
|
};
|
|
@@ -1158,16 +1155,33 @@ var Base = class {
|
|
|
1158
1155
|
return docs;
|
|
1159
1156
|
}
|
|
1160
1157
|
async includeDocsCount(docs, include) {
|
|
1161
|
-
const { model, path, localField, foreignField, filter: _filters } = include;
|
|
1158
|
+
const { model, path, localField, foreignField, filter: _filters, args = {}, options = {} } = include;
|
|
1162
1159
|
const svc = this.req.macl.getPublicService(model);
|
|
1163
1160
|
if (!svc) return docs;
|
|
1161
|
+
const includeLocalValues = [];
|
|
1162
|
+
forEach3(docs, (doc) => {
|
|
1163
|
+
includeLocalValues.push(get4(doc, localField));
|
|
1164
|
+
});
|
|
1165
|
+
const filter2 = { ..._filters ?? {}, [foreignField]: { $in: flatten(includeLocalValues) } };
|
|
1166
|
+
const result = await svc.find(
|
|
1167
|
+
filter2,
|
|
1168
|
+
{
|
|
1169
|
+
...args,
|
|
1170
|
+
select: [foreignField]
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
...options,
|
|
1174
|
+
lean: true,
|
|
1175
|
+
includePermissions: false,
|
|
1176
|
+
includeCount: false
|
|
1177
|
+
}
|
|
1178
|
+
);
|
|
1179
|
+
if (!result.success) return docs;
|
|
1164
1180
|
for (let y = 0; y < docs.length; y++) {
|
|
1165
1181
|
const doc = docs[y];
|
|
1166
1182
|
const localValue = get4(doc, localField);
|
|
1167
|
-
const
|
|
1168
|
-
|
|
1169
|
-
if (!result.success) continue;
|
|
1170
|
-
setDocValue(doc, path, result.data);
|
|
1183
|
+
const filterFn = (row) => intersectionBy(castArray(localValue), castArray(get4(row, foreignField)), String).length > 0;
|
|
1184
|
+
setDocValue(doc, path, result.data.filter(filterFn).length);
|
|
1171
1185
|
}
|
|
1172
1186
|
return docs;
|
|
1173
1187
|
}
|
|
@@ -1917,14 +1931,12 @@ var Service = class extends Base {
|
|
|
1917
1931
|
const { populate, overrides } = this.resolveUpsertArgs(args);
|
|
1918
1932
|
const { skim, includePermissions, populateAccess } = this.resolveUpsertOptions(options);
|
|
1919
1933
|
const { filter: overrideFilter, populate: overridePopulate } = overrides ?? {};
|
|
1920
|
-
const
|
|
1934
|
+
const _filter = await (overrideFilter || this.genFilter("update", filter2));
|
|
1935
|
+
const query = { filter: _filter };
|
|
1936
|
+
logger.debug(JSON.stringify({ op: "upsert", query }));
|
|
1937
|
+
if (_filter === false) return { success: false, code: "forbidden" /* Forbidden */, query };
|
|
1938
|
+
const theone = await this.model.findOne({ filter: _filter });
|
|
1921
1939
|
if (theone) {
|
|
1922
|
-
const _filter = await (overrideFilter || this.genFilter("update", filter2));
|
|
1923
|
-
const query = { filter: _filter };
|
|
1924
|
-
logger.debug(JSON.stringify({ op: "upsert", query }));
|
|
1925
|
-
if (_filter === false) return { success: false, code: "forbidden" /* Forbidden */, query };
|
|
1926
|
-
const matched = matchElement(theone, _filter);
|
|
1927
|
-
if (!matched) return { success: false, code: "forbidden" /* Forbidden */, query };
|
|
1928
1940
|
return this.updateOne(
|
|
1929
1941
|
null,
|
|
1930
1942
|
data,
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@web-ts-toolkit/access-router",
|
|
3
3
|
"description": "ACL-aware Express routers and in-memory data services for Mongoose-backed APIs",
|
|
4
4
|
"homepage": "https://web-ts-toolkit.pages.dev/docs/packages/access-router",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.29.0",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"keywords": [
|
|
8
8
|
"express",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"node": ">=20"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@web-ts-toolkit/express-json-router": "0.
|
|
44
|
-
"@web-ts-toolkit/utils": "0.
|
|
43
|
+
"@web-ts-toolkit/express-json-router": "0.29.0",
|
|
44
|
+
"@web-ts-toolkit/utils": "0.29.0",
|
|
45
45
|
"just-diff": "^6.0.2",
|
|
46
46
|
"mongoose-schema-jsonschema": "^4.0.1",
|
|
47
47
|
"sift": "^17.1.3",
|