@nixxie-cms/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/CHANGELOG.md +3158 -0
  2. package/LICENSE +21 -0
  3. package/README.md +6 -0
  4. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-id-field-view.cjs.d.ts +2 -0
  5. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-id-field-view.cjs.js +244 -0
  6. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-id-field-view.esm.js +235 -0
  7. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/package.json +4 -0
  8. package/___internal-do-not-use-will-break-in-patch/admin-ui/next-config/package.json +4 -0
  9. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-App.cjs.d.ts +2 -0
  10. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-App.cjs.js +59 -0
  11. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-App.esm.js +55 -0
  12. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/package.json +4 -0
  13. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-CreateItemPage.cjs.d.ts +2 -0
  14. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-CreateItemPage.cjs.js +116 -0
  15. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-CreateItemPage.esm.js +112 -0
  16. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/package.json +4 -0
  17. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-HomePage.cjs.d.ts +2 -0
  18. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-HomePage.cjs.js +336 -0
  19. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-HomePage.esm.js +332 -0
  20. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/package.json +4 -0
  21. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ItemPage.cjs.d.ts +2 -0
  22. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ItemPage.cjs.js +463 -0
  23. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ItemPage.esm.js +455 -0
  24. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/package.json +4 -0
  25. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ListPage.cjs.d.ts +2 -0
  26. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ListPage.cjs.js +1195 -0
  27. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-ListPage.esm.js +1187 -0
  28. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/package.json +4 -0
  29. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-NoAccessPage.cjs.d.ts +2 -0
  30. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-NoAccessPage.cjs.js +40 -0
  31. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-admin-ui-pages-NoAccessPage.esm.js +35 -0
  32. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/package.json +4 -0
  33. package/___internal-do-not-use-will-break-in-patch/artifacts/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-artifacts.cjs.d.ts +2 -0
  34. package/___internal-do-not-use-will-break-in-patch/artifacts/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-artifacts.cjs.js +51 -0
  35. package/___internal-do-not-use-will-break-in-patch/artifacts/dist/nixxie-cms-core-___internal-do-not-use-will-break-in-patch-artifacts.esm.js +38 -0
  36. package/___internal-do-not-use-will-break-in-patch/artifacts/package.json +4 -0
  37. package/access/dist/nixxie-cms-core-access.cjs.d.ts +2 -0
  38. package/access/dist/nixxie-cms-core-access.cjs.js +26 -0
  39. package/access/dist/nixxie-cms-core-access.esm.js +19 -0
  40. package/access/package.json +4 -0
  41. package/admin-ui/apollo/dist/nixxie-cms-core-admin-ui-apollo.cjs.d.ts +2 -0
  42. package/admin-ui/apollo/dist/nixxie-cms-core-admin-ui-apollo.cjs.js +87 -0
  43. package/admin-ui/apollo/dist/nixxie-cms-core-admin-ui-apollo.esm.js +2 -0
  44. package/admin-ui/apollo/package.json +4 -0
  45. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.cjs.d.ts +2 -0
  46. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.cjs.js +77 -0
  47. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.esm.js +58 -0
  48. package/admin-ui/components/package.json +4 -0
  49. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.cjs.d.ts +2 -0
  50. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.cjs.js +35 -0
  51. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.esm.js +23 -0
  52. package/admin-ui/context/package.json +4 -0
  53. package/admin-ui/image/dist/nixxie-cms-core-admin-ui-image.cjs.d.ts +3 -0
  54. package/admin-ui/image/dist/nixxie-cms-core-admin-ui-image.cjs.js +18 -0
  55. package/admin-ui/image/dist/nixxie-cms-core-admin-ui-image.esm.js +2 -0
  56. package/admin-ui/image/package.json +4 -0
  57. package/admin-ui/router/dist/nixxie-cms-core-admin-ui-router.cjs.d.ts +2 -0
  58. package/admin-ui/router/dist/nixxie-cms-core-admin-ui-router.cjs.js +34 -0
  59. package/admin-ui/router/dist/nixxie-cms-core-admin-ui-router.esm.js +12 -0
  60. package/admin-ui/router/package.json +4 -0
  61. package/admin-ui/utils/dist/nixxie-cms-core-admin-ui-utils.cjs.d.ts +2 -0
  62. package/admin-ui/utils/dist/nixxie-cms-core-admin-ui-utils.cjs.js +45 -0
  63. package/admin-ui/utils/dist/nixxie-cms-core-admin-ui-utils.esm.js +22 -0
  64. package/admin-ui/utils/package.json +4 -0
  65. package/bin/cli.js +3 -0
  66. package/context/dist/nixxie-cms-core-context.cjs.d.ts +2 -0
  67. package/context/dist/nixxie-cms-core-context.cjs.js +31 -0
  68. package/context/dist/nixxie-cms-core-context.esm.js +23 -0
  69. package/context/package.json +4 -0
  70. package/dist/CreateItemDialog-33335548.esm.js +55 -0
  71. package/dist/CreateItemDialog-56cf59b7.cjs.js +57 -0
  72. package/dist/Errors-575adfa3.cjs.js +147 -0
  73. package/dist/Errors-bf24759e.esm.js +143 -0
  74. package/dist/Field-47f85161.esm.js +278 -0
  75. package/dist/Field-ed8d7627.cjs.js +287 -0
  76. package/dist/Fields-956d9a14.esm.js +203 -0
  77. package/dist/Fields-e2c28056.cjs.js +206 -0
  78. package/dist/GraphQLErrorNotice-cd74180d.cjs.js +57 -0
  79. package/dist/GraphQLErrorNotice-d9f0931b.esm.js +55 -0
  80. package/dist/NullableFieldWrapper-6ea48af3.esm.js +71 -0
  81. package/dist/NullableFieldWrapper-daa0a080.cjs.js +74 -0
  82. package/dist/PageContainer-27c27f10.cjs.js +1144 -0
  83. package/dist/PageContainer-7db73317.esm.js +1129 -0
  84. package/dist/actionData-64d4c37a.esm.js +28 -0
  85. package/dist/actionData-7858738d.cjs.js +32 -0
  86. package/dist/admin-meta-14c60fec.esm.js +210 -0
  87. package/dist/admin-meta-18d0c276.cjs.js +217 -0
  88. package/dist/admin-meta-graphql-6f7f5331.esm.js +142 -0
  89. package/dist/admin-meta-graphql-c8f926e9.cjs.js +144 -0
  90. package/dist/common-1a350e11.cjs.js +324 -0
  91. package/dist/common-29fc82e6.esm.js +315 -0
  92. package/dist/context-3132c3ed.esm.js +419 -0
  93. package/dist/context-e7a45152.cjs.js +432 -0
  94. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts +6 -0
  95. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts.map +1 -0
  96. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts +10 -0
  97. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts.map +1 -0
  98. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts +6 -0
  99. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts.map +1 -0
  100. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts +2 -0
  101. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts.map +1 -0
  102. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts +6 -0
  103. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts.map +1 -0
  104. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts +12 -0
  105. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts.map +1 -0
  106. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts +7 -0
  107. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts.map +1 -0
  108. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts +6 -0
  109. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts.map +1 -0
  110. package/dist/declarations/src/access.d.ts +12 -0
  111. package/dist/declarations/src/access.d.ts.map +1 -0
  112. package/dist/declarations/src/admin-ui/apollo.d.ts +8 -0
  113. package/dist/declarations/src/admin-ui/apollo.d.ts.map +1 -0
  114. package/dist/declarations/src/admin-ui/components/CellContainer.d.ts +5 -0
  115. package/dist/declarations/src/admin-ui/components/CellContainer.d.ts.map +1 -0
  116. package/dist/declarations/src/admin-ui/components/CreateItemDialog.d.ts +5 -0
  117. package/dist/declarations/src/admin-ui/components/CreateItemDialog.d.ts.map +1 -0
  118. package/dist/declarations/src/admin-ui/components/Errors.d.ts +28 -0
  119. package/dist/declarations/src/admin-ui/components/Errors.d.ts.map +1 -0
  120. package/dist/declarations/src/admin-ui/components/GraphQLErrorNotice.d.ts +6 -0
  121. package/dist/declarations/src/admin-ui/components/GraphQLErrorNotice.d.ts.map +1 -0
  122. package/dist/declarations/src/admin-ui/components/InlineCode.d.ts +3 -0
  123. package/dist/declarations/src/admin-ui/components/InlineCode.d.ts.map +1 -0
  124. package/dist/declarations/src/admin-ui/components/Logo.d.ts +2 -0
  125. package/dist/declarations/src/admin-ui/components/Logo.d.ts.map +1 -0
  126. package/dist/declarations/src/admin-ui/components/Navigation.d.ts +22 -0
  127. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -0
  128. package/dist/declarations/src/admin-ui/components/NullableFieldWrapper.d.ts +33 -0
  129. package/dist/declarations/src/admin-ui/components/NullableFieldWrapper.d.ts.map +1 -0
  130. package/dist/declarations/src/admin-ui/components/PageContainer.d.ts +10 -0
  131. package/dist/declarations/src/admin-ui/components/PageContainer.d.ts.map +1 -0
  132. package/dist/declarations/src/admin-ui/components/index.d.ts +11 -0
  133. package/dist/declarations/src/admin-ui/components/index.d.ts.map +1 -0
  134. package/dist/declarations/src/admin-ui/context.d.ts +50 -0
  135. package/dist/declarations/src/admin-ui/context.d.ts.map +1 -0
  136. package/dist/declarations/src/admin-ui/image.d.ts +3 -0
  137. package/dist/declarations/src/admin-ui/image.d.ts.map +1 -0
  138. package/dist/declarations/src/admin-ui/router.d.ts +15 -0
  139. package/dist/declarations/src/admin-ui/router.d.ts.map +1 -0
  140. package/dist/declarations/src/admin-ui/utils/Fields.d.ts +16 -0
  141. package/dist/declarations/src/admin-ui/utils/Fields.d.ts.map +1 -0
  142. package/dist/declarations/src/admin-ui/utils/filters.d.ts +10 -0
  143. package/dist/declarations/src/admin-ui/utils/filters.d.ts.map +1 -0
  144. package/dist/declarations/src/admin-ui/utils/index.d.ts +8 -0
  145. package/dist/declarations/src/admin-ui/utils/index.d.ts.map +1 -0
  146. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts +24 -0
  147. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts.map +1 -0
  148. package/dist/declarations/src/admin-ui/utils/utils.d.ts +8 -0
  149. package/dist/declarations/src/admin-ui/utils/utils.d.ts.map +1 -0
  150. package/dist/declarations/src/artifacts.d.ts +14 -0
  151. package/dist/declarations/src/artifacts.d.ts.map +1 -0
  152. package/dist/declarations/src/context.d.ts +2 -0
  153. package/dist/declarations/src/context.d.ts.map +1 -0
  154. package/dist/declarations/src/fields/filters/enum-filter.d.ts +27 -0
  155. package/dist/declarations/src/fields/filters/enum-filter.d.ts.map +1 -0
  156. package/dist/declarations/src/fields/filters/index.d.ts +2 -0
  157. package/dist/declarations/src/fields/filters/index.d.ts.map +1 -0
  158. package/dist/declarations/src/fields/filters/internal.d.ts +21 -0
  159. package/dist/declarations/src/fields/filters/internal.d.ts.map +1 -0
  160. package/dist/declarations/src/fields/filters/providers/mysql.d.ts +182 -0
  161. package/dist/declarations/src/fields/filters/providers/mysql.d.ts.map +1 -0
  162. package/dist/declarations/src/fields/filters/providers/postgresql.d.ts +182 -0
  163. package/dist/declarations/src/fields/filters/providers/postgresql.d.ts.map +1 -0
  164. package/dist/declarations/src/fields/filters/providers/sqlite.d.ts +179 -0
  165. package/dist/declarations/src/fields/filters/providers/sqlite.d.ts.map +1 -0
  166. package/dist/declarations/src/fields/index.d.ts +35 -0
  167. package/dist/declarations/src/fields/index.d.ts.map +1 -0
  168. package/dist/declarations/src/fields/types/bigInt/index.d.ts +20 -0
  169. package/dist/declarations/src/fields/types/bigInt/index.d.ts.map +1 -0
  170. package/dist/declarations/src/fields/types/bigInt/views/index.d.ts +24 -0
  171. package/dist/declarations/src/fields/types/bigInt/views/index.d.ts.map +1 -0
  172. package/dist/declarations/src/fields/types/bytes/index.d.ts +70 -0
  173. package/dist/declarations/src/fields/types/bytes/index.d.ts.map +1 -0
  174. package/dist/declarations/src/fields/types/bytes/views/index.d.ts +24 -0
  175. package/dist/declarations/src/fields/types/bytes/views/index.d.ts.map +1 -0
  176. package/dist/declarations/src/fields/types/calendarDay/index.d.ts +15 -0
  177. package/dist/declarations/src/fields/types/calendarDay/index.d.ts.map +1 -0
  178. package/dist/declarations/src/fields/types/calendarDay/views/index.d.ts +18 -0
  179. package/dist/declarations/src/fields/types/calendarDay/views/index.d.ts.map +1 -0
  180. package/dist/declarations/src/fields/types/checkbox/index.d.ts +11 -0
  181. package/dist/declarations/src/fields/types/checkbox/index.d.ts.map +1 -0
  182. package/dist/declarations/src/fields/types/checkbox/views/index.d.ts +9 -0
  183. package/dist/declarations/src/fields/types/checkbox/views/index.d.ts.map +1 -0
  184. package/dist/declarations/src/fields/types/decimal/index.d.ts +20 -0
  185. package/dist/declarations/src/fields/types/decimal/index.d.ts.map +1 -0
  186. package/dist/declarations/src/fields/types/decimal/views/index.d.ts +22 -0
  187. package/dist/declarations/src/fields/types/decimal/views/index.d.ts.map +1 -0
  188. package/dist/declarations/src/fields/types/file/index.d.ts +34 -0
  189. package/dist/declarations/src/fields/types/file/index.d.ts.map +1 -0
  190. package/dist/declarations/src/fields/types/file/views/Field.d.ts +17 -0
  191. package/dist/declarations/src/fields/types/file/views/Field.d.ts.map +1 -0
  192. package/dist/declarations/src/fields/types/file/views/index.d.ts +29 -0
  193. package/dist/declarations/src/fields/types/file/views/index.d.ts.map +1 -0
  194. package/dist/declarations/src/fields/types/float/index.d.ts +18 -0
  195. package/dist/declarations/src/fields/types/float/index.d.ts.map +1 -0
  196. package/dist/declarations/src/fields/types/float/views/index.d.ts +22 -0
  197. package/dist/declarations/src/fields/types/float/views/index.d.ts.map +1 -0
  198. package/dist/declarations/src/fields/types/image/index.d.ts +34 -0
  199. package/dist/declarations/src/fields/types/image/index.d.ts.map +1 -0
  200. package/dist/declarations/src/fields/types/image/utils.d.ts +2 -0
  201. package/dist/declarations/src/fields/types/image/utils.d.ts.map +1 -0
  202. package/dist/declarations/src/fields/types/image/views/Field.d.ts +4 -0
  203. package/dist/declarations/src/fields/types/image/views/Field.d.ts.map +1 -0
  204. package/dist/declarations/src/fields/types/image/views/index.d.ts +49 -0
  205. package/dist/declarations/src/fields/types/image/views/index.d.ts.map +1 -0
  206. package/dist/declarations/src/fields/types/integer/index.d.ts +20 -0
  207. package/dist/declarations/src/fields/types/integer/index.d.ts.map +1 -0
  208. package/dist/declarations/src/fields/types/integer/views/index.d.ts +23 -0
  209. package/dist/declarations/src/fields/types/integer/views/index.d.ts.map +1 -0
  210. package/dist/declarations/src/fields/types/json/index.d.ts +25 -0
  211. package/dist/declarations/src/fields/types/json/index.d.ts.map +1 -0
  212. package/dist/declarations/src/fields/types/json/views/index.d.ts +9 -0
  213. package/dist/declarations/src/fields/types/json/views/index.d.ts.map +1 -0
  214. package/dist/declarations/src/fields/types/multiselect/index.d.ts +50 -0
  215. package/dist/declarations/src/fields/types/multiselect/index.d.ts.map +1 -0
  216. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts +26 -0
  217. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts.map +1 -0
  218. package/dist/declarations/src/fields/types/password/index.d.ts +49 -0
  219. package/dist/declarations/src/fields/types/password/index.d.ts.map +1 -0
  220. package/dist/declarations/src/fields/types/password/views/index.d.ts +47 -0
  221. package/dist/declarations/src/fields/types/password/views/index.d.ts.map +1 -0
  222. package/dist/declarations/src/fields/types/relationship/index.d.ts +113 -0
  223. package/dist/declarations/src/fields/types/relationship/index.d.ts.map +1 -0
  224. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts +26 -0
  225. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts.map +1 -0
  226. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts +24 -0
  227. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts.map +1 -0
  228. package/dist/declarations/src/fields/types/relationship/views/index.d.ts +27 -0
  229. package/dist/declarations/src/fields/types/relationship/views/index.d.ts.map +1 -0
  230. package/dist/declarations/src/fields/types/relationship/views/types.d.ts +39 -0
  231. package/dist/declarations/src/fields/types/relationship/views/types.d.ts.map +1 -0
  232. package/dist/declarations/src/fields/types/select/index.d.ts +42 -0
  233. package/dist/declarations/src/fields/types/select/index.d.ts.map +1 -0
  234. package/dist/declarations/src/fields/types/select/views/index.d.ts +32 -0
  235. package/dist/declarations/src/fields/types/select/views/index.d.ts.map +1 -0
  236. package/dist/declarations/src/fields/types/text/index.d.ts +58 -0
  237. package/dist/declarations/src/fields/types/text/index.d.ts.map +1 -0
  238. package/dist/declarations/src/fields/types/text/views/index.d.ts +36 -0
  239. package/dist/declarations/src/fields/types/text/views/index.d.ts.map +1 -0
  240. package/dist/declarations/src/fields/types/timestamp/index.d.ts +19 -0
  241. package/dist/declarations/src/fields/types/timestamp/index.d.ts.map +1 -0
  242. package/dist/declarations/src/fields/types/timestamp/views/index.d.ts +14 -0
  243. package/dist/declarations/src/fields/types/timestamp/views/index.d.ts.map +1 -0
  244. package/dist/declarations/src/fields/types/timestamp/views/utils.d.ts +14 -0
  245. package/dist/declarations/src/fields/types/timestamp/views/utils.d.ts.map +1 -0
  246. package/dist/declarations/src/fields/types/virtual/index.d.ts +40 -0
  247. package/dist/declarations/src/fields/types/virtual/index.d.ts.map +1 -0
  248. package/dist/declarations/src/fields/types/virtual/views/index.d.ts +7 -0
  249. package/dist/declarations/src/fields/types/virtual/views/index.d.ts.map +1 -0
  250. package/dist/declarations/src/graphql-ts.d.ts +5 -0
  251. package/dist/declarations/src/graphql-ts.d.ts.map +1 -0
  252. package/dist/declarations/src/helpers.d.ts +121 -0
  253. package/dist/declarations/src/helpers.d.ts.map +1 -0
  254. package/dist/declarations/src/index.d.ts +6 -0
  255. package/dist/declarations/src/index.d.ts.map +1 -0
  256. package/dist/declarations/src/lib/admin-meta.d.ts +71 -0
  257. package/dist/declarations/src/lib/admin-meta.d.ts.map +1 -0
  258. package/dist/declarations/src/lib/core/access-control.d.ts +39 -0
  259. package/dist/declarations/src/lib/core/access-control.d.ts.map +1 -0
  260. package/dist/declarations/src/lib/core/initialise-lists.d.ts +131 -0
  261. package/dist/declarations/src/lib/core/initialise-lists.d.ts.map +1 -0
  262. package/dist/declarations/src/lib/core/resolve-relationships.d.ts +30 -0
  263. package/dist/declarations/src/lib/core/resolve-relationships.d.ts.map +1 -0
  264. package/dist/declarations/src/lib/core/where-inputs.d.ts +15 -0
  265. package/dist/declarations/src/lib/core/where-inputs.d.ts.map +1 -0
  266. package/dist/declarations/src/lib/express.d.ts +10 -0
  267. package/dist/declarations/src/lib/express.d.ts.map +1 -0
  268. package/dist/declarations/src/lib/migrations.d.ts +13 -0
  269. package/dist/declarations/src/lib/migrations.d.ts.map +1 -0
  270. package/dist/declarations/src/lib/system.d.ts +35 -0
  271. package/dist/declarations/src/lib/system.d.ts.map +1 -0
  272. package/dist/declarations/src/schema.d.ts +40 -0
  273. package/dist/declarations/src/schema.d.ts.map +1 -0
  274. package/dist/declarations/src/scripts/cli.d.ts +11 -0
  275. package/dist/declarations/src/scripts/cli.d.ts.map +1 -0
  276. package/dist/declarations/src/scripts/index.d.ts +2 -0
  277. package/dist/declarations/src/scripts/index.d.ts.map +1 -0
  278. package/dist/declarations/src/scripts/utils.d.ts +7 -0
  279. package/dist/declarations/src/scripts/utils.d.ts.map +1 -0
  280. package/dist/declarations/src/session.d.ts +86 -0
  281. package/dist/declarations/src/session.d.ts.map +1 -0
  282. package/dist/declarations/src/testing.d.ts +2 -0
  283. package/dist/declarations/src/testing.d.ts.map +1 -0
  284. package/dist/declarations/src/types/admin-meta.d.ts +190 -0
  285. package/dist/declarations/src/types/admin-meta.d.ts.map +1 -0
  286. package/dist/declarations/src/types/config/access-control.d.ts +108 -0
  287. package/dist/declarations/src/types/config/access-control.d.ts.map +1 -0
  288. package/dist/declarations/src/types/config/fields.d.ts +67 -0
  289. package/dist/declarations/src/types/config/fields.d.ts.map +1 -0
  290. package/dist/declarations/src/types/config/hooks.d.ts +441 -0
  291. package/dist/declarations/src/types/config/hooks.d.ts.map +1 -0
  292. package/dist/declarations/src/types/config/index.d.ts +283 -0
  293. package/dist/declarations/src/types/config/index.d.ts.map +1 -0
  294. package/dist/declarations/src/types/config/lists.d.ts +430 -0
  295. package/dist/declarations/src/types/config/lists.d.ts.map +1 -0
  296. package/dist/declarations/src/types/context.d.ts +458 -0
  297. package/dist/declarations/src/types/context.d.ts.map +1 -0
  298. package/dist/declarations/src/types/core.d.ts +9 -0
  299. package/dist/declarations/src/types/core.d.ts.map +1 -0
  300. package/dist/declarations/src/types/index.d.ts +9 -0
  301. package/dist/declarations/src/types/index.d.ts.map +1 -0
  302. package/dist/declarations/src/types/next-fields.d.ts +308 -0
  303. package/dist/declarations/src/types/next-fields.d.ts.map +1 -0
  304. package/dist/declarations/src/types/prisma.d.ts +13 -0
  305. package/dist/declarations/src/types/prisma.d.ts.map +1 -0
  306. package/dist/declarations/src/types/schema/g.d.ts +7 -0
  307. package/dist/declarations/src/types/schema/g.d.ts.map +1 -0
  308. package/dist/declarations/src/types/schema/gWithContext.d.ts +12 -0
  309. package/dist/declarations/src/types/schema/gWithContext.d.ts.map +1 -0
  310. package/dist/declarations/src/types/schema/index.d.ts +4 -0
  311. package/dist/declarations/src/types/schema/index.d.ts.map +1 -0
  312. package/dist/declarations/src/types/schema/legacy-alias.d.ts +28 -0
  313. package/dist/declarations/src/types/schema/scalars.d.ts +22 -0
  314. package/dist/declarations/src/types/schema/scalars.d.ts.map +1 -0
  315. package/dist/declarations/src/types/session.d.ts +28 -0
  316. package/dist/declarations/src/types/session.d.ts.map +1 -0
  317. package/dist/declarations/src/types/type-info.d.ts +35 -0
  318. package/dist/declarations/src/types/type-info.d.ts.map +1 -0
  319. package/dist/declarations/src/types/utils.d.ts +78 -0
  320. package/dist/declarations/src/types/utils.d.ts.map +1 -0
  321. package/dist/declarations/types/dist/nixxie-cms-core-types.cjs.d.ts +2 -0
  322. package/dist/express-6743b918.esm.js +476 -0
  323. package/dist/express-e9ed9a7d.cjs.js +495 -0
  324. package/dist/filters-8c8616f9.esm.js +89 -0
  325. package/dist/filters-b3e5eb50.cjs.js +96 -0
  326. package/dist/index-24b78415.esm.js +419 -0
  327. package/dist/index-ac01583b.cjs.js +425 -0
  328. package/dist/migrations-996e66a0.esm.js +76 -0
  329. package/dist/migrations-ab2e0fd4.cjs.js +78 -0
  330. package/dist/next-fields-49c025ef.cjs.js +251 -0
  331. package/dist/next-fields-9bf04ed8.esm.js +241 -0
  332. package/dist/nixxie-cms-core.cjs.d.ts +2 -0
  333. package/dist/nixxie-cms-core.cjs.js +522 -0
  334. package/dist/nixxie-cms-core.esm.js +504 -0
  335. package/dist/non-null-graphql-17b83ddc.cjs.js +72 -0
  336. package/dist/non-null-graphql-5315718c.esm.js +67 -0
  337. package/dist/pick-5fe45878.cjs.js +71 -0
  338. package/dist/pick-b7ef3115.esm.js +68 -0
  339. package/dist/resolve-hooks-17aafd37.esm.js +2026 -0
  340. package/dist/resolve-hooks-66fe8a8e.cjs.js +2043 -0
  341. package/dist/system-48c5f6df.cjs.js +4283 -0
  342. package/dist/system-dfec2f0a.esm.js +4273 -0
  343. package/dist/useCreateItem-1be4987e.cjs.js +160 -0
  344. package/dist/useCreateItem-1f94d252.esm.js +157 -0
  345. package/dist/useFilter-0b5a1ee6.esm.js +118 -0
  346. package/dist/useFilter-1a4e6900.cjs.js +120 -0
  347. package/dist/utils-0cc426c8.esm.js +19 -0
  348. package/dist/utils-1b632a8f.cjs.js +21 -0
  349. package/dist/utils-230cddb1.cjs.js +150 -0
  350. package/dist/utils-5e1d4d28.esm.js +138 -0
  351. package/dist/utils-b031e11c.cjs.js +49 -0
  352. package/dist/utils-e74e3527.cjs.js +87 -0
  353. package/dist/utils-ef2cd0f4.esm.js +80 -0
  354. package/dist/utils-f9556354.esm.js +41 -0
  355. package/fields/dist/nixxie-cms-core-fields.cjs.d.ts +2 -0
  356. package/fields/dist/nixxie-cms-core-fields.cjs.js +1808 -0
  357. package/fields/dist/nixxie-cms-core-fields.esm.js +1785 -0
  358. package/fields/package.json +4 -0
  359. package/fields/types/bigInt/views/dist/nixxie-cms-core-fields-types-bigInt-views.cjs.d.ts +2 -0
  360. package/fields/types/bigInt/views/dist/nixxie-cms-core-fields-types-bigInt-views.cjs.js +258 -0
  361. package/fields/types/bigInt/views/dist/nixxie-cms-core-fields-types-bigInt-views.esm.js +253 -0
  362. package/fields/types/bigInt/views/package.json +4 -0
  363. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.d.ts +2 -0
  364. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +221 -0
  365. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +216 -0
  366. package/fields/types/bytes/package.json +4 -0
  367. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.cjs.d.ts +2 -0
  368. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.cjs.js +239 -0
  369. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.esm.js +234 -0
  370. package/fields/types/bytes/views/package.json +4 -0
  371. package/fields/types/calendarDay/views/dist/nixxie-cms-core-fields-types-calendarDay-views.cjs.d.ts +2 -0
  372. package/fields/types/calendarDay/views/dist/nixxie-cms-core-fields-types-calendarDay-views.cjs.js +147 -0
  373. package/fields/types/calendarDay/views/dist/nixxie-cms-core-fields-types-calendarDay-views.esm.js +141 -0
  374. package/fields/types/calendarDay/views/package.json +4 -0
  375. package/fields/types/checkbox/views/dist/nixxie-cms-core-fields-types-checkbox-views.cjs.d.ts +2 -0
  376. package/fields/types/checkbox/views/dist/nixxie-cms-core-fields-types-checkbox-views.cjs.js +126 -0
  377. package/fields/types/checkbox/views/dist/nixxie-cms-core-fields-types-checkbox-views.esm.js +120 -0
  378. package/fields/types/checkbox/views/package.json +4 -0
  379. package/fields/types/decimal/views/dist/nixxie-cms-core-fields-types-decimal-views.cjs.d.ts +2 -0
  380. package/fields/types/decimal/views/dist/nixxie-cms-core-fields-types-decimal-views.cjs.js +248 -0
  381. package/fields/types/decimal/views/dist/nixxie-cms-core-fields-types-decimal-views.esm.js +239 -0
  382. package/fields/types/decimal/views/package.json +4 -0
  383. package/fields/types/file/utils/package.json +4 -0
  384. package/fields/types/file/views/dist/nixxie-cms-core-fields-types-file-views.cjs.d.ts +2 -0
  385. package/fields/types/file/views/dist/nixxie-cms-core-fields-types-file-views.cjs.js +86 -0
  386. package/fields/types/file/views/dist/nixxie-cms-core-fields-types-file-views.esm.js +81 -0
  387. package/fields/types/file/views/package.json +4 -0
  388. package/fields/types/float/views/dist/nixxie-cms-core-fields-types-float-views.cjs.d.ts +2 -0
  389. package/fields/types/float/views/dist/nixxie-cms-core-fields-types-float-views.cjs.js +237 -0
  390. package/fields/types/float/views/dist/nixxie-cms-core-fields-types-float-views.esm.js +232 -0
  391. package/fields/types/float/views/package.json +4 -0
  392. package/fields/types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.cjs.d.ts +2 -0
  393. package/fields/types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.cjs.js +7 -0
  394. package/fields/types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.esm.js +3 -0
  395. package/fields/types/image/utils/package.json +4 -0
  396. package/fields/types/image/views/dist/nixxie-cms-core-fields-types-image-views.cjs.d.ts +2 -0
  397. package/fields/types/image/views/dist/nixxie-cms-core-fields-types-image-views.cjs.js +361 -0
  398. package/fields/types/image/views/dist/nixxie-cms-core-fields-types-image-views.esm.js +354 -0
  399. package/fields/types/image/views/package.json +4 -0
  400. package/fields/types/integer/views/dist/nixxie-cms-core-fields-types-integer-views.cjs.d.ts +2 -0
  401. package/fields/types/integer/views/dist/nixxie-cms-core-fields-types-integer-views.cjs.js +254 -0
  402. package/fields/types/integer/views/dist/nixxie-cms-core-fields-types-integer-views.esm.js +249 -0
  403. package/fields/types/integer/views/package.json +4 -0
  404. package/fields/types/json/views/dist/nixxie-cms-core-fields-types-json-views.cjs.d.ts +2 -0
  405. package/fields/types/json/views/dist/nixxie-cms-core-fields-types-json-views.cjs.js +83 -0
  406. package/fields/types/json/views/dist/nixxie-cms-core-fields-types-json-views.esm.js +77 -0
  407. package/fields/types/json/views/package.json +4 -0
  408. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.d.ts +2 -0
  409. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.js +147 -0
  410. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.esm.js +141 -0
  411. package/fields/types/multiselect/views/package.json +4 -0
  412. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.d.ts +2 -0
  413. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +206 -0
  414. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +196 -0
  415. package/fields/types/password/package.json +4 -0
  416. package/fields/types/password/views/dist/nixxie-cms-core-fields-types-password-views.cjs.d.ts +2 -0
  417. package/fields/types/password/views/dist/nixxie-cms-core-fields-types-password-views.cjs.js +330 -0
  418. package/fields/types/password/views/dist/nixxie-cms-core-fields-types-password-views.esm.js +320 -0
  419. package/fields/types/password/views/package.json +4 -0
  420. package/fields/types/relationship/views/RelationshipSelect/package.json +4 -0
  421. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.cjs.d.ts +2 -0
  422. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.cjs.js +1213 -0
  423. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.esm.js +1201 -0
  424. package/fields/types/relationship/views/package.json +4 -0
  425. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.cjs.d.ts +2 -0
  426. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.cjs.js +422 -0
  427. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.esm.js +416 -0
  428. package/fields/types/select/views/package.json +4 -0
  429. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.cjs.d.ts +2 -0
  430. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.cjs.js +316 -0
  431. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.esm.js +311 -0
  432. package/fields/types/text/views/package.json +4 -0
  433. package/fields/types/timestamp/views/dist/nixxie-cms-core-fields-types-timestamp-views.cjs.d.ts +2 -0
  434. package/fields/types/timestamp/views/dist/nixxie-cms-core-fields-types-timestamp-views.cjs.js +285 -0
  435. package/fields/types/timestamp/views/dist/nixxie-cms-core-fields-types-timestamp-views.esm.js +279 -0
  436. package/fields/types/timestamp/views/package.json +4 -0
  437. package/fields/types/virtual/views/dist/nixxie-cms-core-fields-types-virtual-views.cjs.d.ts +2 -0
  438. package/fields/types/virtual/views/dist/nixxie-cms-core-fields-types-virtual-views.cjs.js +54 -0
  439. package/fields/types/virtual/views/dist/nixxie-cms-core-fields-types-virtual-views.esm.js +48 -0
  440. package/fields/types/virtual/views/package.json +4 -0
  441. package/graphql-ts/dist/nixxie-cms-core-graphql-ts.cjs.d.ts +2 -0
  442. package/graphql-ts/dist/nixxie-cms-core-graphql-ts.cjs.js +45 -0
  443. package/graphql-ts/dist/nixxie-cms-core-graphql-ts.esm.js +2 -0
  444. package/graphql-ts/package.json +4 -0
  445. package/package.json +339 -0
  446. package/schema/package.json +4 -0
  447. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.d.ts +2 -0
  448. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +1607 -0
  449. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +1586 -0
  450. package/scripts/cli/package.json +4 -0
  451. package/scripts/dist/nixxie-cms-core-scripts.cjs.d.ts +2 -0
  452. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +73 -0
  453. package/scripts/dist/nixxie-cms-core-scripts.esm.js +71 -0
  454. package/scripts/package.json +4 -0
  455. package/session/dist/nixxie-cms-core-session.cjs.d.ts +2 -0
  456. package/session/dist/nixxie-cms-core-session.cjs.js +157 -0
  457. package/session/dist/nixxie-cms-core-session.esm.js +129 -0
  458. package/session/package.json +4 -0
  459. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.tsx +167 -0
  460. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.tsx +22 -0
  461. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.tsx +71 -0
  462. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.tsx +333 -0
  463. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/common.tsx +358 -0
  464. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.tsx +483 -0
  465. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/FilterAdd.tsx +221 -0
  466. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/PaginationControls.tsx +170 -0
  467. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/Tag.tsx +72 -0
  468. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.tsx +1006 -0
  469. package/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.tsx +24 -0
  470. package/src/___internal-do-not-use-will-break-in-patch/artifacts.ts +5 -0
  471. package/src/access.ts +25 -0
  472. package/src/admin-ui/admin-meta-graphql.ts +168 -0
  473. package/src/admin-ui/apollo.tsx +35 -0
  474. package/src/admin-ui/components/CellContainer.tsx +6 -0
  475. package/src/admin-ui/components/CommandPalette.tsx +431 -0
  476. package/src/admin-ui/components/Container.tsx +14 -0
  477. package/src/admin-ui/components/CreateButtonLink.tsx +46 -0
  478. package/src/admin-ui/components/CreateItemDialog.tsx +56 -0
  479. package/src/admin-ui/components/EmptyState.tsx +52 -0
  480. package/src/admin-ui/components/Errors.tsx +130 -0
  481. package/src/admin-ui/components/GraphQLErrorNotice.tsx +78 -0
  482. package/src/admin-ui/components/InlineCode.tsx +17 -0
  483. package/src/admin-ui/components/Logo.tsx +70 -0
  484. package/src/admin-ui/components/Navigation.tsx +385 -0
  485. package/src/admin-ui/components/NullableFieldWrapper.tsx +72 -0
  486. package/src/admin-ui/components/PageContainer.tsx +310 -0
  487. package/src/admin-ui/components/WelcomeDialog.tsx +119 -0
  488. package/src/admin-ui/components/index.ts +23 -0
  489. package/src/admin-ui/context.tsx +338 -0
  490. package/src/admin-ui/image.tsx +2 -0
  491. package/src/admin-ui/index.tsx +1 -0
  492. package/src/admin-ui/router.tsx +24 -0
  493. package/src/admin-ui/system/generateAdminUI.ts +155 -0
  494. package/src/admin-ui/system/index.ts +1 -0
  495. package/src/admin-ui/templates/app.ts +60 -0
  496. package/src/admin-ui/templates/create-item.ts +5 -0
  497. package/src/admin-ui/templates/home.ts +2 -0
  498. package/src/admin-ui/templates/index.ts +53 -0
  499. package/src/admin-ui/templates/item.tsx +5 -0
  500. package/src/admin-ui/templates/list.tsx +5 -0
  501. package/src/admin-ui/templates/next-config.ts +16 -0
  502. package/src/admin-ui/templates/no-access.ts +7 -0
  503. package/src/admin-ui/utils/Fields.tsx +241 -0
  504. package/src/admin-ui/utils/actionData.ts +36 -0
  505. package/src/admin-ui/utils/filters.ts +148 -0
  506. package/src/admin-ui/utils/index.ts +10 -0
  507. package/src/admin-ui/utils/pick.ts +12 -0
  508. package/src/admin-ui/utils/useCreateItem.ts +171 -0
  509. package/src/admin-ui/utils/usePreventNavigation.tsx +31 -0
  510. package/src/admin-ui/utils/utils.tsx +127 -0
  511. package/src/artifacts.ts +110 -0
  512. package/src/context.ts +1 -0
  513. package/src/fields/filters/enum-filter.ts +77 -0
  514. package/src/fields/filters/index.ts +1 -0
  515. package/src/fields/filters/internal.ts +89 -0
  516. package/src/fields/filters/providers/mysql.ts +450 -0
  517. package/src/fields/filters/providers/postgresql.ts +448 -0
  518. package/src/fields/filters/providers/sqlite.ts +442 -0
  519. package/src/fields/index.ts +34 -0
  520. package/src/fields/non-null-graphql.ts +115 -0
  521. package/src/fields/resolve-hooks.ts +61 -0
  522. package/src/fields/types/bigInt/index.ts +181 -0
  523. package/src/fields/types/bigInt/views/index.tsx +254 -0
  524. package/src/fields/types/bytes/index.ts +275 -0
  525. package/src/fields/types/bytes/views/index.tsx +190 -0
  526. package/src/fields/types/calendarDay/index.ts +194 -0
  527. package/src/fields/types/calendarDay/views/index.tsx +144 -0
  528. package/src/fields/types/checkbox/index.ts +76 -0
  529. package/src/fields/types/checkbox/views/index.tsx +97 -0
  530. package/src/fields/types/decimal/index.ts +182 -0
  531. package/src/fields/types/decimal/views/index.tsx +215 -0
  532. package/src/fields/types/file/index.ts +168 -0
  533. package/src/fields/types/file/views/Field.tsx +300 -0
  534. package/src/fields/types/file/views/index.tsx +74 -0
  535. package/src/fields/types/float/index.ts +133 -0
  536. package/src/fields/types/float/views/index.tsx +215 -0
  537. package/src/fields/types/image/index.ts +244 -0
  538. package/src/fields/types/image/internal-utils.ts +58 -0
  539. package/src/fields/types/image/utils.ts +1 -0
  540. package/src/fields/types/image/views/Field.tsx +295 -0
  541. package/src/fields/types/image/views/index.tsx +92 -0
  542. package/src/fields/types/integer/index.ts +156 -0
  543. package/src/fields/types/integer/views/index.tsx +255 -0
  544. package/src/fields/types/json/index.ts +77 -0
  545. package/src/fields/types/json/views/index.tsx +76 -0
  546. package/src/fields/types/multiselect/index.ts +212 -0
  547. package/src/fields/types/multiselect/views/index.tsx +151 -0
  548. package/src/fields/types/password/index.ts +241 -0
  549. package/src/fields/types/password/views/index.tsx +342 -0
  550. package/src/fields/types/relationship/index.ts +381 -0
  551. package/src/fields/types/relationship/views/ComboboxMany.tsx +110 -0
  552. package/src/fields/types/relationship/views/ComboboxSingle.tsx +115 -0
  553. package/src/fields/types/relationship/views/ContextualActions.tsx +139 -0
  554. package/src/fields/types/relationship/views/RelationshipTable.tsx +190 -0
  555. package/src/fields/types/relationship/views/index.tsx +492 -0
  556. package/src/fields/types/relationship/views/types.ts +46 -0
  557. package/src/fields/types/relationship/views/useApolloQuery.ts +185 -0
  558. package/src/fields/types/relationship/views/useFilter.tsx +109 -0
  559. package/src/fields/types/select/index.ts +226 -0
  560. package/src/fields/types/select/views/SegmentedControl.tsx +83 -0
  561. package/src/fields/types/select/views/index.tsx +318 -0
  562. package/src/fields/types/text/index.ts +207 -0
  563. package/src/fields/types/text/views/index.tsx +273 -0
  564. package/src/fields/types/timestamp/index.ts +116 -0
  565. package/src/fields/types/timestamp/views/__tests__/index.tsx +68 -0
  566. package/src/fields/types/timestamp/views/__tests__/utils.tsx +16 -0
  567. package/src/fields/types/timestamp/views/index.tsx +262 -0
  568. package/src/fields/types/timestamp/views/utils.ts +22 -0
  569. package/src/fields/types/virtual/index.ts +108 -0
  570. package/src/fields/types/virtual/views/index.tsx +53 -0
  571. package/src/graphql-ts.ts +32 -0
  572. package/src/helpers.ts +316 -0
  573. package/src/index.ts +20 -0
  574. package/src/lib/admin-meta-graphql.ts +407 -0
  575. package/src/lib/admin-meta.ts +369 -0
  576. package/src/lib/coerceAndValidateForGraphQLInput.ts +29 -0
  577. package/src/lib/context/api.ts +99 -0
  578. package/src/lib/context/createContext.ts +161 -0
  579. package/src/lib/context/graphql.ts +300 -0
  580. package/src/lib/core/access-control.ts +434 -0
  581. package/src/lib/core/field-assertions.ts +118 -0
  582. package/src/lib/core/filter-order-access.ts +48 -0
  583. package/src/lib/core/graphql-errors.ts +76 -0
  584. package/src/lib/core/hooks.ts +111 -0
  585. package/src/lib/core/initialise-lists.ts +1097 -0
  586. package/src/lib/core/mutations/index.ts +917 -0
  587. package/src/lib/core/mutations/nested-mutation-many-input-resolvers.ts +145 -0
  588. package/src/lib/core/mutations/nested-mutation-one-input-resolvers.ts +71 -0
  589. package/src/lib/core/prisma-schema-printer.ts +256 -0
  590. package/src/lib/core/queries/index.ts +66 -0
  591. package/src/lib/core/queries/output-field.ts +178 -0
  592. package/src/lib/core/queries/resolvers.ts +258 -0
  593. package/src/lib/core/resolve-relationships.ts +303 -0
  594. package/src/lib/core/utils.ts +56 -0
  595. package/src/lib/core/where-inputs.ts +130 -0
  596. package/src/lib/express.ts +109 -0
  597. package/src/lib/graphql.ts +83 -0
  598. package/src/lib/id-field.ts +214 -0
  599. package/src/lib/middleware.ts +68 -0
  600. package/src/lib/migrations.ts +90 -0
  601. package/src/lib/otel.ts +43 -0
  602. package/src/lib/prompts.ts +29 -0
  603. package/src/lib/system.ts +207 -0
  604. package/src/lib/telemetry.ts +342 -0
  605. package/src/lib/typescript-schema-printer.ts +227 -0
  606. package/src/lib/utils.ts +21 -0
  607. package/src/pkg-dir.ts +6 -0
  608. package/src/schema.ts +233 -0
  609. package/src/scripts/build.ts +64 -0
  610. package/src/scripts/cli.ts +124 -0
  611. package/src/scripts/dev.ts +452 -0
  612. package/src/scripts/esbuild.ts +120 -0
  613. package/src/scripts/index.ts +20 -0
  614. package/src/scripts/migrate.ts +214 -0
  615. package/src/scripts/prisma.ts +49 -0
  616. package/src/scripts/start.ts +76 -0
  617. package/src/scripts/telemetry.ts +37 -0
  618. package/src/scripts/utils.ts +22 -0
  619. package/src/session.ts +168 -0
  620. package/src/testing.ts +23 -0
  621. package/src/types/admin-meta.ts +218 -0
  622. package/src/types/config/access-control.ts +186 -0
  623. package/src/types/config/fields.ts +96 -0
  624. package/src/types/config/hooks.ts +529 -0
  625. package/src/types/config/index.ts +333 -0
  626. package/src/types/config/lists.ts +565 -0
  627. package/src/types/context.ts +530 -0
  628. package/src/types/core.ts +16 -0
  629. package/src/types/index.ts +8 -0
  630. package/src/types/next-fields.ts +499 -0
  631. package/src/types/prisma.ts +16 -0
  632. package/src/types/schema/g.ts +5 -0
  633. package/src/types/schema/gWithContext.ts +20 -0
  634. package/src/types/schema/index.ts +4 -0
  635. package/src/types/schema/legacy-alias.d.ts +28 -0
  636. package/src/types/schema/legacy-alias.js +1 -0
  637. package/src/types/schema/scalars.ts +220 -0
  638. package/src/types/session.ts +26 -0
  639. package/src/types/telemetry.ts +51 -0
  640. package/src/types/type-info.ts +38 -0
  641. package/src/types/type-tests.ts +21 -0
  642. package/src/types/utils.ts +108 -0
  643. package/static/admin-error.html +53 -0
  644. package/static/dev-loading.html +146 -0
  645. package/static/favicon.ico +0 -0
  646. package/static/favicon.svg +4 -0
  647. package/system/package.json +4 -0
  648. package/testing/dist/nixxie-cms-core-testing.cjs.d.ts +2 -0
  649. package/testing/dist/nixxie-cms-core-testing.cjs.js +29 -0
  650. package/testing/dist/nixxie-cms-core-testing.esm.js +21 -0
  651. package/testing/package.json +4 -0
  652. package/tests/conditional-filters.test.ts +326 -0
  653. package/tests/telemetry.test.ts +361 -0
  654. package/tsconfig.json +20 -0
  655. package/types/dist/nixxie-cms-core-types.cjs.d.ts +2 -0
  656. package/types/dist/nixxie-cms-core-types.cjs.js +29 -0
  657. package/types/dist/nixxie-cms-core-types.esm.js +9 -0
  658. package/types/package.json +4 -0
@@ -0,0 +1,917 @@
1
+ import { GInputObjectType, type GNullableInputType } from '@graphql-ts/schema'
2
+ import type { GraphQLNamedType } from 'graphql'
3
+
4
+ import type { BaseItem, NixxieContext } from '../../../types'
5
+ import type { UniquePrismaFilter } from '../../../types/prisma'
6
+ import { g } from '../../../types/schema'
7
+ import { withSpan } from '../../otel'
8
+ import {
9
+ cannotActionForItem,
10
+ cannotForItem,
11
+ enforceFieldLevelAccessControl,
12
+ enforceListLevelAccessControl,
13
+ getAccessFilters,
14
+ getOperationAccess,
15
+ } from '../access-control'
16
+ import { checkFilterOrderAccess } from '../filter-order-access'
17
+ import {
18
+ accessDeniedError,
19
+ extensionError,
20
+ relationshipError,
21
+ resolverError,
22
+ } from '../graphql-errors'
23
+ import { runSideEffectOnlyHook, validate } from '../hooks'
24
+ import type { InitialisedAction, InitialisedList } from '../initialise-lists'
25
+ import { mapUniqueWhereToWhere, traverse } from '../queries/resolvers'
26
+ import type { ResolvedDBField } from '../resolve-relationships'
27
+ import {
28
+ type IdType,
29
+ getDBFieldKeyForFieldOnMultiField,
30
+ promiseAllRejectWithAllErrors,
31
+ } from '../utils'
32
+ import {
33
+ type InputFilter,
34
+ type UniqueInputFilter,
35
+ resolveUniqueWhereInput,
36
+ resolveWhereInput,
37
+ } from '../where-inputs'
38
+ import {
39
+ RelationshipErrors,
40
+ resolveRelateToManyForCreateInput,
41
+ resolveRelateToManyForUpdateInput,
42
+ } from './nested-mutation-many-input-resolvers'
43
+ import {
44
+ resolveRelateToOneForCreateInput,
45
+ resolveRelateToOneForUpdateInput,
46
+ } from './nested-mutation-one-input-resolvers'
47
+
48
+ async function getFilteredItem(
49
+ list: InitialisedList,
50
+ context: NixxieContext,
51
+ uniqueWhere: UniquePrismaFilter,
52
+ accessFilters: boolean | InputFilter,
53
+ operation: 'update' | 'delete'
54
+ ) {
55
+ // early exit if they want to exclude everything
56
+ if (accessFilters === false) {
57
+ throw accessDeniedError(cannotForItem(operation, list))
58
+ }
59
+
60
+ // merge the filter access control and try to get the item
61
+ let where = mapUniqueWhereToWhere(uniqueWhere, list)
62
+
63
+ await checkFilterOrderAccess([...traverse(list, where as any)], context, 'filter')
64
+
65
+ if (typeof accessFilters === 'object') {
66
+ where = { AND: [where, await resolveWhereInput(accessFilters, list, context)] }
67
+ }
68
+
69
+ const item = await context.prisma[list.listKey].findFirst({ where })
70
+ if (item !== null) return item
71
+
72
+ throw accessDeniedError(cannotForItem(operation, list))
73
+ }
74
+
75
+ async function createSingle__(
76
+ inputData: Record<string, unknown>,
77
+ list: InitialisedList,
78
+ context: NixxieContext
79
+ ) {
80
+ return await withSpan(
81
+ `create ${list.graphql.names.outputTypeNameLower}`,
82
+ async span => {
83
+ // throw an accessDeniedError if not allowed
84
+ await enforceListLevelAccessControl(context, 'create', list, inputData, undefined)
85
+ await enforceFieldLevelAccessControl(context, 'create', list, inputData, undefined)
86
+ const { beforeOperation, afterOperation, data } = await resolveInputForCreateOrUpdate(
87
+ list,
88
+ context,
89
+ inputData,
90
+ undefined
91
+ )
92
+
93
+ // before operation
94
+ await beforeOperation()
95
+
96
+ // operation
97
+ const result = await context.prisma[list.listKey].create({
98
+ data: list.isSingleton ? { ...data, id: 1 } : data,
99
+ })
100
+
101
+ span.setAttribute('nixxie.result.id', result?.id ?? '')
102
+ return { item: result, afterOperation }
103
+ },
104
+ {
105
+ 'nixxie.list': list.listKey,
106
+ 'nixxie.operation': 'create',
107
+ }
108
+ )
109
+ }
110
+
111
+ export class NestedMutationState {
112
+ #afterOperations: (() => void | Promise<void>)[] = []
113
+ #context: NixxieContext
114
+ constructor(context: NixxieContext) {
115
+ this.#context = context
116
+ }
117
+ async create(data: Record<string, unknown>, list: InitialisedList) {
118
+ const context = this.#context
119
+
120
+ const operationAccess = await getOperationAccess(list, context, 'create')
121
+ if (!operationAccess) throw accessDeniedError(cannotForItem('create', list))
122
+
123
+ // before operation AND operation
124
+ const { item, afterOperation } = await createSingle__(data, list, context)
125
+
126
+ // after operation
127
+ this.#afterOperations.push(() => afterOperation(item))
128
+ return { id: item.id as IdType }
129
+ }
130
+
131
+ async afterOperation() {
132
+ await promiseAllRejectWithAllErrors(this.#afterOperations.map(async x => x()))
133
+ }
134
+ }
135
+
136
+ type InputData = Record<string, unknown> | null | undefined
137
+ type UpdateInput = {
138
+ where: UniqueInputFilter
139
+ data: InputData
140
+ }
141
+ type ActionInput = {
142
+ where: UniqueInputFilter
143
+ args: Record<string, unknown>
144
+ }
145
+
146
+ async function updateSingle__(
147
+ { where, data: inputData }: UpdateInput,
148
+ list: InitialisedList,
149
+ context: NixxieContext,
150
+ accessFilters: boolean | InputFilter
151
+ ) {
152
+ return await withSpan(
153
+ `update ${list.graphql.names.outputTypeNameLower}`,
154
+ async span => {
155
+ // validate and resolve the input filter
156
+ const uniqueWhere = await resolveUniqueWhereInput(where, list, context)
157
+
158
+ // filter and item access control - throws an AccessDeniedError if not allowed
159
+ const item = await getFilteredItem(list, context, uniqueWhere!, accessFilters, 'update')
160
+
161
+ // throw an accessDeniedError if not allowed
162
+ await enforceListLevelAccessControl(context, 'update', list, inputData ?? {}, item)
163
+ await enforceFieldLevelAccessControl(context, 'update', list, inputData ?? {}, item)
164
+ const { beforeOperation, afterOperation, data } = await resolveInputForCreateOrUpdate(
165
+ list,
166
+ context,
167
+ inputData ?? {},
168
+ item
169
+ )
170
+
171
+ // before operation
172
+ await beforeOperation()
173
+
174
+ // operation
175
+ const result = await context.prisma[list.listKey].update({
176
+ where: { id: item.id },
177
+ data,
178
+ })
179
+ span.setAttribute('nixxie.result.id', result?.id ?? '')
180
+
181
+ // after operation
182
+ await afterOperation(result)
183
+
184
+ return result
185
+ },
186
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'update' }
187
+ )
188
+ }
189
+
190
+ async function deleteSingle__(
191
+ where: UniqueInputFilter,
192
+ list: InitialisedList,
193
+ context: NixxieContext,
194
+ accessFilters: boolean | InputFilter
195
+ ) {
196
+ return await withSpan(
197
+ `delete ${list.graphql.names.outputTypeNameLower}`,
198
+ async span => {
199
+ // validate and resolve the input filter
200
+ const uniqueWhere = await resolveUniqueWhereInput(where, list, context)
201
+
202
+ // filter and item access control throw an AccessDeniedError if not allowed
203
+ // apply access.filter.* controls
204
+ const item = await getFilteredItem(list, context, uniqueWhere!, accessFilters, 'delete')
205
+
206
+ await enforceListLevelAccessControl(context, 'delete', list, {}, item)
207
+ // WARNING: no field level access control for delete operations
208
+
209
+ const hookArgs = {
210
+ operation: 'delete' as const,
211
+ listKey: list.listKey,
212
+ context,
213
+ item,
214
+ resolvedData: undefined,
215
+ inputData: undefined,
216
+ }
217
+
218
+ // hooks
219
+ await validate({ list, hookArgs })
220
+
221
+ // before operation
222
+ await runSideEffectOnlyHook(list, 'beforeOperation', hookArgs)
223
+
224
+ // operation
225
+ const result = await context.prisma[list.listKey].delete({ where: { id: item.id } })
226
+ span.setAttribute('nixxie.result.id', result?.id ?? '')
227
+
228
+ // after operation
229
+ await runSideEffectOnlyHook(list, 'afterOperation', {
230
+ ...hookArgs,
231
+ item: undefined,
232
+ originalItem: item,
233
+ })
234
+
235
+ return result
236
+ },
237
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'delete' }
238
+ )
239
+ }
240
+
241
+ async function actionSingle__(
242
+ context: NixxieContext,
243
+ list: InitialisedList,
244
+ action: InitialisedAction,
245
+ { where, args }: ActionInput
246
+ ) {
247
+ return await withSpan(
248
+ action.otel,
249
+ async span => {
250
+ // no before operation hook for actions
251
+
252
+ // operation
253
+ const result = await action.resolve(
254
+ {
255
+ listKey: list.listKey,
256
+ actionKey: action.actionKey,
257
+ where,
258
+ args,
259
+ },
260
+ context
261
+ )
262
+ span.setAttribute('nixxie.result.id', (result?.id as string) ?? '')
263
+
264
+ // no after operation hook for actions
265
+ return result
266
+ },
267
+ { 'nixxie.list': list.listKey, 'nixxie.action': action.actionKey }
268
+ )
269
+ }
270
+
271
+ //
272
+
273
+ async function createOne(inputData: InputData, list: InitialisedList, context: NixxieContext) {
274
+ const operationAccess = await getOperationAccess(list, context, 'create')
275
+ if (!operationAccess) throw accessDeniedError(cannotForItem('create', list))
276
+
277
+ // get list-level access control filters
278
+ // NOTHING - no filters for create operations
279
+
280
+ // operation
281
+ const { item, afterOperation } = await createSingle__(inputData ?? {}, list, context)
282
+
283
+ // after operation // TODO: move to createSingle__
284
+ await afterOperation(item)
285
+
286
+ return item
287
+ }
288
+
289
+ async function createMany(
290
+ inputDatas: InputData[],
291
+ list: InitialisedList,
292
+ context: NixxieContext
293
+ ) {
294
+ const operationAccess = await getOperationAccess(list, context, 'create')
295
+ // WARNING: we do not short-circuit here, we throw for each
296
+
297
+ // get list-level access control filters
298
+ // NOTHING - no filters for create operations
299
+
300
+ return inputDatas.map(async inputData => {
301
+ // throw for each attempt
302
+ if (!operationAccess) throw accessDeniedError(cannotForItem('create', list))
303
+
304
+ // operation
305
+ const { item, afterOperation } = await createSingle__(inputData ?? {}, list, context)
306
+
307
+ // after operation // TODO: move to createSingle__
308
+ await afterOperation(item)
309
+
310
+ return item
311
+ })
312
+ }
313
+
314
+ async function updateOne(
315
+ updateInput: UpdateInput,
316
+ list: InitialisedList,
317
+ context: NixxieContext
318
+ ) {
319
+ const operationAccess = await getOperationAccess(list, context, 'update')
320
+ if (!operationAccess) throw accessDeniedError(cannotForItem('update', list))
321
+
322
+ // get list-level access control filters
323
+ const accessFilters = await getAccessFilters(list, context, 'update')
324
+
325
+ return updateSingle__(updateInput, list, context, accessFilters)
326
+ }
327
+
328
+ async function updateMany(
329
+ updateManyInput: UpdateInput[],
330
+ list: InitialisedList,
331
+ context: NixxieContext
332
+ ) {
333
+ const operationAccess = await getOperationAccess(list, context, 'update')
334
+ // WARNING: we do not short-circuit here, we throw for each
335
+
336
+ // get list-level access control filters
337
+ const accessFilters = await getAccessFilters(list, context, 'update')
338
+
339
+ return updateManyInput.map(async updateInput => {
340
+ // throw for each attempt
341
+ if (!operationAccess) throw accessDeniedError(cannotForItem('update', list))
342
+
343
+ return updateSingle__(updateInput, list, context, accessFilters)
344
+ })
345
+ }
346
+
347
+ async function deleteOne(
348
+ where: UniqueInputFilter,
349
+ list: InitialisedList,
350
+ context: NixxieContext
351
+ ) {
352
+ const operationAccess = await getOperationAccess(list, context, 'delete')
353
+ if (!operationAccess) throw accessDeniedError(cannotForItem('delete', list))
354
+
355
+ // get list-level access control filters
356
+ const accessFilters = await getAccessFilters(list, context, 'delete')
357
+
358
+ return deleteSingle__(where, list, context, accessFilters)
359
+ }
360
+
361
+ async function deleteMany(
362
+ wheres: UniqueInputFilter[],
363
+ list: InitialisedList,
364
+ context: NixxieContext
365
+ ) {
366
+ const operationAccess = await getOperationAccess(list, context, 'delete')
367
+ // WARNING: we do not short-circuit here, we throw for each
368
+
369
+ // get list-level access control filters
370
+ const accessFilters = await getAccessFilters(list, context, 'delete')
371
+
372
+ return wheres.map(async where => {
373
+ // throw for each attempt
374
+ if (!operationAccess) throw accessDeniedError(cannotForItem('delete', list))
375
+
376
+ return deleteSingle__(where, list, context, accessFilters)
377
+ })
378
+ }
379
+
380
+ async function actionOne(
381
+ input: ActionInput,
382
+ list: InitialisedList,
383
+ context: NixxieContext,
384
+ action: InitialisedAction
385
+ ) {
386
+ const operationAccess = await action.access({
387
+ context,
388
+ session: context.session, // TODO: remove in breaking change
389
+ listKey: list.listKey,
390
+ actionKey: action.actionKey,
391
+ })
392
+ if (!operationAccess) throw accessDeniedError(cannotActionForItem(action, list))
393
+
394
+ // get list-level access control filters
395
+ // NOTHING - no filters for action operations
396
+
397
+ return actionSingle__(context, list, action, input)
398
+ }
399
+
400
+ async function actionMany(
401
+ inputs: ActionInput[],
402
+ list: InitialisedList,
403
+ context: NixxieContext,
404
+ action: InitialisedAction
405
+ ) {
406
+ const operationAccess = await action.access({
407
+ context,
408
+ session: context.session, // TODO: remove in breaking change
409
+ listKey: list.listKey,
410
+ actionKey: action.actionKey,
411
+ })
412
+ // WARNING: we do not short-circuit here, we throw for each
413
+
414
+ // get list-level access control filters
415
+ // NOTHING - no filters for action operations
416
+
417
+ return inputs.map(async ({ where, ...args }) => {
418
+ // throw for each attempt
419
+ if (!operationAccess) throw accessDeniedError(cannotActionForItem(action, list))
420
+
421
+ return actionSingle__(context, list, action, { where, args })
422
+ })
423
+ }
424
+
425
+ async function getResolvedData(
426
+ list: InitialisedList,
427
+ hookArgs: {
428
+ context: NixxieContext
429
+ listKey: string
430
+ inputData: Record<string, any>
431
+ } & ({ operation: 'create'; item: undefined } | { operation: 'update'; item: BaseItem }),
432
+ nestedMutationState: NestedMutationState
433
+ ) {
434
+ const { context, operation } = hookArgs
435
+ let resolvedData = hookArgs.inputData
436
+
437
+ // apply non-relationship field type input resolvers
438
+ const resolverErrors: { error: Error; tag: string }[] = []
439
+ resolvedData = Object.fromEntries(
440
+ await Promise.all(
441
+ Object.entries(list.fields).map(async ([fieldKey, field]) => {
442
+ const inputResolver = field.input?.[operation]?.resolve
443
+
444
+ if (inputResolver && field.dbField.kind !== 'relation') {
445
+ try {
446
+ return [fieldKey, await inputResolver(resolvedData[fieldKey], context, undefined)]
447
+ } catch (error: any) {
448
+ resolverErrors.push({ error, tag: `${list.listKey}.${fieldKey}` })
449
+ }
450
+ }
451
+ return [fieldKey, resolvedData[fieldKey]] as const
452
+ })
453
+ )
454
+ )
455
+
456
+ if (resolverErrors.length) throw resolverError(resolverErrors)
457
+
458
+ // apply relationship field type input resolvers
459
+ const relationshipErrors: { error: Error; tag: string }[] = []
460
+ resolvedData = Object.fromEntries(
461
+ await Promise.all(
462
+ Object.entries(list.fields).map(async ([fieldKey, field]) => {
463
+ const inputResolver = field.input?.[operation]?.resolve
464
+ let input = resolvedData[fieldKey]
465
+ if (inputResolver && field.dbField.kind === 'relation') {
466
+ const tag = `${list.listKey}.${fieldKey}`
467
+ try {
468
+ input = await inputResolver(
469
+ input,
470
+ context,
471
+ // this third argument only applies to relationship fields
472
+ (() => {
473
+ if (input === undefined) {
474
+ // no-op: this is what we want
475
+ return () => undefined
476
+ }
477
+ if (input === null) {
478
+ // no-op: should this be userinputerror?
479
+ return () => undefined
480
+ }
481
+ const foreignList = list.lists[field.dbField.list]
482
+ if (field.dbField.mode === 'many' && operation === 'create') {
483
+ return resolveRelateToManyForCreateInput(
484
+ nestedMutationState,
485
+ context,
486
+ foreignList,
487
+ tag
488
+ )
489
+ }
490
+
491
+ if (field.dbField.mode === 'many' && operation === 'update') {
492
+ return resolveRelateToManyForUpdateInput(
493
+ nestedMutationState,
494
+ context,
495
+ foreignList,
496
+ tag
497
+ )
498
+ }
499
+
500
+ if (field.dbField.mode === 'one' && operation === 'create') {
501
+ return resolveRelateToOneForCreateInput(nestedMutationState, context, foreignList)
502
+ }
503
+
504
+ if (field.dbField.mode === 'one' && operation === 'update') {
505
+ return resolveRelateToOneForUpdateInput(nestedMutationState, context, foreignList)
506
+ }
507
+
508
+ throw new Error('Unknown relationship field type input mode or operation')
509
+ })()
510
+ )
511
+ } catch (error: any) {
512
+ if (error instanceof RelationshipErrors) {
513
+ relationshipErrors.push(...error.errors)
514
+ } else {
515
+ relationshipErrors.push({ error, tag })
516
+ }
517
+ }
518
+ }
519
+ return [fieldKey, input] as const
520
+ })
521
+ )
522
+ )
523
+
524
+ if (relationshipErrors.length) throw relationshipError(relationshipErrors)
525
+
526
+ // field hooks
527
+ const fieldsErrors: { error: Error; tag: string }[] = []
528
+ resolvedData = Object.fromEntries(
529
+ await Promise.all(
530
+ Object.entries(list.fields).map(async ([fieldKey, field]) => {
531
+ try {
532
+ return [
533
+ fieldKey,
534
+ operation === 'create'
535
+ ? await field.hooks.resolveInput.create({
536
+ ...hookArgs,
537
+ itemField: undefined,
538
+ inputFieldData: hookArgs.inputData[fieldKey],
539
+ resolvedData,
540
+ resolvedFieldData: resolvedData[fieldKey],
541
+ fieldKey,
542
+ })
543
+ : await field.hooks.resolveInput.update({
544
+ ...hookArgs,
545
+ itemField: hookArgs.item[fieldKey],
546
+ inputFieldData: hookArgs.inputData[fieldKey],
547
+ resolvedData,
548
+ resolvedFieldData: resolvedData[fieldKey],
549
+ fieldKey,
550
+ }),
551
+ ]
552
+ } catch (error: any) {
553
+ fieldsErrors.push({
554
+ error,
555
+ tag: `${list.listKey}.${fieldKey}.hooks.resolveInput`,
556
+ })
557
+ return [fieldKey, undefined]
558
+ }
559
+ })
560
+ )
561
+ )
562
+
563
+ if (fieldsErrors.length) throw extensionError('resolveInput', fieldsErrors)
564
+
565
+ // list hooks
566
+ try {
567
+ if (operation === 'create') {
568
+ resolvedData = await list.hooks.resolveInput.create({ ...hookArgs, resolvedData })
569
+ } else if (operation === 'update') {
570
+ resolvedData = await list.hooks.resolveInput.update({ ...hookArgs, resolvedData })
571
+ }
572
+ } catch (error: any) {
573
+ throw extensionError('resolveInput', [{ error, tag: `${list.listKey}.hooks.resolveInput` }])
574
+ }
575
+
576
+ return resolvedData
577
+ }
578
+
579
+ async function resolveInputForCreateOrUpdate(
580
+ list: InitialisedList,
581
+ context: NixxieContext,
582
+ inputData: Record<string, unknown>,
583
+ item: BaseItem | undefined
584
+ ) {
585
+ const nestedMutationState = new NestedMutationState(context)
586
+ const baseHookArgs = {
587
+ context,
588
+ listKey: list.listKey,
589
+ inputData,
590
+ resolvedData: {},
591
+ }
592
+ const hookArgs =
593
+ item === undefined
594
+ ? { ...baseHookArgs, operation: 'create' as const, item, originalItem: undefined }
595
+ : { ...baseHookArgs, operation: 'update' as const, item, originalItem: item }
596
+
597
+ // Take the original input and resolve all the fields down to what
598
+ // will be saved into the database.
599
+ hookArgs.resolvedData = await getResolvedData(list, hookArgs, nestedMutationState)
600
+
601
+ // Apply all validation checks
602
+ await validate({ list, hookArgs })
603
+
604
+ // Return the full resolved input (ready for prisma level operation),
605
+ // and the afterOperation hook to be applied
606
+ return {
607
+ data: transformForPrismaClient(list, context, hookArgs.resolvedData),
608
+ beforeOperation: async () => {
609
+ // before operation
610
+ await runSideEffectOnlyHook(list, 'beforeOperation', hookArgs)
611
+ },
612
+ afterOperation: async (updatedItem: BaseItem) => {
613
+ await nestedMutationState.afterOperation()
614
+
615
+ // after operation
616
+ await runSideEffectOnlyHook(list, 'afterOperation', {
617
+ ...hookArgs,
618
+ item: updatedItem,
619
+ })
620
+ },
621
+ }
622
+ }
623
+
624
+ function transformInnerDBField(
625
+ dbField: Exclude<ResolvedDBField, { kind: 'multi' }>,
626
+ context: NixxieContext,
627
+ value: unknown
628
+ ) {
629
+ if (dbField.kind === 'scalar' && dbField.scalar === 'Json' && value === null) {
630
+ return context.__internal.prisma.DbNull
631
+ }
632
+ return value
633
+ }
634
+
635
+ function transformForPrismaClient(
636
+ list: InitialisedList,
637
+ context: NixxieContext,
638
+ data: Record<string, any>
639
+ ) {
640
+ return Object.fromEntries([
641
+ ...(function* () {
642
+ for (const fieldKey in data) {
643
+ if (!(fieldKey in list.fields)) {
644
+ // either the types are wrong, or someone didnt use them, either way, bail out
645
+ throw new Error(`Attempted to use unknown field "${fieldKey}"`)
646
+ }
647
+ const value = data[fieldKey]
648
+ const { dbField } = list.fields[fieldKey]
649
+
650
+ if (dbField.kind === 'multi') {
651
+ for (const innerFieldKey in value) {
652
+ const innerFieldValue = value[innerFieldKey]
653
+ yield [
654
+ getDBFieldKeyForFieldOnMultiField(fieldKey, innerFieldKey),
655
+ transformInnerDBField(dbField.fields[innerFieldKey], context, innerFieldValue),
656
+ ]
657
+ }
658
+
659
+ continue
660
+ }
661
+
662
+ yield [fieldKey, transformInnerDBField(dbField, context, value)]
663
+ }
664
+ })(),
665
+ ])
666
+ }
667
+
668
+ // This is not a thing that I really agree with but it's to make the behaviour consistent with old nixxie.
669
+ // Basically, old nixxie uses Promise.allSettled and then after that maps that into promises that resolve and reject,
670
+ // whereas the new stuff is just like "here are some promises" with no guarantees about the order they will be settled in.
671
+ // That doesn't matter when they all resolve successfully because the order they resolve successfully in
672
+ // doesn't affect anything, If some reject though, the order that they reject in will be the order in the errors array
673
+ // and some of our tests rely on the order of the graphql errors array. They shouldn't, but they do.
674
+ function promisesButSettledWhenAllSettledAndInOrder<T extends Promise<unknown>[]>(promises: T): T {
675
+ const resultsPromise = Promise.allSettled(promises)
676
+ return promises.map(async (_, i) => {
677
+ const result: PromiseSettledResult<Awaited<T>> = (await resultsPromise)[i] as any
678
+ return result.status === 'fulfilled'
679
+ ? Promise.resolve(result.value)
680
+ : Promise.reject(result.reason)
681
+ }) as T
682
+ }
683
+
684
+ function nonNull<T extends GNullableInputType>(t: T) {
685
+ if (t === g.Empty) return t
686
+ return g.nonNull(t)
687
+ }
688
+
689
+ export function getMutationsForList(list: InitialisedList) {
690
+ const defaultUniqueWhereInput = list.isSingleton ? { id: '1' } : undefined
691
+
692
+ const createOne_ = g.field({
693
+ type: list.graphql.types.output,
694
+ args: {
695
+ data: g.arg({ type: nonNull(list.graphql.types.create) }),
696
+ },
697
+ async resolve(_, { data }, context, info) {
698
+ return await withSpan(
699
+ `mutation ${info.fieldName}`,
700
+ async () => {
701
+ return createOne(data, list, context)
702
+ },
703
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'create' }
704
+ )
705
+ },
706
+ })
707
+
708
+ const createMany_ = g.field({
709
+ type: g.list(list.graphql.types.output),
710
+ args: {
711
+ data: g.arg({
712
+ type: g.nonNull(g.list(nonNull(list.graphql.types.create))),
713
+ }),
714
+ },
715
+ async resolve(_, { data }, context, info) {
716
+ return await withSpan(
717
+ `mutation ${info.fieldName}`,
718
+ async () => {
719
+ return promisesButSettledWhenAllSettledAndInOrder(await createMany(data, list, context))
720
+ },
721
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'create', 'nixxie.many': true }
722
+ )
723
+ },
724
+ })
725
+
726
+ const updateOne_ = g.field({
727
+ type: list.graphql.types.output,
728
+ args: {
729
+ where: g.arg({
730
+ type: g.nonNull(list.graphql.types.uniqueWhere),
731
+ defaultValue: defaultUniqueWhereInput,
732
+ }),
733
+ data: g.arg({ type: nonNull(list.graphql.types.update) }),
734
+ },
735
+ async resolve(_, { where, data }, context, info) {
736
+ return await withSpan(
737
+ `mutation ${info.fieldName}`,
738
+ async () => {
739
+ return updateOne({ where, data }, list, context)
740
+ },
741
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'update' }
742
+ )
743
+ },
744
+ })
745
+
746
+ const updateManyInput = g.inputObject({
747
+ name: list.graphql.names.updateManyInputName,
748
+ fields: {
749
+ where: g.arg({
750
+ type: g.nonNull(list.graphql.types.uniqueWhere),
751
+ defaultValue: defaultUniqueWhereInput,
752
+ }),
753
+ data: g.arg({ type: nonNull(list.graphql.types.update) }),
754
+ },
755
+ })
756
+ const updateMany_ = g.field({
757
+ type: g.list(list.graphql.types.output),
758
+ args: {
759
+ data: g.arg({
760
+ type: g.nonNull(g.list(g.nonNull(updateManyInput))),
761
+ }),
762
+ },
763
+ async resolve(_, { data }, context, info) {
764
+ return await withSpan(
765
+ `mutation ${info.fieldName}`,
766
+ async () => {
767
+ return promisesButSettledWhenAllSettledAndInOrder(await updateMany(data, list, context))
768
+ },
769
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'update', 'nixxie.many': true }
770
+ )
771
+ },
772
+ })
773
+
774
+ const deleteOne_ = g.field({
775
+ type: list.graphql.types.output,
776
+ args: {
777
+ where: g.arg({
778
+ type: g.nonNull(list.graphql.types.uniqueWhere),
779
+ defaultValue: defaultUniqueWhereInput,
780
+ }),
781
+ },
782
+ async resolve(_, { where }, context, info) {
783
+ return await withSpan(
784
+ `mutation ${info.fieldName}`,
785
+ async () => {
786
+ return deleteOne(where, list, context)
787
+ },
788
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'delete' }
789
+ )
790
+ },
791
+ })
792
+
793
+ const deleteMany_ = g.field({
794
+ type: g.list(list.graphql.types.output),
795
+ args: {
796
+ where: g.arg({
797
+ type: g.nonNull(g.list(g.nonNull(list.graphql.types.uniqueWhere))),
798
+ }),
799
+ },
800
+ async resolve(_, { where }, context, info) {
801
+ return await withSpan(
802
+ `mutation ${info.fieldName}`,
803
+ async () => {
804
+ return promisesButSettledWhenAllSettledAndInOrder(await deleteMany(where, list, context))
805
+ },
806
+ { 'nixxie.list': list.listKey, 'nixxie.operation': 'delete', 'nixxie.many': true }
807
+ )
808
+ },
809
+ })
810
+
811
+ const collectedTypes: GraphQLNamedType[] = []
812
+ const { isEnabled } = list.graphql
813
+ if (isEnabled.type) {
814
+ // adding all of these types explicitly isn't strictly necessary but we do it to create a certain order in the schema
815
+ collectedTypes.push(list.graphql.types.output)
816
+ if (isEnabled.query || isEnabled.update || isEnabled.delete) {
817
+ collectedTypes.push(list.graphql.types.uniqueWhere)
818
+ }
819
+ if (isEnabled.query) {
820
+ for (const field of Object.values(list.fields)) {
821
+ if (
822
+ isEnabled.query &&
823
+ field.graphql.isEnabled.read &&
824
+ field.unreferencedConcreteInterfaceImplementations
825
+ ) {
826
+ // this _IS_ actually necessary since they aren't implicitly referenced by other types, unlike the types above
827
+ collectedTypes.push(...field.unreferencedConcreteInterfaceImplementations)
828
+ }
829
+ }
830
+ collectedTypes.push(list.graphql.types.where)
831
+ collectedTypes.push(list.graphql.types.orderBy)
832
+ }
833
+ if (isEnabled.update) {
834
+ if (list.graphql.types.update instanceof GInputObjectType) {
835
+ collectedTypes.push(list.graphql.types.update)
836
+ }
837
+ collectedTypes.push(updateManyInput)
838
+ }
839
+ if (isEnabled.create) {
840
+ if (list.graphql.types.create instanceof GInputObjectType) {
841
+ collectedTypes.push(list.graphql.types.create)
842
+ }
843
+ }
844
+ }
845
+
846
+ return {
847
+ mutations: {
848
+ ...(list.graphql.isEnabled.create && {
849
+ [list.graphql.names.createMutationName]: createOne_,
850
+ [list.graphql.names.createManyMutationName]: createMany_,
851
+ }),
852
+ ...(list.graphql.isEnabled.update && {
853
+ [list.graphql.names.updateMutationName]: updateOne_,
854
+ [list.graphql.names.updateManyMutationName]: updateMany_,
855
+ }),
856
+ ...(list.graphql.isEnabled.delete && {
857
+ [list.graphql.names.deleteMutationName]: deleteOne_,
858
+ [list.graphql.names.deleteManyMutationName]: deleteMany_,
859
+ }),
860
+ ...Object.fromEntries(
861
+ (function* () {
862
+ for (const action of list.actions) {
863
+ yield [
864
+ action.graphql.names.one,
865
+ g.field({
866
+ type: list.graphql.types.output,
867
+ args: {
868
+ where: g.arg({
869
+ type: g.nonNull(list.graphql.types.uniqueWhere),
870
+ defaultValue: defaultUniqueWhereInput,
871
+ }),
872
+ ...action.graphql.types.arguments,
873
+ },
874
+ async resolve(_, { where, ...args }, context, info) {
875
+ return await withSpan(
876
+ `mutation ${info.fieldName}`,
877
+ async () => {
878
+ return actionOne({ where, args }, list, context, action)
879
+ },
880
+ { 'nixxie.list': list.listKey, 'nixxie.action': action.actionKey }
881
+ )
882
+ },
883
+ }),
884
+ ]
885
+ yield [
886
+ action.graphql.names.many,
887
+ g.field({
888
+ type: g.list(list.graphql.types.output),
889
+ args: {
890
+ data: g.arg({
891
+ type: g.nonNull(g.list(g.nonNull(action.graphql.types.args))),
892
+ }),
893
+ },
894
+ async resolve(_, { data }, context, info) {
895
+ return await withSpan(
896
+ `mutation ${info.fieldName}`,
897
+ async () => {
898
+ return promisesButSettledWhenAllSettledAndInOrder(
899
+ await actionMany(data as ActionInput[], list, context, action)
900
+ )
901
+ },
902
+ {
903
+ 'nixxie.list': list.listKey,
904
+ 'nixxie.action': action.actionKey,
905
+ 'nixxie.many': true,
906
+ }
907
+ )
908
+ },
909
+ }),
910
+ ]
911
+ }
912
+ })()
913
+ ),
914
+ },
915
+ types: collectedTypes,
916
+ }
917
+ }