@jskit-ai/crud-core 0.1.30 → 0.1.31
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.descriptor.mjs +2 -2
- package/package.json +7 -6
- package/src/server/createCrudRepositoryFromResource.js +18 -12
- package/src/server/createHooksToCollectChildren.js +247 -0
- package/src/server/lookupHydration.js +172 -11
- package/src/server/lookupProviders.js +33 -1
- package/src/server/repositoryMethods.js +808 -58
- package/test/createCrudRepositoryFromResource.test.js +1091 -71
- package/test/createHooksToCollectChildren.test.js +251 -0
- package/test/lookupProviders.test.js +32 -0
|
@@ -1,8 +1,32 @@
|
|
|
1
|
+
import { normalizeText } from "@jskit-ai/kernel/shared/support/normalize";
|
|
1
2
|
import {
|
|
2
3
|
resolveCrudLookupProviderToken,
|
|
3
4
|
resolveCrudLookupNamespaceFromRelation
|
|
4
5
|
} from "./lookupPathSupport.js";
|
|
5
6
|
|
|
7
|
+
const LOOKUP_PROVIDER_OWNERSHIP_FILTER_VALUES = Object.freeze([
|
|
8
|
+
"public",
|
|
9
|
+
"user",
|
|
10
|
+
"workspace",
|
|
11
|
+
"workspace_user"
|
|
12
|
+
]);
|
|
13
|
+
const LOOKUP_PROVIDER_OWNERSHIP_FILTER_SET = new Set(LOOKUP_PROVIDER_OWNERSHIP_FILTER_VALUES);
|
|
14
|
+
|
|
15
|
+
function normalizeLookupProviderOwnershipFilter(value, { context = "crudLookupProvider ownershipFilter" } = {}) {
|
|
16
|
+
const normalized = normalizeText(value).toLowerCase();
|
|
17
|
+
if (!normalized) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (LOOKUP_PROVIDER_OWNERSHIP_FILTER_SET.has(normalized)) {
|
|
22
|
+
return normalized;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
throw new TypeError(
|
|
26
|
+
`${context} must be one of: ${LOOKUP_PROVIDER_OWNERSHIP_FILTER_VALUES.join(", ")}.`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
6
30
|
function createCrudLookupProviderResolver(scope, { context = "crudLookupProvider" } = {}) {
|
|
7
31
|
if (!scope || typeof scope.make !== "function") {
|
|
8
32
|
throw new Error(`${context} requires scope.make().`);
|
|
@@ -20,12 +44,20 @@ function createCrudLookupProviderResolver(scope, { context = "crudLookupProvider
|
|
|
20
44
|
};
|
|
21
45
|
}
|
|
22
46
|
|
|
23
|
-
function createCrudLookupProvider(repository, { context = "crudLookupProvider" } = {}) {
|
|
47
|
+
function createCrudLookupProvider(repository, { context = "crudLookupProvider", ownershipFilter = "" } = {}) {
|
|
24
48
|
if (!repository || typeof repository.listByIds !== "function") {
|
|
25
49
|
throw new Error(`${context} requires repository.listByIds(ids, options).`);
|
|
26
50
|
}
|
|
27
51
|
|
|
52
|
+
const normalizedOwnershipFilter = normalizeLookupProviderOwnershipFilter(
|
|
53
|
+
ownershipFilter || repository?.ownershipFilter,
|
|
54
|
+
{
|
|
55
|
+
context: `${context} ownershipFilter`
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
|
|
28
59
|
return Object.freeze({
|
|
60
|
+
ownershipFilter: normalizedOwnershipFilter || null,
|
|
29
61
|
async listByIds(ids = [], options = {}) {
|
|
30
62
|
const include = options?.include === undefined ? "none" : options.include;
|
|
31
63
|
return repository.listByIds(ids, {
|