@nixxie-cms/core 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +2 -2
  2. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.cjs.js +4 -4
  3. package/admin-ui/components/dist/nixxie-cms-core-admin-ui-components.esm.js +4 -4
  4. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.cjs.js +2 -2
  5. package/admin-ui/context/dist/nixxie-cms-core-admin-ui-context.esm.js +2 -2
  6. package/context/dist/nixxie-cms-core-context.cjs.js +2 -2
  7. package/context/dist/nixxie-cms-core-context.esm.js +2 -2
  8. package/dist/{CreateItemDialog-33335548.esm.js → CreateItemDialog-7008b050.esm.js} +1 -1
  9. package/dist/{CreateItemDialog-56cf59b7.cjs.js → CreateItemDialog-a0cab315.cjs.js} +1 -1
  10. package/dist/{PageContainer-7db73317.esm.js → PageContainer-5ae731cc.esm.js} +25 -18
  11. package/dist/{PageContainer-27c27f10.cjs.js → PageContainer-abd7159f.cjs.js} +25 -18
  12. package/dist/{admin-meta-graphql-6f7f5331.esm.js → admin-meta-graphql-0e6e606e.esm.js} +1 -1
  13. package/dist/{admin-meta-graphql-c8f926e9.cjs.js → admin-meta-graphql-306c224a.cjs.js} +1 -1
  14. package/dist/{context-3132c3ed.esm.js → context-af9957ed.esm.js} +2 -2
  15. package/dist/{context-e7a45152.cjs.js → context-b5204629.cjs.js} +2 -2
  16. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -1
  17. package/dist/declarations/src/admin-ui/components/PageContainer.d.ts.map +1 -1
  18. package/dist/declarations/src/helpers.d.ts.map +1 -1
  19. package/dist/declarations/src/index.d.ts +1 -0
  20. package/dist/declarations/src/index.d.ts.map +1 -1
  21. package/dist/declarations/src/internal-unstable/admin-ui/id-field-view.d.ts.map +1 -0
  22. package/dist/declarations/src/internal-unstable/admin-ui/pages/App/index.d.ts.map +1 -0
  23. package/dist/declarations/src/internal-unstable/admin-ui/pages/CreateItemPage/index.d.ts.map +1 -0
  24. package/dist/declarations/src/internal-unstable/admin-ui/pages/HomePage/index.d.ts.map +1 -0
  25. package/dist/declarations/src/internal-unstable/admin-ui/pages/ItemPage/index.d.ts.map +1 -0
  26. package/dist/declarations/src/internal-unstable/admin-ui/pages/ListPage/index.d.ts.map +1 -0
  27. package/dist/declarations/src/internal-unstable/admin-ui/pages/NoAccessPage/index.d.ts.map +1 -0
  28. package/dist/declarations/src/internal-unstable/artifacts.d.ts.map +1 -0
  29. package/dist/declarations/src/lib/core/initialise-lists.d.ts +1 -1
  30. package/dist/declarations/src/schema.d.ts.map +1 -1
  31. package/dist/declarations/src/types/config/index.d.ts +60 -1
  32. package/dist/declarations/src/types/config/index.d.ts.map +1 -1
  33. package/dist/declarations/src/types/config/lists.d.ts +4 -4
  34. package/dist/declarations/src/types/context.d.ts +150 -0
  35. package/dist/declarations/src/types/context.d.ts.map +1 -1
  36. package/dist/declarations/src/types/next-fields.d.ts +1 -1
  37. package/dist/{express-e9ed9a7d.cjs.js → express-455ae20c.cjs.js} +1 -1
  38. package/dist/{express-6743b918.esm.js → express-7559ca2d.esm.js} +1 -1
  39. package/dist/{index-ac01583b.cjs.js → index-89635494.cjs.js} +4 -4
  40. package/dist/{index-24b78415.esm.js → index-baa799e0.esm.js} +4 -4
  41. package/dist/nixxie-cms-core.cjs.js +104 -77
  42. package/dist/nixxie-cms-core.esm.js +104 -77
  43. package/dist/{non-null-graphql-5315718c.esm.js → non-null-graphql-a84ed64d.esm.js} +1 -1
  44. package/dist/{non-null-graphql-17b83ddc.cjs.js → non-null-graphql-add6bb3d.cjs.js} +1 -1
  45. package/dist/{resolve-hooks-66fe8a8e.cjs.js → resolve-hooks-165a9ce2.cjs.js} +1 -1
  46. package/dist/{resolve-hooks-17aafd37.esm.js → resolve-hooks-6813a045.esm.js} +2 -2
  47. package/dist/{system-dfec2f0a.esm.js → system-03e49e4f.esm.js} +8 -4
  48. package/dist/{system-48c5f6df.cjs.js → system-a321642d.cjs.js} +8 -4
  49. package/dist/{useFilter-0b5a1ee6.esm.js → useFilter-9b6db1f9.esm.js} +1 -1
  50. package/dist/{useFilter-1a4e6900.cjs.js → useFilter-acc9d413.cjs.js} +1 -1
  51. package/fields/dist/nixxie-cms-core-fields.cjs.js +16 -16
  52. package/fields/dist/nixxie-cms-core-fields.esm.js +17 -17
  53. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +3 -3
  54. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +3 -3
  55. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.cjs.js +1 -1
  56. package/fields/types/bytes/views/dist/nixxie-cms-core-fields-types-bytes-views.esm.js +1 -1
  57. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +3 -3
  58. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +3 -3
  59. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.cjs.js +4 -4
  60. package/fields/types/relationship/views/dist/nixxie-cms-core-fields-types-relationship-views.esm.js +4 -4
  61. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.cjs.js +1 -1
  62. package/fields/types/select/views/dist/nixxie-cms-core-fields-types-select-views.esm.js +1 -1
  63. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.cjs.js +1 -1
  64. package/fields/types/text/views/dist/nixxie-cms-core-fields-types-text-views.esm.js +1 -1
  65. package/internal-unstable/admin-ui/id-field-view/dist/nixxie-cms-core-internal-unstable-admin-ui-id-field-view.cjs.d.ts +2 -0
  66. package/internal-unstable/admin-ui/id-field-view/dist/nixxie-cms-core-internal-unstable-admin-ui-id-field-view.cjs.js +244 -0
  67. package/internal-unstable/admin-ui/id-field-view/dist/nixxie-cms-core-internal-unstable-admin-ui-id-field-view.esm.js +235 -0
  68. package/internal-unstable/admin-ui/id-field-view/package.json +4 -0
  69. package/internal-unstable/admin-ui/next-config/package.json +4 -0
  70. package/internal-unstable/admin-ui/pages/App/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-App.cjs.d.ts +2 -0
  71. package/internal-unstable/admin-ui/pages/App/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-App.cjs.js +59 -0
  72. package/internal-unstable/admin-ui/pages/App/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-App.esm.js +55 -0
  73. package/internal-unstable/admin-ui/pages/App/package.json +4 -0
  74. package/internal-unstable/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-CreateItemPage.cjs.d.ts +2 -0
  75. package/internal-unstable/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-CreateItemPage.cjs.js +116 -0
  76. package/internal-unstable/admin-ui/pages/CreateItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-CreateItemPage.esm.js +112 -0
  77. package/internal-unstable/admin-ui/pages/CreateItemPage/package.json +4 -0
  78. package/internal-unstable/admin-ui/pages/HomePage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-HomePage.cjs.d.ts +2 -0
  79. package/internal-unstable/admin-ui/pages/HomePage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-HomePage.cjs.js +336 -0
  80. package/internal-unstable/admin-ui/pages/HomePage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-HomePage.esm.js +332 -0
  81. package/internal-unstable/admin-ui/pages/HomePage/package.json +4 -0
  82. package/internal-unstable/admin-ui/pages/ItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ItemPage.cjs.d.ts +2 -0
  83. package/internal-unstable/admin-ui/pages/ItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ItemPage.cjs.js +463 -0
  84. package/internal-unstable/admin-ui/pages/ItemPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ItemPage.esm.js +455 -0
  85. package/internal-unstable/admin-ui/pages/ItemPage/package.json +4 -0
  86. package/internal-unstable/admin-ui/pages/ListPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ListPage.cjs.d.ts +2 -0
  87. package/internal-unstable/admin-ui/pages/ListPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ListPage.cjs.js +1195 -0
  88. package/internal-unstable/admin-ui/pages/ListPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-ListPage.esm.js +1187 -0
  89. package/internal-unstable/admin-ui/pages/ListPage/package.json +4 -0
  90. package/internal-unstable/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-NoAccessPage.cjs.d.ts +2 -0
  91. package/internal-unstable/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-NoAccessPage.cjs.js +40 -0
  92. package/internal-unstable/admin-ui/pages/NoAccessPage/dist/nixxie-cms-core-internal-unstable-admin-ui-pages-NoAccessPage.esm.js +35 -0
  93. package/internal-unstable/admin-ui/pages/NoAccessPage/package.json +4 -0
  94. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.d.ts +2 -0
  95. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.js +51 -0
  96. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.esm.js +38 -0
  97. package/internal-unstable/artifacts/package.json +4 -0
  98. package/package.json +44 -44
  99. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +44 -15
  100. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +44 -15
  101. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +3 -3
  102. package/scripts/dist/nixxie-cms-core-scripts.esm.js +3 -3
  103. package/src/admin-ui/admin-meta-graphql.ts +168 -168
  104. package/src/admin-ui/components/CommandPalette.tsx +433 -431
  105. package/src/admin-ui/components/Navigation.tsx +389 -385
  106. package/src/admin-ui/components/PageContainer.tsx +311 -310
  107. package/src/admin-ui/components/WelcomeDialog.tsx +1 -1
  108. package/src/admin-ui/context.tsx +338 -338
  109. package/src/admin-ui/templates/app.ts +60 -60
  110. package/src/admin-ui/templates/create-item.ts +5 -5
  111. package/src/admin-ui/templates/home.ts +2 -2
  112. package/src/admin-ui/templates/item.tsx +5 -5
  113. package/src/admin-ui/templates/list.tsx +5 -5
  114. package/src/admin-ui/templates/next-config.ts +29 -0
  115. package/src/admin-ui/templates/no-access.ts +7 -7
  116. package/src/fields/types/bigInt/index.ts +181 -181
  117. package/src/fields/types/bytes/index.ts +275 -275
  118. package/src/fields/types/calendarDay/index.ts +194 -194
  119. package/src/fields/types/checkbox/index.ts +76 -76
  120. package/src/fields/types/decimal/index.ts +182 -182
  121. package/src/fields/types/file/index.ts +168 -168
  122. package/src/fields/types/float/index.ts +133 -133
  123. package/src/fields/types/image/index.ts +244 -244
  124. package/src/fields/types/integer/index.ts +156 -156
  125. package/src/fields/types/json/index.ts +77 -77
  126. package/src/fields/types/multiselect/index.ts +212 -212
  127. package/src/fields/types/password/index.ts +241 -241
  128. package/src/fields/types/relationship/index.ts +381 -381
  129. package/src/fields/types/relationship/views/RelationshipTable.tsx +190 -190
  130. package/src/fields/types/select/index.ts +226 -226
  131. package/src/fields/types/text/index.ts +207 -207
  132. package/src/fields/types/timestamp/index.ts +116 -116
  133. package/src/fields/types/virtual/index.ts +108 -108
  134. package/src/helpers.ts +342 -316
  135. package/src/index.ts +4 -0
  136. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/id-field-view.tsx +167 -167
  137. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/App/index.tsx +22 -22
  138. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/CreateItemPage/index.tsx +71 -71
  139. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/HomePage/index.tsx +333 -333
  140. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/common.tsx +358 -358
  141. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/index.tsx +483 -483
  142. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/FilterAdd.tsx +221 -221
  143. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/PaginationControls.tsx +170 -170
  144. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/Tag.tsx +72 -72
  145. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/index.tsx +1006 -1006
  146. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/NoAccessPage/index.tsx +24 -24
  147. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/artifacts.ts +5 -5
  148. package/src/lib/context/createContext.ts +165 -161
  149. package/src/lib/core/initialise-lists.ts +1097 -1097
  150. package/src/lib/id-field.ts +214 -214
  151. package/src/lib/telemetry.ts +342 -342
  152. package/src/schema.ts +237 -233
  153. package/src/scripts/telemetry.ts +1 -1
  154. package/src/types/config/index.ts +400 -333
  155. package/src/types/config/lists.ts +4 -4
  156. package/src/types/context.ts +700 -530
  157. package/src/types/next-fields.ts +499 -499
  158. package/src/types/telemetry.ts +51 -51
  159. package/tests/telemetry.test.ts +361 -361
  160. package/CHANGELOG.md +0 -3158
  161. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/package.json +0 -4
  162. package/___internal-do-not-use-will-break-in-patch/admin-ui/next-config/package.json +0 -4
  163. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/package.json +0 -4
  164. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/package.json +0 -4
  165. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/package.json +0 -4
  166. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/package.json +0 -4
  167. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/package.json +0 -4
  168. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/package.json +0 -4
  169. package/___internal-do-not-use-will-break-in-patch/artifacts/package.json +0 -4
  170. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts.map +0 -1
  171. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts.map +0 -1
  172. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts.map +0 -1
  173. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts.map +0 -1
  174. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts.map +0 -1
  175. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts.map +0 -1
  176. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts.map +0 -1
  177. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts.map +0 -1
  178. /package/dist/{common-1a350e11.cjs.js → common-5933f758.cjs.js} +0 -0
  179. /package/dist/{common-29fc82e6.esm.js → common-ea5c441a.esm.js} +0 -0
  180. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/id-field-view.d.ts +0 -0
  181. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/App/index.d.ts +0 -0
  182. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/CreateItemPage/index.d.ts +0 -0
  183. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/HomePage/index.d.ts +0 -0
  184. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/index.d.ts +0 -0
  185. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/index.d.ts +0 -0
  186. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/NoAccessPage/index.d.ts +0 -0
  187. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/artifacts.d.ts +0 -0
@@ -1,24 +1,24 @@
1
- import { Icon } from '@keystar/ui/icon'
2
- import { shieldAlertIcon } from '@keystar/ui/icon/icons/shieldAlertIcon'
3
- import { Heading, Text } from '@keystar/ui/typography'
4
-
5
- import { ErrorContainer } from '../../../../admin-ui/components/Errors'
6
-
7
- type NoAccessPage = { sessionsEnabled: boolean }
8
-
9
- export const getNoAccessPage = (props: NoAccessPage) => () => <NoAccessPage {...props} />
10
-
11
- export function NoAccessPage(_: NoAccessPage) {
12
- return (
13
- <ErrorContainer>
14
- <Icon color="neutral" src={shieldAlertIcon} size="large" />
15
- <Heading elementType="h1" margin={0}>
16
- No access
17
- </Heading>
18
- <Text>
19
- Unable to access to this page. You may need to request access from your system
20
- administrator, or sign in with a different account.
21
- </Text>
22
- </ErrorContainer>
23
- )
24
- }
1
+ import { Icon } from '@keystar/ui/icon'
2
+ import { shieldAlertIcon } from '@keystar/ui/icon/icons/shieldAlertIcon'
3
+ import { Heading, Text } from '@keystar/ui/typography'
4
+
5
+ import { ErrorContainer } from '../../../../admin-ui/components/Errors'
6
+
7
+ type NoAccessPage = { sessionsEnabled: boolean }
8
+
9
+ export const getNoAccessPage = (props: NoAccessPage) => () => <NoAccessPage {...props} />
10
+
11
+ export function NoAccessPage(_: NoAccessPage) {
12
+ return (
13
+ <ErrorContainer>
14
+ <Icon color="neutral" src={shieldAlertIcon} size="large" />
15
+ <Heading elementType="h1" margin={0}>
16
+ No access
17
+ </Heading>
18
+ <Text>
19
+ Unable to access to this page. You may need to request access from your system
20
+ administrator, or sign in with a different account.
21
+ </Text>
22
+ </ErrorContainer>
23
+ )
24
+ }
@@ -1,5 +1,5 @@
1
- export { buildArtifacts, generateArtifacts } from '../artifacts'
2
- export { createExpressServer } from '../lib/express'
3
- export { withMigrate } from '../lib/migrations'
4
- export { createSystem } from '../lib/system'
5
- export { ExitError } from '../scripts/utils'
1
+ export { buildArtifacts, generateArtifacts } from '../artifacts'
2
+ export { createExpressServer } from '../lib/express'
3
+ export { withMigrate } from '../lib/migrations'
4
+ export { createSystem } from '../lib/system'
5
+ export { ExitError } from '../scripts/utils'
@@ -1,161 +1,165 @@
1
- import type { IncomingMessage, ServerResponse } from 'http'
2
- import { type ExecutionResult, type GraphQLSchema, graphql, print } from 'graphql'
3
- import type { NixxieContext, NixxieGraphQLAPI, NixxieConfig } from '../../types'
4
-
5
- import { type InitialisedList } from '../core/initialise-lists'
6
- import { getDbFactory, getQueryFactory } from './api'
7
-
8
- export function createContext({
9
- config,
10
- lists,
11
- graphQLSchemas,
12
- prismaClient,
13
- prismaTypes,
14
- }: {
15
- config: NixxieConfig
16
- lists: Record<string, InitialisedList>
17
- graphQLSchemas: {
18
- public: GraphQLSchema
19
- internal: GraphQLSchema
20
- }
21
- prismaClient: unknown
22
- prismaTypes: {
23
- DbNull: unknown
24
- JsonNull: unknown
25
- }
26
- }) {
27
- const dbFactories: Record<string, ReturnType<typeof getDbFactory>> = {}
28
- for (const [listKey, list] of Object.entries(lists)) {
29
- dbFactories[listKey] = getDbFactory(list, graphQLSchemas.public)
30
- }
31
-
32
- const dbFactoriesInternal: Record<string, ReturnType<typeof getDbFactory>> = {}
33
- for (const [listKey, list] of Object.entries(lists)) {
34
- dbFactoriesInternal[listKey] = getDbFactory(list, graphQLSchemas.internal)
35
- }
36
-
37
- const queryFactories: Record<string, ReturnType<typeof getQueryFactory>> = {}
38
- for (const [listKey, list] of Object.entries(lists)) {
39
- queryFactories[listKey] = getQueryFactory(list, graphQLSchemas.public)
40
- }
41
-
42
- const queryFactoriesInternal: Record<string, ReturnType<typeof getQueryFactory>> = {}
43
- for (const [listKey, list] of Object.entries(lists)) {
44
- queryFactoriesInternal[listKey] = getQueryFactory(list, graphQLSchemas.internal)
45
- }
46
-
47
- const construct = ({
48
- prisma,
49
- req,
50
- res,
51
- session,
52
- internal,
53
- sudo,
54
- }: {
55
- prisma: any
56
- req?: IncomingMessage
57
- res?: ServerResponse
58
- session?: unknown
59
- internal: boolean
60
- sudo: boolean
61
- }) => {
62
- const schema = internal ? graphQLSchemas.internal : graphQLSchemas.public
63
- const rawGraphQL: NixxieGraphQLAPI['raw'] = async ({ query, variables }) => {
64
- const source = typeof query === 'string' ? query : print(query)
65
- return (await graphql({
66
- schema,
67
- source,
68
- contextValue: context,
69
- variableValues: variables,
70
- })) as ExecutionResult<any>
71
- }
72
-
73
- const runGraphQL: NixxieGraphQLAPI['run'] = async ({ query, variables }) => {
74
- const result = await rawGraphQL({ query, variables })
75
- if (result.errors?.length) throw result.errors[0]
76
- return result.data as any
77
- }
78
-
79
- const context: NixxieContext = {
80
- prisma,
81
- db: {},
82
- query: {},
83
- graphql: { raw: rawGraphQL, run: runGraphQL, schema },
84
- services: {
85
- email: config.email ?? null,
86
- jobs: config.jobs ?? null,
87
- cache: config.cache ?? null,
88
- audit: config.audit ?? null,
89
- webhooks: config.webhooks ?? null,
90
- rateLimit: config.rateLimit ?? null,
91
- health: config.health ?? null,
92
- },
93
-
94
- transaction: async (f, opts) => {
95
- return await prisma.$transaction(async (prisma_: any) => {
96
- const newContext = construct({
97
- prisma: prisma_,
98
- req,
99
- res,
100
- session,
101
- internal,
102
- sudo,
103
- })
104
-
105
- return await f(newContext)
106
- }, opts)
107
- },
108
-
109
- req,
110
- res,
111
- sessionStrategy: config.session,
112
- ...(session ? { session } : {}),
113
-
114
- withRequest: async (newReq, newRes) => {
115
- const newContext = construct({
116
- prisma,
117
- req: newReq,
118
- res: newRes,
119
- session,
120
- internal,
121
- sudo,
122
- })
123
- return newContext.withSession(
124
- (await config.session?.get({ context: newContext })) ?? undefined
125
- )
126
- },
127
-
128
- withSession: session => {
129
- return construct({ prisma, req, res, session, internal, sudo })
130
- },
131
-
132
- // privilege escalation
133
- internal: () => construct({ prisma, req, res, session, internal: true, sudo }),
134
- sudo: () => construct({ prisma, req, res, session, internal: true, sudo: true }),
135
-
136
- __internal: {
137
- sudo,
138
- lists,
139
- prisma: {
140
- ...prismaTypes,
141
- },
142
- },
143
- }
144
-
145
- const _dbFactories = internal ? dbFactoriesInternal : dbFactories
146
- const _queryFactories = internal ? queryFactoriesInternal : queryFactories
147
-
148
- for (const listKey of Object.keys(lists)) {
149
- context.db[listKey] = _dbFactories[listKey](context)
150
- context.query[listKey] = _queryFactories[listKey](context)
151
- }
152
-
153
- return context
154
- }
155
-
156
- return construct({
157
- prisma: prismaClient,
158
- internal: false,
159
- sudo: false,
160
- })
161
- }
1
+ import type { IncomingMessage, ServerResponse } from 'http'
2
+ import { type ExecutionResult, type GraphQLSchema, graphql, print } from 'graphql'
3
+ import type { NixxieContext, NixxieGraphQLAPI, NixxieConfig } from '../../types'
4
+
5
+ import { type InitialisedList } from '../core/initialise-lists'
6
+ import { getDbFactory, getQueryFactory } from './api'
7
+
8
+ export function createContext({
9
+ config,
10
+ lists,
11
+ graphQLSchemas,
12
+ prismaClient,
13
+ prismaTypes,
14
+ }: {
15
+ config: NixxieConfig
16
+ lists: Record<string, InitialisedList>
17
+ graphQLSchemas: {
18
+ public: GraphQLSchema
19
+ internal: GraphQLSchema
20
+ }
21
+ prismaClient: unknown
22
+ prismaTypes: {
23
+ DbNull: unknown
24
+ JsonNull: unknown
25
+ }
26
+ }) {
27
+ const dbFactories: Record<string, ReturnType<typeof getDbFactory>> = {}
28
+ for (const [listKey, list] of Object.entries(lists)) {
29
+ dbFactories[listKey] = getDbFactory(list, graphQLSchemas.public)
30
+ }
31
+
32
+ const dbFactoriesInternal: Record<string, ReturnType<typeof getDbFactory>> = {}
33
+ for (const [listKey, list] of Object.entries(lists)) {
34
+ dbFactoriesInternal[listKey] = getDbFactory(list, graphQLSchemas.internal)
35
+ }
36
+
37
+ const queryFactories: Record<string, ReturnType<typeof getQueryFactory>> = {}
38
+ for (const [listKey, list] of Object.entries(lists)) {
39
+ queryFactories[listKey] = getQueryFactory(list, graphQLSchemas.public)
40
+ }
41
+
42
+ const queryFactoriesInternal: Record<string, ReturnType<typeof getQueryFactory>> = {}
43
+ for (const [listKey, list] of Object.entries(lists)) {
44
+ queryFactoriesInternal[listKey] = getQueryFactory(list, graphQLSchemas.internal)
45
+ }
46
+
47
+ const construct = ({
48
+ prisma,
49
+ req,
50
+ res,
51
+ session,
52
+ internal,
53
+ sudo,
54
+ }: {
55
+ prisma: any
56
+ req?: IncomingMessage
57
+ res?: ServerResponse
58
+ session?: unknown
59
+ internal: boolean
60
+ sudo: boolean
61
+ }) => {
62
+ const schema = internal ? graphQLSchemas.internal : graphQLSchemas.public
63
+ const rawGraphQL: NixxieGraphQLAPI['raw'] = async ({ query, variables }) => {
64
+ const source = typeof query === 'string' ? query : print(query)
65
+ return (await graphql({
66
+ schema,
67
+ source,
68
+ contextValue: context,
69
+ variableValues: variables,
70
+ })) as ExecutionResult<any>
71
+ }
72
+
73
+ const runGraphQL: NixxieGraphQLAPI['run'] = async ({ query, variables }) => {
74
+ const result = await rawGraphQL({ query, variables })
75
+ if (result.errors?.length) throw result.errors[0]
76
+ return result.data as any
77
+ }
78
+
79
+ const context: NixxieContext = {
80
+ prisma,
81
+ db: {},
82
+ query: {},
83
+ graphql: { raw: rawGraphQL, run: runGraphQL, schema },
84
+ services: {
85
+ email: config.email ?? null,
86
+ jobs: config.jobs ?? null,
87
+ cache: config.cache ?? null,
88
+ audit: config.audit ?? null,
89
+ webhooks: config.webhooks ?? null,
90
+ rateLimit: config.rateLimit ?? null,
91
+ health: config.health ?? null,
92
+ storage: config.storage ?? null,
93
+ search: config.search ?? null,
94
+ notifications: config.notifications ?? null,
95
+ ai: config.ai ?? null,
96
+ },
97
+
98
+ transaction: async (f, opts) => {
99
+ return await prisma.$transaction(async (prisma_: any) => {
100
+ const newContext = construct({
101
+ prisma: prisma_,
102
+ req,
103
+ res,
104
+ session,
105
+ internal,
106
+ sudo,
107
+ })
108
+
109
+ return await f(newContext)
110
+ }, opts)
111
+ },
112
+
113
+ req,
114
+ res,
115
+ sessionStrategy: config.session,
116
+ ...(session ? { session } : {}),
117
+
118
+ withRequest: async (newReq, newRes) => {
119
+ const newContext = construct({
120
+ prisma,
121
+ req: newReq,
122
+ res: newRes,
123
+ session,
124
+ internal,
125
+ sudo,
126
+ })
127
+ return newContext.withSession(
128
+ (await config.session?.get({ context: newContext })) ?? undefined
129
+ )
130
+ },
131
+
132
+ withSession: session => {
133
+ return construct({ prisma, req, res, session, internal, sudo })
134
+ },
135
+
136
+ // privilege escalation
137
+ internal: () => construct({ prisma, req, res, session, internal: true, sudo }),
138
+ sudo: () => construct({ prisma, req, res, session, internal: true, sudo: true }),
139
+
140
+ __internal: {
141
+ sudo,
142
+ lists,
143
+ prisma: {
144
+ ...prismaTypes,
145
+ },
146
+ },
147
+ }
148
+
149
+ const _dbFactories = internal ? dbFactoriesInternal : dbFactories
150
+ const _queryFactories = internal ? queryFactoriesInternal : queryFactories
151
+
152
+ for (const listKey of Object.keys(lists)) {
153
+ context.db[listKey] = _dbFactories[listKey](context)
154
+ context.query[listKey] = _queryFactories[listKey](context)
155
+ }
156
+
157
+ return context
158
+ }
159
+
160
+ return construct({
161
+ prisma: prismaClient,
162
+ internal: false,
163
+ sudo: false,
164
+ })
165
+ }