@nixxie-cms/core 1.0.3 → 2.0.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/CHANGELOG.md +36 -0
- package/CHANGES-1.1.md +134 -0
- package/context/dist/nixxie-cms-core-context.cjs.js +4 -3
- package/context/dist/nixxie-cms-core-context.esm.js +3 -2
- package/dist/declarations/src/access.d.ts +2 -2
- package/dist/declarations/src/access.d.ts.map +1 -1
- package/dist/declarations/src/admin-ui/components/Navigation.d.ts +2 -2
- package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -1
- package/dist/declarations/src/admin-ui/context.d.ts +6 -6
- package/dist/declarations/src/admin-ui/context.d.ts.map +1 -1
- package/dist/declarations/src/admin-ui/utils/Fields.d.ts +3 -3
- package/dist/declarations/src/admin-ui/utils/Fields.d.ts.map +1 -1
- package/dist/declarations/src/admin-ui/utils/filters.d.ts +5 -5
- package/dist/declarations/src/admin-ui/utils/filters.d.ts.map +1 -1
- package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts +3 -3
- package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts.map +1 -1
- package/dist/declarations/src/admin-ui/utils/utils.d.ts +2 -2
- package/dist/declarations/src/admin-ui/utils/utils.d.ts.map +1 -1
- package/dist/declarations/src/context.d.ts +1 -1
- package/dist/declarations/src/context.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/bigInt/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/bigInt/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/bytes/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/bytes/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/calendarDay/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/calendarDay/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/checkbox/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/checkbox/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/decimal/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/decimal/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/file/index.d.ts +4 -4
- package/dist/declarations/src/fields/types/file/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/float/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/float/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/image/index.d.ts +4 -4
- package/dist/declarations/src/fields/types/image/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/integer/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/integer/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/json/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/json/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/multiselect/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/multiselect/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/multiselect/views/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/password/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/password/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/relationship/index.d.ts +8 -8
- package/dist/declarations/src/fields/types/relationship/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts +3 -3
- package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts +3 -3
- package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/relationship/views/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/relationship/views/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/relationship/views/types.d.ts +3 -3
- package/dist/declarations/src/fields/types/relationship/views/types.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/select/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/select/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/text/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/text/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/timestamp/index.d.ts +3 -3
- package/dist/declarations/src/fields/types/timestamp/index.d.ts.map +1 -1
- package/dist/declarations/src/fields/types/virtual/index.d.ts +7 -7
- package/dist/declarations/src/fields/types/virtual/index.d.ts.map +1 -1
- package/dist/declarations/src/helpers.d.ts +249 -13
- package/dist/declarations/src/helpers.d.ts.map +1 -1
- package/dist/declarations/src/index.d.ts +9 -4
- package/dist/declarations/src/index.d.ts.map +1 -1
- package/dist/declarations/src/internal-unstable/admin-ui/pages/ListPage/index.d.ts.map +1 -1
- package/dist/declarations/src/lib/admin-meta.d.ts +11 -11
- package/dist/declarations/src/lib/admin-meta.d.ts.map +1 -1
- package/dist/declarations/src/lib/core/access-control.d.ts +18 -18
- package/dist/declarations/src/lib/core/access-control.d.ts.map +1 -1
- package/dist/declarations/src/lib/core/cascade.d.ts +47 -0
- package/dist/declarations/src/lib/core/cascade.d.ts.map +1 -0
- package/dist/declarations/src/lib/core/initialise-lists.d.ts +27 -24
- package/dist/declarations/src/lib/core/initialise-lists.d.ts.map +1 -1
- package/dist/declarations/src/lib/env.d.ts +9 -0
- package/dist/declarations/src/lib/env.d.ts.map +1 -0
- package/dist/declarations/src/lib/system.d.ts +1 -1
- package/dist/declarations/src/lib/system.d.ts.map +1 -1
- package/dist/declarations/src/list-features.d.ts +162 -0
- package/dist/declarations/src/list-features.d.ts.map +1 -0
- package/dist/declarations/src/schema.d.ts +24 -23
- package/dist/declarations/src/schema.d.ts.map +1 -1
- package/dist/declarations/src/session.d.ts +75 -0
- package/dist/declarations/src/session.d.ts.map +1 -1
- package/dist/declarations/src/types/admin-meta.d.ts +11 -11
- package/dist/declarations/src/types/admin-meta.d.ts.map +1 -1
- package/dist/declarations/src/types/config/access-control.d.ts +42 -42
- package/dist/declarations/src/types/config/access-control.d.ts.map +1 -1
- package/dist/declarations/src/types/config/fields.d.ts +19 -19
- package/dist/declarations/src/types/config/fields.d.ts.map +1 -1
- package/dist/declarations/src/types/config/hooks.d.ts +131 -131
- package/dist/declarations/src/types/config/hooks.d.ts.map +1 -1
- package/dist/declarations/src/types/config/index.d.ts +190 -8
- package/dist/declarations/src/types/config/index.d.ts.map +1 -1
- package/dist/declarations/src/types/config/lists.d.ts +146 -108
- package/dist/declarations/src/types/config/lists.d.ts.map +1 -1
- package/dist/declarations/src/types/context.d.ts +507 -47
- package/dist/declarations/src/types/context.d.ts.map +1 -1
- package/dist/declarations/src/types/next-fields.d.ts +28 -28
- package/dist/declarations/src/types/next-fields.d.ts.map +1 -1
- package/dist/declarations/src/types/type-info.d.ts +3 -3
- package/dist/declarations/src/types/type-info.d.ts.map +1 -1
- package/dist/{express-455ae20c.cjs.js → express-84d534c2.cjs.js} +6 -6
- package/dist/{express-7559ca2d.esm.js → express-d0a4ce99.esm.js} +6 -6
- package/dist/{index-15c8f81e.esm.js → index-5d8b0b4e.esm.js} +363 -183
- package/dist/index-6055753b.cjs.js +393 -0
- package/dist/{index-42045902.cjs.js → index-ac29f382.cjs.js} +363 -185
- package/dist/index-f1703b7b.esm.js +386 -0
- package/dist/nixxie-cms-core.cjs.js +1388 -30
- package/dist/nixxie-cms-core.esm.js +1362 -24
- package/dist/{non-null-graphql-add6bb3d.cjs.js → non-null-graphql-4a44c122.cjs.js} +1 -1
- package/dist/{non-null-graphql-a84ed64d.esm.js → non-null-graphql-8c5feaae.esm.js} +1 -1
- package/dist/{resolve-hooks-165a9ce2.cjs.js → resolve-hooks-10a5f84c.cjs.js} +240 -6
- package/dist/{resolve-hooks-6813a045.esm.js → resolve-hooks-9e676794.esm.js} +238 -7
- package/dist/{system-a321642d.cjs.js → system-6b37a5f8.cjs.js} +33 -7
- package/dist/{system-03e49e4f.esm.js → system-e591d821.esm.js} +33 -7
- package/fields/dist/nixxie-cms-core-fields.cjs.js +29 -576
- package/fields/dist/nixxie-cms-core-fields.esm.js +18 -565
- package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +4 -2
- package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +4 -2
- package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.js +1 -6
- package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.esm.js +1 -6
- package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +4 -2
- package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +4 -2
- package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.js +4 -3
- package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.esm.js +4 -3
- package/package.json +4 -4
- package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +4 -3
- package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +4 -3
- package/scripts/dist/nixxie-cms-core-scripts.cjs.js +4 -3
- package/scripts/dist/nixxie-cms-core-scripts.esm.js +4 -3
- package/session/dist/nixxie-cms-core-session.cjs.js +286 -0
- package/session/dist/nixxie-cms-core-session.esm.js +279 -1
- package/src/access.ts +25 -25
- package/src/admin-ui/admin-meta-graphql.ts +5 -5
- package/src/admin-ui/components/CreateButtonLink.tsx +46 -46
- package/src/admin-ui/components/Navigation.tsx +3 -3
- package/src/admin-ui/context.tsx +6 -6
- package/src/admin-ui/utils/Fields.tsx +241 -241
- package/src/admin-ui/utils/actionData.ts +36 -36
- package/src/admin-ui/utils/filters.ts +148 -148
- package/src/admin-ui/utils/useCreateItem.ts +171 -171
- package/src/admin-ui/utils/utils.tsx +127 -127
- package/src/context.ts +1 -1
- package/src/fields/non-null-graphql.ts +115 -115
- package/src/fields/types/bigInt/index.ts +6 -6
- package/src/fields/types/bytes/index.ts +6 -6
- package/src/fields/types/calendarDay/index.ts +18 -19
- package/src/fields/types/checkbox/index.ts +6 -6
- package/src/fields/types/decimal/index.ts +6 -6
- package/src/fields/types/file/index.ts +8 -8
- package/src/fields/types/float/index.ts +6 -6
- package/src/fields/types/image/index.ts +8 -8
- package/src/fields/types/integer/index.ts +6 -6
- package/src/fields/types/json/index.ts +5 -5
- package/src/fields/types/multiselect/index.ts +7 -7
- package/src/fields/types/multiselect/views/index.tsx +149 -151
- package/src/fields/types/password/index.ts +6 -6
- package/src/fields/types/relationship/index.ts +13 -13
- package/src/fields/types/relationship/views/ComboboxMany.tsx +110 -110
- package/src/fields/types/relationship/views/ComboboxSingle.tsx +115 -115
- package/src/fields/types/relationship/views/ContextualActions.tsx +139 -139
- package/src/fields/types/relationship/views/index.tsx +492 -492
- package/src/fields/types/relationship/views/types.ts +46 -46
- package/src/fields/types/relationship/views/useApolloQuery.ts +185 -185
- package/src/fields/types/relationship/views/useFilter.tsx +109 -109
- package/src/fields/types/select/index.ts +6 -6
- package/src/fields/types/text/index.ts +6 -6
- package/src/fields/types/timestamp/index.ts +23 -21
- package/src/fields/types/virtual/index.ts +11 -11
- package/src/helpers.ts +773 -42
- package/src/index.ts +66 -24
- package/src/internal-unstable/admin-ui/pages/ItemPage/common.tsx +4 -4
- package/src/internal-unstable/admin-ui/pages/ItemPage/index.tsx +5 -5
- package/src/internal-unstable/admin-ui/pages/ListPage/index.tsx +8 -8
- package/src/lib/admin-meta.ts +369 -369
- package/src/lib/context/createContext.ts +6 -0
- package/src/lib/core/access-control.ts +434 -434
- package/src/lib/core/cascade.ts +236 -0
- package/src/lib/core/initialise-lists.ts +49 -33
- package/src/lib/core/mutations/index.ts +7 -0
- package/src/lib/core/mutations/nested-mutation-many-input-resolvers.ts +145 -145
- package/src/lib/core/mutations/nested-mutation-one-input-resolvers.ts +71 -71
- package/src/lib/core/queries/output-field.ts +178 -178
- package/src/lib/env.ts +50 -0
- package/src/lib/id-field.ts +2 -2
- package/src/lib/system.ts +221 -207
- package/src/lib/typescript-schema-printer.ts +227 -227
- package/src/list-features.ts +476 -0
- package/src/schema.ts +92 -22
- package/src/session.ts +225 -0
- package/src/types/admin-meta.ts +218 -218
- package/src/types/config/access-control.ts +186 -186
- package/src/types/config/fields.ts +96 -96
- package/src/types/config/hooks.ts +529 -529
- package/src/types/config/index.ts +206 -7
- package/src/types/config/lists.ts +606 -565
- package/src/types/context.ts +592 -55
- package/src/types/next-fields.ts +31 -31
- package/src/types/type-info.ts +38 -38
- package/src/types/type-tests.ts +21 -21
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ListFeaturesConfig } from "./list-features.js";
|
|
2
|
+
import type { BaseCollectionTypeInfo, BaseNixxieTypeInfo, CollectionConfig, NixxieConfigPre, NixxieConfig, CollectionHooks, CollectionAccessControl, ActionArgsConfig, Action, DeclaredAction } from "./types/index.js";
|
|
2
3
|
export declare const validators: {
|
|
3
4
|
/** Validates a string is a well-formed email address */
|
|
4
5
|
readonly email: {
|
|
@@ -45,23 +46,41 @@ export declare const validators: {
|
|
|
45
46
|
readonly isRequired: true;
|
|
46
47
|
};
|
|
47
48
|
};
|
|
48
|
-
export
|
|
49
|
+
export declare const accessPresets: {
|
|
50
|
+
/** Everyone can do everything (equivalent to `allowAll`). */
|
|
51
|
+
public: CollectionAccessControl<any>;
|
|
52
|
+
/** Any signed-in user can read & write; anonymous requests are denied. */
|
|
53
|
+
authenticated: CollectionAccessControl<any>;
|
|
54
|
+
/** Anyone can read; only signed-in users can create/update/delete. */
|
|
55
|
+
publicReadAuthenticatedWrite: CollectionAccessControl<any>;
|
|
56
|
+
/** Anyone can read; nothing can be written through the API. */
|
|
57
|
+
readOnly: CollectionAccessControl<any>;
|
|
58
|
+
/**
|
|
59
|
+
* Rows are scoped to their owner. Signed-in users may create items, and may
|
|
60
|
+
* only read/update/delete rows whose `<field>` relationship points at the
|
|
61
|
+
* current session's `itemId`.
|
|
62
|
+
*
|
|
63
|
+
* @param field the relationship field linking a row to its owning user (default `'user'`)
|
|
64
|
+
*/
|
|
65
|
+
owner: (field?: string) => CollectionAccessControl<any>;
|
|
66
|
+
};
|
|
67
|
+
export type CollectionMixin<CollectionTypeInfo extends BaseCollectionTypeInfo = BaseCollectionTypeInfo> = {
|
|
49
68
|
/** Fields added by this mixin — user fields take precedence on key conflicts */
|
|
50
69
|
fields?: Record<string, any>;
|
|
51
70
|
/** Hooks merged with existing list hooks */
|
|
52
|
-
hooks?: Partial<
|
|
71
|
+
hooks?: Partial<CollectionHooks<CollectionTypeInfo>>;
|
|
53
72
|
};
|
|
54
73
|
/**
|
|
55
74
|
* Adds `createdAt` and `updatedAt` timestamp fields.
|
|
56
75
|
* Both are hidden on create forms and read-only in item views.
|
|
57
76
|
*/
|
|
58
|
-
export declare function withTimestamps():
|
|
77
|
+
export declare function withTimestamps(): CollectionMixin;
|
|
59
78
|
/**
|
|
60
79
|
* Adds a `deletedAt` field for soft-delete support.
|
|
61
80
|
* Items are not physically deleted — set `deletedAt` to the current time instead.
|
|
62
81
|
* Note: you must manually filter `deletedAt: null` in your queries/access control.
|
|
63
82
|
*/
|
|
64
|
-
export declare function withSoftDelete():
|
|
83
|
+
export declare function withSoftDelete(): CollectionMixin;
|
|
65
84
|
/**
|
|
66
85
|
* Adds `createdBy` and `updatedBy` relationship fields that automatically
|
|
67
86
|
* track which user performed each write operation.
|
|
@@ -70,7 +89,217 @@ export declare function withSoftDelete(): ListMixin;
|
|
|
70
89
|
*
|
|
71
90
|
* @param userListKey - The list key for your user model (default: 'User')
|
|
72
91
|
*/
|
|
73
|
-
export declare function withAudit(userListKey?: string):
|
|
92
|
+
export declare function withAudit(userListKey?: string): CollectionMixin;
|
|
93
|
+
/**
|
|
94
|
+
* Adds a URL-friendly `slug` field that is auto-generated from another field
|
|
95
|
+
* (e.g. `title`) when left blank, and normalised when provided.
|
|
96
|
+
*
|
|
97
|
+
* Solves a perennial papercut: there's no built-in slug field, so everyone
|
|
98
|
+
* re-implements the same `resolveInput` hook by hand.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* defineCollection({ mixins: [withSlug({ from: 'title' })], fields: { title: text() } })
|
|
102
|
+
*/
|
|
103
|
+
export declare function withSlug(opts?: {
|
|
104
|
+
from: string;
|
|
105
|
+
field?: string;
|
|
106
|
+
isIndexed?: 'unique' | true;
|
|
107
|
+
}): CollectionMixin;
|
|
108
|
+
/**
|
|
109
|
+
* Adds a draft → published → archived workflow: a `status` select plus a
|
|
110
|
+
* `publishedAt` timestamp that is stamped automatically the first time an item
|
|
111
|
+
* transitions to `published`.
|
|
112
|
+
*
|
|
113
|
+
* Publishing is otherwise left entirely to the developer; this bakes in the
|
|
114
|
+
* common content lifecycle so a blog/news/docs list works out of the box.
|
|
115
|
+
*/
|
|
116
|
+
export declare function withPublishing(opts?: {
|
|
117
|
+
defaultStatus?: 'draft' | 'published' | 'archived';
|
|
118
|
+
}): CollectionMixin;
|
|
119
|
+
/**
|
|
120
|
+
* Adds standard SEO metadata fields, grouped together in the Admin UI.
|
|
121
|
+
* Drop-in for any content list that needs search/social previews.
|
|
122
|
+
*/
|
|
123
|
+
export declare function withSEO(): CollectionMixin;
|
|
124
|
+
/**
|
|
125
|
+
* Adds an integer `order` field for manual sorting/drag-ordering of items.
|
|
126
|
+
*/
|
|
127
|
+
export declare function withSortable(opts?: {
|
|
128
|
+
field?: string;
|
|
129
|
+
}): CollectionMixin;
|
|
130
|
+
/**
|
|
131
|
+
* Adds self-referential `parent` / `children` relationships for tree-shaped content
|
|
132
|
+
* (categories, menus, pages), with cycle prevention: an item can never be moved under
|
|
133
|
+
* one of its own descendants.
|
|
134
|
+
*
|
|
135
|
+
* @param listKey - The key of the collection this mixin is applied to (needed for the
|
|
136
|
+
* self-referencing relationship and ancestor checks).
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* defineCollection({ mixins: [withTreeStructure('Category')], fields: { name: text() } })
|
|
140
|
+
*/
|
|
141
|
+
export declare function withTreeStructure(listKey: string, opts?: {
|
|
142
|
+
parentField?: string;
|
|
143
|
+
childrenField?: string;
|
|
144
|
+
}): CollectionMixin;
|
|
145
|
+
/**
|
|
146
|
+
* Multi-tenancy: adds a required `tenant` relationship that is auto-assigned from the
|
|
147
|
+
* session on create. Combine with `tenantAccessFilter()` in the collection's
|
|
148
|
+
* `access.filter` rules to scope every query/update/delete to the session's tenant.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* defineCollection({
|
|
152
|
+
* mixins: [withTenant({ ref: 'Tenant' })],
|
|
153
|
+
* access: {
|
|
154
|
+
* filter: {
|
|
155
|
+
* query: tenantAccessFilter(),
|
|
156
|
+
* update: tenantAccessFilter(),
|
|
157
|
+
* delete: tenantAccessFilter(),
|
|
158
|
+
* },
|
|
159
|
+
* },
|
|
160
|
+
* fields: { ... },
|
|
161
|
+
* })
|
|
162
|
+
*/
|
|
163
|
+
export declare function withTenant(opts?: {
|
|
164
|
+
/** Collection that holds tenants. @default 'Tenant' */
|
|
165
|
+
ref?: string;
|
|
166
|
+
/** Field key for the tenant relationship. @default 'tenant' */
|
|
167
|
+
field?: string;
|
|
168
|
+
/** Extract the tenant id from the session. @default session.data?.tenant?.id ?? session.tenantId */
|
|
169
|
+
getTenantId?: (session: any) => string | undefined;
|
|
170
|
+
/** Allow items without a tenant (e.g. global records). @default false */
|
|
171
|
+
optional?: boolean;
|
|
172
|
+
}): CollectionMixin;
|
|
173
|
+
/**
|
|
174
|
+
* Access-control filter companion to `withTenant()`: limits matched items to the
|
|
175
|
+
* session's tenant. Returns `false` (no access) when the session has no tenant.
|
|
176
|
+
*/
|
|
177
|
+
export declare function tenantAccessFilter(opts?: {
|
|
178
|
+
field?: string;
|
|
179
|
+
getTenantId?: (session: any) => string | undefined;
|
|
180
|
+
}): ({ session }: {
|
|
181
|
+
session?: any;
|
|
182
|
+
}) => false | {
|
|
183
|
+
[x: string]: {
|
|
184
|
+
id: {
|
|
185
|
+
equals: string;
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Adds `publishAt` / `unpublishAt` timestamps for scheduled publishing. Composes with
|
|
191
|
+
* `withPublishing()` (which provides the `status` field). The schedule is enacted by
|
|
192
|
+
* `applyScheduledPublishing()` — run it from a cron job:
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* jobs: createJobs({ jobs: [{
|
|
196
|
+
* name: 'scheduled-publishing',
|
|
197
|
+
* schedule: '* * * * *',
|
|
198
|
+
* handler: async () => { await applyScheduledPublishing(getContext(), 'Post') },
|
|
199
|
+
* }]})
|
|
200
|
+
*/
|
|
201
|
+
export declare function withScheduledPublishing(): CollectionMixin;
|
|
202
|
+
/**
|
|
203
|
+
* Enact `withScheduledPublishing()` schedules for one collection: publishes drafts whose
|
|
204
|
+
* `publishAt` has passed and archives published items whose `unpublishAt` has passed.
|
|
205
|
+
* Designed to be called from a cron job (see `withScheduledPublishing`).
|
|
206
|
+
*/
|
|
207
|
+
export declare function applyScheduledPublishing(context: any, listKey: string, opts?: {
|
|
208
|
+
statusField?: string;
|
|
209
|
+
draftValue?: string;
|
|
210
|
+
publishedValue?: string;
|
|
211
|
+
archivedValue?: string;
|
|
212
|
+
}): Promise<{
|
|
213
|
+
published: number;
|
|
214
|
+
archived: number;
|
|
215
|
+
}>;
|
|
216
|
+
/**
|
|
217
|
+
* i18n: adds a `locale` select plus a shared `translationKey` that groups an item with
|
|
218
|
+
* its translations (auto-generated on create when blank). Query an item's variants with
|
|
219
|
+
* `{ translationKey: { equals }, locale: { not: ... } }` — and once compound uniqueness
|
|
220
|
+
* is configured, pair (`translationKey`, `locale`) should be unique.
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* defineCollection({ mixins: [withLocale({ locales: ['en', 'ur', 'ar'] })], fields: { ... } })
|
|
224
|
+
*/
|
|
225
|
+
export declare function withLocale(opts: {
|
|
226
|
+
locales: readonly string[];
|
|
227
|
+
defaultLocale?: string;
|
|
228
|
+
/** Field key for the grouping id. @default 'translationKey' */
|
|
229
|
+
groupField?: string;
|
|
230
|
+
}): CollectionMixin;
|
|
231
|
+
/**
|
|
232
|
+
* Editorial approval: adds an approval status + a `pendingChanges` buffer where proposed
|
|
233
|
+
* edits wait for review instead of going live. Drive it with `submitForApproval()`,
|
|
234
|
+
* `approveChanges()` and `rejectChanges()` from custom mutations or the Admin UI.
|
|
235
|
+
*/
|
|
236
|
+
export declare function withApproval(): CollectionMixin;
|
|
237
|
+
/** Park proposed changes on an item for review (see `withApproval`). */
|
|
238
|
+
export declare function submitForApproval(context: any, args: {
|
|
239
|
+
listKey: string;
|
|
240
|
+
itemId: string;
|
|
241
|
+
changes: Record<string, unknown>;
|
|
242
|
+
}): Promise<void>;
|
|
243
|
+
/**
|
|
244
|
+
* Apply an item's `pendingChanges` (running normal hooks/validation) and mark it
|
|
245
|
+
* approved. The buffered changes must be a valid update input for the collection.
|
|
246
|
+
*/
|
|
247
|
+
export declare function approveChanges(context: any, args: {
|
|
248
|
+
listKey: string;
|
|
249
|
+
itemId: string;
|
|
250
|
+
}): Promise<void>;
|
|
251
|
+
/** Discard an item's `pendingChanges` and mark it rejected. */
|
|
252
|
+
export declare function rejectChanges(context: any, args: {
|
|
253
|
+
listKey: string;
|
|
254
|
+
itemId: string;
|
|
255
|
+
}): Promise<void>;
|
|
256
|
+
/**
|
|
257
|
+
* Adds an `expiresAt` timestamp for content with a shelf life. Pair with
|
|
258
|
+
* `purgeExpired()` in a cron job to physically remove (or just count) expired items.
|
|
259
|
+
*/
|
|
260
|
+
export declare function withExpiry(opts?: {
|
|
261
|
+
field?: string;
|
|
262
|
+
}): CollectionMixin;
|
|
263
|
+
/**
|
|
264
|
+
* Delete every item whose expiry has passed (runs normal delete hooks). Returns the
|
|
265
|
+
* number deleted. Designed for a cron job; see `withExpiry`.
|
|
266
|
+
*/
|
|
267
|
+
export declare function purgeExpired(context: any, listKey: string, opts?: {
|
|
268
|
+
field?: string;
|
|
269
|
+
}): Promise<number>;
|
|
270
|
+
/**
|
|
271
|
+
* Adds a read-only `viewCount` integer. Increment it with `recordView()` — a direct,
|
|
272
|
+
* race-safe Prisma increment that bypasses hooks (a view is not an editorial change).
|
|
273
|
+
*/
|
|
274
|
+
export declare function withViewCount(opts?: {
|
|
275
|
+
field?: string;
|
|
276
|
+
}): CollectionMixin;
|
|
277
|
+
/** Increment an item's view counter (see `withViewCount`). */
|
|
278
|
+
export declare function recordView(context: any, listKey: string, itemId: string, opts?: {
|
|
279
|
+
field?: string;
|
|
280
|
+
}): Promise<void>;
|
|
281
|
+
/**
|
|
282
|
+
* Companion to cascade rules: sweep records whose to-one relationship points at
|
|
283
|
+
* nothing (e.g. rows that pre-date a cascade rule, or were orphaned by `setNull`).
|
|
284
|
+
* Runs normal delete hooks (so cascade rules fire too). Designed for a cron job.
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* jobs: createJobs({ jobs: [{
|
|
288
|
+
* name: 'orphan-cleanup',
|
|
289
|
+
* schedule: '0 4 * * *',
|
|
290
|
+
* handler: async () => { await cleanupOrphans(getContext(), { collection: 'Comment', field: 'post' }) },
|
|
291
|
+
* }]})
|
|
292
|
+
*/
|
|
293
|
+
export declare function cleanupOrphans(context: any, options: {
|
|
294
|
+
/** Collection to sweep. */
|
|
295
|
+
collection: string;
|
|
296
|
+
/** To-one relationship field that must be connected for the record to be kept. */
|
|
297
|
+
field: string;
|
|
298
|
+
/** 'delete' removes orphans; 'softDelete' stamps `softDeleteField`. @default 'delete' */
|
|
299
|
+
action?: 'delete' | 'softDelete';
|
|
300
|
+
/** @default 'deletedAt' */
|
|
301
|
+
softDeleteField?: string;
|
|
302
|
+
}): Promise<number>;
|
|
74
303
|
/**
|
|
75
304
|
* Factory for building reusable field group mixins.
|
|
76
305
|
*
|
|
@@ -81,19 +310,26 @@ export declare function withAudit(userListKey?: string): ListMixin;
|
|
|
81
310
|
* postcode: text({ validation: validators.regex(/^\d{4}$/, 'Must be a 4-digit postcode') }),
|
|
82
311
|
* })
|
|
83
312
|
*/
|
|
84
|
-
export declare function createMixin(fields: Record<string, any>, hooks?: Partial<
|
|
85
|
-
type DefineListConfig<
|
|
313
|
+
export declare function createMixin(fields: Record<string, any>, hooks?: Partial<CollectionHooks<any>>): CollectionMixin;
|
|
314
|
+
type DefineListConfig<CollectionTypeInfo extends BaseCollectionTypeInfo> = Omit<CollectionConfig<CollectionTypeInfo>, 'access'> & {
|
|
315
|
+
/**
|
|
316
|
+
* Controls what data can be read and changed. Optional here — unlike
|
|
317
|
+
* the lower-level `list()`, `defineCollection` defaults to `accessPresets.public`
|
|
318
|
+
* so a minimal list is genuinely one line. Set an explicit preset or access
|
|
319
|
+
* object the moment you need real rules.
|
|
320
|
+
*/
|
|
321
|
+
access?: CollectionConfig<CollectionTypeInfo>['access'];
|
|
86
322
|
/**
|
|
87
323
|
* Mixins to apply to this list. Mixin fields are merged before user fields,
|
|
88
324
|
* so user fields always take precedence on key conflicts.
|
|
89
325
|
*/
|
|
90
|
-
mixins?:
|
|
91
|
-
};
|
|
326
|
+
mixins?: CollectionMixin[];
|
|
327
|
+
} & ListFeaturesConfig;
|
|
92
328
|
/**
|
|
93
329
|
* Defines a list with optional mixins for reusable field groups and hooks.
|
|
94
330
|
*
|
|
95
331
|
* @example
|
|
96
|
-
* export const Post =
|
|
332
|
+
* export const Post = defineCollection({
|
|
97
333
|
* mixins: [withTimestamps()],
|
|
98
334
|
* fields: {
|
|
99
335
|
* title: text({ validation: validators.required }),
|
|
@@ -101,7 +337,7 @@ type DefineListConfig<ListTypeInfo extends BaseListTypeInfo> = ListConfig<ListTy
|
|
|
101
337
|
* },
|
|
102
338
|
* })
|
|
103
339
|
*/
|
|
104
|
-
export declare function
|
|
340
|
+
export declare function defineCollection<CollectionTypeInfo extends BaseCollectionTypeInfo>(config: DefineListConfig<CollectionTypeInfo>): CollectionConfig<CollectionTypeInfo>;
|
|
105
341
|
/**
|
|
106
342
|
* Defines the Nixxie configuration. This is a typed alias for `config()` that
|
|
107
343
|
* provides the same functionality with a more declarative name.
|
|
@@ -116,6 +352,6 @@ export declare function defineConfig<TypeInfo extends BaseNixxieTypeInfo>(nixxie
|
|
|
116
352
|
/**
|
|
117
353
|
* Defines a list action. Typed alias for `action()`.
|
|
118
354
|
*/
|
|
119
|
-
export declare function defineAction<
|
|
355
|
+
export declare function defineAction<CollectionTypeInfo extends BaseCollectionTypeInfo, Args extends ActionArgsConfig<CollectionTypeInfo> | undefined = undefined>(actionConfig: Action<CollectionTypeInfo, Args>): DeclaredAction<CollectionTypeInfo>;
|
|
120
356
|
export {};
|
|
121
357
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"../../../src","sources":["helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"../../../src","sources":["helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export
|
|
1
|
+
export { collection, fieldGroup, createAction } from "./schema.js";
|
|
2
|
+
export { validateEnv } from "./lib/env.js";
|
|
3
|
+
export { previewDelete } from "./lib/core/cascade.js";
|
|
4
|
+
export type { CascadePreview, CascadePreviewNode } from "./lib/core/cascade.js";
|
|
5
|
+
export type { CascadeRule, CascadeAction } from "./types/config/lists.js";
|
|
6
|
+
export type { CollectionConfig, BaseFields, NixxiePlugin, NixxieEnvSpec, NixxieEnvVarSpec, } from "./types/index.js";
|
|
3
7
|
export type * from "./types/context.js";
|
|
4
|
-
export {
|
|
5
|
-
export type {
|
|
8
|
+
export { defineCollection, defineConfig, defineAction, withTimestamps, withSoftDelete, withAudit, withSlug, withPublishing, withSEO, withSortable, withTreeStructure, withTenant, tenantAccessFilter, withScheduledPublishing, applyScheduledPublishing, withLocale, withApproval, submitForApproval, approveChanges, rejectChanges, withExpiry, purgeExpired, withViewCount, recordView, cleanupOrphans, createMixin, accessPresets, validators, } from "./helpers.js";
|
|
9
|
+
export type { CollectionMixin } from "./helpers.js";
|
|
10
|
+
export type { ListFeaturesConfig, ComputedConfig, ConstraintsConfig, DefaultFilterConfig, StateMachineConfig, PoliciesConfig, PolicyRule, EventsConfig, SearchableConfig, VersionedConfig, } from "./list-features.js";
|
|
6
11
|
export * from "./types/schema/index.js";
|
|
7
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAgB;AAC/D,OAAO,EAAE,WAAW,EAAE,qBAAiB;AACvC,OAAO,EAAE,aAAa,EAAE,8BAA0B;AAClD,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,8BAA0B;AAC5E,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gCAA4B;AACtE,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,yBAAe;AAIhB,wCAAoC;AACpC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,EACd,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,UAAU,GACX,qBAAiB;AAClB,YAAY,EAAE,eAAe,EAAE,qBAAiB;AAChD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,2BAAuB;AAOxB,wCAA8B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"../../../../../../../src/internal-unstable/admin-ui/pages/ListPage","sources":["index.tsx"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAyB,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"../../../../../../../src/internal-unstable/admin-ui/pages/ListPage","sources":["index.tsx"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAyB,SAAS,EAAkB,mCAAyB;AAKzF,KAAK,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AACxC,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAmMD,eAAO,MAAM,WAAW,GAAI,OAAO,aAAa,kDAAkC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BaseFieldTypeInfo, BaseItem,
|
|
2
|
-
import type { ActionMeta, FieldMeta,
|
|
1
|
+
import type { BaseFieldTypeInfo, BaseItem, BaseCollectionTypeInfo, ConditionalFilter, ConditionalFilterCase, NixxieConfig, NixxieContext, CollectionSortDescriptor, MaybeBooleanItemFunctionWithFilter, MaybeItemActionFunctionWithFilter, MaybeItemFieldFunction, MaybeItemFieldFunctionWithFilter, MaybePromise } from "../types/index.js";
|
|
2
|
+
import type { ActionMeta, FieldMeta, CollectionMeta } from "../types/admin-meta.js";
|
|
3
3
|
import type { GraphQLNames, JSONValue } from "../types/utils.js";
|
|
4
4
|
import type { InitialisedList } from "./core/initialise-lists.js";
|
|
5
5
|
type EmptyResolver<Return> = (args: {}, context: NixxieContext) => MaybePromise<Return>;
|
|
@@ -9,13 +9,13 @@ type FieldMetaSource_ = {
|
|
|
9
9
|
isOrderable: EmptyResolver<boolean>;
|
|
10
10
|
isFilterable: EmptyResolver<boolean>;
|
|
11
11
|
createView: {
|
|
12
|
-
fieldMode: EmptyResolver<ConditionalFilter<'edit' | 'hidden', 'hidden',
|
|
13
|
-
isRequired: EmptyResolver<ConditionalFilterCase<
|
|
12
|
+
fieldMode: EmptyResolver<ConditionalFilter<'edit' | 'hidden', 'hidden', BaseCollectionTypeInfo>>;
|
|
13
|
+
isRequired: EmptyResolver<ConditionalFilterCase<BaseCollectionTypeInfo>>;
|
|
14
14
|
};
|
|
15
15
|
itemView: {
|
|
16
|
-
fieldMode: MaybeItemFieldFunctionWithFilter<'edit' | 'read' | 'hidden', 'read' | 'hidden',
|
|
17
|
-
fieldPosition: MaybeItemFieldFunction<'form' | 'sidebar',
|
|
18
|
-
isRequired: MaybeBooleanItemFunctionWithFilter<
|
|
16
|
+
fieldMode: MaybeItemFieldFunctionWithFilter<'edit' | 'read' | 'hidden', 'read' | 'hidden', BaseCollectionTypeInfo, BaseFieldTypeInfo>;
|
|
17
|
+
fieldPosition: MaybeItemFieldFunction<'form' | 'sidebar', BaseCollectionTypeInfo, BaseFieldTypeInfo>;
|
|
18
|
+
isRequired: MaybeBooleanItemFunctionWithFilter<BaseCollectionTypeInfo, BaseFieldTypeInfo>;
|
|
19
19
|
};
|
|
20
20
|
listView: {
|
|
21
21
|
fieldMode: EmptyResolver<'read' | 'hidden'>;
|
|
@@ -27,10 +27,10 @@ export type FieldMetaSource = FieldMetaSource_ & Omit<FieldMeta, keyof FieldMeta
|
|
|
27
27
|
type ActionMetaSource_ = {
|
|
28
28
|
listKey: string;
|
|
29
29
|
itemView: Omit<ActionMeta['itemView'], 'actionMode'> & {
|
|
30
|
-
actionMode: MaybeItemActionFunctionWithFilter<'enabled' | 'disabled' | 'hidden', 'disabled' | 'hidden',
|
|
30
|
+
actionMode: MaybeItemActionFunctionWithFilter<'enabled' | 'disabled' | 'hidden', 'disabled' | 'hidden', BaseCollectionTypeInfo>;
|
|
31
31
|
};
|
|
32
32
|
listView: {
|
|
33
|
-
actionMode: EmptyResolver<ConditionalFilter<'enabled' | 'disabled' | 'hidden', 'disabled' | 'hidden',
|
|
33
|
+
actionMode: EmptyResolver<ConditionalFilter<'enabled' | 'disabled' | 'hidden', 'disabled' | 'hidden', BaseCollectionTypeInfo>>;
|
|
34
34
|
};
|
|
35
35
|
item: BaseItem | null;
|
|
36
36
|
};
|
|
@@ -51,14 +51,14 @@ type ListMetaSource_ = {
|
|
|
51
51
|
initialColumns: string[];
|
|
52
52
|
initialFilter: EmptyResolver<JSONValue>;
|
|
53
53
|
initialSearchFields: string[];
|
|
54
|
-
initialSort:
|
|
54
|
+
initialSort: CollectionSortDescriptor<string> | null;
|
|
55
55
|
isSingleton: boolean;
|
|
56
56
|
hideNavigation: EmptyResolver<boolean>;
|
|
57
57
|
hideCreate: EmptyResolver<boolean>;
|
|
58
58
|
hideDelete: EmptyResolver<boolean>;
|
|
59
59
|
item: BaseItem | null;
|
|
60
60
|
};
|
|
61
|
-
export type ListMetaSource = ListMetaSource_ & Omit<
|
|
61
|
+
export type ListMetaSource = ListMetaSource_ & Omit<CollectionMeta, keyof ListMetaSource_>;
|
|
62
62
|
export type AdminMetaSource = {
|
|
63
63
|
lists: ListMetaSource[];
|
|
64
64
|
listsByKey: Record<string, ListMetaSource>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-meta.d.ts","sourceRoot":"../../../../src/lib","sources":["admin-meta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"admin-meta.d.ts","sourceRoot":"../../../../src/lib","sources":["admin-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ActionAccessControlFunction, BaseItem,
|
|
1
|
+
import type { ActionAccessControlFunction, BaseItem, BaseCollectionTypeInfo, CreateCollectionItemAccessControl, DeleteCollectionItemAccessControl, FieldAccessControl, FieldAccessControlFunction, FieldCreateItemAccessArgs, FieldReadItemAccessArgs, FieldUpdateItemAccessArgs, NixxieContext, CollectionAccessControl, CollectionFilterAccessControl, CollectionOperationAccessControl, UpdateCollectionItemAccessControl } from "../../types/index.js";
|
|
2
2
|
import type { InitialisedAction, InitialisedList } from "./initialise-lists.js";
|
|
3
3
|
import { type InputFilter, type UniqueInputFilter } from "./where-inputs.js";
|
|
4
4
|
export declare function cannotForItem(operation: string, list: InitialisedList): string;
|
|
@@ -10,30 +10,30 @@ export declare function getAccessFilters(list: InitialisedList, context: NixxieC
|
|
|
10
10
|
export declare function enforceListLevelAccessControl(context: NixxieContext, operation: 'create' | 'update' | 'delete', list: InitialisedList, inputData: Record<string, unknown>, item: BaseItem | undefined): Promise<void>;
|
|
11
11
|
export declare function enforceFieldLevelAccessControl(context: NixxieContext, operation: 'create' | 'update', list: InitialisedList, inputData: Record<string, unknown>, item: BaseItem | undefined): Promise<void>;
|
|
12
12
|
export type ResolvedFieldAccessControl = {
|
|
13
|
-
read: FieldAccessControlFunction<FieldReadItemAccessArgs<
|
|
14
|
-
create: FieldAccessControlFunction<FieldCreateItemAccessArgs<
|
|
15
|
-
update: FieldAccessControlFunction<FieldUpdateItemAccessArgs<
|
|
13
|
+
read: FieldAccessControlFunction<FieldReadItemAccessArgs<BaseCollectionTypeInfo>>;
|
|
14
|
+
create: FieldAccessControlFunction<FieldCreateItemAccessArgs<BaseCollectionTypeInfo>>;
|
|
15
|
+
update: FieldAccessControlFunction<FieldUpdateItemAccessArgs<BaseCollectionTypeInfo>>;
|
|
16
16
|
};
|
|
17
|
-
export declare function parseFieldAccessControl(access: FieldAccessControl<
|
|
18
|
-
export type ResolvedActionAccessControl = ActionAccessControlFunction<
|
|
19
|
-
export type
|
|
17
|
+
export declare function parseFieldAccessControl(access: FieldAccessControl<BaseCollectionTypeInfo> | undefined): ResolvedFieldAccessControl;
|
|
18
|
+
export type ResolvedActionAccessControl = ActionAccessControlFunction<BaseCollectionTypeInfo>;
|
|
19
|
+
export type ResolvedCollectionAccessControl = {
|
|
20
20
|
operation: {
|
|
21
|
-
query:
|
|
22
|
-
create:
|
|
23
|
-
update:
|
|
24
|
-
delete:
|
|
21
|
+
query: CollectionOperationAccessControl<'query', BaseCollectionTypeInfo>;
|
|
22
|
+
create: CollectionOperationAccessControl<'create', BaseCollectionTypeInfo>;
|
|
23
|
+
update: CollectionOperationAccessControl<'update', BaseCollectionTypeInfo>;
|
|
24
|
+
delete: CollectionOperationAccessControl<'delete', BaseCollectionTypeInfo>;
|
|
25
25
|
};
|
|
26
26
|
filter: {
|
|
27
|
-
query:
|
|
28
|
-
update:
|
|
29
|
-
delete:
|
|
27
|
+
query: CollectionFilterAccessControl<'query', BaseCollectionTypeInfo>;
|
|
28
|
+
update: CollectionFilterAccessControl<'update', BaseCollectionTypeInfo>;
|
|
29
|
+
delete: CollectionFilterAccessControl<'delete', BaseCollectionTypeInfo>;
|
|
30
30
|
};
|
|
31
31
|
item: {
|
|
32
|
-
create:
|
|
33
|
-
update:
|
|
34
|
-
delete:
|
|
32
|
+
create: CreateCollectionItemAccessControl<BaseCollectionTypeInfo>;
|
|
33
|
+
update: UpdateCollectionItemAccessControl<BaseCollectionTypeInfo>;
|
|
34
|
+
delete: DeleteCollectionItemAccessControl<BaseCollectionTypeInfo>;
|
|
35
35
|
};
|
|
36
36
|
};
|
|
37
|
-
export declare function parseListAccessControl(access:
|
|
37
|
+
export declare function parseListAccessControl(access: CollectionAccessControl<BaseCollectionTypeInfo>): ResolvedCollectionAccessControl;
|
|
38
38
|
export declare function checkUniqueItemExists(uniqueInput: UniqueInputFilter, foreignList: InitialisedList, context: NixxieContext, operation: string): Promise<import("../../types/prisma.js").UniquePrismaFilter>;
|
|
39
39
|
//# sourceMappingURL=access-control.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-control.d.ts","sourceRoot":"../../../../../src/lib/core","sources":["access-control.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,2BAA2B,EAC3B,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"access-control.d.ts","sourceRoot":"../../../../../src/lib/core","sources":["access-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { NixxieContext } from "../../types/index.js";
|
|
2
|
+
import type { CascadeAction } from "../../types/config/lists.js";
|
|
3
|
+
import type { InitialisedList } from "./initialise-lists.js";
|
|
4
|
+
/**
|
|
5
|
+
* Check `restrict` rules for an item about to be deleted. Runs before any cascade work,
|
|
6
|
+
* so a refused delete leaves the database untouched. Records that are already part of
|
|
7
|
+
* the in-flight cascade (visited) don't count — they are being deleted too.
|
|
8
|
+
*/
|
|
9
|
+
export declare function enforceCascadeRestrictions(list: InitialisedList, context: NixxieContext, item: {
|
|
10
|
+
id: unknown;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Enact the non-restrict cascade rules for an item that is about to be deleted.
|
|
15
|
+
* Called from the delete pipeline after hooks, immediately before the database delete.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runCascade(list: InitialisedList, context: NixxieContext, item: {
|
|
18
|
+
id: unknown;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
export type CascadePreviewNode = {
|
|
22
|
+
collection: string;
|
|
23
|
+
id: string;
|
|
24
|
+
/** The item's label-field value, when readable. */
|
|
25
|
+
label?: string;
|
|
26
|
+
/** What would happen to this record. */
|
|
27
|
+
action: CascadeAction;
|
|
28
|
+
children: CascadePreviewNode[];
|
|
29
|
+
};
|
|
30
|
+
export type CascadePreview = {
|
|
31
|
+
root: CascadePreviewNode;
|
|
32
|
+
/** Per collection, how many records each action would touch (excluding the root). */
|
|
33
|
+
totals: Record<string, Partial<Record<CascadeAction, number>>>;
|
|
34
|
+
/** True when the walk stopped early at the safety cap — totals are then lower bounds. */
|
|
35
|
+
truncated: boolean;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Compute — without changing anything — the full tree of records a delete would touch,
|
|
39
|
+
* following cascade rules recursively. Surface this in delete confirmations:
|
|
40
|
+
* "This will delete 1 Post, 47 Comments and disconnect 3 Drafts."
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* const preview = await previewDelete(context, 'Post', postId)
|
|
44
|
+
* console.log(preview.totals) // { Comment: { delete: 47 }, Draft: { setNull: 3 } }
|
|
45
|
+
*/
|
|
46
|
+
export declare function previewDelete(context: NixxieContext, listKey: string, itemId: string): Promise<CascadePreview>;
|
|
47
|
+
//# sourceMappingURL=cascade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade.d.ts","sourceRoot":"../../../../../src/lib/core","sources":["cascade.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,6BAAmB;AAChD,OAAO,KAAK,EAAE,aAAa,EAAe,oCAAgC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA0B;AAsBzD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CA2Df;AAID,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,kBAAkB,EAAE,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,kBAAkB,CAAA;IACxB,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9D,yFAAyF;IACzF,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CA6DzB"}
|