@nixxie-cms/core 1.0.0 → 1.0.2

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 (187) hide show
  1. package/README.md +2 -2
  2. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.cjs.js +4 -4
  3. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.esm.js +4 -4
  4. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.cjs.js +2 -2
  5. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.esm.js +2 -2
  6. package/context/dist/nixxie-cms-core-context.cjs.js +2 -2
  7. package/context/dist/nixxie-cms-core-context.esm.js +2 -2
  8. package/dist/{CreateItemDialog-33335548.esm.js → CreateItemDialog-7008b050.esm.js} +1 -1
  9. package/dist/{CreateItemDialog-56cf59b7.cjs.js → CreateItemDialog-a0cab315.cjs.js} +1 -1
  10. package/dist/{PageContainer-7db73317.esm.js → PageContainer-5ae731cc.esm.js} +25 -18
  11. package/dist/{PageContainer-27c27f10.cjs.js → PageContainer-abd7159f.cjs.js} +25 -18
  12. package/dist/{admin-meta-graphql-6f7f5331.esm.js → admin-meta-graphql-0e6e606e.esm.js} +1 -1
  13. package/dist/{admin-meta-graphql-c8f926e9.cjs.js → admin-meta-graphql-306c224a.cjs.js} +1 -1
  14. package/dist/{context-3132c3ed.esm.js → context-af9957ed.esm.js} +2 -2
  15. package/dist/{context-e7a45152.cjs.js → context-b5204629.cjs.js} +2 -2
  16. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -1
  17. package/dist/declarations/src/admin-ui/components/PageContainer.d.ts.map +1 -1
  18. package/dist/declarations/src/helpers.d.ts.map +1 -1
  19. package/dist/declarations/src/index.d.ts +1 -0
  20. package/dist/declarations/src/index.d.ts.map +1 -1
  21. package/dist/declarations/src/internal-unstable/admin-ui/id-field-view.d.ts.map +1 -0
  22. package/dist/declarations/src/internal-unstable/admin-ui/pages/App/index.d.ts.map +1 -0
  23. package/dist/declarations/src/internal-unstable/admin-ui/pages/CreateItemPage/index.d.ts.map +1 -0
  24. package/dist/declarations/src/internal-unstable/admin-ui/pages/HomePage/index.d.ts.map +1 -0
  25. package/dist/declarations/src/internal-unstable/admin-ui/pages/ItemPage/index.d.ts.map +1 -0
  26. package/dist/declarations/src/internal-unstable/admin-ui/pages/ListPage/index.d.ts.map +1 -0
  27. package/dist/declarations/src/internal-unstable/admin-ui/pages/NoAccessPage/index.d.ts.map +1 -0
  28. package/dist/declarations/src/internal-unstable/artifacts.d.ts.map +1 -0
  29. package/dist/declarations/src/lib/core/initialise-lists.d.ts +1 -1
  30. package/dist/declarations/src/schema.d.ts.map +1 -1
  31. package/dist/declarations/src/types/config/index.d.ts +60 -1
  32. package/dist/declarations/src/types/config/index.d.ts.map +1 -1
  33. package/dist/declarations/src/types/config/lists.d.ts +4 -4
  34. package/dist/declarations/src/types/context.d.ts +150 -0
  35. package/dist/declarations/src/types/context.d.ts.map +1 -1
  36. package/dist/declarations/src/types/next-fields.d.ts +1 -1
  37. package/dist/{express-e9ed9a7d.cjs.js → express-455ae20c.cjs.js} +1 -1
  38. package/dist/{express-6743b918.esm.js → express-7559ca2d.esm.js} +1 -1
  39. package/dist/{index-ac01583b.cjs.js → index-89635494.cjs.js} +4 -4
  40. package/dist/{index-24b78415.esm.js → index-baa799e0.esm.js} +4 -4
  41. package/dist/nixxie-cms-core.cjs.js +104 -77
  42. package/dist/nixxie-cms-core.esm.js +104 -77
  43. package/dist/{non-null-graphql-5315718c.esm.js → non-null-graphql-a84ed64d.esm.js} +1 -1
  44. package/dist/{non-null-graphql-17b83ddc.cjs.js → non-null-graphql-add6bb3d.cjs.js} +1 -1
  45. package/dist/{resolve-hooks-66fe8a8e.cjs.js → resolve-hooks-165a9ce2.cjs.js} +1 -1
  46. package/dist/{resolve-hooks-17aafd37.esm.js → resolve-hooks-6813a045.esm.js} +2 -2
  47. package/dist/{system-dfec2f0a.esm.js → system-03e49e4f.esm.js} +8 -4
  48. package/dist/{system-48c5f6df.cjs.js → system-a321642d.cjs.js} +8 -4
  49. package/dist/{useFilter-0b5a1ee6.esm.js → useFilter-9b6db1f9.esm.js} +1 -1
  50. package/dist/{useFilter-1a4e6900.cjs.js → useFilter-acc9d413.cjs.js} +1 -1
  51. package/fields/dist/nixxie-cms-core-fields.cjs.js +16 -16
  52. package/fields/dist/nixxie-cms-core-fields.esm.js +17 -17
  53. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +3 -3
  54. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +3 -3
  55. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.cjs.js +1 -1
  56. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.esm.js +1 -1
  57. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +3 -3
  58. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +3 -3
  59. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.cjs.js +4 -4
  60. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.esm.js +4 -4
  61. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.cjs.js +1 -1
  62. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.esm.js +1 -1
  63. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.cjs.js +1 -1
  64. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.esm.js +1 -1
  65. package/internal-unstable/admin-ui/id-field-view/dist/nixxie-cms-core-internal-unstable-admin-ui-id-field-view.cjs.d.ts +2 -0
  66. package/internal-unstable/admin-ui/id-field-view/dist/nixxie-cms-core-internal-unstable-admin-ui-id-field-view.cjs.js +244 -0
  67. package/internal-unstable/admin-ui/id-field-view/dist/nixxie-cms-core-internal-unstable-admin-ui-id-field-view.esm.js +235 -0
  68. package/internal-unstable/admin-ui/id-field-view/package.json +4 -0
  69. package/internal-unstable/admin-ui/next-config/package.json +4 -0
  70. package/internal-unstable/admin-ui/pages/App/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-App.cjs.d.ts +2 -0
  71. package/internal-unstable/admin-ui/pages/App/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-App.cjs.js +59 -0
  72. package/internal-unstable/admin-ui/pages/App/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-App.esm.js +55 -0
  73. package/internal-unstable/admin-ui/pages/App/package.json +4 -0
  74. package/internal-unstable/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-CreateItemPage.cjs.d.ts +2 -0
  75. package/internal-unstable/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-CreateItemPage.cjs.js +116 -0
  76. package/internal-unstable/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-CreateItemPage.esm.js +112 -0
  77. package/internal-unstable/admin-ui/pages/CreateItemPage/package.json +4 -0
  78. package/internal-unstable/admin-ui/pages/HomePage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-HomePage.cjs.d.ts +2 -0
  79. package/internal-unstable/admin-ui/pages/HomePage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-HomePage.cjs.js +336 -0
  80. package/internal-unstable/admin-ui/pages/HomePage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-HomePage.esm.js +332 -0
  81. package/internal-unstable/admin-ui/pages/HomePage/package.json +4 -0
  82. package/internal-unstable/admin-ui/pages/ItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ItemPage.cjs.d.ts +2 -0
  83. package/internal-unstable/admin-ui/pages/ItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ItemPage.cjs.js +463 -0
  84. package/internal-unstable/admin-ui/pages/ItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ItemPage.esm.js +455 -0
  85. package/internal-unstable/admin-ui/pages/ItemPage/package.json +4 -0
  86. package/internal-unstable/admin-ui/pages/ListPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ListPage.cjs.d.ts +2 -0
  87. package/internal-unstable/admin-ui/pages/ListPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ListPage.cjs.js +1195 -0
  88. package/internal-unstable/admin-ui/pages/ListPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ListPage.esm.js +1187 -0
  89. package/internal-unstable/admin-ui/pages/ListPage/package.json +4 -0
  90. package/internal-unstable/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-NoAccessPage.cjs.d.ts +2 -0
  91. package/internal-unstable/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-NoAccessPage.cjs.js +40 -0
  92. package/internal-unstable/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-NoAccessPage.esm.js +35 -0
  93. package/internal-unstable/admin-ui/pages/NoAccessPage/package.json +4 -0
  94. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.d.ts +2 -0
  95. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.js +51 -0
  96. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.esm.js +38 -0
  97. package/internal-unstable/artifacts/package.json +4 -0
  98. package/package.json +44 -44
  99. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +44 -15
  100. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +44 -15
  101. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +3 -3
  102. package/scripts/dist/nixxie-cms-core-scripts.esm.js +3 -3
  103. package/src/admin-ui/admin-meta-graphql.ts +168 -168
  104. package/src/admin-ui/components/CommandPalette.tsx +433 -431
  105. package/src/admin-ui/components/Navigation.tsx +389 -385
  106. package/src/admin-ui/components/PageContainer.tsx +311 -310
  107. package/src/admin-ui/components/WelcomeDialog.tsx +1 -1
  108. package/src/admin-ui/context.tsx +338 -338
  109. package/src/admin-ui/templates/app.ts +60 -60
  110. package/src/admin-ui/templates/create-item.ts +5 -5
  111. package/src/admin-ui/templates/home.ts +2 -2
  112. package/src/admin-ui/templates/item.tsx +5 -5
  113. package/src/admin-ui/templates/list.tsx +5 -5
  114. package/src/admin-ui/templates/next-config.ts +29 -0
  115. package/src/admin-ui/templates/no-access.ts +7 -7
  116. package/src/fields/types/bigInt/index.ts +181 -181
  117. package/src/fields/types/bytes/index.ts +275 -275
  118. package/src/fields/types/calendarDay/index.ts +194 -194
  119. package/src/fields/types/checkbox/index.ts +76 -76
  120. package/src/fields/types/decimal/index.ts +182 -182
  121. package/src/fields/types/file/index.ts +168 -168
  122. package/src/fields/types/float/index.ts +133 -133
  123. package/src/fields/types/image/index.ts +244 -244
  124. package/src/fields/types/integer/index.ts +156 -156
  125. package/src/fields/types/json/index.ts +77 -77
  126. package/src/fields/types/multiselect/index.ts +212 -212
  127. package/src/fields/types/password/index.ts +241 -241
  128. package/src/fields/types/relationship/index.ts +381 -381
  129. package/src/fields/types/relationship/views/RelationshipTable.tsx +190 -190
  130. package/src/fields/types/select/index.ts +226 -226
  131. package/src/fields/types/text/index.ts +207 -207
  132. package/src/fields/types/timestamp/index.ts +116 -116
  133. package/src/fields/types/virtual/index.ts +108 -108
  134. package/src/helpers.ts +342 -316
  135. package/src/index.ts +4 -0
  136. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/id-field-view.tsx +167 -167
  137. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/App/index.tsx +22 -22
  138. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/CreateItemPage/index.tsx +71 -71
  139. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/HomePage/index.tsx +333 -333
  140. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/common.tsx +358 -358
  141. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/index.tsx +483 -483
  142. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/FilterAdd.tsx +221 -221
  143. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/PaginationControls.tsx +170 -170
  144. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/Tag.tsx +72 -72
  145. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/index.tsx +1006 -1006
  146. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/NoAccessPage/index.tsx +24 -24
  147. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/artifacts.ts +5 -5
  148. package/src/lib/context/createContext.ts +165 -161
  149. package/src/lib/core/initialise-lists.ts +1097 -1097
  150. package/src/lib/id-field.ts +214 -214
  151. package/src/lib/telemetry.ts +342 -342
  152. package/src/schema.ts +237 -233
  153. package/src/scripts/telemetry.ts +1 -1
  154. package/src/types/config/index.ts +400 -333
  155. package/src/types/config/lists.ts +4 -4
  156. package/src/types/context.ts +700 -530
  157. package/src/types/next-fields.ts +499 -499
  158. package/src/types/telemetry.ts +51 -51
  159. package/tests/telemetry.test.ts +361 -361
  160. package/CHANGELOG.md +0 -3158
  161. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/package.json +0 -4
  162. package/___internal-do-not-use-will-break-in-patch/admin-ui/next-config/package.json +0 -4
  163. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/package.json +0 -4
  164. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/package.json +0 -4
  165. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/package.json +0 -4
  166. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/package.json +0 -4
  167. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/package.json +0 -4
  168. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/package.json +0 -4
  169. package/___internal-do-not-use-will-break-in-patch/artifacts/package.json +0 -4
  170. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts.map +0 -1
  171. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts.map +0 -1
  172. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts.map +0 -1
  173. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts.map +0 -1
  174. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts.map +0 -1
  175. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts.map +0 -1
  176. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts.map +0 -1
  177. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts.map +0 -1
  178. /package/dist/{common-1a350e11.cjs.js → common-5933f758.cjs.js} +0 -0
  179. /package/dist/{common-29fc82e6.esm.js → common-ea5c441a.esm.js} +0 -0
  180. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/id-field-view.d.ts +0 -0
  181. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/App/index.d.ts +0 -0
  182. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/CreateItemPage/index.d.ts +0 -0
  183. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/HomePage/index.d.ts +0 -0
  184. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/index.d.ts +0 -0
  185. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/index.d.ts +0 -0
  186. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/NoAccessPage/index.d.ts +0 -0
  187. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/artifacts.d.ts +0 -0
@@ -1,11 +1,11 @@
1
- import { i as idFieldType } from './resolve-hooks-17aafd37.esm.js';
2
- import { t as timestamp, r as relationship } from './index-24b78415.esm.js';
1
+ import { i as idFieldType, m as merge } from './resolve-hooks-6813a045.esm.js';
2
+ import { t as timestamp, r as relationship } from './index-baa799e0.esm.js';
3
3
  export { g, a as gWithContext, g as graphql } from './next-fields-9bf04ed8.esm.js';
4
4
  import 'pluralize';
5
5
  import '@graphql-ts/schema';
6
6
  import '@graphql-ts/extend';
7
7
  import 'graphql';
8
- import './non-null-graphql-5315718c.esm.js';
8
+ import './non-null-graphql-a84ed64d.esm.js';
9
9
  import 'node:path';
10
10
  import './admin-meta-14c60fec.esm.js';
11
11
  import 'decimal.js';
@@ -140,6 +140,10 @@ function config(config) {
140
140
  webhooks: config.webhooks,
141
141
  rateLimit: config.rateLimit,
142
142
  health: config.health,
143
+ storage: config.storage,
144
+ search: config.search,
145
+ notifications: config.notifications,
146
+ ai: config.ai,
143
147
  telemetry: (_config$telemetry = config.telemetry) !== null && _config$telemetry !== void 0 ? _config$telemetry : true,
144
148
  ui: {
145
149
  ...config.ui,
@@ -236,9 +240,9 @@ const validators = {
236
240
  // Mixin system
237
241
  // ================================================================
238
242
 
239
- /**
240
- * Adds `createdAt` and `updatedAt` timestamp fields.
241
- * Both are hidden on create forms and read-only in item views.
243
+ /**
244
+ * Adds `createdAt` and `updatedAt` timestamp fields.
245
+ * Both are hidden on create forms and read-only in item views.
242
246
  */
243
247
  function withTimestamps() {
244
248
  return {
@@ -283,10 +287,10 @@ function withTimestamps() {
283
287
  };
284
288
  }
285
289
 
286
- /**
287
- * Adds a `deletedAt` field for soft-delete support.
288
- * Items are not physically deleted — set `deletedAt` to the current time instead.
289
- * Note: you must manually filter `deletedAt: null` in your queries/access control.
290
+ /**
291
+ * Adds a `deletedAt` field for soft-delete support.
292
+ * Items are not physically deleted — set `deletedAt` to the current time instead.
293
+ * Note: you must manually filter `deletedAt: null` in your queries/access control.
290
294
  */
291
295
  function withSoftDelete() {
292
296
  return {
@@ -311,13 +315,13 @@ function withSoftDelete() {
311
315
  };
312
316
  }
313
317
 
314
- /**
315
- * Adds `createdBy` and `updatedBy` relationship fields that automatically
316
- * track which user performed each write operation.
317
- *
318
- * Requires session to have an `itemId` (standard Nixxie auth).
319
- *
320
- * @param userListKey - The list key for your user model (default: 'User')
318
+ /**
319
+ * Adds `createdBy` and `updatedBy` relationship fields that automatically
320
+ * track which user performed each write operation.
321
+ *
322
+ * Requires session to have an `itemId` (standard Nixxie auth).
323
+ *
324
+ * @param userListKey - The list key for your user model (default: 'User')
321
325
  */
322
326
  function withAudit(userListKey = 'User') {
323
327
  return {
@@ -355,14 +359,15 @@ function withAudit(userListKey = 'User') {
355
359
  const userId = (_session = context.session) === null || _session === void 0 ? void 0 : _session.itemId;
356
360
  if (!userId) return resolvedData;
357
361
  if (operation === 'create') {
362
+ var _resolvedData$created, _resolvedData$updated;
358
363
  return {
359
364
  ...resolvedData,
360
- createdBy: {
365
+ createdBy: (_resolvedData$created = resolvedData.createdBy) !== null && _resolvedData$created !== void 0 ? _resolvedData$created : {
361
366
  connect: {
362
367
  id: userId
363
368
  }
364
369
  },
365
- updatedBy: {
370
+ updatedBy: (_resolvedData$updated = resolvedData.updatedBy) !== null && _resolvedData$updated !== void 0 ? _resolvedData$updated : {
366
371
  connect: {
367
372
  id: userId
368
373
  }
@@ -370,9 +375,10 @@ function withAudit(userListKey = 'User') {
370
375
  };
371
376
  }
372
377
  if (operation === 'update') {
378
+ var _resolvedData$updated2;
373
379
  return {
374
380
  ...resolvedData,
375
- updatedBy: {
381
+ updatedBy: (_resolvedData$updated2 = resolvedData.updatedBy) !== null && _resolvedData$updated2 !== void 0 ? _resolvedData$updated2 : {
376
382
  connect: {
377
383
  id: userId
378
384
  }
@@ -385,15 +391,15 @@ function withAudit(userListKey = 'User') {
385
391
  };
386
392
  }
387
393
 
388
- /**
389
- * Factory for building reusable field group mixins.
390
- *
391
- * @example
392
- * const withAddress = createMixin({
393
- * street: text(),
394
- * city: text(),
395
- * postcode: text({ validation: validators.regex(/^\d{4}$/, 'Must be a 4-digit postcode') }),
396
- * })
394
+ /**
395
+ * Factory for building reusable field group mixins.
396
+ *
397
+ * @example
398
+ * const withAddress = createMixin({
399
+ * street: text(),
400
+ * city: text(),
401
+ * postcode: text({ validation: validators.regex(/^\d{4}$/, 'Must be a 4-digit postcode') }),
402
+ * })
397
403
  */
398
404
  function createMixin(fields, hooks) {
399
405
  return {
@@ -406,17 +412,17 @@ function createMixin(fields, hooks) {
406
412
  // defineList — a typed wrapper around list() with mixin support
407
413
  // ================================================================
408
414
 
409
- /**
410
- * Defines a list with optional mixins for reusable field groups and hooks.
411
- *
412
- * @example
413
- * export const Post = defineList({
414
- * mixins: [withTimestamps()],
415
- * fields: {
416
- * title: text({ validation: validators.required }),
417
- * content: text(),
418
- * },
419
- * })
415
+ /**
416
+ * Defines a list with optional mixins for reusable field groups and hooks.
417
+ *
418
+ * @example
419
+ * export const Post = defineList({
420
+ * mixins: [withTimestamps()],
421
+ * fields: {
422
+ * title: text({ validation: validators.required }),
423
+ * content: text(),
424
+ * },
425
+ * })
420
426
  */
421
427
  function defineList(config) {
422
428
  const {
@@ -439,35 +445,56 @@ function defineList(config) {
439
445
  hooks: mergedHooks
440
446
  });
441
447
  }
448
+ function expandResolveInput(hook) {
449
+ return typeof hook === 'function' ? {
450
+ create: hook,
451
+ update: hook
452
+ } : hook;
453
+ }
454
+
455
+ /**
456
+ * Compose two `resolveInput` hooks so the second runs on the `resolvedData` produced by the first.
457
+ * Handles both the function form and the `{ create, update }` object form, and treats a hook that
458
+ * returns `undefined` as "no change" (keeps the prior resolvedData) so chained mixins don't wipe data.
459
+ */
460
+ function mergeResolveInput(a, b) {
461
+ if (!a) return b;
462
+ if (!b) return a;
463
+ const ea = expandResolveInput(a);
464
+ const eb = expandResolveInput(b);
465
+ const chain = (f, g) => {
466
+ if (!f) return g;
467
+ if (!g) return f;
468
+ return async args => {
469
+ const first = await f(args);
470
+ const resolvedData = first === undefined ? args.resolvedData : first;
471
+ const second = await g({
472
+ ...args,
473
+ resolvedData
474
+ });
475
+ return second === undefined ? resolvedData : second;
476
+ };
477
+ };
478
+ return {
479
+ create: chain(ea.create, eb.create),
480
+ update: chain(ea.update, eb.update)
481
+ };
482
+ }
483
+
484
+ /**
485
+ * Merge mixin hooks with the list's own hooks. Each Keystone hook may be either a function or a
486
+ * `{ create, update, delete }` object — `merge` (from resolve-hooks) handles both forms for the
487
+ * void hooks, and `mergeResolveInput` handles the data-threading `resolveInput` hook.
488
+ */
442
489
  function mergeMixinHooks(mixinHooks, listHooks) {
443
490
  if (mixinHooks.length === 0) return listHooks !== null && listHooks !== void 0 ? listHooks : {};
444
- const hookNames = ['resolveInput', 'validate', 'beforeOperation', 'afterOperation'];
491
+ const all = [...mixinHooks, ...(listHooks ? [listHooks] : [])];
445
492
  const merged = {};
446
- for (const hookName of hookNames) {
447
- const fns = [...mixinHooks.map(h => h[hookName]).filter(Boolean), ...(listHooks !== null && listHooks !== void 0 && listHooks[hookName] ? [listHooks[hookName]] : [])];
448
- if (fns.length === 0) continue;
449
- if (fns.length === 1) {
450
- merged[hookName] = fns[0];
451
- continue;
452
- }
453
- // Run all hooks in sequence; for resolveInput, pass the output of each as input to the next
454
- if (hookName === 'resolveInput') {
455
- merged[hookName] = async args => {
456
- let result = args.resolvedData;
457
- for (const fn of fns) {
458
- const out = await fn({
459
- ...args,
460
- resolvedData: result
461
- });
462
- if (out !== undefined) result = out;
463
- }
464
- return result;
465
- };
466
- } else {
467
- merged[hookName] = async args => {
468
- for (const fn of fns) await fn(args);
469
- };
470
- }
493
+ for (const hooks of all) {
494
+ merged.resolveInput = mergeResolveInput(merged.resolveInput, hooks.resolveInput);
495
+ merged.validate = merge(merged.validate, hooks.validate);
496
+ merged.beforeOperation = merge(merged.beforeOperation, hooks.beforeOperation);
497
+ merged.afterOperation = merge(merged.afterOperation, hooks.afterOperation);
471
498
  }
472
499
  return merged;
473
500
  }
@@ -476,15 +503,15 @@ function mergeMixinHooks(mixinHooks, listHooks) {
476
503
  // defineConfig — typed alias for config()
477
504
  // ================================================================
478
505
 
479
- /**
480
- * Defines the Nixxie configuration. This is a typed alias for `config()` that
481
- * provides the same functionality with a more declarative name.
482
- *
483
- * @example
484
- * export default defineConfig({
485
- * db: { provider: 'sqlite', url: 'file:./nixxie.db' },
486
- * lists: { Post, User },
487
- * })
506
+ /**
507
+ * Defines the Nixxie configuration. This is a typed alias for `config()` that
508
+ * provides the same functionality with a more declarative name.
509
+ *
510
+ * @example
511
+ * export default defineConfig({
512
+ * db: { provider: 'sqlite', url: 'file:./nixxie.db' },
513
+ * lists: { Post, User },
514
+ * })
488
515
  */
489
516
  function defineConfig(nixxieConfig) {
490
517
  return config(nixxieConfig);
@@ -494,8 +521,8 @@ function defineConfig(nixxieConfig) {
494
521
  // defineAction — typed alias for action()
495
522
  // ================================================================
496
523
 
497
- /**
498
- * Defines a list action. Typed alias for `action()`.
524
+ /**
525
+ * Defines a list action. Typed alias for `action()`.
499
526
  */
500
527
  function defineAction(actionConfig) {
501
528
  return action(actionConfig);
@@ -1,4 +1,4 @@
1
- import { a as merge } from './resolve-hooks-17aafd37.esm.js';
1
+ import { m as merge } from './resolve-hooks-6813a045.esm.js';
2
2
 
3
3
  function resolveDbNullable(validation, db) {
4
4
  if ((db === null || db === void 0 ? void 0 : db.isNullable) === false) return false;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var resolveHooks = require('./resolve-hooks-66fe8a8e.cjs.js');
3
+ var resolveHooks = require('./resolve-hooks-165a9ce2.cjs.js');
4
4
 
5
5
  function resolveDbNullable(validation, db) {
6
6
  if ((db === null || db === void 0 ? void 0 : db.isNullable) === false) return false;
@@ -299,7 +299,7 @@ function idFieldType(config) {
299
299
  return value.toString();
300
300
  }
301
301
  }),
302
- views: '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view',
302
+ views: '@nixxie-cms/core/internal-unstable/admin-ui/id-field-view',
303
303
  getAdminMeta: () => ({
304
304
  kind,
305
305
  type: dbFieldOptions.scalar
@@ -297,7 +297,7 @@ function idFieldType(config) {
297
297
  return value.toString();
298
298
  }
299
299
  }),
300
- views: '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view',
300
+ views: '@nixxie-cms/core/internal-unstable/admin-ui/id-field-view',
301
301
  getAdminMeta: () => ({
302
302
  kind,
303
303
  type: dbFieldOptions.scalar
@@ -2023,4 +2023,4 @@ function expandVoidHooks(hooks) {
2023
2023
  };
2024
2024
  }
2025
2025
 
2026
- export { merge as a, accessReturnError as b, accessDeniedError as c, filterAccessError as d, extensionError as e, formatKeys as f, expandVoidHooks as g, relationshipError as h, idFieldType as i, limitsExceededError as l, mysql as m, postgresql as p, resolverError as r, sqlite as s, userInputError as u, validationFailureError as v };
2026
+ export { mysql as a, accessReturnError as b, accessDeniedError as c, filterAccessError as d, extensionError as e, formatKeys as f, expandVoidHooks as g, relationshipError as h, idFieldType as i, limitsExceededError as l, merge as m, postgresql as p, resolverError as r, sqlite as s, userInputError as u, validationFailureError as v };
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import { c as createAdminMeta } from './admin-meta-14c60fec.esm.js';
4
4
  import { GraphQLScalarType, GraphQLObjectType, Kind, OperationTypeNode, GraphQLSchema, execute, astFromValue, GraphQLNonNull, GraphQLList, parse, validate as validate$1, print, graphql, assertInputObjectType, isInputObjectType, GraphQLString } from 'graphql';
5
5
  import { GNonNull, GInputObjectType } from '@graphql-ts/schema';
6
- import { u as userInputError, e as extensionError, b as accessReturnError, c as accessDeniedError, f as formatKeys, d as filterAccessError, l as limitsExceededError, g as expandVoidHooks, v as validationFailureError, r as resolverError, h as relationshipError } from './resolve-hooks-17aafd37.esm.js';
6
+ import { u as userInputError, e as extensionError, b as accessReturnError, c as accessDeniedError, f as formatKeys, d as filterAccessError, l as limitsExceededError, g as expandVoidHooks, v as validationFailureError, r as resolverError, h as relationshipError } from './resolve-hooks-6813a045.esm.js';
7
7
  import { _ as __getNames } from './utils-ef2cd0f4.esm.js';
8
8
  import { g, Q as QueryMode } from './next-fields-9bf04ed8.esm.js';
9
9
  import '@graphql-ts/extend';
@@ -393,7 +393,7 @@ function createContext({
393
393
  internal,
394
394
  sudo
395
395
  }) => {
396
- var _config$email, _config$jobs, _config$cache, _config$audit, _config$webhooks, _config$rateLimit, _config$health;
396
+ var _config$email, _config$jobs, _config$cache, _config$audit, _config$webhooks, _config$rateLimit, _config$health, _config$storage, _config$search, _config$notifications, _config$ai;
397
397
  const schema = internal ? graphQLSchemas.internal : graphQLSchemas.public;
398
398
  const rawGraphQL = async ({
399
399
  query,
@@ -435,7 +435,11 @@ function createContext({
435
435
  audit: (_config$audit = config.audit) !== null && _config$audit !== void 0 ? _config$audit : null,
436
436
  webhooks: (_config$webhooks = config.webhooks) !== null && _config$webhooks !== void 0 ? _config$webhooks : null,
437
437
  rateLimit: (_config$rateLimit = config.rateLimit) !== null && _config$rateLimit !== void 0 ? _config$rateLimit : null,
438
- health: (_config$health = config.health) !== null && _config$health !== void 0 ? _config$health : null
438
+ health: (_config$health = config.health) !== null && _config$health !== void 0 ? _config$health : null,
439
+ storage: (_config$storage = config.storage) !== null && _config$storage !== void 0 ? _config$storage : null,
440
+ search: (_config$search = config.search) !== null && _config$search !== void 0 ? _config$search : null,
441
+ notifications: (_config$notifications = config.notifications) !== null && _config$notifications !== void 0 ? _config$notifications : null,
442
+ ai: (_config$ai = config.ai) !== null && _config$ai !== void 0 ? _config$ai : null
439
443
  },
440
444
  transaction: async (f, opts) => {
441
445
  return await prisma.$transaction(async prisma_ => {
@@ -2147,7 +2151,7 @@ function getListsWithInitialisedFields(config, listsRef) {
2147
2151
  }
2148
2152
  },
2149
2153
  // copy
2150
- __ksTelemetryFieldTypeName: f.__ksTelemetryFieldTypeName,
2154
+ __nxTelemetryFieldTypeName: f.__nxTelemetryFieldTypeName,
2151
2155
  extraOutputFields: f.extraOutputFields,
2152
2156
  getAdminMeta: f.getAdminMeta,
2153
2157
  input: {
@@ -5,7 +5,7 @@ var path = require('node:path');
5
5
  var adminMeta$1 = require('./admin-meta-18d0c276.cjs.js');
6
6
  var graphql = require('graphql');
7
7
  var schema = require('@graphql-ts/schema');
8
- var resolveHooks = require('./resolve-hooks-66fe8a8e.cjs.js');
8
+ var resolveHooks = require('./resolve-hooks-165a9ce2.cjs.js');
9
9
  var utils$1 = require('./utils-e74e3527.cjs.js');
10
10
  var nextFields = require('./next-fields-49c025ef.cjs.js');
11
11
  require('@graphql-ts/extend');
@@ -400,7 +400,7 @@ function createContext({
400
400
  internal,
401
401
  sudo
402
402
  }) => {
403
- var _config$email, _config$jobs, _config$cache, _config$audit, _config$webhooks, _config$rateLimit, _config$health;
403
+ var _config$email, _config$jobs, _config$cache, _config$audit, _config$webhooks, _config$rateLimit, _config$health, _config$storage, _config$search, _config$notifications, _config$ai;
404
404
  const schema = internal ? graphQLSchemas.internal : graphQLSchemas.public;
405
405
  const rawGraphQL = async ({
406
406
  query,
@@ -442,7 +442,11 @@ function createContext({
442
442
  audit: (_config$audit = config.audit) !== null && _config$audit !== void 0 ? _config$audit : null,
443
443
  webhooks: (_config$webhooks = config.webhooks) !== null && _config$webhooks !== void 0 ? _config$webhooks : null,
444
444
  rateLimit: (_config$rateLimit = config.rateLimit) !== null && _config$rateLimit !== void 0 ? _config$rateLimit : null,
445
- health: (_config$health = config.health) !== null && _config$health !== void 0 ? _config$health : null
445
+ health: (_config$health = config.health) !== null && _config$health !== void 0 ? _config$health : null,
446
+ storage: (_config$storage = config.storage) !== null && _config$storage !== void 0 ? _config$storage : null,
447
+ search: (_config$search = config.search) !== null && _config$search !== void 0 ? _config$search : null,
448
+ notifications: (_config$notifications = config.notifications) !== null && _config$notifications !== void 0 ? _config$notifications : null,
449
+ ai: (_config$ai = config.ai) !== null && _config$ai !== void 0 ? _config$ai : null
446
450
  },
447
451
  transaction: async (f, opts) => {
448
452
  return await prisma.$transaction(async prisma_ => {
@@ -2154,7 +2158,7 @@ function getListsWithInitialisedFields(config, listsRef) {
2154
2158
  }
2155
2159
  },
2156
2160
  // copy
2157
- __ksTelemetryFieldTypeName: f.__ksTelemetryFieldTypeName,
2161
+ __nxTelemetryFieldTypeName: f.__nxTelemetryFieldTypeName,
2158
2162
  extraOutputFields: f.extraOutputFields,
2159
2163
  getAdminMeta: f.getAdminMeta,
2160
2164
  input: {
@@ -1,5 +1,5 @@
1
1
  import { useMemo } from 'react';
2
- import { u as useNixxie } from './context-3132c3ed.esm.js';
2
+ import { u as useNixxie } from './context-af9957ed.esm.js';
3
3
 
4
4
  function isInt(x) {
5
5
  return Number.isInteger(Number(x));
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var react = require('react');
4
- var adminUi_context_dist_nixxieCmsCoreAdminUiContext = require('./context-e7a45152.cjs.js');
4
+ var adminUi_context_dist_nixxieCmsCoreAdminUiContext = require('./context-b5204629.cjs.js');
5
5
 
6
6
  function isInt(x) {
7
7
  return Number.isInteger(Number(x));
@@ -2,11 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var resolveHooks = require('../../dist/resolve-hooks-66fe8a8e.cjs.js');
5
+ var resolveHooks = require('../../dist/resolve-hooks-165a9ce2.cjs.js');
6
6
  require('pluralize');
7
7
  var nextFields = require('../../dist/next-fields-49c025ef.cjs.js');
8
- var index = require('../../dist/index-ac01583b.cjs.js');
9
- var nonNullGraphql = require('../../dist/non-null-graphql-17b83ddc.cjs.js');
8
+ var index = require('../../dist/index-89635494.cjs.js');
9
+ var nonNullGraphql = require('../../dist/non-null-graphql-add6bb3d.cjs.js');
10
10
  require('node:path');
11
11
  var schema = require('@graphql-ts/schema');
12
12
  require('@graphql-ts/extend');
@@ -88,7 +88,7 @@ function checkbox(config = {}) {
88
88
  output: nextFields.g.field({
89
89
  type: nextFields.g.Boolean
90
90
  }),
91
- __ksTelemetryFieldTypeName: '@nixxie-cms/checkbox',
91
+ __nxTelemetryFieldTypeName: '@nixxie-cms/checkbox',
92
92
  views: '@nixxie-cms/core/fields/types/checkbox/views',
93
93
  getAdminMeta: () => ({
94
94
  defaultValue
@@ -232,7 +232,7 @@ function decimal(config = {}) {
232
232
  return val;
233
233
  }
234
234
  }),
235
- __ksTelemetryFieldTypeName: '@nixxie-cms/decimal',
235
+ __nxTelemetryFieldTypeName: '@nixxie-cms/decimal',
236
236
  views: '@nixxie-cms/core/fields/types/decimal/views',
237
237
  getAdminMeta() {
238
238
  return {
@@ -370,7 +370,7 @@ function file(config) {
370
370
  };
371
371
  }
372
372
  }),
373
- __ksTelemetryFieldTypeName: '@nixxie-cms/file',
373
+ __nxTelemetryFieldTypeName: '@nixxie-cms/file',
374
374
  views: '@nixxie-cms/core/fields/types/file/views'
375
375
  });
376
376
  };
@@ -488,7 +488,7 @@ function float(config = {}) {
488
488
  output: nextFields.g.field({
489
489
  type: nextFields.g.Float
490
490
  }),
491
- __ksTelemetryFieldTypeName: '@nixxie-cms/float',
491
+ __nxTelemetryFieldTypeName: '@nixxie-cms/float',
492
492
  views: '@nixxie-cms/core/fields/types/float/views',
493
493
  getAdminMeta() {
494
494
  return {
@@ -618,7 +618,7 @@ function integer(config = {}) {
618
618
  output: nextFields.g.field({
619
619
  type: nextFields.g.Int
620
620
  }),
621
- __ksTelemetryFieldTypeName: '@nixxie-cms/integer',
621
+ __nxTelemetryFieldTypeName: '@nixxie-cms/integer',
622
622
  views: '@nixxie-cms/core/fields/types/integer/views',
623
623
  getAdminMeta() {
624
624
  return {
@@ -764,7 +764,7 @@ function bigInt(config = {}) {
764
764
  output: nextFields.g.field({
765
765
  type: nextFields.g.BigInt
766
766
  }),
767
- __ksTelemetryFieldTypeName: '@nixxie-cms/bigInt',
767
+ __nxTelemetryFieldTypeName: '@nixxie-cms/bigInt',
768
768
  views: '@nixxie-cms/core/fields/types/bigInt/views',
769
769
  getAdminMeta() {
770
770
  var _min$toString, _max$toString;
@@ -1013,7 +1013,7 @@ function image(config) {
1013
1013
  };
1014
1014
  }
1015
1015
  }),
1016
- __ksTelemetryFieldTypeName: '@nixxie-cms/image',
1016
+ __nxTelemetryFieldTypeName: '@nixxie-cms/image',
1017
1017
  views: '@nixxie-cms/core/fields/types/image/views'
1018
1018
  });
1019
1019
  };
@@ -1045,7 +1045,7 @@ function json({
1045
1045
  extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
1046
1046
  })({
1047
1047
  ...config,
1048
- __ksTelemetryFieldTypeName: '@nixxie-cms/json',
1048
+ __nxTelemetryFieldTypeName: '@nixxie-cms/json',
1049
1049
  input: {
1050
1050
  create: {
1051
1051
  arg: nextFields.g.arg({
@@ -1125,7 +1125,7 @@ function select(config) {
1125
1125
  ...config.hooks,
1126
1126
  validate
1127
1127
  },
1128
- __ksTelemetryFieldTypeName: '@nixxie-cms/select',
1128
+ __nxTelemetryFieldTypeName: '@nixxie-cms/select',
1129
1129
  views: '@nixxie-cms/core/fields/types/select/views',
1130
1130
  getAdminMeta: () => {
1131
1131
  var _config$type;
@@ -1415,7 +1415,7 @@ function text(config = {}) {
1415
1415
  output: nextFields.g.field({
1416
1416
  type: nextFields.g.String
1417
1417
  }),
1418
- __ksTelemetryFieldTypeName: '@nixxie-cms/text',
1418
+ __nxTelemetryFieldTypeName: '@nixxie-cms/text',
1419
1419
  views: '@nixxie-cms/core/fields/types/text/views',
1420
1420
  getAdminMeta() {
1421
1421
  var _config$ui$displayMod, _config$ui, _match$explanation2;
@@ -1467,7 +1467,7 @@ function virtual({
1467
1467
  return usableField.resolve(item, ...args);
1468
1468
  }
1469
1469
  }),
1470
- __ksTelemetryFieldTypeName: '@nixxie-cms/virtual',
1470
+ __nxTelemetryFieldTypeName: '@nixxie-cms/virtual',
1471
1471
  views: '@nixxie-cms/core/fields/types/virtual/views',
1472
1472
  getAdminMeta: () => {
1473
1473
  var _config$ui$query, _config$ui4;
@@ -1573,7 +1573,7 @@ function calendarDay(config = {}) {
1573
1573
  return value;
1574
1574
  }
1575
1575
  }),
1576
- __ksTelemetryFieldTypeName: '@nixxie-cms/calendarDay',
1576
+ __nxTelemetryFieldTypeName: '@nixxie-cms/calendarDay',
1577
1577
  views: '@nixxie-cms/core/fields/types/calendarDay/views',
1578
1578
  getAdminMeta() {
1579
1579
  return {
@@ -1711,7 +1711,7 @@ function multiselect(config) {
1711
1711
  })({
1712
1712
  ...config,
1713
1713
  ui,
1714
- __ksTelemetryFieldTypeName: '@nixxie-cms/multiselect',
1714
+ __nxTelemetryFieldTypeName: '@nixxie-cms/multiselect',
1715
1715
  hooks: {
1716
1716
  ...config.hooks,
1717
1717
  validate