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