@dyrected/core 2.5.58 → 2.5.59
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/dist/app-config-C3X5BAyK.d.cts +1539 -0
- package/dist/app-config-C3X5BAyK.d.ts +1539 -0
- package/dist/app-config-wnLtFu6c.d.cts +1538 -0
- package/dist/app-config-wnLtFu6c.d.ts +1538 -0
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/server.cjs +14 -6
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +14 -6
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, e as ArrayField, f as BlocksField, g as BooleanField, h as DateField, i as DateTimeField, E as EmailField, G as GlobalConfig, I as IconField, j as ImageField, J as JoinField, k as JsonField, M as MultiSelectField, N as NumberField, O as ObjectField, R as RadioField, l as RelationshipField, m as RichTextField, n as RowField, S as SelectField, T as TextField, o as TextareaField, p as TimeField, U as UrlField } from './app-config-
|
|
2
|
-
export { q as AccessFunction, r as AccessFunctionArgs, s as AccessPolicyResolver, t as AccessResult, u as AccessRule, v as AdminAuthAccessResolution, w as AdminAuthClaimMapping, x as AdminAuthMember, y as AdminAuthProvider, z as AdminAuthProviderMembersConfig, K as AdminAuthProvisioningMode, Q as AdminAuthResolveAccessArgs, V as AdminAuthResolvedIdentity, X as AdminConfig, Y as AdminDashboardComponentSlots, Z as AdminIconName, _ as BaseAdminAuthProvider, $ as BaseFieldAdmin, a0 as BlockVariant, a1 as BooleanFieldAdmin, a2 as CharacterLimitFieldAdmin, a3 as CharacterLimitFieldConfig, a4 as CollectionAfterChangeHook, a5 as CollectionAfterDeleteHook, a6 as CollectionAfterReadHook, a7 as CollectionAfterTransitionHook, a8 as CollectionBeforeChangeHook, a9 as CollectionBeforeDeleteHook, aa as CollectionBeforeReadHook, ab as CollectionBeforeTransitionHook, ac as CollectionListComponentSlots, ad as CustomAdminAuthProvider, ae as DatabaseAdapter, af as DynamicOptionItem, ag as DynamicOptionsConfig, ah as DynamicOptionsResolver, ai as DynamicOptionsResolverArgs, aj as EmailFieldAdmin, ak as FieldAdminHooks, al as FieldAdminOnChangeHook, am as FieldAdminOnChangeHookArgs, an as FieldAdminOptionsHook, ao as FieldAdminOptionsHookArgs, ap as FieldAdminOptionsHookResult, aq as FieldAfterReadHook, ar as FieldAfterReadHookArgs, as as FieldBase, at as FieldBeforeChangeHook, au as FieldBeforeChangeHookArgs, av as FieldHook, aw as FieldHooks, ax as FieldType, ay as FileData, az as GlobalAfterChangeHook, aA as GlobalAfterReadHook, aB as GlobalBeforeChangeHook, aC as GlobalBeforeReadHook, aD as HeadingLevel, aE as HookFunction, aF as IconFieldAdmin, aG as ImageService, aH as LIFECYCLE_EVENT_NAMES, aI as LifecycleEventHandler, aJ as MultiSelectFieldAdmin, aK as NamedAccessPolicy, aL as OIDCAdminAuthProvider, aM as PaginatedResult, aN as PublicAdminAuthProvider, aO as RadioFieldAdmin, aP as ReadonlyDatabaseAdapter, aQ as RichTextFeature, aR as RichTextFieldConfig, aS as SelectFieldAdmin, aT as StorageAdapter, aU as TextFieldAdmin, aV as TextareaFieldAdmin, aW as TypedField, aX as UploadConfig, aY as UrlFieldAdmin, aZ as WordLimitFieldAdmin, a_ as WordLimitFieldConfig, a$ as WorkflowMetadata, b0 as WorkflowRole, b1 as WorkflowState, b2 as WorkflowTransitionContext } from './app-config-
|
|
1
|
+
import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, e as ArrayField, f as BlocksField, g as BooleanField, h as DateField, i as DateTimeField, E as EmailField, G as GlobalConfig, I as IconField, j as ImageField, J as JoinField, k as JsonField, M as MultiSelectField, N as NumberField, O as ObjectField, R as RadioField, l as RelationshipField, m as RichTextField, n as RowField, S as SelectField, T as TextField, o as TextareaField, p as TimeField, U as UrlField } from './app-config-C3X5BAyK.cjs';
|
|
2
|
+
export { q as AccessFunction, r as AccessFunctionArgs, s as AccessPolicyResolver, t as AccessResult, u as AccessRule, v as AdminAuthAccessResolution, w as AdminAuthClaimMapping, x as AdminAuthMember, y as AdminAuthProvider, z as AdminAuthProviderMembersConfig, K as AdminAuthProvisioningMode, Q as AdminAuthResolveAccessArgs, V as AdminAuthResolvedIdentity, X as AdminConfig, Y as AdminDashboardComponentSlots, Z as AdminIconName, _ as BaseAdminAuthProvider, $ as BaseFieldAdmin, a0 as BlockVariant, a1 as BooleanFieldAdmin, a2 as CharacterLimitFieldAdmin, a3 as CharacterLimitFieldConfig, a4 as CollectionAfterChangeHook, a5 as CollectionAfterDeleteHook, a6 as CollectionAfterReadHook, a7 as CollectionAfterTransitionHook, a8 as CollectionBeforeChangeHook, a9 as CollectionBeforeDeleteHook, aa as CollectionBeforeReadHook, ab as CollectionBeforeTransitionHook, ac as CollectionListComponentSlots, ad as CustomAdminAuthProvider, ae as DatabaseAdapter, af as DynamicOptionItem, ag as DynamicOptionsConfig, ah as DynamicOptionsResolver, ai as DynamicOptionsResolverArgs, aj as EmailFieldAdmin, ak as FieldAdminHooks, al as FieldAdminOnChangeHook, am as FieldAdminOnChangeHookArgs, an as FieldAdminOptionsHook, ao as FieldAdminOptionsHookArgs, ap as FieldAdminOptionsHookResult, aq as FieldAfterReadHook, ar as FieldAfterReadHookArgs, as as FieldBase, at as FieldBeforeChangeHook, au as FieldBeforeChangeHookArgs, av as FieldHook, aw as FieldHooks, ax as FieldType, ay as FileData, az as GlobalAfterChangeHook, aA as GlobalAfterReadHook, aB as GlobalBeforeChangeHook, aC as GlobalBeforeReadHook, aD as HeadingLevel, aE as HookFunction, aF as IconFieldAdmin, aG as ImageService, aH as LIFECYCLE_EVENT_NAMES, aI as LifecycleEventHandler, aJ as MultiSelectFieldAdmin, aK as NamedAccessPolicy, aL as OIDCAdminAuthProvider, aM as PaginatedResult, aN as PublicAdminAuthProvider, aO as RadioFieldAdmin, aP as ReadonlyDatabaseAdapter, aQ as RichTextFeature, aR as RichTextFieldConfig, aS as SelectFieldAdmin, aT as StorageAdapter, aU as TextFieldAdmin, aV as TextareaFieldAdmin, aW as TypedField, aX as UploadConfig, aY as UrlFieldAdmin, aZ as WordLimitFieldAdmin, a_ as WordLimitFieldConfig, a$ as WorkflowMetadata, b0 as WorkflowRole, b1 as WorkflowState, b2 as WorkflowTransitionContext } from './app-config-C3X5BAyK.cjs';
|
|
3
3
|
import 'lucide-react';
|
|
4
4
|
|
|
5
5
|
type Prettify<T> = {
|
|
@@ -340,7 +340,7 @@ declare function defineGlobal<TDoc extends object>(config: GlobalConfig<TDoc>):
|
|
|
340
340
|
* the database adapter, collections, globals, storage, email, and all other
|
|
341
341
|
* server-level configuration.
|
|
342
342
|
*/
|
|
343
|
-
declare function defineConfig(config: DyrectedConfig): DyrectedConfig
|
|
343
|
+
declare function defineConfig<TUser extends AuthenticatedUser = AuthenticatedUser>(config: DyrectedConfig<TUser>): DyrectedConfig<TUser>;
|
|
344
344
|
/**
|
|
345
345
|
* Define a single field of any type. This is an identity helper: it returns the
|
|
346
346
|
* field unchanged at runtime but preserves the exact literal type, so document
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, e as ArrayField, f as BlocksField, g as BooleanField, h as DateField, i as DateTimeField, E as EmailField, G as GlobalConfig, I as IconField, j as ImageField, J as JoinField, k as JsonField, M as MultiSelectField, N as NumberField, O as ObjectField, R as RadioField, l as RelationshipField, m as RichTextField, n as RowField, S as SelectField, T as TextField, o as TextareaField, p as TimeField, U as UrlField } from './app-config-
|
|
2
|
-
export { q as AccessFunction, r as AccessFunctionArgs, s as AccessPolicyResolver, t as AccessResult, u as AccessRule, v as AdminAuthAccessResolution, w as AdminAuthClaimMapping, x as AdminAuthMember, y as AdminAuthProvider, z as AdminAuthProviderMembersConfig, K as AdminAuthProvisioningMode, Q as AdminAuthResolveAccessArgs, V as AdminAuthResolvedIdentity, X as AdminConfig, Y as AdminDashboardComponentSlots, Z as AdminIconName, _ as BaseAdminAuthProvider, $ as BaseFieldAdmin, a0 as BlockVariant, a1 as BooleanFieldAdmin, a2 as CharacterLimitFieldAdmin, a3 as CharacterLimitFieldConfig, a4 as CollectionAfterChangeHook, a5 as CollectionAfterDeleteHook, a6 as CollectionAfterReadHook, a7 as CollectionAfterTransitionHook, a8 as CollectionBeforeChangeHook, a9 as CollectionBeforeDeleteHook, aa as CollectionBeforeReadHook, ab as CollectionBeforeTransitionHook, ac as CollectionListComponentSlots, ad as CustomAdminAuthProvider, ae as DatabaseAdapter, af as DynamicOptionItem, ag as DynamicOptionsConfig, ah as DynamicOptionsResolver, ai as DynamicOptionsResolverArgs, aj as EmailFieldAdmin, ak as FieldAdminHooks, al as FieldAdminOnChangeHook, am as FieldAdminOnChangeHookArgs, an as FieldAdminOptionsHook, ao as FieldAdminOptionsHookArgs, ap as FieldAdminOptionsHookResult, aq as FieldAfterReadHook, ar as FieldAfterReadHookArgs, as as FieldBase, at as FieldBeforeChangeHook, au as FieldBeforeChangeHookArgs, av as FieldHook, aw as FieldHooks, ax as FieldType, ay as FileData, az as GlobalAfterChangeHook, aA as GlobalAfterReadHook, aB as GlobalBeforeChangeHook, aC as GlobalBeforeReadHook, aD as HeadingLevel, aE as HookFunction, aF as IconFieldAdmin, aG as ImageService, aH as LIFECYCLE_EVENT_NAMES, aI as LifecycleEventHandler, aJ as MultiSelectFieldAdmin, aK as NamedAccessPolicy, aL as OIDCAdminAuthProvider, aM as PaginatedResult, aN as PublicAdminAuthProvider, aO as RadioFieldAdmin, aP as ReadonlyDatabaseAdapter, aQ as RichTextFeature, aR as RichTextFieldConfig, aS as SelectFieldAdmin, aT as StorageAdapter, aU as TextFieldAdmin, aV as TextareaFieldAdmin, aW as TypedField, aX as UploadConfig, aY as UrlFieldAdmin, aZ as WordLimitFieldAdmin, a_ as WordLimitFieldConfig, a$ as WorkflowMetadata, b0 as WorkflowRole, b1 as WorkflowState, b2 as WorkflowTransitionContext } from './app-config-
|
|
1
|
+
import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, e as ArrayField, f as BlocksField, g as BooleanField, h as DateField, i as DateTimeField, E as EmailField, G as GlobalConfig, I as IconField, j as ImageField, J as JoinField, k as JsonField, M as MultiSelectField, N as NumberField, O as ObjectField, R as RadioField, l as RelationshipField, m as RichTextField, n as RowField, S as SelectField, T as TextField, o as TextareaField, p as TimeField, U as UrlField } from './app-config-C3X5BAyK.js';
|
|
2
|
+
export { q as AccessFunction, r as AccessFunctionArgs, s as AccessPolicyResolver, t as AccessResult, u as AccessRule, v as AdminAuthAccessResolution, w as AdminAuthClaimMapping, x as AdminAuthMember, y as AdminAuthProvider, z as AdminAuthProviderMembersConfig, K as AdminAuthProvisioningMode, Q as AdminAuthResolveAccessArgs, V as AdminAuthResolvedIdentity, X as AdminConfig, Y as AdminDashboardComponentSlots, Z as AdminIconName, _ as BaseAdminAuthProvider, $ as BaseFieldAdmin, a0 as BlockVariant, a1 as BooleanFieldAdmin, a2 as CharacterLimitFieldAdmin, a3 as CharacterLimitFieldConfig, a4 as CollectionAfterChangeHook, a5 as CollectionAfterDeleteHook, a6 as CollectionAfterReadHook, a7 as CollectionAfterTransitionHook, a8 as CollectionBeforeChangeHook, a9 as CollectionBeforeDeleteHook, aa as CollectionBeforeReadHook, ab as CollectionBeforeTransitionHook, ac as CollectionListComponentSlots, ad as CustomAdminAuthProvider, ae as DatabaseAdapter, af as DynamicOptionItem, ag as DynamicOptionsConfig, ah as DynamicOptionsResolver, ai as DynamicOptionsResolverArgs, aj as EmailFieldAdmin, ak as FieldAdminHooks, al as FieldAdminOnChangeHook, am as FieldAdminOnChangeHookArgs, an as FieldAdminOptionsHook, ao as FieldAdminOptionsHookArgs, ap as FieldAdminOptionsHookResult, aq as FieldAfterReadHook, ar as FieldAfterReadHookArgs, as as FieldBase, at as FieldBeforeChangeHook, au as FieldBeforeChangeHookArgs, av as FieldHook, aw as FieldHooks, ax as FieldType, ay as FileData, az as GlobalAfterChangeHook, aA as GlobalAfterReadHook, aB as GlobalBeforeChangeHook, aC as GlobalBeforeReadHook, aD as HeadingLevel, aE as HookFunction, aF as IconFieldAdmin, aG as ImageService, aH as LIFECYCLE_EVENT_NAMES, aI as LifecycleEventHandler, aJ as MultiSelectFieldAdmin, aK as NamedAccessPolicy, aL as OIDCAdminAuthProvider, aM as PaginatedResult, aN as PublicAdminAuthProvider, aO as RadioFieldAdmin, aP as ReadonlyDatabaseAdapter, aQ as RichTextFeature, aR as RichTextFieldConfig, aS as SelectFieldAdmin, aT as StorageAdapter, aU as TextFieldAdmin, aV as TextareaFieldAdmin, aW as TypedField, aX as UploadConfig, aY as UrlFieldAdmin, aZ as WordLimitFieldAdmin, a_ as WordLimitFieldConfig, a$ as WorkflowMetadata, b0 as WorkflowRole, b1 as WorkflowState, b2 as WorkflowTransitionContext } from './app-config-C3X5BAyK.js';
|
|
3
3
|
import 'lucide-react';
|
|
4
4
|
|
|
5
5
|
type Prettify<T> = {
|
|
@@ -340,7 +340,7 @@ declare function defineGlobal<TDoc extends object>(config: GlobalConfig<TDoc>):
|
|
|
340
340
|
* the database adapter, collections, globals, storage, email, and all other
|
|
341
341
|
* server-level configuration.
|
|
342
342
|
*/
|
|
343
|
-
declare function defineConfig(config: DyrectedConfig): DyrectedConfig
|
|
343
|
+
declare function defineConfig<TUser extends AuthenticatedUser = AuthenticatedUser>(config: DyrectedConfig<TUser>): DyrectedConfig<TUser>;
|
|
344
344
|
/**
|
|
345
345
|
* Define a single field of any type. This is an identity helper: it returns the
|
|
346
346
|
* field unchanged at runtime but preserves the exact literal type, so document
|
package/dist/server.cjs
CHANGED
|
@@ -713,6 +713,10 @@ async function resolveCollectionAccess(config, collection, action, access, args)
|
|
|
713
713
|
allowed: await matchesAccessConstraint(config, collection, args.id, result)
|
|
714
714
|
};
|
|
715
715
|
}
|
|
716
|
+
function resolveFieldAccessId(context) {
|
|
717
|
+
const candidate = context.id ?? context.doc?.id ?? context.data?.id;
|
|
718
|
+
return typeof candidate === "string" && candidate.length > 0 ? candidate : void 0;
|
|
719
|
+
}
|
|
716
720
|
async function applyFieldReadAccess(context, doc) {
|
|
717
721
|
if (!doc || typeof doc !== "object") return doc;
|
|
718
722
|
const result = { ...doc };
|
|
@@ -727,7 +731,8 @@ async function applyFieldReadAccess(context, doc) {
|
|
|
727
731
|
user: context.user,
|
|
728
732
|
req: context.req,
|
|
729
733
|
doc: context.doc,
|
|
730
|
-
data: context.data
|
|
734
|
+
data: context.data,
|
|
735
|
+
id: resolveFieldAccessId(context)
|
|
731
736
|
});
|
|
732
737
|
if (!canRead) {
|
|
733
738
|
delete result[field.name];
|
|
@@ -739,9 +744,10 @@ async function applyFieldReadAccess(context, doc) {
|
|
|
739
744
|
continue;
|
|
740
745
|
}
|
|
741
746
|
if (field.type === "array" && field.fields && Array.isArray(value)) {
|
|
747
|
+
const childFields = field.fields;
|
|
742
748
|
result[field.name] = await Promise.all(
|
|
743
749
|
value.map(
|
|
744
|
-
(item) => typeof item === "object" && item !== null ? applyFieldReadAccess({ ...context, fields:
|
|
750
|
+
(item) => typeof item === "object" && item !== null ? applyFieldReadAccess({ ...context, fields: childFields }, item) : item
|
|
745
751
|
)
|
|
746
752
|
);
|
|
747
753
|
continue;
|
|
@@ -752,7 +758,7 @@ async function applyFieldReadAccess(context, doc) {
|
|
|
752
758
|
if (typeof item !== "object" || item === null) return item;
|
|
753
759
|
const typedItem = item;
|
|
754
760
|
const block = field.blocks?.find((candidate) => candidate.slug === typedItem.blockType);
|
|
755
|
-
if (!block) return item;
|
|
761
|
+
if (!block || !block.fields) return item;
|
|
756
762
|
return applyFieldReadAccess({ ...context, fields: block.fields }, typedItem);
|
|
757
763
|
})
|
|
758
764
|
);
|
|
@@ -773,7 +779,8 @@ async function applyFieldWriteAccess(context, data) {
|
|
|
773
779
|
user: context.user,
|
|
774
780
|
req: context.req,
|
|
775
781
|
doc: context.doc,
|
|
776
|
-
data: context.data
|
|
782
|
+
data: context.data,
|
|
783
|
+
id: resolveFieldAccessId(context)
|
|
777
784
|
});
|
|
778
785
|
if (!canUpdate) {
|
|
779
786
|
delete result[field.name];
|
|
@@ -786,9 +793,10 @@ async function applyFieldWriteAccess(context, data) {
|
|
|
786
793
|
continue;
|
|
787
794
|
}
|
|
788
795
|
if (field.type === "array" && field.fields && Array.isArray(value)) {
|
|
796
|
+
const childFields = field.fields;
|
|
789
797
|
result[field.name] = await Promise.all(
|
|
790
798
|
value.map(
|
|
791
|
-
(item) => typeof item === "object" && item !== null ? applyFieldWriteAccess({ ...context, fields:
|
|
799
|
+
(item) => typeof item === "object" && item !== null ? applyFieldWriteAccess({ ...context, fields: childFields }, item) : item
|
|
792
800
|
)
|
|
793
801
|
);
|
|
794
802
|
continue;
|
|
@@ -799,7 +807,7 @@ async function applyFieldWriteAccess(context, data) {
|
|
|
799
807
|
if (typeof item !== "object" || item === null) return item;
|
|
800
808
|
const typedItem = item;
|
|
801
809
|
const block = field.blocks?.find((candidate) => candidate.slug === typedItem.blockType);
|
|
802
|
-
if (!block) return item;
|
|
810
|
+
if (!block || !block.fields) return item;
|
|
803
811
|
return applyFieldWriteAccess({ ...context, fields: block.fields }, typedItem);
|
|
804
812
|
})
|
|
805
813
|
);
|
package/dist/server.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as hono_types from 'hono/types';
|
|
2
2
|
import * as hono from 'hono';
|
|
3
3
|
import { Hono, Context } from 'hono';
|
|
4
|
-
import { D as DyrectedConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-
|
|
4
|
+
import { D as DyrectedConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-C3X5BAyK.cjs';
|
|
5
5
|
import * as hono_utils_http_status from 'hono/utils/http-status';
|
|
6
6
|
import * as hono_utils_types from 'hono/utils/types';
|
|
7
7
|
import 'lucide-react';
|
package/dist/server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as hono_types from 'hono/types';
|
|
2
2
|
import * as hono from 'hono';
|
|
3
3
|
import { Hono, Context } from 'hono';
|
|
4
|
-
import { D as DyrectedConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-
|
|
4
|
+
import { D as DyrectedConfig, C as CollectionConfig, G as GlobalConfig } from './app-config-C3X5BAyK.js';
|
|
5
5
|
import * as hono_utils_http_status from 'hono/utils/http-status';
|
|
6
6
|
import * as hono_utils_types from 'hono/utils/types';
|
|
7
7
|
import 'lucide-react';
|
package/dist/server.js
CHANGED
|
@@ -425,6 +425,10 @@ async function resolveCollectionAccess(config, collection, action, access, args)
|
|
|
425
425
|
allowed: await matchesAccessConstraint(config, collection, args.id, result)
|
|
426
426
|
};
|
|
427
427
|
}
|
|
428
|
+
function resolveFieldAccessId(context) {
|
|
429
|
+
const candidate = context.id ?? context.doc?.id ?? context.data?.id;
|
|
430
|
+
return typeof candidate === "string" && candidate.length > 0 ? candidate : void 0;
|
|
431
|
+
}
|
|
428
432
|
async function applyFieldReadAccess(context, doc) {
|
|
429
433
|
if (!doc || typeof doc !== "object") return doc;
|
|
430
434
|
const result = { ...doc };
|
|
@@ -439,7 +443,8 @@ async function applyFieldReadAccess(context, doc) {
|
|
|
439
443
|
user: context.user,
|
|
440
444
|
req: context.req,
|
|
441
445
|
doc: context.doc,
|
|
442
|
-
data: context.data
|
|
446
|
+
data: context.data,
|
|
447
|
+
id: resolveFieldAccessId(context)
|
|
443
448
|
});
|
|
444
449
|
if (!canRead) {
|
|
445
450
|
delete result[field.name];
|
|
@@ -451,9 +456,10 @@ async function applyFieldReadAccess(context, doc) {
|
|
|
451
456
|
continue;
|
|
452
457
|
}
|
|
453
458
|
if (field.type === "array" && field.fields && Array.isArray(value)) {
|
|
459
|
+
const childFields = field.fields;
|
|
454
460
|
result[field.name] = await Promise.all(
|
|
455
461
|
value.map(
|
|
456
|
-
(item) => typeof item === "object" && item !== null ? applyFieldReadAccess({ ...context, fields:
|
|
462
|
+
(item) => typeof item === "object" && item !== null ? applyFieldReadAccess({ ...context, fields: childFields }, item) : item
|
|
457
463
|
)
|
|
458
464
|
);
|
|
459
465
|
continue;
|
|
@@ -464,7 +470,7 @@ async function applyFieldReadAccess(context, doc) {
|
|
|
464
470
|
if (typeof item !== "object" || item === null) return item;
|
|
465
471
|
const typedItem = item;
|
|
466
472
|
const block = field.blocks?.find((candidate) => candidate.slug === typedItem.blockType);
|
|
467
|
-
if (!block) return item;
|
|
473
|
+
if (!block || !block.fields) return item;
|
|
468
474
|
return applyFieldReadAccess({ ...context, fields: block.fields }, typedItem);
|
|
469
475
|
})
|
|
470
476
|
);
|
|
@@ -485,7 +491,8 @@ async function applyFieldWriteAccess(context, data) {
|
|
|
485
491
|
user: context.user,
|
|
486
492
|
req: context.req,
|
|
487
493
|
doc: context.doc,
|
|
488
|
-
data: context.data
|
|
494
|
+
data: context.data,
|
|
495
|
+
id: resolveFieldAccessId(context)
|
|
489
496
|
});
|
|
490
497
|
if (!canUpdate) {
|
|
491
498
|
delete result[field.name];
|
|
@@ -498,9 +505,10 @@ async function applyFieldWriteAccess(context, data) {
|
|
|
498
505
|
continue;
|
|
499
506
|
}
|
|
500
507
|
if (field.type === "array" && field.fields && Array.isArray(value)) {
|
|
508
|
+
const childFields = field.fields;
|
|
501
509
|
result[field.name] = await Promise.all(
|
|
502
510
|
value.map(
|
|
503
|
-
(item) => typeof item === "object" && item !== null ? applyFieldWriteAccess({ ...context, fields:
|
|
511
|
+
(item) => typeof item === "object" && item !== null ? applyFieldWriteAccess({ ...context, fields: childFields }, item) : item
|
|
504
512
|
)
|
|
505
513
|
);
|
|
506
514
|
continue;
|
|
@@ -511,7 +519,7 @@ async function applyFieldWriteAccess(context, data) {
|
|
|
511
519
|
if (typeof item !== "object" || item === null) return item;
|
|
512
520
|
const typedItem = item;
|
|
513
521
|
const block = field.blocks?.find((candidate) => candidate.slug === typedItem.blockType);
|
|
514
|
-
if (!block) return item;
|
|
522
|
+
if (!block || !block.fields) return item;
|
|
515
523
|
return applyFieldWriteAccess({ ...context, fields: block.fields }, typedItem);
|
|
516
524
|
})
|
|
517
525
|
);
|