@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,1785 @@
1
+ import { u as userInputError, a as merge } from '../../dist/resolve-hooks-17aafd37.esm.js';
2
+ import 'pluralize';
3
+ import { f as fieldType, g, o as orderDirectionEnum } from '../../dist/next-fields-9bf04ed8.esm.js';
4
+ import { f as filters, a as resolveCommon, b as resolveString } from '../../dist/index-24b78415.esm.js';
5
+ export { r as relationship, t as timestamp } from '../../dist/index-24b78415.esm.js';
6
+ import { a as assertReadIsNonNullAllowed, m as makeValidateHook, d as defaultIsRequired, r as resolveDbNullable } from '../../dist/non-null-graphql-5315718c.esm.js';
7
+ import 'node:path';
8
+ import { GNonNull } from '@graphql-ts/schema';
9
+ import '@graphql-ts/extend';
10
+ import Decimal from 'decimal.js';
11
+ import { randomBytes } from 'node:crypto';
12
+ import { SUPPORTED_IMAGE_EXTENSIONS } from '../types/image/utils/dist/nixxie-cms-core-fields-types-image-utils.esm.js';
13
+ import { JPG } from 'image-size/types/jpg';
14
+ import { PNG } from 'image-size/types/png';
15
+ import { WEBP } from 'image-size/types/webp';
16
+ import { GIF } from 'image-size/types/gif';
17
+ import { PassThrough } from 'node:stream';
18
+ export { password } from '../types/password/dist/nixxie-cms-core-fields-types-password.esm.js';
19
+ import { h as humanize } from '../../dist/utils-0cc426c8.esm.js';
20
+ import { getNamedType, isLeafType } from 'graphql';
21
+ export { bytes } from '../types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js';
22
+ import 'graphql-upload/GraphQLUpload.js';
23
+ import '../../dist/admin-meta-14c60fec.esm.js';
24
+ import 'bcryptjs';
25
+ import 'dumb-passwords';
26
+ import '../../dist/utils-f9556354.esm.js';
27
+
28
+ function checkbox(config = {}) {
29
+ const {
30
+ defaultValue = false
31
+ } = config;
32
+ return meta => {
33
+ var _config$db, _config$db2;
34
+ if (config.isIndexed === 'unique') {
35
+ throw TypeError("isIndexed: 'unique' is not a supported option for field type checkbox");
36
+ }
37
+ assertReadIsNonNullAllowed(meta, config, false);
38
+ return fieldType({
39
+ kind: 'scalar',
40
+ mode: 'required',
41
+ scalar: 'Boolean',
42
+ default: {
43
+ kind: 'literal',
44
+ value: defaultValue
45
+ },
46
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
47
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
48
+ })({
49
+ ...config,
50
+ input: {
51
+ where: {
52
+ arg: g.arg({
53
+ type: filters[meta.provider].Boolean.required
54
+ })
55
+ },
56
+ create: {
57
+ arg: g.arg({
58
+ type: g.Boolean,
59
+ defaultValue: typeof defaultValue === 'boolean' ? defaultValue : undefined
60
+ }),
61
+ resolve(val) {
62
+ if (val === null) throw userInputError('Checkbox fields cannot be set to null');
63
+ return val !== null && val !== void 0 ? val : defaultValue;
64
+ }
65
+ },
66
+ update: {
67
+ arg: g.arg({
68
+ type: g.Boolean
69
+ }),
70
+ resolve(val) {
71
+ if (val === null) throw userInputError('Checkbox fields cannot be set to null');
72
+ return val;
73
+ }
74
+ },
75
+ orderBy: {
76
+ arg: g.arg({
77
+ type: orderDirectionEnum
78
+ })
79
+ }
80
+ },
81
+ output: g.field({
82
+ type: g.Boolean
83
+ }),
84
+ __ksTelemetryFieldTypeName: '@nixxie-cms/checkbox',
85
+ views: '@nixxie-cms/core/fields/types/checkbox/views',
86
+ getAdminMeta: () => ({
87
+ defaultValue
88
+ })
89
+ });
90
+ };
91
+ }
92
+
93
+ function safeParseDecimal(value) {
94
+ if (value === null || value === undefined) return value;
95
+ const result = new Decimal(value);
96
+ if (!result.isFinite()) throw new Error(`"${value}" is not finite`);
97
+ return result;
98
+ }
99
+
100
+ // TODO: https://github.com/Nixxie/keystatic/blob/main/design-system/pkg/src/number-field/NumberField.tsx
101
+ function decimal(config = {}) {
102
+ var _safeParseDecimal, _safeParseDecimal2;
103
+ const {
104
+ defaultValue: defaultValue_,
105
+ isIndexed,
106
+ precision = 18,
107
+ scale = 4,
108
+ validation = {}
109
+ } = config;
110
+ const {
111
+ isRequired = false,
112
+ min,
113
+ max
114
+ } = validation;
115
+ const defaultValue = typeof defaultValue_ === 'string' ? defaultValue_ : null;
116
+ const parsedDefaultValue = safeParseDecimal(defaultValue);
117
+ const parsedMax = (_safeParseDecimal = safeParseDecimal(max)) !== null && _safeParseDecimal !== void 0 ? _safeParseDecimal : undefined;
118
+ const parsedMin = (_safeParseDecimal2 = safeParseDecimal(min)) !== null && _safeParseDecimal2 !== void 0 ? _safeParseDecimal2 : undefined;
119
+ return meta => {
120
+ var _config$db, _config$db2;
121
+ if (meta.provider === 'sqlite') {
122
+ throw new Error('The decimal field does not support sqlite');
123
+ }
124
+ if (!Number.isInteger(scale)) {
125
+ throw new TypeError(`The scale for decimal fields must be an integer but the scale for the decimal field at ${meta.listKey}.${meta.fieldKey} is not an integer`);
126
+ }
127
+ if (!Number.isInteger(precision)) {
128
+ throw new TypeError(`The precision for decimal fields must be an integer but the precision for the decimal field at ${meta.listKey}.${meta.fieldKey} is not an integer`);
129
+ }
130
+ if (scale > precision) {
131
+ throw new Error(`The scale configured for decimal field at ${meta.listKey}.${meta.fieldKey} (${scale}) ` + `must not be larger than the field's precision (${precision})`);
132
+ }
133
+ if (defaultValue !== null && !parsedDefaultValue) {
134
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a default value of: ${defaultValue} but it must be a valid finite number`);
135
+ }
136
+ if (min !== undefined && !parsedMin) {
137
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.min: ${min} but it must be a valid finite number`);
138
+ }
139
+ if (max !== undefined && !parsedMax) {
140
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.max: ${max} but it must be a valid finite number`);
141
+ }
142
+ if (min !== undefined && max !== undefined && parsedMin && parsedMax && parsedMin > parsedMax) {
143
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a validation.max that is less than the validation.min, and therefore has no valid options`);
144
+ }
145
+ const hasAdditionalValidation = min !== undefined || max !== undefined;
146
+ const {
147
+ mode,
148
+ validate
149
+ } = makeValidateHook(meta, config, hasAdditionalValidation ? ({
150
+ resolvedData,
151
+ operation,
152
+ addValidationError
153
+ }) => {
154
+ if (operation === 'delete') return;
155
+ const value = safeParseDecimal(resolvedData[meta.fieldKey]);
156
+ if (value != null) {
157
+ if (parsedMin !== undefined && value.lessThan(parsedMin)) {
158
+ addValidationError(`value must be greater than or equal to ${min}`);
159
+ }
160
+ if (parsedMax !== undefined && value.greaterThan(parsedMax)) {
161
+ addValidationError(`value must be less than or equal to ${max}`);
162
+ }
163
+ }
164
+ } : undefined);
165
+ return fieldType({
166
+ kind: 'scalar',
167
+ mode,
168
+ scalar: 'Decimal',
169
+ nativeType: `Decimal(${precision}, ${scale})`,
170
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
171
+ default: typeof defaultValue === 'string' ? {
172
+ kind: 'literal',
173
+ value: defaultValue
174
+ } : undefined,
175
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
176
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
177
+ })({
178
+ ...config,
179
+ ...defaultIsRequired(config, isRequired),
180
+ hooks: {
181
+ ...config.hooks,
182
+ validate
183
+ },
184
+ input: {
185
+ uniqueWhere: isIndexed === 'unique' ? {
186
+ arg: g.arg({
187
+ type: g.Decimal
188
+ })
189
+ } : undefined,
190
+ where: {
191
+ arg: g.arg({
192
+ type: filters[meta.provider].Decimal[mode]
193
+ }),
194
+ resolve: mode === 'optional' ? resolveCommon : undefined
195
+ },
196
+ create: {
197
+ arg: g.arg({
198
+ type: g.Decimal,
199
+ defaultValue: parsedDefaultValue
200
+ }),
201
+ resolve(val) {
202
+ if (val === undefined) return parsedDefaultValue;
203
+ return val;
204
+ }
205
+ },
206
+ update: {
207
+ arg: g.arg({
208
+ type: g.Decimal
209
+ })
210
+ },
211
+ orderBy: {
212
+ arg: g.arg({
213
+ type: orderDirectionEnum
214
+ })
215
+ }
216
+ },
217
+ output: g.field({
218
+ type: g.Decimal,
219
+ resolve({
220
+ value
221
+ }) {
222
+ if (value === null) return null;
223
+ const val = new Decimal(value);
224
+ val.scaleToPrint = scale;
225
+ return val;
226
+ }
227
+ }),
228
+ __ksTelemetryFieldTypeName: '@nixxie-cms/decimal',
229
+ views: '@nixxie-cms/core/fields/types/decimal/views',
230
+ getAdminMeta() {
231
+ return {
232
+ validation: {
233
+ max: max !== null && max !== void 0 ? max : null,
234
+ min: min !== null && min !== void 0 ? min : null
235
+ },
236
+ defaultValue
237
+ };
238
+ }
239
+ });
240
+ };
241
+ }
242
+
243
+ const FileFieldInput = g.inputObject({
244
+ name: 'FileFieldInput',
245
+ fields: {
246
+ upload: g.arg({
247
+ type: g.nonNull(g.Upload)
248
+ })
249
+ }
250
+ });
251
+ const inputArg$1 = g.arg({
252
+ type: FileFieldInput
253
+ });
254
+ const FileFieldOutput = g.object()({
255
+ name: 'FileFieldOutput',
256
+ fields: {
257
+ filename: g.field({
258
+ type: g.nonNull(g.String)
259
+ }),
260
+ filesize: g.field({
261
+ type: g.nonNull(g.Int)
262
+ }),
263
+ url: g.field({
264
+ type: g.nonNull(g.String)
265
+ })
266
+ }
267
+ });
268
+ async function inputResolver$1(storage, transformName, context, data) {
269
+ if (data === null || data === undefined) return {
270
+ filename: data,
271
+ filesize: data
272
+ };
273
+ const upload = await data.upload;
274
+ const stream = upload.createReadStream();
275
+ let filesize = 0;
276
+ stream.on('data', data => {
277
+ filesize += data.length;
278
+ });
279
+ const filename = await transformName(upload.filename);
280
+ await storage.put(filename, stream, {
281
+ contentType: 'application/octet-stream'
282
+ }, context);
283
+ return {
284
+ filename,
285
+ filesize
286
+ };
287
+ }
288
+ function file(config) {
289
+ const {
290
+ transformName = defaultTransformName$1
291
+ } = config;
292
+ return meta => {
293
+ var _config$db, _config$hooks;
294
+ const {
295
+ fieldKey
296
+ } = meta;
297
+ if ('isIndexed' in config) {
298
+ throw Error("isIndexed: 'unique' is not a supported option for field type file");
299
+ }
300
+ const afterOperationResolver = async function afterOperationResolver(args) {
301
+ if (args.operation === 'update' || args.operation === 'delete') {
302
+ var _args$item;
303
+ const filenameKey = `${fieldKey}_filename`;
304
+ const oldFilename = args.originalItem[filenameKey];
305
+ const newFilename = (_args$item = args.item) === null || _args$item === void 0 ? void 0 : _args$item[filenameKey];
306
+
307
+ // this will occur on an update where a file already existed but has been
308
+ // changed, or on a delete, where there is no longer an item
309
+ // but not when the old and new filenames are the same (in that case, presumably the file has been overwritten)
310
+ if (typeof oldFilename === 'string' && oldFilename !== newFilename) {
311
+ await config.storage.delete(oldFilename, args.context);
312
+ }
313
+ }
314
+ };
315
+ return fieldType({
316
+ kind: 'multi',
317
+ extendPrismaSchema: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.extendPrismaSchema,
318
+ fields: {
319
+ filesize: {
320
+ kind: 'scalar',
321
+ scalar: 'Int',
322
+ mode: 'optional'
323
+ },
324
+ filename: {
325
+ kind: 'scalar',
326
+ scalar: 'String',
327
+ mode: 'optional'
328
+ }
329
+ }
330
+ })({
331
+ ...config,
332
+ hooks: {
333
+ ...config.hooks,
334
+ afterOperation: merge((_config$hooks = config.hooks) === null || _config$hooks === void 0 ? void 0 : _config$hooks.afterOperation, {
335
+ update: afterOperationResolver,
336
+ delete: afterOperationResolver
337
+ })
338
+ },
339
+ input: {
340
+ create: {
341
+ arg: inputArg$1,
342
+ resolve: (data, context) => inputResolver$1(config.storage, transformName, context, data)
343
+ },
344
+ update: {
345
+ arg: inputArg$1,
346
+ resolve: (data, context) => inputResolver$1(config.storage, transformName, context, data)
347
+ }
348
+ },
349
+ output: g.field({
350
+ type: FileFieldOutput,
351
+ resolve({
352
+ value: {
353
+ filesize,
354
+ filename
355
+ }
356
+ }) {
357
+ if (filename === null) return null;
358
+ if (filesize === null) return null;
359
+ return {
360
+ filename,
361
+ filesize,
362
+ url: async (_, context) => config.storage.url(filename, context)
363
+ };
364
+ }
365
+ }),
366
+ __ksTelemetryFieldTypeName: '@nixxie-cms/file',
367
+ views: '@nixxie-cms/core/fields/types/file/views'
368
+ });
369
+ };
370
+ }
371
+
372
+ // appends a 128-bit random identifier to the filename to prevent guessing
373
+ function defaultTransformName$1(path) {
374
+ // this regex lazily matches for any characters that aren't a new line
375
+ // it then optionally matches the last instance of a "." symbol
376
+ // followed by any alphanumerical character before the end of the string
377
+ const [, name, ext] = path.match(/^([^:\n].*?)(\.[A-Za-z0-9]{0,10})?$/);
378
+ const id = randomBytes(16).toString('base64url');
379
+ const urlSafeName = name.replace(/[^A-Za-z0-9]/g, '-');
380
+ if (ext) return `${urlSafeName}-${id}${ext}`;
381
+ return `${urlSafeName}-${id}`;
382
+ }
383
+
384
+ function float(config = {}) {
385
+ const {
386
+ defaultValue: defaultValue_,
387
+ isIndexed,
388
+ validation = {}
389
+ } = config;
390
+ const {
391
+ isRequired = false,
392
+ min,
393
+ max
394
+ } = validation;
395
+ const defaultValue = defaultValue_ !== null && defaultValue_ !== void 0 ? defaultValue_ : null;
396
+ return meta => {
397
+ var _config$db, _config$db2;
398
+ if (defaultValue !== null && !Number.isFinite(defaultValue)) {
399
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a default value of: ${defaultValue} but it must be a valid finite number`);
400
+ }
401
+ if (min !== undefined && !Number.isFinite(min)) {
402
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.min: ${min} but it must be a valid finite number`);
403
+ }
404
+ if (max !== undefined && !Number.isFinite(max)) {
405
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.max: ${max} but it must be a valid finite number`);
406
+ }
407
+ if (min !== undefined && max !== undefined && min > max) {
408
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a validation.max that is less than the validation.min, and therefore has no valid options`);
409
+ }
410
+ const hasAdditionalValidation = min !== undefined || max !== undefined;
411
+ const {
412
+ mode,
413
+ validate
414
+ } = makeValidateHook(meta, config, hasAdditionalValidation ? ({
415
+ resolvedData,
416
+ operation,
417
+ addValidationError
418
+ }) => {
419
+ if (operation === 'delete') return;
420
+ const value = resolvedData[meta.fieldKey];
421
+ if (typeof value === 'number') {
422
+ if (min !== undefined && value < min) {
423
+ addValidationError(`value must be greater than or equal to ${min}`);
424
+ }
425
+ if (max !== undefined && value > max) {
426
+ addValidationError(`value must be less than or equal to ${max}`);
427
+ }
428
+ }
429
+ } : undefined);
430
+ return fieldType({
431
+ kind: 'scalar',
432
+ mode,
433
+ scalar: 'Float',
434
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
435
+ default: typeof defaultValue === 'number' ? {
436
+ kind: 'literal',
437
+ value: defaultValue
438
+ } : undefined,
439
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
440
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
441
+ })({
442
+ ...config,
443
+ ...defaultIsRequired(config, isRequired),
444
+ hooks: {
445
+ ...config.hooks,
446
+ validate
447
+ },
448
+ input: {
449
+ uniqueWhere: isIndexed === 'unique' ? {
450
+ arg: g.arg({
451
+ type: g.Float
452
+ })
453
+ } : undefined,
454
+ where: {
455
+ arg: g.arg({
456
+ type: filters[meta.provider].Float[mode]
457
+ }),
458
+ resolve: mode === 'optional' ? resolveCommon : undefined
459
+ },
460
+ create: {
461
+ arg: g.arg({
462
+ type: g.Float,
463
+ defaultValue: typeof defaultValue === 'number' ? defaultValue : undefined
464
+ }),
465
+ resolve(value) {
466
+ if (value === undefined) return defaultValue;
467
+ return value;
468
+ }
469
+ },
470
+ update: {
471
+ arg: g.arg({
472
+ type: g.Float
473
+ })
474
+ },
475
+ orderBy: {
476
+ arg: g.arg({
477
+ type: orderDirectionEnum
478
+ })
479
+ }
480
+ },
481
+ output: g.field({
482
+ type: g.Float
483
+ }),
484
+ __ksTelemetryFieldTypeName: '@nixxie-cms/float',
485
+ views: '@nixxie-cms/core/fields/types/float/views',
486
+ getAdminMeta() {
487
+ return {
488
+ validation: {
489
+ min: min !== null && min !== void 0 ? min : null,
490
+ max: max !== null && max !== void 0 ? max : null
491
+ },
492
+ defaultValue: defaultValue === null ? null : defaultValue.toString()
493
+ };
494
+ }
495
+ });
496
+ };
497
+ }
498
+
499
+ // for a signed 32-bit integer
500
+ const MAX_INT$3 = 0x7fffffff;
501
+ const MIN_INT$3 = -0x80000000;
502
+ function integer(config = {}) {
503
+ var _defaultValue_$kind;
504
+ const {
505
+ defaultValue: defaultValue_,
506
+ isIndexed,
507
+ validation = {}
508
+ } = config;
509
+ const {
510
+ isRequired = false,
511
+ min,
512
+ max
513
+ } = validation;
514
+ const defaultValue = typeof defaultValue_ === 'number' ? defaultValue_ : (_defaultValue_$kind = defaultValue_ === null || defaultValue_ === void 0 ? void 0 : defaultValue_.kind) !== null && _defaultValue_$kind !== void 0 ? _defaultValue_$kind : null;
515
+ return meta => {
516
+ var _config$db, _config$db2;
517
+ if (typeof defaultValue === 'number' && !Number.isInteger(defaultValue)) {
518
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a default value of: ${defaultValue} but it must be a valid finite number`);
519
+ }
520
+ if (min !== undefined && !Number.isInteger(min)) {
521
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.min: ${min} but it must be an integer`);
522
+ }
523
+ if (max !== undefined && !Number.isInteger(max)) {
524
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.max: ${max} but it must be an integer`);
525
+ }
526
+ if (min !== undefined && (min > MAX_INT$3 || min < MIN_INT$3)) {
527
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.min: ${min} which is outside of the range of a 32-bit signed integer`);
528
+ }
529
+ if (max !== undefined && (max > MAX_INT$3 || max < MIN_INT$3)) {
530
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.max: ${max} which is outside of the range of a 32-bit signed integer`);
531
+ }
532
+ if (min !== undefined && max !== undefined && min > max) {
533
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a validation.max that is less than the validation.min, and therefore has no valid options`);
534
+ }
535
+ const hasAdditionalValidation = min !== undefined || max !== undefined;
536
+ const {
537
+ mode,
538
+ validate
539
+ } = makeValidateHook(meta, config, hasAdditionalValidation ? ({
540
+ resolvedData,
541
+ operation,
542
+ addValidationError
543
+ }) => {
544
+ if (operation === 'delete') return;
545
+ const value = resolvedData[meta.fieldKey];
546
+ if (typeof value === 'number') {
547
+ if (min !== undefined && value < min) {
548
+ addValidationError(`value must be greater than or equal to ${min}`);
549
+ }
550
+ if (max !== undefined && value > max) {
551
+ addValidationError(`value must be less than or equal to ${max}`);
552
+ }
553
+ }
554
+ } : undefined, defaultValue !== null);
555
+ return fieldType({
556
+ kind: 'scalar',
557
+ mode,
558
+ scalar: 'Int',
559
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
560
+ default: typeof defaultValue === 'number' ? {
561
+ kind: 'literal',
562
+ value: defaultValue
563
+ } : defaultValue === 'autoincrement' ? {
564
+ kind: 'autoincrement'
565
+ } : undefined,
566
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
567
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
568
+ })({
569
+ ...config,
570
+ ...defaultIsRequired(config, isRequired),
571
+ hooks: {
572
+ ...config.hooks,
573
+ validate
574
+ },
575
+ input: {
576
+ uniqueWhere: isIndexed === 'unique' ? {
577
+ arg: g.arg({
578
+ type: g.Int
579
+ })
580
+ } : undefined,
581
+ where: {
582
+ arg: g.arg({
583
+ type: filters[meta.provider].Int[mode]
584
+ }),
585
+ resolve: mode === 'optional' ? resolveCommon : undefined
586
+ },
587
+ create: {
588
+ arg: g.arg({
589
+ type: g.Int,
590
+ defaultValue: typeof defaultValue === 'number' ? defaultValue : undefined
591
+ }),
592
+ resolve(value) {
593
+ if (value === undefined) {
594
+ if (defaultValue === 'autoincrement') return undefined;
595
+ return defaultValue;
596
+ }
597
+ return value;
598
+ }
599
+ },
600
+ update: {
601
+ arg: g.arg({
602
+ type: g.Int
603
+ })
604
+ },
605
+ orderBy: {
606
+ arg: g.arg({
607
+ type: orderDirectionEnum
608
+ })
609
+ }
610
+ },
611
+ output: g.field({
612
+ type: g.Int
613
+ }),
614
+ __ksTelemetryFieldTypeName: '@nixxie-cms/integer',
615
+ views: '@nixxie-cms/core/fields/types/integer/views',
616
+ getAdminMeta() {
617
+ return {
618
+ validation: {
619
+ min: min !== null && min !== void 0 ? min : MIN_INT$3,
620
+ max: max !== null && max !== void 0 ? max : MAX_INT$3
621
+ },
622
+ defaultValue
623
+ };
624
+ }
625
+ });
626
+ };
627
+ }
628
+
629
+ // for a signed 64-bit integer
630
+ const MAX_INT$2 = 9223372036854775807n;
631
+ const MIN_INT$2 = -9223372036854775808n;
632
+
633
+ // TODO: https://github.com/Nixxie/keystatic/blob/main/design-system/pkg/src/number-field/NumberField.tsx
634
+ function bigInt(config = {}) {
635
+ var _defaultValue_$kind;
636
+ const {
637
+ defaultValue: defaultValue_ = null,
638
+ isIndexed,
639
+ validation = {}
640
+ } = config;
641
+ const {
642
+ isRequired = false,
643
+ min,
644
+ max
645
+ } = validation;
646
+ const defaultValue = typeof defaultValue_ === 'bigint' ? defaultValue_ : (_defaultValue_$kind = defaultValue_ === null || defaultValue_ === void 0 ? void 0 : defaultValue_.kind) !== null && _defaultValue_$kind !== void 0 ? _defaultValue_$kind : null;
647
+ return meta => {
648
+ var _config$db, _config$db2;
649
+ if (defaultValue === 'autoincrement') {
650
+ if (meta.provider === 'sqlite' || meta.provider === 'mysql') {
651
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies defaultValue: { kind: 'autoincrement' }, this is not supported on ${meta.provider}`);
652
+ }
653
+ const isNullable = resolveDbNullable(validation, config.db);
654
+ if (isNullable !== false) {
655
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies defaultValue: { kind: 'autoincrement' } but doesn't specify db.isNullable: false.\n` + `Having nullable autoincrements on Prisma currently incorrectly creates a non-nullable column so it is not allowed.\n` + `https://github.com/prisma/prisma/issues/8663`);
656
+ }
657
+ if (isRequired) {
658
+ throw new Error(`${meta.listKey}.${meta.fieldKey} defaultValue: { kind: 'autoincrement' } conflicts with validation.isRequired: true`);
659
+ }
660
+ }
661
+ if (
662
+ // TODO: prefer typescript only?
663
+ defaultValue !== null && defaultValue !== 'autoincrement' && typeof defaultValue !== 'bigint') {
664
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a default value of: ${defaultValue} but it must be a valid finite number`);
665
+ }
666
+ if (min !== undefined && !Number.isInteger(min)) {
667
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.min: ${min} but it must be an integer`);
668
+ }
669
+ if (max !== undefined && !Number.isInteger(max)) {
670
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.max: ${max} but it must be an integer`);
671
+ }
672
+ if (min !== undefined && (min > MAX_INT$2 || min < MIN_INT$2)) {
673
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.min: ${min} which is outside of the range of a 64-bit signed integer`);
674
+ }
675
+ if (max !== undefined && (max > MAX_INT$2 || max < MIN_INT$2)) {
676
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.max: ${max} which is outside of the range of a 64-bit signed integer`);
677
+ }
678
+ if (min !== undefined && max !== undefined && min > max) {
679
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a validation.max that is less than the validation.min, and therefore has no valid options`);
680
+ }
681
+ const hasAdditionalValidation = min !== undefined || max !== undefined;
682
+ const {
683
+ mode,
684
+ validate
685
+ } = makeValidateHook(meta, config, hasAdditionalValidation ? ({
686
+ resolvedData,
687
+ operation,
688
+ addValidationError
689
+ }) => {
690
+ if (operation === 'delete') return;
691
+ const value = resolvedData[meta.fieldKey];
692
+ if (typeof value === 'number') {
693
+ if (min !== undefined && value < min) {
694
+ addValidationError(`value must be greater than or equal to ${min}`);
695
+ }
696
+ if (max !== undefined && value > max) {
697
+ addValidationError(`value must be less than or equal to ${max}`);
698
+ }
699
+ }
700
+ } : undefined);
701
+ return fieldType({
702
+ kind: 'scalar',
703
+ mode,
704
+ scalar: 'BigInt',
705
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
706
+ default: typeof defaultValue === 'bigint' ? {
707
+ kind: 'literal',
708
+ value: defaultValue
709
+ } : defaultValue === 'autoincrement' ? {
710
+ kind: 'autoincrement'
711
+ } : undefined,
712
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
713
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
714
+ })({
715
+ ...config,
716
+ ...defaultIsRequired(config, isRequired),
717
+ hooks: {
718
+ ...config.hooks,
719
+ validate
720
+ },
721
+ input: {
722
+ uniqueWhere: isIndexed === 'unique' ? {
723
+ arg: g.arg({
724
+ type: g.BigInt
725
+ })
726
+ } : undefined,
727
+ where: {
728
+ arg: g.arg({
729
+ type: filters[meta.provider].BigInt[mode]
730
+ }),
731
+ resolve: mode === 'optional' ? resolveCommon : undefined
732
+ },
733
+ create: {
734
+ arg: g.arg({
735
+ type: g.BigInt,
736
+ defaultValue: typeof defaultValue === 'bigint' ? defaultValue : undefined
737
+ }),
738
+ resolve(value) {
739
+ if (value === undefined) {
740
+ if (defaultValue === 'autoincrement') return null;
741
+ return defaultValue;
742
+ }
743
+ return value;
744
+ }
745
+ },
746
+ update: {
747
+ arg: g.arg({
748
+ type: g.BigInt
749
+ })
750
+ },
751
+ orderBy: {
752
+ arg: g.arg({
753
+ type: orderDirectionEnum
754
+ })
755
+ }
756
+ },
757
+ output: g.field({
758
+ type: g.BigInt
759
+ }),
760
+ __ksTelemetryFieldTypeName: '@nixxie-cms/bigInt',
761
+ views: '@nixxie-cms/core/fields/types/bigInt/views',
762
+ getAdminMeta() {
763
+ var _min$toString, _max$toString;
764
+ return {
765
+ validation: {
766
+ min: (_min$toString = min === null || min === void 0 ? void 0 : min.toString()) !== null && _min$toString !== void 0 ? _min$toString : `${MIN_INT$2}`,
767
+ max: (_max$toString = max === null || max === void 0 ? void 0 : max.toString()) !== null && _max$toString !== void 0 ? _max$toString : `${MAX_INT$2}`
768
+ },
769
+ defaultValue: typeof defaultValue === 'bigint' ? defaultValue.toString() : defaultValue
770
+ };
771
+ }
772
+ });
773
+ };
774
+ }
775
+
776
+ function getImageMetadata(bytes) {
777
+ for (const [type, checker] of types) {
778
+ if (checker.validate(bytes)) {
779
+ const result = checker.calculate(bytes);
780
+ if (result.width === undefined || result.height === undefined) {
781
+ return;
782
+ }
783
+ return {
784
+ width: result.width,
785
+ height: result.height,
786
+ extension: type
787
+ };
788
+ }
789
+ }
790
+ }
791
+ const types = [['jpg', JPG], ['png', PNG], ['webp', WEBP], ['gif', GIF]];
792
+ async function getBytesFromStream(stream, maxBytes) {
793
+ let chunks = [];
794
+ for await (const chunk of stream) {
795
+ maxBytes -= chunk.length;
796
+ chunks.push(chunk);
797
+ if (maxBytes <= 0) {
798
+ break;
799
+ }
800
+ }
801
+ stream.destroy();
802
+ return Buffer.concat(chunks);
803
+ }
804
+ function teeStream(source) {
805
+ const passThrough1 = new PassThrough();
806
+ const passThrough2 = new PassThrough();
807
+ source.pipe(passThrough1);
808
+ source.pipe(passThrough2);
809
+ source.on('error', err => {
810
+ passThrough1.destroy(err);
811
+ passThrough2.destroy(err);
812
+ });
813
+ return [passThrough1, passThrough2];
814
+ }
815
+
816
+ // TODO: dynamic
817
+ const ImageExtensionEnum = g.enum({
818
+ name: 'ImageExtension',
819
+ values: g.enumValues(SUPPORTED_IMAGE_EXTENSIONS)
820
+ });
821
+ const ImageFieldInput = g.inputObject({
822
+ name: 'ImageFieldInput',
823
+ fields: {
824
+ upload: g.arg({
825
+ type: g.nonNull(g.Upload)
826
+ })
827
+ }
828
+ });
829
+ const inputArg = g.arg({
830
+ type: ImageFieldInput
831
+ });
832
+ const ImageFieldOutput = g.object()({
833
+ name: 'ImageFieldOutput',
834
+ fields: {
835
+ id: g.field({
836
+ type: g.nonNull(g.ID)
837
+ }),
838
+ url: g.field({
839
+ type: g.nonNull(g.String)
840
+ }),
841
+ extension: g.field({
842
+ type: g.nonNull(ImageExtensionEnum)
843
+ }),
844
+ filesize: g.field({
845
+ type: g.nonNull(g.Int)
846
+ }),
847
+ width: g.field({
848
+ type: g.nonNull(g.Int)
849
+ }),
850
+ height: g.field({
851
+ type: g.nonNull(g.Int)
852
+ })
853
+ }
854
+ });
855
+
856
+ // this is a conservative estimate of the number of bytes
857
+ // that we need to determine the image metadata
858
+ // since 1Kib in memory will be fine
859
+ const bytesToDetermineImageMetadata = 1024;
860
+ async function inputResolver(storage, transformName, context, data) {
861
+ if (data === null || data === undefined) {
862
+ return {
863
+ id: data,
864
+ extension: data,
865
+ filesize: data,
866
+ width: data,
867
+ height: data
868
+ };
869
+ }
870
+ const upload = await data.upload;
871
+ let filesize = 0;
872
+ const _readable = upload.createReadStream();
873
+ const [readableForFilesize, _readable2] = teeStream(_readable);
874
+ const [readableForMetadata, readableForUpload] = teeStream(_readable2);
875
+ readableForFilesize.on('data', data => {
876
+ filesize += data.length;
877
+ });
878
+ const buffer = await getBytesFromStream(readableForMetadata, bytesToDetermineImageMetadata);
879
+ const metadata = getImageMetadata(buffer);
880
+ if (!metadata) {
881
+ throw new Error('File type not found');
882
+ }
883
+ const id = await transformName(upload.filename, metadata.extension);
884
+ await storage.put(`${id}.${metadata.extension}`, readableForUpload, {
885
+ contentType: {
886
+ png: 'image/png',
887
+ webp: 'image/webp',
888
+ gif: 'image/gif',
889
+ jpg: 'image/jpeg'
890
+ }[metadata.extension]
891
+ }, context);
892
+ return {
893
+ filesize,
894
+ id,
895
+ extension: metadata.extension,
896
+ height: metadata.height,
897
+ width: metadata.width
898
+ };
899
+ }
900
+ const extensionsSet = new Set(SUPPORTED_IMAGE_EXTENSIONS);
901
+ function isValidImageExtension(extension) {
902
+ return extensionsSet.has(extension);
903
+ }
904
+ function image(config) {
905
+ const {
906
+ transformName = defaultTransformName
907
+ } = config;
908
+ return meta => {
909
+ var _config$db, _config$hooks;
910
+ const {
911
+ fieldKey
912
+ } = meta;
913
+ if ('isIndexed' in config) {
914
+ throw Error("isIndexed: 'unique' is not a supported option for field type image");
915
+ }
916
+ const afterOperationResolver = async function afterOperationResolver(args) {
917
+ if (args.operation === 'update' || args.operation === 'delete') {
918
+ var _args$originalItem, _args$item, _args$originalItem2, _args$item2;
919
+ const idKey = `${fieldKey}_id`;
920
+ const oldId = (_args$originalItem = args.originalItem) === null || _args$originalItem === void 0 ? void 0 : _args$originalItem[idKey];
921
+ const newId = (_args$item = args.item) === null || _args$item === void 0 ? void 0 : _args$item[idKey];
922
+ const extensionKey = `${fieldKey}_extension`;
923
+ const oldExtension = (_args$originalItem2 = args.originalItem) === null || _args$originalItem2 === void 0 ? void 0 : _args$originalItem2[extensionKey];
924
+ const newExtension = (_args$item2 = args.item) === null || _args$item2 === void 0 ? void 0 : _args$item2[extensionKey];
925
+ // this will occur on an update where an image already existed but has been
926
+ // changed, or on a delete, where there is no longer an item
927
+ if (typeof oldId === 'string' && typeof oldExtension === 'string' && isValidImageExtension(oldExtension) && (oldId !== newId || oldExtension !== newExtension)) {
928
+ await config.storage.delete(`${oldId}.${oldExtension}`, args.context);
929
+ }
930
+ }
931
+ };
932
+ return fieldType({
933
+ kind: 'multi',
934
+ extendPrismaSchema: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.extendPrismaSchema,
935
+ fields: {
936
+ id: {
937
+ kind: 'scalar',
938
+ scalar: 'String',
939
+ mode: 'optional'
940
+ },
941
+ extension: {
942
+ kind: 'scalar',
943
+ scalar: 'String',
944
+ mode: 'optional'
945
+ },
946
+ filesize: {
947
+ kind: 'scalar',
948
+ scalar: 'Int',
949
+ mode: 'optional'
950
+ },
951
+ width: {
952
+ kind: 'scalar',
953
+ scalar: 'Int',
954
+ mode: 'optional'
955
+ },
956
+ height: {
957
+ kind: 'scalar',
958
+ scalar: 'Int',
959
+ mode: 'optional'
960
+ }
961
+ }
962
+ })({
963
+ ...config,
964
+ hooks: {
965
+ ...config.hooks,
966
+ afterOperation: merge((_config$hooks = config.hooks) === null || _config$hooks === void 0 ? void 0 : _config$hooks.afterOperation, {
967
+ update: afterOperationResolver,
968
+ delete: afterOperationResolver
969
+ })
970
+ },
971
+ input: {
972
+ create: {
973
+ arg: inputArg,
974
+ resolve: (data, context) => inputResolver(config.storage, transformName, context, data)
975
+ },
976
+ update: {
977
+ arg: inputArg,
978
+ resolve: (data, context) => inputResolver(config.storage, transformName, context, data)
979
+ }
980
+ },
981
+ output: g.field({
982
+ type: ImageFieldOutput,
983
+ resolve({
984
+ value: {
985
+ id,
986
+ extension,
987
+ filesize,
988
+ width,
989
+ height
990
+ }
991
+ }) {
992
+ if (id === null) return null;
993
+ if (extension === null) return null;
994
+ if (filesize === null) return null;
995
+ if (width === null) return null;
996
+ if (height === null) return null;
997
+ if (!isValidImageExtension(extension)) return null; // TODO: dynamic
998
+
999
+ return {
1000
+ id,
1001
+ filesize,
1002
+ width,
1003
+ height,
1004
+ extension,
1005
+ url: async (_, context) => config.storage.url(`${id}.${extension}`, context)
1006
+ };
1007
+ }
1008
+ }),
1009
+ __ksTelemetryFieldTypeName: '@nixxie-cms/image',
1010
+ views: '@nixxie-cms/core/fields/types/image/views'
1011
+ });
1012
+ };
1013
+ }
1014
+ function defaultTransformName(_) {
1015
+ return randomBytes(16).toString('base64url');
1016
+ }
1017
+
1018
+ function json({
1019
+ defaultValue = null,
1020
+ ...config
1021
+ } = {}) {
1022
+ return meta => {
1023
+ var _config$db, _config$db2;
1024
+ if (config.isIndexed === 'unique') {
1025
+ throw Error("isIndexed: 'unique' is not a supported option for field type json");
1026
+ }
1027
+ return fieldType({
1028
+ kind: 'scalar',
1029
+ mode: 'optional',
1030
+ scalar: 'Json',
1031
+ default: defaultValue === null ? undefined : meta.provider === 'sqlite' ? undefined : {
1032
+ kind: 'literal',
1033
+ // TODO: waiting on https://github.com/prisma/prisma/issues/26571
1034
+ // input.create manages defaultValues anyway
1035
+ value: JSON.stringify(defaultValue !== null && defaultValue !== void 0 ? defaultValue : null)
1036
+ },
1037
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
1038
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
1039
+ })({
1040
+ ...config,
1041
+ __ksTelemetryFieldTypeName: '@nixxie-cms/json',
1042
+ input: {
1043
+ create: {
1044
+ arg: g.arg({
1045
+ type: g.JSON
1046
+ }),
1047
+ resolve(val) {
1048
+ // TODO: redundant when https://github.com/prisma/prisma/issues/26571 is resolved
1049
+ return val === undefined ? defaultValue : val;
1050
+ }
1051
+ },
1052
+ update: {
1053
+ arg: g.arg({
1054
+ type: g.JSON
1055
+ })
1056
+ }
1057
+ },
1058
+ output: g.field({
1059
+ type: g.JSON
1060
+ }),
1061
+ views: '@nixxie-cms/core/fields/types/json/views',
1062
+ getAdminMeta: () => ({
1063
+ defaultValue
1064
+ })
1065
+ });
1066
+ };
1067
+ }
1068
+
1069
+ // these are the lowest and highest values for a signed 32-bit integer
1070
+ const MAX_INT$1 = 2147483647;
1071
+ const MIN_INT$1 = -2147483648;
1072
+ function select(config) {
1073
+ const {
1074
+ isIndexed,
1075
+ ui: {
1076
+ displayMode = 'select',
1077
+ ...ui
1078
+ } = {},
1079
+ defaultValue,
1080
+ validation
1081
+ } = config;
1082
+ return meta => {
1083
+ var _validation$isRequire, _config$db, _config$db2;
1084
+ const options = config.options.map(option => {
1085
+ if (typeof option === 'string') {
1086
+ return {
1087
+ label: humanize(option),
1088
+ value: option
1089
+ };
1090
+ }
1091
+ return option;
1092
+ });
1093
+ const accepted = new Set(options.map(x => x.value));
1094
+ if (accepted.size !== options.length) {
1095
+ throw new Error(`${meta.listKey}.${meta.fieldKey}: duplicate options, this is not allowed`);
1096
+ }
1097
+ const {
1098
+ mode,
1099
+ validate
1100
+ } = makeValidateHook(meta, config, ({
1101
+ resolvedData,
1102
+ operation,
1103
+ addValidationError
1104
+ }) => {
1105
+ if (operation === 'delete') return;
1106
+ const value = resolvedData[meta.fieldKey];
1107
+ if (value != null && !accepted.has(value)) {
1108
+ addValidationError(`value is not an accepted option`);
1109
+ }
1110
+ });
1111
+ const commonConfig = {
1112
+ ...config,
1113
+ mode,
1114
+ ...defaultIsRequired({
1115
+ ui
1116
+ }, (_validation$isRequire = validation === null || validation === void 0 ? void 0 : validation.isRequired) !== null && _validation$isRequire !== void 0 ? _validation$isRequire : false),
1117
+ hooks: {
1118
+ ...config.hooks,
1119
+ validate
1120
+ },
1121
+ __ksTelemetryFieldTypeName: '@nixxie-cms/select',
1122
+ views: '@nixxie-cms/core/fields/types/select/views',
1123
+ getAdminMeta: () => {
1124
+ var _config$type;
1125
+ return {
1126
+ options,
1127
+ type: (_config$type = config.type) !== null && _config$type !== void 0 ? _config$type : 'string',
1128
+ displayMode: displayMode,
1129
+ defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null
1130
+ };
1131
+ }
1132
+ };
1133
+ const commonDbFieldConfig = {
1134
+ mode,
1135
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
1136
+ default: defaultValue === undefined ? undefined : {
1137
+ kind: 'literal',
1138
+ value: defaultValue
1139
+ },
1140
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
1141
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
1142
+ };
1143
+ const resolveCreate = val => {
1144
+ if (val === undefined) {
1145
+ var _ref;
1146
+ return (_ref = defaultValue) !== null && _ref !== void 0 ? _ref : null;
1147
+ }
1148
+ return val;
1149
+ };
1150
+ if (config.type === 'integer') {
1151
+ if (config.options.some(({
1152
+ value
1153
+ }) => !Number.isInteger(value) || value > MAX_INT$1 || value < MIN_INT$1)) {
1154
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies integer values that are outside the range of a 32-bit signed integer`);
1155
+ }
1156
+ return fieldType({
1157
+ kind: 'scalar',
1158
+ scalar: 'Int',
1159
+ ...commonDbFieldConfig
1160
+ })({
1161
+ ...commonConfig,
1162
+ input: {
1163
+ uniqueWhere: isIndexed === 'unique' ? {
1164
+ arg: g.arg({
1165
+ type: g.Int
1166
+ })
1167
+ } : undefined,
1168
+ where: {
1169
+ arg: g.arg({
1170
+ type: filters[meta.provider].Int[mode]
1171
+ }),
1172
+ resolve: mode === 'required' ? undefined : resolveCommon
1173
+ },
1174
+ create: {
1175
+ arg: g.arg({
1176
+ type: g.Int,
1177
+ defaultValue: typeof defaultValue === 'number' ? defaultValue : undefined
1178
+ }),
1179
+ resolve: resolveCreate
1180
+ },
1181
+ update: {
1182
+ arg: g.arg({
1183
+ type: g.Int
1184
+ })
1185
+ },
1186
+ orderBy: {
1187
+ arg: g.arg({
1188
+ type: orderDirectionEnum
1189
+ })
1190
+ }
1191
+ },
1192
+ output: g.field({
1193
+ type: g.Int
1194
+ })
1195
+ });
1196
+ }
1197
+ if (config.type === 'enum') {
1198
+ const enumName = `${meta.listKey}${humanize(meta.fieldKey).replace(/ /g, '')}Type`;
1199
+ const enumValues = options.map(x => `${x.value}`);
1200
+ const graphQLType = g.enum({
1201
+ name: enumName,
1202
+ values: g.enumValues(enumValues)
1203
+ });
1204
+ return fieldType(meta.provider === 'sqlite' ? {
1205
+ kind: 'scalar',
1206
+ scalar: 'String',
1207
+ ...commonDbFieldConfig
1208
+ } : {
1209
+ kind: 'enum',
1210
+ values: enumValues,
1211
+ name: enumName,
1212
+ ...commonDbFieldConfig
1213
+ })({
1214
+ ...commonConfig,
1215
+ input: {
1216
+ uniqueWhere: isIndexed === 'unique' ? {
1217
+ arg: g.arg({
1218
+ type: graphQLType
1219
+ })
1220
+ } : undefined,
1221
+ where: {
1222
+ arg: g.arg({
1223
+ type: filters[meta.provider].enum(graphQLType).optional
1224
+ }),
1225
+ resolve: mode === 'required' ? undefined : resolveCommon
1226
+ },
1227
+ create: {
1228
+ arg: g.arg({
1229
+ type: graphQLType,
1230
+ defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined
1231
+ }),
1232
+ resolve: resolveCreate
1233
+ },
1234
+ update: {
1235
+ arg: g.arg({
1236
+ type: graphQLType
1237
+ })
1238
+ },
1239
+ orderBy: {
1240
+ arg: g.arg({
1241
+ type: orderDirectionEnum
1242
+ })
1243
+ }
1244
+ },
1245
+ output: g.field({
1246
+ type: graphQLType
1247
+ })
1248
+ });
1249
+ }
1250
+ return fieldType({
1251
+ kind: 'scalar',
1252
+ scalar: 'String',
1253
+ ...commonDbFieldConfig
1254
+ })({
1255
+ ...commonConfig,
1256
+ input: {
1257
+ uniqueWhere: isIndexed === 'unique' ? {
1258
+ arg: g.arg({
1259
+ type: g.String
1260
+ })
1261
+ } : undefined,
1262
+ where: {
1263
+ arg: g.arg({
1264
+ type: filters[meta.provider].String[mode]
1265
+ }),
1266
+ resolve: mode === 'required' ? undefined : resolveString
1267
+ },
1268
+ create: {
1269
+ arg: g.arg({
1270
+ type: g.String,
1271
+ defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined
1272
+ }),
1273
+ resolve: resolveCreate
1274
+ },
1275
+ update: {
1276
+ arg: g.arg({
1277
+ type: g.String
1278
+ })
1279
+ },
1280
+ orderBy: {
1281
+ arg: g.arg({
1282
+ type: orderDirectionEnum
1283
+ })
1284
+ }
1285
+ },
1286
+ output: g.field({
1287
+ type: g.String
1288
+ })
1289
+ });
1290
+ };
1291
+ }
1292
+
1293
+ function text(config = {}) {
1294
+ var _config$db, _config$db2, _config$db2$isNullabl, _validation$isRequire, _validation$length$mi, _validation$length, _validation$length2, _validation$length3;
1295
+ const {
1296
+ defaultValue: defaultValue_,
1297
+ isIndexed,
1298
+ validation = {}
1299
+ } = config;
1300
+ (_config$db = config.db) !== null && _config$db !== void 0 ? _config$db : config.db = {};
1301
+ (_config$db2$isNullabl = (_config$db2 = config.db).isNullable) !== null && _config$db2$isNullabl !== void 0 ? _config$db2$isNullabl : _config$db2.isNullable = false; // TODO: sigh, remove in breaking change?
1302
+
1303
+ const isRequired = (_validation$isRequire = validation.isRequired) !== null && _validation$isRequire !== void 0 ? _validation$isRequire : false;
1304
+ const match = validation.match;
1305
+ const min = validation.isRequired ? (_validation$length$mi = (_validation$length = validation.length) === null || _validation$length === void 0 ? void 0 : _validation$length.min) !== null && _validation$length$mi !== void 0 ? _validation$length$mi : 1 : (_validation$length2 = validation.length) === null || _validation$length2 === void 0 ? void 0 : _validation$length2.min;
1306
+ const max = (_validation$length3 = validation.length) === null || _validation$length3 === void 0 ? void 0 : _validation$length3.max;
1307
+ return meta => {
1308
+ var _config$db$isNullable, _config$db3, _config$db4, _config$db5, _config$db6;
1309
+ if (min !== undefined && (!Number.isInteger(min) || min < 0)) {
1310
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.length.min: ${min} but it must be a positive integer`);
1311
+ }
1312
+ if (max !== undefined && (!Number.isInteger(max) || max < 0)) {
1313
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.length.max: ${max} but it must be a positive integer`);
1314
+ }
1315
+ if (isRequired && min !== undefined && min === 0) {
1316
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.isRequired: true and validation.length.min: 0, this is not allowed because validation.isRequired implies at least a min length of 1`);
1317
+ }
1318
+ if (isRequired && max !== undefined && max === 0) {
1319
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.isRequired: true and validation.length.max: 0, this is not allowed because validation.isRequired implies at least a max length of 1`);
1320
+ }
1321
+ if (min !== undefined && max !== undefined && min > max) {
1322
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a validation.length.max that is less than the validation.length.min, and therefore has no valid options`);
1323
+ }
1324
+
1325
+ // defaulted to false as a zero length string is preferred to null
1326
+ const isNullable = (_config$db$isNullable = (_config$db3 = config.db) === null || _config$db3 === void 0 ? void 0 : _config$db3.isNullable) !== null && _config$db$isNullable !== void 0 ? _config$db$isNullable : false;
1327
+ const defaultValue = isNullable ? defaultValue_ !== null && defaultValue_ !== void 0 ? defaultValue_ : null : defaultValue_ !== null && defaultValue_ !== void 0 ? defaultValue_ : '';
1328
+ const hasAdditionalValidation = match || min !== undefined || max !== undefined;
1329
+ const {
1330
+ mode,
1331
+ validate
1332
+ } = makeValidateHook(meta, config, hasAdditionalValidation ? ({
1333
+ resolvedData,
1334
+ operation,
1335
+ addValidationError
1336
+ }) => {
1337
+ if (operation === 'delete') return;
1338
+ const value = resolvedData[meta.fieldKey];
1339
+ if (value != null) {
1340
+ if (min !== undefined && value.length < min) {
1341
+ if (min === 1) {
1342
+ addValidationError(`value must not be empty`);
1343
+ } else {
1344
+ addValidationError(`value must be at least ${min} characters long`);
1345
+ }
1346
+ }
1347
+ if (max !== undefined && value.length > max) {
1348
+ addValidationError(`value must be no longer than ${max} characters`);
1349
+ }
1350
+ if (match && !match.regex.test(value)) {
1351
+ var _match$explanation;
1352
+ addValidationError((_match$explanation = match.explanation) !== null && _match$explanation !== void 0 ? _match$explanation : `value must match ${match.regex}`);
1353
+ }
1354
+ }
1355
+ } : undefined);
1356
+ return fieldType({
1357
+ kind: 'scalar',
1358
+ mode,
1359
+ scalar: 'String',
1360
+ default: defaultValue === null ? undefined : {
1361
+ kind: 'literal',
1362
+ value: defaultValue
1363
+ },
1364
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
1365
+ map: (_config$db4 = config.db) === null || _config$db4 === void 0 ? void 0 : _config$db4.map,
1366
+ nativeType: (_config$db5 = config.db) === null || _config$db5 === void 0 ? void 0 : _config$db5.nativeType,
1367
+ extendPrismaSchema: (_config$db6 = config.db) === null || _config$db6 === void 0 ? void 0 : _config$db6.extendPrismaSchema
1368
+ })({
1369
+ ...config,
1370
+ ...defaultIsRequired(config, isRequired),
1371
+ hooks: {
1372
+ ...config.hooks,
1373
+ validate
1374
+ },
1375
+ input: {
1376
+ uniqueWhere: isIndexed === 'unique' ? {
1377
+ arg: g.arg({
1378
+ type: g.String
1379
+ })
1380
+ } : undefined,
1381
+ where: {
1382
+ arg: g.arg({
1383
+ type: filters[meta.provider].String[mode]
1384
+ }),
1385
+ resolve: mode === 'required' ? undefined : resolveString
1386
+ },
1387
+ create: {
1388
+ arg: g.arg({
1389
+ type: g.String,
1390
+ defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined
1391
+ }),
1392
+ resolve(val) {
1393
+ if (val !== undefined) return val;
1394
+ return defaultValue !== null && defaultValue !== void 0 ? defaultValue : null;
1395
+ }
1396
+ },
1397
+ update: {
1398
+ arg: g.arg({
1399
+ type: g.String
1400
+ })
1401
+ },
1402
+ orderBy: {
1403
+ arg: g.arg({
1404
+ type: orderDirectionEnum
1405
+ })
1406
+ }
1407
+ },
1408
+ output: g.field({
1409
+ type: g.String
1410
+ }),
1411
+ __ksTelemetryFieldTypeName: '@nixxie-cms/text',
1412
+ views: '@nixxie-cms/core/fields/types/text/views',
1413
+ getAdminMeta() {
1414
+ var _config$ui$displayMod, _config$ui, _match$explanation2;
1415
+ return {
1416
+ displayMode: (_config$ui$displayMod = (_config$ui = config.ui) === null || _config$ui === void 0 ? void 0 : _config$ui.displayMode) !== null && _config$ui$displayMod !== void 0 ? _config$ui$displayMod : 'input',
1417
+ shouldUseModeInsensitive: meta.provider === 'postgresql',
1418
+ validation: {
1419
+ match: match ? {
1420
+ regex: {
1421
+ source: match.regex.source,
1422
+ flags: match.regex.flags
1423
+ },
1424
+ explanation: (_match$explanation2 = match.explanation) !== null && _match$explanation2 !== void 0 ? _match$explanation2 : `value must match ${match.regex}`
1425
+ } : null,
1426
+ length: {
1427
+ max: max !== null && max !== void 0 ? max : null,
1428
+ min: min !== null && min !== void 0 ? min : null
1429
+ }
1430
+ },
1431
+ defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : isNullable ? null : '',
1432
+ isNullable
1433
+ };
1434
+ }
1435
+ });
1436
+ };
1437
+ }
1438
+
1439
+ function virtual({
1440
+ field,
1441
+ ...config
1442
+ }) {
1443
+ return meta => {
1444
+ var _config$ui, _config$ui2, _config$ui3;
1445
+ const usableField = typeof field === 'function' ? field(meta.lists) : field;
1446
+ const namedType = getNamedType(usableField.type);
1447
+ const hasRequiredArgs = usableField.args && Object.values(usableField.args).some(x => x.type instanceof GNonNull && x.defaultValue === undefined);
1448
+ if ((!isLeafType(namedType) || hasRequiredArgs) && !((_config$ui = config.ui) !== null && _config$ui !== void 0 && _config$ui.query) && (((_config$ui2 = config.ui) === null || _config$ui2 === void 0 || (_config$ui2 = _config$ui2.itemView) === null || _config$ui2 === void 0 ? void 0 : _config$ui2.fieldMode) !== 'hidden' || ((_config$ui3 = config.ui) === null || _config$ui3 === void 0 || (_config$ui3 = _config$ui3.listView) === null || _config$ui3 === void 0 ? void 0 : _config$ui3.fieldMode) !== 'hidden')) {
1449
+ throw new Error(`${meta.listKey}.${meta.fieldKey} requires ui.query, or ui.listView.fieldMode and ui.itemView.fieldMode to be set to 'hidden'`);
1450
+ }
1451
+ return fieldType({
1452
+ kind: 'none'
1453
+ })({
1454
+ ...config,
1455
+ output: g.field({
1456
+ ...usableField,
1457
+ resolve({
1458
+ item
1459
+ }, ...args) {
1460
+ return usableField.resolve(item, ...args);
1461
+ }
1462
+ }),
1463
+ __ksTelemetryFieldTypeName: '@nixxie-cms/virtual',
1464
+ views: '@nixxie-cms/core/fields/types/virtual/views',
1465
+ getAdminMeta: () => {
1466
+ var _config$ui$query, _config$ui4;
1467
+ return {
1468
+ query: (_config$ui$query = (_config$ui4 = config.ui) === null || _config$ui4 === void 0 ? void 0 : _config$ui4.query) !== null && _config$ui$query !== void 0 ? _config$ui$query : ''
1469
+ };
1470
+ }
1471
+ });
1472
+ };
1473
+ }
1474
+
1475
+ function calendarDay(config = {}) {
1476
+ const {
1477
+ isIndexed,
1478
+ validation,
1479
+ defaultValue
1480
+ } = config;
1481
+ return meta => {
1482
+ var _config$db, _config$db2, _validation$isRequire;
1483
+ if (typeof defaultValue === 'string') {
1484
+ try {
1485
+ g.CalendarDay.parseValue(defaultValue);
1486
+ } catch (err) {
1487
+ throw new Error(`The calendarDay field at ${meta.listKey}.${meta.fieldKey} specifies defaultValue: ${defaultValue} but values must be provided as a full-date ISO8601 string such as 1970-01-01`);
1488
+ }
1489
+ }
1490
+ const usesNativeDateType = meta.provider === 'postgresql' || meta.provider === 'mysql';
1491
+ function resolveInput(value) {
1492
+ if (meta.provider === 'sqlite' || value == null) {
1493
+ return value;
1494
+ }
1495
+ return dateStringToDateObjectInUTC(value);
1496
+ }
1497
+ const {
1498
+ mode,
1499
+ validate
1500
+ } = makeValidateHook(meta, config);
1501
+ const commonResolveFilter = mode === 'optional' ? resolveCommon : x => x;
1502
+ return fieldType({
1503
+ kind: 'scalar',
1504
+ mode,
1505
+ scalar: usesNativeDateType ? 'DateTime' : 'String',
1506
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
1507
+ default: typeof defaultValue === 'string' ? {
1508
+ kind: 'literal',
1509
+ value: defaultValue
1510
+ } : undefined,
1511
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
1512
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema,
1513
+ nativeType: usesNativeDateType ? 'Date' : undefined
1514
+ })({
1515
+ ...config,
1516
+ ...defaultIsRequired(config, (_validation$isRequire = validation === null || validation === void 0 ? void 0 : validation.isRequired) !== null && _validation$isRequire !== void 0 ? _validation$isRequire : false),
1517
+ hooks: {
1518
+ ...config.hooks,
1519
+ validate
1520
+ },
1521
+ input: {
1522
+ uniqueWhere: isIndexed === 'unique' ? {
1523
+ arg: g.arg({
1524
+ type: g.CalendarDay
1525
+ }),
1526
+ resolve: usesNativeDateType ? dateStringToDateObjectInUTC : undefined
1527
+ } : undefined,
1528
+ where: {
1529
+ arg: g.arg({
1530
+ type: mode === 'optional' ? CalendarDayNullableFilter : CalendarDayFilter
1531
+ }),
1532
+ resolve: usesNativeDateType ? value => commonResolveFilter(transformFilterDateStringsToDateObjects(value)) : commonResolveFilter
1533
+ },
1534
+ create: {
1535
+ arg: g.arg({
1536
+ type: g.CalendarDay,
1537
+ defaultValue
1538
+ }),
1539
+ resolve(val) {
1540
+ if (val === undefined) {
1541
+ val = defaultValue !== null && defaultValue !== void 0 ? defaultValue : null;
1542
+ }
1543
+ return resolveInput(val);
1544
+ }
1545
+ },
1546
+ update: {
1547
+ arg: g.arg({
1548
+ type: g.CalendarDay
1549
+ }),
1550
+ resolve: resolveInput
1551
+ },
1552
+ orderBy: {
1553
+ arg: g.arg({
1554
+ type: orderDirectionEnum
1555
+ })
1556
+ }
1557
+ },
1558
+ output: g.field({
1559
+ type: g.CalendarDay,
1560
+ resolve({
1561
+ value
1562
+ }) {
1563
+ if (value instanceof Date) {
1564
+ return value.toISOString().slice(0, 10);
1565
+ }
1566
+ return value;
1567
+ }
1568
+ }),
1569
+ __ksTelemetryFieldTypeName: '@nixxie-cms/calendarDay',
1570
+ views: '@nixxie-cms/core/fields/types/calendarDay/views',
1571
+ getAdminMeta() {
1572
+ return {
1573
+ defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null
1574
+ };
1575
+ }
1576
+ });
1577
+ };
1578
+ }
1579
+ function dateStringToDateObjectInUTC(value) {
1580
+ return new Date(`${value}T00:00Z`);
1581
+ }
1582
+ function transformFilterDateStringsToDateObjects(filter) {
1583
+ if (filter === null) {
1584
+ return filter;
1585
+ }
1586
+ return Object.fromEntries(Object.entries(filter).map(([key, value]) => {
1587
+ if (value == null) {
1588
+ return [key, value];
1589
+ }
1590
+ if (Array.isArray(value)) {
1591
+ return [key, value.map(dateStringToDateObjectInUTC)];
1592
+ }
1593
+ if (typeof value === 'object') {
1594
+ return [key, transformFilterDateStringsToDateObjects(value)];
1595
+ }
1596
+ return [key, dateStringToDateObjectInUTC(value)];
1597
+ }));
1598
+ }
1599
+ const filterFields = nestedType => ({
1600
+ equals: g.arg({
1601
+ type: g.CalendarDay
1602
+ }),
1603
+ in: g.arg({
1604
+ type: g.list(g.nonNull(g.CalendarDay))
1605
+ }),
1606
+ notIn: g.arg({
1607
+ type: g.list(g.nonNull(g.CalendarDay))
1608
+ }),
1609
+ lt: g.arg({
1610
+ type: g.CalendarDay
1611
+ }),
1612
+ lte: g.arg({
1613
+ type: g.CalendarDay
1614
+ }),
1615
+ gt: g.arg({
1616
+ type: g.CalendarDay
1617
+ }),
1618
+ gte: g.arg({
1619
+ type: g.CalendarDay
1620
+ }),
1621
+ not: g.arg({
1622
+ type: nestedType
1623
+ })
1624
+ });
1625
+ const CalendarDayNullableFilter = g.inputObject({
1626
+ name: 'CalendarDayNullableFilter',
1627
+ fields: () => filterFields(CalendarDayNullableFilter)
1628
+ });
1629
+ const CalendarDayFilter = g.inputObject({
1630
+ name: 'CalendarDayFilter',
1631
+ fields: () => filterFields(CalendarDayFilter)
1632
+ });
1633
+
1634
+ // these are the lowest and highest values for a signed 32-bit integer
1635
+ const MAX_INT = 2147483647;
1636
+ const MIN_INT = -2147483648;
1637
+ function multiselect(config) {
1638
+ var _config$db, _config$db2, _config$db2$isNullabl;
1639
+ const {
1640
+ defaultValue: defaultValue_,
1641
+ ui: {
1642
+ displayMode = 'select',
1643
+ ...ui
1644
+ } = {}
1645
+ } = config;
1646
+ (_config$db = config.db) !== null && _config$db !== void 0 ? _config$db : config.db = {};
1647
+ (_config$db2$isNullabl = (_config$db2 = config.db).isNullable) !== null && _config$db2$isNullabl !== void 0 ? _config$db2$isNullabl : _config$db2.isNullable = false; // TODO: deprecated, remove in breaking change
1648
+ const defaultValue = config.db.isNullable ? defaultValue_ : defaultValue_ !== null && defaultValue_ !== void 0 ? defaultValue_ : []; // TODO: deprecated, remove in breaking change?
1649
+
1650
+ return meta => {
1651
+ var _config$db3, _config$db4;
1652
+ if (config.isIndexed === 'unique') {
1653
+ throw TypeError("isIndexed: 'unique' is not a supported option for field type multiselect");
1654
+ }
1655
+ const resolveCreate = val => {
1656
+ const resolved = resolveUpdate(val);
1657
+ if (resolved === undefined) {
1658
+ return defaultValue;
1659
+ }
1660
+ return resolved;
1661
+ };
1662
+ const resolveUpdate = val => {
1663
+ return val;
1664
+ };
1665
+ const transformedConfig = configToOptionsAndGraphQLType(config, meta);
1666
+ const type = g.list(g.nonNull(transformedConfig.graphqlType));
1667
+ const accepted = new Set(transformedConfig.options.map(x => x.value));
1668
+ if (accepted.size !== transformedConfig.options.length) {
1669
+ throw new Error(`${meta.listKey}.${meta.fieldKey} has duplicate options, this is not allowed`);
1670
+ }
1671
+ const {
1672
+ mode,
1673
+ validate
1674
+ } = makeValidateHook(meta, config, ({
1675
+ inputData,
1676
+ operation,
1677
+ addValidationError
1678
+ }) => {
1679
+ if (operation === 'delete') return;
1680
+ const values = inputData[meta.fieldKey]; // resolvedData is JSON
1681
+ if (values != null) {
1682
+ for (const value of values) {
1683
+ if (!accepted.has(value)) {
1684
+ addValidationError(`'${value}' is not an accepted option`);
1685
+ }
1686
+ }
1687
+ if (new Set(values).size !== values.length) {
1688
+ addValidationError(`non-unique set of options selected`);
1689
+ }
1690
+ }
1691
+ });
1692
+ return fieldType({
1693
+ kind: 'scalar',
1694
+ scalar: 'Json',
1695
+ mode,
1696
+ map: config === null || config === void 0 || (_config$db3 = config.db) === null || _config$db3 === void 0 ? void 0 : _config$db3.map,
1697
+ extendPrismaSchema: (_config$db4 = config.db) === null || _config$db4 === void 0 ? void 0 : _config$db4.extendPrismaSchema,
1698
+ default: meta.provider === 'sqlite' ? undefined : {
1699
+ kind: 'literal',
1700
+ // TODO: waiting on https://github.com/prisma/prisma/issues/26571
1701
+ // input.create manages defaultValues anyway
1702
+ value: JSON.stringify(defaultValue !== null && defaultValue !== void 0 ? defaultValue : null)
1703
+ }
1704
+ })({
1705
+ ...config,
1706
+ ui,
1707
+ __ksTelemetryFieldTypeName: '@nixxie-cms/multiselect',
1708
+ hooks: {
1709
+ ...config.hooks,
1710
+ validate
1711
+ },
1712
+ views: '@nixxie-cms/core/fields/types/multiselect/views',
1713
+ getAdminMeta: () => {
1714
+ var _config$type;
1715
+ return {
1716
+ options: transformedConfig.options,
1717
+ type: (_config$type = config.type) !== null && _config$type !== void 0 ? _config$type : 'string',
1718
+ displayMode: displayMode,
1719
+ defaultValue: []
1720
+ };
1721
+ },
1722
+ input: {
1723
+ create: {
1724
+ arg: g.arg({
1725
+ type
1726
+ }),
1727
+ resolve: resolveCreate
1728
+ },
1729
+ update: {
1730
+ arg: g.arg({
1731
+ type
1732
+ }),
1733
+ resolve: resolveUpdate
1734
+ }
1735
+ },
1736
+ output: g.field({
1737
+ type: type,
1738
+ resolve({
1739
+ value
1740
+ }) {
1741
+ return value;
1742
+ }
1743
+ })
1744
+ });
1745
+ };
1746
+ }
1747
+ function configToOptionsAndGraphQLType(config, meta) {
1748
+ if (config.type === 'integer') {
1749
+ if (config.options.some(({
1750
+ value
1751
+ }) => !Number.isInteger(value) || value > MAX_INT || value < MIN_INT)) {
1752
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies integer values that are outside the range of a 32-bit signed integer`);
1753
+ }
1754
+ return {
1755
+ graphqlType: g.Int,
1756
+ options: config.options
1757
+ };
1758
+ }
1759
+ const options = config.options.map(option => {
1760
+ if (typeof option === 'string') {
1761
+ return {
1762
+ label: humanize(option),
1763
+ value: option
1764
+ };
1765
+ }
1766
+ return option;
1767
+ });
1768
+ if (config.type === 'enum') {
1769
+ const enumName = `${meta.listKey}${humanize(meta.fieldKey).replace(/ /g, '')}Type`;
1770
+ const graphqlType = g.enum({
1771
+ name: enumName,
1772
+ values: g.enumValues(options.map(x => x.value))
1773
+ });
1774
+ return {
1775
+ graphqlType,
1776
+ options
1777
+ };
1778
+ }
1779
+ return {
1780
+ graphqlType: g.String,
1781
+ options
1782
+ };
1783
+ }
1784
+
1785
+ export { bigInt, calendarDay, checkbox, decimal, file, float, image, integer, json, multiselect, select, text, virtual };