@nixxie-cms/core 1.0.3 → 1.1.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.
Files changed (202) hide show
  1. package/CHANGES-1.1.md +134 -0
  2. package/context/dist/nixxie-cms-core-context.cjs.js +4 -3
  3. package/context/dist/nixxie-cms-core-context.esm.js +3 -2
  4. package/dist/declarations/src/access.d.ts +2 -2
  5. package/dist/declarations/src/access.d.ts.map +1 -1
  6. package/dist/declarations/src/admin-ui/components/Navigation.d.ts +2 -2
  7. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -1
  8. package/dist/declarations/src/admin-ui/context.d.ts +6 -6
  9. package/dist/declarations/src/admin-ui/context.d.ts.map +1 -1
  10. package/dist/declarations/src/admin-ui/utils/Fields.d.ts +3 -3
  11. package/dist/declarations/src/admin-ui/utils/Fields.d.ts.map +1 -1
  12. package/dist/declarations/src/admin-ui/utils/filters.d.ts +5 -5
  13. package/dist/declarations/src/admin-ui/utils/filters.d.ts.map +1 -1
  14. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts +3 -3
  15. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts.map +1 -1
  16. package/dist/declarations/src/admin-ui/utils/utils.d.ts +2 -2
  17. package/dist/declarations/src/admin-ui/utils/utils.d.ts.map +1 -1
  18. package/dist/declarations/src/context.d.ts +1 -1
  19. package/dist/declarations/src/context.d.ts.map +1 -1
  20. package/dist/declarations/src/fields/types/bigInt/index.d.ts +3 -3
  21. package/dist/declarations/src/fields/types/bigInt/index.d.ts.map +1 -1
  22. package/dist/declarations/src/fields/types/bytes/index.d.ts +3 -3
  23. package/dist/declarations/src/fields/types/bytes/index.d.ts.map +1 -1
  24. package/dist/declarations/src/fields/types/calendarDay/index.d.ts +3 -3
  25. package/dist/declarations/src/fields/types/calendarDay/index.d.ts.map +1 -1
  26. package/dist/declarations/src/fields/types/checkbox/index.d.ts +3 -3
  27. package/dist/declarations/src/fields/types/checkbox/index.d.ts.map +1 -1
  28. package/dist/declarations/src/fields/types/decimal/index.d.ts +3 -3
  29. package/dist/declarations/src/fields/types/decimal/index.d.ts.map +1 -1
  30. package/dist/declarations/src/fields/types/file/index.d.ts +4 -4
  31. package/dist/declarations/src/fields/types/file/index.d.ts.map +1 -1
  32. package/dist/declarations/src/fields/types/float/index.d.ts +3 -3
  33. package/dist/declarations/src/fields/types/float/index.d.ts.map +1 -1
  34. package/dist/declarations/src/fields/types/image/index.d.ts +4 -4
  35. package/dist/declarations/src/fields/types/image/index.d.ts.map +1 -1
  36. package/dist/declarations/src/fields/types/integer/index.d.ts +3 -3
  37. package/dist/declarations/src/fields/types/integer/index.d.ts.map +1 -1
  38. package/dist/declarations/src/fields/types/json/index.d.ts +3 -3
  39. package/dist/declarations/src/fields/types/json/index.d.ts.map +1 -1
  40. package/dist/declarations/src/fields/types/multiselect/index.d.ts +3 -3
  41. package/dist/declarations/src/fields/types/multiselect/index.d.ts.map +1 -1
  42. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts.map +1 -1
  43. package/dist/declarations/src/fields/types/password/index.d.ts +3 -3
  44. package/dist/declarations/src/fields/types/password/index.d.ts.map +1 -1
  45. package/dist/declarations/src/fields/types/relationship/index.d.ts +8 -8
  46. package/dist/declarations/src/fields/types/relationship/index.d.ts.map +1 -1
  47. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts +3 -3
  48. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts.map +1 -1
  49. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts +3 -3
  50. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts.map +1 -1
  51. package/dist/declarations/src/fields/types/relationship/views/index.d.ts +3 -3
  52. package/dist/declarations/src/fields/types/relationship/views/index.d.ts.map +1 -1
  53. package/dist/declarations/src/fields/types/relationship/views/types.d.ts +3 -3
  54. package/dist/declarations/src/fields/types/relationship/views/types.d.ts.map +1 -1
  55. package/dist/declarations/src/fields/types/select/index.d.ts +3 -3
  56. package/dist/declarations/src/fields/types/select/index.d.ts.map +1 -1
  57. package/dist/declarations/src/fields/types/text/index.d.ts +3 -3
  58. package/dist/declarations/src/fields/types/text/index.d.ts.map +1 -1
  59. package/dist/declarations/src/fields/types/timestamp/index.d.ts +3 -3
  60. package/dist/declarations/src/fields/types/timestamp/index.d.ts.map +1 -1
  61. package/dist/declarations/src/fields/types/virtual/index.d.ts +7 -7
  62. package/dist/declarations/src/fields/types/virtual/index.d.ts.map +1 -1
  63. package/dist/declarations/src/helpers.d.ts +249 -13
  64. package/dist/declarations/src/helpers.d.ts.map +1 -1
  65. package/dist/declarations/src/index.d.ts +9 -4
  66. package/dist/declarations/src/index.d.ts.map +1 -1
  67. package/dist/declarations/src/internal-unstable/admin-ui/pages/ListPage/index.d.ts.map +1 -1
  68. package/dist/declarations/src/lib/admin-meta.d.ts +11 -11
  69. package/dist/declarations/src/lib/admin-meta.d.ts.map +1 -1
  70. package/dist/declarations/src/lib/core/access-control.d.ts +18 -18
  71. package/dist/declarations/src/lib/core/access-control.d.ts.map +1 -1
  72. package/dist/declarations/src/lib/core/cascade.d.ts +47 -0
  73. package/dist/declarations/src/lib/core/cascade.d.ts.map +1 -0
  74. package/dist/declarations/src/lib/core/initialise-lists.d.ts +27 -24
  75. package/dist/declarations/src/lib/core/initialise-lists.d.ts.map +1 -1
  76. package/dist/declarations/src/lib/env.d.ts +9 -0
  77. package/dist/declarations/src/lib/env.d.ts.map +1 -0
  78. package/dist/declarations/src/lib/system.d.ts +1 -1
  79. package/dist/declarations/src/lib/system.d.ts.map +1 -1
  80. package/dist/declarations/src/list-features.d.ts +162 -0
  81. package/dist/declarations/src/list-features.d.ts.map +1 -0
  82. package/dist/declarations/src/schema.d.ts +24 -23
  83. package/dist/declarations/src/schema.d.ts.map +1 -1
  84. package/dist/declarations/src/session.d.ts +75 -0
  85. package/dist/declarations/src/session.d.ts.map +1 -1
  86. package/dist/declarations/src/types/admin-meta.d.ts +11 -11
  87. package/dist/declarations/src/types/admin-meta.d.ts.map +1 -1
  88. package/dist/declarations/src/types/config/access-control.d.ts +42 -42
  89. package/dist/declarations/src/types/config/access-control.d.ts.map +1 -1
  90. package/dist/declarations/src/types/config/fields.d.ts +19 -19
  91. package/dist/declarations/src/types/config/fields.d.ts.map +1 -1
  92. package/dist/declarations/src/types/config/hooks.d.ts +131 -131
  93. package/dist/declarations/src/types/config/hooks.d.ts.map +1 -1
  94. package/dist/declarations/src/types/config/index.d.ts +171 -8
  95. package/dist/declarations/src/types/config/index.d.ts.map +1 -1
  96. package/dist/declarations/src/types/config/lists.d.ts +146 -108
  97. package/dist/declarations/src/types/config/lists.d.ts.map +1 -1
  98. package/dist/declarations/src/types/context.d.ts +349 -47
  99. package/dist/declarations/src/types/context.d.ts.map +1 -1
  100. package/dist/declarations/src/types/next-fields.d.ts +28 -28
  101. package/dist/declarations/src/types/next-fields.d.ts.map +1 -1
  102. package/dist/declarations/src/types/type-info.d.ts +3 -3
  103. package/dist/declarations/src/types/type-info.d.ts.map +1 -1
  104. package/dist/{express-7559ca2d.esm.js → express-0abbce07.esm.js} +6 -6
  105. package/dist/{express-455ae20c.cjs.js → express-7ca6f76a.cjs.js} +6 -6
  106. package/dist/{index-15c8f81e.esm.js → index-5d8b0b4e.esm.js} +363 -183
  107. package/dist/index-6055753b.cjs.js +393 -0
  108. package/dist/{index-42045902.cjs.js → index-ac29f382.cjs.js} +363 -185
  109. package/dist/index-f1703b7b.esm.js +386 -0
  110. package/dist/nixxie-cms-core.cjs.js +1387 -30
  111. package/dist/nixxie-cms-core.esm.js +1361 -24
  112. package/dist/{non-null-graphql-add6bb3d.cjs.js → non-null-graphql-4a44c122.cjs.js} +1 -1
  113. package/dist/{non-null-graphql-a84ed64d.esm.js → non-null-graphql-8c5feaae.esm.js} +1 -1
  114. package/dist/{resolve-hooks-165a9ce2.cjs.js → resolve-hooks-10a5f84c.cjs.js} +240 -6
  115. package/dist/{resolve-hooks-6813a045.esm.js → resolve-hooks-9e676794.esm.js} +238 -7
  116. package/dist/{system-03e49e4f.esm.js → system-4d2a2648.esm.js} +32 -7
  117. package/dist/{system-a321642d.cjs.js → system-69e1a285.cjs.js} +32 -7
  118. package/fields/dist/nixxie-cms-core-fields.cjs.js +29 -576
  119. package/fields/dist/nixxie-cms-core-fields.esm.js +18 -565
  120. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +4 -2
  121. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +4 -2
  122. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.js +1 -6
  123. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.esm.js +1 -6
  124. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +4 -2
  125. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +4 -2
  126. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.js +4 -3
  127. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.esm.js +4 -3
  128. package/package.json +4 -4
  129. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +4 -3
  130. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +4 -3
  131. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +4 -3
  132. package/scripts/dist/nixxie-cms-core-scripts.esm.js +4 -3
  133. package/session/dist/nixxie-cms-core-session.cjs.js +286 -0
  134. package/session/dist/nixxie-cms-core-session.esm.js +279 -1
  135. package/src/access.ts +25 -25
  136. package/src/admin-ui/admin-meta-graphql.ts +5 -5
  137. package/src/admin-ui/components/CreateButtonLink.tsx +46 -46
  138. package/src/admin-ui/components/Navigation.tsx +3 -3
  139. package/src/admin-ui/context.tsx +6 -6
  140. package/src/admin-ui/utils/Fields.tsx +241 -241
  141. package/src/admin-ui/utils/actionData.ts +36 -36
  142. package/src/admin-ui/utils/filters.ts +148 -148
  143. package/src/admin-ui/utils/useCreateItem.ts +171 -171
  144. package/src/admin-ui/utils/utils.tsx +127 -127
  145. package/src/context.ts +1 -1
  146. package/src/fields/non-null-graphql.ts +115 -115
  147. package/src/fields/types/bigInt/index.ts +6 -6
  148. package/src/fields/types/bytes/index.ts +6 -6
  149. package/src/fields/types/calendarDay/index.ts +18 -19
  150. package/src/fields/types/checkbox/index.ts +6 -6
  151. package/src/fields/types/decimal/index.ts +6 -6
  152. package/src/fields/types/file/index.ts +8 -8
  153. package/src/fields/types/float/index.ts +6 -6
  154. package/src/fields/types/image/index.ts +8 -8
  155. package/src/fields/types/integer/index.ts +6 -6
  156. package/src/fields/types/json/index.ts +5 -5
  157. package/src/fields/types/multiselect/index.ts +7 -7
  158. package/src/fields/types/multiselect/views/index.tsx +149 -151
  159. package/src/fields/types/password/index.ts +6 -6
  160. package/src/fields/types/relationship/index.ts +13 -13
  161. package/src/fields/types/relationship/views/ComboboxMany.tsx +110 -110
  162. package/src/fields/types/relationship/views/ComboboxSingle.tsx +115 -115
  163. package/src/fields/types/relationship/views/ContextualActions.tsx +139 -139
  164. package/src/fields/types/relationship/views/index.tsx +492 -492
  165. package/src/fields/types/relationship/views/types.ts +46 -46
  166. package/src/fields/types/relationship/views/useApolloQuery.ts +185 -185
  167. package/src/fields/types/relationship/views/useFilter.tsx +109 -109
  168. package/src/fields/types/select/index.ts +6 -6
  169. package/src/fields/types/text/index.ts +6 -6
  170. package/src/fields/types/timestamp/index.ts +23 -21
  171. package/src/fields/types/virtual/index.ts +11 -11
  172. package/src/helpers.ts +773 -42
  173. package/src/index.ts +66 -24
  174. package/src/internal-unstable/admin-ui/pages/ItemPage/common.tsx +4 -4
  175. package/src/internal-unstable/admin-ui/pages/ItemPage/index.tsx +5 -5
  176. package/src/internal-unstable/admin-ui/pages/ListPage/index.tsx +8 -8
  177. package/src/lib/admin-meta.ts +369 -369
  178. package/src/lib/context/createContext.ts +5 -0
  179. package/src/lib/core/access-control.ts +434 -434
  180. package/src/lib/core/cascade.ts +236 -0
  181. package/src/lib/core/initialise-lists.ts +49 -33
  182. package/src/lib/core/mutations/index.ts +7 -0
  183. package/src/lib/core/mutations/nested-mutation-many-input-resolvers.ts +145 -145
  184. package/src/lib/core/mutations/nested-mutation-one-input-resolvers.ts +71 -71
  185. package/src/lib/core/queries/output-field.ts +178 -178
  186. package/src/lib/env.ts +50 -0
  187. package/src/lib/id-field.ts +2 -2
  188. package/src/lib/system.ts +221 -207
  189. package/src/lib/typescript-schema-printer.ts +227 -227
  190. package/src/list-features.ts +476 -0
  191. package/src/schema.ts +91 -22
  192. package/src/session.ts +225 -0
  193. package/src/types/admin-meta.ts +218 -218
  194. package/src/types/config/access-control.ts +186 -186
  195. package/src/types/config/fields.ts +96 -96
  196. package/src/types/config/hooks.ts +529 -529
  197. package/src/types/config/index.ts +185 -7
  198. package/src/types/config/lists.ts +606 -565
  199. package/src/types/context.ts +426 -55
  200. package/src/types/next-fields.ts +31 -31
  201. package/src/types/type-info.ts +38 -38
  202. package/src/types/type-tests.ts +21 -21
@@ -1,4 +1,5 @@
1
- import type { BaseListTypeInfo, BaseNixxieTypeInfo, ListConfig, NixxieConfigPre, NixxieConfig, ListHooks, ActionArgsConfig, Action, DeclaredAction } from "./types/index.js";
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 type ListMixin<ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo> = {
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<ListHooks<ListTypeInfo>>;
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(): ListMixin;
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(): ListMixin;
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): ListMixin;
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<ListHooks<any>>): ListMixin;
85
- type DefineListConfig<ListTypeInfo extends BaseListTypeInfo> = ListConfig<ListTypeInfo> & {
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?: ListMixin[];
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 = defineList({
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 defineList<ListTypeInfo extends BaseListTypeInfo>(config: DefineListConfig<ListTypeInfo>): ListConfig<ListTypeInfo>;
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<ListTypeInfo extends BaseListTypeInfo, Args extends ActionArgsConfig<ListTypeInfo> | undefined = undefined>(actionConfig: Action<ListTypeInfo, Args>): DeclaredAction<ListTypeInfo>;
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":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EAEV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,cAAc,EACf,yBAAe;AAMhB,eAAO,MAAM,UAAU;IACrB,wDAAwD;;;;;;;IAQxD,yDAAyD;;;;;;;IAQzD,uDAAuD;8BACtC,MAAM;;;;;IAIvB,sDAAsD;8BACrC,MAAM;;;;;IAIvB,gEAAgE;2BAClD,MAAM,OAAO,MAAM;;;;;;IAIjC,yDAAyD;4BAC1C,MAAM,gBAAgB,MAAM;;;;;;IAO3C,gCAAgC;;;;CAExB,CAAA;AAMV,MAAM,MAAM,SAAS,CAAC,YAAY,SAAS,gBAAgB,GAAG,gBAAgB,IAAI;IAChF,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAA;CACzC,CAAA;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAsB1C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAa1C;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,WAAW,SAAS,GAAG,SAAS,CAuCzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAC9B,SAAS,CAEX;AAMD,KAAK,gBAAgB,CAAC,YAAY,SAAS,gBAAgB,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG;IACxF;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,YAAY,SAAS,gBAAgB,EAC9D,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,GACrC,UAAU,CAAC,YAAY,CAAC,CAqB1B;AA4ED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,SAAS,kBAAkB,EAC9D,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,GACtC,YAAY,CAAC,QAAQ,CAAC,CAExB;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,YAAY,SAAS,gBAAgB,EACrC,IAAI,SAAS,gBAAgB,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,SAAS,EACnE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAExE"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"../../../src","sources":["helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAAuB;AAQzD,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAEhB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,MAAM,EACN,cAAc,EACf,yBAAe;AAMhB,eAAO,MAAM,UAAU;IACrB,wDAAwD;;;;;;;IAQxD,yDAAyD;;;;;;;IAQzD,uDAAuD;8BACtC,MAAM;;;;;IAIvB,sDAAsD;8BACrC,MAAM;;;;;IAIvB,gEAAgE;2BAClD,MAAM,OAAO,MAAM;;;;;;IAIjC,yDAAyD;4BAC1C,MAAM,gBAAgB,MAAM;;;;;;IAO3C,gCAAgC;;;;CAExB,CAAA;AAcV,eAAO,MAAM,aAAa,EAAE;IAC1B,6DAA6D;IAC7D,MAAM,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAA;IACpC,0EAA0E;IAC1E,aAAa,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC3C,sEAAsE;IACtE,4BAA4B,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC1D,+DAA+D;IAC/D,QAAQ,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAA;IACtC;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,uBAAuB,CAAC,GAAG,CAAC,CAAA;CA8CxD,CAAA;AAMD,MAAM,MAAM,eAAe,CAAC,kBAAkB,SAAS,sBAAsB,GAAG,sBAAsB,IAAI;IACxG,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAA;CACrD,CAAA;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAsBhD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAahD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,WAAW,SAAS,GAAG,eAAe,CAuC/D;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,GAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAsB,GACtF,eAAe,CA0BjB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAA;CAAO,GAChE,eAAe,CAkCjB;AAED;;;GAGG;AACH,wBAAgB,OAAO,IAAI,eAAe,CAczC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAU3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1D,eAAe,CA+CjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CACxB,IAAI,GAAE;IACJ,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oGAAoG;IACpG,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;IAClD,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAA;CACd,GACL,eAAe,CA+BjB;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAA;CAC9C,IAIE,aAAa;IAAE,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE;;;;;;EAKvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,CAWzD;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IACJ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;CAClB,GACL,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,eAAe,CA6BlB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,eAAe,CA6B9C;AAED,wEAAwE;AACxE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC1E,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CACjC,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CASzE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAa5E;AAED,8DAA8D;AAC9D,wBAAsB,UAAU,CAC9B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE;IACP,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,yFAAyF;IACzF,MAAM,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAA;IAChC,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GACA,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GACpC,eAAe,CAEjB;AAMD,KAAK,gBAAgB,CAAC,kBAAkB,SAAS,sBAAsB,IAAI,IAAI,CAC7E,gBAAgB,CAAC,kBAAkB,CAAC,EACpC,QAAQ,CACT,GAAG;IACF;;;;;OAKG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,CAAA;IACvD;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAA;CAC3B,GAAG,kBAAkB,CAAA;AAEtB;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,kBAAkB,SAAS,sBAAsB,EAChF,MAAM,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,GAC3C,gBAAgB,CAAC,kBAAkB,CAAC,CAoDtC;AA6ED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,SAAS,kBAAkB,EAC9D,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,GACtC,YAAY,CAAC,QAAQ,CAAC,CAExB;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,kBAAkB,SAAS,sBAAsB,EACjD,IAAI,SAAS,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,SAAS,GAAG,SAAS,EACzE,YAAY,EAAE,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAEpF"}
@@ -1,7 +1,12 @@
1
- export { list, config, group, action } from "./schema.js";
2
- export type { ListConfig, BaseFields } from "./types/index.js";
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 { defineList, defineConfig, defineAction, withTimestamps, withSoftDelete, withAudit, createMixin, validators, } from "./helpers.js";
5
- export type { ListMixin } from "./helpers.js";
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,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAgB;AACtD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,yBAAe;AAIrD,wCAAoC;AACpC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,UAAU,GACX,qBAAiB;AAClB,YAAY,EAAE,SAAS,EAAE,qBAAiB;AAO1C,wCAA8B"}
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,EAAY,mCAAyB;AAKnF,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
+ {"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, BaseListTypeInfo, ConditionalFilter, ConditionalFilterCase, NixxieConfig, NixxieContext, ListSortDescriptor, MaybeBooleanItemFunctionWithFilter, MaybeItemActionFunctionWithFilter, MaybeItemFieldFunction, MaybeItemFieldFunctionWithFilter, MaybePromise } from "../types/index.js";
2
- import type { ActionMeta, FieldMeta, ListMeta } from "../types/admin-meta.js";
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', BaseListTypeInfo>>;
13
- isRequired: EmptyResolver<ConditionalFilterCase<BaseListTypeInfo>>;
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', BaseListTypeInfo, BaseFieldTypeInfo>;
17
- fieldPosition: MaybeItemFieldFunction<'form' | 'sidebar', BaseListTypeInfo, BaseFieldTypeInfo>;
18
- isRequired: MaybeBooleanItemFunctionWithFilter<BaseListTypeInfo, BaseFieldTypeInfo>;
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', BaseListTypeInfo>;
30
+ actionMode: MaybeItemActionFunctionWithFilter<'enabled' | 'disabled' | 'hidden', 'disabled' | 'hidden', BaseCollectionTypeInfo>;
31
31
  };
32
32
  listView: {
33
- actionMode: EmptyResolver<ConditionalFilter<'enabled' | 'disabled' | 'hidden', 'disabled' | 'hidden', BaseListTypeInfo>>;
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: ListSortDescriptor<string> | null;
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<ListMeta, keyof ListMetaSource_>;
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":"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"}
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, BaseListTypeInfo, CreateListItemAccessControl, DeleteListItemAccessControl, FieldAccessControl, FieldAccessControlFunction, FieldCreateItemAccessArgs, FieldReadItemAccessArgs, FieldUpdateItemAccessArgs, NixxieContext, ListAccessControl, ListFilterAccessControl, ListOperationAccessControl, UpdateListItemAccessControl } from "../../types/index.js";
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<BaseListTypeInfo>>;
14
- create: FieldAccessControlFunction<FieldCreateItemAccessArgs<BaseListTypeInfo>>;
15
- update: FieldAccessControlFunction<FieldUpdateItemAccessArgs<BaseListTypeInfo>>;
13
+ read: FieldAccessControlFunction<FieldReadItemAccessArgs<BaseCollectionTypeInfo>>;
14
+ create: FieldAccessControlFunction<FieldCreateItemAccessArgs<BaseCollectionTypeInfo>>;
15
+ update: FieldAccessControlFunction<FieldUpdateItemAccessArgs<BaseCollectionTypeInfo>>;
16
16
  };
17
- export declare function parseFieldAccessControl(access: FieldAccessControl<BaseListTypeInfo> | undefined): ResolvedFieldAccessControl;
18
- export type ResolvedActionAccessControl = ActionAccessControlFunction<BaseListTypeInfo>;
19
- export type ResolvedListAccessControl = {
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: ListOperationAccessControl<'query', BaseListTypeInfo>;
22
- create: ListOperationAccessControl<'create', BaseListTypeInfo>;
23
- update: ListOperationAccessControl<'update', BaseListTypeInfo>;
24
- delete: ListOperationAccessControl<'delete', BaseListTypeInfo>;
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: ListFilterAccessControl<'query', BaseListTypeInfo>;
28
- update: ListFilterAccessControl<'update', BaseListTypeInfo>;
29
- delete: ListFilterAccessControl<'delete', BaseListTypeInfo>;
27
+ query: CollectionFilterAccessControl<'query', BaseCollectionTypeInfo>;
28
+ update: CollectionFilterAccessControl<'update', BaseCollectionTypeInfo>;
29
+ delete: CollectionFilterAccessControl<'delete', BaseCollectionTypeInfo>;
30
30
  };
31
31
  item: {
32
- create: CreateListItemAccessControl<BaseListTypeInfo>;
33
- update: UpdateListItemAccessControl<BaseListTypeInfo>;
34
- delete: DeleteListItemAccessControl<BaseListTypeInfo>;
32
+ create: CreateCollectionItemAccessControl<BaseCollectionTypeInfo>;
33
+ update: UpdateCollectionItemAccessControl<BaseCollectionTypeInfo>;
34
+ delete: DeleteCollectionItemAccessControl<BaseCollectionTypeInfo>;
35
35
  };
36
36
  };
37
- export declare function parseListAccessControl(access: ListAccessControl<BaseListTypeInfo>): ResolvedListAccessControl;
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":"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"}
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"}