@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,1586 @@
1
+ import meow from 'meow';
2
+ import esbuild from 'esbuild';
3
+ import { walk as walk$1 } from '@nodelib/fs.walk';
4
+ import fse from 'fs-extra';
5
+ import fs from 'node:fs/promises';
6
+ import path, { join } from 'node:path';
7
+ import { promisify } from 'node:util';
8
+ import resolve from 'resolve';
9
+ import { w as withSpan, c as createSystem } from '../../../dist/system-dfec2f0a.esm.js';
10
+ import { i as importBuiltNixxieConfiguration, v as validateArtifacts, g as generateArtifacts, a as generateTypes, b as generatePrismaClient, E as ExitError, c as createExpressServer, p as printPrismaSchema, d as getFormattedGraphQLSchema } from '../../../dist/express-6743b918.esm.js';
11
+ import { createRequire } from 'node:module';
12
+ import { createServer } from 'node:http';
13
+ import { createDatabase, dropDatabase } from '@prisma/internals';
14
+ import chalk, { yellow, red, green, bold, grey, blue } from 'chalk';
15
+ import express from 'express';
16
+ import { printSchema } from 'graphql';
17
+ import next from 'next';
18
+ import path$1 from 'path';
19
+ import { w as withMigrate } from '../../../dist/migrations-996e66a0.esm.js';
20
+ import prompts from 'prompts';
21
+ import { platform } from 'node:os';
22
+ import https from 'node:https';
23
+ import ci from 'ci-info';
24
+ import Conf from 'conf';
25
+ import { spawn } from 'node:child_process';
26
+ import { randomBytes } from 'node:crypto';
27
+ import '../../../dist/admin-meta-14c60fec.esm.js';
28
+ import '@graphql-ts/schema';
29
+ import '../../../dist/resolve-hooks-17aafd37.esm.js';
30
+ import 'pluralize';
31
+ import '../../../dist/next-fields-9bf04ed8.esm.js';
32
+ import 'decimal.js';
33
+ import '@graphql-ts/extend';
34
+ import 'graphql-upload/GraphQLUpload.js';
35
+ import '../../../dist/utils-ef2cd0f4.esm.js';
36
+ import '../../../dist/utils-0cc426c8.esm.js';
37
+ import '../../../access/dist/nixxie-cms-core-access.esm.js';
38
+ import 'graphql/execution/values';
39
+ import '../../../dist/utils-f9556354.esm.js';
40
+ import '@apollo/cache-control-types';
41
+ import 'dataloader';
42
+ import '@babel/runtime/helpers/classPrivateFieldInitSpec';
43
+ import '@babel/runtime/helpers/classPrivateFieldGet2';
44
+ import '@babel/runtime/helpers/classPrivateFieldSet2';
45
+ import '@opentelemetry/api';
46
+ import '@prisma/client-generator-registry';
47
+ import 'http';
48
+ import 'cors';
49
+ import 'body-parser';
50
+ import '@apollo/server/express4';
51
+ import '@apollo/server';
52
+ import '@apollo/server/plugin/disabled';
53
+ import '@apollo/server/plugin/landingPage/default';
54
+ import 'graphql-upload/graphqlUploadExpress.js';
55
+ import '@prisma/migrate';
56
+
57
+ function doesConfigExist(path$1) {
58
+ try {
59
+ const configPath = path.join(process.cwd(), ...path$1);
60
+ resolve.sync(configPath, {
61
+ extensions: ['.ts', '.tsx', '.js'],
62
+ preserveSymlinks: false
63
+ });
64
+ return true;
65
+ } catch (err) {
66
+ if (err.code === 'MODULE_NOT_FOUND') return false;
67
+ throw err;
68
+ }
69
+ }
70
+ function appTemplate(config, adminMeta) {
71
+ const allViews = adminMeta.views.map(viewRelativeToProject => {
72
+ const isRelativeToFile = viewRelativeToProject.startsWith('./') || viewRelativeToProject.startsWith('../');
73
+ const viewRelativeToAppFile = isRelativeToFile ? '../../../' + viewRelativeToProject : viewRelativeToProject;
74
+
75
+ // we're not using serializePathForImport here because we want the thing you write for a view
76
+ // to be exactly what you would put in an import in the project directory.
77
+ // we're still using JSON.stringify to escape anything that might need to be though
78
+ return JSON.stringify(viewRelativeToAppFile);
79
+ });
80
+ // -- TEMPLATE START
81
+ return `import { getApp } from '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App'
82
+
83
+ ${allViews.map((views, i) => `import * as view${i} from ${views}`).join('\n')}
84
+
85
+ ${doesConfigExist(['.nixxie', 'admin', 'config']) ? `import * as packageAdminConfig from "../../../.nixxie/admin/config"` : 'let packageAdminConfig = {}'}
86
+
87
+ ${doesConfigExist(['admin', 'config']) ? `import * as userAdminConfig from "../../../admin/config"` : 'let userAdminConfig = {}'}
88
+
89
+ export default getApp({
90
+ adminConfig: {
91
+ ...packageAdminConfig,
92
+ ...userAdminConfig
93
+ },
94
+ apiPath: "${config.graphql.path}",
95
+ fieldViews: [${allViews.map((_, i) => `view${i}`)}],
96
+ })
97
+ `;
98
+ }
99
+
100
+ const createItemTemplate = listKey => `import { getCreateItemPage } from '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage';
101
+
102
+ export default getCreateItemPage(${JSON.stringify({
103
+ listKey
104
+ })})
105
+ `;
106
+
107
+ const homeTemplate = `export { HomePage as default } from '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage';
108
+ `;
109
+
110
+ const itemTemplate = listKey => `import { getItemPage } from '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage';
111
+
112
+ export default getItemPage(${JSON.stringify({
113
+ listKey
114
+ })})
115
+ `;
116
+
117
+ const listTemplate = listKey => `import { getListPage } from '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage';
118
+
119
+ export default getListPage(${JSON.stringify({
120
+ listKey
121
+ })});
122
+ `;
123
+
124
+ const nextConfigTemplate = basePath => `const nextConfig = {
125
+ bundlePagesRouterDependencies: true,
126
+ typescript: {
127
+ ignoreBuildErrors: true,
128
+ },
129
+ eslint: {
130
+ ignoreDuringBuilds: true,
131
+ },
132
+ // We use transpilePackages for the custom admin-ui pages in the ./admin folder
133
+ // as they import ts files into nextjs
134
+ transpilePackages: ['../../admin'],
135
+ ${basePath ? `basePath: '${basePath}',` : ''}
136
+ }
137
+
138
+ module.exports = nextConfig`;
139
+
140
+ const noAccessTemplate = session => `import { getNoAccessPage } from '@nixxie-cms/core/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage';
141
+
142
+ export default getNoAccessPage(${JSON.stringify({
143
+ sessionsEnabled: !!session
144
+ })})
145
+ `;
146
+
147
+ const pkgDir$1 = path.dirname(require.resolve('@nixxie-cms/core/package.json'));
148
+ function writeAdminFiles(config, adminMeta) {
149
+ var _config$ui;
150
+ return [{
151
+ mode: 'write',
152
+ src: nextConfigTemplate((_config$ui = config.ui) === null || _config$ui === void 0 ? void 0 : _config$ui.basePath),
153
+ outputPath: 'next.config.js'
154
+ }, {
155
+ mode: 'copy',
156
+ inputPath: path.join(pkgDir$1, 'static', 'favicon.ico'),
157
+ outputPath: 'public/favicon.ico'
158
+ }, {
159
+ mode: 'copy',
160
+ inputPath: path.join(pkgDir$1, 'static', 'favicon.svg'),
161
+ outputPath: 'public/favicon.svg'
162
+ }, {
163
+ mode: 'write',
164
+ src: noAccessTemplate(config.session),
165
+ outputPath: 'pages/no-access.js'
166
+ }, {
167
+ mode: 'write',
168
+ src: appTemplate(config, adminMeta),
169
+ outputPath: 'pages/_app.js'
170
+ }, {
171
+ mode: 'write',
172
+ src: homeTemplate,
173
+ outputPath: 'pages/index.js'
174
+ }, ...adminMeta.lists.flatMap(({
175
+ path,
176
+ key
177
+ }) => [{
178
+ mode: 'write',
179
+ src: listTemplate(key),
180
+ outputPath: `pages/${path}/index.js`
181
+ }, {
182
+ mode: 'write',
183
+ src: itemTemplate(key),
184
+ outputPath: `pages/${path}/[id].js`
185
+ }, {
186
+ mode: 'write',
187
+ src: createItemTemplate(key),
188
+ outputPath: `pages/${path}/create.js`
189
+ }])];
190
+ }
191
+
192
+ const walk = promisify(walk$1);
193
+ function toPosixPath(p) {
194
+ return p.split(path.sep).join('/');
195
+ }
196
+ function serializePathForImport(path) {
197
+ // JSON.stringify is important here because it will escape windows style paths(and any thing else that might potentially be in there)
198
+ return JSON.stringify(toPosixPath(path
199
+ // Next is unhappy about imports that include .ts/tsx in them because TypeScript is unhappy with them because when doing a TypeScript compilation with tsc, the imports won't be written so they would be wrong there
200
+ .replace(/\.tsx?$/, '')));
201
+ }
202
+ async function writeAdminFile(file, projectAdminPath) {
203
+ const outputFilename = path.join(projectAdminPath, file.outputPath);
204
+ if (file.mode === 'copy') {
205
+ if (!path.isAbsolute(file.inputPath)) {
206
+ throw new Error(`An inputPath of "${file.inputPath}" was provided to copy but inputPaths must be absolute`);
207
+ }
208
+ await fse.ensureDir(path.dirname(outputFilename));
209
+ // TODO: should we use copyFile or copy?
210
+ await fs.copyFile(file.inputPath, outputFilename);
211
+ }
212
+ let content;
213
+ try {
214
+ content = await fs.readFile(outputFilename, 'utf8');
215
+ } catch (err) {
216
+ if (err.code !== 'ENOENT') throw err;
217
+ }
218
+ if (file.mode === 'write' && content !== file.src) {
219
+ await fse.outputFile(outputFilename, file.src);
220
+ }
221
+ return path.normalize(outputFilename);
222
+ }
223
+ const pageExtensions = new Set(['.js', '.jsx', '.ts', '.tsx']);
224
+ async function generateAdminUI(config, adminMeta, projectAdminPath, isLiveReload) {
225
+ await withSpan('generating admin next application', async () => {
226
+ // when we're not doing a live reload, we want to clear everything out except the .next directory (not the .next directory because it has caches)
227
+ // so that at least every so often, we'll clear out anything that the deleting we do during live reloads doesn't (should just be directories)
228
+ if (!isLiveReload) {
229
+ const dir = await fs.readdir(projectAdminPath).catch(err => {
230
+ if (err.code === 'ENOENT') return [];
231
+ throw err;
232
+ });
233
+ await Promise.all(dir.map(x => {
234
+ if (x === '.next') return;
235
+ return fs.rm(path.join(projectAdminPath, x), {
236
+ recursive: true
237
+ });
238
+ }));
239
+ }
240
+
241
+ // Write out the files configured by the user
242
+ const userFilesToWrite = await config.ui.getAdditionalFiles();
243
+ const savedFiles = await Promise.all(userFilesToWrite.map(file => writeAdminFile(file, projectAdminPath)));
244
+ const uniqueFiles = new Set(savedFiles);
245
+
246
+ // Add files to pages/ which point to any files which exist in admin/pages
247
+ const adminConfigDir = path.join(process.cwd(), 'admin');
248
+ const userPagesDir = path.join(adminConfigDir, 'pages');
249
+ let userPagesEntries = [];
250
+ try {
251
+ userPagesEntries = await walk(userPagesDir, {
252
+ entryFilter: entry => entry.dirent.isFile() && pageExtensions.has(path.extname(entry.name))
253
+ });
254
+ } catch (err) {
255
+ if (err.code !== 'ENOENT') throw err;
256
+ }
257
+
258
+ // Collect files into a map keyed by outputPath to handle duplicates
259
+ // User-provided files take precedence over internal files
260
+ const adminFilesMap = new Map();
261
+
262
+ // Add internal files first
263
+ for (const file of writeAdminFiles(config, adminMeta)) {
264
+ adminFilesMap.set(file.outputPath, file);
265
+ }
266
+
267
+ // Add user page files (these override internal files)
268
+ for (const {
269
+ path: path$1
270
+ } of userPagesEntries) {
271
+ const outputFilename = toPosixPath(path.relative(adminConfigDir, path$1));
272
+ const importPath = path.relative(path.dirname(path.join(projectAdminPath, outputFilename)), path$1);
273
+ const serializedImportPath = serializePathForImport(importPath);
274
+ adminFilesMap.set(outputFilename, {
275
+ mode: 'write',
276
+ outputPath: outputFilename,
277
+ src: `export { default } from ${serializedImportPath}`
278
+ });
279
+ }
280
+
281
+ // Filter out files already written by getAdditionalFiles() and convert to array
282
+ const adminFiles = Array.from(adminFilesMap.values()).filter(x => !uniqueFiles.has(path.normalize(path.join(projectAdminPath, x.outputPath))));
283
+
284
+ // Write distinct output paths in parallel after deterministic de-duplication
285
+ await Promise.all(adminFiles.map(file => writeAdminFile(file, projectAdminPath)));
286
+
287
+ // Because Next will re-compile things (or at least check things and log a bunch of stuff)
288
+ // if we delete pages and then re-create them, we want to avoid that when live reloading
289
+ // so we only delete things that shouldn't exist anymore
290
+ // this won't clear out empty directories, this is fine since:
291
+ // - they won't create pages in Admin UI which is really what this deleting is about avoiding
292
+ // - we'll remove them when the user restarts the process
293
+ if (isLiveReload) {
294
+ const ignoredDir = path.resolve(projectAdminPath, '.next');
295
+ const ignoredFiles = new Set([...adminFiles.map(x => x.outputPath), ...uniqueFiles, 'next-env.d.ts', 'pages/api/__nixxie_api_build.js'].map(x => path.resolve(projectAdminPath, x)));
296
+ const entries = await walk(projectAdminPath, {
297
+ deepFilter: entry => entry.path !== ignoredDir,
298
+ entryFilter: entry => entry.dirent.isFile() && !ignoredFiles.has(entry.path)
299
+ });
300
+ await Promise.all(entries.map(entry => fs.rm(entry.path, {
301
+ recursive: true
302
+ })));
303
+ }
304
+ });
305
+ }
306
+
307
+ // WARNING: be careful not to import this file within next
308
+ function identity(x) {
309
+ return x;
310
+ }
311
+ async function getEsbuildConfigFn(cwd) {
312
+ try {
313
+ await esbuild.build({
314
+ entryPoints: ['./esbuild.nixxie'],
315
+ absWorkingDir: cwd,
316
+ bundle: true,
317
+ sourcemap: true,
318
+ outfile: '.nixxie/esbuild.js',
319
+ format: 'cjs',
320
+ platform: 'node',
321
+ logLevel: 'silent'
322
+ });
323
+ } catch (e) {
324
+ var _e$errors;
325
+ if (!((_e$errors = e.errors) !== null && _e$errors !== void 0 && _e$errors.some(err => err.text.includes('Could not resolve')))) throw e;
326
+ return;
327
+ }
328
+ try {
329
+ return require(require.resolve(`${cwd}/.nixxie/esbuild.js`)).default;
330
+ } catch (err) {
331
+ if (err.code !== 'MODULE_NOT_FOUND') throw err;
332
+ }
333
+ }
334
+ async function getEsbuildConfig(cwd) {
335
+ var _await$getEsbuildConf;
336
+ const esbuildFn = (_await$getEsbuildConf = await getEsbuildConfigFn(cwd)) !== null && _await$getEsbuildConf !== void 0 ? _await$getEsbuildConf : identity;
337
+ const resolveDir = path.join(cwd, '.nixxie');
338
+ const importer = path.join(cwd, '.nixxie/config.js');
339
+ // we need the .nixxie directory to exist so when we resolve from it below, it actually exists
340
+ await fs.mkdir(resolveDir, {
341
+ // while we don't need to actually make this recursive,
342
+ // this will make mkdir not error when the directory already exists
343
+ recursive: true
344
+ });
345
+ return esbuildFn({
346
+ entryPoints: ['./nixxie'],
347
+ absWorkingDir: cwd,
348
+ bundle: true,
349
+ sourcemap: true,
350
+ jsx: 'automatic',
351
+ // TODO: this cannot be changed for now, circular dependency with getSystemPaths, getEsbuildConfig
352
+ outfile: '.nixxie/config.js',
353
+ format: 'cjs',
354
+ platform: 'node',
355
+ plugins: [{
356
+ name: 'external-node_modules',
357
+ setup(build) {
358
+ build.onResolve({
359
+ namespace: 'file',
360
+ // anything this is a relative path, we know that we definitely want to bundle it
361
+ // so we can skip running the function
362
+ // WARNING: we can't use a negative lookahead/lookbehind because esbuild uses Go
363
+ filter: /(?:^[^.])|(?:^\.[^/.])|(?:^\.\.[^/])/
364
+ }, async ({
365
+ path: path$1,
366
+ ...args
367
+ }) => {
368
+ const resolved = await build.resolve(path$1, {
369
+ ...args,
370
+ namespace: 'inner'
371
+ });
372
+ if (
373
+ // we want to bundle everything _except_ node_modules
374
+ // to avoid problems with duplicate instances of modules
375
+ // note that this will still bundle monorepo dependencies
376
+ // since the realpath of the modules will be outside node_modules
377
+ // even though they're symlinked into node_modules
378
+ resolved.path.includes('node_modules')) {
379
+ const resolvedFromOutputMaybeEsm = await build.resolve(path$1, {
380
+ resolveDir,
381
+ importer,
382
+ kind: 'import-statement',
383
+ namespace: 'inner'
384
+ });
385
+ // if Node will be able to resolve the module using the path written,
386
+ // we can emit imports that are the same as what was written
387
+ if (resolved.path === resolvedFromOutputMaybeEsm.path) {
388
+ return {
389
+ path: path$1,
390
+ external: true
391
+ };
392
+ }
393
+ // otherwise, we need to use longer relative paths to exactly where the module is
394
+ // this might involve imports that look like
395
+ // ../../packages/something/node_modules/something/index.js
396
+ // which is unfortunate, but not really a significant problem
397
+ // we also want to resolve it with node:module createRequire
398
+ // so that we'll get the cjs version
399
+ const resolvedFromImporterCjs = createRequire(args.importer).resolve(path$1);
400
+ return {
401
+ path: path.relative('.nixxie', resolvedFromImporterCjs),
402
+ external: true
403
+ };
404
+ }
405
+ if (
406
+ // this exception is purely here for projects in the nixxie repo itself
407
+ // since if we bundled @nixxie-cms/core, we would cause problems with the duplicated
408
+ // when using a published version of nixxie, this should absolutely nothing
409
+ // since imports to @nixxie-cms/core will be in node_modules
410
+ path$1.startsWith('@nixxie-cms/core')) {
411
+ return {
412
+ path: path$1,
413
+ external: true
414
+ };
415
+ }
416
+ return resolved;
417
+ });
418
+ }
419
+ }]
420
+ });
421
+ }
422
+
423
+ async function build(cwd, {
424
+ frozen,
425
+ prisma,
426
+ quiet,
427
+ ui
428
+ }) {
429
+ var _system$config$ui;
430
+ function log(message) {
431
+ if (quiet) return;
432
+ console.log(message);
433
+ }
434
+
435
+ // log('✨ Building Nixxie configuration')
436
+ await esbuild.build(await getEsbuildConfig(cwd));
437
+ const system = createSystem(await importBuiltNixxieConfiguration(cwd));
438
+ if (prisma) {
439
+ if (frozen) {
440
+ await validateArtifacts(cwd, system);
441
+ log('✨ GraphQL and Prisma schemas are up to date'); // TODO: validating?
442
+ } else {
443
+ await generateArtifacts(cwd, system);
444
+ log('✨ Generated GraphQL and Prisma schemas'); // TODO: generating?
445
+ }
446
+ await generateTypes(cwd, system);
447
+ await generatePrismaClient(cwd, system);
448
+ }
449
+ if ((_system$config$ui = system.config.ui) !== null && _system$config$ui !== void 0 && _system$config$ui.isDisabled || !ui) return;
450
+ log('✨ Generating Admin UI code');
451
+ const paths = system.getPaths(cwd);
452
+ await generateAdminUI(system.config, system.adminMeta, paths.admin, false);
453
+ log('✨ Building Admin UI');
454
+
455
+ // do _NOT_ change this to a static import, it is intentionally like this
456
+ // to avoid loading it in the common case where the UI is not being built
457
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
458
+ const nextBuild = require('next/dist/build').default;
459
+ await nextBuild(paths.admin, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'default', undefined);
460
+ }
461
+
462
+ const pkgDir = path$1.dirname(createRequire(__dirname).resolve('@nixxie-cms/core/package.json'));
463
+
464
+ const adminErrorHTMLFilepath = path.join(pkgDir, 'static', 'admin-error.html');
465
+ function createAdminUIMiddlewareWithNextApp(config, commonContext, nextApp) {
466
+ const handle = nextApp.getRequestHandler();
467
+ const {
468
+ ui: {
469
+ isAccessAllowed,
470
+ pageMiddleware,
471
+ publicPages,
472
+ basePath
473
+ }
474
+ } = config;
475
+ if (basePath.endsWith('/')) throw new TypeError('basePath must not end with a trailing slash');
476
+ return async (req, res) => {
477
+ const {
478
+ path
479
+ } = req;
480
+ if (path.startsWith(`${basePath}/_next`) || path.startsWith(`${basePath}/__next`)) {
481
+ return handle(req, res);
482
+ }
483
+ try {
484
+ // do nothing if this is a public page
485
+ const isPublicPage = publicPages.includes(path);
486
+ const context = await commonContext.withRequest(req, res);
487
+ const wasAccessAllowed = isPublicPage ? true : await isAccessAllowed(context);
488
+ const shouldRedirect = await (pageMiddleware === null || pageMiddleware === void 0 ? void 0 : pageMiddleware({
489
+ context,
490
+ wasAccessAllowed,
491
+ basePath
492
+ }));
493
+ if (shouldRedirect) {
494
+ res.header('Cache-Control', 'no-cache, max-age=0');
495
+ res.header('Location', shouldRedirect.to);
496
+ res.status(302);
497
+ res.send();
498
+ return;
499
+ }
500
+ if (!wasAccessAllowed) return nextApp.render(req, res, '/no-access');
501
+ handle(req, res);
502
+ } catch (e) {
503
+ console.error('An error occurred handling a request for the Admin UI:', e);
504
+ res.status(500);
505
+ res.format({
506
+ 'text/html': function () {
507
+ res.sendFile(adminErrorHTMLFilepath);
508
+ },
509
+ 'application/json': function () {
510
+ res.send({
511
+ error: true
512
+ });
513
+ },
514
+ default: function () {
515
+ res.send('An error occurred handling a request for the Admin UI.');
516
+ }
517
+ });
518
+ }
519
+ };
520
+ }
521
+
522
+ // prompts is badly typed so we have some more specific typed APIs
523
+ // prompts also returns an undefined value on SIGINT which we really just want to exit on
524
+
525
+ async function confirmPrompt(message, initial = true) {
526
+ const {
527
+ value
528
+ } = await prompts({
529
+ name: 'value',
530
+ type: 'confirm',
531
+ message,
532
+ initial
533
+ });
534
+ if (value === undefined) {
535
+ process.exit(1);
536
+ }
537
+ return value;
538
+ }
539
+ async function textPrompt(message) {
540
+ const {
541
+ value
542
+ } = await prompts({
543
+ name: 'value',
544
+ type: 'text',
545
+ message
546
+ });
547
+ if (value === undefined) {
548
+ process.exit(1);
549
+ }
550
+ return value;
551
+ }
552
+
553
+ const defaultTelemetryEndpoint = 'https://telemetry.nixxiecms.com/3/';
554
+ function log(message) {
555
+ if (process.env.KEYSTONE_TELEMETRY_DEBUG === '1') {
556
+ console.log(`${message}`);
557
+ }
558
+ }
559
+ function getTelemetryConfig() {
560
+ const userConfig = new Conf({
561
+ projectName: 'nixxiecms',
562
+ projectSuffix: '',
563
+ projectVersion: '3.0.0',
564
+ migrations: {
565
+ '^2.0.0': store => {
566
+ var _existing$device$last;
567
+ const existing = store.get('telemetry');
568
+ if (!existing) return; // skip non-configured or known opt-outs
569
+
570
+ const replacement = {
571
+ informedAt: null,
572
+ // re-inform
573
+ device: {
574
+ lastSentDate: (_existing$device$last = existing.device.lastSentDate) !== null && _existing$device$last !== void 0 ? _existing$device$last : null
575
+ },
576
+ projects: {} // see below
577
+ };
578
+
579
+ // copy existing project.lastSentDate's
580
+ for (const [projectPath, project] of Object.entries(existing.projects)) {
581
+ if (projectPath === 'default') continue; // informedAt moved to device.lastSentDate
582
+
583
+ // dont copy garbage
584
+ if (typeof project !== 'object') continue;
585
+ if (typeof project.lastSentDate !== 'string') continue;
586
+ if (new Date(project.lastSentDate).toString() === 'Invalid Date') continue;
587
+
588
+ // retain lastSentDate
589
+ replacement.projects[projectPath] = {
590
+ lastSentDate: project.lastSentDate
591
+ };
592
+ }
593
+ store.set('telemetry', replacement);
594
+ },
595
+ '^3.0.0': store => {
596
+ const existing = store.get('telemetry');
597
+ if (!existing) return; // skip non-configured or known opt-outs
598
+
599
+ store.set('telemetry', {
600
+ ...existing,
601
+ informedAt: null // re-inform
602
+ });
603
+ }
604
+ }
605
+ });
606
+ return {
607
+ telemetry: userConfig.get('telemetry'),
608
+ userConfig
609
+ };
610
+ }
611
+ function getDefault(telemetry) {
612
+ if (telemetry) return telemetry;
613
+ return {
614
+ informedAt: null,
615
+ device: {
616
+ lastSentDate: null
617
+ },
618
+ projects: {}
619
+ }; // help Typescript infer the type
620
+ }
621
+ const todaysDate = new Date().toISOString().slice(0, 10);
622
+ function collectFieldCount(lists) {
623
+ const fields = {
624
+ unknown: 0
625
+ };
626
+ for (const list of Object.values(lists)) {
627
+ for (const [fieldPath, field] of Object.entries(list.fields)) {
628
+ const fieldType = field.__ksTelemetryFieldTypeName;
629
+ if (!fieldType) {
630
+ // skip id fields
631
+ if (fieldPath.endsWith('id')) continue;
632
+ fields.unknown++;
633
+ continue;
634
+ }
635
+ fields[fieldType] || (fields[fieldType] = 0);
636
+ fields[fieldType] += 1;
637
+ }
638
+ }
639
+ return fields;
640
+ }
641
+ async function collectPackageVersions() {
642
+ const packages = {
643
+ '@nixxie-cms/core': '0.0.0' // "unknown"
644
+ };
645
+ for (const packageName of ['@nixxie-cms/core', '@nixxie-cms/auth', '@nixxie-cms/fields-document', '@nixxie-cms/cloudinary', '@nixxie-cms/session-store-redis',
646
+ // we hope usage to drops to zero
647
+ '@opensaas/nixxie-nextjs-auth']) {
648
+ try {
649
+ const packageJson = require(`${packageName}/package.json`);
650
+ // const packageJson = await import(`${packageName}/package.json`, { assert: { type: 'json' } }) // TODO: broken in jest
651
+ packages[packageName] = packageJson.version;
652
+ } catch (err) {
653
+ // do nothing, the package is probably not installed
654
+ }
655
+ }
656
+ return packages;
657
+ }
658
+ function printNext(telemetry) {
659
+ if (!telemetry) {
660
+ console.log(`Telemetry data will ${red`not`} be sent by this system user`);
661
+ return;
662
+ }
663
+ console.log(`Telemetry data will be sent the next time you run ${green`"nixxie dev"`}`);
664
+ }
665
+ function printTelemetryStatus(telemetry, updated = false) {
666
+ const auxverb = updated ? 'has been' : 'is';
667
+ if (telemetry === undefined) {
668
+ console.log(`Nixxie telemetry ${auxverb} ${yellow`uninitialized`}`);
669
+ console.log();
670
+ printNext(telemetry);
671
+ return;
672
+ }
673
+ if (telemetry === false) {
674
+ console.log(`Nixxie telemetry ${auxverb} ${red`disabled`}`);
675
+ console.log();
676
+ printNext(telemetry);
677
+ return;
678
+ }
679
+ console.log(`Nixxie telemetry ${auxverb} ${green`enabled`}`);
680
+ console.log();
681
+ console.log(` Device telemetry was last sent on ${telemetry.device.lastSentDate}`);
682
+ for (const [projectPath, project] of Object.entries(telemetry.projects)) {
683
+ console.log(` Project telemetry for "${yellow(projectPath)}" was last sent on ${project === null || project === void 0 ? void 0 : project.lastSentDate}`);
684
+ }
685
+ console.log();
686
+ printNext(telemetry);
687
+ }
688
+ function inform(telemetry, userConfig) {
689
+ console.log(); // gap to help visiblity
690
+ console.log(`${bold('Nixxie Telemetry')}`);
691
+ console.log(`${yellow`Nixxie collects anonymous data when you run`} ${green`"nixxie dev"`}`);
692
+ console.log(`You can use ${green`"nixxie telemetry --help"`} to update your preferences at any time`);
693
+ if (telemetry.informedAt === null) {
694
+ console.log();
695
+ console.log(`No telemetry data has been sent as part of this notice`);
696
+ }
697
+ console.log();
698
+ printNext(telemetry);
699
+ console.log(); // gap to help visiblity
700
+ console.log(`For more information, including how to opt-out see ${grey`https://nixxiecms.com/telemetry`} (updated ${blue`2024-08-20`})`);
701
+
702
+ // update the informedAt
703
+ telemetry.informedAt = new Date().toJSON();
704
+ userConfig.set('telemetry', telemetry);
705
+ }
706
+ async function sendEvent(eventType, eventData) {
707
+ const endpoint = process.env.KEYSTONE_TELEMETRY_ENDPOINT || defaultTelemetryEndpoint;
708
+ await new Promise(resolve => {
709
+ const req = https.request(`${endpoint}${eventType}`, {
710
+ method: 'POST',
711
+ headers: {
712
+ 'Content-Type': 'application/json'
713
+ }
714
+ }, () => resolve());
715
+ req.once('error', err => {
716
+ var _err$message;
717
+ log((_err$message = err === null || err === void 0 ? void 0 : err.message) !== null && _err$message !== void 0 ? _err$message : err);
718
+ resolve();
719
+ });
720
+ req.end(JSON.stringify(eventData));
721
+ });
722
+ log(`sent ${eventType} report`);
723
+ }
724
+ async function sendProjectTelemetryEvent(cwd, lists, dbProviderName, telemetry, userConfig) {
725
+ var _telemetry$projects$c;
726
+ const project = (_telemetry$projects$c = telemetry.projects[cwd]) !== null && _telemetry$projects$c !== void 0 ? _telemetry$projects$c : {
727
+ lastSentDate: null
728
+ };
729
+ const {
730
+ lastSentDate
731
+ } = project;
732
+ if (lastSentDate && lastSentDate === todaysDate) {
733
+ log('project telemetry already sent today');
734
+ return;
735
+ }
736
+ await sendEvent('project', {
737
+ lastSentDate,
738
+ packages: await collectPackageVersions(),
739
+ database: dbProviderName,
740
+ lists: Object.keys(lists).length,
741
+ fields: collectFieldCount(lists)
742
+ });
743
+
744
+ // update the project lastSentDate
745
+ telemetry.projects[cwd] = {
746
+ lastSentDate: todaysDate
747
+ };
748
+ userConfig.set('telemetry', telemetry);
749
+ }
750
+ async function sendDeviceTelemetryEvent(telemetry, userConfig) {
751
+ const {
752
+ lastSentDate
753
+ } = telemetry.device;
754
+ if (lastSentDate && lastSentDate === todaysDate) {
755
+ log('device telemetry already sent today');
756
+ return;
757
+ }
758
+ await sendEvent('device', {
759
+ lastSentDate,
760
+ os: platform(),
761
+ node: process.versions.node.split('.')[0]
762
+ });
763
+
764
+ // update the device lastSentDate
765
+ telemetry.device = {
766
+ lastSentDate: todaysDate
767
+ };
768
+ userConfig.set('telemetry', telemetry);
769
+ }
770
+ async function runTelemetry(cwd, lists, dbProviderName) {
771
+ try {
772
+ if (ci.isCI) {
773
+ console.log(`Nixxie Telemetry is ${red`disabled`} (running in CI)`);
774
+ return;
775
+ }
776
+ const {
777
+ telemetry,
778
+ userConfig
779
+ } = getTelemetryConfig();
780
+ if (telemetry === false) {
781
+ console.log(`Nixxie Telemetry is ${red`disabled`} (via opt-out)`);
782
+ return;
783
+ }
784
+ if (process.env.NIXXIE_TELEMETRY_DISABLED === '1') {
785
+ console.log(`Nixxie Telemetry is ${red`disabled`} (NIXXIE_TELEMETRY_DISABLED is set)`);
786
+ return;
787
+ }
788
+ if (process.env.DO_NOT_TRACK === '1') {
789
+ console.log(`Nixxie Telemetry is ${red`disabled`} (DO_NOT_TRACK is set)`);
790
+ return;
791
+ }
792
+ if (process.env.NODE_ENV === 'production') {
793
+ console.log(`Nixxie Telemetry is ${red`disabled`} (NODE_ENV is production)`);
794
+ return;
795
+ }
796
+
797
+ // don't send telemetry before we inform the user, allowing opt-out
798
+ const telemetryDefaulted = getDefault(telemetry);
799
+ if (!telemetryDefaulted.informedAt) return inform(telemetryDefaulted, userConfig);
800
+ console.log(`Nixxie Telemetry is ${green`enabled`}`);
801
+ await sendProjectTelemetryEvent(cwd, lists, dbProviderName, telemetryDefaulted, userConfig);
802
+ await sendDeviceTelemetryEvent(telemetryDefaulted, userConfig);
803
+ } catch (err) {
804
+ var _err$message2;
805
+ log((_err$message2 = err === null || err === void 0 ? void 0 : err.message) !== null && _err$message2 !== void 0 ? _err$message2 : err);
806
+ }
807
+ }
808
+ function statusTelemetry(updated = false) {
809
+ const {
810
+ telemetry
811
+ } = getTelemetryConfig();
812
+ printTelemetryStatus(telemetry, updated);
813
+ }
814
+ function informTelemetry() {
815
+ const {
816
+ userConfig
817
+ } = getTelemetryConfig();
818
+ inform(getDefault(false), userConfig);
819
+ }
820
+ function enableTelemetry() {
821
+ const {
822
+ telemetry,
823
+ userConfig
824
+ } = getTelemetryConfig();
825
+ if (!telemetry) {
826
+ userConfig.set('telemetry', getDefault(telemetry));
827
+ }
828
+ statusTelemetry(true);
829
+ }
830
+ function disableTelemetry() {
831
+ const {
832
+ userConfig
833
+ } = getTelemetryConfig();
834
+ userConfig.set('telemetry', false);
835
+ statusTelemetry(true);
836
+ }
837
+ function resetTelemetry() {
838
+ const {
839
+ userConfig
840
+ } = getTelemetryConfig();
841
+ userConfig.delete('telemetry');
842
+ statusTelemetry(true);
843
+ }
844
+
845
+ async function noop() {}
846
+ const devLoadingHTMLFilepath = path.join(pkgDir, 'static', 'dev-loading.html');
847
+ function stripExtendHttpServer(config) {
848
+ const {
849
+ server,
850
+ ...rest
851
+ } = config;
852
+ const {
853
+ extendHttpServer,
854
+ ...restServer
855
+ } = server;
856
+ return {
857
+ ...rest,
858
+ server: {
859
+ ...restServer,
860
+ extendHttpServer: noop
861
+ }
862
+ };
863
+ }
864
+ function resolvablePromise() {
865
+ let _resolve;
866
+ const promise = new Promise(resolve => {
867
+ _resolve = resolve;
868
+ });
869
+ promise.resolve = _resolve;
870
+ return promise;
871
+ }
872
+ async function dev(cwd, {
873
+ dbPush,
874
+ prisma,
875
+ quiet,
876
+ server,
877
+ ui
878
+ }) {
879
+ var _esbuildConfig$plugin;
880
+ function log(message) {
881
+ if (quiet) return;
882
+ console.log(message);
883
+ }
884
+ log('✨ Starting Nixxie');
885
+ let lastPromise = resolvablePromise();
886
+ const builds = {
887
+ [Symbol.asyncIterator]: () => ({
888
+ next: () => lastPromise
889
+ })
890
+ };
891
+ function addBuildResult(build) {
892
+ const prev = lastPromise;
893
+ lastPromise = resolvablePromise();
894
+ prev.resolve({
895
+ value: build,
896
+ done: false
897
+ });
898
+ }
899
+ const esbuildConfig = await getEsbuildConfig(cwd);
900
+ const esbuildContext = await esbuild.context({
901
+ ...esbuildConfig,
902
+ plugins: [...((_esbuildConfig$plugin = esbuildConfig.plugins) !== null && _esbuildConfig$plugin !== void 0 ? _esbuildConfig$plugin : []), {
903
+ name: 'esbuildWatchPlugin',
904
+ setup(build) {
905
+ // TODO: no any
906
+ build.onEnd(addBuildResult);
907
+ }
908
+ }]
909
+ });
910
+ try {
911
+ const firstBuild = await esbuildContext.rebuild();
912
+ addBuildResult(firstBuild);
913
+ } catch (e) {
914
+ // esbuild prints everything we want users to see
915
+ }
916
+ esbuildContext.watch();
917
+ let prismaClient = null;
918
+ async function stop(aHttpServer, exitMessage = '') {
919
+ await esbuildContext.dispose();
920
+
921
+ // WARNING: this is only actually required for tests
922
+ // stop httpServer
923
+ if (aHttpServer) {
924
+ await new Promise((resolve, reject) => {
925
+ aHttpServer.close(async err => {
926
+ if (err) {
927
+ console.error('Error closing the server', err);
928
+ return reject(err);
929
+ }
930
+ resolve(null);
931
+ });
932
+ });
933
+ }
934
+
935
+ // WARNING: this is only required for tests
936
+ // stop Prisma
937
+ try {
938
+ var _prismaClient, _prismaClient$disconn;
939
+ await ((_prismaClient = prismaClient) === null || _prismaClient === void 0 || (_prismaClient$disconn = _prismaClient.disconnect) === null || _prismaClient$disconn === void 0 ? void 0 : _prismaClient$disconn.call(_prismaClient));
940
+ } catch (err) {
941
+ console.error('Error disconnecting from the database', err);
942
+ throw err;
943
+ }
944
+ if (exitMessage) throw new ExitError(1, exitMessage);
945
+ }
946
+ const app = server ? express() : null;
947
+ const httpServer = app ? createServer(app) : null;
948
+ let expressServer = null;
949
+ let hasAddedAdminUIMiddleware = false;
950
+ const isReady = () => !server || expressServer !== null && hasAddedAdminUIMiddleware;
951
+ const initNixxie = async () => {
952
+ var _configWithExtendHttp, _system$config$ui;
953
+ const configWithExtendHttp = await importBuiltNixxieConfiguration(cwd);
954
+ const {
955
+ system,
956
+ context,
957
+ prismaClientModule,
958
+ apolloServer,
959
+ ...rest
960
+ } = await async function () {
961
+ const system = createSystem(stripExtendHttpServer(configWithExtendHttp));
962
+
963
+ // Generate the Artifacts
964
+ if (prisma) {
965
+ log('✨ Generating GraphQL and Prisma schemas');
966
+ const {
967
+ prisma: generatedPrismaSchema
968
+ } = await generateArtifacts(cwd, system);
969
+ await generateTypes(cwd, system);
970
+ await generatePrismaClient(cwd, system);
971
+ const paths = system.getPaths(cwd);
972
+ if (dbPush) {
973
+ const created = await createDatabase(system.config.db.url, path.dirname(paths.schema.prisma));
974
+ if (created) log(`✨ Database created`);
975
+ const migration = await withMigrate(paths.schema.prisma, system, async m => {
976
+ // what does force on migrate.engine.schemaPush mean?
977
+ // - true: ignore warnings, but unexecutable steps will block
978
+ // - false: warnings or unexecutable steps will block
979
+ const migration_ = await m.schema(generatedPrismaSchema, false);
980
+
981
+ // if there are unexecutable steps, we need to reset the database [or the user can use migrations]
982
+ if (migration_.unexecutable.length) {
983
+ console.error(`${chalk.bold.red('\n⚠️ We found changes that cannot be executed:\n')}`);
984
+ for (const item of migration_.unexecutable) {
985
+ console.error(` • ${item}`);
986
+ }
987
+ if (migration_.warnings.length) {
988
+ console.error(chalk.bold(`\n⚠️ Warnings:\n`));
989
+ for (const warning of migration_.warnings) {
990
+ console.error(` • ${warning}`);
991
+ }
992
+ }
993
+ console.error('\nTo apply this migration, we need to reset the database');
994
+ if (!(await confirmPrompt(`Do you want to continue? ${chalk.red('The database will be reset')}`, false))) {
995
+ throw new ExitError(1, 'Database reset cancelled by user');
996
+ }
997
+ await m.reset();
998
+ return m.schema(generatedPrismaSchema, false);
999
+ }
1000
+ if (migration_.warnings.length) {
1001
+ if (migration_.warnings.length) {
1002
+ console.error(chalk.bold(`\n⚠️ Warnings:\n`));
1003
+ for (const warning of migration_.warnings) {
1004
+ console.error(` • ${warning}`);
1005
+ }
1006
+ }
1007
+ if (!(await confirmPrompt(`Do you want to continue? ${chalk.red('Some data will be lost')}`, false))) {
1008
+ throw new ExitError(1, 'Database push cancelled by user');
1009
+ }
1010
+ return m.schema(generatedPrismaSchema, true);
1011
+ }
1012
+ return migration_;
1013
+ });
1014
+ if (migration.warnings.length === 0 && migration.executedSteps === 0) {
1015
+ log(`✨ Database unchanged`);
1016
+ } else {
1017
+ log(`✨ Database synchronized with Prisma schema`);
1018
+ }
1019
+ } else {
1020
+ log('⚠️ Skipping database schema push');
1021
+ }
1022
+ const prismaClientModule = require(paths.prisma);
1023
+ const nixxie = system.getNixxie(prismaClientModule);
1024
+ log('✨ Connecting to the database');
1025
+ await nixxie.connect(); // TODO: remove, replace with server.onStart
1026
+ if (!server) {
1027
+ return {
1028
+ system,
1029
+ context: nixxie.context,
1030
+ prismaClientModule
1031
+ };
1032
+ }
1033
+ log('✨ Creating server');
1034
+ const {
1035
+ apolloServer,
1036
+ expressServer
1037
+ } = await createExpressServer(system.config, nixxie.context);
1038
+ log(`✅ GraphQL API ready`);
1039
+ return {
1040
+ system,
1041
+ context: nixxie.context,
1042
+ expressServer,
1043
+ apolloServer,
1044
+ prismaClientModule
1045
+ };
1046
+ }
1047
+ return {
1048
+ system
1049
+ };
1050
+ }();
1051
+ if (configWithExtendHttp !== null && configWithExtendHttp !== void 0 && (_configWithExtendHttp = configWithExtendHttp.server) !== null && _configWithExtendHttp !== void 0 && _configWithExtendHttp.extendHttpServer && httpServer && context) {
1052
+ configWithExtendHttp.server.extendHttpServer(httpServer, context);
1053
+ }
1054
+ prismaClient = context === null || context === void 0 ? void 0 : context.prisma;
1055
+ if (rest.expressServer) {
1056
+ ({
1057
+ expressServer
1058
+ } = rest);
1059
+ }
1060
+ let nextApp;
1061
+ if (!((_system$config$ui = system.config.ui) !== null && _system$config$ui !== void 0 && _system$config$ui.isDisabled) && ui) {
1062
+ if (!expressServer || !context) throw new TypeError('Error trying to prepare the Admin UI');
1063
+ log('✨ Generating Admin UI code');
1064
+ const paths = system.getPaths(cwd);
1065
+ await fs.rm(paths.admin, {
1066
+ recursive: true,
1067
+ force: true
1068
+ });
1069
+ await generateAdminUI(system.config, system.adminMeta, paths.admin, false);
1070
+ log('✨ Preparing Admin UI');
1071
+ nextApp = next({
1072
+ dev: true,
1073
+ dir: paths.admin
1074
+ });
1075
+ await nextApp.prepare();
1076
+ expressServer.use(createAdminUIMiddlewareWithNextApp(system.config, context, nextApp));
1077
+ log(`✅ Admin UI ready`);
1078
+ }
1079
+ hasAddedAdminUIMiddleware = true;
1080
+ initNixxiePromiseResolve();
1081
+ const originalPrismaSchema = printPrismaSchema(system.config, system.lists);
1082
+ let lastPrintedGraphQLSchema = printSchema(system.graphql.schemas.public);
1083
+ let lastApolloServer = apolloServer !== null && apolloServer !== void 0 ? apolloServer : null;
1084
+ if (system.config.telemetry !== false) {
1085
+ runTelemetry(cwd, system.lists, system.config.db.provider);
1086
+ }
1087
+ for await (const buildResult of builds) {
1088
+ if (buildResult.errors.length) continue;
1089
+ log('compiled successfully');
1090
+ try {
1091
+ const paths = system.getPaths(cwd);
1092
+
1093
+ // wipe the require cache
1094
+ {
1095
+ const resolved = require.resolve(paths.config);
1096
+ delete require.cache[resolved];
1097
+ }
1098
+ const newConfigWithHttp = await importBuiltNixxieConfiguration(cwd);
1099
+ const newSystem = createSystem(stripExtendHttpServer(newConfigWithHttp));
1100
+ if (prisma) {
1101
+ if (!originalPrismaSchema) throw new TypeError('Missing Prisma schema source');
1102
+ const newPrismaSchema = printPrismaSchema(newSystem.config, newSystem.lists);
1103
+ if (originalPrismaSchema !== newPrismaSchema) {
1104
+ return stop(null, '🔄 Your prisma schema has changed, please restart Nixxie');
1105
+ }
1106
+ // we only need to test for the things which influence the prisma client creation
1107
+ // and aren't written into the prisma schema since we check whether the prisma schema has changed above
1108
+ if (JSON.stringify(newSystem.config.db.enableLogging) !== JSON.stringify(system.config.db.enableLogging) || newSystem.config.db.url !== system.config.db.url) {
1109
+ return stop(null, 'Your database configuration has changed, please restart Nixxie');
1110
+ }
1111
+ }
1112
+
1113
+ // we're not using generateCommittedArtifacts or any of the similar functions
1114
+ // because we will never need to write a new prisma schema here
1115
+ // and formatting the prisma schema leaves some listeners on the process
1116
+ // which means you get a "there's probably a memory leak" warning from node
1117
+ const newPrintedGraphQLSchema = printSchema(newSystem.graphql.schemas.public);
1118
+ if (newPrintedGraphQLSchema !== lastPrintedGraphQLSchema) {
1119
+ await fs.writeFile(paths.schema.graphql, getFormattedGraphQLSchema(newPrintedGraphQLSchema));
1120
+ lastPrintedGraphQLSchema = newPrintedGraphQLSchema;
1121
+ }
1122
+ await generateTypes(cwd, newSystem);
1123
+ await generateAdminUI(newSystem.config, newSystem.adminMeta, paths.admin, true);
1124
+ if (prismaClientModule) {
1125
+ if (server && lastApolloServer) {
1126
+ const {
1127
+ context: newContext
1128
+ } = newSystem.getNixxie(prismaClientModule);
1129
+ const servers = await createExpressServer(newSystem.config, newContext);
1130
+ if (nextApp) {
1131
+ servers.expressServer.use(createAdminUIMiddlewareWithNextApp(newSystem.config, newContext, nextApp));
1132
+ }
1133
+ expressServer = servers.expressServer;
1134
+ const prevApolloServer = lastApolloServer;
1135
+ lastApolloServer = servers.apolloServer;
1136
+ await prevApolloServer.stop();
1137
+ }
1138
+ }
1139
+ } catch (err) {
1140
+ console.error(`Error loading your Nixxie config`, err);
1141
+ }
1142
+ }
1143
+ };
1144
+
1145
+ // Serve the dev status page for the Admin UI
1146
+ let initNixxiePromiseResolve;
1147
+ let initNixxiePromiseReject;
1148
+ const initNixxiePromise = new Promise((resolve, reject) => {
1149
+ initNixxiePromiseResolve = resolve;
1150
+ initNixxiePromiseReject = reject;
1151
+ });
1152
+ if (app && httpServer) {
1153
+ var _config$server;
1154
+ const config = await importBuiltNixxieConfiguration(cwd);
1155
+ app.use('/__nixxie/dev/status', (req, res) => {
1156
+ res.status(isReady() ? 200 : 501).end();
1157
+ });
1158
+ app.use((req, res, next) => {
1159
+ var _config$graphql$path, _config$graphql;
1160
+ if (expressServer && hasAddedAdminUIMiddleware) {
1161
+ return expressServer(req, res, next);
1162
+ }
1163
+ const {
1164
+ pathname
1165
+ } = new URL(req.url, 'http://ks');
1166
+ if (expressServer && pathname === ((_config$graphql$path = (_config$graphql = config.graphql) === null || _config$graphql === void 0 ? void 0 : _config$graphql.path) !== null && _config$graphql$path !== void 0 ? _config$graphql$path : '/api/graphql')) {
1167
+ return expressServer(req, res, next);
1168
+ }
1169
+ res.sendFile(devLoadingHTMLFilepath);
1170
+ });
1171
+ const httpOptions = {
1172
+ port: 3000
1173
+ };
1174
+ if (config !== null && config !== void 0 && config.server && 'port' in config.server && typeof ((_config$server = config.server) === null || _config$server === void 0 ? void 0 : _config$server.port) === 'number') {
1175
+ httpOptions.port = config.server.port;
1176
+ }
1177
+ if (config !== null && config !== void 0 && config.server && 'options' in config.server && config.server.options) {
1178
+ Object.assign(httpOptions, config.server.options);
1179
+ }
1180
+
1181
+ // preference env.PORT if supplied
1182
+ if ('PORT' in process.env) {
1183
+ var _process$env$PORT;
1184
+ httpOptions.port = parseInt((_process$env$PORT = process.env.PORT) !== null && _process$env$PORT !== void 0 ? _process$env$PORT : '');
1185
+ }
1186
+
1187
+ // preference env.HOST if supplied
1188
+ if ('HOST' in process.env) {
1189
+ var _process$env$HOST;
1190
+ httpOptions.host = (_process$env$HOST = process.env.HOST) !== null && _process$env$HOST !== void 0 ? _process$env$HOST : '';
1191
+ }
1192
+ const server = httpServer.listen(httpOptions, err => {
1193
+ var _httpOptions$host, _config$graphql$path2, _config$graphql2;
1194
+ if (err) throw err;
1195
+ const easyHost = [undefined, '', '::', '0.0.0.0'].includes(httpOptions.host) ? 'localhost' : httpOptions.host;
1196
+ log(`⭐️ Server listening on ${(_httpOptions$host = httpOptions.host) !== null && _httpOptions$host !== void 0 ? _httpOptions$host : ''}:${httpOptions.port} (http://${easyHost}:${httpOptions.port}/)`);
1197
+ log(`⭐️ GraphQL API available at ${(_config$graphql$path2 = (_config$graphql2 = config.graphql) === null || _config$graphql2 === void 0 ? void 0 : _config$graphql2.path) !== null && _config$graphql$path2 !== void 0 ? _config$graphql$path2 : '/api/graphql'}`);
1198
+
1199
+ // Don't start initialising Nixxie until the dev server is ready,
1200
+ // otherwise it slows down the first response significantly
1201
+ initNixxie().catch(async err => {
1202
+ await stop(server);
1203
+ initNixxiePromiseReject(err);
1204
+ });
1205
+ });
1206
+ await initNixxiePromise;
1207
+ return async () => await stop(server);
1208
+ } else {
1209
+ await initNixxie();
1210
+ return () => Promise.resolve();
1211
+ }
1212
+ }
1213
+
1214
+ async function spawnPrisma(cwd, system, commands) {
1215
+ let output = '';
1216
+ return new Promise((resolve, reject) => {
1217
+ const p = spawn('node', ['--title=prisma', require.resolve('prisma/build/index.js'), ...commands], {
1218
+ cwd,
1219
+ env: {
1220
+ ...process.env,
1221
+ DATABASE_URL: system.config.db.url,
1222
+ PRISMA_HIDE_UPDATE_MESSAGE: '1'
1223
+ }
1224
+ });
1225
+ p.stdout.on('data', data => output += data.toString('utf-8'));
1226
+ p.stderr.on('data', data => output += data.toString('utf-8'));
1227
+ p.on('error', err => reject(err));
1228
+ p.on('exit', exitCode => resolve({
1229
+ exitCode,
1230
+ output
1231
+ }));
1232
+ });
1233
+ }
1234
+ async function migrateCreate(cwd, {
1235
+ frozen,
1236
+ quiet
1237
+ }) {
1238
+ function log(message) {
1239
+ if (quiet) return;
1240
+ console.log(message);
1241
+ }
1242
+ await esbuild.build(await getEsbuildConfig(cwd));
1243
+ const system = createSystem(await importBuiltNixxieConfiguration(cwd));
1244
+ if (frozen) {
1245
+ await validateArtifacts(cwd, system);
1246
+ log('✨ GraphQL and Prisma schemas are up to date');
1247
+ } else {
1248
+ await generateArtifacts(cwd, system);
1249
+ log('✨ Generated GraphQL and Prisma schemas');
1250
+ }
1251
+ await generateTypes(cwd, system);
1252
+ await generatePrismaClient(cwd, system);
1253
+
1254
+ // TODO: remove, should be Prisma
1255
+ await fse.outputFile(join(cwd, 'migrations/migration_lock.toml'), `Please do not edit this file manually
1256
+ // # It should be added in your version-control system (i.e. Git)
1257
+ provider = ${system.config.db.provider}`);
1258
+ // TODO: remove, should be Prisma
1259
+ let deleteShadowDatabase = async () => {};
1260
+ let shadowDatabaseUrl = system.config.db.shadowDatabaseUrl;
1261
+ if (system.config.db.provider !== 'sqlite' && !shadowDatabaseUrl) {
1262
+ const parsedUrl = new URL(system.config.db.url);
1263
+ parsedUrl.pathname = `ktmp${Date.now()}_${randomBytes(6).toString('hex')}`;
1264
+ shadowDatabaseUrl = parsedUrl.toString();
1265
+ try {
1266
+ await createDatabase(shadowDatabaseUrl);
1267
+ } catch (err) {
1268
+ console.error(err);
1269
+ console.error(chalk.red('Failed to create shadow database, db.shadowDatabaseUrl may be required'));
1270
+ throw new ExitError(1);
1271
+ }
1272
+ deleteShadowDatabase = async () => {
1273
+ await dropDatabase(shadowDatabaseUrl);
1274
+ };
1275
+ }
1276
+ let sql;
1277
+ try {
1278
+ const paths = system.getPaths(cwd);
1279
+ const {
1280
+ output: summary,
1281
+ exitCode: prismaExitCode
1282
+ } = await spawnPrisma(cwd, system, ['migrate', 'diff', ...(shadowDatabaseUrl ? ['--shadow-database-url', shadowDatabaseUrl] : []), '--from-migrations', 'migrations/', '--to-schema-datamodel', paths.schema.prisma]);
1283
+ if (typeof prismaExitCode === 'number' && prismaExitCode !== 0) {
1284
+ console.error(summary);
1285
+ throw new ExitError(prismaExitCode);
1286
+ }
1287
+ if (summary.startsWith('No difference detected')) {
1288
+ log('🔄 Database unchanged from Prisma schema');
1289
+ throw new ExitError(0);
1290
+ }
1291
+ console.error(summary);
1292
+ const {
1293
+ output,
1294
+ exitCode: prismaExitCode2
1295
+ } = await spawnPrisma(cwd, system, ['migrate', 'diff', ...(shadowDatabaseUrl ? ['--shadow-database-url', shadowDatabaseUrl] : []), '--from-migrations', 'migrations/', '--to-schema-datamodel', paths.schema.prisma, '--script']);
1296
+ sql = output;
1297
+ if (typeof prismaExitCode2 === 'number' && prismaExitCode2 !== 0) {
1298
+ console.error(sql);
1299
+ throw new ExitError(prismaExitCode2);
1300
+ }
1301
+ } finally {
1302
+ await deleteShadowDatabase();
1303
+ }
1304
+ const prefix = new Date().toLocaleString('sv-SE').replace(/[^0-9]/g, '').slice(0, 14);
1305
+
1306
+ // https://github.com/prisma/prisma/blob/183c14d2aa6059fc3c00c95363887e8941b3d911/packages/migrate/src/utils/promptForMigrationName.ts#L12
1307
+ // Prisma truncates >200 characters
1308
+ const name = (await textPrompt('Name of migration')).replace(/[^A-Za-z0-9_]/g, '_').slice(0, 200);
1309
+ const path = join(`migrations`, `${prefix}_${name}/migration.sql`);
1310
+ await fse.outputFile(join(cwd, path), sql);
1311
+ log(`✨ Generated SQL migration at ${path}`);
1312
+ }
1313
+ async function migrateApply(cwd, {
1314
+ frozen,
1315
+ quiet
1316
+ }) {
1317
+ function log(message) {
1318
+ if (quiet) return;
1319
+ console.log(message);
1320
+ }
1321
+
1322
+ // TODO: should this happen if frozen?
1323
+ await esbuild.build(await getEsbuildConfig(cwd));
1324
+ const system = createSystem(await importBuiltNixxieConfiguration(cwd));
1325
+ if (frozen) {
1326
+ await validateArtifacts(cwd, system);
1327
+ log('✨ GraphQL and Prisma schemas are up to date');
1328
+ } else {
1329
+ await generateArtifacts(cwd, system);
1330
+ log('✨ Generated GraphQL and Prisma schemas');
1331
+ }
1332
+ await generateTypes(cwd, system);
1333
+ await generatePrismaClient(cwd, system);
1334
+ log('✨ Applying any database migrations');
1335
+ const paths = system.getPaths(cwd);
1336
+ const {
1337
+ appliedMigrationNames
1338
+ } = await withMigrate(paths.schema.prisma, system, async m => {
1339
+ const diagnostic = await m.diagnostic();
1340
+ if (diagnostic.action.tag === 'reset') {
1341
+ console.error(diagnostic.action.reason);
1342
+ const consent = await confirmPrompt(`Do you want to continue? ${chalk.red('The database will be reset')}`);
1343
+ if (!consent) throw new ExitError(1, 'Database reset cancelled by user');
1344
+ await m.reset();
1345
+ }
1346
+ return await m.apply();
1347
+ });
1348
+ log(appliedMigrationNames.length === 0 ? `✨ No database migrations to apply` : `✨ Database migrated`);
1349
+ }
1350
+
1351
+ async function spawnPrisma3(cwd, system, commands) {
1352
+ return new Promise((resolve, reject) => {
1353
+ const p = spawn('node', ['--title=prisma', require.resolve('prisma/build/index.js'), ...commands], {
1354
+ cwd,
1355
+ env: {
1356
+ ...process.env,
1357
+ DATABASE_URL: system.config.db.url,
1358
+ PRISMA_HIDE_UPDATE_MESSAGE: '1'
1359
+ },
1360
+ stdio: 'inherit'
1361
+ });
1362
+ p.on('error', err => reject(err));
1363
+ p.on('exit', exitCode => resolve({
1364
+ exitCode
1365
+ }));
1366
+ });
1367
+ }
1368
+ async function prisma(cwd, args, frozen) {
1369
+ // TODO: should build unless --frozen?
1370
+
1371
+ const system = createSystem(await importBuiltNixxieConfiguration(cwd));
1372
+ await validateArtifacts(cwd, system);
1373
+ const {
1374
+ exitCode
1375
+ } = await spawnPrisma3(cwd, system, args);
1376
+ if (typeof exitCode === 'number' && exitCode !== 0) {
1377
+ throw new ExitError(exitCode);
1378
+ }
1379
+ }
1380
+
1381
+ async function start(cwd, {
1382
+ quiet,
1383
+ server,
1384
+ ui,
1385
+ withMigrations
1386
+ }) {
1387
+ var _system$config$ui;
1388
+ function log(message) {
1389
+ if (quiet) return;
1390
+ console.log(message);
1391
+ }
1392
+ log('✨ Starting Nixxie');
1393
+ const system = createSystem(await importBuiltNixxieConfiguration(cwd));
1394
+ const paths = system.getPaths(cwd);
1395
+ if (withMigrations) {
1396
+ log('✨ Applying any database migrations');
1397
+ const {
1398
+ appliedMigrationNames
1399
+ } = await withMigrate(paths.schema.prisma, system, m => m.apply());
1400
+ log(appliedMigrationNames.length === 0 ? `✨ No database migrations to apply` : `✨ Database migrated`);
1401
+ }
1402
+ if (!server) return;
1403
+ const prismaClient = require(paths.prisma);
1404
+ const nixxie = system.getNixxie(prismaClient);
1405
+ log('✨ Connecting to the database');
1406
+ await nixxie.connect();
1407
+ log('✨ Creating server');
1408
+ const {
1409
+ expressServer,
1410
+ httpServer
1411
+ } = await createExpressServer(system.config, nixxie.context);
1412
+ log(`✅ GraphQL API ready`);
1413
+ if (!((_system$config$ui = system.config.ui) !== null && _system$config$ui !== void 0 && _system$config$ui.isDisabled) && ui) {
1414
+ log('✨ Preparing Admin UI');
1415
+ const nextApp = next({
1416
+ dev: false,
1417
+ dir: paths.admin
1418
+ });
1419
+ await nextApp.prepare();
1420
+ expressServer.use(createAdminUIMiddlewareWithNextApp(system.config, nixxie.context, nextApp));
1421
+ log(`✅ Admin UI ready`);
1422
+ }
1423
+ const httpOptions = system.config.server.options;
1424
+
1425
+ // prefer env.PORT
1426
+ if ('PORT' in process.env) {
1427
+ httpOptions.port = parseInt(process.env.PORT || '');
1428
+ }
1429
+
1430
+ // prefer env.HOST
1431
+ if ('HOST' in process.env) {
1432
+ httpOptions.host = process.env.HOST || '';
1433
+ }
1434
+ httpServer.listen(system.config.server.options, err => {
1435
+ if (err) throw err;
1436
+ const easyHost = [undefined, '', '::', '0.0.0.0'].includes(httpOptions.host) ? 'localhost' : httpOptions.host;
1437
+ log(`⭐️ Server listening on ${httpOptions.host || ''}:${httpOptions.port} (http://${easyHost}:${httpOptions.port}/)`);
1438
+ });
1439
+ }
1440
+
1441
+ async function telemetry(_, command) {
1442
+ const usageText = `
1443
+ Usage
1444
+ $ nixxie telemetry [command]
1445
+ Commands
1446
+ disable opt-out of telemetry, disabling telemetry for this system user
1447
+ enable opt-in to telemetry
1448
+ reset resets your telemetry configuration (if any)
1449
+ status show if telemetry is enabled, disabled or uninitialised
1450
+ inform show an informed consent notice
1451
+
1452
+ For more details visit: https://nixxiecms.com/telemetry
1453
+ `;
1454
+ if (command === 'disable') return disableTelemetry();
1455
+ if (command === 'enable') return enableTelemetry();
1456
+ if (command === 'reset') return resetTelemetry();
1457
+ if (command === 'status') return statusTelemetry();
1458
+ if (command === 'inform') return informTelemetry();
1459
+ if (command === '--help') {
1460
+ console.error(`${bold('Nixxie Telemetry')}`);
1461
+ console.error(usageText);
1462
+ return;
1463
+ }
1464
+ console.error(command ? `Invalid option: ${command}` : '');
1465
+ console.error(usageText);
1466
+ }
1467
+
1468
+ function defaultFlags(flags, defaults) {
1469
+ flags = {
1470
+ ...defaults,
1471
+ ...flags
1472
+ };
1473
+ for (const [key, value] of Object.entries(flags)) {
1474
+ if (value !== undefined && !(key in defaults)) {
1475
+ // TODO: maybe we should prevent other flags?
1476
+ //throw new Error(`Option '${key}' is unsupported for this command`);
1477
+ continue;
1478
+ }
1479
+ const defaultValue = defaults[key];
1480
+ // should we default the flag?
1481
+ if (value === undefined) {
1482
+ flags[key] = defaultValue;
1483
+ }
1484
+ if (typeof value !== typeof defaultValue) {
1485
+ throw new Error(`Option '${key}' should be of type ${typeof defaultValue}`);
1486
+ }
1487
+ }
1488
+ return flags;
1489
+ }
1490
+ async function cli(cwd, argv) {
1491
+ const {
1492
+ input,
1493
+ help,
1494
+ flags
1495
+ } = meow(`
1496
+ Usage
1497
+ $ nixxie [command] [options]
1498
+
1499
+ Commands
1500
+ dev start the project in development mode (default)
1501
+ migrate create build the project for development and create a migration from the Prisma diff
1502
+ migrate apply build the project for development and apply any pending migrations
1503
+ postinstall build the project for development
1504
+ build build the project (required by \`nixxie start\` and \`nixxie prisma\`)
1505
+ telemetry sets telemetry preference (enable/disable/status)
1506
+
1507
+ start start the project
1508
+ prisma use prisma commands in a Nixxie context
1509
+
1510
+ Options
1511
+ --frozen (build, migrate)
1512
+ don't build the graphql or prisma schemas, only validate them
1513
+
1514
+ --no-db-push (dev)
1515
+ don't push any updates of your Prisma schema to your database
1516
+
1517
+ --no-prisma (build, dev)
1518
+ don't build or validate the prisma schema
1519
+
1520
+ --no-server (dev, start)
1521
+ don't start the express server
1522
+
1523
+ --no-ui (build, dev, start)
1524
+ don't build and serve the AdminUI
1525
+
1526
+ --with-migrations (start)
1527
+ trigger prisma to run migrations as part of startup
1528
+ `, {
1529
+ argv
1530
+ });
1531
+ const command = input.join(' ') || 'dev';
1532
+ if (command === 'dev') {
1533
+ return dev(cwd, defaultFlags(flags, {
1534
+ dbPush: true,
1535
+ prisma: true,
1536
+ server: true,
1537
+ ui: true
1538
+ }));
1539
+ }
1540
+ if (command === 'migrate create') {
1541
+ return migrateCreate(cwd, defaultFlags(flags, {
1542
+ ui: false
1543
+ }));
1544
+ }
1545
+ if (command === 'migrate apply') {
1546
+ return migrateApply(cwd, defaultFlags(flags, {
1547
+ ui: false
1548
+ }));
1549
+ }
1550
+ if (command === 'build') {
1551
+ return build(cwd, defaultFlags(flags, {
1552
+ frozen: false,
1553
+ prisma: true,
1554
+ ui: true
1555
+ }));
1556
+ }
1557
+ if (command === 'start') {
1558
+ return start(cwd, defaultFlags(flags, {
1559
+ server: true,
1560
+ ui: true,
1561
+ withMigrations: false
1562
+ }));
1563
+ }
1564
+ if (command.startsWith('prisma')) {
1565
+ return prisma(cwd, argv.slice(1), Boolean(flags.frozen));
1566
+ }
1567
+ if (command.startsWith('telemetry')) {
1568
+ return telemetry(cwd, argv[1]);
1569
+ }
1570
+
1571
+ // WARNING: postinstall is an alias for `build --frozen --no-ui`
1572
+ if (command === 'postinstall') {
1573
+ // uncomment when you need to update the schemas
1574
+ // return build(cwd, defaultFlags(flags, { frozen: false, prisma: true, ui: false }))
1575
+ return build(cwd, defaultFlags(flags, {
1576
+ frozen: true,
1577
+ prisma: true,
1578
+ ui: false
1579
+ }));
1580
+ }
1581
+ console.error(`${command} is an unknown command`);
1582
+ console.error(help);
1583
+ throw new ExitError(1);
1584
+ }
1585
+
1586
+ export { cli };