@nixxie-cms/core 1.0.0 → 1.0.1

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 (186) 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 +15 -15
  100. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +15 -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/no-access.ts +7 -7
  115. package/src/fields/types/bigInt/index.ts +181 -181
  116. package/src/fields/types/bytes/index.ts +275 -275
  117. package/src/fields/types/calendarDay/index.ts +194 -194
  118. package/src/fields/types/checkbox/index.ts +76 -76
  119. package/src/fields/types/decimal/index.ts +182 -182
  120. package/src/fields/types/file/index.ts +168 -168
  121. package/src/fields/types/float/index.ts +133 -133
  122. package/src/fields/types/image/index.ts +244 -244
  123. package/src/fields/types/integer/index.ts +156 -156
  124. package/src/fields/types/json/index.ts +77 -77
  125. package/src/fields/types/multiselect/index.ts +212 -212
  126. package/src/fields/types/password/index.ts +241 -241
  127. package/src/fields/types/relationship/index.ts +381 -381
  128. package/src/fields/types/relationship/views/RelationshipTable.tsx +190 -190
  129. package/src/fields/types/select/index.ts +226 -226
  130. package/src/fields/types/text/index.ts +207 -207
  131. package/src/fields/types/timestamp/index.ts +116 -116
  132. package/src/fields/types/virtual/index.ts +108 -108
  133. package/src/helpers.ts +342 -316
  134. package/src/index.ts +4 -0
  135. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/id-field-view.tsx +167 -167
  136. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/App/index.tsx +22 -22
  137. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/CreateItemPage/index.tsx +71 -71
  138. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/HomePage/index.tsx +333 -333
  139. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/common.tsx +358 -358
  140. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/index.tsx +483 -483
  141. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/FilterAdd.tsx +221 -221
  142. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/PaginationControls.tsx +170 -170
  143. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/Tag.tsx +72 -72
  144. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/index.tsx +1006 -1006
  145. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/NoAccessPage/index.tsx +24 -24
  146. package/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/artifacts.ts +5 -5
  147. package/src/lib/context/createContext.ts +165 -161
  148. package/src/lib/core/initialise-lists.ts +1097 -1097
  149. package/src/lib/id-field.ts +214 -214
  150. package/src/lib/telemetry.ts +342 -342
  151. package/src/schema.ts +237 -233
  152. package/src/scripts/telemetry.ts +1 -1
  153. package/src/types/config/index.ts +400 -333
  154. package/src/types/config/lists.ts +4 -4
  155. package/src/types/context.ts +700 -530
  156. package/src/types/next-fields.ts +499 -499
  157. package/src/types/telemetry.ts +51 -51
  158. package/tests/telemetry.test.ts +361 -361
  159. package/CHANGELOG.md +0 -3158
  160. package/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view/package.json +0 -4
  161. package/___internal-do-not-use-will-break-in-patch/admin-ui/next-config/package.json +0 -4
  162. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/package.json +0 -4
  163. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/package.json +0 -4
  164. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/package.json +0 -4
  165. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/package.json +0 -4
  166. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/package.json +0 -4
  167. package/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/package.json +0 -4
  168. package/___internal-do-not-use-will-break-in-patch/artifacts/package.json +0 -4
  169. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/id-field-view.d.ts.map +0 -1
  170. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/App/index.d.ts.map +0 -1
  171. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/CreateItemPage/index.d.ts.map +0 -1
  172. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/HomePage/index.d.ts.map +0 -1
  173. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ItemPage/index.d.ts.map +0 -1
  174. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/ListPage/index.d.ts.map +0 -1
  175. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/admin-ui/pages/NoAccessPage/index.d.ts.map +0 -1
  176. package/dist/declarations/src/___internal-do-not-use-will-break-in-patch/artifacts.d.ts.map +0 -1
  177. /package/dist/{common-1a350e11.cjs.js → common-5933f758.cjs.js} +0 -0
  178. /package/dist/{common-29fc82e6.esm.js → common-ea5c441a.esm.js} +0 -0
  179. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/id-field-view.d.ts +0 -0
  180. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/App/index.d.ts +0 -0
  181. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/CreateItemPage/index.d.ts +0 -0
  182. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/HomePage/index.d.ts +0 -0
  183. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ItemPage/index.d.ts +0 -0
  184. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/ListPage/index.d.ts +0 -0
  185. /package/dist/declarations/src/{___internal-do-not-use-will-break-in-patch → internal-unstable}/admin-ui/pages/NoAccessPage/index.d.ts +0 -0
  186. /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
+ }